diff --git a/.bazelrc b/.bazelrc new file mode 100644 index 0000000..177ad1e --- /dev/null +++ b/.bazelrc @@ -0,0 +1,13 @@ +# Flags needed while the Android rules are being migrated to Starlark. +common --experimental_google_legacy_api +common --experimental_enable_android_migration_apis +common --android_sdk=@androidsdk//:sdk +common:core_library_desugaring --desugar_java8_libs +common --incompatible_disable_native_android_rules=true + +# Flags to enable mobile-install v3 +mobile-install --mode=skylark --mobile_install_aspect=@rules_android//mobile_install:mi.bzl --mobile_install_supported_rules=android_binary +# Required to invoke the Studio deployer jar +mobile-install --tool_java_runtime_version=17 +mobile-install –tool_java_tools_version=17 +--javacopt="-J-Xms8G -J-Xmx8G" diff --git a/.bazelversion b/.bazelversion new file mode 100644 index 0000000..81be669 --- /dev/null +++ b/.bazelversion @@ -0,0 +1 @@ +8.0.0-pre.20240826.1 \ No newline at end of file diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..965cc27 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,6 @@ +[*.{kt, kts}] +indent_size = 4 +insert_final_newline = true +max_line_length = 100 +ij_kotlin_allow_trailing_comma = true +ij_kotlin_allow_trailing_comma_on_call_site = true \ No newline at end of file diff --git a/.gitignore b/.gitignore index fff5b46..fac9af6 100644 --- a/.gitignore +++ b/.gitignore @@ -59,3 +59,9 @@ fastlane/Preview.html fastlane/screenshots fastlane/test_output fastlane/readme.md +*.lock +bazel-out/ +bazel-bin/ +bazel-testlogs/ +bazel-Cheddar/ +.gitignore \ No newline at end of file diff --git a/BUILD.bazel b/BUILD.bazel new file mode 100644 index 0000000..4f9c8c1 --- /dev/null +++ b/BUILD.bazel @@ -0,0 +1,25 @@ +load("@rules_kotlin//kotlin:core.bzl", "kt_compiler_plugin") +load("@rules_kotlin//kotlin:lint.bzl", "ktlint_config", "ktlint_fix", "ktlint_test") + +kt_compiler_plugin( + name = "jetpack_compose_compiler_plugin", + id = "androidx.compose.compiler", + target_embedded_compiler = True, + visibility = ["//visibility:public"], + deps = [ + "@maven//:org_jetbrains_kotlin_kotlin_compose_compiler_plugin_embeddable", + ], +) + +filegroup( + name = "editorconfig", + srcs = [".editorconfig"], +) + +ktlint_config( + name = "ktlint_editorconfig", + android_rules_enabled = False, + editorconfig = ":editorconfig", + experimental_rules_enabled = False, + visibility = ["//visibility:public"], +) diff --git a/MODULE.bazel b/MODULE.bazel new file mode 100644 index 0000000..dbb432e --- /dev/null +++ b/MODULE.bazel @@ -0,0 +1,139 @@ +module(name = "cheddarapp") + +remote_android_extensions = use_extension("@bazel_tools//tools/android:android_extensions.bzl", "remote_android_tools_extensions") + +use_repo(remote_android_extensions, "android_gmaven_r8", "android_tools") + +bazel_dep( + name = "bazel_skylib", + version = "1.7.1", +) + +bazel_dep( + name = "rules_java", + version = "7.9.0", +) + +bazel_dep( + name = "platforms", + version = "0.0.10", +) + +bazel_dep( + name = "rules_robolectric", + version = "4.13", +) + +bazel_dep( + name = "rules_android", + version = "0.5.1", +) + +bazel_dep( + name = "rules_kotlin", + version = "2.0.0", +) + +bazel_dep( + name = "rules_jvm_external", + version = "0.0", +) + +archive_override( + module_name = "rules_jvm_external", + integrity = "sha256-gukGSHM/wBgkJhkXGgzMBtD36aYBzqVNuhYr5b3lL8g=", + strip_prefix = "rules_jvm_external-9a10cae516d46ccce805d03b7886331bd55fb4c1", + urls = ["https://github.com/bazelbuild/rules_jvm_external/archive/9a10cae516d46ccce805d03b7886331bd55fb4c1.tar.gz"], +) + +register_toolchains( + "@rules_android//toolchains/android:android_default_toolchain", + "@rules_android//toolchains/android_sdk:android_sdk_tools", +) + +android_sdk_repository_extension = use_extension("@rules_android//rules/android_sdk_repository:rule.bzl", "android_sdk_repository_extension") + +use_repo(android_sdk_repository_extension, "androidsdk") + +maven = use_extension("@rules_jvm_external//:extensions.bzl", "maven") + +maven.install( + artifacts = [ + "org.jetbrains.kotlinx:kotlinx-collections-immutable-jvm:0.3.4", + "org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.3", + "org.jetbrains.kotlinx:kotlinx-serialization-core:1.5.1", + "org.jetbrains.kotlinx:kotlinx-serialization-runtime:jar:1.0-M1-1.4.0-rc", + "org.jetbrains.kotlinx:kotlinx-serialization-json:1.5.1", + "org.jsoup:jsoup:1.16.1", + "junit:junit:4.13.2", + "com.jakewharton.timber:timber:5.0.1", + "com.jakewharton.retrofit:retrofit2-kotlinx-serialization-converter:0.8.0", + "com.squareup.okhttp3:okhttp:4.9.3", + "com.squareup.okhttp3:logging-interceptor:4.9.3", + "com.squareup.retrofit2:retrofit:2.9.0", + "com.google.dagger:dagger:2.45", + "com.google.dagger:dagger-compiler:2.45", + "com.google.dagger:hilt-android:2.51", + "com.squareup.moshi:moshi:jar:1.15.1", + "com.squareup.moshi:moshi-kotlin:jar:1.15.1", + "com.squareup.moshi:moshi-kotlin-codegen:jar:1.15.1", + "org.jetbrains.kotlinx:kotlinx-coroutines-test:1.8.1", + "androidx.browser:browser:jar:1.5.0", + "androidx.activity:activity:1.8.0-alpha06", + "androidx.activity:activity-compose:1.5.1", + "androidx.activity:activity-ktx:1.5.1", + "androidx.fragment:fragment:1.5.1", + "androidx.compose.material3:material3:jar:1.2.1", + "androidx.loader:loader:1.0.0", + "androidx.lifecycle:lifecycle-viewmodel:2.6.1", + "androidx.lifecycle:lifecycle-viewmodel-savedstate:2.5.1", + "androidx.compose.ui:ui-android:1.6.0", + "androidx.lifecycle:lifecycle-runtime-ktx:2.5.1", + "androidx.lifecycle:lifecycle-process:2.4.1", + "androidx.lifecycle:lifecycle-livedata-core:2.5.1", + "androidx.collection:collection:1.0.0", + "androidx.compose.material:material-ripple:1.6.0", + "androidx.compose.runtime:runtime:1.6.0", + "androidx.compose.material:material:1.6.8", + "androidx.compose.ui:ui-graphics:1.6.0", + "androidx.compose.ui:ui-text:1.6.8", + "androidx.compose.ui:ui-unit:1.6.0", + "androidx.compose.ui:ui-util:1.0.0", + "androidx.compose.ui:ui-geometry:1.6.0", + "androidx.compose.ui:ui-tooling:1.6.8", + "androidx.lifecycle:lifecycle-common:2.5.1", + "androidx.lifecycle:lifecycle-runtime:2.5.1", + "io.coil-kt:coil:jar:2.5.0", + "io.coil-kt:coil-svg:jar:2.7.0", + "androidx.compose.material:material-icons-extended:jar:1.5.0", + "androidx.compose.material:material-icons-core:jar:1.6.8", + "io.coil-kt:coil-compose:jar:2.7.0", + "org.jetbrains.kotlin:kotlin-compose-compiler-plugin-embeddable:jar:2.0.0", + "androidx.constraintlayout:constraintlayout:jar:2.1.4", + "androidx.navigation:navigation-compose:jar:2.5.3", + "androidx.lifecycle:lifecycle-common-java8:2.5.1", + "androidx.lifecycle:lifecycle-viewmodel-ktx:2.6.1", + "androidx.hilt:hilt-lifecycle-viewmodel:jar:1.0.0-alpha03", + "androidx.hilt:hilt-navigation-compose:jar:1.2.0", + "androidx.constraintlayout:constraintlayout-compose:jar:1.1.0-alpha11", + "androidx.lifecycle:lifecycle-viewmodel-compose:jar:2.6.1", + "androidx.lifecycle:lifecycle-runtime-compose:jar:2.6.1", + "androidx.core:core-splashscreen:aar:1.0.0-beta02", + "app.cash.turbine:turbine-jvm:jar:1.1.0", + "org.jetbrains.kotlin:kotlin-test:jar:2.0.0", + "org.robolectric:robolectric:4.13", + "com.google.truth:truth:1.1.2", + "com.google.auto.value:auto-value:jar:1.11.0", + "androidx.compose.ui:ui-tooling-preview:1.7.0", + "androidx.multidex:multidex:2.0.1", + "com.google.dagger:hilt-android-compiler:2.52", + ], + repositories = [ + "https://maven.google.com", + "https://repo1.maven.org/maven2", + "https://androidx.dev/storage/compose-compiler/repository/", + ], + version_conflict_policy = "pinned", +) + +use_repo(maven, "maven") diff --git a/WORKSPACE.bzlmod b/WORKSPACE.bzlmod new file mode 100644 index 0000000..b554743 --- /dev/null +++ b/WORKSPACE.bzlmod @@ -0,0 +1 @@ +android_sdk_repository(name = "androidsdk") \ No newline at end of file diff --git a/app/BUILD.bazel b/app/BUILD.bazel new file mode 100644 index 0000000..08c3215 --- /dev/null +++ b/app/BUILD.bazel @@ -0,0 +1,52 @@ +load("@rules_android//android:rules.bzl", "android_binary") +load("@rules_kotlin//kotlin:android.bzl", "kt_android_library") +load("@rules_kotlin//kotlin:lint.bzl", "ktlint_fix", "ktlint_test") + +kt_android_library( + name = "lib", + srcs = glob(["**/*.kt"]), + custom_package = "co.adrianblan.cheddar", + manifest = "src/main/AndroidManifest.xml", + plugins = ["//:jetpack_compose_compiler_plugin"], + resource_files = glob(["src/main/res/**/*"]), + visibility = ["//visibility:public"], + exports = [ + "//core/ui:lib", + "@maven//:androidx_core_core_splashscreen", + ], + deps = [ + "//feature/storydetail:lib", + "//feature/storyfeed:lib", + "@maven//:androidx_activity_activity", + "@maven//:androidx_multidex_multidex_2_0_1", + "@maven//:javax_inject_javax_inject", + ], +) + +android_binary( + name = "app", + custom_package = "co.adrianblan.cheddar.app", + manifest = "src/main/AndroidManifest.xml", + # mulltidex = "native", + deps = [ + ":lib", + ":lib_kt", + "//core/ui:lib", + "//feature/storydetail:lib", + "//feature/storyfeed:lib", + "@maven//:androidx_activity_activity", + "@maven//:androidx_core_core_splashscreen", + ], +) + +ktlint_fix( + name = "lint_fix", + srcs = glob(["**/*.kt"]), + config = "//:ktlint_editorconfig", +) + +ktlint_test( + name = "lint_test", + srcs = glob(["**/*.kt"]), + config = "//:ktlint_editorconfig", +) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 53a6d43..b5d363d 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -61,4 +61,5 @@ dependencies { implementation(libs.timber) implementation(libs.coil) debugImplementation(libs.leakcanary) +// runtimeOnly(libs.androidx.multidex) } \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index f63d73b..1eb644b 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -1,6 +1,7 @@ + xmlns:android="http://schemas.android.com/apk/res/android" + package = "co.adrianblan.cheddar"> diff --git a/app/src/main/java/co/adrianblan/cheddar/BuildConfig.kt b/app/src/main/java/co/adrianblan/cheddar/BuildConfig.kt new file mode 100644 index 0000000..2e0662f --- /dev/null +++ b/app/src/main/java/co/adrianblan/cheddar/BuildConfig.kt @@ -0,0 +1,5 @@ +package co.adrianblan.cheddar + +object BuildConfig { + const val DEBUG: Boolean = true +} diff --git a/app/src/main/java/co/adrianblan/cheddar/CheddarApplication.kt b/app/src/main/java/co/adrianblan/cheddar/CheddarApplication.kt index 7b6c007..6ca3add 100644 --- a/app/src/main/java/co/adrianblan/cheddar/CheddarApplication.kt +++ b/app/src/main/java/co/adrianblan/cheddar/CheddarApplication.kt @@ -1,14 +1,16 @@ package co.adrianblan.cheddar -import android.app.Application import co.adrianblan.ui.coil.CoilImageLoaderFactory import coil.Coil import dagger.hilt.android.HiltAndroidApp import timber.log.Timber +//import androidx.multidex.MultiDexApplication +//@HiltAndroidApp(MultiDexApplication::class) +//class CheddarApplication : Hilt_CheddarApplication() { +//class CheddarApplication : Hilt_CheddarApplication() { @HiltAndroidApp -class CheddarApplication : Application() { - +class CheddarApplication : Hilt_CheddarApplication() { override fun onCreate() { super.onCreate() @@ -18,4 +20,4 @@ class CheddarApplication : Application() { Coil.setImageLoader(CoilImageLoaderFactory(this)) } -} \ No newline at end of file +} diff --git a/app/src/main/java/co/adrianblan/cheddar/MainActivity.kt b/app/src/main/java/co/adrianblan/cheddar/MainActivity.kt index 9042456..c731a0a 100644 --- a/app/src/main/java/co/adrianblan/cheddar/MainActivity.kt +++ b/app/src/main/java/co/adrianblan/cheddar/MainActivity.kt @@ -13,7 +13,6 @@ import javax.inject.Inject @AndroidEntryPoint class MainActivity : ComponentActivity() { - @Inject lateinit var customTabsLauncher: CustomTabsLauncher @@ -24,10 +23,12 @@ class MainActivity : ComponentActivity() { setContent { AppTheme { - Box { - Navigation(customTabsLauncher) + if (::customTabsLauncher.isInitialized) { + Box { + Navigation(customTabsLauncher) + } } } } } -} \ No newline at end of file +} diff --git a/app/src/main/java/co/adrianblan/cheddar/Navigation.kt b/app/src/main/java/co/adrianblan/cheddar/Navigation.kt index 38ffc7c..02339b1 100644 --- a/app/src/main/java/co/adrianblan/cheddar/Navigation.kt +++ b/app/src/main/java/co/adrianblan/cheddar/Navigation.kt @@ -10,20 +10,17 @@ import co.adrianblan.storyfeed.storyFeedRoute import co.adrianblan.storyfeed.storyFeedScreen @Composable -fun Navigation( - customTabsLauncher: CustomTabsLauncher -) { +fun Navigation(customTabsLauncher: CustomTabsLauncher) { val navController = rememberNavController() NavHost( navController = navController, - startDestination = storyFeedRoute + startDestination = storyFeedRoute, ) { - storyFeedScreen( onStoryClick = navController::navigateToTopic, onStoryContentClick = { storyUrl -> customTabsLauncher.launchUrl(storyUrl.url) - } + }, ) storyDetailScreen( onStoryContentClick = { storyUrl -> @@ -32,7 +29,7 @@ fun Navigation( onCommentUrlClick = { uri -> customTabsLauncher.launchUrl(uri.toString()) }, - onBackPressed = navController::popBackStack + onBackPressed = navController::popBackStack, ) } -} \ No newline at end of file +} diff --git a/bazel-Cheddar b/bazel-Cheddar new file mode 120000 index 0000000..faab2d9 --- /dev/null +++ b/bazel-Cheddar @@ -0,0 +1 @@ +/private/var/tmp/_bazel_rvelusamy/980eb5de3c8144aab67d02e7ff61853e/execroot/_main \ No newline at end of file diff --git a/bazel-bin b/bazel-bin new file mode 120000 index 0000000..60b27a5 --- /dev/null +++ b/bazel-bin @@ -0,0 +1 @@ +/private/var/tmp/_bazel_rvelusamy/980eb5de3c8144aab67d02e7ff61853e/execroot/_main/bazel-out/darwin_arm64-fastbuild/bin \ No newline at end of file diff --git a/bazel-out b/bazel-out new file mode 120000 index 0000000..fd5da93 --- /dev/null +++ b/bazel-out @@ -0,0 +1 @@ +/private/var/tmp/_bazel_rvelusamy/980eb5de3c8144aab67d02e7ff61853e/execroot/_main/bazel-out \ No newline at end of file diff --git a/bazel-testlogs b/bazel-testlogs new file mode 120000 index 0000000..ca20085 --- /dev/null +++ b/bazel-testlogs @@ -0,0 +1 @@ +/private/var/tmp/_bazel_rvelusamy/980eb5de3c8144aab67d02e7ff61853e/execroot/_main/bazel-out/darwin_arm64-fastbuild/testlogs \ No newline at end of file diff --git a/core/.DS_Store b/core/.DS_Store new file mode 100644 index 0000000..5c76b96 Binary files /dev/null and b/core/.DS_Store differ diff --git a/core/common/BUILD.bazel b/core/common/BUILD.bazel new file mode 100644 index 0000000..44a3828 --- /dev/null +++ b/core/common/BUILD.bazel @@ -0,0 +1,12 @@ +load("@rules_kotlin//kotlin:jvm.bzl", "kt_jvm_library") + +kt_jvm_library( + name = "lib", + srcs = glob(["**/*.kt"]), + deps = [ + "//core/model:lib", + "@maven//:org_jetbrains_kotlinx_kotlinx_coroutines_android", + "@maven//:junit_junit", + ], + visibility = ["//visibility:public"], +) \ No newline at end of file diff --git a/core/domain/BUILD.bazel b/core/domain/BUILD.bazel new file mode 100644 index 0000000..6bcf303 --- /dev/null +++ b/core/domain/BUILD.bazel @@ -0,0 +1,20 @@ +load("@rules_kotlin//kotlin:android.bzl", "kt_android_library") + +kt_android_library( + name = "lib", + srcs = glob(["src/main/java/**/*.kt"]), + custom_package = "co.adrianblan.domain", + manifest = "src/main/AndroidManifest.xml", + visibility = ["//visibility:public"], + deps = [ + "//core/common:lib", + "//core/hackernews:lib", + "//core/webpreview:lib", + "@maven//:androidx_browser_browser", + "@maven//:com_google_dagger_dagger", + "@maven//:com_google_dagger_hilt_android", + "@maven//:com_jakewharton_timber_timber", + "@maven//:org_jetbrains_kotlinx_kotlinx_coroutines_android", + "@maven//:org_jetbrains_kotlinx_kotlinx_coroutines_core_jvm", + ], +) diff --git a/core/domain/src/AndroidManifest.xml b/core/domain/src/AndroidManifest.xml new file mode 100644 index 0000000..070a38a --- /dev/null +++ b/core/domain/src/AndroidManifest.xml @@ -0,0 +1,9 @@ + + + + diff --git a/core/domain/src/main/AndroidManifest.xml b/core/domain/src/main/AndroidManifest.xml new file mode 100644 index 0000000..070a38a --- /dev/null +++ b/core/domain/src/main/AndroidManifest.xml @@ -0,0 +1,9 @@ + + + + diff --git a/core/hackernews/AndroidManifest.xml b/core/hackernews/AndroidManifest.xml new file mode 100644 index 0000000..19b4528 --- /dev/null +++ b/core/hackernews/AndroidManifest.xml @@ -0,0 +1,10 @@ + + + + + diff --git a/core/hackernews/BUILD.bazel b/core/hackernews/BUILD.bazel new file mode 100644 index 0000000..d7d7afd --- /dev/null +++ b/core/hackernews/BUILD.bazel @@ -0,0 +1,36 @@ +load("@rules_kotlin//kotlin:android.bzl", "kt_android_library") +load("@rules_kotlin//kotlin:core.bzl", "kt_compiler_plugin", "kt_ksp_plugin") + +kt_compiler_plugin( + name = "serialization_plugin", + compile_phase = True, + id = "org.jetbrains.kotlin.serialization", + stubs_phase = True, + deps = [ + "@rules_kotlin//kotlin/compiler:kotlinx-serialization-compiler-plugin", + ], +) + +kt_android_library( + name = "lib", + srcs = glob(["src/main/java/**/*.kt"]), + custom_package = "co.adrianblan.hackernews", + manifest = "src/main/AndroidManifest.xml", + plugins = [ + ":serialization_plugin", + ], + visibility = ["//visibility:public"], + deps = [ + "//core/common:lib", + "//core/model:lib", + "//core/network:lib", + "@maven//:androidx_compose_runtime_runtime", + "@maven//:com_google_dagger_dagger", + "@maven//:com_jakewharton_retrofit_retrofit2_kotlinx_serialization_converter", + "@maven//:com_squareup_retrofit2_retrofit", + "@maven//:org_jetbrains_kotlinx_kotlinx_collections_immutable_jvm", + "@maven//:org_jetbrains_kotlinx_kotlinx_coroutines_android", + "@maven//:org_jetbrains_kotlinx_kotlinx_serialization_core", + "@maven//:org_jetbrains_kotlinx_kotlinx_serialization_json", + ], +) diff --git a/core/hackernews/src/main/AndroidManifest.xml b/core/hackernews/src/main/AndroidManifest.xml new file mode 100644 index 0000000..19b4528 --- /dev/null +++ b/core/hackernews/src/main/AndroidManifest.xml @@ -0,0 +1,10 @@ + + + + + diff --git a/core/hackernews/src/main/java/co/adrianblan/hackernews/api/Serializers.kt b/core/hackernews/src/main/java/co/adrianblan/hackernews/api/Serializers.kt index 35e7f8e..a30fb4c 100644 --- a/core/hackernews/src/main/java/co/adrianblan/hackernews/api/Serializers.kt +++ b/core/hackernews/src/main/java/co/adrianblan/hackernews/api/Serializers.kt @@ -1,7 +1,9 @@ +@file:OptIn(ExperimentalSerializationApi::class) @file:UseSerializers(InstantSerializer::class) package co.adrianblan.hackernews.api +import kotlinx.serialization.ExperimentalSerializationApi import kotlinx.serialization.UseSerializers import kotlinx.serialization.KSerializer import kotlinx.serialization.Serializer @@ -27,6 +29,7 @@ object ApiCommentSerializer * Sometimes the api just returns null literal for certain comments, * we must then convert it to null comment. */ +@ExperimentalSerializationApi object NullableApiCommentSerializer : KSerializer { override val descriptor: SerialDescriptor diff --git a/core/model/BUILD.bazel b/core/model/BUILD.bazel new file mode 100644 index 0000000..532841e --- /dev/null +++ b/core/model/BUILD.bazel @@ -0,0 +1,11 @@ +load("@rules_kotlin//kotlin:jvm.bzl", "kt_jvm_library") + +kt_jvm_library( + name = "lib", + srcs = glob(["**/*.kt"]), + deps = [ + "@maven//:androidx_compose_runtime_runtime", + "@maven//:org_jetbrains_kotlinx_kotlinx_collections_immutable_jvm", + ], + visibility = ["//visibility:public"], +) \ No newline at end of file diff --git a/core/network/BUILD.bazel b/core/network/BUILD.bazel new file mode 100644 index 0000000..7f37fe0 --- /dev/null +++ b/core/network/BUILD.bazel @@ -0,0 +1,17 @@ +load("@rules_kotlin//kotlin:jvm.bzl", "kt_jvm_library") + +kt_jvm_library( + name = "lib", + srcs = glob(["**/*.kt"]), + deps = [ + "@maven//:com_google_dagger_dagger", + "@maven//:com_jakewharton_retrofit_retrofit2_kotlinx_serialization_converter", + "@maven//:com_squareup_retrofit2_retrofit", + "@maven//:com_squareup_okhttp3_okhttp", + "@maven//:com_squareup_okhttp3_logging_interceptor", + "@maven//:com_google_dagger_hilt_core", + "@maven//:com_google_dagger_hilt_android", + "@maven//:com_jakewharton_timber_timber", + ], + visibility = ["//visibility:public"], +) \ No newline at end of file diff --git a/core/testing/BUILD.bazel b/core/testing/BUILD.bazel new file mode 100644 index 0000000..b1f1abd --- /dev/null +++ b/core/testing/BUILD.bazel @@ -0,0 +1,17 @@ +load("@rules_kotlin//kotlin:jvm.bzl", "kt_jvm_library") + +kt_jvm_library( + name = "lib", + srcs = glob(["**/*.kt"]), + visibility = ["//visibility:public"], + deps = [ + "//core/common:lib", + "@maven//:androidx_lifecycle_lifecycle_viewmodel_savedstate", + "@maven//:junit_junit", + "@maven//:org_jetbrains_kotlinx_kotlinx_coroutines_android", + "@maven//:org_jetbrains_kotlinx_kotlinx_coroutines_core", + "@maven//:org_jetbrains_kotlinx_kotlinx_coroutines_core_jvm", + "@maven//:org_jetbrains_kotlinx_kotlinx_coroutines_test", + "@maven//:org_jetbrains_kotlinx_kotlinx_coroutines_test_jvm", + ], +) diff --git a/core/ui/BUILD.bazel b/core/ui/BUILD.bazel new file mode 100644 index 0000000..1a6099e --- /dev/null +++ b/core/ui/BUILD.bazel @@ -0,0 +1,29 @@ +load("@rules_kotlin//kotlin:android.bzl", "kt_android_library") + +kt_android_library( + name = "lib", + srcs = glob(["src/main/java/**/*.kt"]), + custom_package = "co.adrianblan.ui", + manifest = "src/main/AndroidManifest.xml", + plugins = ["//:jetpack_compose_compiler_plugin"], + resource_files = glob(["src/main/res/**"]), + visibility = ["//visibility:public"], + deps = [ + "//core/model:lib", + "@maven//:androidx_activity_activity_compose", + "@maven//:androidx_compose_foundation_foundation_android", + "@maven//:androidx_compose_foundation_foundation_layout", + "@maven//:androidx_compose_material3_material3_android", + "@maven//:androidx_compose_material_material_icons_extended", + "@maven//:androidx_compose_runtime_runtime_android", + "@maven//:androidx_compose_ui_ui_android", + "@maven//:androidx_compose_ui_ui_graphics_android", + "@maven//:androidx_compose_ui_ui_text_android", + "@maven//:androidx_compose_ui_ui_tooling_preview_android", + "@maven//:androidx_core_core_splashscreen", + "@maven//:io_coil_kt_coil", + "@maven//:io_coil_kt_coil_base", + "@maven//:io_coil_kt_coil_compose", + "@maven//:io_coil_kt_coil_svg", + ], +) diff --git a/core/ui/src/main/AndroidManifest.xml b/core/ui/src/main/AndroidManifest.xml new file mode 100644 index 0000000..01a6661 --- /dev/null +++ b/core/ui/src/main/AndroidManifest.xml @@ -0,0 +1,12 @@ + + + + + + + diff --git a/core/webpreview/BUILD.bazel b/core/webpreview/BUILD.bazel new file mode 100644 index 0000000..a28314e --- /dev/null +++ b/core/webpreview/BUILD.bazel @@ -0,0 +1,14 @@ +load("@rules_kotlin//kotlin:jvm.bzl", "kt_jvm_library") + +kt_jvm_library( + name = "lib", + srcs = glob(["**/*.kt"]), + deps = [ + "//core/common:lib", + "//core/model:lib", + "@maven//:org_jsoup_jsoup", + "@maven//:com_google_dagger_dagger", + "@maven//:com_jakewharton_timber_timber", + ], + visibility = ["//visibility:public"], + ) diff --git a/feature/storydetail/BUILD.bazel b/feature/storydetail/BUILD.bazel new file mode 100644 index 0000000..d872fa7 --- /dev/null +++ b/feature/storydetail/BUILD.bazel @@ -0,0 +1,73 @@ +load("@rules_android//android:rules.bzl", "android_local_test") +load("@rules_kotlin//kotlin:android.bzl", "kt_android_library", "kt_android_local_test") +load("@rules_kotlin//kotlin:jvm.bzl", "kt_jvm_test") + +kt_android_library( + name = "lib", + srcs = glob(["src/main/**/*.kt"]), + custom_package = "co.adrianblan.storydetail", + manifest = "src/main/AndroidManifest.xml", + plugins = ["//:jetpack_compose_compiler_plugin"], + resource_files = glob(["src/main/res/**"]), + visibility = ["//visibility:public"], + deps = [ + "//core/domain:lib", + "//core/hackernews:lib", + "//core/ui:lib", + "//core/webpreview:lib", + "@maven//:androidx_activity_activity_compose", + "@maven//:androidx_compose_animation_animation_core", + "@maven//:androidx_compose_animation_animation_core_android", + "@maven//:androidx_compose_foundation_foundation", + "@maven//:androidx_compose_foundation_foundation_android", + "@maven//:androidx_compose_foundation_foundation_layout", + "@maven//:androidx_compose_material3_material3", + "@maven//:androidx_compose_material3_material3_android", + "@maven//:androidx_compose_material_material_icons_extended", + "@maven//:androidx_compose_ui_ui_android", + "@maven//:androidx_compose_ui_ui_geometry", + "@maven//:androidx_compose_ui_ui_graphics_android", + "@maven//:androidx_compose_ui_ui_text_android", + "@maven//:androidx_compose_ui_ui_tooling_preview", + "@maven//:androidx_compose_ui_ui_tooling_preview_android", + "@maven//:androidx_constraintlayout_constraintlayout", + "@maven//:androidx_constraintlayout_constraintlayout_compose", + "@maven//:androidx_hilt_hilt_lifecycle_viewmodel", + "@maven//:androidx_hilt_hilt_navigation_compose", + "@maven//:androidx_lifecycle_lifecycle_runtime_compose", + "@maven//:androidx_lifecycle_lifecycle_viewmodel_ktx", + "@maven//:androidx_navigation_navigation_common", + "@maven//:androidx_navigation_navigation_compose", + "@maven//:org_robolectric_annotations", + "@maven//:org_robolectric_junit", + "@maven//:org_robolectric_nativeruntime", + "@maven//:org_robolectric_nativeruntime_dist_compat", + "@maven//:org_robolectric_pluginapi", + "@maven//:org_robolectric_robolectric", + "@maven//:org_robolectric_utils", + "@maven//:org_robolectric_utils_reflector", + ], +) + +kt_android_local_test( + name = "test", + srcs = glob([ + "src/test/java/**/*.kt", + ]), + associates = [":lib_kt"], + manifest = "src/main/AndroidManifest.xml", + test_class = "co.adrianblan.storydetail.StoryDetailViewModelTest", + visibility = ["//visibility:public"], + deps = [ + ":lib", + "//core/common:lib", + "//core/domain:lib", + "//core/hackernews:lib", + "//core/testing:lib", + "@maven//:app_cash_turbine_turbine_jvm", + "@maven//:com_google_truth_truth", + "@maven//:junit_junit", + "@maven//:org_jetbrains_kotlin_kotlin_test", + "@rules_robolectric//bazel:android-all", + ], +) diff --git a/feature/storydetail/build.gradle.kts b/feature/storydetail/build.gradle.kts index 6c8e933..ce81c2e 100644 --- a/feature/storydetail/build.gradle.kts +++ b/feature/storydetail/build.gradle.kts @@ -10,4 +10,5 @@ android { dependencies { implementation(project(":core:hackernews")) implementation(project(":core:webpreview")) + api(libs.robo) } \ No newline at end of file diff --git a/feature/storydetail/src/main/AndroidManifest.xml b/feature/storydetail/src/main/AndroidManifest.xml index 9b65eb0..00a5007 100644 --- a/feature/storydetail/src/main/AndroidManifest.xml +++ b/feature/storydetail/src/main/AndroidManifest.xml @@ -1 +1,10 @@ - + + + + + diff --git a/feature/storydetail/src/main/java/co/adrianblan/storydetail/StoryDetailNavigation.kt b/feature/storydetail/src/main/java/co/adrianblan/storydetail/StoryDetailNavigation.kt index 211a1bc..5bd0cb8 100644 --- a/feature/storydetail/src/main/java/co/adrianblan/storydetail/StoryDetailNavigation.kt +++ b/feature/storydetail/src/main/java/co/adrianblan/storydetail/StoryDetailNavigation.kt @@ -46,4 +46,4 @@ fun NavGraphBuilder.storyDetailScreen( onBackPressed = onBackPressed ) } -} \ No newline at end of file +} diff --git a/feature/storydetail/src/test/java/co/adrianblan/storydetail/StoryDetailViewModelTest.kt b/feature/storydetail/src/test/java/co/adrianblan/storydetail/StoryDetailViewModelTest.kt index c0a62a1..e198c16 100644 --- a/feature/storydetail/src/test/java/co/adrianblan/storydetail/StoryDetailViewModelTest.kt +++ b/feature/storydetail/src/test/java/co/adrianblan/storydetail/StoryDetailViewModelTest.kt @@ -1,7 +1,7 @@ package co.adrianblan.storydetail +import android.util.SparseArray import app.cash.turbine.test -import co.adrianblan.common.AsyncResource import co.adrianblan.domain.DecoratedStory import co.adrianblan.domain.StoryPreviewUseCase import co.adrianblan.hackernews.FakeHackerNewsRepository @@ -14,6 +14,7 @@ import co.adrianblan.model.StoryType import co.adrianblan.model.placeholderLink import co.adrianblan.testing.CoroutineTestRule import co.adrianblan.testing.delayAndThrow +import junit.framework.TestCase.assertEquals import kotlinx.collections.immutable.persistentListOf import kotlinx.collections.immutable.toImmutableList import kotlinx.coroutines.flow.Flow @@ -23,117 +24,120 @@ import kotlinx.coroutines.test.runTest import org.junit.Before import org.junit.Rule import org.junit.Test -import kotlin.test.assertEquals +import org.junit.runner.RunWith +import org.robolectric.RobolectricTestRunner +import org.robolectric.annotation.Config import kotlin.test.assertIs import kotlin.time.Duration.Companion.seconds - +@RunWith(RobolectricTestRunner::class) +@Config(sdk = [Config.ALL_SDKS]) class StoryDetailViewModelTest { - @get:Rule - val coroutineRule = CoroutineTestRule() - - private lateinit var storyDetailViewModel: StoryDetailViewModel - - object TestStoryPreviewUseCase : StoryPreviewUseCase { - override fun observeDecoratedStory(storyId: StoryId): Flow = - flowOf(DecoratedStory(story = Story.placeholderLink, webPreviewState = null)) - } - - @Before - fun setUp() { - buildViewModel() + @get:Rule + val coroutineRule = CoroutineTestRule() + + private lateinit var storyDetailViewModel: StoryDetailViewModel + + object TestStoryPreviewUseCase : StoryPreviewUseCase { + override fun observeDecoratedStory(storyId: StoryId): Flow = + flowOf(DecoratedStory(story = Story.placeholderLink, webPreviewState = null)) + } + + @Before + fun setUp() { + buildViewModel() + } + + private fun buildViewModel( + hackerNewsRepository: HackerNewsRepository = FakeHackerNewsRepository(responseDelay = 1.seconds), + ) { + storyDetailViewModel = StoryDetailViewModel( + StoryDetailArgs(StoryId(1)).toSavedStateHandle(), + dispatcherProvider = coroutineRule.testDispatcherProvider, + hackerNewsRepository = hackerNewsRepository, + storyPreviewUseCase = TestStoryPreviewUseCase, + ) + } + + @Test + fun testInitialState() = runTest { + assertIs(storyDetailViewModel.viewState.value) + } + + @Test + fun testEmptySuccessStory() = runTest { + buildViewModel( + FakeHackerNewsRepository( + story = Story.placeholderLink.copy(kids = persistentListOf()), + responseDelay = 1.seconds, + ), + ) + storyDetailViewModel.viewState + .test { + assertIs(this.awaitItem()) + var item = this.awaitItem() + assertIs(item) + assertIs(item.commentsState) + item = this.awaitItem() + assertIs(item) + assertIs(item.commentsState) + cancelAndIgnoreRemainingEvents() + } + } + + @Test + fun testSuccessStory() = runTest { + + val numComments = 10 + + buildViewModel( + FakeHackerNewsRepository( + story = Story.placeholderLink.copy(kids = List(numComments) { CommentId(it.toLong()) }.toImmutableList()), + responseDelay = 1.seconds, + ), + ) + storyDetailViewModel.viewState + .test { + assertIs(this.awaitItem()) + + var item = this.awaitItem() + assertIs(item) + assertIs(item.commentsState) + item = this.awaitItem() + assertIs(item) + val commentsState = item.commentsState + assertIs(commentsState) + assertEquals(numComments, commentsState.comments.size) + cancelAndIgnoreRemainingEvents() + } + } + + @Test + fun testStoriesError() { + + val evilDelay = 1.seconds + + val evilHackerNewsRepository = object : HackerNewsRepository { + override suspend fun fetchStory(storyId: StoryId): Story = + delayAndThrow(evilDelay) + + override suspend fun fetchStoryIds(storyType: StoryType): List = + delayAndThrow(evilDelay) + + override suspend fun fetchComment(commentId: CommentId): Comment = + delayAndThrow(evilDelay) } - private fun buildViewModel( - hackerNewsRepository: HackerNewsRepository = FakeHackerNewsRepository(responseDelay = 1.seconds) - ) { - storyDetailViewModel = StoryDetailViewModel( - StoryDetailArgs(StoryId(1)).toSavedStateHandle(), - dispatcherProvider = coroutineRule.testDispatcherProvider, - hackerNewsRepository = hackerNewsRepository, - storyPreviewUseCase = TestStoryPreviewUseCase - ) - } - - @Test - fun testInitialState() = runTest { - assertIs(storyDetailViewModel.viewState.value) - } - - @Test - fun testEmptySuccessStory() = runTest { - buildViewModel( - FakeHackerNewsRepository( - story = Story.placeholderLink.copy(kids = persistentListOf()), - responseDelay = 1.seconds - ) - ) - storyDetailViewModel.viewState - .test { - assertIs(this.awaitItem()) - var item = this.awaitItem() - assertIs(item) - assertIs(item.commentsState) - item = this.awaitItem() - assertIs(item) - assertIs(item.commentsState) - cancelAndIgnoreRemainingEvents() - } - } - - @Test - fun testSuccessStory() = runTest { - - val numComments = 10 - - buildViewModel( - FakeHackerNewsRepository( - story = Story.placeholderLink.copy(kids = List(numComments) { CommentId(it.toLong()) }.toImmutableList()), - responseDelay = 1.seconds - ) - ) - storyDetailViewModel.viewState - .test { - assertIs(this.awaitItem()) - - var item = this.awaitItem() - assertIs(item) - assertIs(item.commentsState) - item = this.awaitItem() - assertIs(item) - val commentsState = item.commentsState - assertIs(commentsState) - assertEquals(numComments, commentsState.comments.size) - cancelAndIgnoreRemainingEvents() - } - } - - @Test - fun testStoriesError() { - - val evilDelay = 1.seconds - - val evilHackerNewsRepository = object : HackerNewsRepository { - override suspend fun fetchStory(storyId: StoryId): Story = - delayAndThrow(evilDelay) - - override suspend fun fetchStoryIds(storyType: StoryType): List = - delayAndThrow(evilDelay) - - override suspend fun fetchComment(commentId: CommentId): Comment = - delayAndThrow(evilDelay) - } - - buildViewModel(evilHackerNewsRepository) + buildViewModel(evilHackerNewsRepository) - runTest { - storyDetailViewModel.viewState - .test { - assertIs(awaitItem()) - assertIs(awaitItem()) - } - assert(this.isActive) + runTest { + storyDetailViewModel.viewState + .test { + assertIs(awaitItem()) + assertIs(awaitItem()) } + assert(this.isActive) } -} \ No newline at end of file + } +} diff --git a/feature/storyfeed/BUILD.bazel b/feature/storyfeed/BUILD.bazel new file mode 100644 index 0000000..722da3e --- /dev/null +++ b/feature/storyfeed/BUILD.bazel @@ -0,0 +1,45 @@ +load("@rules_kotlin//kotlin:android.bzl", "kt_android_library", "kt_android_local_test") +load("@rules_kotlin//kotlin:jvm.bzl", "kt_jvm_test") + +kt_android_library( + name = "lib", + srcs = glob(["src/main/**/*.kt"]), + custom_package = "co.adrianblan.storyfeed", + manifest = "src/main/AndroidManifest.xml", + plugins = ["//:jetpack_compose_compiler_plugin"], + resource_files = glob(["src/main/res/**"]), + visibility = ["//visibility:public"], + deps = [ + "//core/domain:lib", + "//core/hackernews:lib", + "//core/ui:lib", + "//core/webpreview:lib", + "@maven//:androidx_activity_activity_compose", + "@maven//:androidx_compose_material3_material3", + "@maven//:androidx_compose_material3_material3_android", + "@maven//:androidx_compose_ui_ui_android", + "@maven//:androidx_compose_ui_ui_tooling_preview", + "@maven//:androidx_compose_ui_ui_tooling_preview_android", + "@maven//:androidx_hilt_hilt_lifecycle_viewmodel", + "@maven//:androidx_hilt_hilt_navigation_compose", + "@maven//:androidx_lifecycle_lifecycle_runtime_compose", + ], +) + +kt_android_local_test( + name = "test", + srcs = glob(["src/test/**/java/**/*.kt"]), + associates = [":lib_kt"], + test_class = "co.adrianblan.storyfeed.StoryFeedViewModelTest", + visibility = ["//visibility:public"], + deps = [ + ":lib", + "//core/common:lib", + "//core/domain:lib", + "//core/hackernews:lib", + "//core/testing:lib", + "@maven//:app_cash_turbine_turbine_jvm", + "@maven//:org_jetbrains_kotlin_kotlin_test", + "@rules_robolectric//bazel:android-all", + ], +) diff --git a/feature/storyfeed/src/main/AndroidManifest.xml b/feature/storyfeed/src/main/AndroidManifest.xml index 9b65eb0..cd05f6d 100644 --- a/feature/storyfeed/src/main/AndroidManifest.xml +++ b/feature/storyfeed/src/main/AndroidManifest.xml @@ -1 +1,9 @@ - + + + + diff --git a/feature/storyfeed/src/main/java/co/adrianblan/storyfeed/PagingTransformer.kt b/feature/storyfeed/src/main/java/co/adrianblan/storyfeed/PagingTransformer.kt index 310dd4d..180ca1a 100644 --- a/feature/storyfeed/src/main/java/co/adrianblan/storyfeed/PagingTransformer.kt +++ b/feature/storyfeed/src/main/java/co/adrianblan/storyfeed/PagingTransformer.kt @@ -120,4 +120,4 @@ internal fun Flow>>.mergePages(): Flow> = .drop(1) .map { it.values.flatten() - } \ No newline at end of file + } diff --git a/feature/storyfeed/src/main/java/co/adrianblan/storyfeed/StoryFeedViewModel.kt b/feature/storyfeed/src/main/java/co/adrianblan/storyfeed/StoryFeedViewModel.kt index 6f84129..b772e00 100644 --- a/feature/storyfeed/src/main/java/co/adrianblan/storyfeed/StoryFeedViewModel.kt +++ b/feature/storyfeed/src/main/java/co/adrianblan/storyfeed/StoryFeedViewModel.kt @@ -104,4 +104,4 @@ class StoryFeedViewModel @Inject constructor( private const val KEY_STORY_TYPE = "storyType" private const val PAGE_SIZE = 20 } -} \ No newline at end of file +} diff --git a/feature/storyfeed/src/test/java/co/adrianblan/storyfeed/PagingTest.kt b/feature/storyfeed/src/test/java/co/adrianblan/storyfeed/PagingTest.kt index df16788..38ae021 100644 --- a/feature/storyfeed/src/test/java/co/adrianblan/storyfeed/PagingTest.kt +++ b/feature/storyfeed/src/test/java/co/adrianblan/storyfeed/PagingTest.kt @@ -7,19 +7,21 @@ import kotlinx.coroutines.flow.toList import kotlinx.coroutines.test.runTest import org.junit.Assert.assertEquals import org.junit.Test +import org.junit.runner.RunWith +import org.junit.runners.JUnit4 -class PagingTest { +@RunWith(JUnit4::class) +class PagingTest1 { - - @Test - fun testChunksSimple() = runTest { - val flow = MutableStateFlow(0) - flow.transformPaginationChunks().test { - assertEquals(listOf(0), this.awaitItem()) - flow.value = 1 - assertEquals(listOf(1), this.awaitItem()) - } - } +// @Test +// fun testChunksSimple() = runTest { +// val flow = MutableStateFlow(0) +// flow.transformPaginationChunks().test { +// assertEquals(listOf(0), this.awaitItem()) +// flow.value = 1 +// assertEquals(listOf(1), this.awaitItem()) +// } +// } @Test fun testChunksSkipped() = runTest { @@ -90,4 +92,4 @@ class PagingTest { // Different containers, same contents assertEquals(expected.toString(), result.toString()) } -} \ No newline at end of file +} diff --git a/feature/storyfeed/src/test/java/co/adrianblan/storyfeed/StoryFeedViewModelTest.kt b/feature/storyfeed/src/test/java/co/adrianblan/storyfeed/StoryFeedViewModelTest.kt index 6bc47e5..60ba661 100644 --- a/feature/storyfeed/src/test/java/co/adrianblan/storyfeed/StoryFeedViewModelTest.kt +++ b/feature/storyfeed/src/test/java/co/adrianblan/storyfeed/StoryFeedViewModelTest.kt @@ -2,7 +2,6 @@ package co.adrianblan.storyfeed import androidx.lifecycle.SavedStateHandle import app.cash.turbine.test -import co.adrianblan.common.AsyncResource import co.adrianblan.domain.DecoratedStory import co.adrianblan.domain.StoryPreviewUseCase import co.adrianblan.hackernews.FakeHackerNewsRepository @@ -24,11 +23,13 @@ import kotlinx.coroutines.test.runTest import org.junit.Before import org.junit.Rule import org.junit.Test +import org.junit.runner.RunWith +import org.junit.runners.JUnit4 import kotlin.test.assertEquals import kotlin.test.assertIs import kotlin.time.Duration.Companion.seconds - +@RunWith(JUnit4::class) class StoryFeedViewModelTest { @get:Rule @@ -142,4 +143,4 @@ class StoryFeedViewModelTest { cancelAndIgnoreRemainingEvents() } } -} \ No newline at end of file +} diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 804e72a..12b5ccc 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,9 +1,10 @@ [versions] minSdk = "23" compileSdk = "34" +multidex = "2.0.1" targetSdk = "34" -androidGradlePlugin = "8.2.0-alpha14" +androidGradlePlugin = "8.2.2" androidxActivity = "1.8.0-alpha06" androidxBrowser = "1.5.0" androidxComposeBom = "2023.08.00" @@ -47,6 +48,7 @@ androidx-core = { group = "androidx.core", name = "core-ktx", version.ref = "and androidx-hilt-navigation-compose = { group = "androidx.hilt", name = "hilt-navigation-compose", version.ref = "androidxHiltNavigationCompose" } androidx-lifecycle-viewmodel = { group = "androidx.lifecycle", name = "lifecycle-viewmodel-compose", version.ref = "androidxLifecycle" } androidx-lifecycle-compose = { group = "androidx.lifecycle", name = "lifecycle-runtime-compose", version.ref = "androidxLifecycle" } +androidx-multidex = { module = "androidx.multidex:multidex", version.ref = "multidex" } androidx-navigation-compose = { group = "androidx.navigation", name = "navigation-compose", version.ref = "androidxNavigation" } androidx-navigation-testing = { group = "androidx.navigation", name = "navigation-testing", version.ref = "androidxNavigation" } androidx-splashscreen = { group = "androidx.core", name = "core-splashscreen", version.ref = "androidxSplashscreen" } @@ -86,6 +88,7 @@ turbine = { group = "app.cash.turbine", name = "turbine", version.ref = "turbine androidx-core-test = { group = "androidx.arch.core", name = "core-testing", version.ref = "androidxCoreTesting" } junit = { group = "junit", name = "junit", version.ref = "junit" } +robo = { group = 'org.robolectric', name = 'robolectric', version = '4.13' } android-gradleplugin = { group = "com.android.tools.build", name = "gradle", version.ref = "androidGradlePlugin" } kotlin-gradleplugin = { group = "org.jetbrains.kotlin", name = "kotlin-gradle-plugin", version.ref = "kotlin" } diff --git a/rules_jvm_external~~maven~maven_install.json b/rules_jvm_external~~maven~maven_install.json new file mode 100755 index 0000000..6cf4ca5 --- /dev/null +++ b/rules_jvm_external~~maven~maven_install.json @@ -0,0 +1,2159 @@ +{ + "__AUTOGENERATED_FILE_DO_NOT_MODIFY_THIS_FILE_MANUALLY": "THERE_IS_NO_DATA_ONLY_ZUUL", + "__INPUT_ARTIFACTS_HASH": -444404928, + "__RESOLVED_ARTIFACTS_HASH": -840981604, + "artifacts": { + "androidx.activity:activity-compose:aar": { + "shasums": { + "jar": "8374138f15251cc3ed375425599e94a36038c05cf877f877281ae019b95b844a" + }, + "version": "1.5.1" + }, + "androidx.activity:activity-ktx:aar": { + "shasums": { + "jar": "fd69a5ccb99244cb7c5224580a58e23238d10ed4086199a33e9bfc31c4e4834f" + }, + "version": "1.5.1" + }, + "androidx.activity:activity:aar": { + "shasums": { + "jar": "4b04b42d2c1f81c02faf0f7b6e9cc9fede10fdee8f66136cd4b99f88e8f48c0f" + }, + "version": "1.5.1" + }, + "androidx.annotation:annotation": { + "shasums": { + "jar": "9029262bddce116e6d02be499e4afdba21f24c239087b76b3b57d7e98b490a36" + }, + "version": "1.2.0" + }, + "androidx.annotation:annotation-experimental:aar": { + "shasums": { + "jar": "0157de61a2064047896a058080f3fd67ba57ad9a94857b3f7a363660243e3f90" + }, + "version": "1.1.0" + }, + "androidx.arch.core:core-common": { + "shasums": { + "jar": "fe1237bf029d063e7f29fe39aeaf73ef74c8b0a3658486fc29d3c54326653889" + }, + "version": "2.1.0" + }, + "androidx.arch.core:core-runtime:aar": { + "shasums": { + "jar": "dd77615bd3dd275afb11b62df25bae46b10b4a117cd37943af45bdcbf8755852" + }, + "version": "2.1.0" + }, + "androidx.autofill:autofill:aar": { + "shasums": { + "jar": "c9468f56e05006ea151a426c54957cd0799b8b83a579d2846dd22061f33e5ecd" + }, + "version": "1.0.0" + }, + "androidx.browser:browser:aar": { + "shasums": { + "jar": "94f24e272b3a269ff9a5ba21da5e652615dc59ac3fa2ba2d7a5ae30d1c4df748" + }, + "version": "1.5.0" + }, + "androidx.collection:collection": { + "shasums": { + "jar": "632a0e5407461de774409352940e292a291037724207a787820c77daf7d33b72" + }, + "version": "1.1.0" + }, + "androidx.compose.animation:animation-core:aar": { + "shasums": { + "jar": "797048e2d03a9b1b98443fbe118d70f0955988e3fca56a71985ee3550be46f4e" + }, + "version": "1.1.1" + }, + "androidx.compose.animation:animation:aar": { + "shasums": { + "jar": "95fca9d5bbb8da8c4f351331558e7b2f4ec04db0cf290b021852423461d76a9c" + }, + "version": "1.1.1" + }, + "androidx.compose.foundation:foundation-layout:aar": { + "shasums": { + "jar": "1ef28dd57922f8432972b596e592504cde886cfbdfca5ede832871b54d654ef3" + }, + "version": "1.0.0" + }, + "androidx.compose.foundation:foundation:aar": { + "shasums": { + "jar": "dc9efde98d865b5b16ad26628cb3909ba94b487e9749124e15b57362cc587615" + }, + "version": "1.0.0" + }, + "androidx.compose.material:material-icons-core:aar": { + "shasums": { + "jar": "6e049492ec2ff0a6a1166a5985a924cf4de03465d17462594284f81eafe1a9dd" + }, + "version": "1.0.0" + }, + "androidx.compose.material:material-ripple:aar": { + "shasums": { + "jar": "0d3ac24c815fba15c57e1ca03f406399cd69ac1e41e390f61258c22a3226f550" + }, + "version": "1.0.0" + }, + "androidx.compose.material:material:aar": { + "shasums": { + "jar": "5b1efb82311098418e9f61c5d3aa95d8e44fc36319d23a2901232fbe7f147d8b" + }, + "version": "1.0.0" + }, + "androidx.compose.runtime:runtime-saveable:aar": { + "shasums": { + "jar": "1ff0734a254b775cb7e7f9a301e1b07cac1a72bd571f618477f3a4142571b94f" + }, + "version": "1.0.1" + }, + "androidx.compose.runtime:runtime:aar": { + "shasums": { + "jar": "6f1b4762fb8db93506aae72555ed2da1ee6bcfe0acb80dd9053868807422a5f1" + }, + "version": "1.0.0" + }, + "androidx.compose.ui:ui-geometry:aar": { + "shasums": { + "jar": "da5b6793c694beca64efc165afb5831ebb34a0c9bafb9ef7ee636a3b7de910d0" + }, + "version": "1.0.0" + }, + "androidx.compose.ui:ui-graphics:aar": { + "shasums": { + "jar": "00da5e7f92f2adadf96e6ee89e0a65479f83c60a85fbbefd7bcb71b05a2b29f8" + }, + "version": "1.0.0" + }, + "androidx.compose.ui:ui-text:aar": { + "shasums": { + "jar": "ee38b166b926984393b79936617e77c9ae212a7c250d0cc125fcdb22e83261b0" + }, + "version": "1.0.0" + }, + "androidx.compose.ui:ui-tooling-data:aar": { + "shasums": { + "jar": "824bb692d88aaaaa0173983f4d9ee31dfc7776fc3bf337bec98ae52b3d0888ca" + }, + "version": "1.2.0" + }, + "androidx.compose.ui:ui-tooling-preview:aar": { + "shasums": { + "jar": "3a54390bd0196bc73b9179f56d488421911d73cbd6aff55532d0db8c52694839" + }, + "version": "1.2.0" + }, + "androidx.compose.ui:ui-tooling:aar": { + "shasums": { + "jar": "88f0d3a88cf9f769abe9fb7663664849cba1a06a7a66e7da54de8b391aba2137" + }, + "version": "1.2.0" + }, + "androidx.compose.ui:ui-unit:aar": { + "shasums": { + "jar": "17bb4fe548680e9bc11d4a605b01a6d7744e2ddab04ca93b7709378522792b72" + }, + "version": "1.0.0" + }, + "androidx.compose.ui:ui-util:aar": { + "shasums": { + "jar": "06dc15e9cbb724bb1f4678af2a354acc5a15fb0ee5dcc6322e780caaf0559078" + }, + "version": "1.0.0" + }, + "androidx.compose.ui:ui:aar": { + "shasums": { + "jar": "ce083682bacb4dd929402c11b2c3f6817de400b4839538ac186563e3f6e46840" + }, + "version": "1.0.0" + }, + "androidx.concurrent:concurrent-futures": { + "shasums": { + "jar": "5595a40e278a7b39fa78a09490e3d7f3faa95c7b01447148bd38b5ade0605c35" + }, + "version": "1.0.0" + }, + "androidx.core:core-ktx:aar": { + "shasums": { + "jar": "dcb74d510d552b35eff73b0dd27b829649535f3902e5b5a1f26040383c10a940" + }, + "version": "1.2.0" + }, + "androidx.core:core:aar": { + "shasums": { + "jar": "48c64a15ec3eb11bfb33339e5ceb70ec7f821bd2dfa2eb8675ebd5353317e792" + }, + "version": "1.8.0" + }, + "androidx.customview:customview:aar": { + "shasums": { + "jar": "20e5b8f6526a34595a604f56718da81167c0b40a7a94a57daa355663f2594df2" + }, + "version": "1.0.0" + }, + "androidx.fragment:fragment:aar": { + "shasums": { + "jar": "82b04780eda21b0a5eea02475415887a1cadfb368b371221aeb40703c067f338" + }, + "version": "1.5.1" + }, + "androidx.interpolator:interpolator:aar": { + "shasums": { + "jar": "33193135a64fe21fa2c35eec6688f1a76e512606c0fc83dc1b689e37add7732a" + }, + "version": "1.0.0" + }, + "androidx.lifecycle:lifecycle-common": { + "shasums": { + "jar": "20ad1520f625cf455e6afd7290988306d3a9886efa993e0860fbabf4bb3f7bda" + }, + "version": "2.5.1" + }, + "androidx.lifecycle:lifecycle-common-java8": { + "shasums": { + "jar": "69e1a62e5752ca3f43fb1607f161379bbe88b64af89c1a543c126160adf7cc53" + }, + "version": "2.5.1" + }, + "androidx.lifecycle:lifecycle-livedata-core:aar": { + "shasums": { + "jar": "ee792103ca248bfaf150c45a93871e4cf7e8cebab990e0f62f7de5d4ff2f209f" + }, + "version": "2.5.1" + }, + "androidx.lifecycle:lifecycle-livedata:aar": { + "shasums": { + "jar": "c82609ced8c498f0a701a30fb6771bb7480860daee84d82e0a81ee86edf7ba39" + }, + "version": "2.0.0" + }, + "androidx.lifecycle:lifecycle-runtime-ktx:aar": { + "shasums": { + "jar": "b3988ae01aae021ac666f232b85f88e8a75cacb2ac7bd6749cab73972540ce07" + }, + "version": "2.5.1" + }, + "androidx.lifecycle:lifecycle-runtime:aar": { + "shasums": { + "jar": "33b0d73dc2f028fceb3599bacabe563c3db6d26f3513d889595863536a4ac8c0" + }, + "version": "2.5.1" + }, + "androidx.lifecycle:lifecycle-viewmodel-ktx:aar": { + "shasums": { + "jar": "30eecb351d81f0c429e186e65a892a42ce1d5bc5c80420bfece4ae279333023d" + }, + "version": "2.5.1" + }, + "androidx.lifecycle:lifecycle-viewmodel-savedstate:aar": { + "shasums": { + "jar": "8481141f97f0e6213dd33fcc89a784c4bd11a6ff7d4779a1cf6a0e9fbdbf24e0" + }, + "version": "2.5.1" + }, + "androidx.lifecycle:lifecycle-viewmodel:aar": { + "shasums": { + "jar": "14a27d5fb8a1436b1b7dec18bebaa66c830cdbbc8e28a81ce5f85b7c33b3ae9d" + }, + "version": "2.5.1" + }, + "androidx.loader:loader:aar": { + "shasums": { + "jar": "11f735cb3b55c458d470bed9e25254375b518b4b1bad6926783a7026db0f5025" + }, + "version": "1.0.0" + }, + "androidx.profileinstaller:profileinstaller:aar": { + "shasums": { + "jar": "2e73a7c40e4dda1482a0537b77fdfb2db46b5c4b4cd33ad05d265097fb8a05da" + }, + "version": "1.0.0" + }, + "androidx.savedstate:savedstate-ktx:aar": { + "shasums": { + "jar": "43112928d3cbb108801ee11130f303404bc4892cf78908811568195107bba7fe" + }, + "version": "1.2.0" + }, + "androidx.savedstate:savedstate:aar": { + "shasums": { + "jar": "2de528d6898e95ef020d22d9ffdf9d1f77cbdd93f92d39dfaa5d5c43b0c311c8" + }, + "version": "1.2.0" + }, + "androidx.startup:startup-runtime:aar": { + "shasums": { + "jar": "ff081d2db7dd28aec59f74934c514fbaf4ae5aac5258495fe10d612a3622f876" + }, + "version": "1.0.0" + }, + "androidx.tracing:tracing:aar": { + "shasums": { + "jar": "07b8b6139665b884a162eccf97891ca50f7f56831233bf25168ae04f7b568612" + }, + "version": "1.0.0" + }, + "androidx.versionedparcelable:versionedparcelable:aar": { + "shasums": { + "jar": "57e8d93260d18d5b9007c9eed3c64ad159de90c8609ebfc74a347cbd514535a4" + }, + "version": "1.1.1" + }, + "androidx.viewpager:viewpager:aar": { + "shasums": { + "jar": "147af4e14a1984010d8f155e5e19d781f03c1d70dfed02a8e0d18428b8fc8682" + }, + "version": "1.0.0" + }, + "com.google.auto.service:auto-service-annotations": { + "shasums": { + "jar": "44752893119fdaf01b4c5ee74e46e5dab86f2dcda18114c562f877355c6ed26e" + }, + "version": "1.0" + }, + "com.google.auto.value:auto-value-annotations": { + "shasums": { + "jar": "fedd59b0b4986c342f6ab2d182f2a4ee9fceb2c7e2d5bdc4dc764c92394a23d3" + }, + "version": "1.7.4" + }, + "com.google.code.findbugs:jsr305": { + "shasums": { + "jar": "766ad2a0783f2687962c8ad74ceecc38a28b9f72a2d085ee438b7813e928d0c7" + }, + "version": "3.0.2" + }, + "com.google.code.gson:gson": { + "shasums": { + "jar": "d3999291855de495c94c743761b8ab5176cfeabe281a5ab0d8e8d45326fd703e" + }, + "version": "2.8.9" + }, + "com.google.dagger:dagger": { + "shasums": { + "jar": "f011cae7d2c0fb7ea17c34e05bc10e768b1081a5892ad019cf1fdb0e125c49c1" + }, + "version": "2.45" + }, + "com.google.dagger:dagger-compiler": { + "shasums": { + "jar": "5617dfb994537dba5b41f3744a6dd13ec3cd99789c065e0d5c6fa9f21cf7ca25" + }, + "version": "2.45" + }, + "com.google.dagger:dagger-lint-aar:aar": { + "shasums": { + "jar": "e621c103bf61b4566f3f7dbc8055abcceef15881019d149b867ad9edf407a8ab" + }, + "version": "2.48" + }, + "com.google.dagger:dagger-producers": { + "shasums": { + "jar": "a05abb4c3ccf6bb0f056bdcb5ef973898ecf172952ab5948a824aeea6c86ecaa" + }, + "version": "2.45" + }, + "com.google.dagger:dagger-spi": { + "shasums": { + "jar": "7cd6f0b09d88e64a9c97bc80e544ab8ac8fdee9301754413585a74cf64222b27" + }, + "version": "2.45" + }, + "com.google.dagger:hilt-android:aar": { + "shasums": { + "jar": "24768f5a27c60dc8b1894728867fc4c70dfa58a384d9ff60c9212ce48a2137ea" + }, + "version": "2.48" + }, + "com.google.dagger:hilt-core": { + "shasums": { + "jar": "ca82a5330b37252f3dded1e5ce05f744b354ab11b6c7e49bdac10896c5193361" + }, + "version": "2.48" + }, + "com.google.devtools.ksp:symbol-processing-api": { + "shasums": { + "jar": "adc29417be5ca9ff42118105fea4e36d9ef44987abfc41432309371a60198941" + }, + "version": "1.7.0-1.0.6" + }, + "com.google.errorprone:error_prone_annotations": { + "shasums": { + "jar": "357cd6cfb067c969226c442451502aee13800a24e950fdfde77bcdb4565a668d" + }, + "version": "2.3.2" + }, + "com.google.errorprone:javac-shaded": { + "shasums": { + "jar": "65bfccf60986c47fbc17c9ebab0be626afc41741e0a6ec7109e0768817a36f30" + }, + "version": "9-dev-r4023-3" + }, + "com.google.googlejavaformat:google-java-format": { + "shasums": { + "jar": "aa19ad7850fb85178aa22f2fddb163b84d6ce4d0035872f30d4408195ca1144e" + }, + "version": "1.5" + }, + "com.google.guava:failureaccess": { + "shasums": { + "jar": "a171ee4c734dd2da837e4b16be9df4661afab72a41adaf31eb84dfdaf936ca26" + }, + "version": "1.0.1" + }, + "com.google.guava:guava": { + "shasums": { + "jar": "a42edc9cab792e39fe39bb94f3fca655ed157ff87a8af78e1d6ba5b07c4a00ab" + }, + "version": "31.1-jre" + }, + "com.google.guava:guava-testlib": { + "shasums": { + "jar": "aadc71b10d5c3ac474dd16be84cfb18d257e584d1e0a59f8cab64ef4376226ce" + }, + "version": "31.1-jre" + }, + "com.google.guava:listenablefuture": { + "shasums": { + "jar": "b372a037d4230aa57fbeffdef30fd6123f9c0c2db85d0aced00c91b974f33f99" + }, + "version": "9999.0-empty-to-avoid-conflict-with-guava" + }, + "com.google.j2objc:j2objc-annotations": { + "shasums": { + "jar": "21af30c92267bd6122c0e0b4d20cccb6641a37eaf956c6540ec471d584e64a7b" + }, + "version": "1.3" + }, + "com.google.truth:truth": { + "shasums": { + "jar": "a85e03b8b6ae8780f060cfded9500a3d1b5f52808f99a2ea6da9c683313c7518" + }, + "version": "1.1.2" + }, + "com.jakewharton.retrofit:retrofit2-kotlinx-serialization-converter": { + "shasums": { + "jar": "fe3fcb6d2f693867640776eee41989189adc7961797ea88bd2282a1b46b16b77" + }, + "version": "0.8.0" + }, + "com.jakewharton.timber:timber:aar": { + "shasums": { + "jar": "c6edddfcc8eff42a1604c8577fcfa4b4ffd9f252122c52ea36cfe7967f512f71" + }, + "version": "5.0.1" + }, + "com.squareup.moshi:moshi": { + "shasums": { + "jar": "46a1118fe1fc12723a575c94133fc8936dcc78d3f8873c0e70a055de9e5861a6" + }, + "version": "1.15.1" + }, + "com.squareup.moshi:moshi-kotlin": { + "shasums": { + "jar": "3c5a577200fc49a696647a52b1a97598a56d8d6f00e343ffed09d88b4007cdd0" + }, + "version": "1.15.1" + }, + "com.squareup.moshi:moshi-kotlin-codegen": { + "shasums": { + "jar": "14ab79736dc806a245ad76354eb7d53e83bead1d87b092a6b07da6a3287a39ed" + }, + "version": "1.15.1" + }, + "com.squareup.okhttp3:logging-interceptor": { + "shasums": { + "jar": "e7358b4877f2dc2ea5f03276ad8980f96ad3da745c80006b58b01386b83a8d94" + }, + "version": "4.9.3" + }, + "com.squareup.okhttp3:okhttp": { + "shasums": { + "jar": "93ecd6cba19d87dccfe566ec848d91aae799e3cf16c00709358ea69bd9227219" + }, + "version": "4.9.3" + }, + "com.squareup.okio:okio": { + "shasums": { + "jar": "4496b06e73982fcdd8a5393f46e5df2ce2fa4465df5895454cac68a32f09bbc8" + }, + "version": "2.8.0" + }, + "com.squareup.okio:okio-jvm": { + "shasums": { + "jar": "d8b35adc28768f43ae5afe6a7d1aa2a878ba51e0b96a4f308811f3b1f5b13e55" + }, + "version": "3.7.0" + }, + "com.squareup.retrofit2:retrofit": { + "shasums": { + "jar": "e6ea1929c46852f5bec66ab3357da383476cef4e8d1deefdbf195b79cc4d6581" + }, + "version": "2.9.0" + }, + "com.squareup:javapoet": { + "shasums": { + "jar": "4c7517e848a71b36d069d12bb3bf46a70fd4cda3105d822b0ed2e19c00b69291" + }, + "version": "1.13.0" + }, + "com.squareup:kotlinpoet": { + "shasums": { + "jar": "7cbf7f4330170f9459d15c105fae6e13784cb37855fd68cf2826dfa0b5deb676" + }, + "version": "1.13.2" + }, + "com.squareup:kotlinpoet-ksp": { + "shasums": { + "jar": "d1de5e3d6f7405dc10cb14a43f39400ba75604e1cf86da1fe08e9007a8a17d08" + }, + "version": "1.13.2" + }, + "javax.inject:javax.inject": { + "shasums": { + "jar": "91c77044a50c481636c32d916fd89c9118a72195390452c81065080f957de7ff" + }, + "version": "1" + }, + "junit:junit": { + "shasums": { + "jar": "8e495b634469d64fb8acfa3495a065cbacc8a0fff55ce1e31007be4c16dc57d3" + }, + "version": "4.13.2" + }, + "net.bytebuddy:byte-buddy": { + "shasums": { + "jar": "d2e46555699e70361b5471a7e142f9c67855bba6907a285177ebd8ad973775d8" + }, + "version": "1.12.7" + }, + "net.bytebuddy:byte-buddy-agent": { + "shasums": { + "jar": "73d84bb6e8e8980e674d796a29063f510ceb527c6f8c912a08a13e236be05c71" + }, + "version": "1.12.7" + }, + "net.ltgt.gradle.incap:incap": { + "shasums": { + "jar": "b625b9806b0f1e4bc7a2e3457119488de3cd57ea20feedd513db070a573a4ffd" + }, + "version": "0.2" + }, + "org.checkerframework:checker-compat-qual": { + "shasums": { + "jar": "11d134b245e9cacc474514d2d66b5b8618f8039a1465cdc55bbc0b34e0008b7a" + }, + "version": "2.5.5" + }, + "org.checkerframework:checker-qual": { + "shasums": { + "jar": "ff10785ac2a357ec5de9c293cb982a2cbb605c0309ea4cc1cb9b9bc6dbe7f3cb" + }, + "version": "3.12.0" + }, + "org.hamcrest:hamcrest-core": { + "shasums": { + "jar": "66fdef91e9739348df7a096aa384a5685f4e875584cce89386a7a47251c4d8e9" + }, + "version": "1.3" + }, + "org.jetbrains.kotlin:kotlin-reflect": { + "shasums": { + "jar": "8a6cd5a3cf092acee274ce2c444dc36eefdb631579859dd4d857b3309a529c91" + }, + "version": "1.8.21" + }, + "org.jetbrains.kotlin:kotlin-stdlib": { + "shasums": { + "jar": "3b479313ab6caea4e5e25d3dee8ca80c302c89ba73e1af4dafaa100f6ef9296a" + }, + "version": "1.9.21" + }, + "org.jetbrains.kotlin:kotlin-stdlib-common": { + "shasums": { + "jar": "6a44c9ecc9d7754d9e943fb1e3588c74d4a3f1785be51074f49d6c5723682a73" + }, + "version": "1.8.21" + }, + "org.jetbrains.kotlin:kotlin-stdlib-jdk7": { + "shasums": { + "jar": "33d148db0e11debd0d90677d28242bced907f9c77730000fd597867089039d86" + }, + "version": "1.8.21" + }, + "org.jetbrains.kotlin:kotlin-stdlib-jdk8": { + "shasums": { + "jar": "3db752a30074f06ee6c57984aa6f27da44f4d2bbc7f5442651f6988f1cb2b7d7" + }, + "version": "1.8.21" + }, + "org.jetbrains.kotlinx:kotlinx-collections-immutable-jvm": { + "shasums": { + "jar": "91d253c00c5e20e3af35604504609a475fbcee37aaeebc195e72e8aeccf7ac6e" + }, + "version": "0.3.4" + }, + "org.jetbrains.kotlinx:kotlinx-coroutines-android": { + "shasums": { + "jar": "59fffb26bee12c32dadcfa5d420c2a7db85d3253518128b170efda726613256d" + }, + "version": "1.7.3" + }, + "org.jetbrains.kotlinx:kotlinx-coroutines-core": { + "shasums": { + "jar": "1962ebc6cffb7645c6f5f17524690d8a728086344f1219e63c9ca0c4d8f327d7" + }, + "version": "1.5.2" + }, + "org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm": { + "shasums": { + "jar": "f3d4f5de1c391bbcc20f3b3435ccbac013521e76b6902d7d59635ec15c1f797e" + }, + "version": "1.8.1" + }, + "org.jetbrains.kotlinx:kotlinx-coroutines-test": { + "shasums": { + "jar": "d5a9b8769a2167eb9dc911d1b2c54fe8270387b8160533d8ae8bda942e2998b1" + }, + "version": "1.8.1" + }, + "org.jetbrains.kotlinx:kotlinx-coroutines-test-jvm": { + "shasums": { + "jar": "c4ef1deb31be3f81ed82ecf237220cc95886868a7ec527a418599dfff159dedb" + }, + "version": "1.8.1" + }, + "org.jetbrains.kotlinx:kotlinx-metadata-jvm": { + "shasums": { + "jar": "ca063a96639b08b9eaa0de4d65e899480740a6efbe28ab9a8681a2ced03055a4" + }, + "version": "0.5.0" + }, + "org.jetbrains.kotlinx:kotlinx-serialization-core": { + "shasums": { + "jar": "6b945ed3abdc83195afabfa74a289ac818522000ad5e7021bd7e9eb3864224d9" + }, + "version": "1.5.1" + }, + "org.jetbrains.kotlinx:kotlinx-serialization-core-jvm": { + "shasums": { + "jar": "a4053a35abeb59bf707d7948245556fe8dc379e9cfed088aec08134c899605d4" + }, + "version": "1.5.1" + }, + "org.jetbrains.kotlinx:kotlinx-serialization-json": { + "shasums": { + "jar": "1463d5c83781ca47b9edcf4fc44017f6ac1ab4caffb2a69778814654c1c03b5e" + }, + "version": "1.5.1" + }, + "org.jetbrains.kotlinx:kotlinx-serialization-json-jvm": { + "shasums": { + "jar": "6fc10b056e1006963abb2b9fc393dcd4e38425358b6f16285e8f63d3429ffd21" + }, + "version": "1.5.1" + }, + "org.jetbrains:annotations": { + "shasums": { + "jar": "7b0f19724082cbfcbc66e5abea2b9bc92cf08a1ea11e191933ed43801eb3cd05" + }, + "version": "23.0.0" + }, + "org.jsoup:jsoup": { + "shasums": { + "jar": "1f115726540ddf71958c14bc517ebfc49cf481e91cd917b0face84f01272e901" + }, + "version": "1.16.1" + }, + "org.mockito:mockito-core": { + "shasums": { + "jar": "148de2c6928365db29443ca12d35c930d9f481172b934fdd801d1cb1409ea83a" + }, + "version": "4.3.1" + }, + "org.objenesis:objenesis": { + "shasums": { + "jar": "03d960bd5aef03c653eb000413ada15eb77cdd2b8e4448886edf5692805e35f3" + }, + "version": "3.2" + }, + "org.ow2.asm:asm": { + "shasums": { + "jar": "1263369b59e29c943918de11d6d6152e2ec6085ce63e5710516f8c67d368e4bc" + }, + "version": "9.3" + } + }, + "dependencies": { + "androidx.activity:activity-compose:aar": [ + "androidx.activity:activity-ktx:aar", + "androidx.compose.runtime:runtime-saveable:aar", + "androidx.compose.runtime:runtime:aar", + "androidx.compose.ui:ui:aar", + "androidx.lifecycle:lifecycle-common-java8", + "org.jetbrains.kotlin:kotlin-stdlib" + ], + "androidx.activity:activity-ktx:aar": [ + "androidx.activity:activity:aar", + "androidx.core:core-ktx:aar", + "androidx.lifecycle:lifecycle-runtime-ktx:aar", + "androidx.lifecycle:lifecycle-viewmodel-ktx:aar", + "androidx.savedstate:savedstate-ktx:aar", + "org.jetbrains.kotlin:kotlin-stdlib" + ], + "androidx.activity:activity:aar": [ + "androidx.annotation:annotation", + "androidx.collection:collection", + "androidx.core:core:aar", + "androidx.lifecycle:lifecycle-runtime:aar", + "androidx.lifecycle:lifecycle-viewmodel-savedstate:aar", + "androidx.lifecycle:lifecycle-viewmodel:aar", + "androidx.savedstate:savedstate:aar", + "androidx.tracing:tracing:aar", + "org.jetbrains.kotlin:kotlin-stdlib" + ], + "androidx.arch.core:core-common": [ + "androidx.annotation:annotation" + ], + "androidx.arch.core:core-runtime:aar": [ + "androidx.annotation:annotation", + "androidx.arch.core:core-common" + ], + "androidx.autofill:autofill:aar": [ + "androidx.core:core:aar" + ], + "androidx.browser:browser:aar": [ + "androidx.annotation:annotation", + "androidx.collection:collection", + "androidx.concurrent:concurrent-futures", + "androidx.core:core:aar", + "androidx.interpolator:interpolator:aar", + "com.google.guava:listenablefuture" + ], + "androidx.collection:collection": [ + "androidx.annotation:annotation" + ], + "androidx.compose.animation:animation-core:aar": [ + "androidx.annotation:annotation", + "androidx.compose.runtime:runtime:aar", + "androidx.compose.ui:ui-unit:aar", + "androidx.compose.ui:ui-util:aar", + "androidx.compose.ui:ui:aar", + "org.jetbrains.kotlin:kotlin-stdlib", + "org.jetbrains.kotlinx:kotlinx-coroutines-core" + ], + "androidx.compose.animation:animation:aar": [ + "androidx.annotation:annotation", + "androidx.compose.animation:animation-core:aar", + "androidx.compose.foundation:foundation-layout:aar", + "androidx.compose.runtime:runtime:aar", + "androidx.compose.ui:ui-geometry:aar", + "androidx.compose.ui:ui-util:aar", + "androidx.compose.ui:ui:aar", + "org.jetbrains.kotlin:kotlin-stdlib-common" + ], + "androidx.compose.foundation:foundation-layout:aar": [ + "androidx.annotation:annotation", + "androidx.compose.runtime:runtime:aar", + "androidx.compose.ui:ui-util:aar", + "androidx.compose.ui:ui:aar", + "org.jetbrains.kotlin:kotlin-stdlib-common" + ], + "androidx.compose.foundation:foundation:aar": [ + "androidx.annotation:annotation", + "androidx.compose.animation:animation:aar", + "androidx.compose.foundation:foundation-layout:aar", + "androidx.compose.runtime:runtime:aar", + "androidx.compose.ui:ui-text:aar", + "androidx.compose.ui:ui-util:aar", + "androidx.compose.ui:ui:aar", + "org.jetbrains.kotlin:kotlin-stdlib-common" + ], + "androidx.compose.material:material-icons-core:aar": [ + "androidx.compose.ui:ui:aar", + "org.jetbrains.kotlin:kotlin-stdlib" + ], + "androidx.compose.material:material-ripple:aar": [ + "androidx.compose.animation:animation:aar", + "androidx.compose.foundation:foundation:aar", + "androidx.compose.runtime:runtime:aar", + "androidx.compose.ui:ui-util:aar", + "org.jetbrains.kotlin:kotlin-stdlib-common" + ], + "androidx.compose.material:material:aar": [ + "androidx.compose.animation:animation-core:aar", + "androidx.compose.animation:animation:aar", + "androidx.compose.foundation:foundation-layout:aar", + "androidx.compose.foundation:foundation:aar", + "androidx.compose.material:material-icons-core:aar", + "androidx.compose.material:material-ripple:aar", + "androidx.compose.runtime:runtime:aar", + "androidx.compose.ui:ui-text:aar", + "androidx.compose.ui:ui-util:aar", + "androidx.compose.ui:ui:aar", + "org.jetbrains.kotlin:kotlin-stdlib-common" + ], + "androidx.compose.runtime:runtime-saveable:aar": [ + "androidx.annotation:annotation", + "androidx.compose.runtime:runtime:aar", + "org.jetbrains.kotlin:kotlin-stdlib" + ], + "androidx.compose.runtime:runtime:aar": [ + "androidx.annotation:annotation", + "org.jetbrains.kotlin:kotlin-stdlib", + "org.jetbrains.kotlinx:kotlinx-coroutines-android" + ], + "androidx.compose.ui:ui-geometry:aar": [ + "androidx.annotation:annotation", + "androidx.compose.runtime:runtime:aar", + "androidx.compose.ui:ui-util:aar", + "org.jetbrains.kotlin:kotlin-stdlib" + ], + "androidx.compose.ui:ui-graphics:aar": [ + "androidx.annotation:annotation", + "androidx.compose.runtime:runtime:aar", + "androidx.compose.ui:ui-unit:aar", + "androidx.compose.ui:ui-util:aar", + "org.jetbrains.kotlin:kotlin-stdlib-common" + ], + "androidx.compose.ui:ui-text:aar": [ + "androidx.annotation:annotation", + "androidx.collection:collection", + "androidx.compose.runtime:runtime-saveable:aar", + "androidx.compose.runtime:runtime:aar", + "androidx.compose.ui:ui-graphics:aar", + "androidx.compose.ui:ui-unit:aar", + "androidx.compose.ui:ui-util:aar", + "androidx.core:core:aar", + "org.jetbrains.kotlin:kotlin-stdlib", + "org.jetbrains.kotlin:kotlin-stdlib-common" + ], + "androidx.compose.ui:ui-tooling-data:aar": [ + "androidx.annotation:annotation", + "androidx.compose.runtime:runtime:aar", + "androidx.compose.ui:ui:aar", + "org.jetbrains.kotlin:kotlin-stdlib" + ], + "androidx.compose.ui:ui-tooling-preview:aar": [ + "androidx.annotation:annotation", + "androidx.compose.runtime:runtime:aar", + "org.jetbrains.kotlin:kotlin-stdlib" + ], + "androidx.compose.ui:ui-tooling:aar": [ + "androidx.activity:activity-compose:aar", + "androidx.annotation:annotation", + "androidx.compose.animation:animation:aar", + "androidx.compose.material:material:aar", + "androidx.compose.runtime:runtime:aar", + "androidx.compose.ui:ui-tooling-data:aar", + "androidx.compose.ui:ui-tooling-preview:aar", + "androidx.compose.ui:ui:aar", + "androidx.savedstate:savedstate-ktx:aar", + "org.jetbrains.kotlin:kotlin-stdlib" + ], + "androidx.compose.ui:ui-unit:aar": [ + "androidx.annotation:annotation", + "androidx.compose.runtime:runtime:aar", + "androidx.compose.ui:ui-geometry:aar", + "androidx.compose.ui:ui-util:aar", + "org.jetbrains.kotlin:kotlin-stdlib" + ], + "androidx.compose.ui:ui-util:aar": [ + "org.jetbrains.kotlin:kotlin-stdlib" + ], + "androidx.compose.ui:ui:aar": [ + "androidx.annotation:annotation", + "androidx.autofill:autofill:aar", + "androidx.compose.runtime:runtime-saveable:aar", + "androidx.compose.runtime:runtime:aar", + "androidx.compose.ui:ui-geometry:aar", + "androidx.compose.ui:ui-graphics:aar", + "androidx.compose.ui:ui-text:aar", + "androidx.compose.ui:ui-unit:aar", + "androidx.compose.ui:ui-util:aar", + "androidx.lifecycle:lifecycle-common-java8", + "androidx.lifecycle:lifecycle-runtime:aar", + "androidx.lifecycle:lifecycle-viewmodel:aar", + "androidx.profileinstaller:profileinstaller:aar", + "androidx.savedstate:savedstate:aar", + "org.jetbrains.kotlin:kotlin-stdlib", + "org.jetbrains.kotlin:kotlin-stdlib-common", + "org.jetbrains.kotlinx:kotlinx-coroutines-android", + "org.jetbrains.kotlinx:kotlinx-coroutines-core" + ], + "androidx.concurrent:concurrent-futures": [ + "androidx.annotation:annotation", + "com.google.guava:listenablefuture" + ], + "androidx.core:core-ktx:aar": [ + "androidx.annotation:annotation", + "androidx.core:core:aar", + "org.jetbrains.kotlin:kotlin-stdlib" + ], + "androidx.core:core:aar": [ + "androidx.annotation:annotation", + "androidx.annotation:annotation-experimental:aar", + "androidx.collection:collection", + "androidx.concurrent:concurrent-futures", + "androidx.lifecycle:lifecycle-runtime:aar", + "androidx.versionedparcelable:versionedparcelable:aar" + ], + "androidx.customview:customview:aar": [ + "androidx.annotation:annotation", + "androidx.core:core:aar" + ], + "androidx.fragment:fragment:aar": [ + "androidx.activity:activity:aar", + "androidx.annotation:annotation", + "androidx.annotation:annotation-experimental:aar", + "androidx.collection:collection", + "androidx.core:core-ktx:aar", + "androidx.lifecycle:lifecycle-livedata-core:aar", + "androidx.lifecycle:lifecycle-viewmodel-savedstate:aar", + "androidx.lifecycle:lifecycle-viewmodel:aar", + "androidx.loader:loader:aar", + "androidx.savedstate:savedstate:aar", + "androidx.viewpager:viewpager:aar", + "org.jetbrains.kotlin:kotlin-stdlib" + ], + "androidx.interpolator:interpolator:aar": [ + "androidx.annotation:annotation" + ], + "androidx.lifecycle:lifecycle-common": [ + "androidx.annotation:annotation" + ], + "androidx.lifecycle:lifecycle-common-java8": [ + "androidx.annotation:annotation", + "androidx.lifecycle:lifecycle-common" + ], + "androidx.lifecycle:lifecycle-livedata-core:aar": [ + "androidx.arch.core:core-common", + "androidx.arch.core:core-runtime:aar", + "androidx.lifecycle:lifecycle-common" + ], + "androidx.lifecycle:lifecycle-livedata:aar": [ + "androidx.arch.core:core-common", + "androidx.arch.core:core-runtime:aar", + "androidx.lifecycle:lifecycle-livedata-core:aar" + ], + "androidx.lifecycle:lifecycle-runtime-ktx:aar": [ + "androidx.annotation:annotation", + "androidx.lifecycle:lifecycle-runtime:aar", + "org.jetbrains.kotlin:kotlin-stdlib", + "org.jetbrains.kotlinx:kotlinx-coroutines-android" + ], + "androidx.lifecycle:lifecycle-runtime:aar": [ + "androidx.annotation:annotation", + "androidx.arch.core:core-common", + "androidx.arch.core:core-runtime:aar", + "androidx.lifecycle:lifecycle-common" + ], + "androidx.lifecycle:lifecycle-viewmodel-ktx:aar": [ + "androidx.lifecycle:lifecycle-viewmodel:aar", + "org.jetbrains.kotlin:kotlin-stdlib", + "org.jetbrains.kotlinx:kotlinx-coroutines-android" + ], + "androidx.lifecycle:lifecycle-viewmodel-savedstate:aar": [ + "androidx.annotation:annotation", + "androidx.core:core-ktx:aar", + "androidx.lifecycle:lifecycle-livedata-core:aar", + "androidx.lifecycle:lifecycle-viewmodel:aar", + "androidx.savedstate:savedstate:aar", + "org.jetbrains.kotlin:kotlin-stdlib", + "org.jetbrains.kotlinx:kotlinx-coroutines-android" + ], + "androidx.lifecycle:lifecycle-viewmodel:aar": [ + "androidx.annotation:annotation", + "org.jetbrains.kotlin:kotlin-stdlib" + ], + "androidx.loader:loader:aar": [ + "androidx.annotation:annotation", + "androidx.core:core:aar", + "androidx.lifecycle:lifecycle-livedata:aar", + "androidx.lifecycle:lifecycle-viewmodel:aar" + ], + "androidx.profileinstaller:profileinstaller:aar": [ + "androidx.annotation:annotation", + "androidx.startup:startup-runtime:aar" + ], + "androidx.savedstate:savedstate-ktx:aar": [ + "androidx.savedstate:savedstate:aar", + "org.jetbrains.kotlin:kotlin-stdlib" + ], + "androidx.savedstate:savedstate:aar": [ + "androidx.annotation:annotation", + "androidx.arch.core:core-common", + "androidx.lifecycle:lifecycle-common", + "org.jetbrains.kotlin:kotlin-stdlib" + ], + "androidx.startup:startup-runtime:aar": [ + "androidx.annotation:annotation", + "androidx.tracing:tracing:aar" + ], + "androidx.tracing:tracing:aar": [ + "androidx.annotation:annotation" + ], + "androidx.versionedparcelable:versionedparcelable:aar": [ + "androidx.annotation:annotation", + "androidx.collection:collection" + ], + "androidx.viewpager:viewpager:aar": [ + "androidx.annotation:annotation", + "androidx.core:core:aar", + "androidx.customview:customview:aar" + ], + "com.google.dagger:dagger": [ + "javax.inject:javax.inject" + ], + "com.google.dagger:dagger-compiler": [ + "com.google.code.findbugs:jsr305", + "com.google.dagger:dagger", + "com.google.dagger:dagger-producers", + "com.google.dagger:dagger-spi", + "com.google.devtools.ksp:symbol-processing-api", + "com.google.googlejavaformat:google-java-format", + "com.google.guava:failureaccess", + "com.google.guava:guava", + "com.squareup:javapoet", + "javax.inject:javax.inject", + "net.ltgt.gradle.incap:incap", + "org.checkerframework:checker-compat-qual", + "org.jetbrains.kotlin:kotlin-stdlib", + "org.jetbrains.kotlinx:kotlinx-metadata-jvm" + ], + "com.google.dagger:dagger-producers": [ + "com.google.dagger:dagger", + "com.google.guava:failureaccess", + "com.google.guava:guava", + "javax.inject:javax.inject", + "org.checkerframework:checker-compat-qual" + ], + "com.google.dagger:dagger-spi": [ + "com.google.code.findbugs:jsr305", + "com.google.dagger:dagger", + "com.google.dagger:dagger-producers", + "com.google.devtools.ksp:symbol-processing-api", + "com.google.guava:failureaccess", + "com.google.guava:guava", + "com.squareup:javapoet", + "com.squareup:kotlinpoet", + "javax.inject:javax.inject", + "org.jetbrains.kotlin:kotlin-stdlib", + "org.jetbrains.kotlin:kotlin-stdlib-jdk8" + ], + "com.google.dagger:hilt-android:aar": [ + "androidx.activity:activity:aar", + "androidx.annotation:annotation", + "androidx.fragment:fragment:aar", + "androidx.lifecycle:lifecycle-common", + "androidx.lifecycle:lifecycle-viewmodel-savedstate:aar", + "androidx.lifecycle:lifecycle-viewmodel:aar", + "androidx.savedstate:savedstate:aar", + "com.google.code.findbugs:jsr305", + "com.google.dagger:dagger", + "com.google.dagger:dagger-lint-aar:aar", + "com.google.dagger:hilt-core", + "javax.inject:javax.inject", + "org.jetbrains.kotlin:kotlin-stdlib" + ], + "com.google.dagger:hilt-core": [ + "com.google.code.findbugs:jsr305", + "com.google.dagger:dagger", + "javax.inject:javax.inject" + ], + "com.google.devtools.ksp:symbol-processing-api": [ + "org.jetbrains.kotlin:kotlin-stdlib" + ], + "com.google.googlejavaformat:google-java-format": [ + "com.google.errorprone:javac-shaded", + "com.google.guava:guava" + ], + "com.google.guava:guava": [ + "com.google.code.findbugs:jsr305", + "com.google.errorprone:error_prone_annotations", + "com.google.guava:failureaccess", + "com.google.guava:listenablefuture", + "com.google.j2objc:j2objc-annotations", + "org.checkerframework:checker-qual" + ], + "com.google.guava:guava-testlib": [ + "com.google.code.findbugs:jsr305", + "com.google.errorprone:error_prone_annotations", + "com.google.guava:guava", + "com.google.j2objc:j2objc-annotations", + "junit:junit", + "org.checkerframework:checker-qual" + ], + "com.google.truth:truth": [ + "com.google.auto.value:auto-value-annotations", + "com.google.errorprone:error_prone_annotations", + "com.google.guava:guava", + "junit:junit", + "org.checkerframework:checker-qual", + "org.ow2.asm:asm" + ], + "com.jakewharton.retrofit:retrofit2-kotlinx-serialization-converter": [ + "com.squareup.retrofit2:retrofit", + "org.jetbrains.kotlin:kotlin-stdlib", + "org.jetbrains.kotlinx:kotlinx-serialization-core-jvm" + ], + "com.jakewharton.timber:timber:aar": [ + "org.jetbrains.kotlin:kotlin-stdlib", + "org.jetbrains:annotations" + ], + "com.squareup.moshi:moshi": [ + "com.squareup.okio:okio-jvm", + "org.jetbrains.kotlin:kotlin-stdlib-jdk8" + ], + "com.squareup.moshi:moshi-kotlin": [ + "com.squareup.moshi:moshi", + "org.jetbrains.kotlin:kotlin-reflect", + "org.jetbrains.kotlin:kotlin-stdlib-jdk8" + ], + "com.squareup.moshi:moshi-kotlin-codegen": [ + "com.google.auto.service:auto-service-annotations", + "com.google.guava:guava", + "com.squareup.moshi:moshi", + "com.squareup:kotlinpoet", + "com.squareup:kotlinpoet-ksp", + "org.jetbrains.kotlin:kotlin-reflect", + "org.jetbrains.kotlin:kotlin-stdlib-jdk8", + "org.ow2.asm:asm" + ], + "com.squareup.okhttp3:logging-interceptor": [ + "com.squareup.okhttp3:okhttp", + "org.jetbrains.kotlin:kotlin-stdlib-jdk8" + ], + "com.squareup.okhttp3:okhttp": [ + "com.squareup.okio:okio", + "org.jetbrains.kotlin:kotlin-stdlib" + ], + "com.squareup.okio:okio": [ + "org.jetbrains.kotlin:kotlin-stdlib", + "org.jetbrains.kotlin:kotlin-stdlib-common" + ], + "com.squareup.okio:okio-jvm": [ + "org.jetbrains.kotlin:kotlin-stdlib" + ], + "com.squareup.retrofit2:retrofit": [ + "com.squareup.okhttp3:okhttp" + ], + "com.squareup:kotlinpoet": [ + "org.jetbrains.kotlin:kotlin-reflect", + "org.jetbrains.kotlin:kotlin-stdlib-jdk8" + ], + "com.squareup:kotlinpoet-ksp": [ + "com.squareup:kotlinpoet", + "org.jetbrains.kotlin:kotlin-stdlib-jdk8" + ], + "junit:junit": [ + "org.hamcrest:hamcrest-core" + ], + "org.jetbrains.kotlin:kotlin-reflect": [ + "org.jetbrains.kotlin:kotlin-stdlib" + ], + "org.jetbrains.kotlin:kotlin-stdlib": [ + "org.jetbrains:annotations" + ], + "org.jetbrains.kotlin:kotlin-stdlib-jdk7": [ + "org.jetbrains.kotlin:kotlin-stdlib" + ], + "org.jetbrains.kotlin:kotlin-stdlib-jdk8": [ + "org.jetbrains.kotlin:kotlin-stdlib", + "org.jetbrains.kotlin:kotlin-stdlib-jdk7" + ], + "org.jetbrains.kotlinx:kotlinx-collections-immutable-jvm": [ + "org.jetbrains.kotlin:kotlin-stdlib", + "org.jetbrains.kotlin:kotlin-stdlib-common" + ], + "org.jetbrains.kotlinx:kotlinx-coroutines-android": [ + "org.jetbrains.kotlin:kotlin-stdlib-jdk8", + "org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm" + ], + "org.jetbrains.kotlinx:kotlinx-coroutines-core": [ + "org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm" + ], + "org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm": [ + "org.jetbrains.kotlin:kotlin-stdlib", + "org.jetbrains:annotations" + ], + "org.jetbrains.kotlinx:kotlinx-coroutines-test": [ + "org.jetbrains.kotlinx:kotlinx-coroutines-test-jvm" + ], + "org.jetbrains.kotlinx:kotlinx-coroutines-test-jvm": [ + "org.jetbrains.kotlin:kotlin-stdlib", + "org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm", + "org.jetbrains:annotations" + ], + "org.jetbrains.kotlinx:kotlinx-metadata-jvm": [ + "org.jetbrains.kotlin:kotlin-stdlib" + ], + "org.jetbrains.kotlinx:kotlinx-serialization-core": [ + "org.jetbrains.kotlinx:kotlinx-serialization-core-jvm" + ], + "org.jetbrains.kotlinx:kotlinx-serialization-core-jvm": [ + "org.jetbrains.kotlin:kotlin-stdlib", + "org.jetbrains.kotlin:kotlin-stdlib-common" + ], + "org.jetbrains.kotlinx:kotlinx-serialization-json": [ + "org.jetbrains.kotlinx:kotlinx-serialization-json-jvm" + ], + "org.jetbrains.kotlinx:kotlinx-serialization-json-jvm": [ + "org.jetbrains.kotlin:kotlin-stdlib", + "org.jetbrains.kotlin:kotlin-stdlib-common", + "org.jetbrains.kotlinx:kotlinx-serialization-core-jvm" + ], + "org.mockito:mockito-core": [ + "net.bytebuddy:byte-buddy", + "net.bytebuddy:byte-buddy-agent", + "org.objenesis:objenesis" + ] + }, + "packages": { + "androidx.annotation:annotation": [ + "androidx.annotation" + ], + "androidx.arch.core:core-common": [ + "androidx.arch.core.internal", + "androidx.arch.core.util" + ], + "androidx.collection:collection": [ + "androidx.collection" + ], + "androidx.concurrent:concurrent-futures": [ + "androidx.concurrent.futures" + ], + "androidx.lifecycle:lifecycle-common": [ + "androidx.lifecycle" + ], + "com.google.auto.service:auto-service-annotations": [ + "com.google.auto.service" + ], + "com.google.auto.value:auto-value-annotations": [ + "com.google.auto.value", + "com.google.auto.value.extension.memoized", + "com.google.auto.value.extension.serializable" + ], + "com.google.code.findbugs:jsr305": [ + "javax.annotation", + "javax.annotation.concurrent", + "javax.annotation.meta" + ], + "com.google.code.gson:gson": [ + "com.google.gson", + "com.google.gson.annotations", + "com.google.gson.internal", + "com.google.gson.internal.bind", + "com.google.gson.internal.bind.util", + "com.google.gson.internal.reflect", + "com.google.gson.internal.sql", + "com.google.gson.reflect", + "com.google.gson.stream" + ], + "com.google.dagger:dagger": [ + "dagger", + "dagger.assisted", + "dagger.internal", + "dagger.multibindings" + ], + "com.google.dagger:dagger-compiler": [ + "dagger.internal.codegen", + "dagger.internal.codegen.base", + "dagger.internal.codegen.binding", + "dagger.internal.codegen.bindinggraphvalidation", + "dagger.internal.codegen.compileroption", + "dagger.internal.codegen.componentgenerator", + "dagger.internal.codegen.javapoet", + "dagger.internal.codegen.kotlin", + "dagger.internal.codegen.langmodel", + "dagger.internal.codegen.processingstep", + "dagger.internal.codegen.validation", + "dagger.internal.codegen.writing" + ], + "com.google.dagger:dagger-producers": [ + "dagger.producers", + "dagger.producers.internal", + "dagger.producers.monitoring", + "dagger.producers.monitoring.internal" + ], + "com.google.dagger:dagger-spi": [ + "dagger.internal.codegen.extension", + "dagger.internal.codegen.xprocessing", + "dagger.model", + "dagger.spi", + "dagger.spi.model", + "dagger.spi.shaded.androidx.room.compiler.codegen", + "dagger.spi.shaded.androidx.room.compiler.codegen.java", + "dagger.spi.shaded.androidx.room.compiler.codegen.kotlin", + "dagger.spi.shaded.androidx.room.compiler.processing", + "dagger.spi.shaded.androidx.room.compiler.processing.compat", + "dagger.spi.shaded.androidx.room.compiler.processing.javac", + "dagger.spi.shaded.androidx.room.compiler.processing.javac.kotlin", + "dagger.spi.shaded.androidx.room.compiler.processing.ksp", + "dagger.spi.shaded.androidx.room.compiler.processing.ksp.synthetic", + "dagger.spi.shaded.androidx.room.compiler.processing.util", + "dagger.spi.shaded.auto.common" + ], + "com.google.dagger:hilt-core": [ + "dagger.hilt", + "dagger.hilt.codegen", + "dagger.hilt.components", + "dagger.hilt.internal", + "dagger.hilt.internal.aliasof", + "dagger.hilt.internal.definecomponent", + "dagger.hilt.internal.generatesrootinput", + "dagger.hilt.migration", + "dagger.hilt.processor.internal.aggregateddeps", + "dagger.hilt.processor.internal.definecomponent.codegen", + "dagger.hilt.processor.internal.generatesrootinput.codegen" + ], + "com.google.devtools.ksp:symbol-processing-api": [ + "com.google.devtools.ksp", + "com.google.devtools.ksp.processing", + "com.google.devtools.ksp.symbol", + "com.google.devtools.ksp.visitor" + ], + "com.google.errorprone:error_prone_annotations": [ + "com.google.errorprone.annotations", + "com.google.errorprone.annotations.concurrent" + ], + "com.google.errorprone:javac-shaded": [ + "org.openjdk.javax.annotation.processing", + "org.openjdk.javax.lang.model", + "org.openjdk.javax.lang.model.element", + "org.openjdk.javax.lang.model.type", + "org.openjdk.javax.lang.model.util", + "org.openjdk.javax.tools", + "org.openjdk.source.doctree", + "org.openjdk.source.tree", + "org.openjdk.source.util", + "org.openjdk.tools.doclint", + "org.openjdk.tools.doclint.resources", + "org.openjdk.tools.javac", + "org.openjdk.tools.javac.api", + "org.openjdk.tools.javac.code", + "org.openjdk.tools.javac.comp", + "org.openjdk.tools.javac.file", + "org.openjdk.tools.javac.jvm", + "org.openjdk.tools.javac.main", + "org.openjdk.tools.javac.model", + "org.openjdk.tools.javac.parser", + "org.openjdk.tools.javac.platform", + "org.openjdk.tools.javac.processing", + "org.openjdk.tools.javac.resources", + "org.openjdk.tools.javac.tree", + "org.openjdk.tools.javac.util", + "org.openjdk.tools.javah", + "org.openjdk.tools.javah.resources", + "org.openjdk.tools.sjavac", + "org.openjdk.tools.sjavac.client", + "org.openjdk.tools.sjavac.comp", + "org.openjdk.tools.sjavac.comp.dependencies", + "org.openjdk.tools.sjavac.options", + "org.openjdk.tools.sjavac.pubapi", + "org.openjdk.tools.sjavac.server", + "org.openjdk.tools.sjavac.server.log" + ], + "com.google.googlejavaformat:google-java-format": [ + "com.google.googlejavaformat", + "com.google.googlejavaformat.java", + "com.google.googlejavaformat.java.filer", + "com.google.googlejavaformat.java.javadoc" + ], + "com.google.guava:failureaccess": [ + "com.google.common.util.concurrent.internal" + ], + "com.google.guava:guava": [ + "com.google.common.annotations", + "com.google.common.base", + "com.google.common.base.internal", + "com.google.common.cache", + "com.google.common.collect", + "com.google.common.escape", + "com.google.common.eventbus", + "com.google.common.graph", + "com.google.common.hash", + "com.google.common.html", + "com.google.common.io", + "com.google.common.math", + "com.google.common.net", + "com.google.common.primitives", + "com.google.common.reflect", + "com.google.common.util.concurrent", + "com.google.common.xml", + "com.google.thirdparty.publicsuffix" + ], + "com.google.guava:guava-testlib": [ + "com.google.common.collect.testing", + "com.google.common.collect.testing.features", + "com.google.common.collect.testing.google", + "com.google.common.collect.testing.testers", + "com.google.common.escape.testing", + "com.google.common.testing", + "com.google.common.util.concurrent.testing" + ], + "com.google.j2objc:j2objc-annotations": [ + "com.google.j2objc.annotations" + ], + "com.google.truth:truth": [ + "com.google.common.truth" + ], + "com.jakewharton.retrofit:retrofit2-kotlinx-serialization-converter": [ + "com.jakewharton.retrofit2.converter.kotlinx.serialization" + ], + "com.squareup.moshi:moshi": [ + "com.squareup.moshi", + "com.squareup.moshi.internal" + ], + "com.squareup.moshi:moshi-kotlin": [ + "com.squareup.moshi", + "com.squareup.moshi.kotlin.reflect" + ], + "com.squareup.moshi:moshi-kotlin-codegen": [ + "com.squareup.moshi.kotlin.codegen.api", + "com.squareup.moshi.kotlin.codegen.apt", + "com.squareup.moshi.kotlin.codegen.ksp", + "com.squareup.moshi.kotlinpoet.metadata", + "com.squareup.moshi.kotlinpoet.metadata.classinspectors", + "com.squareup.moshi.kotlinpoet.metadata.specs", + "com.squareup.moshi.kotlinx.metadata", + "com.squareup.moshi.kotlinx.metadata.internal", + "com.squareup.moshi.kotlinx.metadata.internal.common", + "com.squareup.moshi.kotlinx.metadata.internal.extensions", + "com.squareup.moshi.kotlinx.metadata.internal.metadata", + "com.squareup.moshi.kotlinx.metadata.internal.metadata.builtins", + "com.squareup.moshi.kotlinx.metadata.internal.metadata.deserialization", + "com.squareup.moshi.kotlinx.metadata.internal.metadata.jvm", + "com.squareup.moshi.kotlinx.metadata.internal.metadata.jvm.deserialization", + "com.squareup.moshi.kotlinx.metadata.internal.metadata.jvm.serialization", + "com.squareup.moshi.kotlinx.metadata.internal.metadata.serialization", + "com.squareup.moshi.kotlinx.metadata.internal.protobuf", + "com.squareup.moshi.kotlinx.metadata.jvm", + "com.squareup.moshi.kotlinx.metadata.jvm.internal", + "shadow.com.google.auto.common" + ], + "com.squareup.okhttp3:logging-interceptor": [ + "okhttp3.logging" + ], + "com.squareup.okhttp3:okhttp": [ + "okhttp3", + "okhttp3.internal", + "okhttp3.internal.authenticator", + "okhttp3.internal.cache", + "okhttp3.internal.cache2", + "okhttp3.internal.concurrent", + "okhttp3.internal.connection", + "okhttp3.internal.http", + "okhttp3.internal.http1", + "okhttp3.internal.http2", + "okhttp3.internal.io", + "okhttp3.internal.platform", + "okhttp3.internal.platform.android", + "okhttp3.internal.proxy", + "okhttp3.internal.publicsuffix", + "okhttp3.internal.tls", + "okhttp3.internal.ws" + ], + "com.squareup.okio:okio": [ + "okio", + "okio.internal" + ], + "com.squareup.okio:okio-jvm": [ + "okio", + "okio.internal" + ], + "com.squareup.retrofit2:retrofit": [ + "retrofit2", + "retrofit2.http", + "retrofit2.internal" + ], + "com.squareup:javapoet": [ + "com.squareup.javapoet" + ], + "com.squareup:kotlinpoet": [ + "com.squareup.kotlinpoet", + "com.squareup.kotlinpoet.jvm", + "com.squareup.kotlinpoet.tags" + ], + "com.squareup:kotlinpoet-ksp": [ + "com.squareup.kotlinpoet.ksp" + ], + "javax.inject:javax.inject": [ + "javax.inject" + ], + "junit:junit": [ + "junit.extensions", + "junit.framework", + "junit.runner", + "junit.textui", + "org.junit", + "org.junit.experimental", + "org.junit.experimental.categories", + "org.junit.experimental.max", + "org.junit.experimental.results", + "org.junit.experimental.runners", + "org.junit.experimental.theories", + "org.junit.experimental.theories.internal", + "org.junit.experimental.theories.suppliers", + "org.junit.function", + "org.junit.internal", + "org.junit.internal.builders", + "org.junit.internal.management", + "org.junit.internal.matchers", + "org.junit.internal.requests", + "org.junit.internal.runners", + "org.junit.internal.runners.model", + "org.junit.internal.runners.rules", + "org.junit.internal.runners.statements", + "org.junit.matchers", + "org.junit.rules", + "org.junit.runner", + "org.junit.runner.manipulation", + "org.junit.runner.notification", + "org.junit.runners", + "org.junit.runners.model", + "org.junit.runners.parameterized", + "org.junit.validator" + ], + "net.bytebuddy:byte-buddy": [ + "net.bytebuddy", + "net.bytebuddy.agent.builder", + "net.bytebuddy.asm", + "net.bytebuddy.build", + "net.bytebuddy.description", + "net.bytebuddy.description.annotation", + "net.bytebuddy.description.enumeration", + "net.bytebuddy.description.field", + "net.bytebuddy.description.method", + "net.bytebuddy.description.modifier", + "net.bytebuddy.description.type", + "net.bytebuddy.dynamic", + "net.bytebuddy.dynamic.loading", + "net.bytebuddy.dynamic.scaffold", + "net.bytebuddy.dynamic.scaffold.inline", + "net.bytebuddy.dynamic.scaffold.subclass", + "net.bytebuddy.implementation", + "net.bytebuddy.implementation.attribute", + "net.bytebuddy.implementation.auxiliary", + "net.bytebuddy.implementation.bind", + "net.bytebuddy.implementation.bind.annotation", + "net.bytebuddy.implementation.bytecode", + "net.bytebuddy.implementation.bytecode.assign", + "net.bytebuddy.implementation.bytecode.assign.primitive", + "net.bytebuddy.implementation.bytecode.assign.reference", + "net.bytebuddy.implementation.bytecode.collection", + "net.bytebuddy.implementation.bytecode.constant", + "net.bytebuddy.implementation.bytecode.member", + "net.bytebuddy.jar.asm", + "net.bytebuddy.jar.asm.commons", + "net.bytebuddy.jar.asm.signature", + "net.bytebuddy.matcher", + "net.bytebuddy.pool", + "net.bytebuddy.utility", + "net.bytebuddy.utility.dispatcher", + "net.bytebuddy.utility.nullability", + "net.bytebuddy.utility.privilege", + "net.bytebuddy.utility.visitor" + ], + "net.bytebuddy:byte-buddy-agent": [ + "net.bytebuddy.agent", + "net.bytebuddy.agent.utility.nullability" + ], + "net.ltgt.gradle.incap:incap": [ + "net.ltgt.gradle.incap" + ], + "org.checkerframework:checker-compat-qual": [ + "org.checkerframework.checker.nullness.compatqual" + ], + "org.checkerframework:checker-qual": [ + "org.checkerframework.checker.builder.qual", + "org.checkerframework.checker.calledmethods.qual", + "org.checkerframework.checker.compilermsgs.qual", + "org.checkerframework.checker.fenum.qual", + "org.checkerframework.checker.formatter.qual", + "org.checkerframework.checker.guieffect.qual", + "org.checkerframework.checker.i18n.qual", + "org.checkerframework.checker.i18nformatter.qual", + "org.checkerframework.checker.index.qual", + "org.checkerframework.checker.initialization.qual", + "org.checkerframework.checker.interning.qual", + "org.checkerframework.checker.lock.qual", + "org.checkerframework.checker.nullness.qual", + "org.checkerframework.checker.optional.qual", + "org.checkerframework.checker.propkey.qual", + "org.checkerframework.checker.regex.qual", + "org.checkerframework.checker.signature.qual", + "org.checkerframework.checker.signedness.qual", + "org.checkerframework.checker.tainting.qual", + "org.checkerframework.checker.units.qual", + "org.checkerframework.common.aliasing.qual", + "org.checkerframework.common.initializedfields.qual", + "org.checkerframework.common.reflection.qual", + "org.checkerframework.common.returnsreceiver.qual", + "org.checkerframework.common.subtyping.qual", + "org.checkerframework.common.util.report.qual", + "org.checkerframework.common.value.qual", + "org.checkerframework.dataflow.qual", + "org.checkerframework.framework.qual" + ], + "org.hamcrest:hamcrest-core": [ + "org.hamcrest", + "org.hamcrest.core", + "org.hamcrest.internal" + ], + "org.jetbrains.kotlin:kotlin-reflect": [ + "kotlin.reflect.full", + "kotlin.reflect.jvm", + "kotlin.reflect.jvm.internal", + "kotlin.reflect.jvm.internal.calls", + "kotlin.reflect.jvm.internal.impl", + "kotlin.reflect.jvm.internal.impl.builtins", + "kotlin.reflect.jvm.internal.impl.builtins.functions", + "kotlin.reflect.jvm.internal.impl.builtins.jvm", + "kotlin.reflect.jvm.internal.impl.descriptors", + "kotlin.reflect.jvm.internal.impl.descriptors.annotations", + "kotlin.reflect.jvm.internal.impl.descriptors.deserialization", + "kotlin.reflect.jvm.internal.impl.descriptors.impl", + "kotlin.reflect.jvm.internal.impl.descriptors.java", + "kotlin.reflect.jvm.internal.impl.descriptors.runtime.components", + "kotlin.reflect.jvm.internal.impl.descriptors.runtime.structure", + "kotlin.reflect.jvm.internal.impl.incremental", + "kotlin.reflect.jvm.internal.impl.incremental.components", + "kotlin.reflect.jvm.internal.impl.load.java", + "kotlin.reflect.jvm.internal.impl.load.java.components", + "kotlin.reflect.jvm.internal.impl.load.java.descriptors", + "kotlin.reflect.jvm.internal.impl.load.java.lazy", + "kotlin.reflect.jvm.internal.impl.load.java.lazy.descriptors", + "kotlin.reflect.jvm.internal.impl.load.java.lazy.types", + "kotlin.reflect.jvm.internal.impl.load.java.sources", + "kotlin.reflect.jvm.internal.impl.load.java.structure", + "kotlin.reflect.jvm.internal.impl.load.java.typeEnhancement", + "kotlin.reflect.jvm.internal.impl.load.kotlin", + "kotlin.reflect.jvm.internal.impl.load.kotlin.header", + "kotlin.reflect.jvm.internal.impl.metadata", + "kotlin.reflect.jvm.internal.impl.metadata.builtins", + "kotlin.reflect.jvm.internal.impl.metadata.deserialization", + "kotlin.reflect.jvm.internal.impl.metadata.jvm", + "kotlin.reflect.jvm.internal.impl.metadata.jvm.deserialization", + "kotlin.reflect.jvm.internal.impl.name", + "kotlin.reflect.jvm.internal.impl.platform", + "kotlin.reflect.jvm.internal.impl.protobuf", + "kotlin.reflect.jvm.internal.impl.renderer", + "kotlin.reflect.jvm.internal.impl.resolve", + "kotlin.reflect.jvm.internal.impl.resolve.calls.inference", + "kotlin.reflect.jvm.internal.impl.resolve.constants", + "kotlin.reflect.jvm.internal.impl.resolve.deprecation", + "kotlin.reflect.jvm.internal.impl.resolve.descriptorUtil", + "kotlin.reflect.jvm.internal.impl.resolve.jvm", + "kotlin.reflect.jvm.internal.impl.resolve.sam", + "kotlin.reflect.jvm.internal.impl.resolve.scopes", + "kotlin.reflect.jvm.internal.impl.resolve.scopes.receivers", + "kotlin.reflect.jvm.internal.impl.serialization", + "kotlin.reflect.jvm.internal.impl.serialization.deserialization", + "kotlin.reflect.jvm.internal.impl.serialization.deserialization.builtins", + "kotlin.reflect.jvm.internal.impl.serialization.deserialization.descriptors", + "kotlin.reflect.jvm.internal.impl.storage", + "kotlin.reflect.jvm.internal.impl.types", + "kotlin.reflect.jvm.internal.impl.types.checker", + "kotlin.reflect.jvm.internal.impl.types.error", + "kotlin.reflect.jvm.internal.impl.types.extensions", + "kotlin.reflect.jvm.internal.impl.types.model", + "kotlin.reflect.jvm.internal.impl.types.typeUtil", + "kotlin.reflect.jvm.internal.impl.types.typesApproximation", + "kotlin.reflect.jvm.internal.impl.util", + "kotlin.reflect.jvm.internal.impl.util.capitalizeDecapitalize", + "kotlin.reflect.jvm.internal.impl.util.collectionUtils", + "kotlin.reflect.jvm.internal.impl.utils" + ], + "org.jetbrains.kotlin:kotlin-stdlib": [ + "kotlin", + "kotlin.annotation", + "kotlin.collections", + "kotlin.collections.builders", + "kotlin.collections.jdk8", + "kotlin.collections.unsigned", + "kotlin.comparisons", + "kotlin.concurrent", + "kotlin.contracts", + "kotlin.coroutines", + "kotlin.coroutines.cancellation", + "kotlin.coroutines.intrinsics", + "kotlin.coroutines.jvm.internal", + "kotlin.enums", + "kotlin.experimental", + "kotlin.internal", + "kotlin.internal.jdk7", + "kotlin.internal.jdk8", + "kotlin.io", + "kotlin.io.encoding", + "kotlin.io.path", + "kotlin.jdk7", + "kotlin.js", + "kotlin.jvm", + "kotlin.jvm.functions", + "kotlin.jvm.internal", + "kotlin.jvm.internal.markers", + "kotlin.jvm.internal.unsafe", + "kotlin.jvm.jdk8", + "kotlin.jvm.optionals", + "kotlin.math", + "kotlin.properties", + "kotlin.random", + "kotlin.random.jdk8", + "kotlin.ranges", + "kotlin.reflect", + "kotlin.sequences", + "kotlin.streams.jdk8", + "kotlin.system", + "kotlin.text", + "kotlin.text.jdk8", + "kotlin.time", + "kotlin.time.jdk8" + ], + "org.jetbrains.kotlinx:kotlinx-collections-immutable-jvm": [ + "kotlinx.collections.immutable", + "kotlinx.collections.immutable.adapters", + "kotlinx.collections.immutable.implementations.immutableList", + "kotlinx.collections.immutable.implementations.immutableMap", + "kotlinx.collections.immutable.implementations.immutableSet", + "kotlinx.collections.immutable.implementations.persistentOrderedMap", + "kotlinx.collections.immutable.implementations.persistentOrderedSet", + "kotlinx.collections.immutable.internal" + ], + "org.jetbrains.kotlinx:kotlinx-coroutines-android": [ + "kotlinx.coroutines.android" + ], + "org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm": [ + "_COROUTINE", + "kotlinx.coroutines", + "kotlinx.coroutines.channels", + "kotlinx.coroutines.debug", + "kotlinx.coroutines.debug.internal", + "kotlinx.coroutines.flow", + "kotlinx.coroutines.flow.internal", + "kotlinx.coroutines.future", + "kotlinx.coroutines.internal", + "kotlinx.coroutines.intrinsics", + "kotlinx.coroutines.scheduling", + "kotlinx.coroutines.selects", + "kotlinx.coroutines.stream", + "kotlinx.coroutines.sync", + "kotlinx.coroutines.time" + ], + "org.jetbrains.kotlinx:kotlinx-coroutines-test-jvm": [ + "kotlinx.coroutines.test", + "kotlinx.coroutines.test.internal" + ], + "org.jetbrains.kotlinx:kotlinx-metadata-jvm": [ + "kotlinx.metadata", + "kotlinx.metadata.impl", + "kotlinx.metadata.impl.extensions", + "kotlinx.metadata.internal.common", + "kotlinx.metadata.internal.metadata", + "kotlinx.metadata.internal.metadata.builtins", + "kotlinx.metadata.internal.metadata.deserialization", + "kotlinx.metadata.internal.metadata.jvm", + "kotlinx.metadata.internal.metadata.jvm.deserialization", + "kotlinx.metadata.internal.metadata.jvm.serialization", + "kotlinx.metadata.internal.metadata.serialization", + "kotlinx.metadata.internal.protobuf", + "kotlinx.metadata.jvm", + "kotlinx.metadata.jvm.impl" + ], + "org.jetbrains.kotlinx:kotlinx-serialization-core-jvm": [ + "kotlinx.serialization", + "kotlinx.serialization.builtins", + "kotlinx.serialization.descriptors", + "kotlinx.serialization.encoding", + "kotlinx.serialization.internal", + "kotlinx.serialization.modules" + ], + "org.jetbrains.kotlinx:kotlinx-serialization-json-jvm": [ + "kotlinx.serialization.json", + "kotlinx.serialization.json.internal" + ], + "org.jetbrains:annotations": [ + "org.intellij.lang.annotations", + "org.jetbrains.annotations" + ], + "org.jsoup:jsoup": [ + "org.jsoup", + "org.jsoup.helper", + "org.jsoup.internal", + "org.jsoup.nodes", + "org.jsoup.parser", + "org.jsoup.safety", + "org.jsoup.select" + ], + "org.mockito:mockito-core": [ + "org.mockito", + "org.mockito.codegen", + "org.mockito.configuration", + "org.mockito.creation.instance", + "org.mockito.exceptions.base", + "org.mockito.exceptions.misusing", + "org.mockito.exceptions.stacktrace", + "org.mockito.exceptions.verification", + "org.mockito.exceptions.verification.junit", + "org.mockito.exceptions.verification.opentest4j", + "org.mockito.hamcrest", + "org.mockito.internal", + "org.mockito.internal.configuration", + "org.mockito.internal.configuration.injection", + "org.mockito.internal.configuration.injection.filter", + "org.mockito.internal.configuration.injection.scanner", + "org.mockito.internal.configuration.plugins", + "org.mockito.internal.creation", + "org.mockito.internal.creation.bytebuddy", + "org.mockito.internal.creation.instance", + "org.mockito.internal.creation.proxy", + "org.mockito.internal.creation.settings", + "org.mockito.internal.creation.util", + "org.mockito.internal.debugging", + "org.mockito.internal.exceptions", + "org.mockito.internal.exceptions.stacktrace", + "org.mockito.internal.exceptions.util", + "org.mockito.internal.framework", + "org.mockito.internal.hamcrest", + "org.mockito.internal.handler", + "org.mockito.internal.invocation", + "org.mockito.internal.invocation.finder", + "org.mockito.internal.invocation.mockref", + "org.mockito.internal.junit", + "org.mockito.internal.listeners", + "org.mockito.internal.matchers", + "org.mockito.internal.matchers.apachecommons", + "org.mockito.internal.matchers.text", + "org.mockito.internal.progress", + "org.mockito.internal.reporting", + "org.mockito.internal.runners", + "org.mockito.internal.runners.util", + "org.mockito.internal.session", + "org.mockito.internal.stubbing", + "org.mockito.internal.stubbing.answers", + "org.mockito.internal.stubbing.defaultanswers", + "org.mockito.internal.util", + "org.mockito.internal.util.collections", + "org.mockito.internal.util.concurrent", + "org.mockito.internal.util.io", + "org.mockito.internal.util.reflection", + "org.mockito.internal.verification", + "org.mockito.internal.verification.api", + "org.mockito.internal.verification.argumentmatching", + "org.mockito.internal.verification.checkers", + "org.mockito.invocation", + "org.mockito.junit", + "org.mockito.listeners", + "org.mockito.mock", + "org.mockito.plugins", + "org.mockito.quality", + "org.mockito.session", + "org.mockito.stubbing", + "org.mockito.verification" + ], + "org.objenesis:objenesis": [ + "org.objenesis", + "org.objenesis.instantiator", + "org.objenesis.instantiator.android", + "org.objenesis.instantiator.annotations", + "org.objenesis.instantiator.basic", + "org.objenesis.instantiator.gcj", + "org.objenesis.instantiator.perc", + "org.objenesis.instantiator.sun", + "org.objenesis.instantiator.util", + "org.objenesis.strategy" + ], + "org.ow2.asm:asm": [ + "org.objectweb.asm", + "org.objectweb.asm.signature" + ] + }, + "repositories": { + "https://maven.google.com/": [ + "androidx.activity:activity-compose:aar", + "androidx.activity:activity-ktx:aar", + "androidx.activity:activity:aar", + "androidx.annotation:annotation", + "androidx.annotation:annotation-experimental:aar", + "androidx.arch.core:core-common", + "androidx.arch.core:core-runtime:aar", + "androidx.autofill:autofill:aar", + "androidx.browser:browser:aar", + "androidx.collection:collection", + "androidx.compose.animation:animation-core:aar", + "androidx.compose.animation:animation:aar", + "androidx.compose.foundation:foundation-layout:aar", + "androidx.compose.foundation:foundation:aar", + "androidx.compose.material:material-icons-core:aar", + "androidx.compose.material:material-ripple:aar", + "androidx.compose.material:material:aar", + "androidx.compose.runtime:runtime-saveable:aar", + "androidx.compose.runtime:runtime:aar", + "androidx.compose.ui:ui-geometry:aar", + "androidx.compose.ui:ui-graphics:aar", + "androidx.compose.ui:ui-text:aar", + "androidx.compose.ui:ui-tooling-data:aar", + "androidx.compose.ui:ui-tooling-preview:aar", + "androidx.compose.ui:ui-tooling:aar", + "androidx.compose.ui:ui-unit:aar", + "androidx.compose.ui:ui-util:aar", + "androidx.compose.ui:ui:aar", + "androidx.concurrent:concurrent-futures", + "androidx.core:core-ktx:aar", + "androidx.core:core:aar", + "androidx.customview:customview:aar", + "androidx.fragment:fragment:aar", + "androidx.interpolator:interpolator:aar", + "androidx.lifecycle:lifecycle-common", + "androidx.lifecycle:lifecycle-common-java8", + "androidx.lifecycle:lifecycle-livedata-core:aar", + "androidx.lifecycle:lifecycle-livedata:aar", + "androidx.lifecycle:lifecycle-runtime-ktx:aar", + "androidx.lifecycle:lifecycle-runtime:aar", + "androidx.lifecycle:lifecycle-viewmodel-ktx:aar", + "androidx.lifecycle:lifecycle-viewmodel-savedstate:aar", + "androidx.lifecycle:lifecycle-viewmodel:aar", + "androidx.loader:loader:aar", + "androidx.profileinstaller:profileinstaller:aar", + "androidx.savedstate:savedstate-ktx:aar", + "androidx.savedstate:savedstate:aar", + "androidx.startup:startup-runtime:aar", + "androidx.tracing:tracing:aar", + "androidx.versionedparcelable:versionedparcelable:aar", + "androidx.viewpager:viewpager:aar", + "com.google.auto.service:auto-service-annotations", + "com.google.auto.value:auto-value-annotations", + "com.google.code.findbugs:jsr305", + "com.google.code.gson:gson", + "com.google.dagger:dagger", + "com.google.dagger:dagger-compiler", + "com.google.dagger:dagger-lint-aar:aar", + "com.google.dagger:dagger-producers", + "com.google.dagger:dagger-spi", + "com.google.dagger:hilt-android:aar", + "com.google.dagger:hilt-core", + "com.google.devtools.ksp:symbol-processing-api", + "com.google.errorprone:error_prone_annotations", + "com.google.errorprone:javac-shaded", + "com.google.googlejavaformat:google-java-format", + "com.google.guava:failureaccess", + "com.google.guava:guava", + "com.google.guava:guava-testlib", + "com.google.guava:listenablefuture", + "com.google.j2objc:j2objc-annotations", + "com.google.truth:truth", + "com.jakewharton.retrofit:retrofit2-kotlinx-serialization-converter", + "com.jakewharton.timber:timber:aar", + "com.squareup.moshi:moshi", + "com.squareup.moshi:moshi-kotlin", + "com.squareup.moshi:moshi-kotlin-codegen", + "com.squareup.okhttp3:logging-interceptor", + "com.squareup.okhttp3:okhttp", + "com.squareup.okio:okio", + "com.squareup.okio:okio-jvm", + "com.squareup.retrofit2:retrofit", + "com.squareup:javapoet", + "com.squareup:kotlinpoet", + "com.squareup:kotlinpoet-ksp", + "javax.inject:javax.inject", + "junit:junit", + "net.bytebuddy:byte-buddy", + "net.bytebuddy:byte-buddy-agent", + "net.ltgt.gradle.incap:incap", + "org.checkerframework:checker-compat-qual", + "org.checkerframework:checker-qual", + "org.hamcrest:hamcrest-core", + "org.jetbrains.kotlin:kotlin-reflect", + "org.jetbrains.kotlin:kotlin-stdlib", + "org.jetbrains.kotlin:kotlin-stdlib-common", + "org.jetbrains.kotlin:kotlin-stdlib-jdk7", + "org.jetbrains.kotlin:kotlin-stdlib-jdk8", + "org.jetbrains.kotlinx:kotlinx-collections-immutable-jvm", + "org.jetbrains.kotlinx:kotlinx-coroutines-android", + "org.jetbrains.kotlinx:kotlinx-coroutines-core", + "org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm", + "org.jetbrains.kotlinx:kotlinx-coroutines-test", + "org.jetbrains.kotlinx:kotlinx-coroutines-test-jvm", + "org.jetbrains.kotlinx:kotlinx-metadata-jvm", + "org.jetbrains.kotlinx:kotlinx-serialization-core", + "org.jetbrains.kotlinx:kotlinx-serialization-core-jvm", + "org.jetbrains.kotlinx:kotlinx-serialization-json", + "org.jetbrains.kotlinx:kotlinx-serialization-json-jvm", + "org.jetbrains:annotations", + "org.jsoup:jsoup", + "org.mockito:mockito-core", + "org.objenesis:objenesis", + "org.ow2.asm:asm" + ], + "https://repo1.maven.org/maven2/": [ + "androidx.activity:activity-compose:aar", + "androidx.activity:activity-ktx:aar", + "androidx.activity:activity:aar", + "androidx.annotation:annotation", + "androidx.annotation:annotation-experimental:aar", + "androidx.arch.core:core-common", + "androidx.arch.core:core-runtime:aar", + "androidx.autofill:autofill:aar", + "androidx.browser:browser:aar", + "androidx.collection:collection", + "androidx.compose.animation:animation-core:aar", + "androidx.compose.animation:animation:aar", + "androidx.compose.foundation:foundation-layout:aar", + "androidx.compose.foundation:foundation:aar", + "androidx.compose.material:material-icons-core:aar", + "androidx.compose.material:material-ripple:aar", + "androidx.compose.material:material:aar", + "androidx.compose.runtime:runtime-saveable:aar", + "androidx.compose.runtime:runtime:aar", + "androidx.compose.ui:ui-geometry:aar", + "androidx.compose.ui:ui-graphics:aar", + "androidx.compose.ui:ui-text:aar", + "androidx.compose.ui:ui-tooling-data:aar", + "androidx.compose.ui:ui-tooling-preview:aar", + "androidx.compose.ui:ui-tooling:aar", + "androidx.compose.ui:ui-unit:aar", + "androidx.compose.ui:ui-util:aar", + "androidx.compose.ui:ui:aar", + "androidx.concurrent:concurrent-futures", + "androidx.core:core-ktx:aar", + "androidx.core:core:aar", + "androidx.customview:customview:aar", + "androidx.fragment:fragment:aar", + "androidx.interpolator:interpolator:aar", + "androidx.lifecycle:lifecycle-common", + "androidx.lifecycle:lifecycle-common-java8", + "androidx.lifecycle:lifecycle-livedata-core:aar", + "androidx.lifecycle:lifecycle-livedata:aar", + "androidx.lifecycle:lifecycle-runtime-ktx:aar", + "androidx.lifecycle:lifecycle-runtime:aar", + "androidx.lifecycle:lifecycle-viewmodel-ktx:aar", + "androidx.lifecycle:lifecycle-viewmodel-savedstate:aar", + "androidx.lifecycle:lifecycle-viewmodel:aar", + "androidx.loader:loader:aar", + "androidx.profileinstaller:profileinstaller:aar", + "androidx.savedstate:savedstate-ktx:aar", + "androidx.savedstate:savedstate:aar", + "androidx.startup:startup-runtime:aar", + "androidx.tracing:tracing:aar", + "androidx.versionedparcelable:versionedparcelable:aar", + "androidx.viewpager:viewpager:aar", + "com.google.auto.service:auto-service-annotations", + "com.google.auto.value:auto-value-annotations", + "com.google.code.findbugs:jsr305", + "com.google.code.gson:gson", + "com.google.dagger:dagger", + "com.google.dagger:dagger-compiler", + "com.google.dagger:dagger-lint-aar:aar", + "com.google.dagger:dagger-producers", + "com.google.dagger:dagger-spi", + "com.google.dagger:hilt-android:aar", + "com.google.dagger:hilt-core", + "com.google.devtools.ksp:symbol-processing-api", + "com.google.errorprone:error_prone_annotations", + "com.google.errorprone:javac-shaded", + "com.google.googlejavaformat:google-java-format", + "com.google.guava:failureaccess", + "com.google.guava:guava", + "com.google.guava:guava-testlib", + "com.google.guava:listenablefuture", + "com.google.j2objc:j2objc-annotations", + "com.google.truth:truth", + "com.jakewharton.retrofit:retrofit2-kotlinx-serialization-converter", + "com.jakewharton.timber:timber:aar", + "com.squareup.moshi:moshi", + "com.squareup.moshi:moshi-kotlin", + "com.squareup.moshi:moshi-kotlin-codegen", + "com.squareup.okhttp3:logging-interceptor", + "com.squareup.okhttp3:okhttp", + "com.squareup.okio:okio", + "com.squareup.okio:okio-jvm", + "com.squareup.retrofit2:retrofit", + "com.squareup:javapoet", + "com.squareup:kotlinpoet", + "com.squareup:kotlinpoet-ksp", + "javax.inject:javax.inject", + "junit:junit", + "net.bytebuddy:byte-buddy", + "net.bytebuddy:byte-buddy-agent", + "net.ltgt.gradle.incap:incap", + "org.checkerframework:checker-compat-qual", + "org.checkerframework:checker-qual", + "org.hamcrest:hamcrest-core", + "org.jetbrains.kotlin:kotlin-reflect", + "org.jetbrains.kotlin:kotlin-stdlib", + "org.jetbrains.kotlin:kotlin-stdlib-common", + "org.jetbrains.kotlin:kotlin-stdlib-jdk7", + "org.jetbrains.kotlin:kotlin-stdlib-jdk8", + "org.jetbrains.kotlinx:kotlinx-collections-immutable-jvm", + "org.jetbrains.kotlinx:kotlinx-coroutines-android", + "org.jetbrains.kotlinx:kotlinx-coroutines-core", + "org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm", + "org.jetbrains.kotlinx:kotlinx-coroutines-test", + "org.jetbrains.kotlinx:kotlinx-coroutines-test-jvm", + "org.jetbrains.kotlinx:kotlinx-metadata-jvm", + "org.jetbrains.kotlinx:kotlinx-serialization-core", + "org.jetbrains.kotlinx:kotlinx-serialization-core-jvm", + "org.jetbrains.kotlinx:kotlinx-serialization-json", + "org.jetbrains.kotlinx:kotlinx-serialization-json-jvm", + "org.jetbrains:annotations", + "org.jsoup:jsoup", + "org.mockito:mockito-core", + "org.objenesis:objenesis", + "org.ow2.asm:asm" + ] + }, + "services": { + "com.google.dagger:dagger-compiler": { + "javax.annotation.processing.Processor": [ + "dagger.internal.codegen.ComponentProcessor" + ] + }, + "com.squareup.moshi:moshi-kotlin-codegen": { + "com.google.devtools.ksp.processing.SymbolProcessorProvider": [ + "com.squareup.moshi.kotlin.codegen.ksp.JsonClassSymbolProcessorProvider" + ], + "com.squareup.moshi.kotlinx.metadata.internal.extensions.MetadataExtensions": [ + "com.squareup.moshi.kotlinx.metadata.jvm.internal.JvmMetadataExtensions" + ], + "javax.annotation.processing.Processor": [ + "com.squareup.moshi.kotlin.codegen.apt.JsonClassCodegenProcessor" + ] + }, + "org.jetbrains.kotlin:kotlin-reflect": { + "kotlin.reflect.jvm.internal.impl.builtins.BuiltInsLoader": [ + "kotlin.reflect.jvm.internal.impl.serialization.deserialization.builtins.BuiltInsLoaderImpl" + ], + "kotlin.reflect.jvm.internal.impl.resolve.ExternalOverridabilityCondition": [ + "kotlin.reflect.jvm.internal.impl.load.java.ErasedOverridabilityCondition", + "kotlin.reflect.jvm.internal.impl.load.java.FieldOverridabilityCondition", + "kotlin.reflect.jvm.internal.impl.load.java.JavaIncompatibilityRulesOverridabilityCondition" + ] + }, + "org.jetbrains.kotlinx:kotlinx-coroutines-android": { + "kotlinx.coroutines.CoroutineExceptionHandler": [ + "kotlinx.coroutines.android.AndroidExceptionPreHandler" + ], + "kotlinx.coroutines.internal.MainDispatcherFactory": [ + "kotlinx.coroutines.android.AndroidDispatcherFactory" + ] + }, + "org.jetbrains.kotlinx:kotlinx-coroutines-test-jvm": { + "kotlinx.coroutines.CoroutineExceptionHandler": [ + "kotlinx.coroutines.test.internal.ExceptionCollectorAsService" + ], + "kotlinx.coroutines.internal.MainDispatcherFactory": [ + "kotlinx.coroutines.test.internal.TestMainDispatcherFactory" + ] + }, + "org.jetbrains.kotlinx:kotlinx-metadata-jvm": { + "kotlinx.metadata.impl.extensions.MetadataExtensions": [ + "kotlinx.metadata.jvm.impl.JvmMetadataExtensions" + ] + } + }, + "version": "2" +}