diff --git a/Pink/.claude/plans/ct-line-detection-fix.md b/Pink/.claude/plans/ct-line-detection-fix.md
new file mode 100644
index 0000000..c52aa6a
--- /dev/null
+++ b/Pink/.claude/plans/ct-line-detection-fix.md
@@ -0,0 +1,40 @@
+# Plan: 对齐 C++ C/T 线检测逻辑
+
+## 问题
+当前 Kotlin 代码跳过条带定位步骤,直接在整张相机画面(960×1280)上用极低阈值检测 C/T 线,导致噪声轮廓大量通过,C 线检测不稳定。
+
+C++ 方案正确:**先找绿色定位块 → 裁剪旋转条带区域 → 在裁剪后的条带上检测 C/T 线**。
+
+## 修改范围
+
+### 1. `StripLocator.kt` — `locate()` 函数(主路径)
+
+**a) 放宽 center distance ratio(第 408 行)**
+- `1.65` → `1.7`(对齐 C++)
+
+**b) C/T 线过滤顺序和阈值(第 542-548 行)**
+- 当前:Width(0.03~0.25) → Height(0.4~1.1)
+- 改为:Height(0.7~1.1) → Width(0.045~0.20)(对齐 C++)
+
+**c) 去重逻辑(第 556-569 行)**
+- 当前:保留离图像中心最近的 2 个轮廓
+- 改为:左右两侧各保留 1 个(最靠近中心线的),对齐 C++
+
+### 2. `StripLocator.kt` — `locateCroppedStrip()` 函数(回退路径)
+
+**a) 过滤顺序和阈值(第 850-856 行)**
+- 当前:Width(0.005~0.35) → Height(0.02~1.1)
+- 改为:Height(0.15~1.1) → Width(0.01~0.25)
+
+**b) 去重逻辑(第 864-879 行)**
+- 同 `locate()`,改为左右各保留 1 个
+
+### 3. `ScanViewModel.kt` — `processFrameInternal()`(第 161-166 行)
+
+- 当前:直接调用 `locateCroppedStrip(rgbMat)`
+- 改为:先 try `locate(srcRgba, roiRect, false)`,失败再 fallback 到 `locateCroppedStrip`
+
+## 预期效果
+- C/T 线检测在裁剪后的条带区域上进行,过滤阈值合理
+- C 线检测更稳定,减少"只检测到 1 条线"的情况
+- 即使 `locate()` 失败,fallback 路径也有改善的阈值
\ No newline at end of file
diff --git a/Pink/.idea/gradle.xml b/Pink/.idea/gradle.xml
index 7fb7a54..b0dcefd 100644
--- a/Pink/.idea/gradle.xml
+++ b/Pink/.idea/gradle.xml
@@ -10,6 +10,7 @@
+
diff --git a/Pink/.idea/misc.xml b/Pink/.idea/misc.xml
index 2b2f1af..a599984 100644
--- a/Pink/.idea/misc.xml
+++ b/Pink/.idea/misc.xml
@@ -1,3 +1,4 @@
+
diff --git a/Pink/app/build.gradle.kts b/Pink/app/build.gradle.kts
index f640390..d0d5c8e 100644
--- a/Pink/app/build.gradle.kts
+++ b/Pink/app/build.gradle.kts
@@ -45,6 +45,7 @@ dependencies {
implementation(libs.androidx.activity.compose)
implementation(libs.androidx.compose.material3)
implementation(libs.androidx.compose.material3.adaptive.navigation.suite)
+ implementation(libs.androidx.compose.material.icons.core)
implementation(libs.androidx.compose.ui)
implementation(libs.androidx.compose.ui.graphics)
implementation(libs.androidx.compose.ui.tooling.preview)
@@ -59,6 +60,7 @@ dependencies {
implementation(libs.androidx.room.runtime)
implementation(libs.androidx.room.ktx)
ksp(libs.androidx.room.compiler)
+ implementation(project(":library"))
implementation(project(":openCVLibrary300"))
testImplementation(libs.junit)
androidTestImplementation(platform(libs.androidx.compose.bom))
diff --git a/Pink/app/src/main/java/com/pinkbear/pinkov/MainActivity.kt b/Pink/app/src/main/java/com/pinkbear/pinkov/MainActivity.kt
index b295b2d..3d14804 100644
--- a/Pink/app/src/main/java/com/pinkbear/pinkov/MainActivity.kt
+++ b/Pink/app/src/main/java/com/pinkbear/pinkov/MainActivity.kt
@@ -78,7 +78,9 @@ fun PinkOVApp() {
AppDestinations.HOME -> HomePage(
onScanClick = { showScanPage = true }
)
- AppDestinations.RECORDS -> RecordsPage()
+ AppDestinations.RECORDS -> RecordsPage(
+ onScanClick = { showScanPage = true }
+ )
AppDestinations.MINE -> MinePage()
}
}
diff --git a/Pink/app/src/main/java/com/pinkbear/pinkov/data/database/AppDatabase.kt b/Pink/app/src/main/java/com/pinkbear/pinkov/data/database/AppDatabase.kt
index 09e3dff..62a525d 100644
--- a/Pink/app/src/main/java/com/pinkbear/pinkov/data/database/AppDatabase.kt
+++ b/Pink/app/src/main/java/com/pinkbear/pinkov/data/database/AppDatabase.kt
@@ -15,7 +15,7 @@ import com.pinkbear.pinkov.data.entity.ScanRecord
@Database(
entities = [ScanRecord::class, PeriodSettings::class, DailyRecord::class],
- version = 2,
+ version = 4,
exportSchema = false
)
abstract class AppDatabase : RoomDatabase() {
@@ -56,6 +56,78 @@ abstract class AppDatabase : RoomDatabase() {
}
}
+ private val MIGRATION_3_4 = object : Migration(3, 4) {
+ override fun migrate(db: SupportSQLiteDatabase) {
+ // Recreate daily_records to replace follicle_size/follicle_time with
+ // the 4 new follicle_left_a/b / follicle_right_a/b columns.
+ db.execSQL("""
+ CREATE TABLE IF NOT EXISTS `daily_records_new` (
+ `id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
+ `date` INTEGER NOT NULL,
+ `is_period_start` INTEGER NOT NULL DEFAULT 0,
+ `had_sex` INTEGER NOT NULL DEFAULT 0,
+ `mood` TEXT,
+ `discharge` TEXT,
+ `note` TEXT,
+ `temperature` REAL,
+ `temperature_time` INTEGER,
+ `sex_method` TEXT,
+ `sex_time` INTEGER,
+ `symptoms` TEXT,
+ `supplements` TEXT,
+ `weight` REAL,
+ `weight_time` INTEGER,
+ `habits` TEXT,
+ `stool_type` TEXT,
+ `plan` TEXT,
+ `follicle_left_a` INTEGER,
+ `follicle_left_b` INTEGER,
+ `follicle_right_a` INTEGER,
+ `follicle_right_b` INTEGER
+ )
+ """.trimIndent())
+
+ // Copy existing data (old follicle_size/follicle_time are dropped)
+ db.execSQL("""
+ INSERT INTO `daily_records_new` (
+ `id`, `date`, `is_period_start`, `had_sex`, `mood`, `discharge`, `note`,
+ `temperature`, `temperature_time`, `sex_method`, `sex_time`,
+ `symptoms`, `supplements`, `weight`, `weight_time`, `habits`,
+ `stool_type`, `plan`
+ ) SELECT
+ `id`, `date`, `is_period_start`, `had_sex`, `mood`, `discharge`, `note`,
+ `temperature`, `temperature_time`, `sex_method`, `sex_time`,
+ `symptoms`, `supplements`, `weight`, `weight_time`, `habits`,
+ `stool_type`, `plan`
+ FROM `daily_records`
+ """.trimIndent())
+
+ db.execSQL("DROP TABLE `daily_records`")
+ db.execSQL("ALTER TABLE `daily_records_new` RENAME TO `daily_records`")
+ db.execSQL(
+ "CREATE UNIQUE INDEX IF NOT EXISTS `index_daily_records_date` ON `daily_records` (`date`)"
+ )
+ }
+ }
+
+ private val MIGRATION_2_3 = object : Migration(2, 3) {
+ override fun migrate(db: SupportSQLiteDatabase) {
+ db.execSQL("ALTER TABLE `daily_records` ADD COLUMN `temperature` REAL DEFAULT NULL")
+ db.execSQL("ALTER TABLE `daily_records` ADD COLUMN `temperature_time` INTEGER DEFAULT NULL")
+ db.execSQL("ALTER TABLE `daily_records` ADD COLUMN `sex_method` TEXT DEFAULT NULL")
+ db.execSQL("ALTER TABLE `daily_records` ADD COLUMN `sex_time` INTEGER DEFAULT NULL")
+ db.execSQL("ALTER TABLE `daily_records` ADD COLUMN `follicle_size` REAL DEFAULT NULL")
+ db.execSQL("ALTER TABLE `daily_records` ADD COLUMN `follicle_time` INTEGER DEFAULT NULL")
+ db.execSQL("ALTER TABLE `daily_records` ADD COLUMN `symptoms` TEXT DEFAULT NULL")
+ db.execSQL("ALTER TABLE `daily_records` ADD COLUMN `supplements` TEXT DEFAULT NULL")
+ db.execSQL("ALTER TABLE `daily_records` ADD COLUMN `weight` REAL DEFAULT NULL")
+ db.execSQL("ALTER TABLE `daily_records` ADD COLUMN `weight_time` INTEGER DEFAULT NULL")
+ db.execSQL("ALTER TABLE `daily_records` ADD COLUMN `habits` TEXT DEFAULT NULL")
+ db.execSQL("ALTER TABLE `daily_records` ADD COLUMN `stool_type` TEXT DEFAULT NULL")
+ db.execSQL("ALTER TABLE `daily_records` ADD COLUMN `plan` TEXT DEFAULT NULL")
+ }
+ }
+
fun getInstance(context: Context): AppDatabase {
return INSTANCE ?: synchronized(this) {
INSTANCE ?: Room.databaseBuilder(
@@ -63,7 +135,7 @@ abstract class AppDatabase : RoomDatabase() {
AppDatabase::class.java,
"pinkov_database"
)
- .addMigrations(MIGRATION_1_2)
+ .addMigrations(MIGRATION_1_2, MIGRATION_2_3, MIGRATION_3_4)
.build()
.also { INSTANCE = it }
}
diff --git a/Pink/app/src/main/java/com/pinkbear/pinkov/data/entity/DailyRecord.kt b/Pink/app/src/main/java/com/pinkbear/pinkov/data/entity/DailyRecord.kt
index 77d646f..ae698b6 100644
--- a/Pink/app/src/main/java/com/pinkbear/pinkov/data/entity/DailyRecord.kt
+++ b/Pink/app/src/main/java/com/pinkbear/pinkov/data/entity/DailyRecord.kt
@@ -24,19 +24,91 @@ data class DailyRecord(
@ColumnInfo(name = "is_period_start")
val isPeriodStart: Boolean = false,
+ // ---- 基础体温 ----
+ /** Basal body temperature in Celsius. Null = not recorded. */
+ @ColumnInfo(name = "temperature")
+ val temperature: Float? = null,
+
+ /** Time of temperature measurement (epoch millis). */
+ @ColumnInfo(name = "temperature_time")
+ val temperatureTime: Long? = null,
+
+ // ---- 爱爱 ----
/** User recorded sexual activity on this date. */
@ColumnInfo(name = "had_sex")
val hadSex: Boolean = false,
- /** Mood tag (e.g. 焦虑, 期待, 低落, 放松). Null = not recorded. */
- @ColumnInfo(name = "mood")
- val mood: String? = null,
+ /** Sex method (e.g. 无措施, 避孕套, 体外排精…). Null = not recorded. */
+ @ColumnInfo(name = "sex_method")
+ val sexMethod: String? = null,
- /** Cervical mucus / discharge description. Null = not recorded. */
+ /** Time of sexual activity (epoch millis). */
+ @ColumnInfo(name = "sex_time")
+ val sexTime: Long? = null,
+
+ // ---- 白带 ----
+ /** Cervical mucus / discharge type. Null = not recorded. */
@ColumnInfo(name = "discharge")
val discharge: String? = null,
- /** Free-text notes for this date. */
+ // ---- 卵泡监测 ----
+ /** Left follicle width in mm. Null = not recorded. */
+ @ColumnInfo(name = "follicle_left_a")
+ val follicleLeftA: Int? = null,
+
+ /** Left follicle height in mm. Null = not recorded. */
+ @ColumnInfo(name = "follicle_left_b")
+ val follicleLeftB: Int? = null,
+
+ /** Right follicle width in mm. Null = not recorded. */
+ @ColumnInfo(name = "follicle_right_a")
+ val follicleRightA: Int? = null,
+
+ /** Right follicle height in mm. Null = not recorded. */
+ @ColumnInfo(name = "follicle_right_b")
+ val follicleRightB: Int? = null,
+
+ // ---- 症状 ----
+ /** Symptom tags, comma-separated. Null = not recorded. */
+ @ColumnInfo(name = "symptoms")
+ val symptoms: String? = null,
+
+ // ---- 心情 ----
+ /** Mood tag (e.g. 超开心, 焦虑, 低落, 放松). Null = not recorded. */
+ @ColumnInfo(name = "mood")
+ val mood: String? = null,
+
+ // ---- 营养补充 ----
+ /** Supplement tags, comma-separated. Null = not recorded. */
+ @ColumnInfo(name = "supplements")
+ val supplements: String? = null,
+
+ // ---- 体重 ----
+ /** Body weight in kg. Null = not recorded. */
+ @ColumnInfo(name = "weight")
+ val weight: Float? = null,
+
+ /** Time of weight measurement (epoch millis). */
+ @ColumnInfo(name = "weight_time")
+ val weightTime: Long? = null,
+
+ // ---- 日记 ----
+ /** Free-text diary entry for this date. */
@ColumnInfo(name = "note")
val note: String? = null,
+
+ // ---- 好习惯 ----
+ /** Habit tags, comma-separated. Null = not recorded. */
+ @ColumnInfo(name = "habits")
+ val habits: String? = null,
+
+ // ---- 便便 ----
+ /** Stool type (e.g. 正常, 稀便, 干便…). Null = not recorded. */
+ @ColumnInfo(name = "stool_type")
+ val stoolType: String? = null,
+
+ // ---- 计划 ----
+ /** Plan text for this date. Null = not recorded. */
+ @ColumnInfo(name = "plan")
+ val plan: String? = null,
)
diff --git a/Pink/app/src/main/java/com/pinkbear/pinkov/ui/component/CheckInPanel.kt b/Pink/app/src/main/java/com/pinkbear/pinkov/ui/component/CheckInPanel.kt
index 8242a7a..76ebcb9 100644
--- a/Pink/app/src/main/java/com/pinkbear/pinkov/ui/component/CheckInPanel.kt
+++ b/Pink/app/src/main/java/com/pinkbear/pinkov/ui/component/CheckInPanel.kt
@@ -1,42 +1,84 @@
package com.pinkbear.pinkov.ui.component
+import androidx.compose.foundation.Image
+import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding
+import androidx.compose.foundation.layout.size
import androidx.compose.foundation.layout.width
import androidx.compose.material3.HorizontalDivider
+import androidx.compose.material3.Icon
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Switch
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.mutableStateOf
+import androidx.compose.runtime.remember
+import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
+import androidx.compose.ui.res.painterResource
import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
+import com.pinkbear.pinkov.R
import com.pinkbear.pinkov.data.entity.DailyRecord
+import com.pinkbear.pinkov.ui.component.checkin.DiarySheet
+import com.pinkbear.pinkov.ui.component.checkin.DischargeSheet
+import com.pinkbear.pinkov.ui.component.checkin.FollicleSheet
+import com.pinkbear.pinkov.ui.component.checkin.HabitSheet
+import com.pinkbear.pinkov.ui.component.checkin.LoveSheet
+import com.pinkbear.pinkov.ui.component.checkin.MoodSheet
+import com.pinkbear.pinkov.ui.component.checkin.PlanSheet
+import com.pinkbear.pinkov.ui.component.checkin.StoolSheet
+import com.pinkbear.pinkov.ui.component.checkin.SupplementSheet
+import com.pinkbear.pinkov.ui.component.checkin.SymptomSheet
+import com.pinkbear.pinkov.ui.component.checkin.TemperatureSheet
+import com.pinkbear.pinkov.ui.component.checkin.WeightSheet
import java.time.LocalDate
import java.time.format.DateTimeFormatter
import java.util.Locale
+/**
+ * Which check-in bottom sheet is currently open.
+ */
+private enum class CheckInSheet {
+ TEMPERATURE, LOVE, DISCHARGE, FOLLICLE,
+ SYMPTOM, MOOD, SUPPLEMENT, WEIGHT,
+ DIARY, HABIT, STOOL, PLAN
+}
+
/**
* Bottom panel showing check-in items for the selected calendar date.
- *
- * When no date is selected, shows a hint. When a date is selected,
- * shows the "月经来了" switch and (in future) more check-in items.
*/
@Composable
fun CheckInPanel(
selectedDate: LocalDate?,
record: DailyRecord?,
onPeriodStartChanged: (LocalDate, Boolean) -> Unit,
+ onScanClick: () -> Unit,
+ onTemperatureSave: (LocalDate, Float, Long) -> Unit,
+ onLoveSave: (LocalDate, String, Long) -> Unit,
+ onDischargeSave: (LocalDate, String) -> Unit,
+ onFollicleSave: (LocalDate, Int, Int, Int, Int) -> Unit,
+ onSymptomSave: (LocalDate, String) -> Unit,
+ onMoodSave: (LocalDate, String) -> Unit,
+ onSupplementSave: (LocalDate, String) -> Unit,
+ onWeightSave: (LocalDate, Float, Long) -> Unit,
+ onDiarySave: (LocalDate, String) -> Unit,
+ onHabitSave: (LocalDate, String) -> Unit,
+ onStoolSave: (LocalDate, String) -> Unit,
+ onPlanSave: (LocalDate, String) -> Unit,
modifier: Modifier = Modifier,
) {
val formatter = DateTimeFormatter.ofPattern("yyyy年MM月dd日", Locale.CHINESE)
+ var openSheet by remember { mutableStateOf(null) }
Column(
modifier = modifier
@@ -69,25 +111,233 @@ fun CheckInPanel(
onPeriodStartChanged(selectedDate, checked)
},
)
- HorizontalDivider(
- thickness = 0.5.dp,
- color = MaterialTheme.colorScheme.outlineVariant,
- )
+ HorizontalDivider(thickness = 0.5.dp, color = MaterialTheme.colorScheme.outlineVariant)
- // ---- Placeholder items (future) ----
- PlaceholderCheckInRow(label = "爱爱")
- HorizontalDivider(
- thickness = 0.5.dp,
- color = MaterialTheme.colorScheme.outlineVariant,
+ // ---- 13 check-in entries ----
+ // 1. 排卵试纸 → navigate to scan
+ CheckInEntryRow(
+ iconRes = R.drawable.record_icon_pailuan,
+ label = "排卵试纸",
+ valueText = null, // never shows saved value, always navigates
+ onClick = onScanClick,
)
- PlaceholderCheckInRow(label = "心情")
- HorizontalDivider(
- thickness = 0.5.dp,
- color = MaterialTheme.colorScheme.outlineVariant,
+ HorizontalDivider(thickness = 0.5.dp, color = MaterialTheme.colorScheme.outlineVariant)
+
+ // 2. 基础体温
+ CheckInEntryRow(
+ iconRes = R.drawable.record_icon_tiwen_no,
+ label = "基础体温",
+ valueText = record?.temperature?.let { "${it}°C" },
+ onClick = { openSheet = CheckInSheet.TEMPERATURE },
+ )
+ HorizontalDivider(thickness = 0.5.dp, color = MaterialTheme.colorScheme.outlineVariant)
+
+ // 3. 爱爱
+ CheckInEntryRow(
+ iconRes = R.drawable.record_icon_aiai,
+ label = "爱爱",
+ valueText = record?.sexMethod,
+ onClick = { openSheet = CheckInSheet.LOVE },
+ )
+ HorizontalDivider(thickness = 0.5.dp, color = MaterialTheme.colorScheme.outlineVariant)
+
+ // 4. 白带
+ CheckInEntryRow(
+ iconRes = R.drawable.record_icon_baidai,
+ label = "白带",
+ valueText = record?.discharge,
+ onClick = { openSheet = CheckInSheet.DISCHARGE },
+ )
+ HorizontalDivider(thickness = 0.5.dp, color = MaterialTheme.colorScheme.outlineVariant)
+
+ // 5. 卵泡监测
+ CheckInEntryRow(
+ iconRes = R.drawable.record_icon_pailuan,
+ label = "卵泡监测",
+ valueText = buildFollicleDisplay(record),
+ onClick = { openSheet = CheckInSheet.FOLLICLE },
+ )
+ HorizontalDivider(thickness = 0.5.dp, color = MaterialTheme.colorScheme.outlineVariant)
+
+ // 6. 症状
+ CheckInEntryRow(
+ iconRes = R.drawable.record_icon_ill,
+ label = "症状",
+ valueText = record?.symptoms,
+ onClick = { openSheet = CheckInSheet.SYMPTOM },
+ )
+ HorizontalDivider(thickness = 0.5.dp, color = MaterialTheme.colorScheme.outlineVariant)
+
+ // 7. 心情
+ CheckInEntryRow(
+ iconRes = R.drawable.record_icon_xinqing,
+ label = "心情",
+ valueText = record?.mood,
+ onClick = { openSheet = CheckInSheet.MOOD },
+ )
+ HorizontalDivider(thickness = 0.5.dp, color = MaterialTheme.colorScheme.outlineVariant)
+
+ // 8. 营养补充
+ CheckInEntryRow(
+ iconRes = R.drawable.record_icon_help,
+ label = "营养补充",
+ valueText = record?.supplements,
+ onClick = { openSheet = CheckInSheet.SUPPLEMENT },
+ )
+ HorizontalDivider(thickness = 0.5.dp, color = MaterialTheme.colorScheme.outlineVariant)
+
+ // 9. 体重
+ CheckInEntryRow(
+ iconRes = R.drawable.record_icon_tizhong_no,
+ label = "体重",
+ valueText = record?.weight?.let { "${it}kg" },
+ onClick = { openSheet = CheckInSheet.WEIGHT },
+ )
+ HorizontalDivider(thickness = 0.5.dp, color = MaterialTheme.colorScheme.outlineVariant)
+
+ // 10. 日记
+ CheckInEntryRow(
+ iconRes = R.drawable.record_icon_riji,
+ label = "日记",
+ valueText = record?.note,
+ onClick = { openSheet = CheckInSheet.DIARY },
+ )
+ HorizontalDivider(thickness = 0.5.dp, color = MaterialTheme.colorScheme.outlineVariant)
+
+ // 11. 好习惯
+ CheckInEntryRow(
+ iconRes = R.drawable.record_icon_habite,
+ label = "好习惯",
+ valueText = record?.habits,
+ onClick = { openSheet = CheckInSheet.HABIT },
+ )
+ HorizontalDivider(thickness = 0.5.dp, color = MaterialTheme.colorScheme.outlineVariant)
+
+ // 12. 便便
+ CheckInEntryRow(
+ iconRes = R.drawable.record_icon_sleep,
+ label = "便便",
+ valueText = record?.stoolType,
+ onClick = { openSheet = CheckInSheet.STOOL },
+ )
+ HorizontalDivider(thickness = 0.5.dp, color = MaterialTheme.colorScheme.outlineVariant)
+
+ // 13. 计划
+ CheckInEntryRow(
+ iconRes = R.drawable.record_icon_tool,
+ label = "计划",
+ valueText = record?.plan,
+ onClick = { openSheet = CheckInSheet.PLAN },
)
- PlaceholderCheckInRow(label = "白带")
}
}
+
+ // ---- Bottom Sheets ----
+ when (openSheet) {
+ CheckInSheet.TEMPERATURE -> TemperatureSheet(
+ initialTemp = record?.temperature,
+ initialTime = record?.temperatureTime,
+ onSave = { temp, time ->
+ selectedDate?.let { onTemperatureSave(it, temp, time) }
+ openSheet = null
+ },
+ onDismiss = { openSheet = null },
+ )
+ CheckInSheet.LOVE -> LoveSheet(
+ initialMethod = record?.sexMethod,
+ initialTime = record?.sexTime,
+ onSave = { method, time ->
+ selectedDate?.let { onLoveSave(it, method, time) }
+ openSheet = null
+ },
+ onDismiss = { openSheet = null },
+ )
+ CheckInSheet.DISCHARGE -> DischargeSheet(
+ initialType = record?.discharge,
+ onSave = { type ->
+ selectedDate?.let { onDischargeSave(it, type) }
+ openSheet = null
+ },
+ onDismiss = { openSheet = null },
+ )
+ CheckInSheet.FOLLICLE -> FollicleSheet(
+ initialLeftA = record?.follicleLeftA,
+ initialLeftB = record?.follicleLeftB,
+ initialRightA = record?.follicleRightA,
+ initialRightB = record?.follicleRightB,
+ onSave = { leftA, leftB, rightA, rightB ->
+ selectedDate?.let { onFollicleSave(it, leftA, leftB, rightA, rightB) }
+ openSheet = null
+ },
+ onDismiss = { openSheet = null },
+ )
+ CheckInSheet.SYMPTOM -> SymptomSheet(
+ initialSymptoms = record?.symptoms,
+ onSave = { symptoms ->
+ selectedDate?.let { onSymptomSave(it, symptoms) }
+ openSheet = null
+ },
+ onDismiss = { openSheet = null },
+ )
+ CheckInSheet.MOOD -> MoodSheet(
+ initialMood = record?.mood,
+ onSave = { mood ->
+ selectedDate?.let { onMoodSave(it, mood) }
+ openSheet = null
+ },
+ onDismiss = { openSheet = null },
+ )
+ CheckInSheet.SUPPLEMENT -> SupplementSheet(
+ initialSupplements = record?.supplements,
+ onSave = { supplements ->
+ selectedDate?.let { onSupplementSave(it, supplements) }
+ openSheet = null
+ },
+ onDismiss = { openSheet = null },
+ )
+ CheckInSheet.WEIGHT -> WeightSheet(
+ initialWeight = record?.weight,
+ initialTime = record?.weightTime,
+ onSave = { weight, time ->
+ selectedDate?.let { onWeightSave(it, weight, time) }
+ openSheet = null
+ },
+ onDismiss = { openSheet = null },
+ )
+ CheckInSheet.DIARY -> DiarySheet(
+ initialNote = record?.note,
+ onSave = { note ->
+ selectedDate?.let { onDiarySave(it, note) }
+ openSheet = null
+ },
+ onDismiss = { openSheet = null },
+ )
+ CheckInSheet.HABIT -> HabitSheet(
+ initialHabits = record?.habits,
+ onSave = { habits ->
+ selectedDate?.let { onHabitSave(it, habits) }
+ openSheet = null
+ },
+ onDismiss = { openSheet = null },
+ )
+ CheckInSheet.STOOL -> StoolSheet(
+ initialType = record?.stoolType,
+ onSave = { type ->
+ selectedDate?.let { onStoolSave(it, type) }
+ openSheet = null
+ },
+ onDismiss = { openSheet = null },
+ )
+ CheckInSheet.PLAN -> PlanSheet(
+ initialPlan = record?.plan,
+ onSave = { plan ->
+ selectedDate?.let { onPlanSave(it, plan) }
+ openSheet = null
+ },
+ onDismiss = { openSheet = null },
+ )
+ null -> { /* No sheet open */ }
+ }
}
@Composable
@@ -112,24 +362,71 @@ private fun CheckInSwitchRow(
}
}
+/**
+ * A single check-in entry row: icon | label | value/arrow.
+ */
@Composable
-private fun PlaceholderCheckInRow(label: String) {
+private fun CheckInEntryRow(
+ iconRes: Int,
+ label: String,
+ valueText: String?,
+ onClick: () -> Unit,
+) {
Row(
modifier = Modifier
.fillMaxWidth()
+ .clickable { onClick() }
.padding(vertical = 10.dp),
verticalAlignment = Alignment.CenterVertically,
) {
+ Image(
+ painter = painterResource(iconRes),
+ contentDescription = label,
+ modifier = Modifier.size(22.dp),
+ )
+ Spacer(modifier = Modifier.width(12.dp))
Text(
text = label,
fontSize = 15.sp,
- color = MaterialTheme.colorScheme.onSurfaceVariant,
+ color = MaterialTheme.colorScheme.onSurface,
modifier = Modifier.weight(1f),
)
- Text(
- text = "—",
- fontSize = 15.sp,
- color = MaterialTheme.colorScheme.onSurfaceVariant,
+ if (valueText != null) {
+ Text(
+ text = valueText,
+ fontSize = 13.sp,
+ color = MaterialTheme.colorScheme.primary,
+ maxLines = 1,
+ )
+ Spacer(modifier = Modifier.width(4.dp))
+ }
+ Icon(
+ painter = painterResource(R.drawable.record_icon_right_arrow),
+ contentDescription = null,
+ modifier = Modifier.size(14.dp),
+ tint = MaterialTheme.colorScheme.onSurfaceVariant,
)
}
}
+
+/**
+ * Build display text for follicle data matching Meiyou's format:
+ * "左12×10mm", "右15×13mm", or "左12×10 右15×13mm".
+ */
+private fun buildFollicleDisplay(record: DailyRecord?): String? {
+ if (record == null) return null
+ val left = record.follicleLeftA?.takeIf { it > 0 }
+ val leftB = record.follicleLeftB?.takeIf { it > 0 }
+ val right = record.follicleRightA?.takeIf { it > 0 }
+ val rightB = record.follicleRightB?.takeIf { it > 0 }
+
+ val leftStr = if (left != null && leftB != null) "左${left}×${leftB}mm" else null
+ val rightStr = if (right != null && rightB != null) "右${right}×${rightB}mm" else null
+
+ return when {
+ leftStr != null && rightStr != null -> "$leftStr $rightStr"
+ leftStr != null -> leftStr
+ rightStr != null -> rightStr
+ else -> null
+ }
+}
diff --git a/Pink/app/src/main/java/com/pinkbear/pinkov/ui/component/checkin/CheckInBottomSheet.kt b/Pink/app/src/main/java/com/pinkbear/pinkov/ui/component/checkin/CheckInBottomSheet.kt
new file mode 100644
index 0000000..8398667
--- /dev/null
+++ b/Pink/app/src/main/java/com/pinkbear/pinkov/ui/component/checkin/CheckInBottomSheet.kt
@@ -0,0 +1,28 @@
+package com.pinkbear.pinkov.ui.component.checkin
+
+import androidx.compose.foundation.layout.ColumnScope
+import androidx.compose.material3.ExperimentalMaterial3Api
+import androidx.compose.material3.ModalBottomSheet
+import androidx.compose.material3.rememberModalBottomSheetState
+import androidx.compose.runtime.Composable
+
+/**
+ * Generic bottom sheet wrapper for check-in forms.
+ *
+ * Provides a consistent [ModalBottomSheet] with skip-scrim-area behavior.
+ * Content is rendered via [content] slot.
+ */
+@OptIn(ExperimentalMaterial3Api::class)
+@Composable
+fun CheckInBottomSheet(
+ onDismiss: () -> Unit,
+ content: @Composable ColumnScope.() -> Unit,
+) {
+ val sheetState = rememberModalBottomSheetState(skipPartiallyExpanded = true)
+
+ ModalBottomSheet(
+ onDismissRequest = onDismiss,
+ sheetState = sheetState,
+ content = content,
+ )
+}
diff --git a/Pink/app/src/main/java/com/pinkbear/pinkov/ui/component/checkin/DiarySheet.kt b/Pink/app/src/main/java/com/pinkbear/pinkov/ui/component/checkin/DiarySheet.kt
new file mode 100644
index 0000000..dcb6d33
--- /dev/null
+++ b/Pink/app/src/main/java/com/pinkbear/pinkov/ui/component/checkin/DiarySheet.kt
@@ -0,0 +1,39 @@
+package com.pinkbear.pinkov.ui.component.checkin
+
+import androidx.compose.foundation.layout.*
+import androidx.compose.material3.*
+import androidx.compose.runtime.*
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.text.font.FontWeight
+import androidx.compose.ui.unit.dp
+import androidx.compose.ui.unit.sp
+
+@Composable
+fun DiarySheet(
+ initialNote: String?,
+ onSave: (String) -> Unit,
+ onDismiss: () -> Unit,
+) {
+ var note by remember { mutableStateOf(initialNote ?: "") }
+
+ CheckInBottomSheet(onDismiss = onDismiss) {
+ Text("日记", fontWeight = FontWeight.Bold, fontSize = 18.sp)
+ Spacer(modifier = Modifier.height(16.dp))
+
+ OutlinedTextField(
+ value = note,
+ onValueChange = { note = it },
+ label = { Text("写点什么呢…") },
+ modifier = Modifier.fillMaxWidth().height(160.dp),
+ maxLines = 8,
+ )
+
+ Spacer(modifier = Modifier.height(16.dp))
+ Button(
+ onClick = { onSave(note) },
+ modifier = Modifier.fillMaxWidth(),
+ enabled = note.isNotBlank(),
+ ) { Text("保存") }
+ Spacer(modifier = Modifier.height(8.dp))
+ }
+}
diff --git a/Pink/app/src/main/java/com/pinkbear/pinkov/ui/component/checkin/DischargeSheet.kt b/Pink/app/src/main/java/com/pinkbear/pinkov/ui/component/checkin/DischargeSheet.kt
new file mode 100644
index 0000000..dad0a4b
--- /dev/null
+++ b/Pink/app/src/main/java/com/pinkbear/pinkov/ui/component/checkin/DischargeSheet.kt
@@ -0,0 +1,178 @@
+package com.pinkbear.pinkov.ui.component.checkin
+
+import com.pinkbear.pinkov.R
+import androidx.compose.foundation.Image
+import androidx.compose.foundation.background
+import androidx.compose.foundation.border
+import androidx.compose.foundation.clickable
+import androidx.compose.foundation.layout.*
+import androidx.compose.foundation.shape.CircleShape
+import androidx.compose.foundation.shape.RoundedCornerShape
+import androidx.compose.material3.*
+import androidx.compose.runtime.*
+import androidx.compose.ui.Alignment
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.draw.clip
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.layout.ContentScale
+import androidx.compose.ui.res.painterResource
+import androidx.compose.ui.text.font.FontWeight
+import androidx.compose.ui.text.style.TextAlign
+import androidx.compose.ui.unit.dp
+import androidx.compose.ui.unit.sp
+
+/**
+ * One of the 5 leukorrhea / cervical-mucus types, matching Meiyou's data model.
+ */
+private data class DischargeOption(
+ val code: Int,
+ val iconRes: Int,
+ val name: String,
+ val description: String,
+)
+
+/** The 5 discharge types, kept in Meiyou's V2 dialog order. */
+private val DISCHARGE_OPTIONS = listOf(
+ DischargeOption(3, R.drawable.icon_leukorrhea_ganzao, "干燥", "内裤干爽,分泌物量少,无水分"),
+ DischargeOption(2, R.drawable.icon_leukorrhea_nianchou, "粘稠", "分泌物稠厚,触感像胶状物"),
+ DischargeOption(4, R.drawable.icon_leukorrhea_xichou, "稀糊状", "含水量偏多偏黄色,触感像乳液"),
+ DischargeOption(5, R.drawable.icon_leukorrhea_shuizhuang, "水状", "呈白色或透明,触感似水滴"),
+ DischargeOption(1, R.drawable.icon_leukorrhea_danqing, "蛋清状", "呈透明状,两指间可拉丝"),
+)
+
+/** Pink accent used for the selected ring — matches Meiyou's #ff94b8. */
+private val LeukorrheaPink = Color(0xFFFF94B8)
+
+/**
+ * Bottom sheet for recording cervical mucus / discharge type.
+ *
+ * Mimics Meiyou's [LeukorrheaAbBottomDialog] (V2): 5 icons in a horizontal row,
+ * each with a circular pink border when selected plus a check-mark overlay.
+ * Tap a selected item to deselect it (back to "unrecorded").
+ */
+@Composable
+fun DischargeSheet(
+ initialType: String?,
+ onSave: (String) -> Unit,
+ onDismiss: () -> Unit,
+) {
+ // Resolve the initial type name → code for pre-selection
+ val initialCode = remember(initialType) {
+ DISCHARGE_OPTIONS.firstOrNull { it.name == initialType }?.code
+ }
+ var selectedCode by remember { mutableStateOf(initialCode) }
+
+ CheckInBottomSheet(onDismiss = onDismiss) {
+ Text("白带", fontWeight = FontWeight.Bold, fontSize = 18.sp)
+ Spacer(modifier = Modifier.height(20.dp))
+
+ // ---- 5-icon horizontal row ----
+ Row(
+ modifier = Modifier.fillMaxWidth(),
+ horizontalArrangement = Arrangement.SpaceEvenly,
+ ) {
+ DISCHARGE_OPTIONS.forEach { option ->
+ val isSelected = selectedCode == option.code
+ DischargeIconItem(
+ option = option,
+ selected = isSelected,
+ onClick = {
+ selectedCode = if (isSelected) null else option.code
+ },
+ )
+ }
+ }
+
+ // ---- Description for the selected type ----
+ val selectedDesc = DISCHARGE_OPTIONS.firstOrNull { it.code == selectedCode }?.description
+ if (selectedDesc != null) {
+ Spacer(modifier = Modifier.height(16.dp))
+ Surface(
+ shape = RoundedCornerShape(8.dp),
+ color = LeukorrheaPink.copy(alpha = 0.08f),
+ modifier = Modifier.fillMaxWidth(),
+ ) {
+ Text(
+ text = selectedDesc,
+ fontSize = 13.sp,
+ color = MaterialTheme.colorScheme.onSurfaceVariant,
+ modifier = Modifier.padding(12.dp),
+ )
+ }
+ }
+
+ Spacer(modifier = Modifier.height(20.dp))
+
+ // ---- Save button ----
+ Button(
+ onClick = {
+ val name = DISCHARGE_OPTIONS.firstOrNull { it.code == selectedCode }?.name ?: ""
+ onSave(name)
+ },
+ modifier = Modifier.fillMaxWidth(),
+ enabled = selectedCode != null,
+ ) {
+ Text("保存")
+ }
+ Spacer(modifier = Modifier.height(8.dp))
+ }
+}
+
+/**
+ * Single discharge icon cell: circle background (pink ring when selected),
+ * icon image, check overlay at bottom-right when selected, name label below.
+ */
+@Composable
+private fun DischargeIconItem(
+ option: DischargeOption,
+ selected: Boolean,
+ onClick: () -> Unit,
+) {
+ val ringWidth = if (selected) 2.dp else 0.dp
+ val ringColor = if (selected) LeukorrheaPink else Color.Transparent
+
+ Column(
+ horizontalAlignment = Alignment.CenterHorizontally,
+ modifier = Modifier
+ .clickable { onClick() }
+ .padding(4.dp),
+ ) {
+ // Circular icon with optional pink ring + check overlay
+ Box(
+ modifier = Modifier
+ .size(52.dp)
+ .border(ringWidth, ringColor, CircleShape)
+ .padding(4.dp),
+ contentAlignment = Alignment.Center,
+ ) {
+ Image(
+ painter = painterResource(option.iconRes),
+ contentDescription = option.name,
+ modifier = Modifier.size(44.dp),
+ contentScale = ContentScale.Fit,
+ )
+
+ // Check-mark overlay at bottom-right when selected
+ if (selected) {
+ Image(
+ painter = painterResource(R.drawable.icon_leukorrhea_choose),
+ contentDescription = "已选中",
+ modifier = Modifier
+ .size(20.dp)
+ .align(Alignment.BottomEnd),
+ contentScale = ContentScale.Fit,
+ )
+ }
+ }
+
+ Spacer(modifier = Modifier.height(4.dp))
+
+ Text(
+ text = option.name,
+ fontSize = 12.sp,
+ textAlign = TextAlign.Center,
+ color = if (selected) LeukorrheaPink else MaterialTheme.colorScheme.onSurfaceVariant,
+ fontWeight = if (selected) FontWeight.SemiBold else FontWeight.Normal,
+ )
+ }
+}
diff --git a/Pink/app/src/main/java/com/pinkbear/pinkov/ui/component/checkin/FollicleSheet.kt b/Pink/app/src/main/java/com/pinkbear/pinkov/ui/component/checkin/FollicleSheet.kt
new file mode 100644
index 0000000..9dcac44
--- /dev/null
+++ b/Pink/app/src/main/java/com/pinkbear/pinkov/ui/component/checkin/FollicleSheet.kt
@@ -0,0 +1,166 @@
+package com.pinkbear.pinkov.ui.component.checkin
+
+import com.pinkbear.pinkov.R
+import androidx.compose.foundation.Image
+import androidx.compose.foundation.layout.*
+import androidx.compose.foundation.shape.RoundedCornerShape
+import androidx.compose.foundation.text.KeyboardOptions
+import androidx.compose.material3.*
+import androidx.compose.runtime.*
+import androidx.compose.ui.Alignment
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.res.painterResource
+import androidx.compose.ui.text.font.FontWeight
+import androidx.compose.ui.text.input.KeyboardType
+import androidx.compose.ui.unit.dp
+import androidx.compose.ui.unit.sp
+
+/**
+ * Bottom sheet for recording follicle monitoring data, matching Meiyou's
+ * [FollicleNumKeyboardDialog] design:
+ * - Two rows: left ovary (左侧卵泡大小) and right ovary (右侧卵泡大小)
+ * - Each row: width (A) × height (B) in mm, integer input, max 2 digits
+ * - No time field (Meiyou does not record time for follicle measurements)
+ */
+@Composable
+fun FollicleSheet(
+ initialLeftA: Int?,
+ initialLeftB: Int?,
+ initialRightA: Int?,
+ initialRightB: Int?,
+ onSave: (Int, Int, Int, Int) -> Unit,
+ onDismiss: () -> Unit,
+) {
+ var leftA by remember { mutableStateOf(initialLeftA?.toString() ?: "") }
+ var leftB by remember { mutableStateOf(initialLeftB?.toString() ?: "") }
+ var rightA by remember { mutableStateOf(initialRightA?.toString() ?: "") }
+ var rightB by remember { mutableStateOf(initialRightB?.toString() ?: "") }
+
+ val hasAnyData = leftA.isNotBlank() || leftB.isNotBlank() ||
+ rightA.isNotBlank() || rightB.isNotBlank()
+
+ CheckInBottomSheet(onDismiss = onDismiss) {
+ Text("卵泡监测", fontWeight = FontWeight.Bold, fontSize = 18.sp)
+ Spacer(modifier = Modifier.height(12.dp))
+
+ Text(
+ "建议记录最大卵泡",
+ fontSize = 13.sp,
+ color = MaterialTheme.colorScheme.onSurfaceVariant,
+ modifier = Modifier.fillMaxWidth(),
+ )
+ Spacer(modifier = Modifier.height(20.dp))
+
+ // ---- Left ovary row ----
+ FollicleSizeRow(
+ label = "左侧卵泡大小",
+ valueA = leftA,
+ valueB = leftB,
+ onValueAChange = { leftA = it.take(2) },
+ onValueBChange = { leftB = it.take(2) },
+ )
+ Spacer(modifier = Modifier.height(12.dp))
+
+ // ---- Right ovary row ----
+ FollicleSizeRow(
+ label = "右侧卵泡大小",
+ valueA = rightA,
+ valueB = rightB,
+ onValueAChange = { rightA = it.take(2) },
+ onValueBChange = { rightB = it.take(2) },
+ )
+
+ Spacer(modifier = Modifier.height(24.dp))
+
+ // ---- Save button ----
+ Button(
+ onClick = {
+ val la = leftA.toIntOrNull() ?: 0
+ val lb = leftB.toIntOrNull() ?: 0
+ val ra = rightA.toIntOrNull() ?: 0
+ val rb = rightB.toIntOrNull() ?: 0
+ onSave(la, lb, ra, rb)
+ },
+ modifier = Modifier.fillMaxWidth(),
+ enabled = hasAnyData,
+ ) {
+ Text("保存")
+ }
+ Spacer(modifier = Modifier.height(8.dp))
+ }
+}
+
+/**
+ * A single follicle size input row: label + [EditText A] + × + [EditText B] + mm.
+ * Matches Meiyou's `dialog_layout_follicle_pink.xml` row layout.
+ */
+@Composable
+private fun FollicleSizeRow(
+ label: String,
+ valueA: String,
+ valueB: String,
+ onValueAChange: (String) -> Unit,
+ onValueBChange: (String) -> Unit,
+) {
+ Row(
+ modifier = Modifier.fillMaxWidth(),
+ verticalAlignment = Alignment.CenterVertically,
+ ) {
+ // Label
+ Text(
+ text = label,
+ fontSize = 17.sp,
+ color = MaterialTheme.colorScheme.onSurface,
+ )
+
+ Spacer(modifier = Modifier.width(8.dp))
+
+ // Width input (A)
+ OutlinedTextField(
+ value = valueA,
+ onValueChange = onValueAChange,
+ keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Number),
+ singleLine = true,
+ modifier = Modifier.width(68.dp).height(56.dp),
+ shape = RoundedCornerShape(8.dp),
+ textStyle = MaterialTheme.typography.bodyLarge.copy(
+ fontSize = 16.sp,
+ textAlign = androidx.compose.ui.text.style.TextAlign.Center,
+ ),
+ )
+
+ Spacer(modifier = Modifier.width(8.dp))
+
+ // Multiply sign
+ Image(
+ painter = painterResource(R.drawable.icon_multiply),
+ contentDescription = "乘",
+ modifier = Modifier.size(12.dp),
+ )
+
+ Spacer(modifier = Modifier.width(8.dp))
+
+ // Height input (B)
+ OutlinedTextField(
+ value = valueB,
+ onValueChange = onValueBChange,
+ keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Number),
+ singleLine = true,
+ modifier = Modifier.width(68.dp).height(56.dp),
+ shape = RoundedCornerShape(8.dp),
+ textStyle = MaterialTheme.typography.bodyLarge.copy(
+ fontSize = 16.sp,
+ textAlign = androidx.compose.ui.text.style.TextAlign.Center,
+ ),
+ )
+
+ Spacer(modifier = Modifier.width(8.dp))
+
+ // Unit
+ Text(
+ text = "mm",
+ fontSize = 16.sp,
+ color = MaterialTheme.colorScheme.onSurface,
+ )
+ }
+}
diff --git a/Pink/app/src/main/java/com/pinkbear/pinkov/ui/component/checkin/HabitSheet.kt b/Pink/app/src/main/java/com/pinkbear/pinkov/ui/component/checkin/HabitSheet.kt
new file mode 100644
index 0000000..2282952
--- /dev/null
+++ b/Pink/app/src/main/java/com/pinkbear/pinkov/ui/component/checkin/HabitSheet.kt
@@ -0,0 +1,57 @@
+package com.pinkbear.pinkov.ui.component.checkin
+
+import androidx.compose.foundation.layout.*
+import androidx.compose.material3.*
+import androidx.compose.runtime.*
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.text.font.FontWeight
+import androidx.compose.ui.unit.dp
+import androidx.compose.ui.unit.sp
+
+private val HABIT_OPTIONS = listOf(
+ "早睡", "运动", "泡脚", "喝豆浆", "不熬夜",
+ "冥想", "瑜伽", "散步", "阅读", "喝水2L",
+ "不吃辣", "戒咖啡", "吃早餐", "按时吃饭", "其他",
+)
+
+@Composable
+fun HabitSheet(
+ initialHabits: String?,
+ onSave: (String) -> Unit,
+ onDismiss: () -> Unit,
+) {
+ val initialSet = remember(initialHabits) {
+ initialHabits?.split(",")?.map { it.trim() }?.filter { it.isNotEmpty() }?.toSet() ?: emptySet()
+ }
+ var selected by remember { mutableStateOf(initialSet) }
+
+ CheckInBottomSheet(onDismiss = onDismiss) {
+ Text("好习惯", fontWeight = FontWeight.Bold, fontSize = 18.sp)
+ Spacer(modifier = Modifier.height(16.dp))
+
+ Column(modifier = Modifier.fillMaxWidth()) {
+ var rowItems = mutableListOf()
+ HABIT_OPTIONS.forEach { item ->
+ rowItems.add(item)
+ if (rowItems.size == 3) {
+ CheckInTagRow(rowItems, selected) { tag ->
+ selected = if (tag in selected) selected - tag else selected + tag
+ }
+ rowItems = mutableListOf()
+ }
+ }
+ if (rowItems.isNotEmpty()) {
+ CheckInTagRow(rowItems, selected) { tag ->
+ selected = if (tag in selected) selected - tag else selected + tag
+ }
+ }
+ }
+
+ Spacer(modifier = Modifier.height(16.dp))
+ Button(
+ onClick = { onSave(selected.joinToString(",")) },
+ modifier = Modifier.fillMaxWidth(),
+ ) { Text("保存") }
+ Spacer(modifier = Modifier.height(8.dp))
+ }
+}
diff --git a/Pink/app/src/main/java/com/pinkbear/pinkov/ui/component/checkin/LoveSheet.kt b/Pink/app/src/main/java/com/pinkbear/pinkov/ui/component/checkin/LoveSheet.kt
new file mode 100644
index 0000000..dfcb8b9
--- /dev/null
+++ b/Pink/app/src/main/java/com/pinkbear/pinkov/ui/component/checkin/LoveSheet.kt
@@ -0,0 +1,190 @@
+package com.pinkbear.pinkov.ui.component.checkin
+
+import com.pinkbear.pinkov.R
+import androidx.compose.foundation.Image
+import androidx.compose.foundation.background
+import androidx.compose.foundation.border
+import androidx.compose.foundation.clickable
+import androidx.compose.foundation.layout.*
+import androidx.compose.foundation.lazy.grid.GridCells
+import androidx.compose.foundation.lazy.grid.LazyVerticalGrid
+import androidx.compose.foundation.shape.RoundedCornerShape
+import androidx.compose.material3.*
+import androidx.compose.runtime.*
+import androidx.compose.ui.Alignment
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.draw.clip
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.layout.ContentScale
+import androidx.compose.ui.res.painterResource
+import androidx.compose.ui.text.font.FontWeight
+import androidx.compose.ui.text.style.TextAlign
+import androidx.compose.ui.unit.dp
+import androidx.compose.ui.unit.sp
+import java.text.SimpleDateFormat
+import java.util.*
+
+/**
+ * Love method option: icon resource + Chinese label.
+ */
+private data class LoveOption(
+ val iconRes: Int,
+ val label: String,
+)
+
+/** Map of love icon resources to Chinese labels. */
+private val LOVE_OPTIONS = listOf(
+ LoveOption(R.drawable.icon_love_wcs, "无措施"),
+ LoveOption(R.drawable.icon_love_byt, "避孕套"),
+ LoveOption(R.drawable.icon_love_twpj, "体外排精"),
+ LoveOption(R.drawable.icon_love_wsj, "未射精"),
+ LoveOption(R.drawable.icon_love_jyh, "紧急避孕药"),
+ LoveOption(R.drawable.icon_love_cxby, "短效避孕药"),
+ LoveOption(R.drawable.icon_love_dxby, "长效避孕药"),
+ LoveOption(R.drawable.icon_love_jjbyy, "节育环"),
+ LoveOption(R.drawable.icon_love_qtyy, "其他措施"),
+ LoveOption(R.drawable.icon_love_ziwei, "自慰"),
+)
+
+/**
+ * Bottom sheet for recording sexual activity method and time.
+ */
+@OptIn(ExperimentalMaterial3Api::class)
+@Composable
+fun LoveSheet(
+ initialMethod: String?,
+ initialTime: Long?,
+ onSave: (String, Long) -> Unit,
+ onDismiss: () -> Unit,
+) {
+ val now = remember { System.currentTimeMillis() }
+ var selectedMethod by remember { mutableStateOf(initialMethod) }
+ var time by remember { mutableStateOf(initialTime ?: now) }
+ var showTimePicker by remember { mutableStateOf(false) }
+
+ CheckInBottomSheet(onDismiss = onDismiss) {
+ Text("同房方式", fontWeight = FontWeight.Bold, fontSize = 18.sp)
+ Spacer(modifier = Modifier.height(16.dp))
+
+ // 2 rows × 5 columns grid of love method icons
+ LazyVerticalGrid(
+ columns = GridCells.Fixed(5),
+ modifier = Modifier.fillMaxWidth().height(200.dp),
+ horizontalArrangement = Arrangement.spacedBy(8.dp),
+ verticalArrangement = Arrangement.spacedBy(12.dp),
+ ) {
+ items(LOVE_OPTIONS.size) { index ->
+ val option = LOVE_OPTIONS[index]
+ val selected = selectedMethod == option.label
+ LoveMethodItem(
+ option = option,
+ selected = selected,
+ onClick = { selectedMethod = option.label },
+ )
+ }
+ }
+
+ Spacer(modifier = Modifier.height(12.dp))
+
+ // Time row
+ val timeFmt = remember { SimpleDateFormat("HH:mm", Locale.getDefault()) }
+ Row(
+ modifier = Modifier.fillMaxWidth(),
+ verticalAlignment = Alignment.CenterVertically,
+ horizontalArrangement = Arrangement.SpaceBetween,
+ ) {
+ Text("同房时间", fontSize = 14.sp)
+ TextButton(onClick = { showTimePicker = true }) {
+ Text(timeFmt.format(Date(time)), fontSize = 15.sp)
+ }
+ }
+
+ Spacer(modifier = Modifier.height(16.dp))
+
+ // Save button
+ Button(
+ onClick = {
+ selectedMethod?.let { onSave(it, time) }
+ },
+ modifier = Modifier.fillMaxWidth(),
+ enabled = selectedMethod != null,
+ ) {
+ Text("保存")
+ }
+ Spacer(modifier = Modifier.height(8.dp))
+ }
+
+ // Time picker dialog
+ if (showTimePicker) {
+ val tpState = rememberTimePickerState(
+ initialHour = (time % 86400000 / 3600000).toInt(),
+ initialMinute = (time % 3600000 / 60000).toInt(),
+ is24Hour = true,
+ )
+ AlertDialog(
+ onDismissRequest = { showTimePicker = false },
+ title = { Text("选择同房时间") },
+ text = {
+ Box(
+ modifier = Modifier.fillMaxWidth(),
+ contentAlignment = Alignment.Center,
+ ) {
+ TimePicker(state = tpState)
+ }
+ },
+ confirmButton = {
+ TextButton(onClick = {
+ val cal = Calendar.getInstance().apply {
+ set(Calendar.HOUR_OF_DAY, tpState.hour)
+ set(Calendar.MINUTE, tpState.minute)
+ set(Calendar.SECOND, 0)
+ set(Calendar.MILLISECOND, 0)
+ }
+ time = cal.timeInMillis
+ showTimePicker = false
+ }) { Text("确定") }
+ },
+ dismissButton = {
+ TextButton(onClick = { showTimePicker = false }) { Text("取消") }
+ },
+ )
+ }
+}
+
+@Composable
+private fun LoveMethodItem(
+ option: LoveOption,
+ selected: Boolean,
+ onClick: () -> Unit,
+) {
+ val borderColor = if (selected) MaterialTheme.colorScheme.primary else Color.Transparent
+ val bgColor = if (selected)
+ MaterialTheme.colorScheme.primary.copy(alpha = 0.1f)
+ else
+ Color.Transparent
+
+ Column(
+ modifier = Modifier
+ .clip(RoundedCornerShape(8.dp))
+ .border(2.dp, borderColor, RoundedCornerShape(8.dp))
+ .background(bgColor)
+ .clickable { onClick() }
+ .padding(6.dp),
+ horizontalAlignment = Alignment.CenterHorizontally,
+ ) {
+ Image(
+ painter = painterResource(option.iconRes),
+ contentDescription = option.label,
+ modifier = Modifier.size(40.dp),
+ contentScale = ContentScale.Fit,
+ )
+ Spacer(modifier = Modifier.height(2.dp))
+ Text(
+ text = option.label,
+ fontSize = 10.sp,
+ textAlign = TextAlign.Center,
+ maxLines = 1,
+ color = if (selected) MaterialTheme.colorScheme.primary else MaterialTheme.colorScheme.onSurfaceVariant,
+ )
+ }
+}
diff --git a/Pink/app/src/main/java/com/pinkbear/pinkov/ui/component/checkin/MoodSheet.kt b/Pink/app/src/main/java/com/pinkbear/pinkov/ui/component/checkin/MoodSheet.kt
new file mode 100644
index 0000000..cef9ddf
--- /dev/null
+++ b/Pink/app/src/main/java/com/pinkbear/pinkov/ui/component/checkin/MoodSheet.kt
@@ -0,0 +1,112 @@
+package com.pinkbear.pinkov.ui.component.checkin
+
+import com.pinkbear.pinkov.R
+import androidx.compose.foundation.Image
+import androidx.compose.foundation.background
+import androidx.compose.foundation.border
+import androidx.compose.foundation.clickable
+import androidx.compose.foundation.layout.*
+import androidx.compose.foundation.lazy.grid.GridCells
+import androidx.compose.foundation.lazy.grid.LazyVerticalGrid
+import androidx.compose.foundation.shape.RoundedCornerShape
+import androidx.compose.material3.*
+import androidx.compose.runtime.*
+import androidx.compose.ui.Alignment
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.draw.clip
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.layout.ContentScale
+import androidx.compose.ui.res.painterResource
+import androidx.compose.ui.text.font.FontWeight
+import androidx.compose.ui.text.style.TextAlign
+import androidx.compose.ui.unit.dp
+import androidx.compose.ui.unit.sp
+
+/**
+ * Mood option with icon resource and label.
+ */
+private data class MoodOption(val iconRes: Int, val label: String)
+
+private val MOOD_OPTIONS = listOf(
+ MoodOption(R.drawable.icon_feeling_1_chaokaixin, "超开心"),
+ MoodOption(R.drawable.icon_feeling_2_tingkaixin, "挺开心"),
+ MoodOption(R.drawable.icon_feeling_3_yiban, "一般"),
+ MoodOption(R.drawable.icon_feeling_4_bukaixin, "不开心"),
+ MoodOption(R.drawable.icon_feeling_5_haoshangxin, "好伤心"),
+ MoodOption(R.drawable.icon_feeling_6_xingfen, "兴奋"),
+ MoodOption(R.drawable.icon_feeling_7_jingxi, "惊喜"),
+ MoodOption(R.drawable.icon_feeling_8_manzu, "满足"),
+ MoodOption(R.drawable.icon_feeling_9_xindong, "心动"),
+ MoodOption(R.drawable.icon_feeling_10_zixin, "自信"),
+ MoodOption(R.drawable.icon_feeling_11_fangsong, "放松"),
+ MoodOption(R.drawable.icon_feeling_12_pingjing, "平静"),
+ MoodOption(R.drawable.icon_feeling_13_fanzao, "烦躁"),
+ MoodOption(R.drawable.icon_feeling_14_yinu, "易怒"),
+ MoodOption(R.drawable.icon_feeling_15_shengqi, "生气"),
+ MoodOption(R.drawable.icon_feeling_16_jiaolv, "焦虑"),
+ MoodOption(R.drawable.icon_feeling_17_neihao, "内耗"),
+ MoodOption(R.drawable.icon_feeling_18_yali, "压力"),
+ MoodOption(R.drawable.icon_feeling_19_haipa, "害怕"),
+ MoodOption(R.drawable.icon_feeling_20_lengmo, "冷漠"),
+)
+
+/**
+ * Bottom sheet for selecting mood (single-select grid).
+ */
+@Composable
+fun MoodSheet(
+ initialMood: String?,
+ onSave: (String) -> Unit,
+ onDismiss: () -> Unit,
+) {
+ var selected by remember { mutableStateOf(initialMood) }
+
+ CheckInBottomSheet(onDismiss = onDismiss) {
+ Text("心情", fontWeight = FontWeight.Bold, fontSize = 18.sp)
+ Spacer(modifier = Modifier.height(16.dp))
+
+ LazyVerticalGrid(
+ columns = GridCells.Fixed(5),
+ modifier = Modifier.fillMaxWidth().height(280.dp),
+ horizontalArrangement = Arrangement.spacedBy(8.dp),
+ verticalArrangement = Arrangement.spacedBy(12.dp),
+ ) {
+ items(MOOD_OPTIONS.size) { index ->
+ val option = MOOD_OPTIONS[index]
+ val isSelected = selected == option.label
+ Column(
+ modifier = Modifier
+ .clip(RoundedCornerShape(8.dp))
+ .border(2.dp, if (isSelected) MaterialTheme.colorScheme.primary else Color.Transparent, RoundedCornerShape(8.dp))
+ .background(if (isSelected) MaterialTheme.colorScheme.primary.copy(alpha = 0.1f) else Color.Transparent)
+ .clickable { selected = option.label }
+ .padding(6.dp),
+ horizontalAlignment = Alignment.CenterHorizontally,
+ ) {
+ Image(
+ painter = painterResource(option.iconRes),
+ contentDescription = option.label,
+ modifier = Modifier.size(36.dp),
+ contentScale = ContentScale.Fit,
+ )
+ Spacer(modifier = Modifier.height(2.dp))
+ Text(
+ text = option.label,
+ fontSize = 10.sp,
+ textAlign = TextAlign.Center,
+ maxLines = 1,
+ color = if (isSelected) MaterialTheme.colorScheme.primary else MaterialTheme.colorScheme.onSurfaceVariant,
+ )
+ }
+ }
+ }
+
+ Spacer(modifier = Modifier.height(16.dp))
+ Button(
+ onClick = { selected?.let { onSave(it) } },
+ modifier = Modifier.fillMaxWidth(),
+ enabled = selected != null,
+ ) { Text("保存") }
+ Spacer(modifier = Modifier.height(8.dp))
+ }
+}
diff --git a/Pink/app/src/main/java/com/pinkbear/pinkov/ui/component/checkin/PlanSheet.kt b/Pink/app/src/main/java/com/pinkbear/pinkov/ui/component/checkin/PlanSheet.kt
new file mode 100644
index 0000000..490af0c
--- /dev/null
+++ b/Pink/app/src/main/java/com/pinkbear/pinkov/ui/component/checkin/PlanSheet.kt
@@ -0,0 +1,39 @@
+package com.pinkbear.pinkov.ui.component.checkin
+
+import androidx.compose.foundation.layout.*
+import androidx.compose.material3.*
+import androidx.compose.runtime.*
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.text.font.FontWeight
+import androidx.compose.ui.unit.dp
+import androidx.compose.ui.unit.sp
+
+@Composable
+fun PlanSheet(
+ initialPlan: String?,
+ onSave: (String) -> Unit,
+ onDismiss: () -> Unit,
+) {
+ var plan by remember { mutableStateOf(initialPlan ?: "") }
+
+ CheckInBottomSheet(onDismiss = onDismiss) {
+ Text("计划", fontWeight = FontWeight.Bold, fontSize = 18.sp)
+ Spacer(modifier = Modifier.height(16.dp))
+
+ OutlinedTextField(
+ value = plan,
+ onValueChange = { plan = it },
+ label = { Text("今天有什么计划…") },
+ modifier = Modifier.fillMaxWidth().height(120.dp),
+ maxLines = 6,
+ )
+
+ Spacer(modifier = Modifier.height(16.dp))
+ Button(
+ onClick = { onSave(plan) },
+ modifier = Modifier.fillMaxWidth(),
+ enabled = plan.isNotBlank(),
+ ) { Text("保存") }
+ Spacer(modifier = Modifier.height(8.dp))
+ }
+}
diff --git a/Pink/app/src/main/java/com/pinkbear/pinkov/ui/component/checkin/StoolSheet.kt b/Pink/app/src/main/java/com/pinkbear/pinkov/ui/component/checkin/StoolSheet.kt
new file mode 100644
index 0000000..b0ecd83
--- /dev/null
+++ b/Pink/app/src/main/java/com/pinkbear/pinkov/ui/component/checkin/StoolSheet.kt
@@ -0,0 +1,50 @@
+package com.pinkbear.pinkov.ui.component.checkin
+
+import androidx.compose.foundation.clickable
+import androidx.compose.foundation.layout.*
+import androidx.compose.material3.*
+import androidx.compose.runtime.*
+import androidx.compose.ui.Alignment
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.text.font.FontWeight
+import androidx.compose.ui.unit.dp
+import androidx.compose.ui.unit.sp
+
+@Composable
+fun StoolSheet(
+ initialType: String?,
+ onSave: (String) -> Unit,
+ onDismiss: () -> Unit,
+) {
+ val options = listOf("正常", "稀便", "干便", "便秘", "腹泻", "黑便", "血便", "其他")
+ var selected by remember { mutableStateOf(initialType) }
+
+ CheckInBottomSheet(onDismiss = onDismiss) {
+ Text("便便", fontWeight = FontWeight.Bold, fontSize = 18.sp)
+ Spacer(modifier = Modifier.height(16.dp))
+
+ Column(modifier = Modifier.fillMaxWidth()) {
+ options.forEach { label ->
+ Row(
+ modifier = Modifier
+ .fillMaxWidth()
+ .clickable { selected = label }
+ .padding(vertical = 10.dp),
+ verticalAlignment = Alignment.CenterVertically,
+ ) {
+ RadioButton(selected = selected == label, onClick = { selected = label })
+ Spacer(modifier = Modifier.width(8.dp))
+ Text(label, fontSize = 15.sp)
+ }
+ }
+ }
+
+ Spacer(modifier = Modifier.height(16.dp))
+ Button(
+ onClick = { selected?.let { onSave(it) } },
+ modifier = Modifier.fillMaxWidth(),
+ enabled = selected != null,
+ ) { Text("保存") }
+ Spacer(modifier = Modifier.height(8.dp))
+ }
+}
diff --git a/Pink/app/src/main/java/com/pinkbear/pinkov/ui/component/checkin/SupplementSheet.kt b/Pink/app/src/main/java/com/pinkbear/pinkov/ui/component/checkin/SupplementSheet.kt
new file mode 100644
index 0000000..4c2884c
--- /dev/null
+++ b/Pink/app/src/main/java/com/pinkbear/pinkov/ui/component/checkin/SupplementSheet.kt
@@ -0,0 +1,96 @@
+package com.pinkbear.pinkov.ui.component.checkin
+
+import androidx.compose.foundation.background
+import androidx.compose.foundation.clickable
+import androidx.compose.foundation.layout.*
+import androidx.compose.foundation.shape.RoundedCornerShape
+import androidx.compose.material3.*
+import androidx.compose.runtime.*
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.draw.clip
+import androidx.compose.ui.text.font.FontWeight
+import androidx.compose.ui.unit.dp
+import androidx.compose.ui.unit.sp
+
+private val SUPPLEMENT_OPTIONS = listOf(
+ "叶酸", "维生素D", "维生素E", "钙片", "铁剂",
+ "DHA", "辅酶Q10", "维生素C", "维生素B族", "锌",
+ "益生菌", "蔓越莓", "月见草油", "圣洁莓", "其他",
+)
+
+@Composable
+fun SupplementSheet(
+ initialSupplements: String?,
+ onSave: (String) -> Unit,
+ onDismiss: () -> Unit,
+) {
+ val initialSet = remember(initialSupplements) {
+ initialSupplements?.split(",")?.map { it.trim() }?.filter { it.isNotEmpty() }?.toSet() ?: emptySet()
+ }
+ var selected by remember { mutableStateOf(initialSet) }
+
+ CheckInBottomSheet(onDismiss = onDismiss) {
+ Text("营养补充", fontWeight = FontWeight.Bold, fontSize = 18.sp)
+ Spacer(modifier = Modifier.height(16.dp))
+
+ Column(modifier = Modifier.fillMaxWidth()) {
+ var rowItems = mutableListOf()
+ SUPPLEMENT_OPTIONS.forEach { item ->
+ rowItems.add(item)
+ if (rowItems.size == 3) {
+ CheckInTagRow(rowItems, selected) { tag ->
+ selected = if (tag in selected) selected - tag else selected + tag
+ }
+ rowItems = mutableListOf()
+ }
+ }
+ if (rowItems.isNotEmpty()) {
+ CheckInTagRow(rowItems, selected) { tag ->
+ selected = if (tag in selected) selected - tag else selected + tag
+ }
+ }
+ }
+
+ Spacer(modifier = Modifier.height(16.dp))
+ Button(
+ onClick = { onSave(selected.joinToString(",")) },
+ modifier = Modifier.fillMaxWidth(),
+ ) { Text("保存") }
+ Spacer(modifier = Modifier.height(8.dp))
+ }
+}
+
+@Composable
+internal fun CheckInTagRow(
+ items: List,
+ selected: Set,
+ onToggle: (String) -> Unit,
+) {
+ Row(
+ modifier = Modifier.fillMaxWidth().padding(vertical = 4.dp),
+ horizontalArrangement = Arrangement.spacedBy(8.dp),
+ ) {
+ items.forEach { label ->
+ val isSelected = label in selected
+ Box(
+ modifier = Modifier
+ .weight(1f)
+ .clip(RoundedCornerShape(8.dp))
+ .background(
+ if (isSelected) MaterialTheme.colorScheme.primary
+ else MaterialTheme.colorScheme.surfaceVariant
+ )
+ .clickable { onToggle(label) }
+ .padding(horizontal = 12.dp, vertical = 10.dp),
+ ) {
+ Text(
+ text = label,
+ fontSize = 13.sp,
+ color = if (isSelected) MaterialTheme.colorScheme.onPrimary
+ else MaterialTheme.colorScheme.onSurfaceVariant,
+ modifier = Modifier.fillMaxWidth(),
+ )
+ }
+ }
+ }
+}
diff --git a/Pink/app/src/main/java/com/pinkbear/pinkov/ui/component/checkin/SymptomSheet.kt b/Pink/app/src/main/java/com/pinkbear/pinkov/ui/component/checkin/SymptomSheet.kt
new file mode 100644
index 0000000..3a96a6c
--- /dev/null
+++ b/Pink/app/src/main/java/com/pinkbear/pinkov/ui/component/checkin/SymptomSheet.kt
@@ -0,0 +1,254 @@
+package com.pinkbear.pinkov.ui.component.checkin
+
+import com.pinkbear.pinkov.R
+import androidx.compose.foundation.Image
+import androidx.compose.foundation.background
+import androidx.compose.foundation.border
+import androidx.compose.foundation.clickable
+import androidx.compose.foundation.layout.*
+import androidx.compose.foundation.rememberScrollState
+import androidx.compose.foundation.shape.RoundedCornerShape
+import androidx.compose.foundation.verticalScroll
+import androidx.compose.material3.*
+import androidx.compose.runtime.*
+import androidx.compose.ui.Alignment
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.draw.clip
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.layout.ContentScale
+import androidx.compose.ui.res.painterResource
+import androidx.compose.ui.text.font.FontWeight
+import androidx.compose.ui.text.style.TextAlign
+import androidx.compose.ui.unit.dp
+import androidx.compose.ui.unit.sp
+
+/**
+ * A single symptom option with icon resource and Chinese name.
+ * @param id Numeric ID matching Meiyou's all_symptom_data.json.
+ */
+private data class SymptomOption(
+ val id: Int,
+ val iconRes: Int,
+ val name: String,
+)
+
+// ---- Section 1: 身体症状 (pregnancy_prepare mode) ----
+private val BODY_SYMPTOMS = listOf(
+ SymptomOption(192, R.drawable.icon_zhengzhuang_192_meiyou, "没有症状"),
+ SymptomOption(11, R.drawable.icon_zhengzhuang_011_yaosuan, "腰酸"),
+ SymptomOption(10, R.drawable.icon_zhengzhuang_010_futong, "腹痛"),
+ SymptomOption(12, R.drawable.icon_zhengzhuang_012_xiaofuzhuizhang, "小腹坠胀"),
+ SymptomOption(4, R.drawable.icon_zhengzhuang_004_rufangzhangtong, "乳房胀痛"),
+ SymptomOption(1, R.drawable.icon_zhengzhuang_001_shentisuantong, "身体酸痛"),
+ SymptomOption(0, R.drawable.icon_zhengzhuang_000_toutong, "头痛"),
+ SymptomOption(3, R.drawable.icon_zhengzhuang_003_xuanyun, "眩晕"),
+ SymptomOption(7, R.drawable.icon_zhengzhuang_007_shimian, "失眠"),
+ SymptomOption(5, R.drawable.icon_zhengzhuang_005_fenci, "粉刺"),
+ SymptomOption(32, R.drawable.icon_zhengzhuang_032_pifuganzao, "皮肤干燥"),
+ SymptomOption(6, R.drawable.icon_zhengzhuang_006_shiyubuzhen, "食欲不振"),
+ SymptomOption(117, R.drawable.icon_zhengzhuang_117_shiyuwangsheng, "食欲旺盛"),
+ SymptomOption(2, R.drawable.icon_zhengzhuang_002_fuxie, "腹泻"),
+ SymptomOption(14, R.drawable.icon_zhengzhuang_014_bianmi, "便秘"),
+ SymptomOption(22, R.drawable.icon_zhengzhuang_022_pibei, "疲惫"),
+)
+
+// ---- Section 2: 阴道分泌物 (pregnancy_prepare mode) ----
+private val DISCHARGE_SYMPTOMS = listOf(
+ SymptomOption(96, R.drawable.icon_zhengzhuang_096_hesefenmiwu, "褐色分泌物"),
+ SymptomOption(33, R.drawable.icon_zhengzhuang_033_chuxue, "出血"),
+ SymptomOption(127, R.drawable.icon_zhengzhuang_127_youxuekuai, "有血块"),
+ SymptomOption(25, R.drawable.icon_zhengzhuang_025_baidaizengduo, "白带增多"),
+)
+
+/** Width for each icon cell: (screen - padding - gaps) / 4. Approx for bottom sheet. */
+private val CELL_WIDTH = 72.dp
+
+/**
+ * Bottom sheet for recording symptoms — three sections matching the Meiyou app design:
+ * 1. 身体症状 (body symptoms) — 4-column icon grid
+ * 2. 阴道分泌物 (vaginal discharge) — 4-column icon grid
+ * 3. 手工输入更多症状 — free-text input for custom symptoms
+ */
+@Composable
+fun SymptomSheet(
+ initialSymptoms: String?,
+ onSave: (String) -> Unit,
+ onDismiss: () -> Unit,
+) {
+ // Split saved symptoms into known names and custom text.
+ val knownNames = BODY_SYMPTOMS.map { it.name } + DISCHARGE_SYMPTOMS.map { it.name }
+ val initialParts = remember(initialSymptoms) {
+ initialSymptoms
+ ?.split(",")
+ ?.map { it.trim() }
+ ?.filter { it.isNotEmpty() }
+ ?: emptyList()
+ }
+ val initialSelected = remember(initialParts) {
+ initialParts.filter { it in knownNames }.toSet()
+ }
+ val initialCustom = remember(initialParts) {
+ initialParts.filter { it !in knownNames }.joinToString(",")
+ }
+
+ var selected by remember { mutableStateOf(initialSelected) }
+ var customText by remember { mutableStateOf(initialCustom) }
+
+ CheckInBottomSheet(onDismiss = onDismiss) {
+ Column(
+ modifier = Modifier
+ .fillMaxWidth()
+ .verticalScroll(rememberScrollState()),
+ ) {
+ Text("症状", fontWeight = FontWeight.Bold, fontSize = 18.sp)
+ Spacer(modifier = Modifier.height(16.dp))
+
+ // ===== Section 1: 身体症状 =====
+ SectionTitle("身体症状")
+ Spacer(modifier = Modifier.height(8.dp))
+ SymptomIconGrid(
+ options = BODY_SYMPTOMS,
+ selectedNames = selected,
+ onToggle = { name ->
+ selected = if (name in selected) selected - name else selected + name
+ },
+ )
+
+ Spacer(modifier = Modifier.height(20.dp))
+ HorizontalDivider(thickness = 0.5.dp, color = MaterialTheme.colorScheme.outlineVariant)
+ Spacer(modifier = Modifier.height(16.dp))
+
+ // ===== Section 2: 阴道分泌物 =====
+ SectionTitle("阴道分泌物")
+ Spacer(modifier = Modifier.height(8.dp))
+ SymptomIconGrid(
+ options = DISCHARGE_SYMPTOMS,
+ selectedNames = selected,
+ onToggle = { name ->
+ selected = if (name in selected) selected - name else selected + name
+ },
+ )
+
+ Spacer(modifier = Modifier.height(20.dp))
+ HorizontalDivider(thickness = 0.5.dp, color = MaterialTheme.colorScheme.outlineVariant)
+ Spacer(modifier = Modifier.height(16.dp))
+
+ // ===== Section 3: 手工输入更多症状 =====
+ SectionTitle("手工输入更多症状")
+ Spacer(modifier = Modifier.height(8.dp))
+ OutlinedTextField(
+ value = customText,
+ onValueChange = { customText = it },
+ placeholder = { Text("输入其他症状,用逗号或分号分隔", fontSize = 13.sp) },
+ modifier = Modifier
+ .fillMaxWidth()
+ .height(100.dp),
+ maxLines = 4,
+ )
+
+ Spacer(modifier = Modifier.height(20.dp))
+
+ // ===== Save button =====
+ Button(
+ onClick = {
+ val parts = selected.toList() + customText
+ .split(",", ",", ";", ";")
+ .map { it.trim() }
+ .filter { it.isNotEmpty() }
+ onSave(parts.joinToString(","))
+ },
+ modifier = Modifier.fillMaxWidth(),
+ ) {
+ Text("保存")
+ }
+ Spacer(modifier = Modifier.height(8.dp))
+ }
+ }
+}
+
+@Composable
+private fun SectionTitle(title: String) {
+ Text(
+ text = title,
+ fontSize = 15.sp,
+ fontWeight = FontWeight.SemiBold,
+ color = MaterialTheme.colorScheme.onSurface,
+ )
+}
+
+/**
+ * A 4-column grid of symptom icons.
+ */
+@Composable
+private fun SymptomIconGrid(
+ options: List,
+ selectedNames: Set,
+ onToggle: (String) -> Unit,
+) {
+ // Chunk into rows of 4
+ val rows = options.chunked(4)
+ Column(
+ modifier = Modifier.fillMaxWidth(),
+ verticalArrangement = Arrangement.spacedBy(10.dp),
+ ) {
+ rows.forEach { rowItems ->
+ Row(
+ modifier = Modifier.fillMaxWidth(),
+ horizontalArrangement = Arrangement.spacedBy(8.dp),
+ ) {
+ rowItems.forEach { option ->
+ SymptomIconItem(
+ option = option,
+ selected = option.name in selectedNames,
+ onClick = { onToggle(option.name) },
+ modifier = Modifier.weight(1f),
+ )
+ }
+ // Fill remaining slots with empty space to keep alignment
+ repeat(4 - rowItems.size) {
+ Spacer(modifier = Modifier.weight(1f))
+ }
+ }
+ }
+ }
+}
+
+@Composable
+private fun SymptomIconItem(
+ option: SymptomOption,
+ selected: Boolean,
+ onClick: () -> Unit,
+ modifier: Modifier = Modifier,
+) {
+ val borderColor = if (selected) MaterialTheme.colorScheme.primary else Color.Transparent
+ val bgColor = if (selected)
+ MaterialTheme.colorScheme.primary.copy(alpha = 0.1f)
+ else
+ Color.Transparent
+
+ Column(
+ modifier = modifier
+ .clip(RoundedCornerShape(8.dp))
+ .border(2.dp, borderColor, RoundedCornerShape(8.dp))
+ .background(bgColor)
+ .clickable { onClick() }
+ .padding(vertical = 8.dp, horizontal = 4.dp),
+ horizontalAlignment = Alignment.CenterHorizontally,
+ ) {
+ Image(
+ painter = painterResource(option.iconRes),
+ contentDescription = option.name,
+ modifier = Modifier.size(36.dp),
+ contentScale = ContentScale.Fit,
+ )
+ Spacer(modifier = Modifier.height(4.dp))
+ Text(
+ text = option.name,
+ fontSize = 10.sp,
+ textAlign = TextAlign.Center,
+ maxLines = 1,
+ color = if (selected) MaterialTheme.colorScheme.primary
+ else MaterialTheme.colorScheme.onSurfaceVariant,
+ )
+ }
+}
diff --git a/Pink/app/src/main/java/com/pinkbear/pinkov/ui/component/checkin/TemperatureSheet.kt b/Pink/app/src/main/java/com/pinkbear/pinkov/ui/component/checkin/TemperatureSheet.kt
new file mode 100644
index 0000000..fd4ac89
--- /dev/null
+++ b/Pink/app/src/main/java/com/pinkbear/pinkov/ui/component/checkin/TemperatureSheet.kt
@@ -0,0 +1,114 @@
+package com.pinkbear.pinkov.ui.component.checkin
+
+import androidx.compose.foundation.layout.*
+import androidx.compose.foundation.text.KeyboardOptions
+import androidx.compose.material3.*
+import androidx.compose.runtime.*
+import androidx.compose.ui.Alignment
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.text.font.FontWeight
+import androidx.compose.ui.text.input.KeyboardType
+import androidx.compose.ui.unit.dp
+import androidx.compose.ui.unit.sp
+
+import java.text.SimpleDateFormat
+import java.util.*
+
+/**
+ * Bottom sheet for recording basal body temperature.
+ */
+@OptIn(ExperimentalMaterial3Api::class)
+@Composable
+fun TemperatureSheet(
+ initialTemp: Float?,
+ initialTime: Long?,
+ onSave: (Float, Long) -> Unit,
+ onDismiss: () -> Unit,
+) {
+ val now = remember { System.currentTimeMillis() }
+ var temp by remember { mutableStateOf(initialTemp?.toString() ?: "") }
+ var time by remember { mutableStateOf(initialTime ?: now) }
+ var showTimePicker by remember { mutableStateOf(false) }
+
+ CheckInBottomSheet(onDismiss = onDismiss) {
+ Text("基础体温", fontWeight = FontWeight.Bold, fontSize = 18.sp)
+ Spacer(modifier = Modifier.height(16.dp))
+
+ // Temperature input
+ OutlinedTextField(
+ value = temp,
+ onValueChange = { temp = it },
+ label = { Text("体温") },
+ suffix = { Text("°C") },
+ keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Decimal),
+ singleLine = true,
+ modifier = Modifier.fillMaxWidth(),
+ )
+
+ Spacer(modifier = Modifier.height(12.dp))
+
+ // Time display + picker button
+ val timeFmt = remember { SimpleDateFormat("HH:mm", Locale.getDefault()) }
+ Row(
+ modifier = Modifier.fillMaxWidth(),
+ verticalAlignment = Alignment.CenterVertically,
+ horizontalArrangement = Arrangement.SpaceBetween,
+ ) {
+ Text("测温时间", fontSize = 14.sp)
+ TextButton(onClick = { showTimePicker = true }) {
+ Text(timeFmt.format(Date(time)), fontSize = 15.sp)
+ }
+ }
+
+ Spacer(modifier = Modifier.height(16.dp))
+
+ // Save button
+ Button(
+ onClick = {
+ val t = temp.toFloatOrNull() ?: return@Button
+ onSave(t, time)
+ },
+ modifier = Modifier.fillMaxWidth(),
+ enabled = temp.isNotBlank(),
+ ) {
+ Text("保存")
+ }
+ Spacer(modifier = Modifier.height(8.dp))
+ }
+
+ // Time picker dialog
+ if (showTimePicker) {
+ val tpState = rememberTimePickerState(
+ initialHour = (time % 86400000 / 3600000).toInt(),
+ initialMinute = (time % 3600000 / 60000).toInt(),
+ is24Hour = true,
+ )
+ AlertDialog(
+ onDismissRequest = { showTimePicker = false },
+ title = { Text("选择测温时间") },
+ text = {
+ Box(
+ modifier = Modifier.fillMaxWidth(),
+ contentAlignment = Alignment.Center,
+ ) {
+ TimePicker(state = tpState)
+ }
+ },
+ confirmButton = {
+ TextButton(onClick = {
+ val cal = Calendar.getInstance().apply {
+ set(Calendar.HOUR_OF_DAY, tpState.hour)
+ set(Calendar.MINUTE, tpState.minute)
+ set(Calendar.SECOND, 0)
+ set(Calendar.MILLISECOND, 0)
+ }
+ time = cal.timeInMillis
+ showTimePicker = false
+ }) { Text("确定") }
+ },
+ dismissButton = {
+ TextButton(onClick = { showTimePicker = false }) { Text("取消") }
+ },
+ )
+ }
+}
diff --git a/Pink/app/src/main/java/com/pinkbear/pinkov/ui/component/checkin/WeightSheet.kt b/Pink/app/src/main/java/com/pinkbear/pinkov/ui/component/checkin/WeightSheet.kt
new file mode 100644
index 0000000..8bfd684
--- /dev/null
+++ b/Pink/app/src/main/java/com/pinkbear/pinkov/ui/component/checkin/WeightSheet.kt
@@ -0,0 +1,90 @@
+package com.pinkbear.pinkov.ui.component.checkin
+
+import androidx.compose.foundation.layout.*
+import androidx.compose.foundation.text.KeyboardOptions
+import androidx.compose.material3.*
+import androidx.compose.runtime.*
+import androidx.compose.ui.Alignment
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.text.font.FontWeight
+import androidx.compose.ui.text.input.KeyboardType
+import androidx.compose.ui.unit.dp
+import androidx.compose.ui.unit.sp
+import java.text.SimpleDateFormat
+import java.util.*
+
+@OptIn(ExperimentalMaterial3Api::class)
+@Composable
+fun WeightSheet(
+ initialWeight: Float?,
+ initialTime: Long?,
+ onSave: (Float, Long) -> Unit,
+ onDismiss: () -> Unit,
+) {
+ val now = remember { System.currentTimeMillis() }
+ var weightStr by remember { mutableStateOf(initialWeight?.toString() ?: "") }
+ var time by remember { mutableStateOf(initialTime ?: now) }
+ var showTimePicker by remember { mutableStateOf(false) }
+
+ CheckInBottomSheet(onDismiss = onDismiss) {
+ Text("体重", fontWeight = FontWeight.Bold, fontSize = 18.sp)
+ Spacer(modifier = Modifier.height(16.dp))
+
+ OutlinedTextField(
+ value = weightStr,
+ onValueChange = { weightStr = it },
+ label = { Text("体重") },
+ suffix = { Text("kg") },
+ keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Decimal),
+ singleLine = true,
+ modifier = Modifier.fillMaxWidth(),
+ )
+
+ Spacer(modifier = Modifier.height(12.dp))
+ val timeFmt = remember { SimpleDateFormat("HH:mm", Locale.getDefault()) }
+ Row(
+ modifier = Modifier.fillMaxWidth(),
+ verticalAlignment = Alignment.CenterVertically,
+ horizontalArrangement = Arrangement.SpaceBetween,
+ ) {
+ Text("测量时间", fontSize = 14.sp)
+ TextButton(onClick = { showTimePicker = true }) {
+ Text(timeFmt.format(Date(time)), fontSize = 15.sp)
+ }
+ }
+
+ Spacer(modifier = Modifier.height(16.dp))
+ Button(
+ onClick = { weightStr.toFloatOrNull()?.let { onSave(it, time) } },
+ modifier = Modifier.fillMaxWidth(),
+ enabled = weightStr.isNotBlank(),
+ ) { Text("保存") }
+ Spacer(modifier = Modifier.height(8.dp))
+ }
+
+ if (showTimePicker) {
+ val tpState = rememberTimePickerState(
+ initialHour = (time % 86400000 / 3600000).toInt(),
+ initialMinute = (time % 3600000 / 60000).toInt(),
+ is24Hour = true,
+ )
+ AlertDialog(
+ onDismissRequest = { showTimePicker = false },
+ title = { Text("选择测量时间") },
+ text = { Box(Modifier.fillMaxWidth(), contentAlignment = Alignment.Center) { TimePicker(state = tpState) } },
+ confirmButton = {
+ TextButton(onClick = {
+ val cal = Calendar.getInstance().apply {
+ set(Calendar.HOUR_OF_DAY, tpState.hour)
+ set(Calendar.MINUTE, tpState.minute)
+ set(Calendar.SECOND, 0)
+ set(Calendar.MILLISECOND, 0)
+ }
+ time = cal.timeInMillis
+ showTimePicker = false
+ }) { Text("确定") }
+ },
+ dismissButton = { TextButton(onClick = { showTimePicker = false }) { Text("取消") } },
+ )
+ }
+}
diff --git a/Pink/app/src/main/java/com/pinkbear/pinkov/ui/page/HomePage.kt b/Pink/app/src/main/java/com/pinkbear/pinkov/ui/page/HomePage.kt
index 26c3db1..82c2116 100644
--- a/Pink/app/src/main/java/com/pinkbear/pinkov/ui/page/HomePage.kt
+++ b/Pink/app/src/main/java/com/pinkbear/pinkov/ui/page/HomePage.kt
@@ -118,10 +118,13 @@ fun HomePage(
brush = Brush.verticalGradient(
colors = listOf(
Color.Transparent,
- Color.Black.copy(alpha = 0.03f),
- Color.Black.copy(alpha = 0.08f),
Color.Black.copy(alpha = 0.14f),
- )
+
+ Color.Black.copy(alpha = 0.08f),
+
+ Color.Black.copy(alpha = 0.03f),
+
+ )
)
)
)
@@ -133,7 +136,7 @@ fun HomePage(
modifier = Modifier
.fillMaxWidth()
.fillMaxHeight()
- .background(MaterialTheme.colorScheme.surfaceVariant),
+ .background(MaterialTheme.colorScheme.surface),
contentAlignment = Alignment.Center
) {
Text(
@@ -147,7 +150,7 @@ fun HomePage(
modifier = Modifier
.fillMaxWidth()
.fillMaxHeight()
- .background(MaterialTheme.colorScheme.surfaceVariant)
+ .background(MaterialTheme.colorScheme.surface)
) {
item {
Spacer(modifier = Modifier.height(12.dp))
@@ -199,7 +202,7 @@ private fun RecordHeaderRow() {
Row(
modifier = Modifier
.fillMaxWidth()
- .background(MaterialTheme.colorScheme.surfaceVariant)
+ .background(MaterialTheme.colorScheme.surface)
.padding(vertical = 8.dp, horizontal = 16.dp),
verticalAlignment = Alignment.CenterVertically
) {
@@ -264,7 +267,7 @@ private fun RecordRow(
"阴性" -> Color(0xFF4CAF50)
"阳性" -> Color(0xFFFF9800)
"强阳" -> Color(0xFFF44336)
- else -> Color.White
+ else -> MaterialTheme.colorScheme.surface
}
Card(
diff --git a/Pink/app/src/main/java/com/pinkbear/pinkov/ui/page/MinePage.kt b/Pink/app/src/main/java/com/pinkbear/pinkov/ui/page/MinePage.kt
index 5235a3e..09f4de7 100644
--- a/Pink/app/src/main/java/com/pinkbear/pinkov/ui/page/MinePage.kt
+++ b/Pink/app/src/main/java/com/pinkbear/pinkov/ui/page/MinePage.kt
@@ -4,6 +4,7 @@ import androidx.compose.foundation.background
import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.*
import androidx.compose.foundation.shape.CircleShape
+import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.automirrored.filled.KeyboardArrowRight
import androidx.compose.material.icons.filled.Favorite
@@ -82,65 +83,75 @@ fun MinePage(modifier: Modifier = Modifier) {
}
}
- HorizontalDivider(
- thickness = 1.dp,
- color = MaterialTheme.colorScheme.outlineVariant
- )
+// HorizontalDivider(
+// thickness = 1.dp,
+// color = MaterialTheme.colorScheme.outlineVariant
+// )
- // ---- Bottom ~80%: Menu items ----
+ // ---- Menu items ----
Column(
modifier = Modifier
.fillMaxWidth()
.fillMaxHeight()
+ .padding(top = 16.dp)
) {
- MenuItemRow(
- icon = Icons.Default.Info,
- title = "关于我们",
- onClick = { /* TODO: navigate to about page */ }
- )
- HorizontalDivider(
- thickness = 0.5.dp,
- color = MaterialTheme.colorScheme.outlineVariant
- )
+ // Group 1: 关于我们, 版本更新, 经期设置
+ Card(
+ modifier = Modifier
+ .fillMaxWidth()
+ .padding(horizontal = 16.dp),
+ elevation = CardDefaults.cardElevation(defaultElevation = 4.dp),
+ shape = RoundedCornerShape(12.dp),
+ colors = CardDefaults.cardColors(containerColor = MaterialTheme.colorScheme.surface)
+ ) {
+ Column {
+ MenuItemRow(
+ icon = Icons.Default.Info,
+ title = "关于我们",
+ onClick = { /* TODO: navigate to about page */ }
+ )
+ MenuItemRow(
+ icon = Icons.Default.Refresh,
+ title = "版本更新",
+ onClick = { /* TODO: check for updates */ }
+ )
+ MenuItemRow(
+ icon = Icons.Default.Favorite,
+ title = "经期设置",
+ onClick = { showPeriodSettings = true }
+ )
+ }
+ }
- MenuItemRow(
- icon = Icons.Default.Refresh,
- title = "版本更新",
- onClick = { /* TODO: check for updates */ }
- )
- HorizontalDivider(
- thickness = 0.5.dp,
- color = MaterialTheme.colorScheme.outlineVariant
- )
+ Spacer(modifier = Modifier.height(10.dp))
- // ---- 经期设置 (above 设置) ----
- MenuItemRow(
- icon = Icons.Default.Favorite,
- title = "经期设置",
- onClick = { showPeriodSettings = true }
- )
- HorizontalDivider(
- thickness = 0.5.dp,
- color = MaterialTheme.colorScheme.outlineVariant
- )
-
- MenuItemRow(
- icon = Icons.Default.Settings,
- title = "设置",
- onClick = { /* TODO: navigate to settings page */ }
- )
+ // Group 2: 设置
+ Card(
+ modifier = Modifier
+ .fillMaxWidth()
+ .padding(horizontal = 16.dp),
+ elevation = CardDefaults.cardElevation(defaultElevation = 4.dp),
+ shape = RoundedCornerShape(12.dp),
+ colors = CardDefaults.cardColors(containerColor = MaterialTheme.colorScheme.surface)
+ ) {
+ MenuItemRow(
+ icon = Icons.Default.Settings,
+ title = "设置",
+ onClick = { /* TODO: navigate to settings page */ }
+ )
+ }
// Push version text to bottom
Spacer(modifier = Modifier.weight(1f))
- Text(
- text = "v1.0.0",
- color = MaterialTheme.colorScheme.onSurfaceVariant,
- fontSize = 12.sp,
- modifier = Modifier
- .align(Alignment.CenterHorizontally)
- .padding(bottom = 16.dp)
- )
+// Text(
+// text = "v1.0.0",
+// color = MaterialTheme.colorScheme.onSurfaceVariant,
+// fontSize = 12.sp,
+// modifier = Modifier
+// .align(Alignment.CenterHorizontally)
+// .padding(bottom = 16.dp)
+// )
}
}
}
@@ -178,7 +189,7 @@ private fun MenuItemRow(
imageVector = icon,
contentDescription = title,
modifier = Modifier.size(24.dp),
- tint = MaterialTheme.colorScheme.onSurfaceVariant
+ tint = MaterialTheme.colorScheme.primary
)
Spacer(modifier = Modifier.width(16.dp))
diff --git a/Pink/app/src/main/java/com/pinkbear/pinkov/ui/page/RecordsPage.kt b/Pink/app/src/main/java/com/pinkbear/pinkov/ui/page/RecordsPage.kt
index d6b329d..1875c37 100644
--- a/Pink/app/src/main/java/com/pinkbear/pinkov/ui/page/RecordsPage.kt
+++ b/Pink/app/src/main/java/com/pinkbear/pinkov/ui/page/RecordsPage.kt
@@ -11,7 +11,9 @@ import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
import androidx.compose.foundation.layout.width
+import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.shape.RoundedCornerShape
+import androidx.compose.foundation.verticalScroll
import androidx.compose.material3.HorizontalDivider
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Scaffold
@@ -45,6 +47,7 @@ import java.time.LocalDate
@Composable
fun RecordsPage(
modifier: Modifier = Modifier,
+ onScanClick: () -> Unit = {},
recordsViewModel: RecordsViewModel = viewModel(),
) {
val calendarState = rememberSelectableCalendarState(
@@ -77,8 +80,9 @@ fun RecordsPage(
Scaffold(modifier = modifier) { innerPadding ->
Column(
modifier = Modifier
- .fillMaxSize()
+ .fillMaxWidth()
.padding(innerPadding)
+ .verticalScroll(rememberScrollState())
) {
// Calendar section
SelectableCalendar(
@@ -114,6 +118,43 @@ fun RecordsPage(
onPeriodStartChanged = { date, isStart ->
recordsViewModel.setPeriodStart(date, isStart)
},
+ onScanClick = onScanClick,
+ onTemperatureSave = { date, temp, time ->
+ recordsViewModel.updateTemperature(date, temp, time)
+ },
+ onLoveSave = { date, method, time ->
+ recordsViewModel.updateSexMethod(date, method, time)
+ },
+ onDischargeSave = { date, type ->
+ recordsViewModel.updateDischarge(date, type)
+ },
+ onFollicleSave = { date, leftA, leftB, rightA, rightB ->
+ recordsViewModel.updateFollicle(date, leftA, leftB, rightA, rightB)
+ },
+ onSymptomSave = { date, symptoms ->
+ recordsViewModel.updateSymptoms(date, symptoms)
+ },
+ onMoodSave = { date, mood ->
+ recordsViewModel.updateMood(date, mood)
+ },
+ onSupplementSave = { date, supplements ->
+ recordsViewModel.updateSupplements(date, supplements)
+ },
+ onWeightSave = { date, weight, time ->
+ recordsViewModel.updateWeight(date, weight, time)
+ },
+ onDiarySave = { date, note ->
+ recordsViewModel.updateDiary(date, note)
+ },
+ onHabitSave = { date, habits ->
+ recordsViewModel.updateHabits(date, habits)
+ },
+ onStoolSave = { date, type ->
+ recordsViewModel.updateStool(date, type)
+ },
+ onPlanSave = { date, plan ->
+ recordsViewModel.updatePlan(date, plan)
+ },
)
}
}
diff --git a/Pink/app/src/main/java/com/pinkbear/pinkov/ui/page/RecordsViewModel.kt b/Pink/app/src/main/java/com/pinkbear/pinkov/ui/page/RecordsViewModel.kt
index 152f2c8..a6d3b5b 100644
--- a/Pink/app/src/main/java/com/pinkbear/pinkov/ui/page/RecordsViewModel.kt
+++ b/Pink/app/src/main/java/com/pinkbear/pinkov/ui/page/RecordsViewModel.kt
@@ -64,6 +64,134 @@ class RecordsViewModel(application: Application) : AndroidViewModel(application)
}
}
+ // ---- Check-in update methods ----
+
+ /** Update basal body temperature for a date. */
+ fun updateTemperature(date: LocalDate, temp: Float, time: Long) {
+ viewModelScope.launch(Dispatchers.IO) {
+ val existing = recordDao.getRecordOnce(date.toEpochDay())
+ val record = existing?.copy(temperature = temp, temperatureTime = time)
+ ?: DailyRecord(date = date.toEpochDay(), temperature = temp, temperatureTime = time)
+ recordDao.upsert(record)
+ }
+ }
+
+ /** Update sex method and time for a date. */
+ fun updateSexMethod(date: LocalDate, method: String, time: Long) {
+ viewModelScope.launch(Dispatchers.IO) {
+ val existing = recordDao.getRecordOnce(date.toEpochDay())
+ val record = existing?.copy(hadSex = true, sexMethod = method, sexTime = time)
+ ?: DailyRecord(date = date.toEpochDay(), hadSex = true, sexMethod = method, sexTime = time)
+ recordDao.upsert(record)
+ }
+ }
+
+ /** Update discharge type for a date. */
+ fun updateDischarge(date: LocalDate, type: String) {
+ viewModelScope.launch(Dispatchers.IO) {
+ val existing = recordDao.getRecordOnce(date.toEpochDay())
+ val record = existing?.copy(discharge = type)
+ ?: DailyRecord(date = date.toEpochDay(), discharge = type)
+ recordDao.upsert(record)
+ }
+ }
+
+ /** Update follicle monitoring for a date (left/right ovary, width×height in mm). */
+ fun updateFollicle(date: LocalDate, leftA: Int, leftB: Int, rightA: Int, rightB: Int) {
+ viewModelScope.launch(Dispatchers.IO) {
+ val existing = recordDao.getRecordOnce(date.toEpochDay())
+ val record = existing?.copy(
+ follicleLeftA = leftA, follicleLeftB = leftB,
+ follicleRightA = rightA, follicleRightB = rightB,
+ ) ?: DailyRecord(
+ date = date.toEpochDay(),
+ follicleLeftA = leftA, follicleLeftB = leftB,
+ follicleRightA = rightA, follicleRightB = rightB,
+ )
+ recordDao.upsert(record)
+ }
+ }
+
+ /** Update symptoms for a date (comma-separated). */
+ fun updateSymptoms(date: LocalDate, symptoms: String) {
+ viewModelScope.launch(Dispatchers.IO) {
+ val existing = recordDao.getRecordOnce(date.toEpochDay())
+ val record = existing?.copy(symptoms = symptoms)
+ ?: DailyRecord(date = date.toEpochDay(), symptoms = symptoms)
+ recordDao.upsert(record)
+ }
+ }
+
+ /** Update mood for a date. */
+ fun updateMood(date: LocalDate, mood: String) {
+ viewModelScope.launch(Dispatchers.IO) {
+ val existing = recordDao.getRecordOnce(date.toEpochDay())
+ val record = existing?.copy(mood = mood)
+ ?: DailyRecord(date = date.toEpochDay(), mood = mood)
+ recordDao.upsert(record)
+ }
+ }
+
+ /** Update supplements for a date (comma-separated). */
+ fun updateSupplements(date: LocalDate, supplements: String) {
+ viewModelScope.launch(Dispatchers.IO) {
+ val existing = recordDao.getRecordOnce(date.toEpochDay())
+ val record = existing?.copy(supplements = supplements)
+ ?: DailyRecord(date = date.toEpochDay(), supplements = supplements)
+ recordDao.upsert(record)
+ }
+ }
+
+ /** Update weight for a date. */
+ fun updateWeight(date: LocalDate, weight: Float, time: Long) {
+ viewModelScope.launch(Dispatchers.IO) {
+ val existing = recordDao.getRecordOnce(date.toEpochDay())
+ val record = existing?.copy(weight = weight, weightTime = time)
+ ?: DailyRecord(date = date.toEpochDay(), weight = weight, weightTime = time)
+ recordDao.upsert(record)
+ }
+ }
+
+ /** Update diary note for a date. */
+ fun updateDiary(date: LocalDate, note: String) {
+ viewModelScope.launch(Dispatchers.IO) {
+ val existing = recordDao.getRecordOnce(date.toEpochDay())
+ val record = existing?.copy(note = note)
+ ?: DailyRecord(date = date.toEpochDay(), note = note)
+ recordDao.upsert(record)
+ }
+ }
+
+ /** Update habits for a date (comma-separated). */
+ fun updateHabits(date: LocalDate, habits: String) {
+ viewModelScope.launch(Dispatchers.IO) {
+ val existing = recordDao.getRecordOnce(date.toEpochDay())
+ val record = existing?.copy(habits = habits)
+ ?: DailyRecord(date = date.toEpochDay(), habits = habits)
+ recordDao.upsert(record)
+ }
+ }
+
+ /** Update stool type for a date. */
+ fun updateStool(date: LocalDate, type: String) {
+ viewModelScope.launch(Dispatchers.IO) {
+ val existing = recordDao.getRecordOnce(date.toEpochDay())
+ val record = existing?.copy(stoolType = type)
+ ?: DailyRecord(date = date.toEpochDay(), stoolType = type)
+ recordDao.upsert(record)
+ }
+ }
+
+ /** Update plan text for a date. */
+ fun updatePlan(date: LocalDate, plan: String) {
+ viewModelScope.launch(Dispatchers.IO) {
+ val existing = recordDao.getRecordOnce(date.toEpochDay())
+ val record = existing?.copy(plan = plan)
+ ?: DailyRecord(date = date.toEpochDay(), plan = plan)
+ recordDao.upsert(record)
+ }
+ }
+
/** Remove all period-start flags within the same month as [date], except [date] itself. */
private suspend fun clearPeriodStartsInMonth(date: LocalDate) {
val monthStart = date.withDayOfMonth(1)
diff --git a/Pink/app/src/main/res/drawable/ic_launcher_background.xml b/Pink/app/src/main/res/drawable/ic_launcher_background.xml
index 07d5da9..87258f4 100644
--- a/Pink/app/src/main/res/drawable/ic_launcher_background.xml
+++ b/Pink/app/src/main/res/drawable/ic_launcher_background.xml
@@ -1,170 +1,25 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
diff --git a/Pink/app/src/main/res/drawable/ic_launcher_foreground.xml b/Pink/app/src/main/res/drawable/ic_launcher_foreground.xml
index 2b068d1..8447401 100644
--- a/Pink/app/src/main/res/drawable/ic_launcher_foreground.xml
+++ b/Pink/app/src/main/res/drawable/ic_launcher_foreground.xml
@@ -1,30 +1,80 @@
+
-
-
-
-
-
-
-
-
+
+
-
\ No newline at end of file
+ android:pathData="M24,32 A10,10 0 1,1 44,32 A10,10 0 1,1 24,32 Z" />
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Pink/app/src/main/res/drawable/icon_feeling_10_zixin.webp b/Pink/app/src/main/res/drawable/icon_feeling_10_zixin.webp
new file mode 100644
index 0000000..baa11ea
Binary files /dev/null and b/Pink/app/src/main/res/drawable/icon_feeling_10_zixin.webp differ
diff --git a/Pink/app/src/main/res/drawable/icon_feeling_11_fangsong.webp b/Pink/app/src/main/res/drawable/icon_feeling_11_fangsong.webp
new file mode 100644
index 0000000..948e916
Binary files /dev/null and b/Pink/app/src/main/res/drawable/icon_feeling_11_fangsong.webp differ
diff --git a/Pink/app/src/main/res/drawable/icon_feeling_12_pingjing.webp b/Pink/app/src/main/res/drawable/icon_feeling_12_pingjing.webp
new file mode 100644
index 0000000..a1bc6b4
Binary files /dev/null and b/Pink/app/src/main/res/drawable/icon_feeling_12_pingjing.webp differ
diff --git a/Pink/app/src/main/res/drawable/icon_feeling_13_fanzao.webp b/Pink/app/src/main/res/drawable/icon_feeling_13_fanzao.webp
new file mode 100644
index 0000000..d311bda
Binary files /dev/null and b/Pink/app/src/main/res/drawable/icon_feeling_13_fanzao.webp differ
diff --git a/Pink/app/src/main/res/drawable/icon_feeling_14_yinu.webp b/Pink/app/src/main/res/drawable/icon_feeling_14_yinu.webp
new file mode 100644
index 0000000..fd36603
Binary files /dev/null and b/Pink/app/src/main/res/drawable/icon_feeling_14_yinu.webp differ
diff --git a/Pink/app/src/main/res/drawable/icon_feeling_15_shengqi.webp b/Pink/app/src/main/res/drawable/icon_feeling_15_shengqi.webp
new file mode 100644
index 0000000..bd0ca27
Binary files /dev/null and b/Pink/app/src/main/res/drawable/icon_feeling_15_shengqi.webp differ
diff --git a/Pink/app/src/main/res/drawable/icon_feeling_16_jiaolv.webp b/Pink/app/src/main/res/drawable/icon_feeling_16_jiaolv.webp
new file mode 100644
index 0000000..e2a5773
Binary files /dev/null and b/Pink/app/src/main/res/drawable/icon_feeling_16_jiaolv.webp differ
diff --git a/Pink/app/src/main/res/drawable/icon_feeling_17_neihao.webp b/Pink/app/src/main/res/drawable/icon_feeling_17_neihao.webp
new file mode 100644
index 0000000..7fc7f6d
Binary files /dev/null and b/Pink/app/src/main/res/drawable/icon_feeling_17_neihao.webp differ
diff --git a/Pink/app/src/main/res/drawable/icon_feeling_18_yali.webp b/Pink/app/src/main/res/drawable/icon_feeling_18_yali.webp
new file mode 100644
index 0000000..365ce97
Binary files /dev/null and b/Pink/app/src/main/res/drawable/icon_feeling_18_yali.webp differ
diff --git a/Pink/app/src/main/res/drawable/icon_feeling_19_haipa.webp b/Pink/app/src/main/res/drawable/icon_feeling_19_haipa.webp
new file mode 100644
index 0000000..3f8d486
Binary files /dev/null and b/Pink/app/src/main/res/drawable/icon_feeling_19_haipa.webp differ
diff --git a/Pink/app/src/main/res/drawable/icon_feeling_1_chaokaixin.webp b/Pink/app/src/main/res/drawable/icon_feeling_1_chaokaixin.webp
new file mode 100644
index 0000000..3b84499
Binary files /dev/null and b/Pink/app/src/main/res/drawable/icon_feeling_1_chaokaixin.webp differ
diff --git a/Pink/app/src/main/res/drawable/icon_feeling_20_lengmo.webp b/Pink/app/src/main/res/drawable/icon_feeling_20_lengmo.webp
new file mode 100644
index 0000000..d0540e7
Binary files /dev/null and b/Pink/app/src/main/res/drawable/icon_feeling_20_lengmo.webp differ
diff --git a/Pink/app/src/main/res/drawable/icon_feeling_2_tingkaixin.webp b/Pink/app/src/main/res/drawable/icon_feeling_2_tingkaixin.webp
new file mode 100644
index 0000000..8cd077c
Binary files /dev/null and b/Pink/app/src/main/res/drawable/icon_feeling_2_tingkaixin.webp differ
diff --git a/Pink/app/src/main/res/drawable/icon_feeling_3_yiban.webp b/Pink/app/src/main/res/drawable/icon_feeling_3_yiban.webp
new file mode 100644
index 0000000..9669c26
Binary files /dev/null and b/Pink/app/src/main/res/drawable/icon_feeling_3_yiban.webp differ
diff --git a/Pink/app/src/main/res/drawable/icon_feeling_4_bukaixin.webp b/Pink/app/src/main/res/drawable/icon_feeling_4_bukaixin.webp
new file mode 100644
index 0000000..cc2ba4e
Binary files /dev/null and b/Pink/app/src/main/res/drawable/icon_feeling_4_bukaixin.webp differ
diff --git a/Pink/app/src/main/res/drawable/icon_feeling_5_haoshangxin.webp b/Pink/app/src/main/res/drawable/icon_feeling_5_haoshangxin.webp
new file mode 100644
index 0000000..40dfd3e
Binary files /dev/null and b/Pink/app/src/main/res/drawable/icon_feeling_5_haoshangxin.webp differ
diff --git a/Pink/app/src/main/res/drawable/icon_feeling_6_xingfen.webp b/Pink/app/src/main/res/drawable/icon_feeling_6_xingfen.webp
new file mode 100644
index 0000000..7797a4e
Binary files /dev/null and b/Pink/app/src/main/res/drawable/icon_feeling_6_xingfen.webp differ
diff --git a/Pink/app/src/main/res/drawable/icon_feeling_7_jingxi.webp b/Pink/app/src/main/res/drawable/icon_feeling_7_jingxi.webp
new file mode 100644
index 0000000..8476119
Binary files /dev/null and b/Pink/app/src/main/res/drawable/icon_feeling_7_jingxi.webp differ
diff --git a/Pink/app/src/main/res/drawable/icon_feeling_8_manzu.webp b/Pink/app/src/main/res/drawable/icon_feeling_8_manzu.webp
new file mode 100644
index 0000000..30b41d4
Binary files /dev/null and b/Pink/app/src/main/res/drawable/icon_feeling_8_manzu.webp differ
diff --git a/Pink/app/src/main/res/drawable/icon_feeling_9_xindong.webp b/Pink/app/src/main/res/drawable/icon_feeling_9_xindong.webp
new file mode 100644
index 0000000..8f46109
Binary files /dev/null and b/Pink/app/src/main/res/drawable/icon_feeling_9_xindong.webp differ
diff --git a/Pink/app/src/main/res/drawable/icon_leukorrhea_choose.webp b/Pink/app/src/main/res/drawable/icon_leukorrhea_choose.webp
new file mode 100644
index 0000000..2aaffd2
Binary files /dev/null and b/Pink/app/src/main/res/drawable/icon_leukorrhea_choose.webp differ
diff --git a/Pink/app/src/main/res/drawable/icon_leukorrhea_danqing.webp b/Pink/app/src/main/res/drawable/icon_leukorrhea_danqing.webp
new file mode 100644
index 0000000..6bbb44f
Binary files /dev/null and b/Pink/app/src/main/res/drawable/icon_leukorrhea_danqing.webp differ
diff --git a/Pink/app/src/main/res/drawable/icon_leukorrhea_ganzao.webp b/Pink/app/src/main/res/drawable/icon_leukorrhea_ganzao.webp
new file mode 100644
index 0000000..9a1d768
Binary files /dev/null and b/Pink/app/src/main/res/drawable/icon_leukorrhea_ganzao.webp differ
diff --git a/Pink/app/src/main/res/drawable/icon_leukorrhea_nianchou.webp b/Pink/app/src/main/res/drawable/icon_leukorrhea_nianchou.webp
new file mode 100644
index 0000000..8fe3dbd
Binary files /dev/null and b/Pink/app/src/main/res/drawable/icon_leukorrhea_nianchou.webp differ
diff --git a/Pink/app/src/main/res/drawable/icon_leukorrhea_shuizhuang.webp b/Pink/app/src/main/res/drawable/icon_leukorrhea_shuizhuang.webp
new file mode 100644
index 0000000..de7a8fe
Binary files /dev/null and b/Pink/app/src/main/res/drawable/icon_leukorrhea_shuizhuang.webp differ
diff --git a/Pink/app/src/main/res/drawable/icon_leukorrhea_xichou.webp b/Pink/app/src/main/res/drawable/icon_leukorrhea_xichou.webp
new file mode 100644
index 0000000..4b83fc1
Binary files /dev/null and b/Pink/app/src/main/res/drawable/icon_leukorrhea_xichou.webp differ
diff --git a/Pink/app/src/main/res/drawable/icon_love_byt.webp b/Pink/app/src/main/res/drawable/icon_love_byt.webp
new file mode 100644
index 0000000..61ebb4f
Binary files /dev/null and b/Pink/app/src/main/res/drawable/icon_love_byt.webp differ
diff --git a/Pink/app/src/main/res/drawable/icon_love_cxby.webp b/Pink/app/src/main/res/drawable/icon_love_cxby.webp
new file mode 100644
index 0000000..5fe29db
Binary files /dev/null and b/Pink/app/src/main/res/drawable/icon_love_cxby.webp differ
diff --git a/Pink/app/src/main/res/drawable/icon_love_dxby.webp b/Pink/app/src/main/res/drawable/icon_love_dxby.webp
new file mode 100644
index 0000000..979b65c
Binary files /dev/null and b/Pink/app/src/main/res/drawable/icon_love_dxby.webp differ
diff --git a/Pink/app/src/main/res/drawable/icon_love_jjbyy.webp b/Pink/app/src/main/res/drawable/icon_love_jjbyy.webp
new file mode 100644
index 0000000..08b4ff9
Binary files /dev/null and b/Pink/app/src/main/res/drawable/icon_love_jjbyy.webp differ
diff --git a/Pink/app/src/main/res/drawable/icon_love_jyh.webp b/Pink/app/src/main/res/drawable/icon_love_jyh.webp
new file mode 100644
index 0000000..d320137
Binary files /dev/null and b/Pink/app/src/main/res/drawable/icon_love_jyh.webp differ
diff --git a/Pink/app/src/main/res/drawable/icon_love_qtyy.webp b/Pink/app/src/main/res/drawable/icon_love_qtyy.webp
new file mode 100644
index 0000000..8e492d3
Binary files /dev/null and b/Pink/app/src/main/res/drawable/icon_love_qtyy.webp differ
diff --git a/Pink/app/src/main/res/drawable/icon_love_twpj.webp b/Pink/app/src/main/res/drawable/icon_love_twpj.webp
new file mode 100644
index 0000000..36be421
Binary files /dev/null and b/Pink/app/src/main/res/drawable/icon_love_twpj.webp differ
diff --git a/Pink/app/src/main/res/drawable/icon_love_wcs.webp b/Pink/app/src/main/res/drawable/icon_love_wcs.webp
new file mode 100644
index 0000000..5aa6271
Binary files /dev/null and b/Pink/app/src/main/res/drawable/icon_love_wcs.webp differ
diff --git a/Pink/app/src/main/res/drawable/icon_love_wsj.webp b/Pink/app/src/main/res/drawable/icon_love_wsj.webp
new file mode 100644
index 0000000..d25359c
Binary files /dev/null and b/Pink/app/src/main/res/drawable/icon_love_wsj.webp differ
diff --git a/Pink/app/src/main/res/drawable/icon_love_ziwei.webp b/Pink/app/src/main/res/drawable/icon_love_ziwei.webp
new file mode 100644
index 0000000..37bff22
Binary files /dev/null and b/Pink/app/src/main/res/drawable/icon_love_ziwei.webp differ
diff --git a/Pink/app/src/main/res/drawable/icon_multiply.webp b/Pink/app/src/main/res/drawable/icon_multiply.webp
new file mode 100644
index 0000000..1a2a868
Binary files /dev/null and b/Pink/app/src/main/res/drawable/icon_multiply.webp differ
diff --git a/Pink/app/src/main/res/drawable/icon_zhengzhuang_000_toutong.webp b/Pink/app/src/main/res/drawable/icon_zhengzhuang_000_toutong.webp
new file mode 100644
index 0000000..c66d27d
Binary files /dev/null and b/Pink/app/src/main/res/drawable/icon_zhengzhuang_000_toutong.webp differ
diff --git a/Pink/app/src/main/res/drawable/icon_zhengzhuang_001_shentisuantong.webp b/Pink/app/src/main/res/drawable/icon_zhengzhuang_001_shentisuantong.webp
new file mode 100644
index 0000000..0b0337f
Binary files /dev/null and b/Pink/app/src/main/res/drawable/icon_zhengzhuang_001_shentisuantong.webp differ
diff --git a/Pink/app/src/main/res/drawable/icon_zhengzhuang_002_fuxie.webp b/Pink/app/src/main/res/drawable/icon_zhengzhuang_002_fuxie.webp
new file mode 100644
index 0000000..cf65873
Binary files /dev/null and b/Pink/app/src/main/res/drawable/icon_zhengzhuang_002_fuxie.webp differ
diff --git a/Pink/app/src/main/res/drawable/icon_zhengzhuang_003_xuanyun.webp b/Pink/app/src/main/res/drawable/icon_zhengzhuang_003_xuanyun.webp
new file mode 100644
index 0000000..e0ccdc9
Binary files /dev/null and b/Pink/app/src/main/res/drawable/icon_zhengzhuang_003_xuanyun.webp differ
diff --git a/Pink/app/src/main/res/drawable/icon_zhengzhuang_004_rufangzhangtong.webp b/Pink/app/src/main/res/drawable/icon_zhengzhuang_004_rufangzhangtong.webp
new file mode 100644
index 0000000..6d6b186
Binary files /dev/null and b/Pink/app/src/main/res/drawable/icon_zhengzhuang_004_rufangzhangtong.webp differ
diff --git a/Pink/app/src/main/res/drawable/icon_zhengzhuang_005_fenci.webp b/Pink/app/src/main/res/drawable/icon_zhengzhuang_005_fenci.webp
new file mode 100644
index 0000000..6e94e1c
Binary files /dev/null and b/Pink/app/src/main/res/drawable/icon_zhengzhuang_005_fenci.webp differ
diff --git a/Pink/app/src/main/res/drawable/icon_zhengzhuang_006_shiyubuzhen.webp b/Pink/app/src/main/res/drawable/icon_zhengzhuang_006_shiyubuzhen.webp
new file mode 100644
index 0000000..c96e966
Binary files /dev/null and b/Pink/app/src/main/res/drawable/icon_zhengzhuang_006_shiyubuzhen.webp differ
diff --git a/Pink/app/src/main/res/drawable/icon_zhengzhuang_007_shimian.webp b/Pink/app/src/main/res/drawable/icon_zhengzhuang_007_shimian.webp
new file mode 100644
index 0000000..7a80b0e
Binary files /dev/null and b/Pink/app/src/main/res/drawable/icon_zhengzhuang_007_shimian.webp differ
diff --git a/Pink/app/src/main/res/drawable/icon_zhengzhuang_010_futong.webp b/Pink/app/src/main/res/drawable/icon_zhengzhuang_010_futong.webp
new file mode 100644
index 0000000..782b41a
Binary files /dev/null and b/Pink/app/src/main/res/drawable/icon_zhengzhuang_010_futong.webp differ
diff --git a/Pink/app/src/main/res/drawable/icon_zhengzhuang_011_yaosuan.webp b/Pink/app/src/main/res/drawable/icon_zhengzhuang_011_yaosuan.webp
new file mode 100644
index 0000000..b92fcdb
Binary files /dev/null and b/Pink/app/src/main/res/drawable/icon_zhengzhuang_011_yaosuan.webp differ
diff --git a/Pink/app/src/main/res/drawable/icon_zhengzhuang_012_xiaofuzhuizhang.webp b/Pink/app/src/main/res/drawable/icon_zhengzhuang_012_xiaofuzhuizhang.webp
new file mode 100644
index 0000000..febfb0b
Binary files /dev/null and b/Pink/app/src/main/res/drawable/icon_zhengzhuang_012_xiaofuzhuizhang.webp differ
diff --git a/Pink/app/src/main/res/drawable/icon_zhengzhuang_014_bianmi.webp b/Pink/app/src/main/res/drawable/icon_zhengzhuang_014_bianmi.webp
new file mode 100644
index 0000000..51ac9ac
Binary files /dev/null and b/Pink/app/src/main/res/drawable/icon_zhengzhuang_014_bianmi.webp differ
diff --git a/Pink/app/src/main/res/drawable/icon_zhengzhuang_022_pibei.webp b/Pink/app/src/main/res/drawable/icon_zhengzhuang_022_pibei.webp
new file mode 100644
index 0000000..fc7b3f5
Binary files /dev/null and b/Pink/app/src/main/res/drawable/icon_zhengzhuang_022_pibei.webp differ
diff --git a/Pink/app/src/main/res/drawable/icon_zhengzhuang_025_baidaizengduo.webp b/Pink/app/src/main/res/drawable/icon_zhengzhuang_025_baidaizengduo.webp
new file mode 100644
index 0000000..b6a21ff
Binary files /dev/null and b/Pink/app/src/main/res/drawable/icon_zhengzhuang_025_baidaizengduo.webp differ
diff --git a/Pink/app/src/main/res/drawable/icon_zhengzhuang_032_pifuganzao.webp b/Pink/app/src/main/res/drawable/icon_zhengzhuang_032_pifuganzao.webp
new file mode 100644
index 0000000..c49a587
Binary files /dev/null and b/Pink/app/src/main/res/drawable/icon_zhengzhuang_032_pifuganzao.webp differ
diff --git a/Pink/app/src/main/res/drawable/icon_zhengzhuang_033_chuxue.webp b/Pink/app/src/main/res/drawable/icon_zhengzhuang_033_chuxue.webp
new file mode 100644
index 0000000..03147cd
Binary files /dev/null and b/Pink/app/src/main/res/drawable/icon_zhengzhuang_033_chuxue.webp differ
diff --git a/Pink/app/src/main/res/drawable/icon_zhengzhuang_096_hesefenmiwu.webp b/Pink/app/src/main/res/drawable/icon_zhengzhuang_096_hesefenmiwu.webp
new file mode 100644
index 0000000..96f104e
Binary files /dev/null and b/Pink/app/src/main/res/drawable/icon_zhengzhuang_096_hesefenmiwu.webp differ
diff --git a/Pink/app/src/main/res/drawable/icon_zhengzhuang_117_shiyuwangsheng.webp b/Pink/app/src/main/res/drawable/icon_zhengzhuang_117_shiyuwangsheng.webp
new file mode 100644
index 0000000..d00b40a
Binary files /dev/null and b/Pink/app/src/main/res/drawable/icon_zhengzhuang_117_shiyuwangsheng.webp differ
diff --git a/Pink/app/src/main/res/drawable/icon_zhengzhuang_127_youxuekuai.webp b/Pink/app/src/main/res/drawable/icon_zhengzhuang_127_youxuekuai.webp
new file mode 100644
index 0000000..68b0082
Binary files /dev/null and b/Pink/app/src/main/res/drawable/icon_zhengzhuang_127_youxuekuai.webp differ
diff --git a/Pink/app/src/main/res/drawable/icon_zhengzhuang_192_meiyou.webp b/Pink/app/src/main/res/drawable/icon_zhengzhuang_192_meiyou.webp
new file mode 100644
index 0000000..89e4bfd
Binary files /dev/null and b/Pink/app/src/main/res/drawable/icon_zhengzhuang_192_meiyou.webp differ
diff --git a/Pink/app/src/main/res/drawable/record_btn_mood1.webp b/Pink/app/src/main/res/drawable/record_btn_mood1.webp
new file mode 100644
index 0000000..95b0233
Binary files /dev/null and b/Pink/app/src/main/res/drawable/record_btn_mood1.webp differ
diff --git a/Pink/app/src/main/res/drawable/record_btn_mood1_dy.webp b/Pink/app/src/main/res/drawable/record_btn_mood1_dy.webp
new file mode 100644
index 0000000..0c4110b
Binary files /dev/null and b/Pink/app/src/main/res/drawable/record_btn_mood1_dy.webp differ
diff --git a/Pink/app/src/main/res/drawable/record_btn_mood1_hover.webp b/Pink/app/src/main/res/drawable/record_btn_mood1_hover.webp
new file mode 100644
index 0000000..6b135d6
Binary files /dev/null and b/Pink/app/src/main/res/drawable/record_btn_mood1_hover.webp differ
diff --git a/Pink/app/src/main/res/drawable/record_btn_mood2.webp b/Pink/app/src/main/res/drawable/record_btn_mood2.webp
new file mode 100644
index 0000000..86fd75c
Binary files /dev/null and b/Pink/app/src/main/res/drawable/record_btn_mood2.webp differ
diff --git a/Pink/app/src/main/res/drawable/record_btn_mood2_dy.webp b/Pink/app/src/main/res/drawable/record_btn_mood2_dy.webp
new file mode 100644
index 0000000..1416f5c
Binary files /dev/null and b/Pink/app/src/main/res/drawable/record_btn_mood2_dy.webp differ
diff --git a/Pink/app/src/main/res/drawable/record_btn_mood2_hover.webp b/Pink/app/src/main/res/drawable/record_btn_mood2_hover.webp
new file mode 100644
index 0000000..cd58a17
Binary files /dev/null and b/Pink/app/src/main/res/drawable/record_btn_mood2_hover.webp differ
diff --git a/Pink/app/src/main/res/drawable/record_btn_mood3.webp b/Pink/app/src/main/res/drawable/record_btn_mood3.webp
new file mode 100644
index 0000000..618b565
Binary files /dev/null and b/Pink/app/src/main/res/drawable/record_btn_mood3.webp differ
diff --git a/Pink/app/src/main/res/drawable/record_btn_mood3_dy.webp b/Pink/app/src/main/res/drawable/record_btn_mood3_dy.webp
new file mode 100644
index 0000000..d758348
Binary files /dev/null and b/Pink/app/src/main/res/drawable/record_btn_mood3_dy.webp differ
diff --git a/Pink/app/src/main/res/drawable/record_btn_mood3_hover.webp b/Pink/app/src/main/res/drawable/record_btn_mood3_hover.webp
new file mode 100644
index 0000000..4e24cc2
Binary files /dev/null and b/Pink/app/src/main/res/drawable/record_btn_mood3_hover.webp differ
diff --git a/Pink/app/src/main/res/drawable/record_btn_mood4.webp b/Pink/app/src/main/res/drawable/record_btn_mood4.webp
new file mode 100644
index 0000000..c63d88b
Binary files /dev/null and b/Pink/app/src/main/res/drawable/record_btn_mood4.webp differ
diff --git a/Pink/app/src/main/res/drawable/record_btn_mood4_dy.webp b/Pink/app/src/main/res/drawable/record_btn_mood4_dy.webp
new file mode 100644
index 0000000..140b500
Binary files /dev/null and b/Pink/app/src/main/res/drawable/record_btn_mood4_dy.webp differ
diff --git a/Pink/app/src/main/res/drawable/record_btn_mood4_hover.webp b/Pink/app/src/main/res/drawable/record_btn_mood4_hover.webp
new file mode 100644
index 0000000..d2a1d17
Binary files /dev/null and b/Pink/app/src/main/res/drawable/record_btn_mood4_hover.webp differ
diff --git a/Pink/app/src/main/res/drawable/record_btn_mood5.webp b/Pink/app/src/main/res/drawable/record_btn_mood5.webp
new file mode 100644
index 0000000..0f03e4a
Binary files /dev/null and b/Pink/app/src/main/res/drawable/record_btn_mood5.webp differ
diff --git a/Pink/app/src/main/res/drawable/record_btn_mood5_1.webp b/Pink/app/src/main/res/drawable/record_btn_mood5_1.webp
new file mode 100644
index 0000000..215e265
Binary files /dev/null and b/Pink/app/src/main/res/drawable/record_btn_mood5_1.webp differ
diff --git a/Pink/app/src/main/res/drawable/record_btn_mood5_dy.webp b/Pink/app/src/main/res/drawable/record_btn_mood5_dy.webp
new file mode 100644
index 0000000..ef216b3
Binary files /dev/null and b/Pink/app/src/main/res/drawable/record_btn_mood5_dy.webp differ
diff --git a/Pink/app/src/main/res/drawable/record_btn_mood5_hover.webp b/Pink/app/src/main/res/drawable/record_btn_mood5_hover.webp
new file mode 100644
index 0000000..6c830f0
Binary files /dev/null and b/Pink/app/src/main/res/drawable/record_btn_mood5_hover.webp differ
diff --git a/Pink/app/src/main/res/drawable/record_icon_aiai.webp b/Pink/app/src/main/res/drawable/record_icon_aiai.webp
new file mode 100644
index 0000000..27d7bf2
Binary files /dev/null and b/Pink/app/src/main/res/drawable/record_icon_aiai.webp differ
diff --git a/Pink/app/src/main/res/drawable/record_icon_arrow.webp b/Pink/app/src/main/res/drawable/record_icon_arrow.webp
new file mode 100644
index 0000000..9b71b86
Binary files /dev/null and b/Pink/app/src/main/res/drawable/record_icon_arrow.webp differ
diff --git a/Pink/app/src/main/res/drawable/record_icon_baby.webp b/Pink/app/src/main/res/drawable/record_icon_baby.webp
new file mode 100644
index 0000000..9fa91d8
Binary files /dev/null and b/Pink/app/src/main/res/drawable/record_icon_baby.webp differ
diff --git a/Pink/app/src/main/res/drawable/record_icon_babyill.webp b/Pink/app/src/main/res/drawable/record_icon_babyill.webp
new file mode 100644
index 0000000..afc4608
Binary files /dev/null and b/Pink/app/src/main/res/drawable/record_icon_babyill.webp differ
diff --git a/Pink/app/src/main/res/drawable/record_icon_babysleep.webp b/Pink/app/src/main/res/drawable/record_icon_babysleep.webp
new file mode 100644
index 0000000..03937c0
Binary files /dev/null and b/Pink/app/src/main/res/drawable/record_icon_babysleep.webp differ
diff --git a/Pink/app/src/main/res/drawable/record_icon_baidai.webp b/Pink/app/src/main/res/drawable/record_icon_baidai.webp
new file mode 100644
index 0000000..148df1e
Binary files /dev/null and b/Pink/app/src/main/res/drawable/record_icon_baidai.webp differ
diff --git a/Pink/app/src/main/res/drawable/record_icon_beiyun.webp b/Pink/app/src/main/res/drawable/record_icon_beiyun.webp
new file mode 100644
index 0000000..3a54f5e
Binary files /dev/null and b/Pink/app/src/main/res/drawable/record_icon_beiyun.webp differ
diff --git a/Pink/app/src/main/res/drawable/record_icon_bloodglucose.webp b/Pink/app/src/main/res/drawable/record_icon_bloodglucose.webp
new file mode 100644
index 0000000..0e7fef4
Binary files /dev/null and b/Pink/app/src/main/res/drawable/record_icon_bloodglucose.webp differ
diff --git a/Pink/app/src/main/res/drawable/record_icon_chanjian.webp b/Pink/app/src/main/res/drawable/record_icon_chanjian.webp
new file mode 100644
index 0000000..2b0b661
Binary files /dev/null and b/Pink/app/src/main/res/drawable/record_icon_chanjian.webp differ
diff --git a/Pink/app/src/main/res/drawable/record_icon_color.webp b/Pink/app/src/main/res/drawable/record_icon_color.webp
new file mode 100644
index 0000000..0833e37
Binary files /dev/null and b/Pink/app/src/main/res/drawable/record_icon_color.webp differ
diff --git a/Pink/app/src/main/res/drawable/record_icon_dadu.webp b/Pink/app/src/main/res/drawable/record_icon_dadu.webp
new file mode 100644
index 0000000..57a3966
Binary files /dev/null and b/Pink/app/src/main/res/drawable/record_icon_dadu.webp differ
diff --git a/Pink/app/src/main/res/drawable/record_icon_dui.webp b/Pink/app/src/main/res/drawable/record_icon_dui.webp
new file mode 100644
index 0000000..92998d5
Binary files /dev/null and b/Pink/app/src/main/res/drawable/record_icon_dui.webp differ
diff --git a/Pink/app/src/main/res/drawable/record_icon_habite.webp b/Pink/app/src/main/res/drawable/record_icon_habite.webp
new file mode 100644
index 0000000..621a7bb
Binary files /dev/null and b/Pink/app/src/main/res/drawable/record_icon_habite.webp differ
diff --git a/Pink/app/src/main/res/drawable/record_icon_help.webp b/Pink/app/src/main/res/drawable/record_icon_help.webp
new file mode 100644
index 0000000..adb2de3
Binary files /dev/null and b/Pink/app/src/main/res/drawable/record_icon_help.webp differ
diff --git a/Pink/app/src/main/res/drawable/record_icon_huaiyun.webp b/Pink/app/src/main/res/drawable/record_icon_huaiyun.webp
new file mode 100644
index 0000000..7ca8e60
Binary files /dev/null and b/Pink/app/src/main/res/drawable/record_icon_huaiyun.webp differ
diff --git a/Pink/app/src/main/res/drawable/record_icon_ill.webp b/Pink/app/src/main/res/drawable/record_icon_ill.webp
new file mode 100644
index 0000000..e5fdbae
Binary files /dev/null and b/Pink/app/src/main/res/drawable/record_icon_ill.webp differ
diff --git a/Pink/app/src/main/res/drawable/record_icon_lasttime.webp b/Pink/app/src/main/res/drawable/record_icon_lasttime.webp
new file mode 100644
index 0000000..97ef1e2
Binary files /dev/null and b/Pink/app/src/main/res/drawable/record_icon_lasttime.webp differ
diff --git a/Pink/app/src/main/res/drawable/record_icon_line_add.webp b/Pink/app/src/main/res/drawable/record_icon_line_add.webp
new file mode 100644
index 0000000..f6f1da6
Binary files /dev/null and b/Pink/app/src/main/res/drawable/record_icon_line_add.webp differ
diff --git a/Pink/app/src/main/res/drawable/record_icon_liuliang.webp b/Pink/app/src/main/res/drawable/record_icon_liuliang.webp
new file mode 100644
index 0000000..55ac43e
Binary files /dev/null and b/Pink/app/src/main/res/drawable/record_icon_liuliang.webp differ
diff --git a/Pink/app/src/main/res/drawable/record_icon_love.webp b/Pink/app/src/main/res/drawable/record_icon_love.webp
new file mode 100644
index 0000000..d41157f
Binary files /dev/null and b/Pink/app/src/main/res/drawable/record_icon_love.webp differ
diff --git a/Pink/app/src/main/res/drawable/record_icon_love_no.webp b/Pink/app/src/main/res/drawable/record_icon_love_no.webp
new file mode 100644
index 0000000..6b3d029
Binary files /dev/null and b/Pink/app/src/main/res/drawable/record_icon_love_no.webp differ
diff --git a/Pink/app/src/main/res/drawable/record_icon_measure.webp b/Pink/app/src/main/res/drawable/record_icon_measure.webp
new file mode 100644
index 0000000..3febe7f
Binary files /dev/null and b/Pink/app/src/main/res/drawable/record_icon_measure.webp differ
diff --git a/Pink/app/src/main/res/drawable/record_icon_pailuan.webp b/Pink/app/src/main/res/drawable/record_icon_pailuan.webp
new file mode 100644
index 0000000..ec89961
Binary files /dev/null and b/Pink/app/src/main/res/drawable/record_icon_pailuan.webp differ
diff --git a/Pink/app/src/main/res/drawable/record_icon_record.webp b/Pink/app/src/main/res/drawable/record_icon_record.webp
new file mode 100644
index 0000000..60deca3
Binary files /dev/null and b/Pink/app/src/main/res/drawable/record_icon_record.webp differ
diff --git a/Pink/app/src/main/res/drawable/record_icon_right_arrow.webp b/Pink/app/src/main/res/drawable/record_icon_right_arrow.webp
new file mode 100644
index 0000000..d225797
Binary files /dev/null and b/Pink/app/src/main/res/drawable/record_icon_right_arrow.webp differ
diff --git a/Pink/app/src/main/res/drawable/record_icon_riji.webp b/Pink/app/src/main/res/drawable/record_icon_riji.webp
new file mode 100644
index 0000000..331ece5
Binary files /dev/null and b/Pink/app/src/main/res/drawable/record_icon_riji.webp differ
diff --git a/Pink/app/src/main/res/drawable/record_icon_shizhi.webp b/Pink/app/src/main/res/drawable/record_icon_shizhi.webp
new file mode 100644
index 0000000..fed4f7c
Binary files /dev/null and b/Pink/app/src/main/res/drawable/record_icon_shizhi.webp differ
diff --git a/Pink/app/src/main/res/drawable/record_icon_sleep.webp b/Pink/app/src/main/res/drawable/record_icon_sleep.webp
new file mode 100644
index 0000000..9bc7618
Binary files /dev/null and b/Pink/app/src/main/res/drawable/record_icon_sleep.webp differ
diff --git a/Pink/app/src/main/res/drawable/record_icon_taidong.webp b/Pink/app/src/main/res/drawable/record_icon_taidong.webp
new file mode 100644
index 0000000..2730483
Binary files /dev/null and b/Pink/app/src/main/res/drawable/record_icon_taidong.webp differ
diff --git a/Pink/app/src/main/res/drawable/record_icon_tiwen_no.webp b/Pink/app/src/main/res/drawable/record_icon_tiwen_no.webp
new file mode 100644
index 0000000..1b1f8f4
Binary files /dev/null and b/Pink/app/src/main/res/drawable/record_icon_tiwen_no.webp differ
diff --git a/Pink/app/src/main/res/drawable/record_icon_tizhong_no.webp b/Pink/app/src/main/res/drawable/record_icon_tizhong_no.webp
new file mode 100644
index 0000000..005271a
Binary files /dev/null and b/Pink/app/src/main/res/drawable/record_icon_tizhong_no.webp differ
diff --git a/Pink/app/src/main/res/drawable/record_icon_tongjing.webp b/Pink/app/src/main/res/drawable/record_icon_tongjing.webp
new file mode 100644
index 0000000..0ae5719
Binary files /dev/null and b/Pink/app/src/main/res/drawable/record_icon_tongjing.webp differ
diff --git a/Pink/app/src/main/res/drawable/record_icon_tool.webp b/Pink/app/src/main/res/drawable/record_icon_tool.webp
new file mode 100644
index 0000000..5dbae6e
Binary files /dev/null and b/Pink/app/src/main/res/drawable/record_icon_tool.webp differ
diff --git a/Pink/app/src/main/res/drawable/record_icon_weight.webp b/Pink/app/src/main/res/drawable/record_icon_weight.webp
new file mode 100644
index 0000000..1630e95
Binary files /dev/null and b/Pink/app/src/main/res/drawable/record_icon_weight.webp differ
diff --git a/Pink/app/src/main/res/drawable/record_icon_weight_baby.webp b/Pink/app/src/main/res/drawable/record_icon_weight_baby.webp
new file mode 100644
index 0000000..d38f3a9
Binary files /dev/null and b/Pink/app/src/main/res/drawable/record_icon_weight_baby.webp differ
diff --git a/Pink/app/src/main/res/drawable/record_icon_wendu.webp b/Pink/app/src/main/res/drawable/record_icon_wendu.webp
new file mode 100644
index 0000000..d172904
Binary files /dev/null and b/Pink/app/src/main/res/drawable/record_icon_wendu.webp differ
diff --git a/Pink/app/src/main/res/drawable/record_icon_xin.webp b/Pink/app/src/main/res/drawable/record_icon_xin.webp
new file mode 100644
index 0000000..bfbbe4d
Binary files /dev/null and b/Pink/app/src/main/res/drawable/record_icon_xin.webp differ
diff --git a/Pink/app/src/main/res/drawable/record_icon_xin_kong.webp b/Pink/app/src/main/res/drawable/record_icon_xin_kong.webp
new file mode 100644
index 0000000..c5940c9
Binary files /dev/null and b/Pink/app/src/main/res/drawable/record_icon_xin_kong.webp differ
diff --git a/Pink/app/src/main/res/drawable/record_icon_xinqing.webp b/Pink/app/src/main/res/drawable/record_icon_xinqing.webp
new file mode 100644
index 0000000..6577db9
Binary files /dev/null and b/Pink/app/src/main/res/drawable/record_icon_xinqing.webp differ
diff --git a/Pink/app/src/main/res/drawable/record_icon_yuejing.webp b/Pink/app/src/main/res/drawable/record_icon_yuejing.webp
new file mode 100644
index 0000000..e6e9c4f
Binary files /dev/null and b/Pink/app/src/main/res/drawable/record_icon_yuejing.webp differ
diff --git a/Pink/app/src/main/res/drawable/record_icon_yunqiriji.webp b/Pink/app/src/main/res/drawable/record_icon_yunqiriji.webp
new file mode 100644
index 0000000..dd4ca97
Binary files /dev/null and b/Pink/app/src/main/res/drawable/record_icon_yunqiriji.webp differ
diff --git a/Pink/app/src/main/res/values/strings.xml b/Pink/app/src/main/res/values/strings.xml
index 4865b98..a2e20f8 100644
--- a/Pink/app/src/main/res/values/strings.xml
+++ b/Pink/app/src/main/res/values/strings.xml
@@ -1,5 +1,5 @@
- PinkOV
+ 粉熊好韵
Home
Mine
\ No newline at end of file
diff --git a/Pink/build.gradle.kts b/Pink/build.gradle.kts
index 18318be..7b0379b 100644
--- a/Pink/build.gradle.kts
+++ b/Pink/build.gradle.kts
@@ -1,5 +1,8 @@
// Top-level build file where you can add configuration options common to all sub-projects/modules.
plugins {
alias(libs.plugins.android.application) apply false
+ alias(libs.plugins.android.library) apply false
+ alias(libs.plugins.kotlin.android) apply false
alias(libs.plugins.kotlin.compose) apply false
+ alias(libs.plugins.ksp) apply false
}
\ No newline at end of file
diff --git a/Pink/docs/fertility-calendar-design.md b/Pink/docs/fertility-calendar-design.md
new file mode 100644
index 0000000..a675521
--- /dev/null
+++ b/Pink/docs/fertility-calendar-design.md
@@ -0,0 +1,575 @@
+# 备孕日历 — 架构设计方案
+
+> 基于美柚 APP 备孕日历功能分析,结合 Pink 项目现有架构的增量实现方案。
+
+---
+
+## 一、需求分析
+
+### 1.1 核心功能范围(第一步:基础经期展示与设置)
+
+| 模块 | 功能 | 优先级 |
+|------|------|--------|
+| 日历展示 | 月经期(深粉)、预测经期(浅粉)、排卵期(紫)、排卵日(深紫六边形) | P0 |
+| 单选交互 | 点击日期 → 下方展示打卡项目列表 | P0 |
+| 月经来了 | Switch 开关,标记当日为月经首日,自动填充经期 | P0 |
+| 打卡项 | 月经来了、爱爱、心情、白带等(本期先做月经来了) | P0 |
+| 经期设置 | 经期长度(3-15天)、周期长度(17-31天)、末次月经日期 | P0 |
+| 周期推算 | 根据公式自动计算预测经期、排卵日、排卵期 | P0 |
+
+### 1.2 后续迭代范围(不在本次实现)
+
+- 排卵试纸记录与 LH 曲线
+- 基础体温(BBT)记录与双相曲线
+- 同房记录与分布统计
+- 身体症状库打卡
+- 早孕试纸记录
+- 生活习惯 & 药物记录
+- 受孕概率计算
+- 提醒推送
+- 数据导出
+
+---
+
+## 二、业务算法
+
+### 2.1 核心公式
+
+```
+已知:末次月经首日 LMP、周期长度 C(天)、经期长度 P(天)
+
+1. 下次月经首日 = LMP + C
+2. 排卵日 = 下次月经首日 − 14
+3. 排卵期(易孕期):
+ - 起始 = 排卵日 − 5
+ - 结束 = 排卵日 + 1
+ - 区间共 7 天
+4. 预测经期:
+ - 起始 = 下次月经首日
+ - 结束 = 下次月经首日 + P − 1
+5. 实际经期(用户标记"月经来了"):
+ - 起始 = 用户标记的日期(当月月经首日)
+ - 结束 = 起始 + P − 1
+```
+
+### 2.2 月经期与预测经期的重叠处理
+
+- **实际月经期** vs **预测经期** 在日历上可能重叠或不重叠
+- **重叠日期**:以深粉色(实际月经期)优先显示
+- **仅预测经期**:浅粉色
+- **仅实际月经期**:深粉色
+
+### 2.3 预测经期的自动修正
+
+当用户在当月标记了「月经来了」,则:
+- 本月用实际日期 + `P` 计算实际经期
+- **下个月的预测经期** 使用本次实际月经首日 + `C` 重新推算
+- 现有的下月预测被覆盖
+
+---
+
+## 三、技术架构
+
+### 3.1 整体分层
+
+```
+┌──────────────────────────────────────────────────────┐
+│ UI Layer (Compose) │
+│ ┌──────────────┐ ┌────────────┐ ┌──────────────┐ │
+│ │ RecordsPage │ │MinePage │ │PeriodSettings│ │
+│ │ + DayContent │ │+ 经期设置入口│ │ Dialog │ │
+│ │ + CheckInPanel│ │ │ │ │ │
+│ └──────┬───────┘ └─────┬──────┘ └──────┬───────┘ │
+├─────────┼────────────────┼─────────────────┼─────────┤
+│ ViewModel Layer │ │ │
+│ ┌──────────────┐ ┌─────┴─────────────────┴───────┐ │
+│ │RecordsViewModel│ │ PeriodSettingsViewModel │ │
+│ │ - calendar │ │ - settings state │ │
+│ │ - selection │ │ - save/load │ │
+│ │ - period calc │ │ │ │
+│ │ - daily recs │ │ │ │
+│ └──────┬───────┘ └─────────────┬─────────────────┘ │
+├─────────┼────────────────────────┼───────────────────┤
+│ Data Layer (Room) │ │
+│ ┌──────┴───────┐ ┌────────────┴─────────────────┐ │
+│ │ DailyRecord │ │ PeriodSettings │ │
+│ │ Dao │ │ Dao │ │
+│ └──────────────┘ └──────────────────────────────┘ │
+│ ┌─────────────────────────────────────────────────┐ │
+│ │ CycleCalculator (pure logic, no DB) │ │
+│ │ - 推算排卵日、预测经期、排卵期 │ │
+│ └─────────────────────────────────────────────────┘ │
+└──────────────────────────────────────────────────────┘
+```
+
+### 3.2 Room 数据库设计
+
+#### 3.2.1 `PeriodSettings` — 经期设置(单行表)
+
+```kotlin
+@Entity(tableName = "period_settings")
+data class PeriodSettings(
+ @PrimaryKey val id: Int = 1, // 固定为 1,单行
+ @ColumnInfo(name = "period_length") // 经期长度 (天), 默认 5
+ val periodLength: Int = 5,
+ @ColumnInfo(name = "cycle_length") // 周期长度 (天), 默认 28
+ val cycleLength: Int = 28,
+ @ColumnInfo(name = "last_period_date") // 最近一次月经首日 (epoch day)
+ val lastPeriodDate: Long = 0L, // LocalDate.toEpochDay()
+)
+```
+
+#### 3.2.2 `DailyRecord` — 每日打卡记录
+
+```kotlin
+@Entity(
+ tableName = "daily_records",
+ indices = [Index(value = ["date"], unique = true)]
+)
+data class DailyRecord(
+ @PrimaryKey(autoGenerate = true) val id: Long = 0,
+ @ColumnInfo(name = "date")
+ val date: Long, // LocalDate.toEpochDay()
+ @ColumnInfo(name = "is_period_start")
+ val isPeriodStart: Boolean = false, // 月经来了 (是/否)
+ @ColumnInfo(name = "had_sex")
+ val hadSex: Boolean = false, // 爱爱
+ @ColumnInfo(name = "mood")
+ val mood: String? = null, // 心情标签
+ @ColumnInfo(name = "discharge") // 白带
+ val discharge: String? = null,
+ @ColumnInfo(name = "note")
+ val note: String? = null, // 备注
+)
+```
+
+#### 3.2.3 DAO
+
+```kotlin
+@Dao
+interface PeriodSettingsDao {
+ @Query("SELECT * FROM period_settings WHERE id = 1")
+ fun getSettings(): Flow
+
+ @Insert(onConflict = OnConflictStrategy.REPLACE)
+ suspend fun upsertSettings(settings: PeriodSettings)
+}
+
+@Dao
+interface DailyRecordDao {
+ @Query("SELECT * FROM daily_records WHERE date = :date")
+ fun getRecord(date: Long): Flow
+
+ @Query("SELECT * FROM daily_records WHERE date BETWEEN :start AND :end")
+ fun getRecordsInRange(start: Long, end: Long): Flow>
+
+ @Insert(onConflict = OnConflictStrategy.REPLACE)
+ suspend fun upsert(record: DailyRecord)
+
+ @Delete
+ suspend fun delete(record: DailyRecord)
+}
+```
+
+#### 3.2.4 数据库迁移
+
+```kotlin
+@Database(
+ entities = [ScanRecord::class, PeriodSettings::class, DailyRecord::class],
+ version = 2,
+ exportSchema = false
+)
+abstract class AppDatabase : RoomDatabase() {
+ abstract fun scanRecordDao(): ScanRecordDao
+ abstract fun periodSettingsDao(): PeriodSettingsDao
+ abstract fun dailyRecordDao(): DailyRecordDao
+ // ...
+}
+```
+
+由于现有 DB version=1 已有用户数据,需要提供 migration 1→2:
+
+```kotlin
+val MIGRATION_1_2 = object : Migration(1, 2) {
+ override fun migrate(db: SupportSQLiteDatabase) {
+ db.execSQL("""
+ CREATE TABLE IF NOT EXISTS `period_settings` (
+ `id` INTEGER NOT NULL,
+ `period_length` INTEGER NOT NULL DEFAULT 5,
+ `cycle_length` INTEGER NOT NULL DEFAULT 28,
+ `last_period_date` INTEGER NOT NULL DEFAULT 0,
+ PRIMARY KEY(`id`)
+ )
+ """)
+ db.execSQL("""
+ CREATE TABLE IF NOT EXISTS `daily_records` (
+ `id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
+ `date` INTEGER NOT NULL,
+ `is_period_start` INTEGER NOT NULL DEFAULT 0,
+ `had_sex` INTEGER NOT NULL DEFAULT 0,
+ `mood` TEXT,
+ `discharge` TEXT,
+ `note` TEXT
+ )
+ """)
+ db.execSQL("CREATE UNIQUE INDEX IF NOT EXISTS `index_daily_records_date` ON `daily_records` (`date`)")
+ }
+}
+```
+
+### 3.3 周期计算引擎(纯 Kotlin,无 Android 依赖)
+
+```kotlin
+// data/model/CycleCalculator.kt
+
+data class CycleInfo(
+ val actualPeriodRange: Set, // 实际月经期
+ val predictedPeriodRange: Set, // 预测经期
+ val ovulationDay: LocalDate?, // 排卵日
+ val ovulationRange: Set, // 排卵期(易孕期)
+)
+
+object CycleCalculator {
+
+ /**
+ * @param yearMonth 要计算的月份
+ * @param settings 经期设置
+ * @param actualPeriodStarts 用户标记的所有"月经来了"日期集合
+ */
+ fun calculate(
+ yearMonth: YearMonth,
+ settings: PeriodSettings,
+ actualPeriodStarts: Set,
+ ): CycleInfo {
+ // 1. 推算下月预测经期
+ // 2. 根据实际标记修正本月经期
+ // 3. 计算排卵日 & 排卵期
+ // ...
+ }
+}
+```
+
+### 3.4 日历单元格渲染逻辑
+
+```kotlin
+enum class DayPhase {
+ NONE, // 无特殊状态
+ ACTUAL_PERIOD, // 月经期 — 深粉色背景
+ PREDICTED_PERIOD, // 预测经期 — 浅粉色背景
+ OVULATION, // 排卵期 — 紫色背景
+ OVULATION_DAY, // 排卵日 — 紫色背景 + 六边形标记
+}
+```
+
+自定义 `dayContent` 替换库默认的 `DefaultDay`:
+
+```kotlin
+@Composable
+fun FertilityDayContent(state: DayState, cycleInfo: CycleInfo) {
+ val date = state.date
+ val phase = getPhaseForDate(date, cycleInfo)
+
+ Box(
+ modifier = Modifier
+ .aspectRatio(1f)
+ .padding(2.dp)
+ .background(
+ color = phase.backgroundColor(),
+ shape = RoundedCornerShape(4.dp)
+ )
+ .clickable { state.selectionState.onDateSelected(date) },
+ contentAlignment = Alignment.Center
+ ) {
+ Text(text = date.dayOfMonth.toString())
+
+ // 排卵日六边形标记
+ if (phase == DayPhase.OVULATION_DAY) {
+ HexagonMarker(
+ modifier = Modifier.align(Alignment.BottomEnd).size(12.dp),
+ color = Color(0xFF7B1FA2) // 深紫
+ )
+ }
+ }
+}
+```
+
+### 3.5 颜色定义
+
+```kotlin
+object FertilityColors {
+ val actualPeriod = Color(0xFFE91E63) // 深粉 — 实际月经期
+ val predictedPeriod = Color(0xFFFFCDD2) // 浅粉 — 预测经期
+ val ovulation = Color(0xFFCE93D8) // 紫色 — 排卵期
+ val ovulationDayMarker = Color(0xFF7B1FA2) // 深紫 — 排卵日六边形
+ val todayBorder = Color(0xFF2196F3) // 今日蓝色边框
+ val selectedBorder = Color(0xFF1976D2) // 选中蓝色边框
+}
+```
+
+---
+
+## 四、UI 设计
+
+### 4.1 RecordsPage 结构调整
+
+```
+┌─────────────────────────────┐
+│ 月 份 标 题 │ ← DefaultMonthHeader (保持)
+├─┬─┬─┬─┬─┬─┬─┬─────────────┤
+│日│一│二│三│四│五│六│ 星期栏 │
+├─┼─┼─┼─┼─┼─┼─┼─┼───────────┤
+│ │ │ │ ●│ ■│ ■│ ■│ ← 实际经期 (深粉)
+│ ■│ ■│ ■│ ■│ ■│ │ │ ← 预测经期 (浅粉)
+│ ▓│ ▓│ ▓│ ▓│ ▓│ ▓│ ▓│ ← 排卵期 (紫)
+│ │ │ │ │ │ │ │
+│ │ │ │ │ │◆│ │ ← 排卵日六边形
+├─────────────────────────────┤
+│ HorizontalDivider │
+├─────────────────────────────┤
+│ 选中日期: 2026-07-16 │
+│ ┌─────────────────────┐ │
+│ │ 月经来了 [Switch] │ │
+│ │ 爱爱 [ - ] │ │ ← 后续迭代
+│ │ 心情 [ - ] │ │
+│ │ 白带 [ - ] │ │
+│ └─────────────────────┘ │
+└─────────────────────────────┘
+```
+
+### 4.2 RecordPage 核心逻辑伪代码
+
+```kotlin
+@Composable
+fun RecordsPage(viewModel: RecordsViewModel = viewModel()) {
+ val calendarState = rememberSelectableCalendarState(
+ initialSelectionMode = SelectionMode.Single
+ )
+ val selectedDate by derivedStateOf { calendarState.selectionState.selection.firstOrNull() }
+ val cycleInfo by viewModel.cycleInfoForMonth(calendarState.monthState.currentMonth).collectAsState()
+ val settings by viewModel.settings.collectAsState()
+
+ Scaffold {
+ Column {
+ SelectableCalendar(
+ calendarState = calendarState,
+ dayContent = { dayState ->
+ FertilityDayContent(dayState, cycleInfo)
+ },
+ // ...
+ )
+ HorizontalDivider(...)
+ CheckInPanel(selectedDate, viewModel)
+ }
+ }
+}
+```
+
+### 4.3 CheckInPanel
+
+```kotlin
+@Composable
+fun CheckInPanel(selectedDate: LocalDate?, viewModel: RecordsViewModel) {
+ if (selectedDate == null) {
+ // 提示文字
+ return
+ }
+ val record by viewModel.getRecord(selectedDate).collectAsState(initial = null)
+
+ Column(Modifier.padding(16.dp)) {
+ // 月经来了 — Switch
+ Row {
+ Text("月经来了")
+ Switch(
+ checked = record?.isPeriodStart ?: false,
+ onCheckedChange = { checked ->
+ viewModel.setPeriodStart(selectedDate, checked)
+ }
+ )
+ }
+ // 后续迭代再加:爱爱、心情、白带...
+ }
+}
+```
+
+### 4.4 MinePage — 添加经期设置入口
+
+在"设置"上方插入一行:
+
+```kotlin
+// 在 MenuItemRow(icon = Icons.Default.Settings, ...) 之前添加:
+MenuItemRow(
+ icon = Icons.Default.CalendarMonth, // 或自定义 icon
+ title = "经期设置",
+ onClick = { showPeriodSettings = true }
+)
+```
+
+### 4.5 PeriodSettingsDialog
+
+```kotlin
+@Composable
+fun PeriodSettingsDialog(
+ currentSettings: PeriodSettings,
+ onDismiss: () -> Unit,
+ onSave: (PeriodSettings) -> Unit
+) {
+ var periodLength by remember { mutableIntStateOf(currentSettings.periodLength) }
+ var cycleLength by remember { mutableIntStateOf(currentSettings.cycleLength) }
+ var lastPeriodDate by remember { mutableStateOf(currentSettings.lastPeriodDate) }
+ var showDatePicker by remember { mutableStateOf(false) }
+
+ AlertDialog(...) {
+ Column {
+ // 经期长度 — WheelPicker (3-15)
+ Text("设置您的月经大概维持几天?")
+ WheelPicker(
+ items = (3..15).toList(),
+ selected = periodLength,
+ onSelected = { periodLength = it }
+ )
+
+ // 周期长度 — WheelPicker (17-31)
+ Text("两次月经开始日大概间隔多久?")
+ WheelPicker(
+ items = (17..31).toList(),
+ selected = cycleLength,
+ onSelected = { cycleLength = it }
+ )
+
+ // 最近一次月经开始时间 — DatePicker
+ Text("最近一次月经开始时间")
+ TextButton(onClick = { showDatePicker = true }) {
+ Text(lastPeriodDate.toLocalDate().format(...))
+ }
+
+ // 确认/取消
+ }
+ }
+
+ if (showDatePicker) {
+ // DatePickerDialog
+ }
+}
+```
+
+---
+
+## 五、ViewModel 设计
+
+### 5.1 RecordsViewModel
+
+```kotlin
+class RecordsViewModel(
+ private val settingsDao: PeriodSettingsDao,
+ private val recordDao: DailyRecordDao,
+) : ViewModel() {
+
+ val settings: StateFlow
+ private val actualPeriodStarts: StateFlow>
+
+ fun cycleInfoForMonth(yearMonth: YearMonth): Flow
+ fun getRecord(date: LocalDate): Flow
+ fun setPeriodStart(date: LocalDate, isStart: Boolean)
+
+ // 重新计算 —— 当用户修改 periodStart 后触发
+ private fun recalculate()
+}
+```
+
+### 5.2 ViewModel 关键逻辑:setPeriodStart
+
+```kotlin
+fun setPeriodStart(date: LocalDate, isStart: Boolean) {
+ viewModelScope.launch {
+ val record = recordDao.getRecordOnce(date) ?: DailyRecord(date = date.toEpochDay())
+ recordDao.upsert(record.copy(isPeriodStart = isStart))
+
+ // 如果是月经来了,还需要清除本月之前的 periodStart 标记
+ // (一个月只能有一个月经首日)
+ if (isStart) {
+ clearOtherPeriodStartsInMonth(date)
+ }
+
+ // 重新计算触发 UI 更新
+ _actualPeriodStarts.update { ... }
+ }
+}
+```
+
+---
+
+## 六、数据流
+
+```
+用户设置经期参数
+ │
+ ▼
+PeriodSettings ──→ CycleCalculator.calculate()
+ │ │
+ ▼ ▼
+用户标记"月经来了" ◇──→ CycleInfo (月经期/预测经期/排卵日/排卵期)
+ │ │
+ ▼ ▼
+DailyRecord FertilityDayContent (日历格子渲染)
+```
+
+关键点:
+- **预测数据不存储**,由 CycleCalculator 每次实时计算
+- 实际月经期 = 用户标记的 `isPeriodStart` 日期 + settings.periodLength
+- 用户修改「经期设置」或「月经来了」→ 立即触发重算 → UI 自动更新
+
+---
+
+## 七、文件清单(本次需新增/修改)
+
+### 新增文件
+
+| 路径 | 说明 |
+|------|------|
+| `data/entity/PeriodSettings.kt` | 经期设置 Room Entity |
+| `data/entity/DailyRecord.kt` | 每日打卡记录 Room Entity |
+| `data/dao/PeriodSettingsDao.kt` | 经期设置 DAO |
+| `data/dao/DailyRecordDao.kt` | 每日记录 DAO |
+| `data/model/CycleCalculator.kt` | 周期计算引擎,纯 Kotlin |
+| `data/model/CycleInfo.kt` | 周期信息数据类 |
+| `ui/page/RecordsViewModel.kt` | 日历页 ViewModel |
+| `ui/component/FertilityDayContent.kt` | 自定义日历日单元格 |
+| `ui/component/CheckInPanel.kt` | 打卡面板 |
+| `ui/component/PeriodSettingsDialog.kt` | 经期设置弹窗 |
+| `ui/component/WheelPicker.kt` | 滚轮选择器(经期/周期天数选择) |
+| `ui/component/HexagonMarker.kt` | 六边形标记组件 |
+| `ui/theme/FertilityColors.kt` | 备孕日历颜色常量 |
+
+### 修改文件
+
+| 路径 | 改动 |
+|------|------|
+| `data/database/AppDatabase.kt` | 新增 entities、DAOs、migration 1→2 |
+| `ui/page/RecordsPage.kt` | 完全重写:Single 选择 + 自定义 dayContent + CheckInPanel |
+| `ui/page/MinePage.kt` | 添加"经期设置"入口 + 弹窗状态 |
+| `PinkApplication.kt` | 无需改动(database 实例已在) |
+
+---
+
+## 八、关于 ComposeCalendar 库的关键结论
+
+1. **自定义 dayContent**:`SelectableCalendar` 支持 `dayContent: @Composable BoxScope.(DayState) -> Unit` 参数,可以完全替换默认的单元格渲染,实现我们需要的彩色背景 + 六边形标记
+
+2. **不依赖库的选中机制来展示经期/排卵期**:库的 `DynamicSelectionState.selection` 用于用户交互(单选日期),而经期/排卵期的「自动多选」显示完全在自定义 `dayContent` 中通过判断日期位置来实现
+
+3. **M2/M3 兼容**:库内部使用 M2 组件,但我们通过自定义 `dayContent` 绕过了库的 `DefaultDay`,可以在其中使用 M3 颜色体系
+
+4. **MonthState 可用**:通过 `calendarState.monthState.currentMonth` 可以获知当前展示的月份,用于计算该月的周期信息
+
+---
+
+## 九、实施顺序(推荐)
+
+1. **Room 层**:新增 Entity + DAO + Migration
+2. **CycleCalculator**:纯逻辑,可先写单元测试
+3. **FertilityDayContent + HexagonMarker**:自定义日历格子
+4. **RecordsViewModel**:连接数据与 UI
+5. **RecordsPage 改造**:Single 选择 + 自定义 dayContent + CheckInPanel
+6. **WheelPicker**:通用滚轮组件
+7. **PeriodSettingsDialog**:经期设置弹窗
+8. **MinePage 添加入口**:一行导航
diff --git a/Pink/docs/我的零碎.md b/Pink/docs/我的零碎.md
new file mode 100644
index 0000000..1024f4d
--- /dev/null
+++ b/Pink/docs/我的零碎.md
@@ -0,0 +1,32 @@
+项目下的 美柚APP备孕日历功能列表.md 和 经期设置和计算.md 是美柚这个产品跟备孕日历设置相关的内容(不一定完全准确)。
+ 我想在pink项目里面,逐步实现大部分相关的功能。
+首先,我想实现经期设置 最基础的功能,在日历上展示:月经期、预测经期、排卵期、排卵日
+我们的日历需要相应的改造,能够呈现月经期、预测经期、排卵期、排卵日的状态。
+
+预测经期:通过 淡粉色背景色填充日历的格子, 在日历上自动多选连续的预测经期。
+排卵期: 通过 紫色背景色填充日历的格子, 在日历上自动多选连续的排卵期。
+排卵日: 使用 深紫色的 小实心6变形,在日历中被预测的排卵日那个格子右下角花上这个6边形。
+月经期:当月日历中,实际的月经期,可能跟预测经期重叠,也可能不重叠。如果重叠或者部分重叠。重叠的格子,则显示深粉色的背景色(月经期的背景色)。
+目前你选择的日历是Period多选方式,对照美柚的UI ,可以看到这里应该采用单选,选中某个日期,则在当前界面日历的下面呈现可以打卡的项目列表(月经来了,爱爱、心情、白带等等)。
+月经来了:这是一个 是/否 这样的一个switch开关,用户点击了选择了**是**,则表示这一天是当月月经开始的第一天,根据用户设置的**经期长度**,自动通过 深粉色背景色填充日历的格子, 在日历上自动多选连续的实际的经期。
+ 用户只要重新设置了**月经来了**,这自动重算当前月日历视图上的实际的月经期。
+
+
+在MinePage添加一行导航,放在“设置”上面,点击则弹出 经期设置 的界面(使用dialog方式),设置:
+经期长度:通过轮播方式选择经期的天数,3,4,5,6,7,8....15 --- 设置您的月经大概维持几天?
+周期长度:通过轮播方式选择周期的天数,17,18,......31 --- 两次月经开始日大概间隔多久?
+最近一次月经开始时间:这里通过弹出一个日期选择?
+有了以上3个数据,就可以根据公式,算出预测经期、排卵期、排卵日!
+
+### 标准计算公式
+1. 先算「下次月经来潮日」
+ 本次月经首日 + 平均月经周期天数 = 下次月经首日
+2. 排卵日 = 下次月经首日 − 14天
+示例:
+本次月经7.1,周期30天
+下次月经:7.1+30=7.31
+排卵日=7.31−14=7.17
+
+---
+
+你需要研究一下,怎么在本地的Room数据库存储,经期数据和关联的打卡数据。仔细分析美柚的两个文件、结合你对类似产品功能的设计能力,给出你的业务流程和建议,技术实现方案! 你把你的设计内容写成文档到docs目录
\ No newline at end of file
diff --git a/Pink/gradle.properties b/Pink/gradle.properties
index 34c5e9e..7c7f953 100644
--- a/Pink/gradle.properties
+++ b/Pink/gradle.properties
@@ -12,4 +12,6 @@ org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8
# https://developer.android.com/r/tools/gradle-multi-project-decoupled-projects
# org.gradle.parallel=true
# Kotlin code style for this project: "official" or "obsolete":
-kotlin.code.style=official
\ No newline at end of file
+kotlin.code.style=official
+# Allow KSP to add Kotlin sources with built-in Kotlin support
+android.disallowKotlinSourceSets=false
\ No newline at end of file
diff --git a/Pink/gradle/libs.versions.toml b/Pink/gradle/libs.versions.toml
index f6339d8..d275e91 100644
--- a/Pink/gradle/libs.versions.toml
+++ b/Pink/gradle/libs.versions.toml
@@ -10,6 +10,10 @@ kotlin = "2.2.10"
composeBom = "2025.12.00"
camerax = "1.4.1"
accompanist = "0.36.0"
+room = "2.7.1"
+ksp = "2.2.10-2.0.2"
+snapper = "0.3.0"
+timber = "5.0.1"
[libraries]
androidx-core-ktx = { group = "androidx.core", name = "core-ktx", version.ref = "coreKtx" }
@@ -29,12 +33,23 @@ androidx-compose-ui-test-manifest = { group = "androidx.compose.ui", name = "ui-
androidx-compose-ui-test-junit4 = { group = "androidx.compose.ui", name = "ui-test-junit4" }
androidx-compose-material3 = { group = "androidx.compose.material3", name = "material3" }
androidx-compose-material3-adaptive-navigation-suite = { group = "androidx.compose.material3", name = "material3-adaptive-navigation-suite" }
+androidx-compose-material-icons-core = { group = "androidx.compose.material", name = "material-icons-core" }
androidx-camera-core = { group = "androidx.camera", name = "camera-core", version.ref = "camerax" }
androidx-camera-camera2 = { group = "androidx.camera", name = "camera-camera2", version.ref = "camerax" }
androidx-camera-lifecycle = { group = "androidx.camera", name = "camera-lifecycle", version.ref = "camerax" }
accompanist-permissions = { group = "com.google.accompanist", name = "accompanist-permissions", version.ref = "accompanist" }
+androidx-room-runtime = { group = "androidx.room", name = "room-runtime", version.ref = "room" }
+androidx-room-ktx = { group = "androidx.room", name = "room-ktx", version.ref = "room" }
+androidx-room-compiler = { group = "androidx.room", name = "room-compiler", version.ref = "room" }
+androidx-compose-foundation = { group = "androidx.compose.foundation", name = "foundation" }
+androidx-compose-material = { group = "androidx.compose.material", name = "material" }
+snapper = { group = "dev.chrisbanes.snapper", name = "snapper", version.ref = "snapper" }
+timber = { group = "com.jakewharton.timber", name = "timber", version.ref = "timber" }
[plugins]
android-application = { id = "com.android.application", version.ref = "agp" }
+android-library = { id = "com.android.library", version.ref = "agp" }
+kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" }
kotlin-compose = { id = "org.jetbrains.kotlin.plugin.compose", version.ref = "kotlin" }
+ksp = { id = "com.google.devtools.ksp", version.ref = "ksp" }
diff --git a/Pink/library/.gitignore b/Pink/library/.gitignore
new file mode 100644
index 0000000..42afabf
--- /dev/null
+++ b/Pink/library/.gitignore
@@ -0,0 +1 @@
+/build
\ No newline at end of file
diff --git a/Pink/library/api/library.api b/Pink/library/api/library.api
new file mode 100644
index 0000000..9c12ac3
--- /dev/null
+++ b/Pink/library/api/library.api
@@ -0,0 +1,256 @@
+public final class io/github/boguszpawlowski/composecalendar/BuildConfig {
+ public static final field BUILD_TYPE Ljava/lang/String;
+ public static final field DEBUG Z
+ public static final field LIBRARY_PACKAGE_NAME Ljava/lang/String;
+ public fun ()V
+}
+
+public final class io/github/boguszpawlowski/composecalendar/CalendarKt {
+ public static final fun Calendar (Lio/github/boguszpawlowski/composecalendar/CalendarState;Landroidx/compose/ui/Modifier;Ljava/time/DayOfWeek;Ljava/time/LocalDate;ZZZLkotlin/jvm/functions/Function4;Lkotlin/jvm/functions/Function4;Lkotlin/jvm/functions/Function4;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;III)V
+ public static final fun SelectableCalendar (Landroidx/compose/ui/Modifier;Ljava/time/DayOfWeek;Ljava/time/LocalDate;ZZZLio/github/boguszpawlowski/composecalendar/CalendarState;Lkotlin/jvm/functions/Function4;Lkotlin/jvm/functions/Function4;Lkotlin/jvm/functions/Function4;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;III)V
+ public static final fun StaticCalendar (Landroidx/compose/ui/Modifier;Ljava/time/DayOfWeek;Ljava/time/LocalDate;ZZZLio/github/boguszpawlowski/composecalendar/CalendarState;Lkotlin/jvm/functions/Function4;Lkotlin/jvm/functions/Function4;Lkotlin/jvm/functions/Function4;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;III)V
+ public static final fun rememberCalendarState (Ljava/time/YearMonth;Ljava/time/YearMonth;Ljava/time/YearMonth;Lio/github/boguszpawlowski/composecalendar/header/MonthState;Landroidx/compose/runtime/Composer;II)Lio/github/boguszpawlowski/composecalendar/CalendarState;
+ public static final fun rememberSelectableCalendarState (Ljava/time/YearMonth;Ljava/time/YearMonth;Ljava/time/YearMonth;Ljava/util/List;Lio/github/boguszpawlowski/composecalendar/selection/SelectionMode;Lkotlin/jvm/functions/Function1;Lio/github/boguszpawlowski/composecalendar/header/MonthState;Lio/github/boguszpawlowski/composecalendar/selection/DynamicSelectionState;Landroidx/compose/runtime/Composer;II)Lio/github/boguszpawlowski/composecalendar/CalendarState;
+}
+
+public final class io/github/boguszpawlowski/composecalendar/CalendarState {
+ public static final field $stable I
+ public fun (Lio/github/boguszpawlowski/composecalendar/header/MonthState;Lio/github/boguszpawlowski/composecalendar/selection/SelectionState;)V
+ public final fun getMonthState ()Lio/github/boguszpawlowski/composecalendar/header/MonthState;
+ public final fun getSelectionState ()Lio/github/boguszpawlowski/composecalendar/selection/SelectionState;
+}
+
+public final class io/github/boguszpawlowski/composecalendar/ComposableSingletons$CalendarKt {
+ public static final field INSTANCE Lio/github/boguszpawlowski/composecalendar/ComposableSingletons$CalendarKt;
+ public static field lambda-1 Lkotlin/jvm/functions/Function4;
+ public static field lambda-10 Lkotlin/jvm/functions/Function4;
+ public static field lambda-11 Lkotlin/jvm/functions/Function4;
+ public static field lambda-12 Lkotlin/jvm/functions/Function3;
+ public static field lambda-2 Lkotlin/jvm/functions/Function4;
+ public static field lambda-3 Lkotlin/jvm/functions/Function4;
+ public static field lambda-4 Lkotlin/jvm/functions/Function3;
+ public static field lambda-5 Lkotlin/jvm/functions/Function4;
+ public static field lambda-6 Lkotlin/jvm/functions/Function4;
+ public static field lambda-7 Lkotlin/jvm/functions/Function4;
+ public static field lambda-8 Lkotlin/jvm/functions/Function3;
+ public static field lambda-9 Lkotlin/jvm/functions/Function4;
+ public fun ()V
+ public final fun getLambda-1$library_release ()Lkotlin/jvm/functions/Function4;
+ public final fun getLambda-10$library_release ()Lkotlin/jvm/functions/Function4;
+ public final fun getLambda-11$library_release ()Lkotlin/jvm/functions/Function4;
+ public final fun getLambda-12$library_release ()Lkotlin/jvm/functions/Function3;
+ public final fun getLambda-2$library_release ()Lkotlin/jvm/functions/Function4;
+ public final fun getLambda-3$library_release ()Lkotlin/jvm/functions/Function4;
+ public final fun getLambda-4$library_release ()Lkotlin/jvm/functions/Function3;
+ public final fun getLambda-5$library_release ()Lkotlin/jvm/functions/Function4;
+ public final fun getLambda-6$library_release ()Lkotlin/jvm/functions/Function4;
+ public final fun getLambda-7$library_release ()Lkotlin/jvm/functions/Function4;
+ public final fun getLambda-8$library_release ()Lkotlin/jvm/functions/Function3;
+ public final fun getLambda-9$library_release ()Lkotlin/jvm/functions/Function4;
+}
+
+public final class io/github/boguszpawlowski/composecalendar/ComposableSingletons$WeekCalendarKt {
+ public static final field INSTANCE Lio/github/boguszpawlowski/composecalendar/ComposableSingletons$WeekCalendarKt;
+ public static field lambda-1 Lkotlin/jvm/functions/Function4;
+ public static field lambda-2 Lkotlin/jvm/functions/Function4;
+ public static field lambda-3 Lkotlin/jvm/functions/Function4;
+ public static field lambda-4 Lkotlin/jvm/functions/Function4;
+ public static field lambda-5 Lkotlin/jvm/functions/Function4;
+ public static field lambda-6 Lkotlin/jvm/functions/Function4;
+ public static field lambda-7 Lkotlin/jvm/functions/Function4;
+ public static field lambda-8 Lkotlin/jvm/functions/Function4;
+ public static field lambda-9 Lkotlin/jvm/functions/Function4;
+ public fun ()V
+ public final fun getLambda-1$library_release ()Lkotlin/jvm/functions/Function4;
+ public final fun getLambda-2$library_release ()Lkotlin/jvm/functions/Function4;
+ public final fun getLambda-3$library_release ()Lkotlin/jvm/functions/Function4;
+ public final fun getLambda-4$library_release ()Lkotlin/jvm/functions/Function4;
+ public final fun getLambda-5$library_release ()Lkotlin/jvm/functions/Function4;
+ public final fun getLambda-6$library_release ()Lkotlin/jvm/functions/Function4;
+ public final fun getLambda-7$library_release ()Lkotlin/jvm/functions/Function4;
+ public final fun getLambda-8$library_release ()Lkotlin/jvm/functions/Function4;
+ public final fun getLambda-9$library_release ()Lkotlin/jvm/functions/Function4;
+}
+
+public final class io/github/boguszpawlowski/composecalendar/WeekCalendarKt {
+ public static final fun SelectableWeekCalendar (Landroidx/compose/ui/Modifier;Ljava/time/DayOfWeek;Ljava/time/LocalDate;ZZLio/github/boguszpawlowski/composecalendar/WeekCalendarState;Lkotlin/jvm/functions/Function4;Lkotlin/jvm/functions/Function4;Lkotlin/jvm/functions/Function4;Landroidx/compose/runtime/Composer;II)V
+ public static final fun StaticWeekCalendar (Landroidx/compose/ui/Modifier;Ljava/time/DayOfWeek;Ljava/time/LocalDate;ZLio/github/boguszpawlowski/composecalendar/WeekCalendarState;ZLkotlin/jvm/functions/Function4;Lkotlin/jvm/functions/Function4;Lkotlin/jvm/functions/Function4;Landroidx/compose/runtime/Composer;II)V
+ public static final fun WeekCalendar (Lio/github/boguszpawlowski/composecalendar/WeekCalendarState;Landroidx/compose/ui/Modifier;Ljava/time/LocalDate;Ljava/time/DayOfWeek;ZZLkotlin/jvm/functions/Function4;Lkotlin/jvm/functions/Function4;Lkotlin/jvm/functions/Function4;Landroidx/compose/runtime/Composer;II)V
+ public static final fun rememberSelectableWeekCalendarState (Ljava/time/DayOfWeek;Lio/github/boguszpawlowski/composecalendar/week/Week;Lio/github/boguszpawlowski/composecalendar/week/Week;Lio/github/boguszpawlowski/composecalendar/week/Week;Ljava/util/List;Lio/github/boguszpawlowski/composecalendar/selection/SelectionMode;Lkotlin/jvm/functions/Function1;Lio/github/boguszpawlowski/composecalendar/header/WeekState;Lio/github/boguszpawlowski/composecalendar/selection/DynamicSelectionState;Landroidx/compose/runtime/Composer;II)Lio/github/boguszpawlowski/composecalendar/WeekCalendarState;
+ public static final fun rememberWeekCalendarState (Ljava/time/DayOfWeek;Lio/github/boguszpawlowski/composecalendar/week/Week;Lio/github/boguszpawlowski/composecalendar/week/Week;Lio/github/boguszpawlowski/composecalendar/week/Week;Lio/github/boguszpawlowski/composecalendar/header/WeekState;Landroidx/compose/runtime/Composer;II)Lio/github/boguszpawlowski/composecalendar/WeekCalendarState;
+}
+
+public final class io/github/boguszpawlowski/composecalendar/WeekCalendarState {
+ public static final field $stable I
+ public fun (Lio/github/boguszpawlowski/composecalendar/header/WeekState;Lio/github/boguszpawlowski/composecalendar/selection/SelectionState;)V
+ public final fun getSelectionState ()Lio/github/boguszpawlowski/composecalendar/selection/SelectionState;
+ public final fun getWeekState ()Lio/github/boguszpawlowski/composecalendar/header/WeekState;
+}
+
+public abstract interface class io/github/boguszpawlowski/composecalendar/day/Day {
+ public abstract fun getDate ()Ljava/time/LocalDate;
+ public abstract fun isCurrentDay ()Z
+ public abstract fun isFromCurrentMonth ()Z
+}
+
+public final class io/github/boguszpawlowski/composecalendar/day/DayState : io/github/boguszpawlowski/composecalendar/day/Day {
+ public static final field $stable I
+ public fun (Lio/github/boguszpawlowski/composecalendar/day/Day;Lio/github/boguszpawlowski/composecalendar/selection/SelectionState;)V
+ public final fun component2 ()Lio/github/boguszpawlowski/composecalendar/selection/SelectionState;
+ public final fun copy (Lio/github/boguszpawlowski/composecalendar/day/Day;Lio/github/boguszpawlowski/composecalendar/selection/SelectionState;)Lio/github/boguszpawlowski/composecalendar/day/DayState;
+ public static synthetic fun copy$default (Lio/github/boguszpawlowski/composecalendar/day/DayState;Lio/github/boguszpawlowski/composecalendar/day/Day;Lio/github/boguszpawlowski/composecalendar/selection/SelectionState;ILjava/lang/Object;)Lio/github/boguszpawlowski/composecalendar/day/DayState;
+ public fun equals (Ljava/lang/Object;)Z
+ public fun getDate ()Ljava/time/LocalDate;
+ public final fun getSelectionState ()Lio/github/boguszpawlowski/composecalendar/selection/SelectionState;
+ public fun hashCode ()I
+ public fun isCurrentDay ()Z
+ public fun isFromCurrentMonth ()Z
+ public fun toString ()Ljava/lang/String;
+}
+
+public final class io/github/boguszpawlowski/composecalendar/day/DefaultDayKt {
+ public static final fun DefaultDay-t6yy7ic (Lio/github/boguszpawlowski/composecalendar/day/DayState;Landroidx/compose/ui/Modifier;JJLkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;II)V
+}
+
+public final class io/github/boguszpawlowski/composecalendar/header/ComposableSingletons$DefaultMonthHeaderKt {
+ public static final field INSTANCE Lio/github/boguszpawlowski/composecalendar/header/ComposableSingletons$DefaultMonthHeaderKt;
+ public static field lambda-1 Lkotlin/jvm/functions/Function2;
+ public static field lambda-2 Lkotlin/jvm/functions/Function2;
+ public fun ()V
+ public final fun getLambda-1$library_release ()Lkotlin/jvm/functions/Function2;
+ public final fun getLambda-2$library_release ()Lkotlin/jvm/functions/Function2;
+}
+
+public final class io/github/boguszpawlowski/composecalendar/header/ComposableSingletons$DefaultWeekHeaderKt {
+ public static final field INSTANCE Lio/github/boguszpawlowski/composecalendar/header/ComposableSingletons$DefaultWeekHeaderKt;
+ public static field lambda-1 Lkotlin/jvm/functions/Function2;
+ public static field lambda-2 Lkotlin/jvm/functions/Function2;
+ public fun ()V
+ public final fun getLambda-1$library_release ()Lkotlin/jvm/functions/Function2;
+ public final fun getLambda-2$library_release ()Lkotlin/jvm/functions/Function2;
+}
+
+public final class io/github/boguszpawlowski/composecalendar/header/DefaultMonthHeaderKt {
+ public static final fun DefaultMonthHeader (Lio/github/boguszpawlowski/composecalendar/header/MonthState;Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;II)V
+}
+
+public final class io/github/boguszpawlowski/composecalendar/header/DefaultWeekHeaderKt {
+ public static final fun DefaultWeekHeader (Lio/github/boguszpawlowski/composecalendar/header/WeekState;Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;II)V
+}
+
+public abstract interface class io/github/boguszpawlowski/composecalendar/header/MonthState {
+ public static final field Companion Lio/github/boguszpawlowski/composecalendar/header/MonthState$Companion;
+ public abstract fun getCurrentMonth ()Ljava/time/YearMonth;
+ public abstract fun getMaxMonth ()Ljava/time/YearMonth;
+ public abstract fun getMinMonth ()Ljava/time/YearMonth;
+ public abstract fun setCurrentMonth (Ljava/time/YearMonth;)V
+ public abstract fun setMaxMonth (Ljava/time/YearMonth;)V
+ public abstract fun setMinMonth (Ljava/time/YearMonth;)V
+}
+
+public final class io/github/boguszpawlowski/composecalendar/header/MonthState$Companion {
+ public final fun Saver ()Landroidx/compose/runtime/saveable/Saver;
+}
+
+public final class io/github/boguszpawlowski/composecalendar/header/MonthStateKt {
+ public static final fun MonthState (Ljava/time/YearMonth;Ljava/time/YearMonth;Ljava/time/YearMonth;)Lio/github/boguszpawlowski/composecalendar/header/MonthState;
+}
+
+public abstract interface class io/github/boguszpawlowski/composecalendar/header/WeekState {
+ public static final field Companion Lio/github/boguszpawlowski/composecalendar/header/WeekState$Companion;
+ public abstract fun getCurrentWeek ()Lio/github/boguszpawlowski/composecalendar/week/Week;
+ public abstract fun getMaxWeek ()Lio/github/boguszpawlowski/composecalendar/week/Week;
+ public abstract fun getMinWeek ()Lio/github/boguszpawlowski/composecalendar/week/Week;
+ public abstract fun setCurrentWeek (Lio/github/boguszpawlowski/composecalendar/week/Week;)V
+ public abstract fun setMaxWeek (Lio/github/boguszpawlowski/composecalendar/week/Week;)V
+ public abstract fun setMinWeek (Lio/github/boguszpawlowski/composecalendar/week/Week;)V
+}
+
+public final class io/github/boguszpawlowski/composecalendar/header/WeekState$Companion {
+ public final fun Saver ()Landroidx/compose/runtime/saveable/Saver;
+}
+
+public final class io/github/boguszpawlowski/composecalendar/header/WeekStateKt {
+ public static final fun WeekState (Lio/github/boguszpawlowski/composecalendar/week/Week;Lio/github/boguszpawlowski/composecalendar/week/Week;Lio/github/boguszpawlowski/composecalendar/week/Week;)Lio/github/boguszpawlowski/composecalendar/header/WeekState;
+}
+
+public final class io/github/boguszpawlowski/composecalendar/selection/DynamicSelectionHandler {
+ public static final field $stable I
+ public static final field INSTANCE Lio/github/boguszpawlowski/composecalendar/selection/DynamicSelectionHandler;
+ public final fun calculateNewSelection (Ljava/time/LocalDate;Ljava/util/List;Lio/github/boguszpawlowski/composecalendar/selection/SelectionMode;)Ljava/util/List;
+}
+
+public final class io/github/boguszpawlowski/composecalendar/selection/DynamicSelectionState : io/github/boguszpawlowski/composecalendar/selection/SelectionState {
+ public static final field $stable I
+ public fun (Lkotlin/jvm/functions/Function1;Ljava/util/List;Lio/github/boguszpawlowski/composecalendar/selection/SelectionMode;)V
+ public synthetic fun (Lkotlin/jvm/functions/Function1;Ljava/util/List;Lio/github/boguszpawlowski/composecalendar/selection/SelectionMode;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
+ public final fun getSelection ()Ljava/util/List;
+ public final fun getSelectionMode ()Lio/github/boguszpawlowski/composecalendar/selection/SelectionMode;
+ public fun isDateSelected (Ljava/time/LocalDate;)Z
+ public fun onDateSelected (Ljava/time/LocalDate;)V
+ public final fun setSelection (Ljava/util/List;)V
+ public final fun setSelectionMode (Lio/github/boguszpawlowski/composecalendar/selection/SelectionMode;)V
+}
+
+public final class io/github/boguszpawlowski/composecalendar/selection/EmptySelectionState : io/github/boguszpawlowski/composecalendar/selection/SelectionState {
+ public static final field $stable I
+ public static final field INSTANCE Lio/github/boguszpawlowski/composecalendar/selection/EmptySelectionState;
+ public fun isDateSelected (Ljava/time/LocalDate;)Z
+ public fun onDateSelected (Ljava/time/LocalDate;)V
+}
+
+public final class io/github/boguszpawlowski/composecalendar/selection/SelectionMode : java/lang/Enum {
+ public static final field Multiple Lio/github/boguszpawlowski/composecalendar/selection/SelectionMode;
+ public static final field None Lio/github/boguszpawlowski/composecalendar/selection/SelectionMode;
+ public static final field Period Lio/github/boguszpawlowski/composecalendar/selection/SelectionMode;
+ public static final field Single Lio/github/boguszpawlowski/composecalendar/selection/SelectionMode;
+ public static fun getEntries ()Lkotlin/enums/EnumEntries;
+ public static fun valueOf (Ljava/lang/String;)Lio/github/boguszpawlowski/composecalendar/selection/SelectionMode;
+ public static fun values ()[Lio/github/boguszpawlowski/composecalendar/selection/SelectionMode;
+}
+
+public abstract interface class io/github/boguszpawlowski/composecalendar/selection/SelectionState {
+ public abstract fun isDateSelected (Ljava/time/LocalDate;)Z
+ public abstract fun onDateSelected (Ljava/time/LocalDate;)V
+}
+
+public final class io/github/boguszpawlowski/composecalendar/selection/SelectionState$DefaultImpls {
+ public static fun isDateSelected (Lio/github/boguszpawlowski/composecalendar/selection/SelectionState;Ljava/time/LocalDate;)Z
+ public static fun onDateSelected (Lio/github/boguszpawlowski/composecalendar/selection/SelectionState;Ljava/time/LocalDate;)V
+}
+
+public final class io/github/boguszpawlowski/composecalendar/week/DefaultWeekHeaderKt {
+ public static final fun DefaultDaysOfWeekHeader (Ljava/util/List;Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;II)V
+ public static final fun DefaultWeekHeader (Ljava/util/List;Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;II)V
+}
+
+public final class io/github/boguszpawlowski/composecalendar/week/Week {
+ public static final field $stable I
+ public static final field Companion Lio/github/boguszpawlowski/composecalendar/week/Week$Companion;
+ public fun (Ljava/util/List;)V
+ public final fun compareTo (Lio/github/boguszpawlowski/composecalendar/week/Week;)I
+ public final fun component1 ()Ljava/util/List;
+ public final fun copy (Ljava/util/List;)Lio/github/boguszpawlowski/composecalendar/week/Week;
+ public static synthetic fun copy$default (Lio/github/boguszpawlowski/composecalendar/week/Week;Ljava/util/List;ILjava/lang/Object;)Lio/github/boguszpawlowski/composecalendar/week/Week;
+ public final fun dec ()Lio/github/boguszpawlowski/composecalendar/week/Week;
+ public fun equals (Ljava/lang/Object;)Z
+ public final fun getDays ()Ljava/util/List;
+ public final fun getEnd ()Ljava/time/LocalDate;
+ public final fun getStart ()Ljava/time/LocalDate;
+ public final fun getYearMonth ()Ljava/time/YearMonth;
+ public fun hashCode ()I
+ public final fun inc ()Lio/github/boguszpawlowski/composecalendar/week/Week;
+ public final fun minusWeeks (J)Lio/github/boguszpawlowski/composecalendar/week/Week;
+ public final fun plusWeeks (J)Lio/github/boguszpawlowski/composecalendar/week/Week;
+ public fun toString ()Ljava/lang/String;
+}
+
+public final class io/github/boguszpawlowski/composecalendar/week/Week$Companion {
+ public final fun now (Ljava/time/DayOfWeek;)Lio/github/boguszpawlowski/composecalendar/week/Week;
+ public static synthetic fun now$default (Lio/github/boguszpawlowski/composecalendar/week/Week$Companion;Ljava/time/DayOfWeek;ILjava/lang/Object;)Lio/github/boguszpawlowski/composecalendar/week/Week;
+}
+
+public final class io/github/boguszpawlowski/composecalendar/week/WeekKt {
+ public static final fun between (Ljava/time/temporal/ChronoUnit;Lio/github/boguszpawlowski/composecalendar/week/Week;Lio/github/boguszpawlowski/composecalendar/week/Week;)I
+}
+
diff --git a/Pink/library/build.gradle.kts b/Pink/library/build.gradle.kts
new file mode 100644
index 0000000..6685122
--- /dev/null
+++ b/Pink/library/build.gradle.kts
@@ -0,0 +1,41 @@
+import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
+
+plugins {
+ alias(libs.plugins.android.library)
+ alias(libs.plugins.kotlin.compose)
+}
+
+android {
+ namespace = "io.github.boguszpawlowski.composecalendar"
+ compileSdk = 36
+
+ defaultConfig {
+ minSdk = 24
+ }
+
+ compileOptions {
+ sourceCompatibility = JavaVersion.VERSION_11
+ targetCompatibility = JavaVersion.VERSION_11
+ }
+
+ buildFeatures {
+ compose = true
+ }
+
+ tasks.withType {
+ compilerOptions {
+ freeCompilerArgs.addAll(listOf("-Xexplicit-api=strict", "-Xcontext-receivers"))
+ }
+ }
+}
+
+dependencies {
+ implementation(platform(libs.androidx.compose.bom))
+ implementation(libs.androidx.compose.ui)
+ implementation(libs.androidx.compose.ui.tooling.preview)
+ implementation(libs.androidx.compose.foundation)
+ implementation(libs.androidx.compose.material)
+ implementation(libs.androidx.compose.material.icons.core)
+ implementation(libs.snapper)
+ implementation(libs.timber)
+}
diff --git a/Pink/library/gradle.properties b/Pink/library/gradle.properties
new file mode 100644
index 0000000..9a193f6
--- /dev/null
+++ b/Pink/library/gradle.properties
@@ -0,0 +1,5 @@
+POM_ARTIFACT_ID=composecalendar
+POM_DESCRIPTION=Library for handling the Calendar view in Jetpack Compose.
+POM_PACKAGING=aar
+SONATYPE_HOST=S01
+RELEASE_SIGNING_ENABLED=true
diff --git a/Pink/library/src/main/AndroidManifest.xml b/Pink/library/src/main/AndroidManifest.xml
new file mode 100644
index 0000000..8bdb7e1
--- /dev/null
+++ b/Pink/library/src/main/AndroidManifest.xml
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/Pink/library/src/main/java/io/github/boguszpawlowski/composecalendar/Calendar.kt b/Pink/library/src/main/java/io/github/boguszpawlowski/composecalendar/Calendar.kt
new file mode 100644
index 0000000..b8f335b
--- /dev/null
+++ b/Pink/library/src/main/java/io/github/boguszpawlowski/composecalendar/Calendar.kt
@@ -0,0 +1,286 @@
+@file:Suppress("MatchingDeclarationName")
+
+package io.github.boguszpawlowski.composecalendar
+
+import android.annotation.SuppressLint
+import androidx.compose.foundation.layout.Box
+import androidx.compose.foundation.layout.BoxScope
+import androidx.compose.foundation.layout.Column
+import androidx.compose.foundation.layout.ColumnScope
+import androidx.compose.foundation.layout.PaddingValues
+import androidx.compose.foundation.layout.fillMaxWidth
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.Stable
+import androidx.compose.runtime.remember
+import androidx.compose.runtime.saveable.rememberSaveable
+import androidx.compose.ui.Modifier
+import io.github.boguszpawlowski.composecalendar.day.DayState
+import io.github.boguszpawlowski.composecalendar.day.DefaultDay
+import io.github.boguszpawlowski.composecalendar.header.DefaultMonthHeader
+import io.github.boguszpawlowski.composecalendar.header.MonthState
+import io.github.boguszpawlowski.composecalendar.month.MonthContent
+import io.github.boguszpawlowski.composecalendar.month.MonthPager
+import io.github.boguszpawlowski.composecalendar.selection.DynamicSelectionState
+import io.github.boguszpawlowski.composecalendar.selection.EmptySelectionState
+import io.github.boguszpawlowski.composecalendar.selection.SelectionMode
+import io.github.boguszpawlowski.composecalendar.selection.SelectionState
+import io.github.boguszpawlowski.composecalendar.week.DaysInAWeek
+import io.github.boguszpawlowski.composecalendar.week.DefaultDaysOfWeekHeader
+import io.github.boguszpawlowski.composecalendar.week.rotateRight
+import java.time.DayOfWeek
+import java.time.LocalDate
+import java.time.YearMonth
+import java.time.temporal.WeekFields
+import java.util.Locale
+
+/**
+ * State of the calendar composable
+ *
+ * @property monthState currently showed month
+ * @property selectionState handler for the calendar's selection
+ */
+@Stable
+public class CalendarState(
+ public val monthState: MonthState,
+ public val selectionState: T,
+)
+
+/**
+ * [Calendar] implementation using a [DynamicSelectionState] as a selection handler.
+ *
+ * * Basic usage:
+ * ```
+ * @Composable
+ * fun MainScreen() {
+ * SelectableCalendar()
+ * }
+ * ```
+ *
+ * @param modifier
+ * @param firstDayOfWeek first day of a week, defaults to current locale's
+ * @param today current day, defaults to [LocalDate.now]
+ * @param showAdjacentMonths whenever to show or hide the days from adjacent months
+ * @param horizontalSwipeEnabled whenever user is able to change the month by horizontal swipe
+ * @param weekDaysScrollEnabled if the week days should be scrollable
+ * @param calendarState state of the composable
+ * @param dayContent composable rendering the current day
+ * @param monthHeader header for showing the current month and controls for changing it
+ * @param daysOfWeekHeader header for showing captions for each day of week
+ * @param monthContainer container composable for all the days in current month
+ */
+@Composable
+@SuppressLint("NewApi")
+public fun SelectableCalendar(
+ modifier: Modifier = Modifier,
+ firstDayOfWeek: DayOfWeek = WeekFields.of(Locale.getDefault()).firstDayOfWeek,
+ today: LocalDate = LocalDate.now(),
+ showAdjacentMonths: Boolean = true,
+ horizontalSwipeEnabled: Boolean = true,
+ weekDaysScrollEnabled: Boolean = true,
+ calendarState: CalendarState = rememberSelectableCalendarState(),
+ dayContent: @Composable BoxScope.(DayState) -> Unit = { DefaultDay(it) },
+ monthHeader: @Composable ColumnScope.(MonthState) -> Unit = { DefaultMonthHeader(it) },
+ daysOfWeekHeader: @Composable BoxScope.(List) -> Unit = { DefaultDaysOfWeekHeader(it) },
+ monthContainer: @Composable (content: @Composable (PaddingValues) -> Unit) -> Unit = { content ->
+ Box { content(PaddingValues()) }
+ },
+) {
+ Calendar(
+ modifier = modifier,
+ firstDayOfWeek = firstDayOfWeek,
+ today = today,
+ showAdjacentMonths = showAdjacentMonths,
+ horizontalSwipeEnabled = horizontalSwipeEnabled,
+ weekDaysScrollEnabled = weekDaysScrollEnabled,
+ calendarState = calendarState,
+ dayContent = dayContent,
+ monthHeader = monthHeader,
+ daysOfWeekHeader = daysOfWeekHeader,
+ monthContainer = monthContainer
+ )
+}
+
+/**
+ * [Calendar] implementation without any mechanism for the selection.
+ *
+ * Basic usage:
+ * ```
+ * @Composable
+ * fun MainScreen() {
+ * StaticCalendar()
+ * }
+ * ```
+ *
+ * @param modifier
+ * @param firstDayOfWeek first day of a week, defaults to current locale's
+ * @param today current day, defaults to [LocalDate.now]
+ * @param showAdjacentMonths whenever to show or hide the days from adjacent months
+ * @param horizontalSwipeEnabled whenever user is able to change the month by horizontal swipe
+ * @param weekDaysScrollEnabled if the week days should be scrollable
+ * @param calendarState state of the composable
+ * @param dayContent composable rendering the current day
+ * @param monthHeader header for showing the current month and controls for changing it
+ * @param daysOfWeekHeader header for showing captions for each day of week
+ * @param monthContainer container composable for all the days in current month
+ */
+@Composable
+@SuppressLint("NewApi")
+public fun StaticCalendar(
+ modifier: Modifier = Modifier,
+ firstDayOfWeek: DayOfWeek = WeekFields.of(Locale.getDefault()).firstDayOfWeek,
+ today: LocalDate = LocalDate.now(),
+ showAdjacentMonths: Boolean = true,
+ horizontalSwipeEnabled: Boolean = true,
+ weekDaysScrollEnabled: Boolean = true,
+ calendarState: CalendarState = rememberCalendarState(),
+ dayContent: @Composable BoxScope.(DayState) -> Unit = { DefaultDay(it) },
+ monthHeader: @Composable ColumnScope.(MonthState) -> Unit = { DefaultMonthHeader(it) },
+ daysOfWeekHeader: @Composable BoxScope.(List) -> Unit = { DefaultDaysOfWeekHeader(it) },
+ monthContainer: @Composable (content: @Composable (PaddingValues) -> Unit) -> Unit = { content ->
+ Box { content(PaddingValues()) }
+ },
+) {
+ Calendar(
+ modifier = modifier,
+ firstDayOfWeek = firstDayOfWeek,
+ today = today,
+ showAdjacentMonths = showAdjacentMonths,
+ horizontalSwipeEnabled = horizontalSwipeEnabled,
+ weekDaysScrollEnabled = weekDaysScrollEnabled,
+ calendarState = calendarState,
+ dayContent = dayContent,
+ monthHeader = monthHeader,
+ daysOfWeekHeader = daysOfWeekHeader,
+ monthContainer = monthContainer
+ )
+}
+
+/**
+ * Composable for showing a calendar. The calendar state has to be provided by the call site. If you
+ * want to use built-in implementation, check out:
+ * [SelectableCalendar] - calendar composable handling selection that can be changed at runtime
+ * [StaticCalendar] - calendar without any mechanism for selection
+ *
+ * @param modifier
+ * @param firstDayOfWeek first day of a week, defaults to current locale's
+ * @param today current day, defaults to [LocalDate.now]
+ * @param showAdjacentMonths whenever to show or hide the days from adjacent months
+ * @param horizontalSwipeEnabled whenever user is able to change the month by horizontal swipe
+ * @param calendarState state of the composable
+ * @param dayContent composable rendering the current day
+ * @param monthHeader header for showing the current month and controls for changing it
+ * @param daysOfWeekHeader header for showing captions for each day of week
+ * @param monthContainer container composable for all the days in current month
+ */
+@Composable
+@SuppressLint("NewApi")
+public fun Calendar(
+ calendarState: CalendarState,
+ modifier: Modifier = Modifier,
+ firstDayOfWeek: DayOfWeek = WeekFields.of(Locale.getDefault()).firstDayOfWeek,
+ today: LocalDate = LocalDate.now(),
+ showAdjacentMonths: Boolean = true,
+ horizontalSwipeEnabled: Boolean = true,
+ weekDaysScrollEnabled: Boolean = true,
+ dayContent: @Composable BoxScope.(DayState) -> Unit = { DefaultDay(it) },
+ monthHeader: @Composable ColumnScope.(MonthState) -> Unit = { DefaultMonthHeader(it) },
+ daysOfWeekHeader: @Composable BoxScope.(List) -> Unit = { DefaultDaysOfWeekHeader(it) },
+ monthContainer: @Composable (content: @Composable (PaddingValues) -> Unit) -> Unit = { content ->
+ Box { content(PaddingValues()) }
+ },
+) {
+ val initialMonth = remember { calendarState.monthState.currentMonth }
+ val daysOfWeek = remember(firstDayOfWeek) {
+ DayOfWeek.values().rotateRight(DaysInAWeek - firstDayOfWeek.ordinal)
+ }
+
+ Column(
+ modifier = modifier,
+ ) {
+ monthHeader(calendarState.monthState)
+ if (horizontalSwipeEnabled) {
+ MonthPager(
+ initialMonth = initialMonth,
+ showAdjacentMonths = showAdjacentMonths,
+ monthState = calendarState.monthState,
+ selectionState = calendarState.selectionState,
+ today = today,
+ weekDaysScrollEnabled = weekDaysScrollEnabled,
+ daysOfWeek = daysOfWeek,
+ dayContent = dayContent,
+ weekHeader = daysOfWeekHeader,
+ monthContainer = monthContainer,
+ )
+ } else {
+ MonthContent(
+ modifier = Modifier.fillMaxWidth(),
+ currentMonth = calendarState.monthState.currentMonth,
+ showAdjacentMonths = showAdjacentMonths,
+ selectionState = calendarState.selectionState,
+ today = today,
+ weekDaysScrollEnabled = weekDaysScrollEnabled,
+ daysOfWeek = daysOfWeek,
+ dayContent = dayContent,
+ weekHeader = daysOfWeekHeader,
+ monthContainer = monthContainer,
+ )
+ }
+ }
+}
+
+/**
+ * Helper function for providing a [CalendarState] implementation with selection mechanism.
+ *
+ * @param initialMonth initially rendered month
+ * @param initialSelection initial selection of the composable
+ * @param initialSelectionMode initial mode of the selection
+ * @param confirmSelectionChange callback for optional side-effects handling and vetoing the state change
+ * @param minMonth first month that can be shown
+ * @param maxMonth last month that can be shown
+ */
+@Composable
+@SuppressLint("NewApi")
+public fun rememberSelectableCalendarState(
+ initialMonth: YearMonth = YearMonth.now(),
+ minMonth: YearMonth = initialMonth.minusMonths(DefaultCalendarPagerRange),
+ maxMonth: YearMonth = initialMonth.plusMonths(DefaultCalendarPagerRange),
+ initialSelection: List = emptyList(),
+ initialSelectionMode: SelectionMode = SelectionMode.Single,
+ confirmSelectionChange: (newValue: List) -> Boolean = { true },
+ monthState: MonthState = rememberSaveable(saver = MonthState.Saver()) {
+ MonthState(
+ initialMonth = initialMonth,
+ minMonth = minMonth,
+ maxMonth = maxMonth
+ )
+ },
+ selectionState: DynamicSelectionState = rememberSaveable(
+ saver = DynamicSelectionState.Saver(confirmSelectionChange),
+ ) {
+ DynamicSelectionState(confirmSelectionChange, initialSelection, initialSelectionMode)
+ },
+): CalendarState = remember { CalendarState(monthState, selectionState) }
+
+/**
+ * Helper function for providing a [CalendarState] implementation without a selection mechanism.
+ *
+ * @param initialMonth initially rendered month
+ * @param minMonth first month that can be shown
+ * @param maxMonth last month that can be shown
+ */
+@Composable
+@SuppressLint("NewApi")
+public fun rememberCalendarState(
+ initialMonth: YearMonth = YearMonth.now(),
+ minMonth: YearMonth = initialMonth.minusMonths(DefaultCalendarPagerRange),
+ maxMonth: YearMonth = initialMonth.plusMonths(DefaultCalendarPagerRange),
+ monthState: MonthState = rememberSaveable(saver = MonthState.Saver()) {
+ MonthState(
+ initialMonth = initialMonth,
+ minMonth = minMonth,
+ maxMonth = maxMonth
+ )
+ },
+): CalendarState = remember { CalendarState(monthState, EmptySelectionState) }
+
+internal const val DefaultCalendarPagerRange = 10_000L
diff --git a/Pink/library/src/main/java/io/github/boguszpawlowski/composecalendar/WeekCalendar.kt b/Pink/library/src/main/java/io/github/boguszpawlowski/composecalendar/WeekCalendar.kt
new file mode 100644
index 0000000..28da35a
--- /dev/null
+++ b/Pink/library/src/main/java/io/github/boguszpawlowski/composecalendar/WeekCalendar.kt
@@ -0,0 +1,264 @@
+@file:Suppress("MatchingDeclarationName", "LongParameterList")
+
+package io.github.boguszpawlowski.composecalendar
+
+import android.annotation.SuppressLint
+import androidx.compose.foundation.layout.BoxScope
+import androidx.compose.foundation.layout.Column
+import androidx.compose.foundation.layout.ColumnScope
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.Stable
+import androidx.compose.runtime.remember
+import androidx.compose.runtime.saveable.rememberSaveable
+import androidx.compose.ui.Modifier
+import io.github.boguszpawlowski.composecalendar.day.DayState
+import io.github.boguszpawlowski.composecalendar.day.DefaultDay
+import io.github.boguszpawlowski.composecalendar.header.WeekState
+import io.github.boguszpawlowski.composecalendar.selection.DynamicSelectionState
+import io.github.boguszpawlowski.composecalendar.selection.EmptySelectionState
+import io.github.boguszpawlowski.composecalendar.selection.SelectionMode
+import io.github.boguszpawlowski.composecalendar.selection.SelectionState
+import io.github.boguszpawlowski.composecalendar.week.DaysInAWeek
+import io.github.boguszpawlowski.composecalendar.week.DefaultDaysOfWeekHeader
+import io.github.boguszpawlowski.composecalendar.week.Week
+import io.github.boguszpawlowski.composecalendar.week.WeekContent
+import io.github.boguszpawlowski.composecalendar.week.WeekPager
+import io.github.boguszpawlowski.composecalendar.week.getWeekDays
+import io.github.boguszpawlowski.composecalendar.week.rotateRight
+import java.time.DayOfWeek
+import java.time.LocalDate
+import java.time.temporal.WeekFields
+import java.util.Locale
+import io.github.boguszpawlowski.composecalendar.header.DefaultWeekHeader as DefaultProperWeekHeader
+
+/**
+ * State of the week calendar composable
+ *
+ * @property weekState currently showed week
+ * @property selectionState handler for the calendar's selection
+ */
+@Stable
+public class WeekCalendarState(
+ public val weekState: WeekState,
+ public val selectionState: T,
+)
+
+/**
+ * [WeekCalendar] implementation using a [DynamicSelectionState] as a selection handler.
+ *
+ * * Basic usage:
+ * ```
+ * @Composable
+ * fun MainScreen() {
+ * SelectableWeekCalendar()
+ * }
+ * ```
+ *
+ * @param modifier
+ * @param firstDayOfWeek first day of a week, defaults to current locale's
+ * @param today current day, defaults to [LocalDate.now]
+ * @param horizontalSwipeEnabled whenever user is able to change the week by horizontal swipe
+ * @param weekDaysScrollEnabled if the week days should be scrollable
+ * @param calendarState state of the composable
+ * @param dayContent composable rendering the current day
+ * @param weekHeader header for showing the current week and controls for changing it
+ * @param daysOfWeekHeader header for showing captions for each day of week
+ */
+@Composable
+public fun SelectableWeekCalendar(
+ modifier: Modifier = Modifier,
+ firstDayOfWeek: DayOfWeek = WeekFields.of(Locale.getDefault()).firstDayOfWeek,
+ today: LocalDate = LocalDate.now(),
+ horizontalSwipeEnabled: Boolean = true,
+ weekDaysScrollEnabled: Boolean = true,
+ calendarState: WeekCalendarState = rememberSelectableWeekCalendarState(),
+ dayContent: @Composable BoxScope.(DayState) -> Unit = { DefaultDay(it) },
+ weekHeader: @Composable ColumnScope.(WeekState) -> Unit = {
+ DefaultProperWeekHeader(it)
+ },
+ daysOfWeekHeader: @Composable BoxScope.(List) -> Unit = { DefaultDaysOfWeekHeader(it) },
+) {
+ WeekCalendar(
+ modifier = modifier,
+ calendarState = calendarState,
+ today = today,
+ horizontalSwipeEnabled = horizontalSwipeEnabled,
+ firstDayOfWeek = firstDayOfWeek,
+ weekDaysScrollEnabled = weekDaysScrollEnabled,
+ dayContent = dayContent,
+ weekHeader = weekHeader,
+ daysOfWeekHeader = daysOfWeekHeader,
+ )
+}
+
+/**
+ * [WeekCalendar] implementation without any mechanism for the selection.
+ *
+ * * Basic usage:
+ * ```
+ * @Composable
+ * fun MainScreen() {
+ * StaticWeekCalendar()
+ * }
+ * ```
+ *
+ * @param modifier
+ * @param firstDayOfWeek first day of a week, defaults to current locale's
+ * @param today current day, defaults to [LocalDate.now]
+ * @param horizontalSwipeEnabled whenever user is able to change the week by horizontal swipe
+ * @param calendarState state of the composable
+ * @param dayContent composable rendering the current day
+ * @param weekHeader header for showing the current week and controls for changing it
+ * @param daysOfWeekHeader header for showing captions for each day of week
+ */
+@Composable
+@SuppressLint("NewApi")
+public fun StaticWeekCalendar(
+ modifier: Modifier = Modifier,
+ firstDayOfWeek: DayOfWeek = WeekFields.of(Locale.getDefault()).firstDayOfWeek,
+ today: LocalDate = LocalDate.now(),
+ horizontalSwipeEnabled: Boolean = true,
+ calendarState: WeekCalendarState = rememberWeekCalendarState(),
+ weekDaysScrollEnabled: Boolean = true,
+ dayContent: @Composable BoxScope.(DayState) -> Unit = { DefaultDay(it) },
+ weekHeader: @Composable ColumnScope.(WeekState) -> Unit = {
+ DefaultProperWeekHeader(it)
+ },
+ daysOfWeekHeader: @Composable BoxScope.(List) -> Unit = { DefaultDaysOfWeekHeader(it) },
+) {
+ WeekCalendar(
+ modifier = modifier,
+ calendarState = calendarState,
+ today = today,
+ horizontalSwipeEnabled = horizontalSwipeEnabled,
+ firstDayOfWeek = firstDayOfWeek,
+ weekDaysScrollEnabled = weekDaysScrollEnabled,
+ dayContent = dayContent,
+ weekHeader = weekHeader,
+ daysOfWeekHeader = daysOfWeekHeader,
+ )
+}
+
+/**
+ * Composable for showing a week calendar. The calendar state has to be provided by the call site. If you
+ * want to use built-in implementation, check out:
+ * [SelectableWeekCalendar] - calendar composable handling selection that can be changed at runtime
+ * [StaticWeekCalendar] - calendar without any mechanism for selection
+ *
+ * @param modifier
+ * @param firstDayOfWeek first day of a week, defaults to current locale's
+ * @param today current day, defaults to [LocalDate.now]
+ * @param horizontalSwipeEnabled whenever user is able to change the week by horizontal swipe
+ * @param calendarState state of the composable
+ * @param dayContent composable rendering the current day
+ * @param weekHeader header for showing the current week and controls for changing it
+ * @param daysOfWeekHeader header for showing captions for each day of week
+ */
+@Composable
+@SuppressLint("NewApi")
+public fun WeekCalendar(
+ calendarState: WeekCalendarState,
+ modifier: Modifier = Modifier,
+ today: LocalDate = LocalDate.now(),
+ firstDayOfWeek: DayOfWeek = WeekFields.of(Locale.getDefault()).firstDayOfWeek,
+ horizontalSwipeEnabled: Boolean = true,
+ weekDaysScrollEnabled: Boolean = true,
+ dayContent: @Composable BoxScope.(DayState) -> Unit = { DefaultDay(it) },
+ weekHeader: @Composable ColumnScope.(WeekState) -> Unit = {
+ DefaultProperWeekHeader(it)
+ },
+ daysOfWeekHeader: @Composable BoxScope.(List) -> Unit = { DefaultDaysOfWeekHeader(it) },
+) {
+ val initialWeek = remember { calendarState.weekState.currentWeek }
+ val daysOfWeek = remember(firstDayOfWeek) {
+ DayOfWeek.values().rotateRight(DaysInAWeek - firstDayOfWeek.ordinal)
+ }
+
+ Column(
+ modifier = modifier,
+ ) {
+ weekHeader(calendarState.weekState)
+ if (horizontalSwipeEnabled) {
+ WeekPager(
+ initialWeek = initialWeek,
+ daysOfWeek = daysOfWeek,
+ weekState = calendarState.weekState,
+ selectionState = calendarState.selectionState,
+ today = today,
+ weekDaysScrollEnabled = weekDaysScrollEnabled,
+ dayContent = dayContent,
+ daysOfWeekHeader = daysOfWeekHeader,
+ )
+ } else {
+ WeekContent(
+ daysOfWeek = daysOfWeek,
+ weekDays = calendarState.weekState.currentWeek.getWeekDays(today),
+ selectionState = calendarState.selectionState,
+ weekDaysScrollEnabled = weekDaysScrollEnabled,
+ dayContent = dayContent,
+ daysOfWeekHeader = daysOfWeekHeader,
+ )
+ }
+ }
+}
+
+/**
+ * Helper function for providing a [WeekCalendarState] implementation with selection mechanism.
+ *
+ * @param firstDayOfWeek first day of a week, defaults to current locale's
+ * @param initialWeek initially rendered month
+ * @param initialSelection initial selection of the composable
+ * @param initialSelectionMode initial mode of the selection
+ * @param confirmSelectionChange callback for optional side-effects handling and vetoing the state change
+ * @param minWeek first week that can be shown
+ * @param maxWeek last week that can be shown
+ */
+@Composable
+@SuppressLint("NewApi")
+public fun rememberSelectableWeekCalendarState(
+ firstDayOfWeek: DayOfWeek = WeekFields.of(Locale.getDefault()).firstDayOfWeek,
+ initialWeek: Week = Week.now(firstDayOfWeek),
+ minWeek: Week = initialWeek.minusWeeks(DefaultCalendarPagerRange),
+ maxWeek: Week = initialWeek.plusWeeks(DefaultCalendarPagerRange),
+ initialSelection: List = emptyList(),
+ initialSelectionMode: SelectionMode = SelectionMode.Single,
+ confirmSelectionChange: (newValue: List) -> Boolean = { true },
+ weekState: WeekState = rememberSaveable(saver = WeekState.Saver()) {
+ WeekState(
+ initialWeek = initialWeek,
+ minWeek = minWeek,
+ maxWeek = maxWeek,
+ )
+ },
+ selectionState: DynamicSelectionState = rememberSaveable(
+ saver = DynamicSelectionState.Saver(confirmSelectionChange),
+ ) {
+ DynamicSelectionState(confirmSelectionChange, initialSelection, initialSelectionMode)
+ },
+): WeekCalendarState =
+ remember { WeekCalendarState(weekState, selectionState) }
+
+/**
+ * Helper function for providing a [WeekCalendarState] implementation without a selection mechanism.
+ *
+ * @param firstDayOfWeek first day of a week, defaults to current locale's
+ * @param initialWeek initially rendered week
+ * @param minWeek first week that can be shown
+ * @param maxWeek last week that can be shown
+ */
+@Composable
+@SuppressLint("NewApi")
+public fun rememberWeekCalendarState(
+ firstDayOfWeek: DayOfWeek = WeekFields.of(Locale.getDefault()).firstDayOfWeek,
+ initialWeek: Week = Week.now(firstDayOfWeek),
+ minWeek: Week = initialWeek.minusWeeks(DefaultCalendarPagerRange),
+ maxWeek: Week = initialWeek.plusWeeks(DefaultCalendarPagerRange),
+ weekState: WeekState = rememberSaveable(saver = WeekState.Saver()) {
+ WeekState(
+ initialWeek = initialWeek,
+ minWeek = minWeek,
+ maxWeek = maxWeek,
+ )
+ },
+): WeekCalendarState =
+ remember { WeekCalendarState(weekState, EmptySelectionState) }
diff --git a/Pink/library/src/main/java/io/github/boguszpawlowski/composecalendar/day/Day.kt b/Pink/library/src/main/java/io/github/boguszpawlowski/composecalendar/day/Day.kt
new file mode 100644
index 0000000..e476ce8
--- /dev/null
+++ b/Pink/library/src/main/java/io/github/boguszpawlowski/composecalendar/day/Day.kt
@@ -0,0 +1,16 @@
+package io.github.boguszpawlowski.composecalendar.day
+
+import java.time.LocalDate
+
+/**
+ * Container for basic info about the displayed day
+ *
+ * @param date local date of the day
+ * @param isCurrentDay whenever the day is the today's date
+ * @param isFromCurrentMonth whenever the day is from currently rendered month
+ */
+public interface Day {
+ public val date: LocalDate
+ public val isCurrentDay: Boolean
+ public val isFromCurrentMonth: Boolean
+}
diff --git a/Pink/library/src/main/java/io/github/boguszpawlowski/composecalendar/day/DayState.kt b/Pink/library/src/main/java/io/github/boguszpawlowski/composecalendar/day/DayState.kt
new file mode 100644
index 0000000..a10a299
--- /dev/null
+++ b/Pink/library/src/main/java/io/github/boguszpawlowski/composecalendar/day/DayState.kt
@@ -0,0 +1,16 @@
+package io.github.boguszpawlowski.composecalendar.day
+
+import androidx.compose.runtime.Stable
+import io.github.boguszpawlowski.composecalendar.selection.EmptySelectionState
+import io.github.boguszpawlowski.composecalendar.selection.SelectionState
+
+public typealias NonSelectableDayState = DayState
+
+/**
+ * Contains information about current selection as well as date of rendered day
+ */
+@Stable
+public data class DayState(
+ private val day: Day,
+ val selectionState: T,
+) : Day by day
diff --git a/Pink/library/src/main/java/io/github/boguszpawlowski/composecalendar/day/DefaultDay.kt b/Pink/library/src/main/java/io/github/boguszpawlowski/composecalendar/day/DefaultDay.kt
new file mode 100644
index 0000000..2afd0d4
--- /dev/null
+++ b/Pink/library/src/main/java/io/github/boguszpawlowski/composecalendar/day/DefaultDay.kt
@@ -0,0 +1,63 @@
+package io.github.boguszpawlowski.composecalendar.day
+
+import android.annotation.SuppressLint
+import androidx.compose.foundation.BorderStroke
+import androidx.compose.foundation.clickable
+import androidx.compose.foundation.layout.Box
+import androidx.compose.foundation.layout.aspectRatio
+import androidx.compose.foundation.layout.padding
+import androidx.compose.material.Card
+import androidx.compose.material.MaterialTheme
+import androidx.compose.material.Text
+import androidx.compose.material.contentColorFor
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Alignment
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.unit.dp
+import io.github.boguszpawlowski.composecalendar.selection.SelectionState
+import java.time.LocalDate
+
+/**
+ * Default implementation for day content. It supports different appearance for days from
+ * current and adjacent month, as well as current day and selected day
+ *
+ * @param selectionColor color of the border, when day is selected
+ * @param currentDayColor color of content for the current date
+ * @param onClick callback for interacting with day clicks
+ */
+@Composable
+@SuppressLint("NewApi")
+public fun DefaultDay(
+ state: DayState,
+ modifier: Modifier = Modifier,
+ selectionColor: Color = MaterialTheme.colors.secondary,
+ currentDayColor: Color = MaterialTheme.colors.primary,
+ onClick: (LocalDate) -> Unit = {},
+) {
+ val date = state.date
+ val selectionState = state.selectionState
+
+ val isSelected = selectionState.isDateSelected(date)
+
+ Card(
+ modifier = modifier
+ .aspectRatio(1f)
+ .padding(2.dp),
+ elevation = if (state.isFromCurrentMonth) 4.dp else 0.dp,
+ border = if (state.isCurrentDay) BorderStroke(1.dp, currentDayColor) else null,
+ contentColor = if (isSelected) selectionColor else contentColorFor(
+ backgroundColor = MaterialTheme.colors.surface
+ )
+ ) {
+ Box(
+ modifier = Modifier.clickable {
+ onClick(date)
+ selectionState.onDateSelected(date)
+ },
+ contentAlignment = Alignment.Center,
+ ) {
+ Text(text = date.dayOfMonth.toString())
+ }
+ }
+}
diff --git a/Pink/library/src/main/java/io/github/boguszpawlowski/composecalendar/day/WeekDay.kt b/Pink/library/src/main/java/io/github/boguszpawlowski/composecalendar/day/WeekDay.kt
new file mode 100644
index 0000000..7ac0002
--- /dev/null
+++ b/Pink/library/src/main/java/io/github/boguszpawlowski/composecalendar/day/WeekDay.kt
@@ -0,0 +1,11 @@
+package io.github.boguszpawlowski.composecalendar.day
+
+import androidx.compose.runtime.Immutable
+import java.time.LocalDate
+
+@Immutable
+internal class WeekDay(
+ override val date: LocalDate,
+ override val isCurrentDay: Boolean,
+ override val isFromCurrentMonth: Boolean
+) : Day
diff --git a/Pink/library/src/main/java/io/github/boguszpawlowski/composecalendar/debug/RecomposeHighlighter.kt b/Pink/library/src/main/java/io/github/boguszpawlowski/composecalendar/debug/RecomposeHighlighter.kt
new file mode 100644
index 0000000..61b2744
--- /dev/null
+++ b/Pink/library/src/main/java/io/github/boguszpawlowski/composecalendar/debug/RecomposeHighlighter.kt
@@ -0,0 +1,97 @@
+package io.github.boguszpawlowski.composecalendar.debug
+
+import androidx.compose.runtime.LaunchedEffect
+import androidx.compose.runtime.Stable
+import androidx.compose.runtime.mutableStateOf
+import androidx.compose.runtime.remember
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.composed
+import androidx.compose.ui.draw.drawWithCache
+import androidx.compose.ui.geometry.Offset
+import androidx.compose.ui.geometry.Size
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.drawscope.Fill
+import androidx.compose.ui.graphics.drawscope.Stroke
+import androidx.compose.ui.graphics.lerp
+import androidx.compose.ui.platform.debugInspectorInfo
+import androidx.compose.ui.unit.dp
+import kotlinx.coroutines.delay
+import kotlin.math.min
+
+/**
+ * A [Modifier] that draws a border around elements that are recomposing. The border increases in
+ * size and interpolates from red to green as more recompositions occur before a timeout.
+ */
+@Stable
+internal fun Modifier.recomposeHighlighter(): Modifier = this.then(recomposeModifier)
+
+// Use a single instance + @Stable to ensure that recompositions can enable skipping optimizations
+// Modifier.composed will still remember unique data per call site.
+private val recomposeModifier =
+ Modifier.composed(inspectorInfo = debugInspectorInfo { name = "recomposeHighlighter" }) {
+ // The total number of compositions that have occurred. We're not using a State<> here be
+ // able to read/write the value without invalidating (which would cause infinite
+ // recomposition).
+ val totalCompositions = remember { arrayOf(0L) }
+ totalCompositions[0]++
+
+ // The value of totalCompositions at the last timeout.
+ val totalCompositionsAtLastTimeout = remember { mutableStateOf(0L) }
+
+ // Start the timeout, and reset everytime there's a recomposition. (Using totalCompositions
+ // as the key is really just to cause the timer to restart every composition).
+ LaunchedEffect(totalCompositions[0]) {
+ delay(3000)
+ totalCompositionsAtLastTimeout.value = totalCompositions[0]
+ }
+
+ Modifier.drawWithCache {
+ onDrawWithContent {
+ // Draw actual content.
+ drawContent()
+
+ // Below is to draw the highlight, if necessary. A lot of the logic is copied from
+ // Modifier.border
+ val numCompositionsSinceTimeout =
+ totalCompositions[0] - totalCompositionsAtLastTimeout.value
+
+ val hasValidBorderParams = size.minDimension > 0f
+ if (!hasValidBorderParams || numCompositionsSinceTimeout <= 0) {
+ return@onDrawWithContent
+ }
+
+ val (color, strokeWidthPx) =
+ when (numCompositionsSinceTimeout) {
+ // We need at least one composition to draw, so draw the smallest border
+ // color in blue.
+ 1L -> Color.Blue to 1f
+ // 2 compositions is _probably_ okay.
+ 2L -> Color.Green to 2.dp.toPx()
+ // 3 or more compositions before timeout may indicate an issue. lerp the
+ // color from yellow to red, and continually increase the border size.
+ else -> lerp(
+ Color.Yellow.copy(alpha = 0.8f),
+ Color.Red.copy(alpha = 0.5f),
+ min(1f, (numCompositionsSinceTimeout - 1).toFloat() / 100f)
+ ) to numCompositionsSinceTimeout.toInt().dp.toPx()
+ }
+
+ val halfStroke = strokeWidthPx / 2
+ val topLeft = Offset(halfStroke, halfStroke)
+ val borderSize = Size(size.width - strokeWidthPx, size.height - strokeWidthPx)
+
+ val fillArea = strokeWidthPx * 2 > size.minDimension
+ val rectTopLeft = if (fillArea) Offset.Zero else topLeft
+ val size = if (fillArea) size else borderSize
+ val style = if (fillArea) Fill else Stroke(strokeWidthPx)
+
+ drawRect(
+ brush = SolidColor(color),
+ topLeft = rectTopLeft,
+ size = size,
+ style = style
+ )
+ }
+ }
+ }
diff --git a/Pink/library/src/main/java/io/github/boguszpawlowski/composecalendar/header/DefaultMonthHeader.kt b/Pink/library/src/main/java/io/github/boguszpawlowski/composecalendar/header/DefaultMonthHeader.kt
new file mode 100644
index 0000000..653587c
--- /dev/null
+++ b/Pink/library/src/main/java/io/github/boguszpawlowski/composecalendar/header/DefaultMonthHeader.kt
@@ -0,0 +1,87 @@
+package io.github.boguszpawlowski.composecalendar.header
+
+import android.annotation.SuppressLint
+import androidx.compose.foundation.Image
+import androidx.compose.foundation.layout.Arrangement
+import androidx.compose.foundation.layout.Row
+import androidx.compose.foundation.layout.Spacer
+import androidx.compose.foundation.layout.fillMaxWidth
+import androidx.compose.foundation.layout.width
+import androidx.compose.material.IconButton
+import androidx.compose.material.MaterialTheme
+import androidx.compose.material.Text
+import androidx.compose.material.icons.Icons
+import androidx.compose.material.icons.filled.KeyboardArrowLeft
+import androidx.compose.material.icons.filled.KeyboardArrowRight
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Alignment
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.ColorFilter
+import androidx.compose.ui.platform.testTag
+import androidx.compose.ui.unit.dp
+import java.time.format.TextStyle.FULL
+import java.util.Locale
+
+/**
+ * Default implementation of month header, shows current month and year, as well as
+ * 2 arrows for changing currently showed month
+ */
+@Composable
+@SuppressLint("NewApi")
+public fun DefaultMonthHeader(
+ monthState: MonthState,
+ modifier: Modifier = Modifier,
+) {
+ Row(
+ modifier = modifier.fillMaxWidth(),
+ horizontalArrangement = Arrangement.Center,
+ verticalAlignment = Alignment.CenterVertically,
+ ) {
+ DecrementButton(monthState = monthState)
+ Text(
+ modifier = Modifier.testTag("MonthLabel"),
+ text = monthState.currentMonth.month
+ .getDisplayName(FULL, Locale.getDefault())
+ .lowercase()
+ .replaceFirstChar { it.titlecase() },
+ style = MaterialTheme.typography.h4,
+ )
+ Spacer(modifier = Modifier.width(8.dp))
+ Text(text = monthState.currentMonth.year.toString(), style = MaterialTheme.typography.h4)
+ IncrementButton(monthState = monthState)
+ }
+}
+
+@Composable
+private fun DecrementButton(
+ monthState: MonthState,
+) {
+ IconButton(
+ modifier = Modifier.testTag("Decrement"),
+ enabled = monthState.currentMonth > monthState.minMonth,
+ onClick = { monthState.currentMonth = monthState.currentMonth.minusMonths(1) }
+ ) {
+ Image(
+ imageVector = Icons.Default.KeyboardArrowLeft,
+ colorFilter = ColorFilter.tint(MaterialTheme.colors.onSurface),
+ contentDescription = "Previous",
+ )
+ }
+}
+
+@Composable
+private fun IncrementButton(
+ monthState: MonthState,
+) {
+ IconButton(
+ modifier = Modifier.testTag("Increment"),
+ enabled = monthState.currentMonth < monthState.maxMonth,
+ onClick = { monthState.currentMonth = monthState.currentMonth.plusMonths(1) }
+ ) {
+ Image(
+ imageVector = Icons.Default.KeyboardArrowRight,
+ colorFilter = ColorFilter.tint(MaterialTheme.colors.onSurface),
+ contentDescription = "Next",
+ )
+ }
+}
diff --git a/Pink/library/src/main/java/io/github/boguszpawlowski/composecalendar/header/DefaultWeekHeader.kt b/Pink/library/src/main/java/io/github/boguszpawlowski/composecalendar/header/DefaultWeekHeader.kt
new file mode 100644
index 0000000..cb99137
--- /dev/null
+++ b/Pink/library/src/main/java/io/github/boguszpawlowski/composecalendar/header/DefaultWeekHeader.kt
@@ -0,0 +1,91 @@
+package io.github.boguszpawlowski.composecalendar.header
+
+import android.annotation.SuppressLint
+import androidx.compose.foundation.Image
+import androidx.compose.foundation.layout.Arrangement
+import androidx.compose.foundation.layout.Row
+import androidx.compose.foundation.layout.Spacer
+import androidx.compose.foundation.layout.fillMaxWidth
+import androidx.compose.foundation.layout.width
+import androidx.compose.material.IconButton
+import androidx.compose.material.MaterialTheme
+import androidx.compose.material.Text
+import androidx.compose.material.icons.Icons
+import androidx.compose.material.icons.filled.KeyboardArrowLeft
+import androidx.compose.material.icons.filled.KeyboardArrowRight
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Alignment
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.ColorFilter
+import androidx.compose.ui.platform.testTag
+import androidx.compose.ui.unit.dp
+import java.time.format.TextStyle.FULL
+import java.util.Locale
+
+/**
+ * Default implementation of week header, shows current month and year, as well as
+ * 2 arrows for changing currently showed month
+ */
+@Composable
+@Suppress("LongMethod")
+@SuppressLint("NewApi")
+public fun DefaultWeekHeader(
+ weekState: WeekState,
+ modifier: Modifier = Modifier,
+) {
+ Row(
+ modifier = modifier.fillMaxWidth(),
+ horizontalArrangement = Arrangement.Center,
+ verticalAlignment = Alignment.CenterVertically,
+ ) {
+ DecrementButton(weekState = weekState)
+ Text(
+ modifier = Modifier.testTag("WeekLabel"),
+ text = weekState.currentWeek.yearMonth.month
+ .getDisplayName(FULL, Locale.getDefault())
+ .lowercase()
+ .replaceFirstChar { it.titlecase() },
+ style = MaterialTheme.typography.h4,
+ )
+ Spacer(modifier = Modifier.width(8.dp))
+ Text(
+ text = weekState.currentWeek.yearMonth.year.toString(),
+ style = MaterialTheme.typography.h4
+ )
+ IncrementButton(monthState = weekState)
+ }
+}
+
+@Composable
+private fun DecrementButton(
+ weekState: WeekState,
+) {
+ IconButton(
+ modifier = Modifier.testTag("Decrement"),
+ enabled = weekState.currentWeek > weekState.minWeek,
+ onClick = { weekState.currentWeek = weekState.currentWeek.dec() }
+ ) {
+ Image(
+ imageVector = Icons.Default.KeyboardArrowLeft,
+ colorFilter = ColorFilter.tint(MaterialTheme.colors.onSurface),
+ contentDescription = "Previous",
+ )
+ }
+}
+
+@Composable
+private fun IncrementButton(
+ monthState: WeekState,
+) {
+ IconButton(
+ modifier = Modifier.testTag("Increment"),
+ enabled = monthState.currentWeek < monthState.maxWeek,
+ onClick = { monthState.currentWeek = monthState.currentWeek.inc() }
+ ) {
+ Image(
+ imageVector = Icons.Default.KeyboardArrowRight,
+ colorFilter = ColorFilter.tint(MaterialTheme.colors.onSurface),
+ contentDescription = "Next",
+ )
+ }
+}
diff --git a/Pink/library/src/main/java/io/github/boguszpawlowski/composecalendar/header/MonthState.kt b/Pink/library/src/main/java/io/github/boguszpawlowski/composecalendar/header/MonthState.kt
new file mode 100644
index 0000000..2934798
--- /dev/null
+++ b/Pink/library/src/main/java/io/github/boguszpawlowski/composecalendar/header/MonthState.kt
@@ -0,0 +1,76 @@
+package io.github.boguszpawlowski.composecalendar.header
+
+import android.annotation.SuppressLint
+import androidx.compose.runtime.Stable
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.mutableStateOf
+import androidx.compose.runtime.saveable.Saver
+import androidx.compose.runtime.saveable.mapSaver
+import androidx.compose.runtime.setValue
+import java.time.YearMonth
+
+@Suppress("FunctionName") // Factory function
+public fun MonthState(
+ initialMonth: YearMonth,
+ minMonth: YearMonth,
+ maxMonth: YearMonth,
+): MonthState = MonthStateImpl(initialMonth, minMonth, maxMonth)
+
+@Stable
+public interface MonthState {
+ public var currentMonth: YearMonth
+ public var minMonth: YearMonth
+ public var maxMonth: YearMonth
+
+ public companion object {
+ public fun Saver(): Saver = mapSaver(
+ save = { monthState ->
+ mapOf(
+ "currentMonth" to monthState.currentMonth.toString(),
+ "minMonth" to monthState.minMonth.toString(),
+ "maxMonth" to monthState.maxMonth.toString(),
+ )
+ },
+ restore = { restoreMap ->
+ MonthState(
+ YearMonth.parse(restoreMap["currentMonth"] as String),
+ YearMonth.parse(restoreMap["minMonth"] as String),
+ YearMonth.parse(restoreMap["maxMonth"] as String),
+ )
+ }
+ )
+ }
+}
+
+@Stable
+@SuppressLint("NewApi")
+private class MonthStateImpl(
+ initialMonth: YearMonth,
+ minMonth: YearMonth,
+ maxMonth: YearMonth,
+) : MonthState {
+
+ private var _currentMonth by mutableStateOf(initialMonth)
+ private var _minMonth by mutableStateOf(minMonth)
+ private var _maxMonth by mutableStateOf(maxMonth)
+
+ override var currentMonth: YearMonth
+ get() = _currentMonth
+ set(value) {
+ _currentMonth = value
+ }
+
+ override var minMonth: YearMonth
+ get() = _minMonth
+ set(value) {
+ if (value > _maxMonth) return
+ _minMonth = value
+ }
+
+ override var maxMonth: YearMonth
+ get() = _maxMonth
+ set(value) {
+ if (value < _minMonth) return
+ _maxMonth = value
+ }
+}
diff --git a/Pink/library/src/main/java/io/github/boguszpawlowski/composecalendar/header/WeekState.kt b/Pink/library/src/main/java/io/github/boguszpawlowski/composecalendar/header/WeekState.kt
new file mode 100644
index 0000000..f64182a
--- /dev/null
+++ b/Pink/library/src/main/java/io/github/boguszpawlowski/composecalendar/header/WeekState.kt
@@ -0,0 +1,86 @@
+package io.github.boguszpawlowski.composecalendar.header
+
+import android.annotation.SuppressLint
+import androidx.compose.runtime.Stable
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.mutableStateOf
+import androidx.compose.runtime.saveable.Saver
+import androidx.compose.runtime.saveable.mapSaver
+import androidx.compose.runtime.setValue
+import io.github.boguszpawlowski.composecalendar.week.Week
+import java.time.LocalDate
+
+@Suppress("FunctionName") // Factory function
+public fun WeekState(
+ initialWeek: Week,
+ minWeek: Week,
+ maxWeek: Week,
+): WeekState = WeekStateImpl(
+ initialWeek = initialWeek,
+ minWeek = minWeek,
+ maxWeek = maxWeek,
+)
+
+@Stable
+@SuppressLint("NewApi")
+public interface WeekState {
+ public var currentWeek: Week
+ public var minWeek: Week
+ public var maxWeek: Week
+
+ public companion object {
+ @Suppress("FunctionName") // Factory function
+ public fun Saver(): Saver = mapSaver(
+ save = { weekState ->
+ mapOf(
+ CurrentWeekKey to weekState.currentWeek.days[0].toString(),
+ MinWeekKey to weekState.minWeek.days[0].toString(),
+ MaxWeekKey to weekState.maxWeek.days[0].toString(),
+ )
+ },
+ restore = { restoreMap ->
+ WeekState(
+ initialWeek = Week(firstDay = LocalDate.parse(restoreMap[CurrentWeekKey] as String)),
+ minWeek = Week(firstDay = LocalDate.parse(restoreMap[MinWeekKey] as String)),
+ maxWeek = Week(firstDay = LocalDate.parse(restoreMap[MaxWeekKey] as String)),
+ )
+ }
+ )
+
+ private const val CurrentWeekKey = "CurrentWeek"
+ private const val MinWeekKey = "MinWeek"
+ private const val MaxWeekKey = "MaxWeek"
+ }
+}
+
+@Stable
+private class WeekStateImpl(
+ initialWeek: Week,
+ minWeek: Week,
+ maxWeek: Week,
+) : WeekState {
+
+ private var _currentWeek by mutableStateOf(initialWeek)
+ private var _minWeek by mutableStateOf(minWeek)
+ private var _maxWeek by mutableStateOf(maxWeek)
+
+ override var currentWeek: Week
+ get() = _currentWeek
+ set(value) {
+ _currentWeek = value
+ }
+
+ override var minWeek: Week
+ get() = _minWeek
+ set(value) {
+ if (value > _maxWeek) return
+ _minWeek = value
+ }
+
+ override var maxWeek: Week
+ get() = _maxWeek
+ set(value) {
+ if (value < _minWeek) return
+ _maxWeek = value
+ }
+}
diff --git a/Pink/library/src/main/java/io/github/boguszpawlowski/composecalendar/month/MonthContent.kt b/Pink/library/src/main/java/io/github/boguszpawlowski/composecalendar/month/MonthContent.kt
new file mode 100644
index 0000000..2d02ed1
--- /dev/null
+++ b/Pink/library/src/main/java/io/github/boguszpawlowski/composecalendar/month/MonthContent.kt
@@ -0,0 +1,162 @@
+package io.github.boguszpawlowski.composecalendar.month
+
+import androidx.compose.animation.rememberSplineBasedDecay
+import androidx.compose.foundation.layout.Box
+import androidx.compose.foundation.layout.BoxScope
+import androidx.compose.foundation.layout.Column
+import androidx.compose.foundation.layout.PaddingValues
+import androidx.compose.foundation.layout.fillMaxWidth
+import androidx.compose.foundation.layout.padding
+import androidx.compose.foundation.layout.wrapContentHeight
+import androidx.compose.foundation.lazy.LazyRow
+import androidx.compose.foundation.lazy.rememberLazyListState
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.remember
+import androidx.compose.runtime.rememberCoroutineScope
+import androidx.compose.ui.Alignment
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.platform.testTag
+import dev.chrisbanes.snapper.ExperimentalSnapperApi
+import dev.chrisbanes.snapper.SnapOffsets
+import dev.chrisbanes.snapper.SnapperFlingBehaviorDefaults
+import dev.chrisbanes.snapper.SnapperLayoutInfo
+import dev.chrisbanes.snapper.rememberSnapperFlingBehavior
+import io.github.boguszpawlowski.composecalendar.day.DayState
+import io.github.boguszpawlowski.composecalendar.header.MonthState
+import io.github.boguszpawlowski.composecalendar.selection.SelectionState
+import io.github.boguszpawlowski.composecalendar.week.WeekRow
+import io.github.boguszpawlowski.composecalendar.week.getWeeks
+import java.time.DayOfWeek
+import java.time.LocalDate
+import java.time.YearMonth
+import java.time.temporal.ChronoUnit
+
+@OptIn(ExperimentalSnapperApi::class)
+@Composable
+@Suppress("LongMethod", "NewApi")
+internal fun MonthPager(
+ initialMonth: YearMonth,
+ showAdjacentMonths: Boolean,
+ selectionState: T,
+ monthState: MonthState,
+ daysOfWeek: List,
+ today: LocalDate,
+ modifier: Modifier = Modifier,
+ weekDaysScrollEnabled: Boolean = true,
+ dayContent: @Composable BoxScope.(DayState) -> Unit,
+ weekHeader: @Composable BoxScope.(List) -> Unit,
+ monthContainer: @Composable (content: @Composable (PaddingValues) -> Unit) -> Unit,
+) {
+ val coroutineScope = rememberCoroutineScope()
+
+ val initialFirstVisibleItemIndex = remember(initialMonth, monthState.minMonth) {
+ ChronoUnit.MONTHS.between(monthState.minMonth, initialMonth).toInt()
+ }
+ val listState = rememberLazyListState(
+ initialFirstVisibleItemIndex = initialFirstVisibleItemIndex,
+ )
+ val flingBehavior = rememberSnapperFlingBehavior(
+ lazyListState = listState,
+ snapOffsetForItem = SnapOffsets.Start,
+ springAnimationSpec = SnapperFlingBehaviorDefaults.SpringAnimationSpec,
+ decayAnimationSpec = rememberSplineBasedDecay(),
+ snapIndex = coerceSnapIndex,
+ )
+
+ val monthListState = remember {
+ MonthListState(
+ coroutineScope = coroutineScope,
+ monthState = monthState,
+ listState = listState,
+ )
+ }
+
+ Column(modifier = Modifier.fillMaxWidth()) {
+ if (weekDaysScrollEnabled.not()) {
+ Box(
+ modifier = Modifier
+ .wrapContentHeight()
+ .fillMaxWidth(),
+ content = { weekHeader(daysOfWeek) },
+ )
+ }
+ val pagerCount = remember(monthState.minMonth, monthState.maxMonth) {
+ ChronoUnit.MONTHS.between(monthState.minMonth, monthState.maxMonth).toInt() + 1
+ }
+ LazyRow(
+ modifier = modifier.testTag("MonthPager"),
+ state = listState,
+ flingBehavior = flingBehavior,
+ verticalAlignment = Alignment.Top,
+ ) {
+ items(
+ count = pagerCount,
+ key = { index ->
+ monthListState.getMonthForPage(index).let { "${it.year}-${it.monthValue}" }
+ }
+ ) { index ->
+ MonthContent(
+ modifier = Modifier.fillParentMaxWidth(),
+ showAdjacentMonths = showAdjacentMonths,
+ selectionState = selectionState,
+ currentMonth = monthListState.getMonthForPage(index),
+ today = today,
+ weekDaysScrollEnabled = weekDaysScrollEnabled,
+ daysOfWeek = daysOfWeek,
+ dayContent = dayContent,
+ weekHeader = weekHeader,
+ monthContainer = monthContainer
+ )
+ }
+ }
+ }
+}
+
+@Composable
+internal fun MonthContent(
+ showAdjacentMonths: Boolean,
+ selectionState: T,
+ currentMonth: YearMonth,
+ daysOfWeek: List,
+ today: LocalDate,
+ modifier: Modifier = Modifier,
+ weekDaysScrollEnabled: Boolean = true,
+ dayContent: @Composable BoxScope.(DayState) -> Unit,
+ weekHeader: @Composable BoxScope.(List) -> Unit,
+ monthContainer: @Composable (content: @Composable (PaddingValues) -> Unit) -> Unit,
+) {
+ Column {
+ if (weekDaysScrollEnabled) {
+ Box(
+ modifier = modifier
+ .wrapContentHeight(),
+ content = { weekHeader(daysOfWeek) },
+ )
+ }
+ monthContainer { paddingValues ->
+ Column(
+ modifier = modifier
+ .padding(paddingValues)
+ ) {
+ currentMonth.getWeeks(
+ includeAdjacentMonths = showAdjacentMonths,
+ firstDayOfTheWeek = daysOfWeek.first(),
+ today = today,
+ ).forEach { week ->
+ WeekRow(
+ weekDays = week,
+ selectionState = selectionState,
+ dayContent = dayContent,
+ )
+ }
+ }
+ }
+ }
+}
+
+@OptIn(ExperimentalSnapperApi::class)
+internal val coerceSnapIndex: (SnapperLayoutInfo, startIndex: Int, targetIndex: Int) -> Int =
+ { _, startIndex, targetIndex ->
+ targetIndex
+ .coerceIn(startIndex - 1, startIndex + 1)
+ }
diff --git a/Pink/library/src/main/java/io/github/boguszpawlowski/composecalendar/month/MonthListState.kt b/Pink/library/src/main/java/io/github/boguszpawlowski/composecalendar/month/MonthListState.kt
new file mode 100644
index 0000000..d85fe24
--- /dev/null
+++ b/Pink/library/src/main/java/io/github/boguszpawlowski/composecalendar/month/MonthListState.kt
@@ -0,0 +1,74 @@
+package io.github.boguszpawlowski.composecalendar.month
+
+import android.annotation.SuppressLint
+import androidx.compose.foundation.lazy.LazyListState
+import androidx.compose.runtime.Stable
+import androidx.compose.runtime.derivedStateOf
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.snapshotFlow
+import io.github.boguszpawlowski.composecalendar.header.MonthState
+import io.github.boguszpawlowski.composecalendar.util.throttleOnOffset
+import kotlinx.coroutines.CoroutineScope
+import kotlinx.coroutines.flow.launchIn
+import kotlinx.coroutines.flow.onEach
+import kotlinx.coroutines.launch
+import java.time.YearMonth
+import java.time.temporal.ChronoUnit
+
+@Stable
+@SuppressLint("NewApi")
+internal class MonthListState(
+ private val coroutineScope: CoroutineScope,
+ private val monthState: MonthState,
+ private val listState: LazyListState,
+) {
+
+ private val currentFirstVisibleMonth by derivedStateOf {
+ getMonthForPage(listState.firstVisibleItemIndex)
+ }
+
+ init {
+ snapshotFlow { monthState.currentMonth }.onEach { month ->
+ moveToMonth(month)
+ }.launchIn(coroutineScope)
+
+ with(listState) {
+ snapshotFlow { currentFirstVisibleMonth }
+ .throttleOnOffset()
+ .onEach { newMonth ->
+ monthState.currentMonth = newMonth
+ }.launchIn(coroutineScope)
+ }
+ }
+
+ fun getMonthForPage(index: Int): YearMonth =
+ monthState.minMonth.plusMonths(index.toLong())
+
+ private fun moveToMonth(month: YearMonth) {
+ if (month == currentFirstVisibleMonth) return
+ coroutineScope.launch {
+ listState.animateScrollToItem(ChronoUnit.MONTHS.between(monthState.minMonth, month).toInt())
+ }
+ }
+
+ override fun equals(other: Any?): Boolean {
+ if (this === other) return true
+ if (javaClass != other?.javaClass) return false
+
+ other as MonthListState
+
+ if (monthState != other.monthState) return false
+ if (listState != other.listState) return false
+
+ return true
+ }
+
+ override fun hashCode(): Int {
+ var result = monthState.hashCode()
+ result = 31 * result + listState.hashCode()
+ return result
+ }
+}
+
+private operator fun YearMonth.minus(other: YearMonth) =
+ ChronoUnit.MONTHS.between(other, this)
diff --git a/Pink/library/src/main/java/io/github/boguszpawlowski/composecalendar/selection/DynamicSelectionHandler.kt b/Pink/library/src/main/java/io/github/boguszpawlowski/composecalendar/selection/DynamicSelectionHandler.kt
new file mode 100644
index 0000000..d3f244e
--- /dev/null
+++ b/Pink/library/src/main/java/io/github/boguszpawlowski/composecalendar/selection/DynamicSelectionHandler.kt
@@ -0,0 +1,35 @@
+package io.github.boguszpawlowski.composecalendar.selection
+
+import android.annotation.SuppressLint
+import io.github.boguszpawlowski.composecalendar.util.addOrRemoveIfExists
+import java.time.LocalDate
+
+/**
+ * Helper class for calculating new selection, when using a [DynamicSelectionState] approach.
+ * @param date clicked on date
+ * @param selection current selection
+ * @param selectionMode current selection mode
+ * @returns new selection in a form of a list of local dates.
+ */
+@SuppressLint("NewApi")
+public object DynamicSelectionHandler {
+ public fun calculateNewSelection(
+ date: LocalDate,
+ selection: List,
+ selectionMode: SelectionMode,
+ ): List = when (selectionMode) {
+ SelectionMode.None -> emptyList()
+ SelectionMode.Single -> if (date == selection.firstOrNull()) {
+ emptyList()
+ } else {
+ listOf(date)
+ }
+ SelectionMode.Multiple -> selection.addOrRemoveIfExists(date)
+ SelectionMode.Period -> when {
+ date.isBefore(selection.startOrMax()) -> listOf(date)
+ date.isAfter(selection.startOrMax()) -> selection.fillUpTo(date)
+ date == selection.startOrMax() -> emptyList()
+ else -> selection
+ }
+ }
+}
diff --git a/Pink/library/src/main/java/io/github/boguszpawlowski/composecalendar/selection/SelectionExtensions.kt b/Pink/library/src/main/java/io/github/boguszpawlowski/composecalendar/selection/SelectionExtensions.kt
new file mode 100644
index 0000000..0fdb706
--- /dev/null
+++ b/Pink/library/src/main/java/io/github/boguszpawlowski/composecalendar/selection/SelectionExtensions.kt
@@ -0,0 +1,15 @@
+package io.github.boguszpawlowski.composecalendar.selection
+
+import android.annotation.SuppressLint
+import java.time.LocalDate
+
+@SuppressLint("NewApi")
+internal fun Collection.startOrMax() = firstOrNull() ?: LocalDate.MAX
+
+internal fun Collection.endOrNull() = drop(1).lastOrNull()
+
+@SuppressLint("NewApi")
+internal fun Collection.fillUpTo(date: LocalDate) =
+ (0..date.toEpochDay() - first().toEpochDay()).map {
+ first().plusDays(it)
+ }
diff --git a/Pink/library/src/main/java/io/github/boguszpawlowski/composecalendar/selection/SelectionMode.kt b/Pink/library/src/main/java/io/github/boguszpawlowski/composecalendar/selection/SelectionMode.kt
new file mode 100644
index 0000000..7a1aeee
--- /dev/null
+++ b/Pink/library/src/main/java/io/github/boguszpawlowski/composecalendar/selection/SelectionMode.kt
@@ -0,0 +1,15 @@
+package io.github.boguszpawlowski.composecalendar.selection
+
+/**
+ * Selection modes for the [DynamicSelectionState]
+ * None - no selection allowed
+ * Single - only one date selected
+ * Multiple - multiple dates can be selected
+ * Period - period can be selected
+ */
+public enum class SelectionMode {
+ None,
+ Single,
+ Multiple,
+ Period,
+}
diff --git a/Pink/library/src/main/java/io/github/boguszpawlowski/composecalendar/selection/SelectionState.kt b/Pink/library/src/main/java/io/github/boguszpawlowski/composecalendar/selection/SelectionState.kt
new file mode 100644
index 0000000..79448f5
--- /dev/null
+++ b/Pink/library/src/main/java/io/github/boguszpawlowski/composecalendar/selection/SelectionState.kt
@@ -0,0 +1,83 @@
+package io.github.boguszpawlowski.composecalendar.selection
+
+import android.annotation.SuppressLint
+import androidx.compose.runtime.Immutable
+import androidx.compose.runtime.Stable
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.mutableStateOf
+import androidx.compose.runtime.saveable.Saver
+import androidx.compose.runtime.saveable.listSaver
+import androidx.compose.runtime.setValue
+import java.time.LocalDate
+
+@Stable
+public interface SelectionState {
+ public fun isDateSelected(date: LocalDate): Boolean = false
+ public fun onDateSelected(date: LocalDate) { }
+}
+
+/**
+ * Class that enables for dynamically changing selection modes in the runtime. Depending on the mode, selection changes differently.
+ * Mode can be varied by setting desired [SelectionMode] in the [selectionMode] mutable property.
+ * @param confirmSelectionChange return false from this callback to veto the selection change
+ */
+@Stable
+@SuppressLint("NewApi")
+public class DynamicSelectionState(
+ private val confirmSelectionChange: (newValue: List) -> Boolean = { true },
+ selection: List,
+ selectionMode: SelectionMode,
+) : SelectionState {
+
+ private var _selection by mutableStateOf(selection)
+ private var _selectionMode by mutableStateOf(selectionMode)
+
+ public var selection: List
+ get() = _selection
+ set(value) {
+ if (value != selection && confirmSelectionChange(value)) {
+ _selection = value
+ }
+ }
+
+ public var selectionMode: SelectionMode
+ get() = _selectionMode
+ set(value) {
+ if (value != selectionMode) {
+ _selection = emptyList()
+ _selectionMode = value
+ }
+ }
+
+ override fun isDateSelected(date: LocalDate): Boolean = selection.contains(date)
+
+ override fun onDateSelected(date: LocalDate) {
+ selection = DynamicSelectionHandler.calculateNewSelection(date, selection, selectionMode)
+ }
+
+ internal companion object {
+ @Suppress("FunctionName", "UNCHECKED_CAST") // Factory function
+ fun Saver(
+ confirmSelectionChange: (newValue: List) -> Boolean,
+ ): Saver =
+ listSaver(
+ save = { raw ->
+ listOf(raw.selectionMode, raw.selection.map { it.toString() })
+ },
+ restore = { restored ->
+ DynamicSelectionState(
+ confirmSelectionChange = confirmSelectionChange,
+ selectionMode = restored[0] as SelectionMode,
+ selection = (restored[1] as? List)?.map { LocalDate.parse(it) }.orEmpty(),
+ )
+ }
+ )
+ }
+}
+
+@Immutable
+public object EmptySelectionState : SelectionState {
+ override fun isDateSelected(date: LocalDate): Boolean = false
+
+ override fun onDateSelected(date: LocalDate): Unit = Unit
+}
diff --git a/Pink/library/src/main/java/io/github/boguszpawlowski/composecalendar/util/DateUtil.kt b/Pink/library/src/main/java/io/github/boguszpawlowski/composecalendar/util/DateUtil.kt
new file mode 100644
index 0000000..76154cf
--- /dev/null
+++ b/Pink/library/src/main/java/io/github/boguszpawlowski/composecalendar/util/DateUtil.kt
@@ -0,0 +1,13 @@
+package io.github.boguszpawlowski.composecalendar.util
+
+import java.time.DayOfWeek
+import java.time.LocalDate
+
+internal fun Collection.addOrRemoveIfExists(date: LocalDate) =
+ if (contains(date)) {
+ this - date
+ } else {
+ this + date
+ }
+
+internal infix fun DayOfWeek.daysUntil(other: DayOfWeek) = (7 + (value - other.value)) % 7
diff --git a/Pink/library/src/main/java/io/github/boguszpawlowski/composecalendar/util/ListStateExtensions.kt b/Pink/library/src/main/java/io/github/boguszpawlowski/composecalendar/util/ListStateExtensions.kt
new file mode 100644
index 0000000..07c576d
--- /dev/null
+++ b/Pink/library/src/main/java/io/github/boguszpawlowski/composecalendar/util/ListStateExtensions.kt
@@ -0,0 +1,19 @@
+package io.github.boguszpawlowski.composecalendar.util
+
+import androidx.compose.foundation.lazy.LazyListState
+import androidx.compose.runtime.snapshotFlow
+import kotlinx.coroutines.flow.Flow
+import kotlinx.coroutines.flow.combine
+import kotlinx.coroutines.flow.filter
+import kotlinx.coroutines.flow.map
+
+context(LazyListState) internal fun Flow.throttleOnOffset() =
+ combine(
+ snapshotFlow { firstVisibleItemScrollOffset }
+ ) { newMonth, offset ->
+ newMonth to (offset <= MinimalOffsetForEmit)
+ }.filter { (_, shouldUpdate) ->
+ shouldUpdate
+ }.map { (newValue, _) -> newValue }
+
+private const val MinimalOffsetForEmit = 10
diff --git a/Pink/library/src/main/java/io/github/boguszpawlowski/composecalendar/util/YearMonthExtensions.kt b/Pink/library/src/main/java/io/github/boguszpawlowski/composecalendar/util/YearMonthExtensions.kt
new file mode 100644
index 0000000..f3479b0
--- /dev/null
+++ b/Pink/library/src/main/java/io/github/boguszpawlowski/composecalendar/util/YearMonthExtensions.kt
@@ -0,0 +1,7 @@
+package io.github.boguszpawlowski.composecalendar.util
+
+import java.time.YearMonth
+
+internal operator fun YearMonth.dec() = this.minusMonths(1)
+
+internal operator fun YearMonth.inc() = this.plusMonths(1)
diff --git a/Pink/library/src/main/java/io/github/boguszpawlowski/composecalendar/week/DefaultWeekHeader.kt b/Pink/library/src/main/java/io/github/boguszpawlowski/composecalendar/week/DefaultWeekHeader.kt
new file mode 100644
index 0000000..b5d7cdb
--- /dev/null
+++ b/Pink/library/src/main/java/io/github/boguszpawlowski/composecalendar/week/DefaultWeekHeader.kt
@@ -0,0 +1,61 @@
+package io.github.boguszpawlowski.composecalendar.week
+
+import android.annotation.SuppressLint
+import androidx.compose.foundation.layout.Row
+import androidx.compose.foundation.layout.wrapContentHeight
+import androidx.compose.material.Text
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.text.style.TextAlign
+import java.time.DayOfWeek
+import java.time.format.TextStyle.SHORT
+import java.util.Locale
+import kotlin.DeprecationLevel.WARNING
+
+@Composable
+@Deprecated(
+ level = WARNING,
+ replaceWith = ReplaceWith(
+ "DefaultDaysOfWeekHeader(daysOfWeek, modifier)",
+ "io.github.boguszpawlowski.composecalendar.week.DefaultDaysOfWeekHeader",
+ ),
+ message = "Replace with DefaultDaysOfWeekHeader, DefaultWeekHeader will be removed in future versions"
+)
+@SuppressLint("NewApi")
+public fun DefaultWeekHeader(
+ daysOfWeek: List,
+ modifier: Modifier = Modifier,
+) {
+ Row(modifier = modifier) {
+ daysOfWeek.forEach { dayOfWeek ->
+ Text(
+ textAlign = TextAlign.Center,
+ text = dayOfWeek.getDisplayName(SHORT, Locale.getDefault()),
+ modifier = modifier
+ .weight(1f)
+ .wrapContentHeight()
+ )
+ }
+ }
+}
+
+@Composable
+@SuppressLint("NewApi")
+public fun DefaultDaysOfWeekHeader(
+ daysOfWeek: List,
+ modifier: Modifier = Modifier,
+) {
+ Row(modifier = modifier) {
+ daysOfWeek.forEach { dayOfWeek ->
+ Text(
+ textAlign = TextAlign.Center,
+ text = dayOfWeek.getDisplayName(SHORT, Locale.getDefault()),
+ modifier = modifier
+ .weight(1f)
+ .wrapContentHeight()
+ )
+ }
+ }
+}
+
+internal fun Array.rotateRight(n: Int): List = takeLast(n) + dropLast(n)
diff --git a/Pink/library/src/main/java/io/github/boguszpawlowski/composecalendar/week/Week.kt b/Pink/library/src/main/java/io/github/boguszpawlowski/composecalendar/week/Week.kt
new file mode 100644
index 0000000..815cedc
--- /dev/null
+++ b/Pink/library/src/main/java/io/github/boguszpawlowski/composecalendar/week/Week.kt
@@ -0,0 +1,55 @@
+package io.github.boguszpawlowski.composecalendar.week
+
+import android.annotation.SuppressLint
+import io.github.boguszpawlowski.composecalendar.selection.fillUpTo
+import io.github.boguszpawlowski.composecalendar.util.daysUntil
+import java.time.DayOfWeek
+import java.time.LocalDate
+import java.time.YearMonth
+import java.time.temporal.ChronoUnit
+import java.time.temporal.WeekFields
+import java.util.Locale
+
+@SuppressLint("NewApi")
+public data class Week(
+ val days: List,
+) {
+
+ init {
+ require(days.size == DaysInAWeek)
+ }
+
+ internal constructor(firstDay: LocalDate) : this(
+ listOf(firstDay).fillUpTo(firstDay.plusDays((DaysInAWeek - 1).toLong()))
+ )
+
+ public val start: LocalDate get() = days.first()
+
+ public val end: LocalDate get() = days.last()
+
+ public val yearMonth: YearMonth = YearMonth.of(start.year, start.month)
+
+ public operator fun inc(): Week = plusWeeks(1)
+
+ public operator fun dec(): Week = plusWeeks(-1)
+
+ public operator fun compareTo(other: Week): Int = start.compareTo(other.start)
+
+ public fun minusWeeks(value: Long): Week = plusWeeks(-value)
+
+ public fun plusWeeks(value: Long): Week = copy(days = days.map { it.plusWeeks(value) })
+
+ public companion object {
+ public fun now(firstDayOfWeek: DayOfWeek = WeekFields.of(Locale.getDefault()).firstDayOfWeek): Week {
+ val today = LocalDate.now()
+ val offset = today.dayOfWeek.daysUntil(firstDayOfWeek)
+ val firstDay = today.minusDays(offset.toLong())
+
+ return Week(firstDay)
+ }
+ }
+}
+
+@SuppressLint("NewApi")
+public fun ChronoUnit.between(first: Week, other: Week): Int =
+ between(first.start, other.start).toInt()
diff --git a/Pink/library/src/main/java/io/github/boguszpawlowski/composecalendar/week/WeekDays.kt b/Pink/library/src/main/java/io/github/boguszpawlowski/composecalendar/week/WeekDays.kt
new file mode 100644
index 0000000..374e175
--- /dev/null
+++ b/Pink/library/src/main/java/io/github/boguszpawlowski/composecalendar/week/WeekDays.kt
@@ -0,0 +1,10 @@
+package io.github.boguszpawlowski.composecalendar.week
+
+import androidx.compose.runtime.Immutable
+import io.github.boguszpawlowski.composecalendar.day.Day
+
+@Immutable
+internal data class WeekDays(
+ val isFirstWeekOfTheMonth: Boolean = false,
+ val days: List,
+)
diff --git a/Pink/library/src/main/java/io/github/boguszpawlowski/composecalendar/week/WeekListState.kt b/Pink/library/src/main/java/io/github/boguszpawlowski/composecalendar/week/WeekListState.kt
new file mode 100644
index 0000000..3dbc66d
--- /dev/null
+++ b/Pink/library/src/main/java/io/github/boguszpawlowski/composecalendar/week/WeekListState.kt
@@ -0,0 +1,70 @@
+package io.github.boguszpawlowski.composecalendar.week
+
+import android.annotation.SuppressLint
+import androidx.compose.foundation.lazy.LazyListState
+import androidx.compose.runtime.Stable
+import androidx.compose.runtime.derivedStateOf
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.snapshotFlow
+import io.github.boguszpawlowski.composecalendar.header.WeekState
+import io.github.boguszpawlowski.composecalendar.util.throttleOnOffset
+import kotlinx.coroutines.CoroutineScope
+import kotlinx.coroutines.flow.launchIn
+import kotlinx.coroutines.flow.onEach
+import kotlinx.coroutines.launch
+import java.time.temporal.ChronoUnit
+
+@Stable
+@SuppressLint("NewApi")
+internal class WeekListState(
+ private val coroutineScope: CoroutineScope,
+ private val weekState: WeekState,
+ private val listState: LazyListState,
+) {
+
+ private val currentlyFirstVisibleMonth by derivedStateOf {
+ getWeekForPage(listState.firstVisibleItemIndex)
+ }
+
+ init {
+ snapshotFlow { weekState.currentWeek }.onEach { week ->
+ moveToWeek(week)
+ }.launchIn(coroutineScope)
+
+ with(listState) {
+ snapshotFlow { currentlyFirstVisibleMonth }
+ .throttleOnOffset()
+ .onEach { newMonth ->
+ weekState.currentWeek = newMonth
+ }.launchIn(coroutineScope)
+ }
+ }
+
+ fun getWeekForPage(index: Int): Week =
+ weekState.minWeek.plusWeeks(index.toLong())
+
+ private fun moveToWeek(week: Week) {
+ if (week == currentlyFirstVisibleMonth) return
+ coroutineScope.launch {
+ listState.animateScrollToItem(ChronoUnit.WEEKS.between(weekState.minWeek, week))
+ }
+ }
+
+ override fun equals(other: Any?): Boolean {
+ if (this === other) return true
+ if (javaClass != other?.javaClass) return false
+
+ other as WeekListState
+
+ if (weekState != other.weekState) return false
+ if (listState != other.listState) return false
+
+ return true
+ }
+
+ override fun hashCode(): Int {
+ var result = weekState.hashCode()
+ result = 31 * result + listState.hashCode()
+ return result
+ }
+}
diff --git a/Pink/library/src/main/java/io/github/boguszpawlowski/composecalendar/week/WeekPager.kt b/Pink/library/src/main/java/io/github/boguszpawlowski/composecalendar/week/WeekPager.kt
new file mode 100644
index 0000000..5354d0e
--- /dev/null
+++ b/Pink/library/src/main/java/io/github/boguszpawlowski/composecalendar/week/WeekPager.kt
@@ -0,0 +1,150 @@
+package io.github.boguszpawlowski.composecalendar.week
+
+import android.annotation.SuppressLint
+import androidx.compose.animation.rememberSplineBasedDecay
+import androidx.compose.foundation.layout.Box
+import androidx.compose.foundation.layout.BoxScope
+import androidx.compose.foundation.layout.Column
+import androidx.compose.foundation.layout.fillMaxWidth
+import androidx.compose.foundation.layout.wrapContentHeight
+import androidx.compose.foundation.lazy.LazyRow
+import androidx.compose.foundation.lazy.rememberLazyListState
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.remember
+import androidx.compose.runtime.rememberCoroutineScope
+import androidx.compose.ui.Alignment
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.platform.testTag
+import dev.chrisbanes.snapper.ExperimentalSnapperApi
+import dev.chrisbanes.snapper.SnapOffsets
+import dev.chrisbanes.snapper.SnapperFlingBehaviorDefaults
+import dev.chrisbanes.snapper.rememberSnapperFlingBehavior
+import io.github.boguszpawlowski.composecalendar.day.DayState
+import io.github.boguszpawlowski.composecalendar.day.WeekDay
+import io.github.boguszpawlowski.composecalendar.header.WeekState
+import io.github.boguszpawlowski.composecalendar.month.coerceSnapIndex
+import io.github.boguszpawlowski.composecalendar.selection.SelectionState
+import java.time.DayOfWeek
+import java.time.LocalDate
+import java.time.temporal.ChronoUnit
+
+@OptIn(ExperimentalSnapperApi::class)
+@Composable
+@Suppress("LongMethod")
+@SuppressLint("NewApi")
+internal fun WeekPager(
+ initialWeek: Week,
+ selectionState: T,
+ weekState: WeekState,
+ daysOfWeek: List,
+ today: LocalDate,
+ modifier: Modifier = Modifier,
+ weekDaysScrollEnabled: Boolean = true,
+ dayContent: @Composable BoxScope.(DayState) -> Unit,
+ daysOfWeekHeader: @Composable BoxScope.(List) -> Unit,
+) {
+ val coroutineScope = rememberCoroutineScope()
+
+ val initialFirstVisibleItemIndex = remember(initialWeek, weekState.minWeek) {
+ ChronoUnit.WEEKS.between(weekState.minWeek, initialWeek)
+ }
+ val listState = rememberLazyListState(
+ initialFirstVisibleItemIndex = initialFirstVisibleItemIndex,
+ )
+ val flingBehavior = rememberSnapperFlingBehavior(
+ lazyListState = listState,
+ snapOffsetForItem = SnapOffsets.Start,
+ springAnimationSpec = SnapperFlingBehaviorDefaults.SpringAnimationSpec,
+ decayAnimationSpec = rememberSplineBasedDecay(),
+ snapIndex = coerceSnapIndex,
+ )
+
+ val weekListState = remember {
+ WeekListState(
+ coroutineScope = coroutineScope,
+ weekState = weekState,
+ listState = listState,
+ )
+ }
+ Column(
+ modifier = modifier,
+ ) {
+ if (weekDaysScrollEnabled.not()) {
+ Box(
+ modifier = Modifier
+ .wrapContentHeight()
+ .fillMaxWidth(),
+ content = { daysOfWeekHeader(daysOfWeek) },
+ )
+ }
+ val pagerCount = remember(weekState.minWeek, weekState.maxWeek) {
+ ChronoUnit.WEEKS.between(weekState.minWeek, weekState.maxWeek) + 1
+ }
+ LazyRow(
+ modifier = modifier.testTag("WeekPager"),
+ state = listState,
+ flingBehavior = flingBehavior,
+ verticalAlignment = Alignment.Top,
+ ) {
+ items(
+ count = pagerCount,
+ key = { index -> weekListState.getWeekForPage(index).start.let { "${it.month}-${it.dayOfMonth}" } },
+ ) { index ->
+ WeekContent(
+ modifier = Modifier.fillParentMaxWidth(),
+ daysOfWeek = daysOfWeek,
+ weekDays = weekListState.getWeekForPage(index).getWeekDays(today = today),
+ selectionState = selectionState,
+ weekDaysScrollEnabled = weekDaysScrollEnabled,
+ dayContent = dayContent,
+ daysOfWeekHeader = daysOfWeekHeader,
+ )
+ }
+ }
+ }
+}
+
+@Composable
+internal fun WeekContent(
+ selectionState: T,
+ weekDays: WeekDays,
+ daysOfWeek: List,
+ modifier: Modifier = Modifier,
+ weekDaysScrollEnabled: Boolean = true,
+ dayContent: @Composable BoxScope.(DayState) -> Unit,
+ daysOfWeekHeader: @Composable BoxScope.(List) -> Unit,
+) {
+ Column(
+ modifier = modifier,
+ ) {
+ if (weekDaysScrollEnabled) {
+ Box(
+ modifier = Modifier
+ .wrapContentHeight()
+ .fillMaxWidth(),
+ content = { daysOfWeekHeader(daysOfWeek) },
+ )
+ }
+ WeekRow(
+ weekDays = weekDays,
+ modifier = Modifier.fillMaxWidth(),
+ selectionState = selectionState,
+ dayContent = dayContent,
+ )
+ }
+}
+
+internal fun Week.getWeekDays(today: LocalDate): WeekDays {
+ val weekDays = days.map {
+ WeekDay(
+ date = it,
+ isCurrentDay = it == today,
+ isFromCurrentMonth = true,
+ )
+ }
+
+ return WeekDays(
+ isFirstWeekOfTheMonth = false,
+ days = weekDays,
+ )
+}
diff --git a/Pink/library/src/main/java/io/github/boguszpawlowski/composecalendar/week/WeekRow.kt b/Pink/library/src/main/java/io/github/boguszpawlowski/composecalendar/week/WeekRow.kt
new file mode 100644
index 0000000..61881e1
--- /dev/null
+++ b/Pink/library/src/main/java/io/github/boguszpawlowski/composecalendar/week/WeekRow.kt
@@ -0,0 +1,35 @@
+package io.github.boguszpawlowski.composecalendar.week
+
+import androidx.compose.foundation.layout.Arrangement
+import androidx.compose.foundation.layout.Box
+import androidx.compose.foundation.layout.BoxScope
+import androidx.compose.foundation.layout.Row
+import androidx.compose.foundation.layout.fillMaxWidth
+import androidx.compose.foundation.layout.wrapContentHeight
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import io.github.boguszpawlowski.composecalendar.day.DayState
+import io.github.boguszpawlowski.composecalendar.selection.SelectionState
+
+@Composable
+internal fun WeekRow(
+ weekDays: WeekDays,
+ selectionState: T,
+ modifier: Modifier = Modifier,
+ dayContent: @Composable BoxScope.(DayState) -> Unit
+) {
+ Row(
+ modifier = modifier
+ .fillMaxWidth()
+ .wrapContentHeight(),
+ horizontalArrangement = if (weekDays.isFirstWeekOfTheMonth) Arrangement.End else Arrangement.Start
+ ) {
+ weekDays.days.forEachIndexed { index, day ->
+ Box(
+ modifier = Modifier.fillMaxWidth(1f / (7 - index))
+ ) {
+ dayContent(DayState(day, selectionState))
+ }
+ }
+ }
+}
diff --git a/Pink/library/src/main/java/io/github/boguszpawlowski/composecalendar/week/WeekUtil.kt b/Pink/library/src/main/java/io/github/boguszpawlowski/composecalendar/week/WeekUtil.kt
new file mode 100644
index 0000000..e926e14
--- /dev/null
+++ b/Pink/library/src/main/java/io/github/boguszpawlowski/composecalendar/week/WeekUtil.kt
@@ -0,0 +1,52 @@
+package io.github.boguszpawlowski.composecalendar.week
+
+import android.annotation.SuppressLint
+import io.github.boguszpawlowski.composecalendar.day.WeekDay
+import io.github.boguszpawlowski.composecalendar.util.daysUntil
+import java.time.DayOfWeek
+import java.time.LocalDate
+import java.time.YearMonth
+
+internal const val DaysInAWeek = 7
+
+@SuppressLint("NewApi")
+internal fun YearMonth.getWeeks(
+ includeAdjacentMonths: Boolean,
+ firstDayOfTheWeek: DayOfWeek,
+ today: LocalDate,
+): List {
+ val daysLength = lengthOfMonth()
+
+ val starOffset = atDay(1).dayOfWeek daysUntil firstDayOfTheWeek
+ val endOffset =
+ DaysInAWeek - (atDay(daysLength).dayOfWeek daysUntil firstDayOfTheWeek) - 1
+
+ return (1 - starOffset..daysLength + endOffset).chunked(DaysInAWeek).mapIndexed { index, days ->
+ WeekDays(
+ isFirstWeekOfTheMonth = index == 0,
+ days = days.mapNotNull { dayOfMonth ->
+ val (date, isFromCurrentMonth) = when (dayOfMonth) {
+ in Int.MIN_VALUE..0 -> if (includeAdjacentMonths) {
+ val previousMonth = this.minusMonths(1)
+ previousMonth.atDay(previousMonth.lengthOfMonth() + dayOfMonth) to false
+ } else {
+ return@mapNotNull null
+ }
+ in 1..daysLength -> atDay(dayOfMonth) to true
+ else -> if (includeAdjacentMonths) {
+ val previousMonth = this.plusMonths(1)
+ previousMonth.atDay(dayOfMonth - daysLength) to false
+ } else {
+ return@mapNotNull null
+ }
+ }
+
+ WeekDay(
+ date = date,
+ isFromCurrentMonth = isFromCurrentMonth,
+ isCurrentDay = date.equals(today),
+ )
+ }
+ )
+ }
+}
diff --git a/Pink/library/src/test/java/io/github/boguszpawlowski/composecalendar/selection/SelectionStateTest.kt b/Pink/library/src/test/java/io/github/boguszpawlowski/composecalendar/selection/SelectionStateTest.kt
new file mode 100644
index 0000000..75ca49c
--- /dev/null
+++ b/Pink/library/src/test/java/io/github/boguszpawlowski/composecalendar/selection/SelectionStateTest.kt
@@ -0,0 +1,177 @@
+@file:Suppress("UnderscoresInNumericLiterals")
+
+package io.github.boguszpawlowski.composecalendar.selection
+
+import io.github.boguszpawlowski.composecalendar.selection.SelectionMode.Multiple
+import io.kotest.assertions.throwables.shouldNotThrowAny
+import io.kotest.core.spec.style.ShouldSpec
+import io.kotest.matchers.collections.shouldContainExactly
+import io.kotest.matchers.shouldBe
+import java.time.LocalDate
+import java.time.Month.APRIL
+
+internal class SelectionStateTest : ShouldSpec({
+
+ val yesterday = LocalDate.of(2020, APRIL, 9)
+ val today = LocalDate.of(2020, APRIL, 10)
+ val tomorrow = LocalDate.of(2020, APRIL, 11)
+
+ context("Selection state with SelectionMode.None") {
+ should("not change selection after new value arrives") {
+ val state = DynamicSelectionState({ true }, emptyList(), SelectionMode.None)
+
+ state.onDateSelected(LocalDate.now())
+
+ state.selection shouldBe emptyList()
+ }
+
+ should("be able to change if mode has been changed") {
+ val state = DynamicSelectionState({ true }, emptyList(), SelectionMode.None)
+
+ state.selectionMode = SelectionMode.Single
+ state.onDateSelected(today)
+
+ state.selection shouldBe listOf(today)
+ }
+ }
+
+ context("Selection state with SelectionMode.Single") {
+ should("change state to single after day is selected") {
+ val state = DynamicSelectionState({ true }, emptyList(), SelectionMode.Single)
+
+ state.onDateSelected(today)
+
+ state.selection shouldBe listOf(today)
+ }
+
+ should("change state to none when same day is selected") {
+ val state = DynamicSelectionState({ true }, emptyList(), SelectionMode.Single)
+
+ state.onDateSelected(today)
+ state.onDateSelected(today)
+
+ state.selection shouldBe emptyList()
+ }
+
+ should("change to other day when selected") {
+ val state = DynamicSelectionState({ true }, emptyList(), SelectionMode.Single)
+
+ state.onDateSelected(today)
+ state.onDateSelected(tomorrow)
+
+ state.selection shouldBe listOf(tomorrow)
+ }
+
+ should("not be mutable after selection mode is changed to None") {
+ val state = DynamicSelectionState({ true }, emptyList(), SelectionMode.Single)
+
+ state.selectionMode = SelectionMode.None
+ state.onDateSelected(today)
+
+ state.selection shouldBe emptyList()
+ }
+ }
+
+ context("Selection state with SelectionMode.Multiple") {
+ should("allow for multiple days selected") {
+ val state = DynamicSelectionState({ true }, emptyList(), SelectionMode.Multiple)
+
+ state.onDateSelected(today)
+ state.onDateSelected(tomorrow)
+
+ state.selection shouldContainExactly listOf(
+ today,
+ tomorrow
+ )
+ }
+
+ should("switch selection off once day is selected second time") {
+ val state = DynamicSelectionState({ true }, emptyList(), SelectionMode.Multiple)
+
+ state.onDateSelected(today)
+ state.onDateSelected(tomorrow)
+ state.onDateSelected(today)
+
+ state.selection shouldContainExactly listOf(tomorrow)
+ }
+ }
+
+ context("Selection state with SelectionMode.Period") {
+ should("allow for period of days selected") {
+ val state = DynamicSelectionState({ true }, emptyList(), SelectionMode.Period)
+
+ state.onDateSelected(today)
+ state.onDateSelected(tomorrow)
+
+ state.selection.first() shouldBe today
+ state.selection.last() shouldBe tomorrow
+ }
+
+ should("switch selection off once start day is selected") {
+ val state = DynamicSelectionState({ true }, emptyList(), SelectionMode.Period)
+
+ state.onDateSelected(today)
+ state.onDateSelected(tomorrow)
+ state.onDateSelected(today)
+
+ state.selection shouldBe emptyList()
+ }
+ should("change end date once the date selected is between start and the end") {
+ val state = DynamicSelectionState({ true }, emptyList(), SelectionMode.Period)
+
+ state.onDateSelected(yesterday)
+ state.onDateSelected(tomorrow)
+ state.onDateSelected(today)
+
+ state.selection.first() shouldBe yesterday
+ state.selection.last() shouldBe today
+ }
+ should("change start day once day before start is selected") {
+ val state = DynamicSelectionState({ true }, emptyList(), SelectionMode.Period)
+
+ state.onDateSelected(today)
+ state.onDateSelected(tomorrow)
+ state.onDateSelected(yesterday)
+
+ state.selection.first() shouldBe yesterday
+ state.selection.endOrNull() shouldBe null
+ }
+ }
+
+ context("Selection State interface default values") {
+ val myInterfaceWithNoMethods = object : SelectionState {}
+
+ should("Default isDateSelected to false") {
+ myInterfaceWithNoMethods.isDateSelected(today) shouldBe false
+ }
+
+ should("Have a default implementation that doesn't throw an exception for onDateSelected") {
+ shouldNotThrowAny {
+ myInterfaceWithNoMethods.onDateSelected(today)
+ }
+ }
+ }
+ context("Selection State with confirm state change callback") {
+ var nextVetoResult = false
+ val initialSelection = LocalDate.of(1999, 10, 12)
+ val newSelection = initialSelection.plusDays(1)
+
+ val selectionState = DynamicSelectionState(
+ confirmSelectionChange = { nextVetoResult },
+ selection = listOf(initialSelection),
+ selectionMode = Multiple,
+ )
+ should("Not change the selection when change is vetoed") {
+ selectionState.onDateSelected(newSelection)
+
+ selectionState.selection shouldBe listOf(initialSelection)
+ }
+ should("Change the selection when change is not vetoed") {
+ nextVetoResult = true
+
+ selectionState.onDateSelected(newSelection)
+
+ selectionState.selection shouldBe listOf(initialSelection, newSelection)
+ }
+ }
+})
diff --git a/Pink/library/src/test/java/io/github/boguszpawlowski/composecalendar/week/WeekTest.kt b/Pink/library/src/test/java/io/github/boguszpawlowski/composecalendar/week/WeekTest.kt
new file mode 100644
index 0000000..c59c4fc
--- /dev/null
+++ b/Pink/library/src/test/java/io/github/boguszpawlowski/composecalendar/week/WeekTest.kt
@@ -0,0 +1,68 @@
+package io.github.boguszpawlowski.composecalendar.week
+
+import io.kotest.assertions.asClue
+import io.kotest.assertions.throwables.shouldThrow
+import io.kotest.core.spec.style.ShouldSpec
+import io.kotest.matchers.shouldBe
+import java.time.LocalDate
+
+internal class WeekTest : ShouldSpec({
+
+ val today = LocalDate.of(2000, 10, 2)
+
+ context("Secondary constructor") {
+ val week = Week(firstDay = today)
+
+ should("properly create an instance of week") {
+ week.asClue {
+ it.days.first() shouldBe today
+ it.days.last() shouldBe today.plusDays(6)
+ it.days.size shouldBe 7
+ }
+ }
+ }
+
+ context("Incrementing") {
+ val week = Week(firstDay = today).inc()
+
+ should("shift the days by 7") {
+ week.asClue {
+ it.days.first() shouldBe today.plusWeeks(1)
+ it.days.last() shouldBe today.plusDays(6).plusWeeks(1)
+ it.days.size shouldBe 7
+ }
+ }
+ }
+
+ context("Decrementing") {
+ val week = Week(firstDay = today).dec()
+
+ should("shift the days by -7") {
+ week.asClue {
+ it.days.first() shouldBe today.plusWeeks(-1)
+ it.days.last() shouldBe today.plusDays(6).plusWeeks(-1)
+ it.days.size shouldBe 7
+ }
+ }
+ }
+
+ context("Adding a week") {
+ val week = Week(firstDay = today).plusWeeks(7)
+
+ should("add correct number of days") {
+ week.asClue {
+ it.days.first() shouldBe today.plusWeeks(7)
+ it.days.last() shouldBe today.plusDays(6).plusWeeks(7)
+ it.days.size shouldBe 7
+ }
+ }
+ }
+
+ context("Constructing a week with invalid number of days") {
+ should("throw") {
+ shouldThrow {
+ Week(List(18) { LocalDate.now() })
+ }
+ }
+ }
+})
diff --git a/Pink/library/src/test/java/io/github/boguszpawlowski/composecalendar/week/WeekUtilTest.kt b/Pink/library/src/test/java/io/github/boguszpawlowski/composecalendar/week/WeekUtilTest.kt
new file mode 100644
index 0000000..17ce731
--- /dev/null
+++ b/Pink/library/src/test/java/io/github/boguszpawlowski/composecalendar/week/WeekUtilTest.kt
@@ -0,0 +1,166 @@
+@file:Suppress("UnderscoresInNumericLiterals")
+
+package io.github.boguszpawlowski.composecalendar.week
+
+import io.kotest.core.spec.style.ShouldSpec
+import io.kotest.matchers.collections.shouldContainAll
+import io.kotest.matchers.collections.shouldContainExactly
+import io.kotest.matchers.collections.shouldHaveSize
+import io.kotest.matchers.shouldBe
+import java.time.DayOfWeek.MONDAY
+import java.time.DayOfWeek.SATURDAY
+import java.time.DayOfWeek.SUNDAY
+import java.time.LocalDate
+import java.time.YearMonth
+
+internal class WeekUtilTest : ShouldSpec({
+
+ val today = LocalDate.of(2020, 9, 15)
+ val month = YearMonth.of(2020, 9)
+ val previousMonth = YearMonth.of(2020, 8)
+ val nextMonth = YearMonth.of(2020, 10)
+
+ context("Extracting weeks without adjacent months") {
+ val includeAdjacentMonths = false
+ should("return days only from current month") {
+ val weeks = month.getWeeks(includeAdjacentMonths, MONDAY, today)
+ val days = weeks.flatMap { it.days }
+
+ days.map { it.date }.forEach {
+ it.isFromMonth(month) shouldBe true
+ it.isFromMonth(previousMonth) shouldBe false
+ it.isFromMonth(nextMonth) shouldBe false
+ }
+ }
+
+ should("return all days from the month") {
+ val weeks = month.getWeeks(includeAdjacentMonths, MONDAY, today)
+ val days = weeks.flatMap { it.days }.map { it.date }
+
+ val daysLength = month.lengthOfMonth()
+ val daysFromCurrentMonth = (1..daysLength).map { month.atDay(it) }
+
+ days shouldContainExactly daysFromCurrentMonth
+ }
+
+ should("return days properly split to weeks") {
+ val weeks = month.getWeeks(includeAdjacentMonths, MONDAY, today)
+
+ weeks[0].days shouldHaveSize 6
+ weeks[1].days shouldHaveSize 7
+ weeks[2].days shouldHaveSize 7
+ weeks[3].days shouldHaveSize 7
+ weeks[4].days shouldHaveSize 3
+
+ weeks shouldHaveSize 5
+ }
+
+ should("return days properly split to weeks when first day is Saturday") {
+ val weeks = month.getWeeks(includeAdjacentMonths, SATURDAY, today)
+
+ weeks[0].days shouldHaveSize 4
+ weeks[1].days shouldHaveSize 7
+ weeks[2].days shouldHaveSize 7
+ weeks[3].days shouldHaveSize 7
+ weeks[4].days shouldHaveSize 5
+
+ weeks shouldHaveSize 5
+ }
+
+ should("return days properly split to weeks when first day is Sunday ") {
+ val weeks = month.getWeeks(includeAdjacentMonths, SUNDAY, today)
+
+ weeks[0].days shouldHaveSize 5
+ weeks[1].days shouldHaveSize 7
+ weeks[2].days shouldHaveSize 7
+ weeks[3].days shouldHaveSize 7
+ weeks[4].days shouldHaveSize 4
+
+ weeks shouldHaveSize 5
+ }
+ }
+
+ context("Extracting weeks with adjacent months") {
+ val includeAdjacentMonths = true
+ should("return days from current and previous months") {
+ val weeks = month.getWeeks(includeAdjacentMonths, MONDAY, today)
+ val days = weeks.flatMap { it.days }
+
+ days.map { it.date }.forEachIndexed { index, day ->
+ when (index) {
+ 0 -> {
+ day.isFromMonth(month) shouldBe false
+ day.isFromMonth(previousMonth) shouldBe true
+ day.isFromMonth(nextMonth) shouldBe false
+ }
+ in 1..30 -> {
+ day.isFromMonth(month) shouldBe true
+ day.isFromMonth(previousMonth) shouldBe false
+ day.isFromMonth(nextMonth) shouldBe false
+ }
+ else -> {
+ day.isFromMonth(month) shouldBe false
+ day.isFromMonth(previousMonth) shouldBe false
+ day.isFromMonth(nextMonth) shouldBe true
+ }
+ }
+ }
+ }
+
+ should("return all days from the month") {
+ val weeks = month.getWeeks(includeAdjacentMonths, MONDAY, today)
+ val days = weeks.flatMap { it.days }.map { it.date }
+
+ val daysLength = month.lengthOfMonth()
+ val endOffset = 6 - month.atEndOfMonth().dayOfWeek.ordinal
+ val startOffset = month.atDay(1).dayOfWeek.ordinal - 1
+ val daysFromCurrentMonth = (1..daysLength).map { month.atDay(it) }
+ val daysFromNextMonth = (1..endOffset).map { nextMonth.atDay(it) }
+ val daysFromPreviousMonth =
+ (previousMonth.lengthOfMonth() - startOffset..previousMonth.lengthOfMonth()).map {
+ previousMonth.atDay(it)
+ }
+
+ days shouldContainAll daysFromCurrentMonth + daysFromNextMonth + daysFromPreviousMonth
+ }
+
+ should("return days properly split to weeks") {
+ val weeks = month.getWeeks(includeAdjacentMonths, MONDAY, today)
+
+ weeks[0].days shouldHaveSize 7
+ weeks[1].days shouldHaveSize 7
+ weeks[2].days shouldHaveSize 7
+ weeks[3].days shouldHaveSize 7
+ weeks[4].days shouldHaveSize 7
+
+ weeks shouldHaveSize 5
+ }
+
+ should("return days properly split to weeks when first day is Sunday") {
+ val weeks = month.getWeeks(includeAdjacentMonths, SUNDAY, today)
+
+ weeks[0].days shouldHaveSize 7
+ weeks[1].days shouldHaveSize 7
+ weeks[2].days shouldHaveSize 7
+ weeks[3].days shouldHaveSize 7
+ weeks[4].days shouldHaveSize 7
+
+ weeks shouldHaveSize 5
+ }
+
+ should("return days properly split to weeks when first day is Saturday") {
+ val weeks = month.getWeeks(includeAdjacentMonths, SATURDAY, today)
+
+ weeks[0].days shouldHaveSize 7
+ weeks[1].days shouldHaveSize 7
+ weeks[2].days shouldHaveSize 7
+ weeks[3].days shouldHaveSize 7
+ weeks[4].days shouldHaveSize 7
+
+ weeks shouldHaveSize 5
+ }
+ }
+})
+
+private fun LocalDate.isFromMonth(yearMonth: YearMonth) =
+ month == yearMonth.month && year == yearMonth.year
diff --git a/Pink/meiyou.png b/Pink/meiyou.png
new file mode 100644
index 0000000..fbec5b0
Binary files /dev/null and b/Pink/meiyou.png differ
diff --git a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/results.bin b/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/results.bin
deleted file mode 100644
index 7ed749e..0000000
--- a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/results.bin
+++ /dev/null
@@ -1 +0,0 @@
-o/bundleLibRuntimeToDirDebug
diff --git a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/android/OpenCVLoader.dex b/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/android/OpenCVLoader.dex
deleted file mode 100644
index 890eb71..0000000
Binary files a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/android/OpenCVLoader.dex and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/android/StaticHelper.dex b/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/android/StaticHelper.dex
deleted file mode 100644
index 3d97b95..0000000
Binary files a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/android/StaticHelper.dex and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/android/Utils.dex b/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/android/Utils.dex
deleted file mode 100644
index 128b530..0000000
Binary files a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/android/Utils.dex and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/calib3d/Calib3d.dex b/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/calib3d/Calib3d.dex
deleted file mode 100644
index 8ce82a0..0000000
Binary files a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/calib3d/Calib3d.dex and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/calib3d/StereoBM.dex b/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/calib3d/StereoBM.dex
deleted file mode 100644
index ee69a01..0000000
Binary files a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/calib3d/StereoBM.dex and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/calib3d/StereoMatcher.dex b/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/calib3d/StereoMatcher.dex
deleted file mode 100644
index 77c4900..0000000
Binary files a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/calib3d/StereoMatcher.dex and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/calib3d/StereoSGBM.dex b/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/calib3d/StereoSGBM.dex
deleted file mode 100644
index 83b7c74..0000000
Binary files a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/calib3d/StereoSGBM.dex and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/core/Algorithm.dex b/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/core/Algorithm.dex
deleted file mode 100644
index a9049a1..0000000
Binary files a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/core/Algorithm.dex and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/core/Core$MinMaxLocResult.dex b/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/core/Core$MinMaxLocResult.dex
deleted file mode 100644
index 604cd47..0000000
Binary files a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/core/Core$MinMaxLocResult.dex and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/core/Core.dex b/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/core/Core.dex
deleted file mode 100644
index 612044d..0000000
Binary files a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/core/Core.dex and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/core/CvException.dex b/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/core/CvException.dex
deleted file mode 100644
index c5fe78b..0000000
Binary files a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/core/CvException.dex and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/core/CvType.dex b/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/core/CvType.dex
deleted file mode 100644
index 66f6778..0000000
Binary files a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/core/CvType.dex and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/core/DMatch.dex b/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/core/DMatch.dex
deleted file mode 100644
index ec6ecac..0000000
Binary files a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/core/DMatch.dex and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/core/KeyPoint.dex b/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/core/KeyPoint.dex
deleted file mode 100644
index bdf09c8..0000000
Binary files a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/core/KeyPoint.dex and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/core/Mat.dex b/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/core/Mat.dex
deleted file mode 100644
index be34a6c..0000000
Binary files a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/core/Mat.dex and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/core/MatOfByte.dex b/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/core/MatOfByte.dex
deleted file mode 100644
index 9d41535..0000000
Binary files a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/core/MatOfByte.dex and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/core/MatOfDMatch.dex b/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/core/MatOfDMatch.dex
deleted file mode 100644
index dbaaaba..0000000
Binary files a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/core/MatOfDMatch.dex and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/core/MatOfDouble.dex b/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/core/MatOfDouble.dex
deleted file mode 100644
index 6cddc87..0000000
Binary files a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/core/MatOfDouble.dex and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/core/MatOfFloat.dex b/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/core/MatOfFloat.dex
deleted file mode 100644
index 936f28c..0000000
Binary files a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/core/MatOfFloat.dex and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/core/MatOfFloat4.dex b/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/core/MatOfFloat4.dex
deleted file mode 100644
index 96a9fd5..0000000
Binary files a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/core/MatOfFloat4.dex and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/core/MatOfFloat6.dex b/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/core/MatOfFloat6.dex
deleted file mode 100644
index bb74892..0000000
Binary files a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/core/MatOfFloat6.dex and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/core/MatOfInt.dex b/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/core/MatOfInt.dex
deleted file mode 100644
index 65ffc44..0000000
Binary files a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/core/MatOfInt.dex and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/core/MatOfInt4.dex b/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/core/MatOfInt4.dex
deleted file mode 100644
index d08af6c..0000000
Binary files a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/core/MatOfInt4.dex and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/core/MatOfKeyPoint.dex b/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/core/MatOfKeyPoint.dex
deleted file mode 100644
index c580577..0000000
Binary files a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/core/MatOfKeyPoint.dex and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/core/MatOfPoint.dex b/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/core/MatOfPoint.dex
deleted file mode 100644
index 956fd4c..0000000
Binary files a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/core/MatOfPoint.dex and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/core/MatOfPoint2f.dex b/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/core/MatOfPoint2f.dex
deleted file mode 100644
index f083b1e..0000000
Binary files a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/core/MatOfPoint2f.dex and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/core/MatOfPoint3.dex b/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/core/MatOfPoint3.dex
deleted file mode 100644
index fa469bc..0000000
Binary files a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/core/MatOfPoint3.dex and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/core/MatOfPoint3f.dex b/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/core/MatOfPoint3f.dex
deleted file mode 100644
index 0abf107..0000000
Binary files a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/core/MatOfPoint3f.dex and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/core/MatOfRect.dex b/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/core/MatOfRect.dex
deleted file mode 100644
index 9cdec5b..0000000
Binary files a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/core/MatOfRect.dex and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/core/Point.dex b/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/core/Point.dex
deleted file mode 100644
index 21d7d09..0000000
Binary files a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/core/Point.dex and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/core/Point3.dex b/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/core/Point3.dex
deleted file mode 100644
index 914d44d..0000000
Binary files a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/core/Point3.dex and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/core/Range.dex b/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/core/Range.dex
deleted file mode 100644
index d6b18ea..0000000
Binary files a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/core/Range.dex and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/core/Rect.dex b/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/core/Rect.dex
deleted file mode 100644
index e7e5ec9..0000000
Binary files a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/core/Rect.dex and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/core/RotatedRect.dex b/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/core/RotatedRect.dex
deleted file mode 100644
index d6115ef..0000000
Binary files a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/core/RotatedRect.dex and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/core/Scalar.dex b/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/core/Scalar.dex
deleted file mode 100644
index 158ed5e..0000000
Binary files a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/core/Scalar.dex and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/core/Size.dex b/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/core/Size.dex
deleted file mode 100644
index 41a152a..0000000
Binary files a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/core/Size.dex and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/core/TermCriteria.dex b/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/core/TermCriteria.dex
deleted file mode 100644
index a9c3e9a..0000000
Binary files a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/core/TermCriteria.dex and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/features2d/DescriptorExtractor.dex b/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/features2d/DescriptorExtractor.dex
deleted file mode 100644
index eebe0d8..0000000
Binary files a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/features2d/DescriptorExtractor.dex and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/features2d/DescriptorMatcher.dex b/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/features2d/DescriptorMatcher.dex
deleted file mode 100644
index 4412afe..0000000
Binary files a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/features2d/DescriptorMatcher.dex and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/features2d/FeatureDetector.dex b/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/features2d/FeatureDetector.dex
deleted file mode 100644
index 511d43d..0000000
Binary files a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/features2d/FeatureDetector.dex and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/features2d/Features2d.dex b/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/features2d/Features2d.dex
deleted file mode 100644
index b4e7189..0000000
Binary files a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/features2d/Features2d.dex and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/imgcodecs/Imgcodecs.dex b/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/imgcodecs/Imgcodecs.dex
deleted file mode 100644
index 3b8a4ca..0000000
Binary files a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/imgcodecs/Imgcodecs.dex and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/imgproc/CLAHE.dex b/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/imgproc/CLAHE.dex
deleted file mode 100644
index b656591..0000000
Binary files a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/imgproc/CLAHE.dex and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/imgproc/Imgproc.dex b/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/imgproc/Imgproc.dex
deleted file mode 100644
index 3bde5fe..0000000
Binary files a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/imgproc/Imgproc.dex and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/imgproc/LineSegmentDetector.dex b/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/imgproc/LineSegmentDetector.dex
deleted file mode 100644
index cf0085f..0000000
Binary files a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/imgproc/LineSegmentDetector.dex and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/imgproc/Subdiv2D.dex b/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/imgproc/Subdiv2D.dex
deleted file mode 100644
index a793f83..0000000
Binary files a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/imgproc/Subdiv2D.dex and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/ml/ANN_MLP.dex b/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/ml/ANN_MLP.dex
deleted file mode 100644
index 8c575a6..0000000
Binary files a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/ml/ANN_MLP.dex and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/ml/Boost.dex b/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/ml/Boost.dex
deleted file mode 100644
index 1001890..0000000
Binary files a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/ml/Boost.dex and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/ml/DTrees.dex b/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/ml/DTrees.dex
deleted file mode 100644
index be5dca4..0000000
Binary files a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/ml/DTrees.dex and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/ml/EM.dex b/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/ml/EM.dex
deleted file mode 100644
index 3bd067e..0000000
Binary files a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/ml/EM.dex and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/ml/KNearest.dex b/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/ml/KNearest.dex
deleted file mode 100644
index 075209c..0000000
Binary files a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/ml/KNearest.dex and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/ml/LogisticRegression.dex b/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/ml/LogisticRegression.dex
deleted file mode 100644
index ce25919..0000000
Binary files a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/ml/LogisticRegression.dex and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/ml/Ml.dex b/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/ml/Ml.dex
deleted file mode 100644
index 3563ab9..0000000
Binary files a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/ml/Ml.dex and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/ml/NormalBayesClassifier.dex b/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/ml/NormalBayesClassifier.dex
deleted file mode 100644
index 9ad0b42..0000000
Binary files a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/ml/NormalBayesClassifier.dex and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/ml/RTrees.dex b/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/ml/RTrees.dex
deleted file mode 100644
index 16f4563..0000000
Binary files a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/ml/RTrees.dex and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/ml/SVM.dex b/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/ml/SVM.dex
deleted file mode 100644
index a2aff8a..0000000
Binary files a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/ml/SVM.dex and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/ml/StatModel.dex b/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/ml/StatModel.dex
deleted file mode 100644
index 087a22d..0000000
Binary files a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/ml/StatModel.dex and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/ml/TrainData.dex b/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/ml/TrainData.dex
deleted file mode 100644
index 40c5271..0000000
Binary files a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/ml/TrainData.dex and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/objdetect/BaseCascadeClassifier.dex b/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/objdetect/BaseCascadeClassifier.dex
deleted file mode 100644
index 9482bcb..0000000
Binary files a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/objdetect/BaseCascadeClassifier.dex and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/objdetect/CascadeClassifier.dex b/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/objdetect/CascadeClassifier.dex
deleted file mode 100644
index da651a4..0000000
Binary files a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/objdetect/CascadeClassifier.dex and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/objdetect/HOGDescriptor.dex b/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/objdetect/HOGDescriptor.dex
deleted file mode 100644
index 5012246..0000000
Binary files a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/objdetect/HOGDescriptor.dex and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/objdetect/Objdetect.dex b/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/objdetect/Objdetect.dex
deleted file mode 100644
index bc0cd7c..0000000
Binary files a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/objdetect/Objdetect.dex and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/photo/AlignExposures.dex b/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/photo/AlignExposures.dex
deleted file mode 100644
index a245a38..0000000
Binary files a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/photo/AlignExposures.dex and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/photo/AlignMTB.dex b/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/photo/AlignMTB.dex
deleted file mode 100644
index 9f5ca29..0000000
Binary files a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/photo/AlignMTB.dex and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/photo/CalibrateCRF.dex b/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/photo/CalibrateCRF.dex
deleted file mode 100644
index c03a6a7..0000000
Binary files a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/photo/CalibrateCRF.dex and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/photo/CalibrateDebevec.dex b/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/photo/CalibrateDebevec.dex
deleted file mode 100644
index 949c5b1..0000000
Binary files a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/photo/CalibrateDebevec.dex and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/photo/CalibrateRobertson.dex b/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/photo/CalibrateRobertson.dex
deleted file mode 100644
index 34ebc6f..0000000
Binary files a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/photo/CalibrateRobertson.dex and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/photo/MergeDebevec.dex b/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/photo/MergeDebevec.dex
deleted file mode 100644
index 50e1471..0000000
Binary files a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/photo/MergeDebevec.dex and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/photo/MergeExposures.dex b/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/photo/MergeExposures.dex
deleted file mode 100644
index 50acf49..0000000
Binary files a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/photo/MergeExposures.dex and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/photo/MergeMertens.dex b/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/photo/MergeMertens.dex
deleted file mode 100644
index d3a0cda..0000000
Binary files a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/photo/MergeMertens.dex and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/photo/MergeRobertson.dex b/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/photo/MergeRobertson.dex
deleted file mode 100644
index e78d7c3..0000000
Binary files a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/photo/MergeRobertson.dex and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/photo/Photo.dex b/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/photo/Photo.dex
deleted file mode 100644
index e9ff53e..0000000
Binary files a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/photo/Photo.dex and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/photo/Tonemap.dex b/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/photo/Tonemap.dex
deleted file mode 100644
index 08dd966..0000000
Binary files a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/photo/Tonemap.dex and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/photo/TonemapDrago.dex b/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/photo/TonemapDrago.dex
deleted file mode 100644
index 30c28f5..0000000
Binary files a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/photo/TonemapDrago.dex and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/photo/TonemapDurand.dex b/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/photo/TonemapDurand.dex
deleted file mode 100644
index 367a8f7..0000000
Binary files a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/photo/TonemapDurand.dex and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/photo/TonemapMantiuk.dex b/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/photo/TonemapMantiuk.dex
deleted file mode 100644
index f83c857..0000000
Binary files a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/photo/TonemapMantiuk.dex and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/photo/TonemapReinhard.dex b/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/photo/TonemapReinhard.dex
deleted file mode 100644
index b1f0446..0000000
Binary files a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/photo/TonemapReinhard.dex and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/utils/Converters.dex b/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/utils/Converters.dex
deleted file mode 100644
index 58d1e39..0000000
Binary files a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/utils/Converters.dex and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/video/BackgroundSubtractor.dex b/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/video/BackgroundSubtractor.dex
deleted file mode 100644
index f6bcee9..0000000
Binary files a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/video/BackgroundSubtractor.dex and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/video/BackgroundSubtractorKNN.dex b/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/video/BackgroundSubtractorKNN.dex
deleted file mode 100644
index 8fa5caf..0000000
Binary files a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/video/BackgroundSubtractorKNN.dex and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/video/BackgroundSubtractorMOG2.dex b/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/video/BackgroundSubtractorMOG2.dex
deleted file mode 100644
index fa71c18..0000000
Binary files a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/video/BackgroundSubtractorMOG2.dex and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/video/DenseOpticalFlow.dex b/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/video/DenseOpticalFlow.dex
deleted file mode 100644
index 1dd26f4..0000000
Binary files a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/video/DenseOpticalFlow.dex and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/video/DualTVL1OpticalFlow.dex b/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/video/DualTVL1OpticalFlow.dex
deleted file mode 100644
index 34f3fba..0000000
Binary files a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/video/DualTVL1OpticalFlow.dex and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/video/KalmanFilter.dex b/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/video/KalmanFilter.dex
deleted file mode 100644
index 5ab943b..0000000
Binary files a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/video/KalmanFilter.dex and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/video/Video.dex b/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/video/Video.dex
deleted file mode 100644
index 90f11bd..0000000
Binary files a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/video/Video.dex and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/videoio/VideoCapture.dex b/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/videoio/VideoCapture.dex
deleted file mode 100644
index fc009e0..0000000
Binary files a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/videoio/VideoCapture.dex and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/videoio/Videoio.dex b/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/videoio/Videoio.dex
deleted file mode 100644
index 4314b0f..0000000
Binary files a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/videoio/Videoio.dex and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/desugar_graph.bin b/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/desugar_graph.bin
deleted file mode 100644
index 2229006..0000000
Binary files a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/desugar_graph.bin and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/aapt_friendly_merged_manifests/debug/processDebugManifest/aapt/AndroidManifest.xml b/Pink/openCVLibrary300/build/intermediates/aapt_friendly_merged_manifests/debug/processDebugManifest/aapt/AndroidManifest.xml
deleted file mode 100644
index e2f9160..0000000
--- a/Pink/openCVLibrary300/build/intermediates/aapt_friendly_merged_manifests/debug/processDebugManifest/aapt/AndroidManifest.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/Pink/openCVLibrary300/build/intermediates/aapt_friendly_merged_manifests/debug/processDebugManifest/aapt/output-metadata.json b/Pink/openCVLibrary300/build/intermediates/aapt_friendly_merged_manifests/debug/processDebugManifest/aapt/output-metadata.json
deleted file mode 100644
index 4558666..0000000
--- a/Pink/openCVLibrary300/build/intermediates/aapt_friendly_merged_manifests/debug/processDebugManifest/aapt/output-metadata.json
+++ /dev/null
@@ -1,18 +0,0 @@
-{
- "version": 3,
- "artifactType": {
- "type": "AAPT_FRIENDLY_MERGED_MANIFESTS",
- "kind": "Directory"
- },
- "applicationId": "org.opencv",
- "variantName": "debug",
- "elements": [
- {
- "type": "SINGLE",
- "filters": [],
- "attributes": [],
- "outputFile": "AndroidManifest.xml"
- }
- ],
- "elementType": "File"
-}
\ No newline at end of file
diff --git a/Pink/openCVLibrary300/build/intermediates/aar_main_jar/debug/syncDebugLibJars/classes.jar b/Pink/openCVLibrary300/build/intermediates/aar_main_jar/debug/syncDebugLibJars/classes.jar
deleted file mode 100644
index 2dba30f..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/aar_main_jar/debug/syncDebugLibJars/classes.jar and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/aar_metadata/debug/writeDebugAarMetadata/aar-metadata.properties b/Pink/openCVLibrary300/build/intermediates/aar_metadata/debug/writeDebugAarMetadata/aar-metadata.properties
deleted file mode 100644
index ba000c0..0000000
--- a/Pink/openCVLibrary300/build/intermediates/aar_metadata/debug/writeDebugAarMetadata/aar-metadata.properties
+++ /dev/null
@@ -1,6 +0,0 @@
-aarFormatVersion=1.0
-aarMetadataVersion=1.0
-minCompileSdk=36
-minCompileSdkExtension=0
-minAndroidGradlePluginVersion=1.0.0
-coreLibraryDesugaringEnabled=false
diff --git a/Pink/openCVLibrary300/build/intermediates/android_res_source_set_path_map/debug/mapDebugSourceSetPaths/file-map.txt b/Pink/openCVLibrary300/build/intermediates/android_res_source_set_path_map/debug/mapDebugSourceSetPaths/file-map.txt
deleted file mode 100644
index 91a7d06..0000000
--- a/Pink/openCVLibrary300/build/intermediates/android_res_source_set_path_map/debug/mapDebugSourceSetPaths/file-map.txt
+++ /dev/null
@@ -1,9 +0,0 @@
-org.opencv.openCVLibrary300-pngs-0 D:\gitPlanet\yola\Pink\openCVLibrary300\build\generated\res\pngs\debug
-org.opencv.openCVLibrary300-updated_navigation_xml-1 D:\gitPlanet\yola\Pink\openCVLibrary300\build\generated\updated_navigation_xml\debug
-org.opencv.openCVLibrary300-mergeDebugResources-2 D:\gitPlanet\yola\Pink\openCVLibrary300\build\intermediates\incremental\debug\mergeDebugResources\merged.dir
-org.opencv.openCVLibrary300-mergeDebugResources-3 D:\gitPlanet\yola\Pink\openCVLibrary300\build\intermediates\incremental\debug\mergeDebugResources\stripped.dir
-org.opencv.openCVLibrary300-debug-4 D:\gitPlanet\yola\Pink\openCVLibrary300\build\intermediates\merged_res\debug\mergeDebugResources
-org.opencv.openCVLibrary300-debug-5 D:\gitPlanet\yola\Pink\openCVLibrary300\build\intermediates\packaged_res\debug\packageDebugResources
-org.opencv.openCVLibrary300-debug-6 D:\gitPlanet\yola\Pink\openCVLibrary300\src\debug\res
-org.opencv.openCVLibrary300-main-7 D:\gitPlanet\yola\Pink\openCVLibrary300\src\main\res
-gradleHome-0 D:\.gradle
\ No newline at end of file
diff --git a/Pink/openCVLibrary300/build/intermediates/android_res_source_set_path_map/debugAndroidTest/mapDebugAndroidTestSourceSetPaths/file-map.txt b/Pink/openCVLibrary300/build/intermediates/android_res_source_set_path_map/debugAndroidTest/mapDebugAndroidTestSourceSetPaths/file-map.txt
deleted file mode 100644
index b9ce104..0000000
--- a/Pink/openCVLibrary300/build/intermediates/android_res_source_set_path_map/debugAndroidTest/mapDebugAndroidTestSourceSetPaths/file-map.txt
+++ /dev/null
@@ -1,5 +0,0 @@
-org.opencv.test.openCVLibrary300-updated_navigation_xml-0 D:\gitPlanet\yola\Pink\openCVLibrary300\build\generated\updated_navigation_xml\debugAndroidTest
-org.opencv.test.openCVLibrary300-packageDebugAndroidTestResources-1 D:\gitPlanet\yola\Pink\openCVLibrary300\build\intermediates\incremental\debugAndroidTest\packageDebugAndroidTestResources\merged.dir
-org.opencv.test.openCVLibrary300-packageDebugAndroidTestResources-2 D:\gitPlanet\yola\Pink\openCVLibrary300\build\intermediates\incremental\debugAndroidTest\packageDebugAndroidTestResources\stripped.dir
-org.opencv.test.openCVLibrary300-debugAndroidTest-3 D:\gitPlanet\yola\Pink\openCVLibrary300\build\intermediates\merged_res\debugAndroidTest\mergeDebugAndroidTestResources
-gradleHome-0 D:\.gradle
\ No newline at end of file
diff --git a/Pink/openCVLibrary300/build/intermediates/annotation_processor_list/debug/javaPreCompileDebug/annotationProcessors.json b/Pink/openCVLibrary300/build/intermediates/annotation_processor_list/debug/javaPreCompileDebug/annotationProcessors.json
deleted file mode 100644
index 9e26dfe..0000000
--- a/Pink/openCVLibrary300/build/intermediates/annotation_processor_list/debug/javaPreCompileDebug/annotationProcessors.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
\ No newline at end of file
diff --git a/Pink/openCVLibrary300/build/intermediates/annotation_processor_list/debugAndroidTest/javaPreCompileDebugAndroidTest/annotationProcessors.json b/Pink/openCVLibrary300/build/intermediates/annotation_processor_list/debugAndroidTest/javaPreCompileDebugAndroidTest/annotationProcessors.json
deleted file mode 100644
index 9e26dfe..0000000
--- a/Pink/openCVLibrary300/build/intermediates/annotation_processor_list/debugAndroidTest/javaPreCompileDebugAndroidTest/annotationProcessors.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
\ No newline at end of file
diff --git a/Pink/openCVLibrary300/build/intermediates/annotations_typedef_file/debug/extractDebugAnnotations/typedefs.txt b/Pink/openCVLibrary300/build/intermediates/annotations_typedef_file/debug/extractDebugAnnotations/typedefs.txt
deleted file mode 100644
index e69de29..0000000
diff --git a/Pink/openCVLibrary300/build/intermediates/apk_ide_redirect_file/debugAndroidTest/createDebugAndroidTestApkListingFileRedirect/redirect.txt b/Pink/openCVLibrary300/build/intermediates/apk_ide_redirect_file/debugAndroidTest/createDebugAndroidTestApkListingFileRedirect/redirect.txt
deleted file mode 100644
index 84e7ae0..0000000
--- a/Pink/openCVLibrary300/build/intermediates/apk_ide_redirect_file/debugAndroidTest/createDebugAndroidTestApkListingFileRedirect/redirect.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-#- File Locator -
-listingFile=../../../../outputs/apk/androidTest/debug/output-metadata.json
diff --git a/Pink/openCVLibrary300/build/intermediates/compile_and_runtime_r_class_jar/debugAndroidTest/processDebugAndroidTestResources/R.jar b/Pink/openCVLibrary300/build/intermediates/compile_and_runtime_r_class_jar/debugAndroidTest/processDebugAndroidTestResources/R.jar
deleted file mode 100644
index b1cd1a8..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/compile_and_runtime_r_class_jar/debugAndroidTest/processDebugAndroidTestResources/R.jar and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/compile_library_classes_jar/debug/bundleLibCompileToJarDebug/classes.jar b/Pink/openCVLibrary300/build/intermediates/compile_library_classes_jar/debug/bundleLibCompileToJarDebug/classes.jar
deleted file mode 100644
index 6742d4c..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/compile_library_classes_jar/debug/bundleLibCompileToJarDebug/classes.jar and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/compile_r_class_jar/debug/generateDebugRFile/R.jar b/Pink/openCVLibrary300/build/intermediates/compile_r_class_jar/debug/generateDebugRFile/R.jar
deleted file mode 100644
index 7aa4906..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/compile_r_class_jar/debug/generateDebugRFile/R.jar and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/compile_r_class_jar/debugAndroidTest/generateDebugAndroidTestRFile/R.jar b/Pink/openCVLibrary300/build/intermediates/compile_r_class_jar/debugAndroidTest/generateDebugAndroidTestRFile/R.jar
deleted file mode 100644
index ada5fc7..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/compile_r_class_jar/debugAndroidTest/generateDebugAndroidTestRFile/R.jar and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/compile_symbol_list/debug/generateDebugRFile/R.txt b/Pink/openCVLibrary300/build/intermediates/compile_symbol_list/debug/generateDebugRFile/R.txt
deleted file mode 100644
index e69de29..0000000
diff --git a/Pink/openCVLibrary300/build/intermediates/compile_symbol_list/debugAndroidTest/generateDebugAndroidTestRFile/R.txt b/Pink/openCVLibrary300/build/intermediates/compile_symbol_list/debugAndroidTest/generateDebugAndroidTestRFile/R.txt
deleted file mode 100644
index e69de29..0000000
diff --git a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/currentProject/dirs_bucket_0/graph.bin b/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/currentProject/dirs_bucket_0/graph.bin
deleted file mode 100644
index 601f245..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/currentProject/dirs_bucket_0/graph.bin and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/currentProject/dirs_bucket_1/graph.bin b/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/currentProject/dirs_bucket_1/graph.bin
deleted file mode 100644
index 601f245..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/currentProject/dirs_bucket_1/graph.bin and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/currentProject/dirs_bucket_2/graph.bin b/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/currentProject/dirs_bucket_2/graph.bin
deleted file mode 100644
index 601f245..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/currentProject/dirs_bucket_2/graph.bin and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/currentProject/dirs_bucket_3/graph.bin b/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/currentProject/dirs_bucket_3/graph.bin
deleted file mode 100644
index 601f245..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/currentProject/dirs_bucket_3/graph.bin and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/currentProject/dirs_bucket_4/graph.bin b/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/currentProject/dirs_bucket_4/graph.bin
deleted file mode 100644
index 601f245..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/currentProject/dirs_bucket_4/graph.bin and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/currentProject/dirs_bucket_5/graph.bin b/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/currentProject/dirs_bucket_5/graph.bin
deleted file mode 100644
index 601f245..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/currentProject/dirs_bucket_5/graph.bin and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/currentProject/dirs_bucket_6/graph.bin b/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/currentProject/dirs_bucket_6/graph.bin
deleted file mode 100644
index 601f245..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/currentProject/dirs_bucket_6/graph.bin and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/currentProject/dirs_bucket_7/graph.bin b/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/currentProject/dirs_bucket_7/graph.bin
deleted file mode 100644
index 601f245..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/currentProject/dirs_bucket_7/graph.bin and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/currentProject/dirs_bucket_8/graph.bin b/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/currentProject/dirs_bucket_8/graph.bin
deleted file mode 100644
index 601f245..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/currentProject/dirs_bucket_8/graph.bin and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/currentProject/dirs_bucket_9/graph.bin b/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/currentProject/dirs_bucket_9/graph.bin
deleted file mode 100644
index 601f245..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/currentProject/dirs_bucket_9/graph.bin and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/currentProject/jar_3060dc580b8b1457bfe8160c33024bbfe908f501b76d52e09e0e0b784ba4cb14_bucket_0/graph.bin b/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/currentProject/jar_3060dc580b8b1457bfe8160c33024bbfe908f501b76d52e09e0e0b784ba4cb14_bucket_0/graph.bin
deleted file mode 100644
index 601f245..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/currentProject/jar_3060dc580b8b1457bfe8160c33024bbfe908f501b76d52e09e0e0b784ba4cb14_bucket_0/graph.bin and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/currentProject/jar_3060dc580b8b1457bfe8160c33024bbfe908f501b76d52e09e0e0b784ba4cb14_bucket_1/graph.bin b/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/currentProject/jar_3060dc580b8b1457bfe8160c33024bbfe908f501b76d52e09e0e0b784ba4cb14_bucket_1/graph.bin
deleted file mode 100644
index 601f245..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/currentProject/jar_3060dc580b8b1457bfe8160c33024bbfe908f501b76d52e09e0e0b784ba4cb14_bucket_1/graph.bin and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/currentProject/jar_3060dc580b8b1457bfe8160c33024bbfe908f501b76d52e09e0e0b784ba4cb14_bucket_2/graph.bin b/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/currentProject/jar_3060dc580b8b1457bfe8160c33024bbfe908f501b76d52e09e0e0b784ba4cb14_bucket_2/graph.bin
deleted file mode 100644
index 601f245..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/currentProject/jar_3060dc580b8b1457bfe8160c33024bbfe908f501b76d52e09e0e0b784ba4cb14_bucket_2/graph.bin and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/currentProject/jar_3060dc580b8b1457bfe8160c33024bbfe908f501b76d52e09e0e0b784ba4cb14_bucket_3/graph.bin b/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/currentProject/jar_3060dc580b8b1457bfe8160c33024bbfe908f501b76d52e09e0e0b784ba4cb14_bucket_3/graph.bin
deleted file mode 100644
index 601f245..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/currentProject/jar_3060dc580b8b1457bfe8160c33024bbfe908f501b76d52e09e0e0b784ba4cb14_bucket_3/graph.bin and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/currentProject/jar_3060dc580b8b1457bfe8160c33024bbfe908f501b76d52e09e0e0b784ba4cb14_bucket_4/graph.bin b/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/currentProject/jar_3060dc580b8b1457bfe8160c33024bbfe908f501b76d52e09e0e0b784ba4cb14_bucket_4/graph.bin
deleted file mode 100644
index 601f245..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/currentProject/jar_3060dc580b8b1457bfe8160c33024bbfe908f501b76d52e09e0e0b784ba4cb14_bucket_4/graph.bin and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/currentProject/jar_3060dc580b8b1457bfe8160c33024bbfe908f501b76d52e09e0e0b784ba4cb14_bucket_5/graph.bin b/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/currentProject/jar_3060dc580b8b1457bfe8160c33024bbfe908f501b76d52e09e0e0b784ba4cb14_bucket_5/graph.bin
deleted file mode 100644
index 601f245..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/currentProject/jar_3060dc580b8b1457bfe8160c33024bbfe908f501b76d52e09e0e0b784ba4cb14_bucket_5/graph.bin and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/currentProject/jar_3060dc580b8b1457bfe8160c33024bbfe908f501b76d52e09e0e0b784ba4cb14_bucket_6/graph.bin b/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/currentProject/jar_3060dc580b8b1457bfe8160c33024bbfe908f501b76d52e09e0e0b784ba4cb14_bucket_6/graph.bin
deleted file mode 100644
index 601f245..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/currentProject/jar_3060dc580b8b1457bfe8160c33024bbfe908f501b76d52e09e0e0b784ba4cb14_bucket_6/graph.bin and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/currentProject/jar_3060dc580b8b1457bfe8160c33024bbfe908f501b76d52e09e0e0b784ba4cb14_bucket_7/graph.bin b/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/currentProject/jar_3060dc580b8b1457bfe8160c33024bbfe908f501b76d52e09e0e0b784ba4cb14_bucket_7/graph.bin
deleted file mode 100644
index 601f245..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/currentProject/jar_3060dc580b8b1457bfe8160c33024bbfe908f501b76d52e09e0e0b784ba4cb14_bucket_7/graph.bin and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/currentProject/jar_3060dc580b8b1457bfe8160c33024bbfe908f501b76d52e09e0e0b784ba4cb14_bucket_8/graph.bin b/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/currentProject/jar_3060dc580b8b1457bfe8160c33024bbfe908f501b76d52e09e0e0b784ba4cb14_bucket_8/graph.bin
deleted file mode 100644
index 601f245..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/currentProject/jar_3060dc580b8b1457bfe8160c33024bbfe908f501b76d52e09e0e0b784ba4cb14_bucket_8/graph.bin and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/currentProject/jar_3060dc580b8b1457bfe8160c33024bbfe908f501b76d52e09e0e0b784ba4cb14_bucket_9/graph.bin b/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/currentProject/jar_3060dc580b8b1457bfe8160c33024bbfe908f501b76d52e09e0e0b784ba4cb14_bucket_9/graph.bin
deleted file mode 100644
index 601f245..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/currentProject/jar_3060dc580b8b1457bfe8160c33024bbfe908f501b76d52e09e0e0b784ba4cb14_bucket_9/graph.bin and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/externalLibs/dirs_bucket_0/graph.bin b/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/externalLibs/dirs_bucket_0/graph.bin
deleted file mode 100644
index 601f245..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/externalLibs/dirs_bucket_0/graph.bin and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/externalLibs/dirs_bucket_1/graph.bin b/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/externalLibs/dirs_bucket_1/graph.bin
deleted file mode 100644
index 601f245..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/externalLibs/dirs_bucket_1/graph.bin and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/externalLibs/dirs_bucket_2/graph.bin b/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/externalLibs/dirs_bucket_2/graph.bin
deleted file mode 100644
index 601f245..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/externalLibs/dirs_bucket_2/graph.bin and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/externalLibs/dirs_bucket_3/graph.bin b/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/externalLibs/dirs_bucket_3/graph.bin
deleted file mode 100644
index 601f245..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/externalLibs/dirs_bucket_3/graph.bin and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/externalLibs/dirs_bucket_4/graph.bin b/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/externalLibs/dirs_bucket_4/graph.bin
deleted file mode 100644
index 601f245..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/externalLibs/dirs_bucket_4/graph.bin and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/externalLibs/dirs_bucket_5/graph.bin b/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/externalLibs/dirs_bucket_5/graph.bin
deleted file mode 100644
index 601f245..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/externalLibs/dirs_bucket_5/graph.bin and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/externalLibs/dirs_bucket_6/graph.bin b/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/externalLibs/dirs_bucket_6/graph.bin
deleted file mode 100644
index 601f245..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/externalLibs/dirs_bucket_6/graph.bin and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/externalLibs/dirs_bucket_7/graph.bin b/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/externalLibs/dirs_bucket_7/graph.bin
deleted file mode 100644
index 601f245..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/externalLibs/dirs_bucket_7/graph.bin and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/externalLibs/dirs_bucket_8/graph.bin b/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/externalLibs/dirs_bucket_8/graph.bin
deleted file mode 100644
index 601f245..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/externalLibs/dirs_bucket_8/graph.bin and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/externalLibs/dirs_bucket_9/graph.bin b/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/externalLibs/dirs_bucket_9/graph.bin
deleted file mode 100644
index 601f245..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/externalLibs/dirs_bucket_9/graph.bin and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/mixedScopes/dirs_bucket_0/graph.bin b/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/mixedScopes/dirs_bucket_0/graph.bin
deleted file mode 100644
index 601f245..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/mixedScopes/dirs_bucket_0/graph.bin and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/mixedScopes/dirs_bucket_1/graph.bin b/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/mixedScopes/dirs_bucket_1/graph.bin
deleted file mode 100644
index 601f245..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/mixedScopes/dirs_bucket_1/graph.bin and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/mixedScopes/dirs_bucket_2/graph.bin b/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/mixedScopes/dirs_bucket_2/graph.bin
deleted file mode 100644
index 601f245..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/mixedScopes/dirs_bucket_2/graph.bin and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/mixedScopes/dirs_bucket_3/graph.bin b/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/mixedScopes/dirs_bucket_3/graph.bin
deleted file mode 100644
index 601f245..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/mixedScopes/dirs_bucket_3/graph.bin and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/mixedScopes/dirs_bucket_4/graph.bin b/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/mixedScopes/dirs_bucket_4/graph.bin
deleted file mode 100644
index 601f245..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/mixedScopes/dirs_bucket_4/graph.bin and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/mixedScopes/dirs_bucket_5/graph.bin b/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/mixedScopes/dirs_bucket_5/graph.bin
deleted file mode 100644
index 601f245..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/mixedScopes/dirs_bucket_5/graph.bin and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/mixedScopes/dirs_bucket_6/graph.bin b/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/mixedScopes/dirs_bucket_6/graph.bin
deleted file mode 100644
index 601f245..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/mixedScopes/dirs_bucket_6/graph.bin and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/mixedScopes/dirs_bucket_7/graph.bin b/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/mixedScopes/dirs_bucket_7/graph.bin
deleted file mode 100644
index 601f245..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/mixedScopes/dirs_bucket_7/graph.bin and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/mixedScopes/dirs_bucket_8/graph.bin b/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/mixedScopes/dirs_bucket_8/graph.bin
deleted file mode 100644
index 601f245..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/mixedScopes/dirs_bucket_8/graph.bin and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/mixedScopes/dirs_bucket_9/graph.bin b/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/mixedScopes/dirs_bucket_9/graph.bin
deleted file mode 100644
index 601f245..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/mixedScopes/dirs_bucket_9/graph.bin and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/otherProjects/dirs_bucket_0/graph.bin b/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/otherProjects/dirs_bucket_0/graph.bin
deleted file mode 100644
index 601f245..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/otherProjects/dirs_bucket_0/graph.bin and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/otherProjects/dirs_bucket_1/graph.bin b/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/otherProjects/dirs_bucket_1/graph.bin
deleted file mode 100644
index 601f245..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/otherProjects/dirs_bucket_1/graph.bin and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/otherProjects/dirs_bucket_2/graph.bin b/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/otherProjects/dirs_bucket_2/graph.bin
deleted file mode 100644
index 601f245..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/otherProjects/dirs_bucket_2/graph.bin and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/otherProjects/dirs_bucket_3/graph.bin b/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/otherProjects/dirs_bucket_3/graph.bin
deleted file mode 100644
index 601f245..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/otherProjects/dirs_bucket_3/graph.bin and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/otherProjects/dirs_bucket_4/graph.bin b/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/otherProjects/dirs_bucket_4/graph.bin
deleted file mode 100644
index 601f245..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/otherProjects/dirs_bucket_4/graph.bin and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/otherProjects/dirs_bucket_5/graph.bin b/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/otherProjects/dirs_bucket_5/graph.bin
deleted file mode 100644
index 601f245..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/otherProjects/dirs_bucket_5/graph.bin and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/otherProjects/dirs_bucket_6/graph.bin b/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/otherProjects/dirs_bucket_6/graph.bin
deleted file mode 100644
index 601f245..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/otherProjects/dirs_bucket_6/graph.bin and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/otherProjects/dirs_bucket_7/graph.bin b/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/otherProjects/dirs_bucket_7/graph.bin
deleted file mode 100644
index 601f245..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/otherProjects/dirs_bucket_7/graph.bin and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/otherProjects/dirs_bucket_8/graph.bin b/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/otherProjects/dirs_bucket_8/graph.bin
deleted file mode 100644
index 601f245..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/otherProjects/dirs_bucket_8/graph.bin and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/otherProjects/dirs_bucket_9/graph.bin b/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/otherProjects/dirs_bucket_9/graph.bin
deleted file mode 100644
index 601f245..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/otherProjects/dirs_bucket_9/graph.bin and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/dex/debugAndroidTest/mergeExtDexDebugAndroidTest/classes.dex b/Pink/openCVLibrary300/build/intermediates/dex/debugAndroidTest/mergeExtDexDebugAndroidTest/classes.dex
deleted file mode 100644
index 710db50..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/dex/debugAndroidTest/mergeExtDexDebugAndroidTest/classes.dex and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/dex/debugAndroidTest/mergeLibDexDebugAndroidTest/1/classes.dex b/Pink/openCVLibrary300/build/intermediates/dex/debugAndroidTest/mergeLibDexDebugAndroidTest/1/classes.dex
deleted file mode 100644
index 1d2ec76..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/dex/debugAndroidTest/mergeLibDexDebugAndroidTest/1/classes.dex and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/dex/debugAndroidTest/mergeLibDexDebugAndroidTest/10/classes.dex b/Pink/openCVLibrary300/build/intermediates/dex/debugAndroidTest/mergeLibDexDebugAndroidTest/10/classes.dex
deleted file mode 100644
index 1c06a6f..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/dex/debugAndroidTest/mergeLibDexDebugAndroidTest/10/classes.dex and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/dex/debugAndroidTest/mergeLibDexDebugAndroidTest/12/classes.dex b/Pink/openCVLibrary300/build/intermediates/dex/debugAndroidTest/mergeLibDexDebugAndroidTest/12/classes.dex
deleted file mode 100644
index c59e771..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/dex/debugAndroidTest/mergeLibDexDebugAndroidTest/12/classes.dex and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/dex/debugAndroidTest/mergeLibDexDebugAndroidTest/13/classes.dex b/Pink/openCVLibrary300/build/intermediates/dex/debugAndroidTest/mergeLibDexDebugAndroidTest/13/classes.dex
deleted file mode 100644
index 7434e1b..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/dex/debugAndroidTest/mergeLibDexDebugAndroidTest/13/classes.dex and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/dex/debugAndroidTest/mergeLibDexDebugAndroidTest/2/classes.dex b/Pink/openCVLibrary300/build/intermediates/dex/debugAndroidTest/mergeLibDexDebugAndroidTest/2/classes.dex
deleted file mode 100644
index dbecdb5..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/dex/debugAndroidTest/mergeLibDexDebugAndroidTest/2/classes.dex and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/dex/debugAndroidTest/mergeLibDexDebugAndroidTest/6/classes.dex b/Pink/openCVLibrary300/build/intermediates/dex/debugAndroidTest/mergeLibDexDebugAndroidTest/6/classes.dex
deleted file mode 100644
index 9e4ac97..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/dex/debugAndroidTest/mergeLibDexDebugAndroidTest/6/classes.dex and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/dex/debugAndroidTest/mergeLibDexDebugAndroidTest/8/classes.dex b/Pink/openCVLibrary300/build/intermediates/dex/debugAndroidTest/mergeLibDexDebugAndroidTest/8/classes.dex
deleted file mode 100644
index 85ffb4f..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/dex/debugAndroidTest/mergeLibDexDebugAndroidTest/8/classes.dex and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/dex/debugAndroidTest/mergeLibDexDebugAndroidTest/9/classes.dex b/Pink/openCVLibrary300/build/intermediates/dex/debugAndroidTest/mergeLibDexDebugAndroidTest/9/classes.dex
deleted file mode 100644
index b64416a..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/dex/debugAndroidTest/mergeLibDexDebugAndroidTest/9/classes.dex and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/dex/debugAndroidTest/mergeProjectDexDebugAndroidTest/0/classes.dex b/Pink/openCVLibrary300/build/intermediates/dex/debugAndroidTest/mergeProjectDexDebugAndroidTest/0/classes.dex
deleted file mode 100644
index 26042e9..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/dex/debugAndroidTest/mergeProjectDexDebugAndroidTest/0/classes.dex and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/dex_archive_input_jar_hashes/debugAndroidTest/dexBuilderDebugAndroidTest/out b/Pink/openCVLibrary300/build/intermediates/dex_archive_input_jar_hashes/debugAndroidTest/dexBuilderDebugAndroidTest/out
deleted file mode 100644
index fa8c027..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/dex_archive_input_jar_hashes/debugAndroidTest/dexBuilderDebugAndroidTest/out and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/dex_number_of_buckets_file/debugAndroidTest/dexBuilderDebugAndroidTest/out b/Pink/openCVLibrary300/build/intermediates/dex_number_of_buckets_file/debugAndroidTest/dexBuilderDebugAndroidTest/out
deleted file mode 100644
index 9a03714..0000000
--- a/Pink/openCVLibrary300/build/intermediates/dex_number_of_buckets_file/debugAndroidTest/dexBuilderDebugAndroidTest/out
+++ /dev/null
@@ -1 +0,0 @@
-10
\ No newline at end of file
diff --git a/Pink/openCVLibrary300/build/intermediates/global_synthetics_dex/debugAndroidTest/generateDebugAndroidTestGlobalSynthetics/classes.dex b/Pink/openCVLibrary300/build/intermediates/global_synthetics_dex/debugAndroidTest/generateDebugAndroidTestGlobalSynthetics/classes.dex
deleted file mode 100644
index 929ea64..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/global_synthetics_dex/debugAndroidTest/generateDebugAndroidTestGlobalSynthetics/classes.dex and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/incremental/debug-mergeJavaRes/merge-state b/Pink/openCVLibrary300/build/intermediates/incremental/debug-mergeJavaRes/merge-state
deleted file mode 100644
index 1c983fc..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/incremental/debug-mergeJavaRes/merge-state and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/incremental/debug/packageDebugResources/compile-file-map.properties b/Pink/openCVLibrary300/build/intermediates/incremental/debug/packageDebugResources/compile-file-map.properties
deleted file mode 100644
index fec9f6b..0000000
--- a/Pink/openCVLibrary300/build/intermediates/incremental/debug/packageDebugResources/compile-file-map.properties
+++ /dev/null
@@ -1 +0,0 @@
-#Mon Jul 13 17:00:29 CST 2026
diff --git a/Pink/openCVLibrary300/build/intermediates/incremental/debug/packageDebugResources/merger.xml b/Pink/openCVLibrary300/build/intermediates/incremental/debug/packageDebugResources/merger.xml
deleted file mode 100644
index 1b721ab..0000000
--- a/Pink/openCVLibrary300/build/intermediates/incremental/debug/packageDebugResources/merger.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-
-
\ No newline at end of file
diff --git a/Pink/openCVLibrary300/build/intermediates/incremental/debugAndroidTest-mergeJavaRes/merge-state b/Pink/openCVLibrary300/build/intermediates/incremental/debugAndroidTest-mergeJavaRes/merge-state
deleted file mode 100644
index 2c2e394..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/incremental/debugAndroidTest-mergeJavaRes/merge-state and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/incremental/debugAndroidTest-mergeJavaRes/zip-cache/HhFKBdt5R6E2hJ3SdJC8TQ== b/Pink/openCVLibrary300/build/intermediates/incremental/debugAndroidTest-mergeJavaRes/zip-cache/HhFKBdt5R6E2hJ3SdJC8TQ==
deleted file mode 100644
index d92be7d..0000000
--- a/Pink/openCVLibrary300/build/intermediates/incremental/debugAndroidTest-mergeJavaRes/zip-cache/HhFKBdt5R6E2hJ3SdJC8TQ==
+++ /dev/null
@@ -1 +0,0 @@
-[{"key":"META-INF/MANIFEST.MF","name":"META-INF/MANIFEST.MF","size":128,"crc":219314733},{"key":"org/intellij/lang/annotations/Flow.class","name":"org/intellij/lang/annotations/Flow.class","size":1217,"crc":-2102043213},{"key":"org/intellij/lang/annotations/Identifier.class","name":"org/intellij/lang/annotations/Identifier.class","size":324,"crc":1003706824},{"key":"org/intellij/lang/annotations/JdkConstants$AdjustableOrientation.class","name":"org/intellij/lang/annotations/JdkConstants$AdjustableOrientation.class","size":299,"crc":585442457},{"key":"org/intellij/lang/annotations/JdkConstants$BoxLayoutAxis.class","name":"org/intellij/lang/annotations/JdkConstants$BoxLayoutAxis.class","size":283,"crc":2112307339},{"key":"org/intellij/lang/annotations/JdkConstants$CalendarMonth.class","name":"org/intellij/lang/annotations/JdkConstants$CalendarMonth.class","size":283,"crc":-1461794964},{"key":"org/intellij/lang/annotations/JdkConstants$CursorType.class","name":"org/intellij/lang/annotations/JdkConstants$CursorType.class","size":277,"crc":1261991804},{"key":"org/intellij/lang/annotations/JdkConstants$FlowLayoutAlignment.class","name":"org/intellij/lang/annotations/JdkConstants$FlowLayoutAlignment.class","size":295,"crc":-1309531958},{"key":"org/intellij/lang/annotations/JdkConstants$FontStyle.class","name":"org/intellij/lang/annotations/JdkConstants$FontStyle.class","size":275,"crc":672556144},{"key":"org/intellij/lang/annotations/JdkConstants$HorizontalAlignment.class","name":"org/intellij/lang/annotations/JdkConstants$HorizontalAlignment.class","size":295,"crc":-1845894850},{"key":"org/intellij/lang/annotations/JdkConstants$InputEventMask.class","name":"org/intellij/lang/annotations/JdkConstants$InputEventMask.class","size":285,"crc":115820859},{"key":"org/intellij/lang/annotations/JdkConstants$ListSelectionMode.class","name":"org/intellij/lang/annotations/JdkConstants$ListSelectionMode.class","size":291,"crc":1972304950},{"key":"org/intellij/lang/annotations/JdkConstants$PatternFlags.class","name":"org/intellij/lang/annotations/JdkConstants$PatternFlags.class","size":281,"crc":-1389407250},{"key":"org/intellij/lang/annotations/JdkConstants$TabLayoutPolicy.class","name":"org/intellij/lang/annotations/JdkConstants$TabLayoutPolicy.class","size":287,"crc":-636391766},{"key":"org/intellij/lang/annotations/JdkConstants$TabPlacement.class","name":"org/intellij/lang/annotations/JdkConstants$TabPlacement.class","size":281,"crc":-214765930},{"key":"org/intellij/lang/annotations/JdkConstants$TitledBorderJustification.class","name":"org/intellij/lang/annotations/JdkConstants$TitledBorderJustification.class","size":307,"crc":859456766},{"key":"org/intellij/lang/annotations/JdkConstants$TitledBorderTitlePosition.class","name":"org/intellij/lang/annotations/JdkConstants$TitledBorderTitlePosition.class","size":307,"crc":1103964778},{"key":"org/intellij/lang/annotations/JdkConstants$TreeSelectionMode.class","name":"org/intellij/lang/annotations/JdkConstants$TreeSelectionMode.class","size":291,"crc":-474777859},{"key":"org/intellij/lang/annotations/JdkConstants.class","name":"org/intellij/lang/annotations/JdkConstants.class","size":1730,"crc":1434561639},{"key":"org/intellij/lang/annotations/Language.class","name":"org/intellij/lang/annotations/Language.class","size":681,"crc":-1817758794},{"key":"org/intellij/lang/annotations/MagicConstant.class","name":"org/intellij/lang/annotations/MagicConstant.class","size":715,"crc":-1592799795},{"key":"org/intellij/lang/annotations/Pattern.class","name":"org/intellij/lang/annotations/Pattern.class","size":600,"crc":-530891111},{"key":"org/intellij/lang/annotations/PrintFormat.class","name":"org/intellij/lang/annotations/PrintFormat.class","size":356,"crc":1445148429},{"key":"org/intellij/lang/annotations/PrintFormatPattern.class","name":"org/intellij/lang/annotations/PrintFormatPattern.class","size":964,"crc":-1507760601},{"key":"org/intellij/lang/annotations/RegExp.class","name":"org/intellij/lang/annotations/RegExp.class","size":665,"crc":-762257026},{"key":"org/intellij/lang/annotations/Subst.class","name":"org/intellij/lang/annotations/Subst.class","size":199,"crc":-1769088951},{"key":"org/jetbrains/annotations/Contract.class","name":"org/jetbrains/annotations/Contract.class","size":531,"crc":562269709},{"key":"org/jetbrains/annotations/Nls.class","name":"org/jetbrains/annotations/Nls.class","size":502,"crc":776170298},{"key":"org/jetbrains/annotations/NonNls.class","name":"org/jetbrains/annotations/NonNls.class","size":508,"crc":1172811652},{"key":"org/jetbrains/annotations/NotNull.class","name":"org/jetbrains/annotations/NotNull.class","size":546,"crc":-316212578},{"key":"org/jetbrains/annotations/Nullable.class","name":"org/jetbrains/annotations/Nullable.class","size":548,"crc":-689673279},{"key":"org/jetbrains/annotations/PropertyKey.class","name":"org/jetbrains/annotations/PropertyKey.class","size":525,"crc":862906181},{"key":"org/jetbrains/annotations/TestOnly.class","name":"org/jetbrains/annotations/TestOnly.class","size":453,"crc":1033452998},{"key":"META-INF/maven/org.jetbrains/annotations/pom.xml","name":"META-INF/maven/org.jetbrains/annotations/pom.xml","size":4930,"crc":-127628560},{"key":"META-INF/maven/org.jetbrains/annotations/pom.properties","name":"META-INF/maven/org.jetbrains/annotations/pom.properties","size":108,"crc":97218998}]
\ No newline at end of file
diff --git a/Pink/openCVLibrary300/build/intermediates/incremental/debugAndroidTest-mergeJavaRes/zip-cache/weIrMVK1ix0u8bhEDn6+1A== b/Pink/openCVLibrary300/build/intermediates/incremental/debugAndroidTest-mergeJavaRes/zip-cache/weIrMVK1ix0u8bhEDn6+1A==
deleted file mode 100644
index ab2d85d..0000000
--- a/Pink/openCVLibrary300/build/intermediates/incremental/debugAndroidTest-mergeJavaRes/zip-cache/weIrMVK1ix0u8bhEDn6+1A==
+++ /dev/null
@@ -1 +0,0 @@
-[{"key":"META-INF/MANIFEST.MF","name":"META-INF/MANIFEST.MF","size":214,"crc":-1636014641},{"key":"META-INF/kotlin-stdlib.kotlin_module","name":"META-INF/kotlin-stdlib.kotlin_module","size":7998,"crc":-1122367492},{"key":"kotlin/ArrayIntrinsicsKt.class","name":"kotlin/ArrayIntrinsicsKt.class","size":676,"crc":-1042886199},{"key":"kotlin/BuilderInference.class","name":"kotlin/BuilderInference.class","size":977,"crc":975598725},{"key":"kotlin/CharCodeJVMKt.class","name":"kotlin/CharCodeJVMKt.class","size":639,"crc":-1261566073},{"key":"kotlin/CharCodeKt.class","name":"kotlin/CharCodeKt.class","size":1267,"crc":-1066299721},{"key":"kotlin/CompareToKt.class","name":"kotlin/CompareToKt.class","size":998,"crc":-1437364828},{"key":"kotlin/ConsistentCopyVisibility.class","name":"kotlin/ConsistentCopyVisibility.class","size":885,"crc":624718739},{"key":"kotlin/ContextFunctionTypeParams.class","name":"kotlin/ContextFunctionTypeParams.class","size":887,"crc":-1353286264},{"key":"kotlin/ContextParametersKt.class","name":"kotlin/ContextParametersKt.class","size":445,"crc":-2027989233},{"key":"kotlin/ContextParametersKt__ContextKt.class","name":"kotlin/ContextParametersKt__ContextKt.class","size":35182,"crc":-621796911},{"key":"kotlin/ContextParametersKt__ContextOfKt.class","name":"kotlin/ContextParametersKt__ContextOfKt.class","size":947,"crc":-378934333},{"key":"kotlin/DeepRecursiveFunction.class","name":"kotlin/DeepRecursiveFunction.class","size":2005,"crc":227459087},{"key":"kotlin/DeepRecursiveKt.class","name":"kotlin/DeepRecursiveKt.class","size":2274,"crc":1664982138},{"key":"kotlin/DeepRecursiveScope.class","name":"kotlin/DeepRecursiveScope.class","size":2811,"crc":460834415},{"key":"kotlin/DeepRecursiveScopeImpl$crossFunctionCompletion$$inlined$Continuation$1.class","name":"kotlin/DeepRecursiveScopeImpl$crossFunctionCompletion$$inlined$Continuation$1.class","size":2952,"crc":-2108420059},{"key":"kotlin/DeepRecursiveScopeImpl.class","name":"kotlin/DeepRecursiveScopeImpl.class","size":7720,"crc":1828693964},{"key":"kotlin/Deprecated.class","name":"kotlin/Deprecated.class","size":1384,"crc":-1579619016},{"key":"kotlin/DeprecatedSinceKotlin.class","name":"kotlin/DeprecatedSinceKotlin.class","size":1308,"crc":-1612004334},{"key":"kotlin/DeprecationLevel.class","name":"kotlin/DeprecationLevel.class","size":1774,"crc":-8695544},{"key":"kotlin/DslMarker.class","name":"kotlin/DslMarker.class","size":955,"crc":1183864331},{"key":"kotlin/ExceptionsKt.class","name":"kotlin/ExceptionsKt.class","size":419,"crc":-1320979256},{"key":"kotlin/ExceptionsKt__ExceptionsKt.class","name":"kotlin/ExceptionsKt__ExceptionsKt.class","size":3595,"crc":-1525291448},{"key":"kotlin/ExperimentalMultiplatform.class","name":"kotlin/ExperimentalMultiplatform.class","size":1205,"crc":7859721},{"key":"kotlin/ExperimentalStdlibApi.class","name":"kotlin/ExperimentalStdlibApi.class","size":1404,"crc":-1152202948},{"key":"kotlin/ExperimentalSubclassOptIn.class","name":"kotlin/ExperimentalSubclassOptIn.class","size":897,"crc":1891751042},{"key":"kotlin/ExperimentalUnsignedTypes.class","name":"kotlin/ExperimentalUnsignedTypes.class","size":1353,"crc":281249513},{"key":"kotlin/ExposedCopyVisibility.class","name":"kotlin/ExposedCopyVisibility.class","size":879,"crc":771391513},{"key":"kotlin/ExtensionFunctionType.class","name":"kotlin/ExtensionFunctionType.class","size":729,"crc":1756455024},{"key":"kotlin/Function.class","name":"kotlin/Function.class","size":404,"crc":-177326894},{"key":"kotlin/HashCodeKt.class","name":"kotlin/HashCodeKt.class","size":671,"crc":1797869338},{"key":"kotlin/IgnorableReturnValue.class","name":"kotlin/IgnorableReturnValue.class","size":868,"crc":861989893},{"key":"kotlin/InitializedLazyImpl.class","name":"kotlin/InitializedLazyImpl.class","size":1434,"crc":-2080344094},{"key":"kotlin/KotlinNothingValueException.class","name":"kotlin/KotlinNothingValueException.class","size":1366,"crc":-88244266},{"key":"kotlin/KotlinNullPointerException.class","name":"kotlin/KotlinNullPointerException.class","size":892,"crc":404762385},{"key":"kotlin/KotlinVersion$Companion.class","name":"kotlin/KotlinVersion$Companion.class","size":896,"crc":712082463},{"key":"kotlin/KotlinVersion.class","name":"kotlin/KotlinVersion.class","size":3996,"crc":487133441},{"key":"kotlin/KotlinVersionCurrentValue.class","name":"kotlin/KotlinVersionCurrentValue.class","size":908,"crc":1769819289},{"key":"kotlin/LateinitKt.class","name":"kotlin/LateinitKt.class","size":1266,"crc":403971938},{"key":"kotlin/Lazy.class","name":"kotlin/Lazy.class","size":544,"crc":-416411977},{"key":"kotlin/LazyKt.class","name":"kotlin/LazyKt.class","size":388,"crc":-1820728754},{"key":"kotlin/LazyKt__LazyJVMKt$WhenMappings.class","name":"kotlin/LazyKt__LazyJVMKt$WhenMappings.class","size":785,"crc":904221500},{"key":"kotlin/LazyKt__LazyJVMKt.class","name":"kotlin/LazyKt__LazyJVMKt.class","size":2654,"crc":264340140},{"key":"kotlin/LazyKt__LazyKt.class","name":"kotlin/LazyKt__LazyKt.class","size":1570,"crc":1552841679},{"key":"kotlin/LazyThreadSafetyMode.class","name":"kotlin/LazyThreadSafetyMode.class","size":1804,"crc":1352859333},{"key":"kotlin/Metadata$DefaultImpls.class","name":"kotlin/Metadata$DefaultImpls.class","size":792,"crc":1962896593},{"key":"kotlin/Metadata.class","name":"kotlin/Metadata.class","size":1952,"crc":-2097530815},{"key":"kotlin/MustUseReturnValue.class","name":"kotlin/MustUseReturnValue.class","size":788,"crc":346658972},{"key":"kotlin/NoWhenBranchMatchedException.class","name":"kotlin/NoWhenBranchMatchedException.class","size":1271,"crc":-828222707},{"key":"kotlin/NotImplementedError.class","name":"kotlin/NotImplementedError.class","size":1098,"crc":-1125735966},{"key":"kotlin/NumbersKt.class","name":"kotlin/NumbersKt.class","size":517,"crc":-1479938048},{"key":"kotlin/NumbersKt__BigDecimalsKt.class","name":"kotlin/NumbersKt__BigDecimalsKt.class","size":4209,"crc":-1726302516},{"key":"kotlin/NumbersKt__BigIntegersKt.class","name":"kotlin/NumbersKt__BigIntegersKt.class","size":4930,"crc":1306389689},{"key":"kotlin/NumbersKt__FloorDivModKt.class","name":"kotlin/NumbersKt__FloorDivModKt.class","size":6948,"crc":874244362},{"key":"kotlin/NumbersKt__NumbersJVMKt.class","name":"kotlin/NumbersKt__NumbersJVMKt.class","size":4947,"crc":-1197893716},{"key":"kotlin/NumbersKt__NumbersKt.class","name":"kotlin/NumbersKt__NumbersKt.class","size":2748,"crc":-1763593595},{"key":"kotlin/OptIn.class","name":"kotlin/OptIn.class","size":1301,"crc":-1060621139},{"key":"kotlin/OptionalExpectation.class","name":"kotlin/OptionalExpectation.class","size":887,"crc":-1528259583},{"key":"kotlin/OverloadResolutionByLambdaReturnType.class","name":"kotlin/OverloadResolutionByLambdaReturnType.class","size":961,"crc":572637005},{"key":"kotlin/Pair.class","name":"kotlin/Pair.class","size":2875,"crc":53209965},{"key":"kotlin/ParameterName.class","name":"kotlin/ParameterName.class","size":879,"crc":1928355952},{"key":"kotlin/PreconditionsKt.class","name":"kotlin/PreconditionsKt.class","size":439,"crc":2070011041},{"key":"kotlin/PreconditionsKt__AssertionsJVMKt.class","name":"kotlin/PreconditionsKt__AssertionsJVMKt.class","size":2041,"crc":-1884220802},{"key":"kotlin/PreconditionsKt__PreconditionsKt.class","name":"kotlin/PreconditionsKt__PreconditionsKt.class","size":3982,"crc":2040436560},{"key":"kotlin/PropertyReferenceDelegatesKt.class","name":"kotlin/PropertyReferenceDelegatesKt.class","size":2954,"crc":-84670136},{"key":"kotlin/PublishedApi.class","name":"kotlin/PublishedApi.class","size":1001,"crc":-1551160875},{"key":"kotlin/ReplaceWith.class","name":"kotlin/ReplaceWith.class","size":940,"crc":-1833104324},{"key":"kotlin/RequiresOptIn$Level.class","name":"kotlin/RequiresOptIn$Level.class","size":1794,"crc":-192680604},{"key":"kotlin/RequiresOptIn.class","name":"kotlin/RequiresOptIn.class","size":1229,"crc":-1851122549},{"key":"kotlin/Result$Companion.class","name":"kotlin/Result$Companion.class","size":1673,"crc":-69486185},{"key":"kotlin/Result$Failure.class","name":"kotlin/Result$Failure.class","size":1931,"crc":1229030413},{"key":"kotlin/Result.class","name":"kotlin/Result.class","size":4001,"crc":354614215},{"key":"kotlin/ResultKt.class","name":"kotlin/ResultKt.class","size":7586,"crc":121680304},{"key":"kotlin/SafePublicationLazyImpl$Companion.class","name":"kotlin/SafePublicationLazyImpl$Companion.class","size":1056,"crc":-743438637},{"key":"kotlin/SafePublicationLazyImpl.class","name":"kotlin/SafePublicationLazyImpl.class","size":3842,"crc":361899766},{"key":"kotlin/SinceKotlin.class","name":"kotlin/SinceKotlin.class","size":1077,"crc":-1657512116},{"key":"kotlin/StandardKt.class","name":"kotlin/StandardKt.class","size":413,"crc":982803685},{"key":"kotlin/StandardKt__StandardKt.class","name":"kotlin/StandardKt__StandardKt.class","size":4429,"crc":607920000},{"key":"kotlin/StandardKt__SynchronizedKt.class","name":"kotlin/StandardKt__SynchronizedKt.class","size":1546,"crc":1942582603},{"key":"kotlin/SubclassOptInRequired.class","name":"kotlin/SubclassOptInRequired.class","size":1179,"crc":796509163},{"key":"kotlin/Suppress.class","name":"kotlin/Suppress.class","size":1185,"crc":1366661261},{"key":"kotlin/SuspendKt.class","name":"kotlin/SuspendKt.class","size":1168,"crc":-2125523880},{"key":"kotlin/SynchronizedLazyImpl.class","name":"kotlin/SynchronizedLazyImpl.class","size":3100,"crc":1205679612},{"key":"kotlin/ThrowsKt.class","name":"kotlin/ThrowsKt.class","size":521,"crc":840888322},{"key":"kotlin/Triple.class","name":"kotlin/Triple.class","size":3370,"crc":859684593},{"key":"kotlin/TuplesKt.class","name":"kotlin/TuplesKt.class","size":1898,"crc":1387649546},{"key":"kotlin/TypeAliasesKt.class","name":"kotlin/TypeAliasesKt.class","size":3137,"crc":-2075206212},{"key":"kotlin/TypeCastException.class","name":"kotlin/TypeCastException.class","size":859,"crc":-1324665884},{"key":"kotlin/UByte$Companion.class","name":"kotlin/UByte$Companion.class","size":926,"crc":-1652339094},{"key":"kotlin/UByte.class","name":"kotlin/UByte.class","size":11339,"crc":-81995698},{"key":"kotlin/UByteArray$Iterator.class","name":"kotlin/UByteArray$Iterator.class","size":2033,"crc":1389916405},{"key":"kotlin/UByteArray.class","name":"kotlin/UByteArray.class","size":7272,"crc":119136859},{"key":"kotlin/UByteArrayKt.class","name":"kotlin/UByteArrayKt.class","size":1597,"crc":1268804148},{"key":"kotlin/UByteKt.class","name":"kotlin/UByteKt.class","size":1036,"crc":-531975113},{"key":"kotlin/UInt$Companion.class","name":"kotlin/UInt$Companion.class","size":921,"crc":-892657350},{"key":"kotlin/UInt.class","name":"kotlin/UInt.class","size":11218,"crc":1867964554},{"key":"kotlin/UIntArray$Iterator.class","name":"kotlin/UIntArray$Iterator.class","size":2025,"crc":855761052},{"key":"kotlin/UIntArray.class","name":"kotlin/UIntArray.class","size":7238,"crc":-1771813302},{"key":"kotlin/UIntArrayKt.class","name":"kotlin/UIntArrayKt.class","size":1587,"crc":888352499},{"key":"kotlin/UIntKt.class","name":"kotlin/UIntKt.class","size":1338,"crc":684636453},{"key":"kotlin/ULong$Companion.class","name":"kotlin/ULong$Companion.class","size":926,"crc":-1539805977},{"key":"kotlin/ULong.class","name":"kotlin/ULong.class","size":11240,"crc":773276901},{"key":"kotlin/ULongArray$Iterator.class","name":"kotlin/ULongArray$Iterator.class","size":2033,"crc":-404422618},{"key":"kotlin/ULongArray.class","name":"kotlin/ULongArray.class","size":7272,"crc":-277463538},{"key":"kotlin/ULongArrayKt.class","name":"kotlin/ULongArrayKt.class","size":1597,"crc":970377078},{"key":"kotlin/ULongKt.class","name":"kotlin/ULongKt.class","size":1347,"crc":641575051},{"key":"kotlin/UNINITIALIZED_VALUE.class","name":"kotlin/UNINITIALIZED_VALUE.class","size":662,"crc":-1642092020},{"key":"kotlin/UNumbersKt.class","name":"kotlin/UNumbersKt.class","size":6696,"crc":444646541},{"key":"kotlin/UShort$Companion.class","name":"kotlin/UShort$Companion.class","size":931,"crc":658735167},{"key":"kotlin/UShort.class","name":"kotlin/UShort.class","size":11293,"crc":-1131591493},{"key":"kotlin/UShortArray$Iterator.class","name":"kotlin/UShortArray$Iterator.class","size":2041,"crc":-576363267},{"key":"kotlin/UShortArray.class","name":"kotlin/UShortArray.class","size":7296,"crc":-107595123},{"key":"kotlin/UShortArrayKt.class","name":"kotlin/UShortArrayKt.class","size":1607,"crc":-799055181},{"key":"kotlin/UShortKt.class","name":"kotlin/UShortKt.class","size":1042,"crc":758333788},{"key":"kotlin/UninitializedPropertyAccessException.class","name":"kotlin/UninitializedPropertyAccessException.class","size":1293,"crc":351590973},{"key":"kotlin/Unit.class","name":"kotlin/Unit.class","size":772,"crc":-836854172},{"key":"kotlin/UnsafeLazyImpl.class","name":"kotlin/UnsafeLazyImpl.class","size":2819,"crc":18530018},{"key":"kotlin/UnsafeVariance.class","name":"kotlin/UnsafeVariance.class","size":799,"crc":1347949094},{"key":"kotlin/UnsignedKt.class","name":"kotlin/UnsignedKt.class","size":5151,"crc":-1331855686},{"key":"kotlin/WasExperimental.class","name":"kotlin/WasExperimental.class","size":1102,"crc":2066953338},{"key":"kotlin/_Assertions.class","name":"kotlin/_Assertions.class","size":1016,"crc":-1008575630},{"key":"kotlin/kotlin.kotlin_builtins","name":"kotlin/kotlin.kotlin_builtins","size":29399,"crc":-2111613243},{"key":"kotlin/annotation/AnnotationRetention.class","name":"kotlin/annotation/AnnotationRetention.class","size":1873,"crc":392454239},{"key":"kotlin/annotation/AnnotationTarget.class","name":"kotlin/annotation/AnnotationTarget.class","size":2709,"crc":-74338617},{"key":"kotlin/annotation/MustBeDocumented.class","name":"kotlin/annotation/MustBeDocumented.class","size":730,"crc":1038714699},{"key":"kotlin/annotation/Repeatable.class","name":"kotlin/annotation/Repeatable.class","size":718,"crc":-725200752},{"key":"kotlin/annotation/Retention.class","name":"kotlin/annotation/Retention.class","size":896,"crc":271774074},{"key":"kotlin/annotation/Target.class","name":"kotlin/annotation/Target.class","size":883,"crc":649784735},{"key":"kotlin/annotation/annotation.kotlin_builtins","name":"kotlin/annotation/annotation.kotlin_builtins","size":1006,"crc":96078319},{"key":"kotlin/collections/AbstractCollection.class","name":"kotlin/collections/AbstractCollection.class","size":5945,"crc":471656748},{"key":"kotlin/collections/AbstractIterator.class","name":"kotlin/collections/AbstractIterator.class","size":2220,"crc":633672658},{"key":"kotlin/collections/AbstractList$Companion.class","name":"kotlin/collections/AbstractList$Companion.class","size":4262,"crc":1001075051},{"key":"kotlin/collections/AbstractList$IteratorImpl.class","name":"kotlin/collections/AbstractList$IteratorImpl.class","size":1884,"crc":1514659473},{"key":"kotlin/collections/AbstractList$ListIteratorImpl.class","name":"kotlin/collections/AbstractList$ListIteratorImpl.class","size":2495,"crc":-91036020},{"key":"kotlin/collections/AbstractList$SubList.class","name":"kotlin/collections/AbstractList$SubList.class","size":2395,"crc":951485847},{"key":"kotlin/collections/AbstractList.class","name":"kotlin/collections/AbstractList.class","size":5868,"crc":1227861102},{"key":"kotlin/collections/AbstractMap$Companion.class","name":"kotlin/collections/AbstractMap$Companion.class","size":3315,"crc":222904621},{"key":"kotlin/collections/AbstractMap$keys$1$iterator$1.class","name":"kotlin/collections/AbstractMap$keys$1$iterator$1.class","size":1654,"crc":779695125},{"key":"kotlin/collections/AbstractMap$keys$1.class","name":"kotlin/collections/AbstractMap$keys$1.class","size":1754,"crc":304676057},{"key":"kotlin/collections/AbstractMap$values$1$iterator$1.class","name":"kotlin/collections/AbstractMap$values$1$iterator$1.class","size":1662,"crc":51177302},{"key":"kotlin/collections/AbstractMap$values$1.class","name":"kotlin/collections/AbstractMap$values$1.class","size":1812,"crc":-1397145174},{"key":"kotlin/collections/AbstractMap.class","name":"kotlin/collections/AbstractMap.class","size":9141,"crc":-1353339835},{"key":"kotlin/collections/AbstractMutableCollection.class","name":"kotlin/collections/AbstractMutableCollection.class","size":1174,"crc":804536269},{"key":"kotlin/collections/AbstractMutableList.class","name":"kotlin/collections/AbstractMutableList.class","size":1458,"crc":-635473708},{"key":"kotlin/collections/AbstractMutableMap.class","name":"kotlin/collections/AbstractMutableMap.class","size":2097,"crc":1687088304},{"key":"kotlin/collections/AbstractMutableSet.class","name":"kotlin/collections/AbstractMutableSet.class","size":1104,"crc":896642129},{"key":"kotlin/collections/AbstractSet$Companion.class","name":"kotlin/collections/AbstractSet$Companion.class","size":2140,"crc":-267610188},{"key":"kotlin/collections/AbstractSet.class","name":"kotlin/collections/AbstractSet.class","size":2121,"crc":109267619},{"key":"kotlin/collections/ArrayAsCollection.class","name":"kotlin/collections/ArrayAsCollection.class","size":4863,"crc":-2059840666},{"key":"kotlin/collections/ArrayDeque$Companion.class","name":"kotlin/collections/ArrayDeque$Companion.class","size":936,"crc":-1819639323},{"key":"kotlin/collections/ArrayDeque.class","name":"kotlin/collections/ArrayDeque.class","size":20287,"crc":-1542396276},{"key":"kotlin/collections/ArraysKt.class","name":"kotlin/collections/ArraysKt.class","size":539,"crc":-1637339797},{"key":"kotlin/collections/ArraysKt__ArraysJVMKt.class","name":"kotlin/collections/ArraysKt__ArraysJVMKt.class","size":3654,"crc":-1904063147},{"key":"kotlin/collections/ArraysKt__ArraysKt.class","name":"kotlin/collections/ArraysKt__ArraysKt.class","size":8797,"crc":-508391002},{"key":"kotlin/collections/ArraysKt___ArraysJvmKt$asList$1.class","name":"kotlin/collections/ArraysKt___ArraysJvmKt$asList$1.class","size":2491,"crc":1692911251},{"key":"kotlin/collections/ArraysKt___ArraysJvmKt$asList$2.class","name":"kotlin/collections/ArraysKt___ArraysJvmKt$asList$2.class","size":2496,"crc":-1198056879},{"key":"kotlin/collections/ArraysKt___ArraysJvmKt$asList$3.class","name":"kotlin/collections/ArraysKt___ArraysJvmKt$asList$3.class","size":2457,"crc":-521582231},{"key":"kotlin/collections/ArraysKt___ArraysJvmKt$asList$4.class","name":"kotlin/collections/ArraysKt___ArraysJvmKt$asList$4.class","size":2491,"crc":1566722559},{"key":"kotlin/collections/ArraysKt___ArraysJvmKt$asList$5.class","name":"kotlin/collections/ArraysKt___ArraysJvmKt$asList$5.class","size":4142,"crc":1518695577},{"key":"kotlin/collections/ArraysKt___ArraysJvmKt$asList$6.class","name":"kotlin/collections/ArraysKt___ArraysJvmKt$asList$6.class","size":4162,"crc":-525379243},{"key":"kotlin/collections/ArraysKt___ArraysJvmKt$asList$7.class","name":"kotlin/collections/ArraysKt___ArraysJvmKt$asList$7.class","size":2467,"crc":1000015347},{"key":"kotlin/collections/ArraysKt___ArraysJvmKt$asList$8.class","name":"kotlin/collections/ArraysKt___ArraysJvmKt$asList$8.class","size":2489,"crc":1961615083},{"key":"kotlin/collections/ArraysKt___ArraysJvmKt.class","name":"kotlin/collections/ArraysKt___ArraysJvmKt.class","size":78532,"crc":-1622883830},{"key":"kotlin/collections/ArraysKt___ArraysKt$asIterable$$inlined$Iterable$1.class","name":"kotlin/collections/ArraysKt___ArraysKt$asIterable$$inlined$Iterable$1.class","size":2071,"crc":-44156590},{"key":"kotlin/collections/ArraysKt___ArraysKt$asIterable$$inlined$Iterable$2.class","name":"kotlin/collections/ArraysKt___ArraysKt$asIterable$$inlined$Iterable$2.class","size":2070,"crc":-1344237416},{"key":"kotlin/collections/ArraysKt___ArraysKt$asIterable$$inlined$Iterable$3.class","name":"kotlin/collections/ArraysKt___ArraysKt$asIterable$$inlined$Iterable$3.class","size":2073,"crc":1505550351},{"key":"kotlin/collections/ArraysKt___ArraysKt$asIterable$$inlined$Iterable$4.class","name":"kotlin/collections/ArraysKt___ArraysKt$asIterable$$inlined$Iterable$4.class","size":2075,"crc":-1722681993},{"key":"kotlin/collections/ArraysKt___ArraysKt$asIterable$$inlined$Iterable$5.class","name":"kotlin/collections/ArraysKt___ArraysKt$asIterable$$inlined$Iterable$5.class","size":2070,"crc":-207175006},{"key":"kotlin/collections/ArraysKt___ArraysKt$asIterable$$inlined$Iterable$6.class","name":"kotlin/collections/ArraysKt___ArraysKt$asIterable$$inlined$Iterable$6.class","size":2073,"crc":-1087950765},{"key":"kotlin/collections/ArraysKt___ArraysKt$asIterable$$inlined$Iterable$7.class","name":"kotlin/collections/ArraysKt___ArraysKt$asIterable$$inlined$Iterable$7.class","size":2076,"crc":-679837456},{"key":"kotlin/collections/ArraysKt___ArraysKt$asIterable$$inlined$Iterable$8.class","name":"kotlin/collections/ArraysKt___ArraysKt$asIterable$$inlined$Iterable$8.class","size":2079,"crc":891857750},{"key":"kotlin/collections/ArraysKt___ArraysKt$asIterable$$inlined$Iterable$9.class","name":"kotlin/collections/ArraysKt___ArraysKt$asIterable$$inlined$Iterable$9.class","size":2080,"crc":-526375598},{"key":"kotlin/collections/ArraysKt___ArraysKt$asSequence$$inlined$Sequence$1.class","name":"kotlin/collections/ArraysKt___ArraysKt$asSequence$$inlined$Sequence$1.class","size":2025,"crc":471889687},{"key":"kotlin/collections/ArraysKt___ArraysKt$asSequence$$inlined$Sequence$2.class","name":"kotlin/collections/ArraysKt___ArraysKt$asSequence$$inlined$Sequence$2.class","size":2024,"crc":-700013094},{"key":"kotlin/collections/ArraysKt___ArraysKt$asSequence$$inlined$Sequence$3.class","name":"kotlin/collections/ArraysKt___ArraysKt$asSequence$$inlined$Sequence$3.class","size":2027,"crc":1093210536},{"key":"kotlin/collections/ArraysKt___ArraysKt$asSequence$$inlined$Sequence$4.class","name":"kotlin/collections/ArraysKt___ArraysKt$asSequence$$inlined$Sequence$4.class","size":2029,"crc":-1679513997},{"key":"kotlin/collections/ArraysKt___ArraysKt$asSequence$$inlined$Sequence$5.class","name":"kotlin/collections/ArraysKt___ArraysKt$asSequence$$inlined$Sequence$5.class","size":2024,"crc":-970010307},{"key":"kotlin/collections/ArraysKt___ArraysKt$asSequence$$inlined$Sequence$6.class","name":"kotlin/collections/ArraysKt___ArraysKt$asSequence$$inlined$Sequence$6.class","size":2027,"crc":-208897801},{"key":"kotlin/collections/ArraysKt___ArraysKt$asSequence$$inlined$Sequence$7.class","name":"kotlin/collections/ArraysKt___ArraysKt$asSequence$$inlined$Sequence$7.class","size":2030,"crc":776373468},{"key":"kotlin/collections/ArraysKt___ArraysKt$asSequence$$inlined$Sequence$8.class","name":"kotlin/collections/ArraysKt___ArraysKt$asSequence$$inlined$Sequence$8.class","size":2033,"crc":-681716823},{"key":"kotlin/collections/ArraysKt___ArraysKt$asSequence$$inlined$Sequence$9.class","name":"kotlin/collections/ArraysKt___ArraysKt$asSequence$$inlined$Sequence$9.class","size":2034,"crc":-1469718870},{"key":"kotlin/collections/ArraysKt___ArraysKt$groupingBy$1.class","name":"kotlin/collections/ArraysKt___ArraysKt$groupingBy$1.class","size":2173,"crc":1551394933},{"key":"kotlin/collections/ArraysKt___ArraysKt.class","name":"kotlin/collections/ArraysKt___ArraysKt.class","size":672232,"crc":-847959324},{"key":"kotlin/collections/BooleanIterator.class","name":"kotlin/collections/BooleanIterator.class","size":1342,"crc":-508203931},{"key":"kotlin/collections/ByteIterator.class","name":"kotlin/collections/ByteIterator.class","size":1321,"crc":-1836460752},{"key":"kotlin/collections/CharIterator.class","name":"kotlin/collections/CharIterator.class","size":1341,"crc":65765378},{"key":"kotlin/collections/CollectionsKt.class","name":"kotlin/collections/CollectionsKt.class","size":923,"crc":-462319590},{"key":"kotlin/collections/CollectionsKt__CollectionsJVMKt.class","name":"kotlin/collections/CollectionsKt__CollectionsJVMKt.class","size":7726,"crc":1846280269},{"key":"kotlin/collections/CollectionsKt__CollectionsKt$binarySearchBy$1.class","name":"kotlin/collections/CollectionsKt__CollectionsKt$binarySearchBy$1.class","size":2107,"crc":1106616659},{"key":"kotlin/collections/CollectionsKt__CollectionsKt.class","name":"kotlin/collections/CollectionsKt__CollectionsKt.class","size":16394,"crc":252140863},{"key":"kotlin/collections/CollectionsKt__IterablesKt$Iterable$1.class","name":"kotlin/collections/CollectionsKt__IterablesKt$Iterable$1.class","size":1849,"crc":1727614707},{"key":"kotlin/collections/CollectionsKt__IterablesKt.class","name":"kotlin/collections/CollectionsKt__IterablesKt.class","size":3904,"crc":2084538289},{"key":"kotlin/collections/CollectionsKt__IteratorsJVMKt$iterator$1.class","name":"kotlin/collections/CollectionsKt__IteratorsJVMKt$iterator$1.class","size":1644,"crc":1499745005},{"key":"kotlin/collections/CollectionsKt__IteratorsJVMKt.class","name":"kotlin/collections/CollectionsKt__IteratorsJVMKt.class","size":1330,"crc":1462354657},{"key":"kotlin/collections/CollectionsKt__IteratorsKt.class","name":"kotlin/collections/CollectionsKt__IteratorsKt.class","size":2352,"crc":1685254074},{"key":"kotlin/collections/CollectionsKt__MutableCollectionsJVMKt.class","name":"kotlin/collections/CollectionsKt__MutableCollectionsJVMKt.class","size":3708,"crc":1547857099},{"key":"kotlin/collections/CollectionsKt__MutableCollectionsKt.class","name":"kotlin/collections/CollectionsKt__MutableCollectionsKt.class","size":12481,"crc":938021924},{"key":"kotlin/collections/CollectionsKt__ReversedViewsKt.class","name":"kotlin/collections/CollectionsKt__ReversedViewsKt.class","size":3383,"crc":-710772650},{"key":"kotlin/collections/CollectionsKt___CollectionsJvmKt.class","name":"kotlin/collections/CollectionsKt___CollectionsJvmKt.class","size":10361,"crc":520180728},{"key":"kotlin/collections/CollectionsKt___CollectionsKt$asSequence$$inlined$Sequence$1.class","name":"kotlin/collections/CollectionsKt___CollectionsKt$asSequence$$inlined$Sequence$1.class","size":2037,"crc":990284568},{"key":"kotlin/collections/CollectionsKt___CollectionsKt$groupingBy$1.class","name":"kotlin/collections/CollectionsKt___CollectionsKt$groupingBy$1.class","size":2233,"crc":936451788},{"key":"kotlin/collections/CollectionsKt___CollectionsKt.class","name":"kotlin/collections/CollectionsKt___CollectionsKt.class","size":130570,"crc":-839163844},{"key":"kotlin/collections/DoubleIterator.class","name":"kotlin/collections/DoubleIterator.class","size":1335,"crc":-2038712628},{"key":"kotlin/collections/EmptyIterator.class","name":"kotlin/collections/EmptyIterator.class","size":2134,"crc":-600894504},{"key":"kotlin/collections/EmptyList.class","name":"kotlin/collections/EmptyList.class","size":6386,"crc":1210682634},{"key":"kotlin/collections/EmptyMap.class","name":"kotlin/collections/EmptyMap.class","size":4689,"crc":1593775982},{"key":"kotlin/collections/EmptySet.class","name":"kotlin/collections/EmptySet.class","size":3884,"crc":-2082987750},{"key":"kotlin/collections/FloatIterator.class","name":"kotlin/collections/FloatIterator.class","size":1328,"crc":270153532},{"key":"kotlin/collections/Grouping.class","name":"kotlin/collections/Grouping.class","size":837,"crc":-228092223},{"key":"kotlin/collections/GroupingKt.class","name":"kotlin/collections/GroupingKt.class","size":460,"crc":1535227795},{"key":"kotlin/collections/GroupingKt__GroupingJVMKt.class","name":"kotlin/collections/GroupingKt__GroupingJVMKt.class","size":6012,"crc":-1097531510},{"key":"kotlin/collections/GroupingKt__GroupingKt.class","name":"kotlin/collections/GroupingKt__GroupingKt.class","size":14396,"crc":-1563760491},{"key":"kotlin/collections/IndexedValue.class","name":"kotlin/collections/IndexedValue.class","size":2807,"crc":-29234203},{"key":"kotlin/collections/IndexingIterable.class","name":"kotlin/collections/IndexingIterable.class","size":1858,"crc":2072909410},{"key":"kotlin/collections/IndexingIterator.class","name":"kotlin/collections/IndexingIterator.class","size":2195,"crc":-475853869},{"key":"kotlin/collections/IntIterator.class","name":"kotlin/collections/IntIterator.class","size":1330,"crc":-104024471},{"key":"kotlin/collections/LongIterator.class","name":"kotlin/collections/LongIterator.class","size":1321,"crc":2126315459},{"key":"kotlin/collections/MapAccessorsKt.class","name":"kotlin/collections/MapAccessorsKt.class","size":2234,"crc":480688801},{"key":"kotlin/collections/MapWithDefault.class","name":"kotlin/collections/MapWithDefault.class","size":962,"crc":1826102782},{"key":"kotlin/collections/MapWithDefaultImpl.class","name":"kotlin/collections/MapWithDefaultImpl.class","size":5922,"crc":312146525},{"key":"kotlin/collections/MapsKt.class","name":"kotlin/collections/MapsKt.class","size":568,"crc":1508086211},{"key":"kotlin/collections/MapsKt__MapWithDefaultKt.class","name":"kotlin/collections/MapsKt__MapWithDefaultKt.class","size":4130,"crc":504243816},{"key":"kotlin/collections/MapsKt__MapsJVMKt.class","name":"kotlin/collections/MapsKt__MapsJVMKt.class","size":9125,"crc":1018164472},{"key":"kotlin/collections/MapsKt__MapsKt.class","name":"kotlin/collections/MapsKt__MapsKt.class","size":33434,"crc":-1083456230},{"key":"kotlin/collections/MapsKt___MapsJvmKt.class","name":"kotlin/collections/MapsKt___MapsJvmKt.class","size":4136,"crc":1331102020},{"key":"kotlin/collections/MapsKt___MapsKt.class","name":"kotlin/collections/MapsKt___MapsKt.class","size":29113,"crc":1498924712},{"key":"kotlin/collections/MovingSubList.class","name":"kotlin/collections/MovingSubList.class","size":2158,"crc":140750078},{"key":"kotlin/collections/MutableMapWithDefault.class","name":"kotlin/collections/MutableMapWithDefault.class","size":984,"crc":1639416687},{"key":"kotlin/collections/MutableMapWithDefaultImpl.class","name":"kotlin/collections/MutableMapWithDefaultImpl.class","size":6021,"crc":-1000516809},{"key":"kotlin/collections/ReversedList$listIterator$1.class","name":"kotlin/collections/ReversedList$listIterator$1.class","size":2920,"crc":-777064700},{"key":"kotlin/collections/ReversedList.class","name":"kotlin/collections/ReversedList.class","size":3271,"crc":-1501122477},{"key":"kotlin/collections/ReversedListReadOnly$listIterator$1.class","name":"kotlin/collections/ReversedListReadOnly$listIterator$1.class","size":2935,"crc":-516320673},{"key":"kotlin/collections/ReversedListReadOnly.class","name":"kotlin/collections/ReversedListReadOnly.class","size":2549,"crc":449322990},{"key":"kotlin/collections/RingBuffer$iterator$1.class","name":"kotlin/collections/RingBuffer$iterator$1.class","size":2414,"crc":2056354238},{"key":"kotlin/collections/RingBuffer.class","name":"kotlin/collections/RingBuffer.class","size":7028,"crc":-121190939},{"key":"kotlin/collections/SetsKt.class","name":"kotlin/collections/SetsKt.class","size":476,"crc":1537590887},{"key":"kotlin/collections/SetsKt__SetsJVMKt.class","name":"kotlin/collections/SetsKt__SetsJVMKt.class","size":4083,"crc":604600193},{"key":"kotlin/collections/SetsKt__SetsKt.class","name":"kotlin/collections/SetsKt__SetsKt.class","size":5764,"crc":1613821275},{"key":"kotlin/collections/SetsKt___SetsKt.class","name":"kotlin/collections/SetsKt___SetsKt.class","size":6687,"crc":1775046634},{"key":"kotlin/collections/ShortIterator.class","name":"kotlin/collections/ShortIterator.class","size":1328,"crc":1521792139},{"key":"kotlin/collections/SlidingWindowKt$windowedIterator$1.class","name":"kotlin/collections/SlidingWindowKt$windowedIterator$1.class","size":6590,"crc":-655554576},{"key":"kotlin/collections/SlidingWindowKt$windowedSequence$$inlined$Sequence$1.class","name":"kotlin/collections/SlidingWindowKt$windowedSequence$$inlined$Sequence$1.class","size":2270,"crc":2041651307},{"key":"kotlin/collections/SlidingWindowKt.class","name":"kotlin/collections/SlidingWindowKt.class","size":3037,"crc":1159662581},{"key":"kotlin/collections/State.class","name":"kotlin/collections/State.class","size":894,"crc":436293220},{"key":"kotlin/collections/TypeAliasesKt.class","name":"kotlin/collections/TypeAliasesKt.class","size":1480,"crc":-1780679160},{"key":"kotlin/collections/UArraySortingKt.class","name":"kotlin/collections/UArraySortingKt.class","size":4790,"crc":-853840792},{"key":"kotlin/collections/UCollectionsKt.class","name":"kotlin/collections/UCollectionsKt.class","size":467,"crc":849963116},{"key":"kotlin/collections/UCollectionsKt___UCollectionsKt.class","name":"kotlin/collections/UCollectionsKt___UCollectionsKt.class","size":4744,"crc":284946618},{"key":"kotlin/collections/collections.kotlin_builtins","name":"kotlin/collections/collections.kotlin_builtins","size":8308,"crc":327658458},{"key":"kotlin/collections/builders/AbstractMapBuilderEntrySet.class","name":"kotlin/collections/builders/AbstractMapBuilderEntrySet.class","size":1863,"crc":-1014180743},{"key":"kotlin/collections/builders/ListBuilder$BuilderSubList$Itr.class","name":"kotlin/collections/builders/ListBuilder$BuilderSubList$Itr.class","size":5027,"crc":-1675119993},{"key":"kotlin/collections/builders/ListBuilder$BuilderSubList.class","name":"kotlin/collections/builders/ListBuilder$BuilderSubList.class","size":13243,"crc":-1727511757},{"key":"kotlin/collections/builders/ListBuilder$Companion.class","name":"kotlin/collections/builders/ListBuilder$Companion.class","size":925,"crc":-1675680850},{"key":"kotlin/collections/builders/ListBuilder$Itr.class","name":"kotlin/collections/builders/ListBuilder$Itr.class","size":4489,"crc":-74740294},{"key":"kotlin/collections/builders/ListBuilder.class","name":"kotlin/collections/builders/ListBuilder.class","size":14096,"crc":1430147215},{"key":"kotlin/collections/builders/ListBuilderKt.class","name":"kotlin/collections/builders/ListBuilderKt.class","size":5085,"crc":-1674050423},{"key":"kotlin/collections/builders/MapBuilder$Companion.class","name":"kotlin/collections/builders/MapBuilder$Companion.class","size":2039,"crc":-806799840},{"key":"kotlin/collections/builders/MapBuilder$EntriesItr.class","name":"kotlin/collections/builders/MapBuilder$EntriesItr.class","size":3941,"crc":323329756},{"key":"kotlin/collections/builders/MapBuilder$EntryRef.class","name":"kotlin/collections/builders/MapBuilder$EntryRef.class","size":3843,"crc":1021437352},{"key":"kotlin/collections/builders/MapBuilder$Itr.class","name":"kotlin/collections/builders/MapBuilder$Itr.class","size":3922,"crc":2140388358},{"key":"kotlin/collections/builders/MapBuilder$KeysItr.class","name":"kotlin/collections/builders/MapBuilder$KeysItr.class","size":2270,"crc":1431836322},{"key":"kotlin/collections/builders/MapBuilder$ValuesItr.class","name":"kotlin/collections/builders/MapBuilder$ValuesItr.class","size":2331,"crc":843174007},{"key":"kotlin/collections/builders/MapBuilder.class","name":"kotlin/collections/builders/MapBuilder.class","size":20316,"crc":-407660365},{"key":"kotlin/collections/builders/MapBuilderEntries.class","name":"kotlin/collections/builders/MapBuilderEntries.class","size":4309,"crc":-1589756652},{"key":"kotlin/collections/builders/MapBuilderKeys.class","name":"kotlin/collections/builders/MapBuilderKeys.class","size":3399,"crc":-1951519414},{"key":"kotlin/collections/builders/MapBuilderValues.class","name":"kotlin/collections/builders/MapBuilderValues.class","size":3660,"crc":808939496},{"key":"kotlin/collections/builders/SerializedCollection$Companion.class","name":"kotlin/collections/builders/SerializedCollection$Companion.class","size":980,"crc":789565603},{"key":"kotlin/collections/builders/SerializedCollection.class","name":"kotlin/collections/builders/SerializedCollection.class","size":5031,"crc":-191724865},{"key":"kotlin/collections/builders/SerializedMap$Companion.class","name":"kotlin/collections/builders/SerializedMap$Companion.class","size":884,"crc":281162872},{"key":"kotlin/collections/builders/SerializedMap.class","name":"kotlin/collections/builders/SerializedMap.class","size":3873,"crc":-595999774},{"key":"kotlin/collections/builders/SetBuilder$Companion.class","name":"kotlin/collections/builders/SetBuilder$Companion.class","size":920,"crc":1070593506},{"key":"kotlin/collections/builders/SetBuilder.class","name":"kotlin/collections/builders/SetBuilder.class","size":5350,"crc":-164794860},{"key":"kotlin/collections/unsigned/UArraysKt.class","name":"kotlin/collections/unsigned/UArraysKt.class","size":523,"crc":-1065675903},{"key":"kotlin/collections/unsigned/UArraysKt___UArraysJvmKt$asList$1.class","name":"kotlin/collections/unsigned/UArraysKt___UArraysJvmKt$asList$1.class","size":2691,"crc":-464636824},{"key":"kotlin/collections/unsigned/UArraysKt___UArraysJvmKt$asList$2.class","name":"kotlin/collections/unsigned/UArraysKt___UArraysJvmKt$asList$2.class","size":2725,"crc":-1156796515},{"key":"kotlin/collections/unsigned/UArraysKt___UArraysJvmKt$asList$3.class","name":"kotlin/collections/unsigned/UArraysKt___UArraysJvmKt$asList$3.class","size":2725,"crc":1096133492},{"key":"kotlin/collections/unsigned/UArraysKt___UArraysJvmKt$asList$4.class","name":"kotlin/collections/unsigned/UArraysKt___UArraysJvmKt$asList$4.class","size":2730,"crc":-291481156},{"key":"kotlin/collections/unsigned/UArraysKt___UArraysJvmKt.class","name":"kotlin/collections/unsigned/UArraysKt___UArraysJvmKt.class","size":21905,"crc":-440549912},{"key":"kotlin/collections/unsigned/UArraysKt___UArraysKt.class","name":"kotlin/collections/unsigned/UArraysKt___UArraysKt.class","size":308587,"crc":413233185},{"key":"kotlin/comparisons/ComparisonsKt.class","name":"kotlin/comparisons/ComparisonsKt.class","size":533,"crc":1126907249},{"key":"kotlin/comparisons/ComparisonsKt__ComparisonsKt$compareBy$2.class","name":"kotlin/comparisons/ComparisonsKt__ComparisonsKt$compareBy$2.class","size":1879,"crc":231416385},{"key":"kotlin/comparisons/ComparisonsKt__ComparisonsKt$compareBy$3.class","name":"kotlin/comparisons/ComparisonsKt__ComparisonsKt$compareBy$3.class","size":1893,"crc":859797545},{"key":"kotlin/comparisons/ComparisonsKt__ComparisonsKt$compareByDescending$1.class","name":"kotlin/comparisons/ComparisonsKt__ComparisonsKt$compareByDescending$1.class","size":1929,"crc":1582161830},{"key":"kotlin/comparisons/ComparisonsKt__ComparisonsKt$compareByDescending$2.class","name":"kotlin/comparisons/ComparisonsKt__ComparisonsKt$compareByDescending$2.class","size":1943,"crc":1731607216},{"key":"kotlin/comparisons/ComparisonsKt__ComparisonsKt$thenBy$1.class","name":"kotlin/comparisons/ComparisonsKt__ComparisonsKt$thenBy$1.class","size":2157,"crc":-1549119441},{"key":"kotlin/comparisons/ComparisonsKt__ComparisonsKt$thenBy$2.class","name":"kotlin/comparisons/ComparisonsKt__ComparisonsKt$thenBy$2.class","size":2135,"crc":1167298737},{"key":"kotlin/comparisons/ComparisonsKt__ComparisonsKt$thenByDescending$1.class","name":"kotlin/comparisons/ComparisonsKt__ComparisonsKt$thenByDescending$1.class","size":2217,"crc":-1867771380},{"key":"kotlin/comparisons/ComparisonsKt__ComparisonsKt$thenByDescending$2.class","name":"kotlin/comparisons/ComparisonsKt__ComparisonsKt$thenByDescending$2.class","size":2195,"crc":1981369875},{"key":"kotlin/comparisons/ComparisonsKt__ComparisonsKt$thenComparator$1.class","name":"kotlin/comparisons/ComparisonsKt__ComparisonsKt$thenComparator$1.class","size":2110,"crc":-905751859},{"key":"kotlin/comparisons/ComparisonsKt__ComparisonsKt.class","name":"kotlin/comparisons/ComparisonsKt__ComparisonsKt.class","size":13118,"crc":-182769456},{"key":"kotlin/comparisons/ComparisonsKt___ComparisonsJvmKt.class","name":"kotlin/comparisons/ComparisonsKt___ComparisonsJvmKt.class","size":9183,"crc":677243048},{"key":"kotlin/comparisons/ComparisonsKt___ComparisonsKt.class","name":"kotlin/comparisons/ComparisonsKt___ComparisonsKt.class","size":3211,"crc":1753444854},{"key":"kotlin/comparisons/NaturalOrderComparator.class","name":"kotlin/comparisons/NaturalOrderComparator.class","size":2039,"crc":-744204313},{"key":"kotlin/comparisons/ReverseOrderComparator.class","name":"kotlin/comparisons/ReverseOrderComparator.class","size":2039,"crc":1104482694},{"key":"kotlin/comparisons/ReversedComparator.class","name":"kotlin/comparisons/ReversedComparator.class","size":1752,"crc":1898284572},{"key":"kotlin/comparisons/UComparisonsKt.class","name":"kotlin/comparisons/UComparisonsKt.class","size":467,"crc":164237226},{"key":"kotlin/comparisons/UComparisonsKt___UComparisonsKt.class","name":"kotlin/comparisons/UComparisonsKt___UComparisonsKt.class","size":6572,"crc":-1351345183},{"key":"kotlin/concurrent/LocksKt.class","name":"kotlin/concurrent/LocksKt.class","size":3789,"crc":2044277944},{"key":"kotlin/concurrent/ThreadsKt$thread$thread$1.class","name":"kotlin/concurrent/ThreadsKt$thread$thread$1.class","size":1167,"crc":1813569414},{"key":"kotlin/concurrent/ThreadsKt.class","name":"kotlin/concurrent/ThreadsKt.class","size":3404,"crc":-935880296},{"key":"kotlin/concurrent/TimersKt$timerTask$1.class","name":"kotlin/concurrent/TimersKt$timerTask$1.class","size":1521,"crc":1558429878},{"key":"kotlin/concurrent/TimersKt.class","name":"kotlin/concurrent/TimersKt.class","size":6962,"crc":-1563040830},{"key":"kotlin/concurrent/VolatileKt.class","name":"kotlin/concurrent/VolatileKt.class","size":542,"crc":2095936555},{"key":"kotlin/concurrent/atomics/AtomicArraysKt.class","name":"kotlin/concurrent/atomics/AtomicArraysKt.class","size":520,"crc":684798684},{"key":"kotlin/concurrent/atomics/AtomicArraysKt__AtomicArrays_commonKt.class","name":"kotlin/concurrent/atomics/AtomicArraysKt__AtomicArrays_commonKt.class","size":5019,"crc":1030486368},{"key":"kotlin/concurrent/atomics/AtomicArraysKt__AtomicArrays_jvmKt.class","name":"kotlin/concurrent/atomics/AtomicArraysKt__AtomicArrays_jvmKt.class","size":2640,"crc":-1408302891},{"key":"kotlin/concurrent/atomics/AtomicsKt.class","name":"kotlin/concurrent/atomics/AtomicsKt.class","size":490,"crc":841119141},{"key":"kotlin/concurrent/atomics/AtomicsKt__Atomics_commonKt.class","name":"kotlin/concurrent/atomics/AtomicsKt__Atomics_commonKt.class","size":3326,"crc":347393141},{"key":"kotlin/concurrent/atomics/AtomicsKt__Atomics_jvmKt.class","name":"kotlin/concurrent/atomics/AtomicsKt__Atomics_jvmKt.class","size":2965,"crc":-879446116},{"key":"kotlin/concurrent/atomics/ExperimentalAtomicApi.class","name":"kotlin/concurrent/atomics/ExperimentalAtomicApi.class","size":1442,"crc":-1075744654},{"key":"kotlin/concurrent/atomics/atomics.kotlin_builtins","name":"kotlin/concurrent/atomics/atomics.kotlin_builtins","size":2674,"crc":1252866643},{"key":"kotlin/concurrent/internal/AtomicIntrinsicsKt.class","name":"kotlin/concurrent/internal/AtomicIntrinsicsKt.class","size":4280,"crc":199858775},{"key":"kotlin/contracts/CallsInPlace.class","name":"kotlin/contracts/CallsInPlace.class","size":573,"crc":155066332},{"key":"kotlin/contracts/ConditionalEffect.class","name":"kotlin/contracts/ConditionalEffect.class","size":583,"crc":49832771},{"key":"kotlin/contracts/ContractBuilder$DefaultImpls.class","name":"kotlin/contracts/ContractBuilder$DefaultImpls.class","size":1011,"crc":-332978805},{"key":"kotlin/contracts/ContractBuilder.class","name":"kotlin/contracts/ContractBuilder.class","size":1591,"crc":-1960966650},{"key":"kotlin/contracts/ContractBuilderKt.class","name":"kotlin/contracts/ContractBuilderKt.class","size":1117,"crc":2136943133},{"key":"kotlin/contracts/Effect.class","name":"kotlin/contracts/Effect.class","size":506,"crc":515566834},{"key":"kotlin/contracts/ExperimentalContracts.class","name":"kotlin/contracts/ExperimentalContracts.class","size":813,"crc":31643680},{"key":"kotlin/contracts/InvocationKind.class","name":"kotlin/contracts/InvocationKind.class","size":2102,"crc":2100812545},{"key":"kotlin/contracts/Returns.class","name":"kotlin/contracts/Returns.class","size":575,"crc":1334465765},{"key":"kotlin/contracts/ReturnsNotNull.class","name":"kotlin/contracts/ReturnsNotNull.class","size":589,"crc":-673871612},{"key":"kotlin/contracts/SimpleEffect.class","name":"kotlin/contracts/SimpleEffect.class","size":799,"crc":-1265247981},{"key":"kotlin/coroutines/AbstractCoroutineContextElement.class","name":"kotlin/coroutines/AbstractCoroutineContextElement.class","size":3449,"crc":-1529271207},{"key":"kotlin/coroutines/AbstractCoroutineContextKey.class","name":"kotlin/coroutines/AbstractCoroutineContextKey.class","size":2999,"crc":1208942673},{"key":"kotlin/coroutines/CombinedContext$Serialized$Companion.class","name":"kotlin/coroutines/CombinedContext$Serialized$Companion.class","size":963,"crc":-913305886},{"key":"kotlin/coroutines/CombinedContext$Serialized.class","name":"kotlin/coroutines/CombinedContext$Serialized.class","size":3187,"crc":-638303388},{"key":"kotlin/coroutines/CombinedContext.class","name":"kotlin/coroutines/CombinedContext.class","size":8315,"crc":-1924597084},{"key":"kotlin/coroutines/Continuation.class","name":"kotlin/coroutines/Continuation.class","size":913,"crc":-234888218},{"key":"kotlin/coroutines/ContinuationInterceptor$DefaultImpls.class","name":"kotlin/coroutines/ContinuationInterceptor$DefaultImpls.class","size":4079,"crc":435253908},{"key":"kotlin/coroutines/ContinuationInterceptor$Key.class","name":"kotlin/coroutines/ContinuationInterceptor$Key.class","size":1043,"crc":1983771101},{"key":"kotlin/coroutines/ContinuationInterceptor.class","name":"kotlin/coroutines/ContinuationInterceptor.class","size":2323,"crc":-153553047},{"key":"kotlin/coroutines/ContinuationKt$Continuation$1.class","name":"kotlin/coroutines/ContinuationKt$Continuation$1.class","size":2303,"crc":479953940},{"key":"kotlin/coroutines/ContinuationKt.class","name":"kotlin/coroutines/ContinuationKt.class","size":6811,"crc":1854751974},{"key":"kotlin/coroutines/CoroutineContext$DefaultImpls.class","name":"kotlin/coroutines/CoroutineContext$DefaultImpls.class","size":2923,"crc":234955245},{"key":"kotlin/coroutines/CoroutineContext$Element$DefaultImpls.class","name":"kotlin/coroutines/CoroutineContext$Element$DefaultImpls.class","size":3205,"crc":1504820592},{"key":"kotlin/coroutines/CoroutineContext$Element.class","name":"kotlin/coroutines/CoroutineContext$Element.class","size":1928,"crc":625857247},{"key":"kotlin/coroutines/CoroutineContext$Key.class","name":"kotlin/coroutines/CoroutineContext$Key.class","size":684,"crc":-201944483},{"key":"kotlin/coroutines/CoroutineContext.class","name":"kotlin/coroutines/CoroutineContext.class","size":1991,"crc":-1143016419},{"key":"kotlin/coroutines/CoroutineContextImplKt.class","name":"kotlin/coroutines/CoroutineContextImplKt.class","size":2701,"crc":468388887},{"key":"kotlin/coroutines/EmptyCoroutineContext.class","name":"kotlin/coroutines/EmptyCoroutineContext.class","size":3276,"crc":882068071},{"key":"kotlin/coroutines/RestrictsSuspension.class","name":"kotlin/coroutines/RestrictsSuspension.class","size":885,"crc":1486746068},{"key":"kotlin/coroutines/SafeContinuation$Companion.class","name":"kotlin/coroutines/SafeContinuation$Companion.class","size":1157,"crc":937968371},{"key":"kotlin/coroutines/SafeContinuation.class","name":"kotlin/coroutines/SafeContinuation.class","size":4789,"crc":-1443929962},{"key":"kotlin/coroutines/coroutines.kotlin_builtins","name":"kotlin/coroutines/coroutines.kotlin_builtins","size":137,"crc":1360136731},{"key":"kotlin/coroutines/cancellation/CancellationExceptionKt.class","name":"kotlin/coroutines/cancellation/CancellationExceptionKt.class","size":2328,"crc":1746396738},{"key":"kotlin/coroutines/intrinsics/CoroutineSingletons.class","name":"kotlin/coroutines/intrinsics/CoroutineSingletons.class","size":2041,"crc":1796530784},{"key":"kotlin/coroutines/intrinsics/IntrinsicsKt.class","name":"kotlin/coroutines/intrinsics/IntrinsicsKt.class","size":512,"crc":-2011932098},{"key":"kotlin/coroutines/intrinsics/IntrinsicsKt__IntrinsicsJvmKt$createCoroutineFromSuspendFunction$1.class","name":"kotlin/coroutines/intrinsics/IntrinsicsKt__IntrinsicsJvmKt$createCoroutineFromSuspendFunction$1.class","size":2962,"crc":4371562},{"key":"kotlin/coroutines/intrinsics/IntrinsicsKt__IntrinsicsJvmKt$createCoroutineFromSuspendFunction$2.class","name":"kotlin/coroutines/intrinsics/IntrinsicsKt__IntrinsicsJvmKt$createCoroutineFromSuspendFunction$2.class","size":3111,"crc":-1527455024},{"key":"kotlin/coroutines/intrinsics/IntrinsicsKt__IntrinsicsJvmKt$createCoroutineUnintercepted$$inlined$createCoroutineFromSuspendFunction$IntrinsicsKt__IntrinsicsJvmKt$1.class","name":"kotlin/coroutines/intrinsics/IntrinsicsKt__IntrinsicsJvmKt$createCoroutineUnintercepted$$inlined$createCoroutineFromSuspendFunction$IntrinsicsKt__IntrinsicsJvmKt$1.class","size":3806,"crc":-947852834},{"key":"kotlin/coroutines/intrinsics/IntrinsicsKt__IntrinsicsJvmKt$createCoroutineUnintercepted$$inlined$createCoroutineFromSuspendFunction$IntrinsicsKt__IntrinsicsJvmKt$2.class","name":"kotlin/coroutines/intrinsics/IntrinsicsKt__IntrinsicsJvmKt$createCoroutineUnintercepted$$inlined$createCoroutineFromSuspendFunction$IntrinsicsKt__IntrinsicsJvmKt$2.class","size":3919,"crc":-1977374684},{"key":"kotlin/coroutines/intrinsics/IntrinsicsKt__IntrinsicsJvmKt$createCoroutineUnintercepted$$inlined$createCoroutineFromSuspendFunction$IntrinsicsKt__IntrinsicsJvmKt$3.class","name":"kotlin/coroutines/intrinsics/IntrinsicsKt__IntrinsicsJvmKt$createCoroutineUnintercepted$$inlined$createCoroutineFromSuspendFunction$IntrinsicsKt__IntrinsicsJvmKt$3.class","size":4042,"crc":1365027032},{"key":"kotlin/coroutines/intrinsics/IntrinsicsKt__IntrinsicsJvmKt$createCoroutineUnintercepted$$inlined$createCoroutineFromSuspendFunction$IntrinsicsKt__IntrinsicsJvmKt$4.class","name":"kotlin/coroutines/intrinsics/IntrinsicsKt__IntrinsicsJvmKt$createCoroutineUnintercepted$$inlined$createCoroutineFromSuspendFunction$IntrinsicsKt__IntrinsicsJvmKt$4.class","size":4156,"crc":1808889214},{"key":"kotlin/coroutines/intrinsics/IntrinsicsKt__IntrinsicsJvmKt$createSimpleCoroutineForSuspendFunction$1.class","name":"kotlin/coroutines/intrinsics/IntrinsicsKt__IntrinsicsJvmKt$createSimpleCoroutineForSuspendFunction$1.class","size":1681,"crc":-897448915},{"key":"kotlin/coroutines/intrinsics/IntrinsicsKt__IntrinsicsJvmKt$createSimpleCoroutineForSuspendFunction$2.class","name":"kotlin/coroutines/intrinsics/IntrinsicsKt__IntrinsicsJvmKt$createSimpleCoroutineForSuspendFunction$2.class","size":1794,"crc":-1360125908},{"key":"kotlin/coroutines/intrinsics/IntrinsicsKt__IntrinsicsJvmKt.class","name":"kotlin/coroutines/intrinsics/IntrinsicsKt__IntrinsicsJvmKt.class","size":10652,"crc":694844132},{"key":"kotlin/coroutines/intrinsics/IntrinsicsKt__IntrinsicsKt.class","name":"kotlin/coroutines/intrinsics/IntrinsicsKt__IntrinsicsKt.class","size":1912,"crc":-1955733620},{"key":"kotlin/coroutines/jvm/internal/BaseContinuationImpl.class","name":"kotlin/coroutines/jvm/internal/BaseContinuationImpl.class","size":5349,"crc":1399112197},{"key":"kotlin/coroutines/jvm/internal/Boxing.class","name":"kotlin/coroutines/jvm/internal/Boxing.class","size":2353,"crc":1772995913},{"key":"kotlin/coroutines/jvm/internal/CompletedContinuation.class","name":"kotlin/coroutines/jvm/internal/CompletedContinuation.class","size":1665,"crc":44987011},{"key":"kotlin/coroutines/jvm/internal/ContinuationImpl.class","name":"kotlin/coroutines/jvm/internal/ContinuationImpl.class","size":3760,"crc":1824531660},{"key":"kotlin/coroutines/jvm/internal/CoroutineStackFrame.class","name":"kotlin/coroutines/jvm/internal/CoroutineStackFrame.class","size":805,"crc":-608215596},{"key":"kotlin/coroutines/jvm/internal/DebugMetadata.class","name":"kotlin/coroutines/jvm/internal/DebugMetadata.class","size":1730,"crc":-683943283},{"key":"kotlin/coroutines/jvm/internal/DebugMetadataKt.class","name":"kotlin/coroutines/jvm/internal/DebugMetadataKt.class","size":5650,"crc":-1954868895},{"key":"kotlin/coroutines/jvm/internal/DebugProbesKt.class","name":"kotlin/coroutines/jvm/internal/DebugProbesKt.class","size":1441,"crc":-1680056492},{"key":"kotlin/coroutines/jvm/internal/GeneratedCodeMarkers.class","name":"kotlin/coroutines/jvm/internal/GeneratedCodeMarkers.class","size":1293,"crc":1973541810},{"key":"kotlin/coroutines/jvm/internal/ModuleNameRetriever$Cache.class","name":"kotlin/coroutines/jvm/internal/ModuleNameRetriever$Cache.class","size":1264,"crc":-1571073368},{"key":"kotlin/coroutines/jvm/internal/ModuleNameRetriever.class","name":"kotlin/coroutines/jvm/internal/ModuleNameRetriever.class","size":3881,"crc":-377834002},{"key":"kotlin/coroutines/jvm/internal/RestrictedContinuationImpl.class","name":"kotlin/coroutines/jvm/internal/RestrictedContinuationImpl.class","size":2000,"crc":-246532496},{"key":"kotlin/coroutines/jvm/internal/RestrictedSuspendLambda.class","name":"kotlin/coroutines/jvm/internal/RestrictedSuspendLambda.class","size":2371,"crc":1337256447},{"key":"kotlin/coroutines/jvm/internal/RunSuspend.class","name":"kotlin/coroutines/jvm/internal/RunSuspend.class","size":2783,"crc":2115617545},{"key":"kotlin/coroutines/jvm/internal/RunSuspendKt.class","name":"kotlin/coroutines/jvm/internal/RunSuspendKt.class","size":1428,"crc":-1201401450},{"key":"kotlin/coroutines/jvm/internal/SpillingKt.class","name":"kotlin/coroutines/jvm/internal/SpillingKt.class","size":700,"crc":-1034331864},{"key":"kotlin/coroutines/jvm/internal/SuspendFunction.class","name":"kotlin/coroutines/jvm/internal/SuspendFunction.class","size":478,"crc":-1633219434},{"key":"kotlin/coroutines/jvm/internal/SuspendLambda.class","name":"kotlin/coroutines/jvm/internal/SuspendLambda.class","size":2321,"crc":-672120496},{"key":"kotlin/enums/EnumEntries.class","name":"kotlin/enums/EnumEntries.class","size":800,"crc":1309015420},{"key":"kotlin/enums/EnumEntriesJVMKt.class","name":"kotlin/enums/EnumEntriesJVMKt.class","size":868,"crc":508210568},{"key":"kotlin/enums/EnumEntriesKt.class","name":"kotlin/enums/EnumEntriesKt.class","size":2115,"crc":1200226041},{"key":"kotlin/enums/EnumEntriesList.class","name":"kotlin/enums/EnumEntriesList.class","size":3805,"crc":-1943861090},{"key":"kotlin/enums/EnumEntriesSerializationProxy$Companion.class","name":"kotlin/enums/EnumEntriesSerializationProxy$Companion.class","size":906,"crc":1518500475},{"key":"kotlin/enums/EnumEntriesSerializationProxy.class","name":"kotlin/enums/EnumEntriesSerializationProxy.class","size":2143,"crc":-1994656396},{"key":"kotlin/experimental/BitwiseOperationsKt.class","name":"kotlin/experimental/BitwiseOperationsKt.class","size":1498,"crc":804947948},{"key":"kotlin/experimental/ExpectRefinement.class","name":"kotlin/experimental/ExpectRefinement.class","size":928,"crc":-406428372},{"key":"kotlin/experimental/ExperimentalNativeApi.class","name":"kotlin/experimental/ExperimentalNativeApi.class","size":1430,"crc":-1961196514},{"key":"kotlin/experimental/ExperimentalObjCName.class","name":"kotlin/experimental/ExperimentalObjCName.class","size":1041,"crc":-1969085273},{"key":"kotlin/experimental/ExperimentalObjCRefinement.class","name":"kotlin/experimental/ExperimentalObjCRefinement.class","size":1059,"crc":-1854755186},{"key":"kotlin/experimental/ExperimentalTypeInference.class","name":"kotlin/experimental/ExperimentalTypeInference.class","size":1197,"crc":342797367},{"key":"kotlin/internal/AccessibleLateinitPropertyLiteral.class","name":"kotlin/internal/AccessibleLateinitPropertyLiteral.class","size":931,"crc":-1651726416},{"key":"kotlin/internal/ContractsDsl.class","name":"kotlin/internal/ContractsDsl.class","size":677,"crc":1533494302},{"key":"kotlin/internal/DynamicExtension.class","name":"kotlin/internal/DynamicExtension.class","size":817,"crc":-946366799},{"key":"kotlin/internal/Exact.class","name":"kotlin/internal/Exact.class","size":724,"crc":884638363},{"key":"kotlin/internal/HidesMembers.class","name":"kotlin/internal/HidesMembers.class","size":809,"crc":1078808629},{"key":"kotlin/internal/InlineOnly.class","name":"kotlin/internal/InlineOnly.class","size":851,"crc":1801468400},{"key":"kotlin/internal/IntrinsicConstEvaluation.class","name":"kotlin/internal/IntrinsicConstEvaluation.class","size":950,"crc":-1139531332},{"key":"kotlin/internal/JvmBuiltin.class","name":"kotlin/internal/JvmBuiltin.class","size":726,"crc":-264661724},{"key":"kotlin/internal/LowPriorityInOverloadResolution.class","name":"kotlin/internal/LowPriorityInOverloadResolution.class","size":871,"crc":-1965371873},{"key":"kotlin/internal/NoInfer.class","name":"kotlin/internal/NoInfer.class","size":728,"crc":-134603213},{"key":"kotlin/internal/OnlyInputTypes.class","name":"kotlin/internal/OnlyInputTypes.class","size":752,"crc":1505635450},{"key":"kotlin/internal/PlatformDependent.class","name":"kotlin/internal/PlatformDependent.class","size":810,"crc":1546085225},{"key":"kotlin/internal/PlatformImplementations$ReflectThrowable.class","name":"kotlin/internal/PlatformImplementations$ReflectThrowable.class","size":2785,"crc":-69243658},{"key":"kotlin/internal/PlatformImplementations.class","name":"kotlin/internal/PlatformImplementations.class","size":3649,"crc":1853402763},{"key":"kotlin/internal/PlatformImplementationsKt.class","name":"kotlin/internal/PlatformImplementationsKt.class","size":2651,"crc":1890380977},{"key":"kotlin/internal/ProgressionUtilKt.class","name":"kotlin/internal/ProgressionUtilKt.class","size":1704,"crc":-1149182220},{"key":"kotlin/internal/PureReifiable.class","name":"kotlin/internal/PureReifiable.class","size":757,"crc":368542628},{"key":"kotlin/internal/RequireKotlin$Container.class","name":"kotlin/internal/RequireKotlin$Container.class","size":930,"crc":-1071349828},{"key":"kotlin/internal/RequireKotlin.class","name":"kotlin/internal/RequireKotlin.class","size":1769,"crc":-1456652940},{"key":"kotlin/internal/RequireKotlinVersionKind.class","name":"kotlin/internal/RequireKotlinVersionKind.class","size":1974,"crc":616057281},{"key":"kotlin/internal/SerializationUtilKt.class","name":"kotlin/internal/SerializationUtilKt.class","size":737,"crc":1991789605},{"key":"kotlin/internal/SuppressBytecodeGeneration.class","name":"kotlin/internal/SuppressBytecodeGeneration.class","size":758,"crc":1284751501},{"key":"kotlin/internal/UProgressionUtilKt.class","name":"kotlin/internal/UProgressionUtilKt.class","size":2137,"crc":1841018068},{"key":"kotlin/internal/internal.kotlin_builtins","name":"kotlin/internal/internal.kotlin_builtins","size":590,"crc":-739093672},{"key":"kotlin/io/AccessDeniedException.class","name":"kotlin/io/AccessDeniedException.class","size":1239,"crc":-907985078},{"key":"kotlin/io/ByteStreamsKt$iterator$1.class","name":"kotlin/io/ByteStreamsKt$iterator$1.class","size":2283,"crc":149480610},{"key":"kotlin/io/ByteStreamsKt.class","name":"kotlin/io/ByteStreamsKt.class","size":8270,"crc":-970865103},{"key":"kotlin/io/CloseableKt.class","name":"kotlin/io/CloseableKt.class","size":2195,"crc":1392542895},{"key":"kotlin/io/ConsoleKt.class","name":"kotlin/io/ConsoleKt.class","size":4288,"crc":-385529758},{"key":"kotlin/io/ConstantsKt.class","name":"kotlin/io/ConstantsKt.class","size":596,"crc":-1659818074},{"key":"kotlin/io/ExceptionsKt.class","name":"kotlin/io/ExceptionsKt.class","size":1353,"crc":1623342692},{"key":"kotlin/io/ExposingBufferByteArrayOutputStream.class","name":"kotlin/io/ExposingBufferByteArrayOutputStream.class","size":990,"crc":1155803584},{"key":"kotlin/io/FileAlreadyExistsException.class","name":"kotlin/io/FileAlreadyExistsException.class","size":1249,"crc":-943478023},{"key":"kotlin/io/FilePathComponents.class","name":"kotlin/io/FilePathComponents.class","size":4417,"crc":-2053562200},{"key":"kotlin/io/FileSystemException.class","name":"kotlin/io/FileSystemException.class","size":1905,"crc":29273748},{"key":"kotlin/io/FileTreeWalk$DirectoryState.class","name":"kotlin/io/FileTreeWalk$DirectoryState.class","size":1797,"crc":104315557},{"key":"kotlin/io/FileTreeWalk$FileTreeWalkIterator$BottomUpDirectoryState.class","name":"kotlin/io/FileTreeWalk$FileTreeWalkIterator$BottomUpDirectoryState.class","size":2902,"crc":-1298104313},{"key":"kotlin/io/FileTreeWalk$FileTreeWalkIterator$SingleFileState.class","name":"kotlin/io/FileTreeWalk$FileTreeWalkIterator$SingleFileState.class","size":2431,"crc":1189740185},{"key":"kotlin/io/FileTreeWalk$FileTreeWalkIterator$TopDownDirectoryState.class","name":"kotlin/io/FileTreeWalk$FileTreeWalkIterator$TopDownDirectoryState.class","size":2904,"crc":727986131},{"key":"kotlin/io/FileTreeWalk$FileTreeWalkIterator$WhenMappings.class","name":"kotlin/io/FileTreeWalk$FileTreeWalkIterator$WhenMappings.class","size":837,"crc":-1973326227},{"key":"kotlin/io/FileTreeWalk$FileTreeWalkIterator.class","name":"kotlin/io/FileTreeWalk$FileTreeWalkIterator.class","size":3517,"crc":1006061075},{"key":"kotlin/io/FileTreeWalk$WalkState.class","name":"kotlin/io/FileTreeWalk$WalkState.class","size":1148,"crc":-350822373},{"key":"kotlin/io/FileTreeWalk.class","name":"kotlin/io/FileTreeWalk.class","size":6111,"crc":-994346204},{"key":"kotlin/io/FileWalkDirection.class","name":"kotlin/io/FileWalkDirection.class","size":1748,"crc":895972176},{"key":"kotlin/io/FilesKt.class","name":"kotlin/io/FilesKt.class","size":495,"crc":1729647545},{"key":"kotlin/io/FilesKt__FilePathComponentsKt.class","name":"kotlin/io/FilesKt__FilePathComponentsKt.class","size":5228,"crc":993176778},{"key":"kotlin/io/FilesKt__FileReadWriteKt.class","name":"kotlin/io/FilesKt__FileReadWriteKt.class","size":19606,"crc":1794106149},{"key":"kotlin/io/FilesKt__FileTreeWalkKt.class","name":"kotlin/io/FilesKt__FileTreeWalkKt.class","size":1794,"crc":-553157274},{"key":"kotlin/io/FilesKt__UtilsKt$copyRecursively$1.class","name":"kotlin/io/FilesKt__UtilsKt$copyRecursively$1.class","size":1296,"crc":-254558392},{"key":"kotlin/io/FilesKt__UtilsKt.class","name":"kotlin/io/FilesKt__UtilsKt.class","size":17676,"crc":-356172764},{"key":"kotlin/io/LineReader.class","name":"kotlin/io/LineReader.class","size":5960,"crc":-1486591124},{"key":"kotlin/io/LinesSequence$iterator$1.class","name":"kotlin/io/LinesSequence$iterator$1.class","size":2015,"crc":-1733404678},{"key":"kotlin/io/LinesSequence.class","name":"kotlin/io/LinesSequence.class","size":1530,"crc":-293497238},{"key":"kotlin/io/NoSuchFileException.class","name":"kotlin/io/NoSuchFileException.class","size":1235,"crc":-1367963014},{"key":"kotlin/io/OnErrorAction.class","name":"kotlin/io/OnErrorAction.class","size":1709,"crc":1813728682},{"key":"kotlin/io/ReadAfterEOFException.class","name":"kotlin/io/ReadAfterEOFException.class","size":759,"crc":1167563816},{"key":"kotlin/io/SerializableKt.class","name":"kotlin/io/SerializableKt.class","size":438,"crc":712403874},{"key":"kotlin/io/TerminateException.class","name":"kotlin/io/TerminateException.class","size":929,"crc":-1340532955},{"key":"kotlin/io/TextStreamsKt.class","name":"kotlin/io/TextStreamsKt.class","size":9177,"crc":1218618180},{"key":"kotlin/io/encoding/Base64$Default.class","name":"kotlin/io/encoding/Base64$Default.class","size":2100,"crc":2139962234},{"key":"kotlin/io/encoding/Base64$PaddingOption.class","name":"kotlin/io/encoding/Base64$PaddingOption.class","size":2095,"crc":281915315},{"key":"kotlin/io/encoding/Base64.class","name":"kotlin/io/encoding/Base64.class","size":17293,"crc":-1645566122},{"key":"kotlin/io/encoding/Base64JVMKt.class","name":"kotlin/io/encoding/Base64JVMKt.class","size":2805,"crc":1805035289},{"key":"kotlin/io/encoding/Base64Kt.class","name":"kotlin/io/encoding/Base64Kt.class","size":4490,"crc":-48987470},{"key":"kotlin/io/encoding/DecodeInputStream.class","name":"kotlin/io/encoding/DecodeInputStream.class","size":5320,"crc":-1629216089},{"key":"kotlin/io/encoding/EncodeOutputStream.class","name":"kotlin/io/encoding/EncodeOutputStream.class","size":4674,"crc":-1967607078},{"key":"kotlin/io/encoding/ExperimentalEncodingApi.class","name":"kotlin/io/encoding/ExperimentalEncodingApi.class","size":1434,"crc":-1147309988},{"key":"kotlin/io/encoding/StreamEncodingKt.class","name":"kotlin/io/encoding/StreamEncodingKt.class","size":475,"crc":23692494},{"key":"kotlin/io/encoding/StreamEncodingKt__Base64IOStreamKt.class","name":"kotlin/io/encoding/StreamEncodingKt__Base64IOStreamKt.class","size":1801,"crc":-1562591150},{"key":"kotlin/jdk7/AutoCloseableKt$AutoCloseable$1.class","name":"kotlin/jdk7/AutoCloseableKt$AutoCloseable$1.class","size":1433,"crc":-1656440326},{"key":"kotlin/jdk7/AutoCloseableKt.class","name":"kotlin/jdk7/AutoCloseableKt.class","size":2975,"crc":-1581259870},{"key":"kotlin/js/ExperimentalJsCollectionsApi.class","name":"kotlin/js/ExperimentalJsCollectionsApi.class","size":1184,"crc":1871931588},{"key":"kotlin/js/ExperimentalJsExport.class","name":"kotlin/js/ExperimentalJsExport.class","size":949,"crc":1932930194},{"key":"kotlin/js/ExperimentalJsFileName.class","name":"kotlin/js/ExperimentalJsFileName.class","size":953,"crc":655036994},{"key":"kotlin/js/ExperimentalJsReflectionCreateInstance.class","name":"kotlin/js/ExperimentalJsReflectionCreateInstance.class","size":1439,"crc":-210282807},{"key":"kotlin/js/ExperimentalJsStatic.class","name":"kotlin/js/ExperimentalJsStatic.class","size":949,"crc":1507256026},{"key":"kotlin/jvm/ImplicitlyActualizedByJvmDeclaration.class","name":"kotlin/jvm/ImplicitlyActualizedByJvmDeclaration.class","size":1364,"crc":1370058598},{"key":"kotlin/jvm/JvmClassMappingKt.class","name":"kotlin/jvm/JvmClassMappingKt.class","size":7227,"crc":1970325516},{"key":"kotlin/jvm/JvmDefault.class","name":"kotlin/jvm/JvmDefault.class","size":967,"crc":-929703724},{"key":"kotlin/jvm/JvmDefaultWithCompatibility.class","name":"kotlin/jvm/JvmDefaultWithCompatibility.class","size":900,"crc":1976587707},{"key":"kotlin/jvm/JvmDefaultWithoutCompatibility.class","name":"kotlin/jvm/JvmDefaultWithoutCompatibility.class","size":891,"crc":-595518676},{"key":"kotlin/jvm/JvmExposeBoxed.class","name":"kotlin/jvm/JvmExposeBoxed.class","size":1205,"crc":1552042606},{"key":"kotlin/jvm/JvmField.class","name":"kotlin/jvm/JvmField.class","size":857,"crc":-593891055},{"key":"kotlin/jvm/JvmInline.class","name":"kotlin/jvm/JvmInline.class","size":945,"crc":-1375631561},{"key":"kotlin/jvm/JvmMultifileClass.class","name":"kotlin/jvm/JvmMultifileClass.class","size":824,"crc":938695781},{"key":"kotlin/jvm/JvmName.class","name":"kotlin/jvm/JvmName.class","size":1005,"crc":-988547633},{"key":"kotlin/jvm/JvmOverloads.class","name":"kotlin/jvm/JvmOverloads.class","size":901,"crc":1606137905},{"key":"kotlin/jvm/JvmPackageName.class","name":"kotlin/jvm/JvmPackageName.class","size":984,"crc":-2003905462},{"key":"kotlin/jvm/JvmRecord.class","name":"kotlin/jvm/JvmRecord.class","size":944,"crc":-38856453},{"key":"kotlin/jvm/JvmSerializableLambda.class","name":"kotlin/jvm/JvmSerializableLambda.class","size":837,"crc":1172538178},{"key":"kotlin/jvm/JvmStatic.class","name":"kotlin/jvm/JvmStatic.class","size":926,"crc":782499764},{"key":"kotlin/jvm/JvmSuppressWildcards.class","name":"kotlin/jvm/JvmSuppressWildcards.class","size":1035,"crc":2068718627},{"key":"kotlin/jvm/JvmSynthetic.class","name":"kotlin/jvm/JvmSynthetic.class","size":862,"crc":222280181},{"key":"kotlin/jvm/JvmWildcard.class","name":"kotlin/jvm/JvmWildcard.class","size":820,"crc":151587719},{"key":"kotlin/jvm/KotlinReflectionNotSupportedError.class","name":"kotlin/jvm/KotlinReflectionNotSupportedError.class","size":1343,"crc":-1229018892},{"key":"kotlin/jvm/PurelyImplements.class","name":"kotlin/jvm/PurelyImplements.class","size":940,"crc":1470014282},{"key":"kotlin/jvm/Strictfp.class","name":"kotlin/jvm/Strictfp.class","size":952,"crc":-1756727334},{"key":"kotlin/jvm/Synchronized.class","name":"kotlin/jvm/Synchronized.class","size":911,"crc":-1638999556},{"key":"kotlin/jvm/Throws.class","name":"kotlin/jvm/Throws.class","size":1087,"crc":719828304},{"key":"kotlin/jvm/Transient.class","name":"kotlin/jvm/Transient.class","size":847,"crc":1424915363},{"key":"kotlin/jvm/Volatile.class","name":"kotlin/jvm/Volatile.class","size":845,"crc":-441074404},{"key":"kotlin/jvm/functions/Function0.class","name":"kotlin/jvm/functions/Function0.class","size":584,"crc":-2126411220},{"key":"kotlin/jvm/functions/Function1.class","name":"kotlin/jvm/functions/Function1.class","size":661,"crc":628821178},{"key":"kotlin/jvm/functions/Function10.class","name":"kotlin/jvm/functions/Function10.class","size":1351,"crc":1578278441},{"key":"kotlin/jvm/functions/Function11.class","name":"kotlin/jvm/functions/Function11.class","size":1431,"crc":1415613999},{"key":"kotlin/jvm/functions/Function12.class","name":"kotlin/jvm/functions/Function12.class","size":1511,"crc":2106560574},{"key":"kotlin/jvm/functions/Function13.class","name":"kotlin/jvm/functions/Function13.class","size":1591,"crc":-770428710},{"key":"kotlin/jvm/functions/Function14.class","name":"kotlin/jvm/functions/Function14.class","size":1671,"crc":1324059657},{"key":"kotlin/jvm/functions/Function15.class","name":"kotlin/jvm/functions/Function15.class","size":1753,"crc":1473099258},{"key":"kotlin/jvm/functions/Function16.class","name":"kotlin/jvm/functions/Function16.class","size":1833,"crc":1911316098},{"key":"kotlin/jvm/functions/Function17.class","name":"kotlin/jvm/functions/Function17.class","size":1913,"crc":1125038599},{"key":"kotlin/jvm/functions/Function18.class","name":"kotlin/jvm/functions/Function18.class","size":1993,"crc":-1828502760},{"key":"kotlin/jvm/functions/Function19.class","name":"kotlin/jvm/functions/Function19.class","size":2073,"crc":-545053459},{"key":"kotlin/jvm/functions/Function2.class","name":"kotlin/jvm/functions/Function2.class","size":737,"crc":1500835897},{"key":"kotlin/jvm/functions/Function20.class","name":"kotlin/jvm/functions/Function20.class","size":2153,"crc":-298729055},{"key":"kotlin/jvm/functions/Function21.class","name":"kotlin/jvm/functions/Function21.class","size":2233,"crc":1348955472},{"key":"kotlin/jvm/functions/Function22.class","name":"kotlin/jvm/functions/Function22.class","size":2313,"crc":998335617},{"key":"kotlin/jvm/functions/Function3.class","name":"kotlin/jvm/functions/Function3.class","size":813,"crc":-697916234},{"key":"kotlin/jvm/functions/Function4.class","name":"kotlin/jvm/functions/Function4.class","size":889,"crc":-1715368219},{"key":"kotlin/jvm/functions/Function5.class","name":"kotlin/jvm/functions/Function5.class","size":965,"crc":1254424018},{"key":"kotlin/jvm/functions/Function6.class","name":"kotlin/jvm/functions/Function6.class","size":1041,"crc":273349241},{"key":"kotlin/jvm/functions/Function7.class","name":"kotlin/jvm/functions/Function7.class","size":1117,"crc":752645592},{"key":"kotlin/jvm/functions/Function8.class","name":"kotlin/jvm/functions/Function8.class","size":1193,"crc":1599407206},{"key":"kotlin/jvm/functions/Function9.class","name":"kotlin/jvm/functions/Function9.class","size":1269,"crc":88617229},{"key":"kotlin/jvm/functions/FunctionN.class","name":"kotlin/jvm/functions/FunctionN.class","size":1062,"crc":-535196467},{"key":"kotlin/jvm/internal/ArrayBooleanIterator.class","name":"kotlin/jvm/internal/ArrayBooleanIterator.class","size":1520,"crc":1476554303},{"key":"kotlin/jvm/internal/ArrayByteIterator.class","name":"kotlin/jvm/internal/ArrayByteIterator.class","size":1520,"crc":-938656154},{"key":"kotlin/jvm/internal/ArrayCharIterator.class","name":"kotlin/jvm/internal/ArrayCharIterator.class","size":1520,"crc":-988195106},{"key":"kotlin/jvm/internal/ArrayDoubleIterator.class","name":"kotlin/jvm/internal/ArrayDoubleIterator.class","size":1530,"crc":-1748742058},{"key":"kotlin/jvm/internal/ArrayFloatIterator.class","name":"kotlin/jvm/internal/ArrayFloatIterator.class","size":1525,"crc":-717601610},{"key":"kotlin/jvm/internal/ArrayIntIterator.class","name":"kotlin/jvm/internal/ArrayIntIterator.class","size":1506,"crc":507203862},{"key":"kotlin/jvm/internal/ArrayIterator.class","name":"kotlin/jvm/internal/ArrayIterator.class","size":2111,"crc":370306508},{"key":"kotlin/jvm/internal/ArrayIteratorKt.class","name":"kotlin/jvm/internal/ArrayIteratorKt.class","size":1013,"crc":-474848299},{"key":"kotlin/jvm/internal/ArrayIteratorsKt.class","name":"kotlin/jvm/internal/ArrayIteratorsKt.class","size":3104,"crc":-371498616},{"key":"kotlin/jvm/internal/ArrayLongIterator.class","name":"kotlin/jvm/internal/ArrayLongIterator.class","size":1520,"crc":1724046069},{"key":"kotlin/jvm/internal/ArrayShortIterator.class","name":"kotlin/jvm/internal/ArrayShortIterator.class","size":1525,"crc":-356913191},{"key":"kotlin/jvm/internal/BooleanCompanionObject.class","name":"kotlin/jvm/internal/BooleanCompanionObject.class","size":771,"crc":1217606555},{"key":"kotlin/jvm/internal/BooleanSpreadBuilder.class","name":"kotlin/jvm/internal/BooleanSpreadBuilder.class","size":1730,"crc":2039947757},{"key":"kotlin/jvm/internal/BoxingConstructorMarker.class","name":"kotlin/jvm/internal/BoxingConstructorMarker.class","size":617,"crc":-297779738},{"key":"kotlin/jvm/internal/ByteCompanionObject.class","name":"kotlin/jvm/internal/ByteCompanionObject.class","size":1200,"crc":417125143},{"key":"kotlin/jvm/internal/ByteSpreadBuilder.class","name":"kotlin/jvm/internal/ByteSpreadBuilder.class","size":1724,"crc":-1241760500},{"key":"kotlin/jvm/internal/CharCompanionObject.class","name":"kotlin/jvm/internal/CharCompanionObject.class","size":1733,"crc":1197107489},{"key":"kotlin/jvm/internal/CharSpreadBuilder.class","name":"kotlin/jvm/internal/CharSpreadBuilder.class","size":1724,"crc":641915835},{"key":"kotlin/jvm/internal/ClassBasedDeclarationContainer.class","name":"kotlin/jvm/internal/ClassBasedDeclarationContainer.class","size":737,"crc":-1703136834},{"key":"kotlin/jvm/internal/ClassReference$Companion.class","name":"kotlin/jvm/internal/ClassReference$Companion.class","size":13841,"crc":-1636481799},{"key":"kotlin/jvm/internal/ClassReference.class","name":"kotlin/jvm/internal/ClassReference.class","size":11218,"crc":1400559011},{"key":"kotlin/jvm/internal/CollectionToArray.class","name":"kotlin/jvm/internal/CollectionToArray.class","size":6287,"crc":-1313706287},{"key":"kotlin/jvm/internal/DoubleCompanionObject.class","name":"kotlin/jvm/internal/DoubleCompanionObject.class","size":2300,"crc":1276311675},{"key":"kotlin/jvm/internal/DoubleSpreadBuilder.class","name":"kotlin/jvm/internal/DoubleSpreadBuilder.class","size":1728,"crc":116257681},{"key":"kotlin/jvm/internal/EnumCompanionObject.class","name":"kotlin/jvm/internal/EnumCompanionObject.class","size":709,"crc":-1104458009},{"key":"kotlin/jvm/internal/FloatCompanionObject.class","name":"kotlin/jvm/internal/FloatCompanionObject.class","size":2273,"crc":277345342},{"key":"kotlin/jvm/internal/FloatSpreadBuilder.class","name":"kotlin/jvm/internal/FloatSpreadBuilder.class","size":1726,"crc":-1397486193},{"key":"kotlin/jvm/internal/FunctionBase.class","name":"kotlin/jvm/internal/FunctionBase.class","size":587,"crc":788502332},{"key":"kotlin/jvm/internal/IntCompanionObject.class","name":"kotlin/jvm/internal/IntCompanionObject.class","size":1188,"crc":1901647266},{"key":"kotlin/jvm/internal/IntSpreadBuilder.class","name":"kotlin/jvm/internal/IntSpreadBuilder.class","size":1701,"crc":-1333193191},{"key":"kotlin/jvm/internal/KTypeBase.class","name":"kotlin/jvm/internal/KTypeBase.class","size":670,"crc":1315133298},{"key":"kotlin/jvm/internal/Lambda.class","name":"kotlin/jvm/internal/Lambda.class","size":1442,"crc":-1042024201},{"key":"kotlin/jvm/internal/LocalVariableReference.class","name":"kotlin/jvm/internal/LocalVariableReference.class","size":1374,"crc":1172117313},{"key":"kotlin/jvm/internal/LocalVariableReferencesKt.class","name":"kotlin/jvm/internal/LocalVariableReferencesKt.class","size":672,"crc":403127725},{"key":"kotlin/jvm/internal/LongCompanionObject.class","name":"kotlin/jvm/internal/LongCompanionObject.class","size":1213,"crc":1816071463},{"key":"kotlin/jvm/internal/LongSpreadBuilder.class","name":"kotlin/jvm/internal/LongSpreadBuilder.class","size":1724,"crc":297689882},{"key":"kotlin/jvm/internal/MutableLocalVariableReference.class","name":"kotlin/jvm/internal/MutableLocalVariableReference.class","size":1728,"crc":1303429273},{"key":"kotlin/jvm/internal/PackageReference.class","name":"kotlin/jvm/internal/PackageReference.class","size":2675,"crc":1554582805},{"key":"kotlin/jvm/internal/PrimitiveSpreadBuilder.class","name":"kotlin/jvm/internal/PrimitiveSpreadBuilder.class","size":2698,"crc":-1594699815},{"key":"kotlin/jvm/internal/SerializedIr.class","name":"kotlin/jvm/internal/SerializedIr.class","size":1067,"crc":-543402362},{"key":"kotlin/jvm/internal/ShortCompanionObject.class","name":"kotlin/jvm/internal/ShortCompanionObject.class","size":1202,"crc":1298997689},{"key":"kotlin/jvm/internal/ShortSpreadBuilder.class","name":"kotlin/jvm/internal/ShortSpreadBuilder.class","size":1726,"crc":-1355202178},{"key":"kotlin/jvm/internal/SourceDebugExtension.class","name":"kotlin/jvm/internal/SourceDebugExtension.class","size":992,"crc":-1038475687},{"key":"kotlin/jvm/internal/StringCompanionObject.class","name":"kotlin/jvm/internal/StringCompanionObject.class","size":713,"crc":-1850570579},{"key":"kotlin/jvm/internal/TypeParameterReference$Companion$WhenMappings.class","name":"kotlin/jvm/internal/TypeParameterReference$Companion$WhenMappings.class","size":902,"crc":-1790451992},{"key":"kotlin/jvm/internal/TypeParameterReference$Companion.class","name":"kotlin/jvm/internal/TypeParameterReference$Companion.class","size":2200,"crc":1731738497},{"key":"kotlin/jvm/internal/TypeParameterReference.class","name":"kotlin/jvm/internal/TypeParameterReference.class","size":4716,"crc":1545508144},{"key":"kotlin/jvm/internal/TypeReference$Companion.class","name":"kotlin/jvm/internal/TypeReference$Companion.class","size":957,"crc":-1244341124},{"key":"kotlin/jvm/internal/TypeReference$WhenMappings.class","name":"kotlin/jvm/internal/TypeReference$WhenMappings.class","size":787,"crc":1122334066},{"key":"kotlin/jvm/internal/TypeReference.class","name":"kotlin/jvm/internal/TypeReference.class","size":8658,"crc":-1046498709},{"key":"kotlin/jvm/internal/markers/KMappedMarker.class","name":"kotlin/jvm/internal/markers/KMappedMarker.class","size":374,"crc":1705792186},{"key":"kotlin/jvm/internal/markers/KMutableCollection.class","name":"kotlin/jvm/internal/markers/KMutableCollection.class","size":481,"crc":1308301189},{"key":"kotlin/jvm/internal/markers/KMutableIterable.class","name":"kotlin/jvm/internal/markers/KMutableIterable.class","size":471,"crc":-220076026},{"key":"kotlin/jvm/internal/markers/KMutableIterator.class","name":"kotlin/jvm/internal/markers/KMutableIterator.class","size":471,"crc":1766922427},{"key":"kotlin/jvm/internal/markers/KMutableList.class","name":"kotlin/jvm/internal/markers/KMutableList.class","size":473,"crc":1599856730},{"key":"kotlin/jvm/internal/markers/KMutableListIterator.class","name":"kotlin/jvm/internal/markers/KMutableListIterator.class","size":485,"crc":-258005691},{"key":"kotlin/jvm/internal/markers/KMutableMap$Entry.class","name":"kotlin/jvm/internal/markers/KMutableMap$Entry.class","size":557,"crc":-1709527613},{"key":"kotlin/jvm/internal/markers/KMutableMap.class","name":"kotlin/jvm/internal/markers/KMutableMap.class","size":558,"crc":-985691368},{"key":"kotlin/jvm/internal/markers/KMutableSet.class","name":"kotlin/jvm/internal/markers/KMutableSet.class","size":471,"crc":-1768021493},{"key":"kotlin/jvm/internal/unsafe/MonitorKt.class","name":"kotlin/jvm/internal/unsafe/MonitorKt.class","size":757,"crc":1070239463},{"key":"kotlin/math/Constants.class","name":"kotlin/math/Constants.class","size":1293,"crc":-746210373},{"key":"kotlin/math/MathKt.class","name":"kotlin/math/MathKt.class","size":488,"crc":2054544800},{"key":"kotlin/math/MathKt__MathHKt.class","name":"kotlin/math/MathKt__MathHKt.class","size":770,"crc":1340251484},{"key":"kotlin/math/MathKt__MathJVMKt.class","name":"kotlin/math/MathKt__MathJVMKt.class","size":14832,"crc":472634197},{"key":"kotlin/math/UMathKt.class","name":"kotlin/math/UMathKt.class","size":1263,"crc":1270985008},{"key":"kotlin/properties/Delegates$observable$1.class","name":"kotlin/properties/Delegates$observable$1.class","size":2232,"crc":-261914363},{"key":"kotlin/properties/Delegates$vetoable$1.class","name":"kotlin/properties/Delegates$vetoable$1.class","size":2294,"crc":-467644726},{"key":"kotlin/properties/Delegates.class","name":"kotlin/properties/Delegates.class","size":2799,"crc":1728157623},{"key":"kotlin/properties/NotNullVar.class","name":"kotlin/properties/NotNullVar.class","size":2588,"crc":-168446837},{"key":"kotlin/properties/ObservableProperty.class","name":"kotlin/properties/ObservableProperty.class","size":3029,"crc":1959223958},{"key":"kotlin/properties/PropertyDelegateProvider.class","name":"kotlin/properties/PropertyDelegateProvider.class","size":933,"crc":-1533513566},{"key":"kotlin/properties/ReadOnlyProperty.class","name":"kotlin/properties/ReadOnlyProperty.class","size":824,"crc":216810164},{"key":"kotlin/properties/ReadWriteProperty.class","name":"kotlin/properties/ReadWriteProperty.class","size":1184,"crc":-1870086854},{"key":"kotlin/random/AbstractPlatformRandom.class","name":"kotlin/random/AbstractPlatformRandom.class","size":2539,"crc":1335396207},{"key":"kotlin/random/FallbackThreadLocalRandom$implStorage$1.class","name":"kotlin/random/FallbackThreadLocalRandom$implStorage$1.class","size":1014,"crc":-2081479632},{"key":"kotlin/random/FallbackThreadLocalRandom.class","name":"kotlin/random/FallbackThreadLocalRandom.class","size":1293,"crc":947036432},{"key":"kotlin/random/KotlinRandom$Companion.class","name":"kotlin/random/KotlinRandom$Companion.class","size":843,"crc":-789931469},{"key":"kotlin/random/KotlinRandom.class","name":"kotlin/random/KotlinRandom.class","size":2784,"crc":-470642331},{"key":"kotlin/random/PlatformRandom$Companion.class","name":"kotlin/random/PlatformRandom$Companion.class","size":849,"crc":401880897},{"key":"kotlin/random/PlatformRandom.class","name":"kotlin/random/PlatformRandom.class","size":1508,"crc":-479568043},{"key":"kotlin/random/PlatformRandomKt.class","name":"kotlin/random/PlatformRandomKt.class","size":2012,"crc":1800954391},{"key":"kotlin/random/Random$Default$Serialized.class","name":"kotlin/random/Random$Default$Serialized.class","size":1162,"crc":-463183151},{"key":"kotlin/random/Random$Default.class","name":"kotlin/random/Random$Default.class","size":3815,"crc":-314930236},{"key":"kotlin/random/Random.class","name":"kotlin/random/Random.class","size":6432,"crc":1147069607},{"key":"kotlin/random/RandomKt.class","name":"kotlin/random/RandomKt.class","size":4366,"crc":1826215668},{"key":"kotlin/random/URandomKt.class","name":"kotlin/random/URandomKt.class","size":6468,"crc":504214208},{"key":"kotlin/random/XorWowRandom$Companion.class","name":"kotlin/random/XorWowRandom$Companion.class","size":841,"crc":256859007},{"key":"kotlin/random/XorWowRandom.class","name":"kotlin/random/XorWowRandom.class","size":2992,"crc":1800391187},{"key":"kotlin/ranges/CharProgression$Companion.class","name":"kotlin/ranges/CharProgression$Companion.class","size":1200,"crc":-664908367},{"key":"kotlin/ranges/CharProgression.class","name":"kotlin/ranges/CharProgression.class","size":3583,"crc":387509475},{"key":"kotlin/ranges/CharProgressionIterator.class","name":"kotlin/ranges/CharProgressionIterator.class","size":1552,"crc":1568083077},{"key":"kotlin/ranges/CharRange$Companion.class","name":"kotlin/ranges/CharRange$Companion.class","size":1073,"crc":-2089612353},{"key":"kotlin/ranges/CharRange.class","name":"kotlin/ranges/CharRange.class","size":4295,"crc":-1776462022},{"key":"kotlin/ranges/ClosedDoubleRange.class","name":"kotlin/ranges/ClosedDoubleRange.class","size":3161,"crc":-716891631},{"key":"kotlin/ranges/ClosedFloatRange.class","name":"kotlin/ranges/ClosedFloatRange.class","size":3154,"crc":2124662906},{"key":"kotlin/ranges/ClosedFloatingPointRange$DefaultImpls.class","name":"kotlin/ranges/ClosedFloatingPointRange$DefaultImpls.class","size":1418,"crc":1795297203},{"key":"kotlin/ranges/ClosedFloatingPointRange.class","name":"kotlin/ranges/ClosedFloatingPointRange.class","size":1179,"crc":995743375},{"key":"kotlin/ranges/ClosedRange$DefaultImpls.class","name":"kotlin/ranges/ClosedRange$DefaultImpls.class","size":1316,"crc":-514030111},{"key":"kotlin/ranges/ClosedRange.class","name":"kotlin/ranges/ClosedRange.class","size":1018,"crc":1812267449},{"key":"kotlin/ranges/ComparableOpenEndRange.class","name":"kotlin/ranges/ComparableOpenEndRange.class","size":2873,"crc":-70811101},{"key":"kotlin/ranges/ComparableRange.class","name":"kotlin/ranges/ComparableRange.class","size":2852,"crc":-191796225},{"key":"kotlin/ranges/IntProgression$Companion.class","name":"kotlin/ranges/IntProgression$Companion.class","size":1181,"crc":-1832196079},{"key":"kotlin/ranges/IntProgression.class","name":"kotlin/ranges/IntProgression.class","size":3421,"crc":-468174995},{"key":"kotlin/ranges/IntProgressionIterator.class","name":"kotlin/ranges/IntProgressionIterator.class","size":1447,"crc":-429141606},{"key":"kotlin/ranges/IntRange$Companion.class","name":"kotlin/ranges/IntRange$Companion.class","size":1068,"crc":549433879},{"key":"kotlin/ranges/IntRange.class","name":"kotlin/ranges/IntRange.class","size":4200,"crc":-1017606740},{"key":"kotlin/ranges/LongProgression$Companion.class","name":"kotlin/ranges/LongProgression$Companion.class","size":1187,"crc":414636351},{"key":"kotlin/ranges/LongProgression.class","name":"kotlin/ranges/LongProgression.class","size":3490,"crc":1743832563},{"key":"kotlin/ranges/LongProgressionIterator.class","name":"kotlin/ranges/LongProgressionIterator.class","size":1458,"crc":1434649141},{"key":"kotlin/ranges/LongRange$Companion.class","name":"kotlin/ranges/LongRange$Companion.class","size":1073,"crc":1201629386},{"key":"kotlin/ranges/LongRange.class","name":"kotlin/ranges/LongRange.class","size":4239,"crc":219648283},{"key":"kotlin/ranges/OpenEndDoubleRange.class","name":"kotlin/ranges/OpenEndDoubleRange.class","size":2973,"crc":-1168196044},{"key":"kotlin/ranges/OpenEndFloatRange.class","name":"kotlin/ranges/OpenEndFloatRange.class","size":2966,"crc":-995153201},{"key":"kotlin/ranges/OpenEndRange$DefaultImpls.class","name":"kotlin/ranges/OpenEndRange$DefaultImpls.class","size":1323,"crc":1728962885},{"key":"kotlin/ranges/OpenEndRange.class","name":"kotlin/ranges/OpenEndRange.class","size":1163,"crc":882150429},{"key":"kotlin/ranges/RangesKt.class","name":"kotlin/ranges/RangesKt.class","size":426,"crc":430762631},{"key":"kotlin/ranges/RangesKt__RangesKt.class","name":"kotlin/ranges/RangesKt__RangesKt.class","size":4843,"crc":364162059},{"key":"kotlin/ranges/RangesKt___RangesKt.class","name":"kotlin/ranges/RangesKt___RangesKt.class","size":39538,"crc":600863238},{"key":"kotlin/ranges/UIntProgression$Companion.class","name":"kotlin/ranges/UIntProgression$Companion.class","size":1297,"crc":131326168},{"key":"kotlin/ranges/UIntProgression.class","name":"kotlin/ranges/UIntProgression.class","size":3841,"crc":-2121643808},{"key":"kotlin/ranges/UIntProgressionIterator.class","name":"kotlin/ranges/UIntProgressionIterator.class","size":2340,"crc":-237562799},{"key":"kotlin/ranges/UIntRange$Companion.class","name":"kotlin/ranges/UIntRange$Companion.class","size":1067,"crc":283912930},{"key":"kotlin/ranges/UIntRange.class","name":"kotlin/ranges/UIntRange.class","size":4693,"crc":637688633},{"key":"kotlin/ranges/ULongProgression$Companion.class","name":"kotlin/ranges/ULongProgression$Companion.class","size":1305,"crc":-914354173},{"key":"kotlin/ranges/ULongProgression.class","name":"kotlin/ranges/ULongProgression.class","size":3977,"crc":2005427058},{"key":"kotlin/ranges/ULongProgressionIterator.class","name":"kotlin/ranges/ULongProgressionIterator.class","size":2350,"crc":468147372},{"key":"kotlin/ranges/ULongRange$Companion.class","name":"kotlin/ranges/ULongRange$Companion.class","size":1073,"crc":1766013895},{"key":"kotlin/ranges/ULongRange.class","name":"kotlin/ranges/ULongRange.class","size":4796,"crc":295749197},{"key":"kotlin/ranges/URangesKt.class","name":"kotlin/ranges/URangesKt.class","size":427,"crc":-880050274},{"key":"kotlin/ranges/URangesKt___URangesKt.class","name":"kotlin/ranges/URangesKt___URangesKt.class","size":16720,"crc":1950649546},{"key":"kotlin/ranges/ranges.kotlin_builtins","name":"kotlin/ranges/ranges.kotlin_builtins","size":4184,"crc":1405855901},{"key":"kotlin/reflect/GenericArrayTypeImpl.class","name":"kotlin/reflect/GenericArrayTypeImpl.class","size":2222,"crc":-381832731},{"key":"kotlin/reflect/KAnnotatedElement.class","name":"kotlin/reflect/KAnnotatedElement.class","size":636,"crc":61542354},{"key":"kotlin/reflect/KCallable$DefaultImpls.class","name":"kotlin/reflect/KCallable$DefaultImpls.class","size":984,"crc":-1349087401},{"key":"kotlin/reflect/KCallable.class","name":"kotlin/reflect/KCallable.class","size":2421,"crc":-1198106881},{"key":"kotlin/reflect/KClass$DefaultImpls.class","name":"kotlin/reflect/KClass$DefaultImpls.class","size":1397,"crc":-1046428166},{"key":"kotlin/reflect/KClass.class","name":"kotlin/reflect/KClass.class","size":3790,"crc":-436336588},{"key":"kotlin/reflect/KClasses.class","name":"kotlin/reflect/KClasses.class","size":2672,"crc":-1682639973},{"key":"kotlin/reflect/KClassesImplKt.class","name":"kotlin/reflect/KClassesImplKt.class","size":1114,"crc":1356511699},{"key":"kotlin/reflect/KClassifier.class","name":"kotlin/reflect/KClassifier.class","size":433,"crc":1747988473},{"key":"kotlin/reflect/KDeclarationContainer.class","name":"kotlin/reflect/KDeclarationContainer.class","size":681,"crc":1214565265},{"key":"kotlin/reflect/KFunction$DefaultImpls.class","name":"kotlin/reflect/KFunction$DefaultImpls.class","size":783,"crc":-427354729},{"key":"kotlin/reflect/KFunction.class","name":"kotlin/reflect/KFunction.class","size":1118,"crc":1171628778},{"key":"kotlin/reflect/KMutableProperty$Setter.class","name":"kotlin/reflect/KMutableProperty$Setter.class","size":824,"crc":1694257050},{"key":"kotlin/reflect/KMutableProperty.class","name":"kotlin/reflect/KMutableProperty.class","size":923,"crc":66916748},{"key":"kotlin/reflect/KMutableProperty0$Setter.class","name":"kotlin/reflect/KMutableProperty0$Setter.class","size":851,"crc":1613905322},{"key":"kotlin/reflect/KMutableProperty0.class","name":"kotlin/reflect/KMutableProperty0.class","size":1173,"crc":-705522734},{"key":"kotlin/reflect/KMutableProperty1$Setter.class","name":"kotlin/reflect/KMutableProperty1$Setter.class","size":894,"crc":1660646701},{"key":"kotlin/reflect/KMutableProperty1.class","name":"kotlin/reflect/KMutableProperty1.class","size":1268,"crc":-841500514},{"key":"kotlin/reflect/KMutableProperty2$Setter.class","name":"kotlin/reflect/KMutableProperty2$Setter.class","size":936,"crc":95096653},{"key":"kotlin/reflect/KMutableProperty2.class","name":"kotlin/reflect/KMutableProperty2.class","size":1364,"crc":-452000448},{"key":"kotlin/reflect/KParameter$DefaultImpls.class","name":"kotlin/reflect/KParameter$DefaultImpls.class","size":490,"crc":39464767},{"key":"kotlin/reflect/KParameter$Kind.class","name":"kotlin/reflect/KParameter$Kind.class","size":1904,"crc":418617929},{"key":"kotlin/reflect/KParameter.class","name":"kotlin/reflect/KParameter.class","size":1288,"crc":626359754},{"key":"kotlin/reflect/KProperty$Accessor.class","name":"kotlin/reflect/KProperty$Accessor.class","size":777,"crc":1283102832},{"key":"kotlin/reflect/KProperty$DefaultImpls.class","name":"kotlin/reflect/KProperty$DefaultImpls.class","size":561,"crc":1391387786},{"key":"kotlin/reflect/KProperty$Getter.class","name":"kotlin/reflect/KProperty$Getter.class","size":755,"crc":-1336166623},{"key":"kotlin/reflect/KProperty.class","name":"kotlin/reflect/KProperty.class","size":1201,"crc":-267659921},{"key":"kotlin/reflect/KProperty0$Getter.class","name":"kotlin/reflect/KProperty0$Getter.class","size":775,"crc":-543649250},{"key":"kotlin/reflect/KProperty0.class","name":"kotlin/reflect/KProperty0.class","size":1229,"crc":-1491341011},{"key":"kotlin/reflect/KProperty1$Getter.class","name":"kotlin/reflect/KProperty1$Getter.class","size":818,"crc":535518708},{"key":"kotlin/reflect/KProperty1.class","name":"kotlin/reflect/KProperty1.class","size":1373,"crc":1178227467},{"key":"kotlin/reflect/KProperty2$Getter.class","name":"kotlin/reflect/KProperty2$Getter.class","size":860,"crc":163446700},{"key":"kotlin/reflect/KProperty2.class","name":"kotlin/reflect/KProperty2.class","size":1480,"crc":-1253080778},{"key":"kotlin/reflect/KType$DefaultImpls.class","name":"kotlin/reflect/KType$DefaultImpls.class","size":557,"crc":-1915608191},{"key":"kotlin/reflect/KType.class","name":"kotlin/reflect/KType.class","size":1145,"crc":362454291},{"key":"kotlin/reflect/KTypeParameter.class","name":"kotlin/reflect/KTypeParameter.class","size":1075,"crc":1948605281},{"key":"kotlin/reflect/KTypeProjection$Companion.class","name":"kotlin/reflect/KTypeProjection$Companion.class","size":2155,"crc":218773531},{"key":"kotlin/reflect/KTypeProjection$WhenMappings.class","name":"kotlin/reflect/KTypeProjection$WhenMappings.class","size":783,"crc":2035984086},{"key":"kotlin/reflect/KTypeProjection.class","name":"kotlin/reflect/KTypeProjection.class","size":4572,"crc":1422260547},{"key":"kotlin/reflect/KVariance.class","name":"kotlin/reflect/KVariance.class","size":1831,"crc":-473796190},{"key":"kotlin/reflect/KVisibility.class","name":"kotlin/reflect/KVisibility.class","size":1917,"crc":25028458},{"key":"kotlin/reflect/ParameterizedTypeImpl$getTypeName$1$1.class","name":"kotlin/reflect/ParameterizedTypeImpl$getTypeName$1$1.class","size":1548,"crc":1835994038},{"key":"kotlin/reflect/ParameterizedTypeImpl.class","name":"kotlin/reflect/ParameterizedTypeImpl.class","size":5092,"crc":45084669},{"key":"kotlin/reflect/TypeImpl.class","name":"kotlin/reflect/TypeImpl.class","size":587,"crc":-1480646859},{"key":"kotlin/reflect/TypeOfKt.class","name":"kotlin/reflect/TypeOfKt.class","size":833,"crc":176327660},{"key":"kotlin/reflect/TypeVariableImpl.class","name":"kotlin/reflect/TypeVariableImpl.class","size":5799,"crc":1176011175},{"key":"kotlin/reflect/TypesJVMKt$WhenMappings.class","name":"kotlin/reflect/TypesJVMKt$WhenMappings.class","size":766,"crc":1312013894},{"key":"kotlin/reflect/TypesJVMKt$typeToString$unwrap$1.class","name":"kotlin/reflect/TypesJVMKt$typeToString$unwrap$1.class","size":1533,"crc":-1374731097},{"key":"kotlin/reflect/TypesJVMKt.class","name":"kotlin/reflect/TypesJVMKt.class","size":9477,"crc":216222109},{"key":"kotlin/reflect/WildcardTypeImpl$Companion.class","name":"kotlin/reflect/WildcardTypeImpl$Companion.class","size":1103,"crc":394334377},{"key":"kotlin/reflect/WildcardTypeImpl.class","name":"kotlin/reflect/WildcardTypeImpl.class","size":3277,"crc":452613260},{"key":"kotlin/reflect/reflect.kotlin_builtins","name":"kotlin/reflect/reflect.kotlin_builtins","size":4827,"crc":-575400209},{"key":"kotlin/sequences/ConstrainedOnceSequence.class","name":"kotlin/sequences/ConstrainedOnceSequence.class","size":1888,"crc":865723757},{"key":"kotlin/sequences/DistinctIterator.class","name":"kotlin/sequences/DistinctIterator.class","size":2284,"crc":-290731626},{"key":"kotlin/sequences/DistinctSequence.class","name":"kotlin/sequences/DistinctSequence.class","size":1853,"crc":-604290109},{"key":"kotlin/sequences/DropSequence$iterator$1.class","name":"kotlin/sequences/DropSequence$iterator$1.class","size":2364,"crc":259163752},{"key":"kotlin/sequences/DropSequence.class","name":"kotlin/sequences/DropSequence.class","size":3637,"crc":-101687501},{"key":"kotlin/sequences/DropTakeSequence.class","name":"kotlin/sequences/DropTakeSequence.class","size":823,"crc":-483183911},{"key":"kotlin/sequences/DropWhileSequence$iterator$1.class","name":"kotlin/sequences/DropWhileSequence$iterator$1.class","size":3183,"crc":406114991},{"key":"kotlin/sequences/DropWhileSequence.class","name":"kotlin/sequences/DropWhileSequence.class","size":2198,"crc":1563596121},{"key":"kotlin/sequences/EmptySequence.class","name":"kotlin/sequences/EmptySequence.class","size":1583,"crc":-1967592418},{"key":"kotlin/sequences/FilteringSequence$iterator$1.class","name":"kotlin/sequences/FilteringSequence$iterator$1.class","size":3292,"crc":-1220777937},{"key":"kotlin/sequences/FilteringSequence.class","name":"kotlin/sequences/FilteringSequence.class","size":2630,"crc":1497884437},{"key":"kotlin/sequences/FlatteningSequence$State.class","name":"kotlin/sequences/FlatteningSequence$State.class","size":949,"crc":-2055433535},{"key":"kotlin/sequences/FlatteningSequence$iterator$1.class","name":"kotlin/sequences/FlatteningSequence$iterator$1.class","size":3473,"crc":-398122684},{"key":"kotlin/sequences/FlatteningSequence.class","name":"kotlin/sequences/FlatteningSequence.class","size":2686,"crc":242870964},{"key":"kotlin/sequences/GeneratorSequence$iterator$1.class","name":"kotlin/sequences/GeneratorSequence$iterator$1.class","size":3117,"crc":-127156659},{"key":"kotlin/sequences/GeneratorSequence.class","name":"kotlin/sequences/GeneratorSequence.class","size":2274,"crc":554609855},{"key":"kotlin/sequences/IndexingSequence$iterator$1.class","name":"kotlin/sequences/IndexingSequence$iterator$1.class","size":2561,"crc":-1906805568},{"key":"kotlin/sequences/IndexingSequence.class","name":"kotlin/sequences/IndexingSequence.class","size":1791,"crc":1970829357},{"key":"kotlin/sequences/MergingSequence$iterator$1.class","name":"kotlin/sequences/MergingSequence$iterator$1.class","size":2514,"crc":-1203680541},{"key":"kotlin/sequences/MergingSequence.class","name":"kotlin/sequences/MergingSequence.class","size":2553,"crc":-112609174},{"key":"kotlin/sequences/Sequence.class","name":"kotlin/sequences/Sequence.class","size":618,"crc":1282883404},{"key":"kotlin/sequences/SequenceBuilderIterator.class","name":"kotlin/sequences/SequenceBuilderIterator.class","size":5783,"crc":-440315533},{"key":"kotlin/sequences/SequenceScope.class","name":"kotlin/sequences/SequenceScope.class","size":2640,"crc":1350930238},{"key":"kotlin/sequences/SequencesKt.class","name":"kotlin/sequences/SequencesKt.class","size":610,"crc":-864609223},{"key":"kotlin/sequences/SequencesKt__SequenceBuilderKt$sequence$$inlined$Sequence$1.class","name":"kotlin/sequences/SequencesKt__SequenceBuilderKt$sequence$$inlined$Sequence$1.class","size":2118,"crc":-133402735},{"key":"kotlin/sequences/SequencesKt__SequenceBuilderKt.class","name":"kotlin/sequences/SequencesKt__SequenceBuilderKt.class","size":3141,"crc":433352677},{"key":"kotlin/sequences/SequencesKt__SequencesJVMKt.class","name":"kotlin/sequences/SequencesKt__SequencesJVMKt.class","size":1311,"crc":1189773375},{"key":"kotlin/sequences/SequencesKt__SequencesKt$Sequence$1.class","name":"kotlin/sequences/SequencesKt__SequencesKt$Sequence$1.class","size":1790,"crc":1373372296},{"key":"kotlin/sequences/SequencesKt__SequencesKt$asSequence$$inlined$Sequence$1.class","name":"kotlin/sequences/SequencesKt__SequencesKt$asSequence$$inlined$Sequence$1.class","size":1901,"crc":202007975},{"key":"kotlin/sequences/SequencesKt__SequencesKt$flatMapIndexed$1.class","name":"kotlin/sequences/SequencesKt__SequencesKt$flatMapIndexed$1.class","size":4942,"crc":195243253},{"key":"kotlin/sequences/SequencesKt__SequencesKt$ifEmpty$1.class","name":"kotlin/sequences/SequencesKt__SequencesKt$ifEmpty$1.class","size":4353,"crc":-1834905550},{"key":"kotlin/sequences/SequencesKt__SequencesKt$sequenceOf$$inlined$Sequence$1.class","name":"kotlin/sequences/SequencesKt__SequencesKt$sequenceOf$$inlined$Sequence$1.class","size":2004,"crc":-826212920},{"key":"kotlin/sequences/SequencesKt__SequencesKt$sequenceOf$1$1.class","name":"kotlin/sequences/SequencesKt__SequencesKt$sequenceOf$1$1.class","size":1629,"crc":-630533487},{"key":"kotlin/sequences/SequencesKt__SequencesKt$shuffled$1.class","name":"kotlin/sequences/SequencesKt__SequencesKt$shuffled$1.class","size":4591,"crc":-1372081805},{"key":"kotlin/sequences/SequencesKt__SequencesKt.class","name":"kotlin/sequences/SequencesKt__SequencesKt.class","size":11998,"crc":-1462475474},{"key":"kotlin/sequences/SequencesKt___SequencesJvmKt.class","name":"kotlin/sequences/SequencesKt___SequencesJvmKt.class","size":10985,"crc":-1448296786},{"key":"kotlin/sequences/SequencesKt___SequencesKt$asIterable$$inlined$Iterable$1.class","name":"kotlin/sequences/SequencesKt___SequencesKt$asIterable$$inlined$Iterable$1.class","size":2073,"crc":1567611736},{"key":"kotlin/sequences/SequencesKt___SequencesKt$filterIsInstance$1.class","name":"kotlin/sequences/SequencesKt___SequencesKt$filterIsInstance$1.class","size":1746,"crc":-266251164},{"key":"kotlin/sequences/SequencesKt___SequencesKt$flatMap$1.class","name":"kotlin/sequences/SequencesKt___SequencesKt$flatMap$1.class","size":1636,"crc":-1879317587},{"key":"kotlin/sequences/SequencesKt___SequencesKt$flatMap$2.class","name":"kotlin/sequences/SequencesKt___SequencesKt$flatMap$2.class","size":1663,"crc":266841066},{"key":"kotlin/sequences/SequencesKt___SequencesKt$flatMapIndexed$1.class","name":"kotlin/sequences/SequencesKt___SequencesKt$flatMapIndexed$1.class","size":1657,"crc":359534941},{"key":"kotlin/sequences/SequencesKt___SequencesKt$flatMapIndexed$2.class","name":"kotlin/sequences/SequencesKt___SequencesKt$flatMapIndexed$2.class","size":1692,"crc":1833181704},{"key":"kotlin/sequences/SequencesKt___SequencesKt$groupingBy$1.class","name":"kotlin/sequences/SequencesKt___SequencesKt$groupingBy$1.class","size":2235,"crc":1007616242},{"key":"kotlin/sequences/SequencesKt___SequencesKt$minus$1.class","name":"kotlin/sequences/SequencesKt___SequencesKt$minus$1.class","size":2553,"crc":-305955381},{"key":"kotlin/sequences/SequencesKt___SequencesKt$minus$2.class","name":"kotlin/sequences/SequencesKt___SequencesKt$minus$2.class","size":2209,"crc":1038832985},{"key":"kotlin/sequences/SequencesKt___SequencesKt$minus$3.class","name":"kotlin/sequences/SequencesKt___SequencesKt$minus$3.class","size":2550,"crc":2114134072},{"key":"kotlin/sequences/SequencesKt___SequencesKt$minus$4.class","name":"kotlin/sequences/SequencesKt___SequencesKt$minus$4.class","size":2437,"crc":1519944118},{"key":"kotlin/sequences/SequencesKt___SequencesKt$runningFold$1.class","name":"kotlin/sequences/SequencesKt___SequencesKt$runningFold$1.class","size":4458,"crc":1558006351},{"key":"kotlin/sequences/SequencesKt___SequencesKt$runningFoldIndexed$1.class","name":"kotlin/sequences/SequencesKt___SequencesKt$runningFoldIndexed$1.class","size":4965,"crc":-118300893},{"key":"kotlin/sequences/SequencesKt___SequencesKt$runningReduce$1.class","name":"kotlin/sequences/SequencesKt___SequencesKt$runningReduce$1.class","size":4329,"crc":-890616744},{"key":"kotlin/sequences/SequencesKt___SequencesKt$runningReduceIndexed$1.class","name":"kotlin/sequences/SequencesKt___SequencesKt$runningReduceIndexed$1.class","size":4857,"crc":-1755309590},{"key":"kotlin/sequences/SequencesKt___SequencesKt$sorted$1.class","name":"kotlin/sequences/SequencesKt___SequencesKt$sorted$1.class","size":1489,"crc":573340019},{"key":"kotlin/sequences/SequencesKt___SequencesKt$sortedWith$1.class","name":"kotlin/sequences/SequencesKt___SequencesKt$sortedWith$1.class","size":1718,"crc":1414080937},{"key":"kotlin/sequences/SequencesKt___SequencesKt$zipWithNext$2.class","name":"kotlin/sequences/SequencesKt___SequencesKt$zipWithNext$2.class","size":4364,"crc":1041251936},{"key":"kotlin/sequences/SequencesKt___SequencesKt.class","name":"kotlin/sequences/SequencesKt___SequencesKt.class","size":96394,"crc":-1426404030},{"key":"kotlin/sequences/SubSequence$iterator$1.class","name":"kotlin/sequences/SubSequence$iterator$1.class","size":2610,"crc":618427518},{"key":"kotlin/sequences/SubSequence.class","name":"kotlin/sequences/SubSequence.class","size":4067,"crc":-1373916743},{"key":"kotlin/sequences/TakeSequence$iterator$1.class","name":"kotlin/sequences/TakeSequence$iterator$1.class","size":2300,"crc":-1341488208},{"key":"kotlin/sequences/TakeSequence.class","name":"kotlin/sequences/TakeSequence.class","size":3507,"crc":1699114532},{"key":"kotlin/sequences/TakeWhileSequence$iterator$1.class","name":"kotlin/sequences/TakeWhileSequence$iterator$1.class","size":3213,"crc":-1666050794},{"key":"kotlin/sequences/TakeWhileSequence.class","name":"kotlin/sequences/TakeWhileSequence.class","size":2198,"crc":1171566728},{"key":"kotlin/sequences/TransformingIndexedSequence$iterator$1.class","name":"kotlin/sequences/TransformingIndexedSequence$iterator$1.class","size":2745,"crc":1355692737},{"key":"kotlin/sequences/TransformingIndexedSequence.class","name":"kotlin/sequences/TransformingIndexedSequence.class","size":2303,"crc":-837378222},{"key":"kotlin/sequences/TransformingSequence$iterator$1.class","name":"kotlin/sequences/TransformingSequence$iterator$1.class","size":2195,"crc":-319302487},{"key":"kotlin/sequences/TransformingSequence.class","name":"kotlin/sequences/TransformingSequence.class","size":2770,"crc":-1556206322},{"key":"kotlin/sequences/USequencesKt.class","name":"kotlin/sequences/USequencesKt.class","size":451,"crc":-557255450},{"key":"kotlin/sequences/USequencesKt___USequencesKt.class","name":"kotlin/sequences/USequencesKt___USequencesKt.class","size":2701,"crc":-388842692},{"key":"kotlin/system/ProcessKt.class","name":"kotlin/system/ProcessKt.class","size":820,"crc":274646425},{"key":"kotlin/system/TimingKt.class","name":"kotlin/system/TimingKt.class","size":1430,"crc":-946610639},{"key":"kotlin/text/CharCategory$Companion.class","name":"kotlin/text/CharCategory$Companion.class","size":1654,"crc":119737177},{"key":"kotlin/text/CharCategory.class","name":"kotlin/text/CharCategory.class","size":4989,"crc":-1647046756},{"key":"kotlin/text/CharDirectionality$Companion.class","name":"kotlin/text/CharDirectionality$Companion.class","size":2100,"crc":931805186},{"key":"kotlin/text/CharDirectionality.class","name":"kotlin/text/CharDirectionality.class","size":6313,"crc":368352003},{"key":"kotlin/text/CharsKt.class","name":"kotlin/text/CharsKt.class","size":412,"crc":-1950353735},{"key":"kotlin/text/CharsKt__CharJVMKt.class","name":"kotlin/text/CharsKt__CharJVMKt.class","size":7616,"crc":1865390063},{"key":"kotlin/text/CharsKt__CharKt.class","name":"kotlin/text/CharsKt__CharKt.class","size":4624,"crc":1054679380},{"key":"kotlin/text/Charsets.class","name":"kotlin/text/Charsets.class","size":2791,"crc":878977593},{"key":"kotlin/text/CharsetsKt.class","name":"kotlin/text/CharsetsKt.class","size":925,"crc":-1944248469},{"key":"kotlin/text/DelimitedRangesSequence$iterator$1.class","name":"kotlin/text/DelimitedRangesSequence$iterator$1.class","size":4661,"crc":-1094554109},{"key":"kotlin/text/DelimitedRangesSequence.class","name":"kotlin/text/DelimitedRangesSequence.class","size":2942,"crc":-528697564},{"key":"kotlin/text/FlagEnum.class","name":"kotlin/text/FlagEnum.class","size":457,"crc":486137398},{"key":"kotlin/text/HexExtensionsKt.class","name":"kotlin/text/HexExtensionsKt.class","size":35159,"crc":1356547963},{"key":"kotlin/text/HexFormat$Builder.class","name":"kotlin/text/HexFormat$Builder.class","size":3952,"crc":85428446},{"key":"kotlin/text/HexFormat$BytesHexFormat$Builder.class","name":"kotlin/text/HexFormat$BytesHexFormat$Builder.class","size":4424,"crc":336245821},{"key":"kotlin/text/HexFormat$BytesHexFormat$Companion.class","name":"kotlin/text/HexFormat$BytesHexFormat$Companion.class","size":1208,"crc":2047310794},{"key":"kotlin/text/HexFormat$BytesHexFormat.class","name":"kotlin/text/HexFormat$BytesHexFormat.class","size":5102,"crc":-277654752},{"key":"kotlin/text/HexFormat$Companion.class","name":"kotlin/text/HexFormat$Companion.class","size":1224,"crc":1393620309},{"key":"kotlin/text/HexFormat$NumberHexFormat$Builder.class","name":"kotlin/text/HexFormat$NumberHexFormat$Builder.class","size":4138,"crc":-1220051491},{"key":"kotlin/text/HexFormat$NumberHexFormat$Companion.class","name":"kotlin/text/HexFormat$NumberHexFormat$Companion.class","size":1214,"crc":2028381211},{"key":"kotlin/text/HexFormat$NumberHexFormat.class","name":"kotlin/text/HexFormat$NumberHexFormat.class","size":4525,"crc":-2031902011},{"key":"kotlin/text/HexFormat.class","name":"kotlin/text/HexFormat.class","size":3732,"crc":-313295034},{"key":"kotlin/text/HexFormatKt.class","name":"kotlin/text/HexFormatKt.class","size":2804,"crc":-58663613},{"key":"kotlin/text/LinesIterator$State.class","name":"kotlin/text/LinesIterator$State.class","size":880,"crc":-2089737975},{"key":"kotlin/text/LinesIterator.class","name":"kotlin/text/LinesIterator.class","size":3046,"crc":-339343503},{"key":"kotlin/text/MatchGroup.class","name":"kotlin/text/MatchGroup.class","size":2813,"crc":-117722268},{"key":"kotlin/text/MatchGroupCollection.class","name":"kotlin/text/MatchGroupCollection.class","size":781,"crc":-1776031722},{"key":"kotlin/text/MatchNamedGroupCollection.class","name":"kotlin/text/MatchNamedGroupCollection.class","size":815,"crc":-1835558197},{"key":"kotlin/text/MatchResult$DefaultImpls.class","name":"kotlin/text/MatchResult$DefaultImpls.class","size":799,"crc":153161564},{"key":"kotlin/text/MatchResult$Destructured.class","name":"kotlin/text/MatchResult$Destructured.class","size":2736,"crc":-1585547917},{"key":"kotlin/text/MatchResult.class","name":"kotlin/text/MatchResult.class","size":1442,"crc":-1719703349},{"key":"kotlin/text/MatcherMatchResult$groupValues$1.class","name":"kotlin/text/MatcherMatchResult$groupValues$1.class","size":2287,"crc":-732136263},{"key":"kotlin/text/MatcherMatchResult$groups$1.class","name":"kotlin/text/MatcherMatchResult$groups$1.class","size":4447,"crc":-1578023666},{"key":"kotlin/text/MatcherMatchResult.class","name":"kotlin/text/MatcherMatchResult.class","size":4098,"crc":-1009115619},{"key":"kotlin/text/Regex$Companion.class","name":"kotlin/text/Regex$Companion.class","size":2226,"crc":-1815782253},{"key":"kotlin/text/Regex$Serialized$Companion.class","name":"kotlin/text/Regex$Serialized$Companion.class","size":884,"crc":1914975066},{"key":"kotlin/text/Regex$Serialized.class","name":"kotlin/text/Regex$Serialized.class","size":1990,"crc":-1620942971},{"key":"kotlin/text/Regex$findAll$2.class","name":"kotlin/text/Regex$findAll$2.class","size":1470,"crc":1757499400},{"key":"kotlin/text/Regex$special$$inlined$fromInt$1.class","name":"kotlin/text/Regex$special$$inlined$fromInt$1.class","size":1709,"crc":-245323399},{"key":"kotlin/text/Regex$splitToSequence$1.class","name":"kotlin/text/Regex$splitToSequence$1.class","size":4796,"crc":-1397166931},{"key":"kotlin/text/Regex.class","name":"kotlin/text/Regex.class","size":13358,"crc":-1401467764},{"key":"kotlin/text/RegexKt$fromInt$1$1.class","name":"kotlin/text/RegexKt$fromInt$1$1.class","size":1578,"crc":1749796829},{"key":"kotlin/text/RegexKt.class","name":"kotlin/text/RegexKt.class","size":4909,"crc":-650904006},{"key":"kotlin/text/RegexOption.class","name":"kotlin/text/RegexOption.class","size":2679,"crc":-2038521908},{"key":"kotlin/text/StringsKt.class","name":"kotlin/text/StringsKt.class","size":882,"crc":1250351734},{"key":"kotlin/text/StringsKt__AppendableKt.class","name":"kotlin/text/StringsKt__AppendableKt.class","size":3761,"crc":1431371205},{"key":"kotlin/text/StringsKt__IndentKt.class","name":"kotlin/text/StringsKt__IndentKt.class","size":14851,"crc":1046032515},{"key":"kotlin/text/StringsKt__RegexExtensionsJVMKt.class","name":"kotlin/text/StringsKt__RegexExtensionsJVMKt.class","size":1031,"crc":657189128},{"key":"kotlin/text/StringsKt__RegexExtensionsKt.class","name":"kotlin/text/StringsKt__RegexExtensionsKt.class","size":1706,"crc":883913269},{"key":"kotlin/text/StringsKt__StringBuilderJVMKt.class","name":"kotlin/text/StringsKt__StringBuilderJVMKt.class","size":12914,"crc":1120472385},{"key":"kotlin/text/StringsKt__StringBuilderKt.class","name":"kotlin/text/StringsKt__StringBuilderKt.class","size":5575,"crc":1405754583},{"key":"kotlin/text/StringsKt__StringNumberConversionsJVMKt.class","name":"kotlin/text/StringsKt__StringNumberConversionsJVMKt.class","size":14602,"crc":1571947069},{"key":"kotlin/text/StringsKt__StringNumberConversionsKt.class","name":"kotlin/text/StringsKt__StringNumberConversionsKt.class","size":4931,"crc":-685287199},{"key":"kotlin/text/StringsKt__StringsJVMKt.class","name":"kotlin/text/StringsKt__StringsJVMKt.class","size":27852,"crc":-154266504},{"key":"kotlin/text/StringsKt__StringsKt$iterator$1.class","name":"kotlin/text/StringsKt__StringsKt$iterator$1.class","size":1269,"crc":1966668997},{"key":"kotlin/text/StringsKt__StringsKt$lineSequence$$inlined$Sequence$1.class","name":"kotlin/text/StringsKt__StringsKt$lineSequence$$inlined$Sequence$1.class","size":2026,"crc":731646200},{"key":"kotlin/text/StringsKt__StringsKt.class","name":"kotlin/text/StringsKt__StringsKt.class","size":56283,"crc":-1360496028},{"key":"kotlin/text/StringsKt___StringsJvmKt.class","name":"kotlin/text/StringsKt___StringsJvmKt.class","size":7602,"crc":-761193061},{"key":"kotlin/text/StringsKt___StringsKt$asIterable$$inlined$Iterable$1.class","name":"kotlin/text/StringsKt___StringsKt$asIterable$$inlined$Iterable$1.class","size":2130,"crc":1492786417},{"key":"kotlin/text/StringsKt___StringsKt$asSequence$$inlined$Sequence$1.class","name":"kotlin/text/StringsKt___StringsKt$asSequence$$inlined$Sequence$1.class","size":2084,"crc":-320785426},{"key":"kotlin/text/StringsKt___StringsKt$groupingBy$1.class","name":"kotlin/text/StringsKt___StringsKt$groupingBy$1.class","size":2497,"crc":1519006001},{"key":"kotlin/text/StringsKt___StringsKt.class","name":"kotlin/text/StringsKt___StringsKt.class","size":93466,"crc":463902968},{"key":"kotlin/text/SystemProperties.class","name":"kotlin/text/SystemProperties.class","size":1024,"crc":-1028457095},{"key":"kotlin/text/TypeAliasesKt.class","name":"kotlin/text/TypeAliasesKt.class","size":923,"crc":99667082},{"key":"kotlin/text/Typography.class","name":"kotlin/text/Typography.class","size":3745,"crc":-1075034045},{"key":"kotlin/text/UHexExtensionsKt.class","name":"kotlin/text/UHexExtensionsKt.class","size":7264,"crc":-218497711},{"key":"kotlin/text/UStringsKt.class","name":"kotlin/text/UStringsKt.class","size":7274,"crc":-1710233799},{"key":"kotlin/text/_OneToManyTitlecaseMappingsKt.class","name":"kotlin/text/_OneToManyTitlecaseMappingsKt.class","size":1649,"crc":2114141133},{"key":"kotlin/text/jdk8/RegexExtensionsJDK8Kt.class","name":"kotlin/text/jdk8/RegexExtensionsJDK8Kt.class","size":1522,"crc":-362775055},{"key":"kotlin/time/AbstractDoubleTimeSource$DoubleTimeMark.class","name":"kotlin/time/AbstractDoubleTimeSource$DoubleTimeMark.class","size":5233,"crc":496208716},{"key":"kotlin/time/AbstractDoubleTimeSource.class","name":"kotlin/time/AbstractDoubleTimeSource.class","size":2284,"crc":2088247897},{"key":"kotlin/time/AbstractLongTimeSource$LongTimeMark.class","name":"kotlin/time/AbstractLongTimeSource$LongTimeMark.class","size":6861,"crc":-574240891},{"key":"kotlin/time/AbstractLongTimeSource.class","name":"kotlin/time/AbstractLongTimeSource.class","size":3313,"crc":-628510618},{"key":"kotlin/time/AdjustedTimeMark.class","name":"kotlin/time/AdjustedTimeMark.class","size":2291,"crc":-1593139063},{"key":"kotlin/time/Clock$Companion.class","name":"kotlin/time/Clock$Companion.class","size":653,"crc":-1245924419},{"key":"kotlin/time/Clock$System.class","name":"kotlin/time/Clock$System.class","size":950,"crc":-166683765},{"key":"kotlin/time/Clock.class","name":"kotlin/time/Clock.class","size":861,"crc":859469174},{"key":"kotlin/time/ClocksKt$asClock$1.class","name":"kotlin/time/ClocksKt$asClock$1.class","size":1326,"crc":-731141283},{"key":"kotlin/time/ClocksKt.class","name":"kotlin/time/ClocksKt.class","size":1223,"crc":-1501264462},{"key":"kotlin/time/ComparableTimeMark$DefaultImpls.class","name":"kotlin/time/ComparableTimeMark$DefaultImpls.class","size":1764,"crc":-959777030},{"key":"kotlin/time/ComparableTimeMark.class","name":"kotlin/time/ComparableTimeMark.class","size":1564,"crc":-2140646205},{"key":"kotlin/time/Duration$Companion.class","name":"kotlin/time/Duration$Companion.class","size":8398,"crc":-121914574},{"key":"kotlin/time/Duration.class","name":"kotlin/time/Duration.class","size":21732,"crc":-1533272164},{"key":"kotlin/time/DurationJvmKt.class","name":"kotlin/time/DurationJvmKt.class","size":2767,"crc":983079051},{"key":"kotlin/time/DurationKt.class","name":"kotlin/time/DurationKt.class","size":13143,"crc":541275758},{"key":"kotlin/time/DurationUnit.class","name":"kotlin/time/DurationUnit.class","size":2603,"crc":1269299770},{"key":"kotlin/time/DurationUnitKt.class","name":"kotlin/time/DurationUnitKt.class","size":456,"crc":-519043702},{"key":"kotlin/time/DurationUnitKt__DurationUnitJvmKt$WhenMappings.class","name":"kotlin/time/DurationUnitKt__DurationUnitJvmKt$WhenMappings.class","size":1034,"crc":-234923662},{"key":"kotlin/time/DurationUnitKt__DurationUnitJvmKt.class","name":"kotlin/time/DurationUnitKt__DurationUnitJvmKt.class","size":3046,"crc":612567936},{"key":"kotlin/time/DurationUnitKt__DurationUnitKt$WhenMappings.class","name":"kotlin/time/DurationUnitKt__DurationUnitKt$WhenMappings.class","size":1010,"crc":744538924},{"key":"kotlin/time/DurationUnitKt__DurationUnitKt.class","name":"kotlin/time/DurationUnitKt__DurationUnitKt.class","size":3217,"crc":-928447330},{"key":"kotlin/time/ExperimentalTime.class","name":"kotlin/time/ExperimentalTime.class","size":1399,"crc":-1796049746},{"key":"kotlin/time/Instant$Companion.class","name":"kotlin/time/Instant$Companion.class","size":5002,"crc":1564226533},{"key":"kotlin/time/Instant.class","name":"kotlin/time/Instant.class","size":7743,"crc":-1719667584},{"key":"kotlin/time/InstantFormatException.class","name":"kotlin/time/InstantFormatException.class","size":910,"crc":-205005124},{"key":"kotlin/time/InstantJvmKt.class","name":"kotlin/time/InstantJvmKt.class","size":1637,"crc":-1137409511},{"key":"kotlin/time/InstantKt.class","name":"kotlin/time/InstantKt.class","size":17186,"crc":-727805672},{"key":"kotlin/time/InstantParseResult$Failure.class","name":"kotlin/time/InstantParseResult$Failure.class","size":2143,"crc":247749230},{"key":"kotlin/time/InstantParseResult$Success.class","name":"kotlin/time/InstantParseResult$Success.class","size":2238,"crc":1057127819},{"key":"kotlin/time/InstantParseResult.class","name":"kotlin/time/InstantParseResult.class","size":928,"crc":1552071098},{"key":"kotlin/time/InstantSerialized$Companion.class","name":"kotlin/time/InstantSerialized$Companion.class","size":848,"crc":815563929},{"key":"kotlin/time/InstantSerialized.class","name":"kotlin/time/InstantSerialized.class","size":2806,"crc":-1406615542},{"key":"kotlin/time/LongSaturatedMathKt.class","name":"kotlin/time/LongSaturatedMathKt.class","size":4914,"crc":679038815},{"key":"kotlin/time/MeasureTimeKt.class","name":"kotlin/time/MeasureTimeKt.class","size":4834,"crc":1059466846},{"key":"kotlin/time/MonoTimeSourceKt.class","name":"kotlin/time/MonoTimeSourceKt.class","size":438,"crc":736603013},{"key":"kotlin/time/MonotonicTimeSource.class","name":"kotlin/time/MonotonicTimeSource.class","size":2793,"crc":-1416410517},{"key":"kotlin/time/TestTimeSource.class","name":"kotlin/time/TestTimeSource.class","size":3443,"crc":-1040681226},{"key":"kotlin/time/TimeMark$DefaultImpls.class","name":"kotlin/time/TimeMark$DefaultImpls.class","size":1361,"crc":522473105},{"key":"kotlin/time/TimeMark.class","name":"kotlin/time/TimeMark.class","size":1033,"crc":-251955719},{"key":"kotlin/time/TimeSource$Companion.class","name":"kotlin/time/TimeSource$Companion.class","size":673,"crc":-904073714},{"key":"kotlin/time/TimeSource$Monotonic$ValueTimeMark.class","name":"kotlin/time/TimeSource$Monotonic$ValueTimeMark.class","size":6132,"crc":-1987781030},{"key":"kotlin/time/TimeSource$Monotonic.class","name":"kotlin/time/TimeSource$Monotonic.class","size":1653,"crc":1880019778},{"key":"kotlin/time/TimeSource$WithComparableMarks.class","name":"kotlin/time/TimeSource$WithComparableMarks.class","size":819,"crc":375050110},{"key":"kotlin/time/TimeSource.class","name":"kotlin/time/TimeSource.class","size":1034,"crc":684627597},{"key":"kotlin/time/TimedValue.class","name":"kotlin/time/TimedValue.class","size":3298,"crc":-1362441352},{"key":"kotlin/time/UnboundLocalDateTime$Companion.class","name":"kotlin/time/UnboundLocalDateTime$Companion.class","size":2619,"crc":-1746426210},{"key":"kotlin/time/UnboundLocalDateTime.class","name":"kotlin/time/UnboundLocalDateTime.class","size":4363,"crc":-160058757},{"key":"kotlin/uuid/ExperimentalUuidApi.class","name":"kotlin/uuid/ExperimentalUuidApi.class","size":1408,"crc":-1194385869},{"key":"kotlin/uuid/SecureRandomHolder.class","name":"kotlin/uuid/SecureRandomHolder.class","size":964,"crc":-1543261450},{"key":"kotlin/uuid/Uuid$Companion.class","name":"kotlin/uuid/Uuid$Companion.class","size":5331,"crc":-174885982},{"key":"kotlin/uuid/Uuid.class","name":"kotlin/uuid/Uuid.class","size":6185,"crc":-2043597966},{"key":"kotlin/uuid/UuidKt.class","name":"kotlin/uuid/UuidKt.class","size":408,"crc":-484276990},{"key":"kotlin/uuid/UuidKt__UuidJVMKt.class","name":"kotlin/uuid/UuidKt__UuidJVMKt.class","size":7787,"crc":-701344385},{"key":"kotlin/uuid/UuidKt__UuidKt.class","name":"kotlin/uuid/UuidKt__UuidKt.class","size":5801,"crc":697387313},{"key":"kotlin/uuid/UuidSerialized$Companion.class","name":"kotlin/uuid/UuidSerialized$Companion.class","size":836,"crc":1310149355},{"key":"kotlin/uuid/UuidSerialized.class","name":"kotlin/uuid/UuidSerialized.class","size":2725,"crc":-1389469090},{"key":"kotlin/collections/ArraysUtilJVM.class","name":"kotlin/collections/ArraysUtilJVM.class","size":596,"crc":570328725},{"key":"kotlin/jvm/internal/AdaptedFunctionReference.class","name":"kotlin/jvm/internal/AdaptedFunctionReference.class","size":2746,"crc":1457329729},{"key":"kotlin/jvm/internal/CallableReference$NoReceiver.class","name":"kotlin/jvm/internal/CallableReference$NoReceiver.class","size":898,"crc":1125258272},{"key":"kotlin/jvm/internal/CallableReference.class","name":"kotlin/jvm/internal/CallableReference.class","size":4181,"crc":500298900},{"key":"kotlin/jvm/internal/DefaultConstructorMarker.class","name":"kotlin/jvm/internal/DefaultConstructorMarker.class","size":337,"crc":47587920},{"key":"kotlin/jvm/internal/FunInterfaceConstructorReference.class","name":"kotlin/jvm/internal/FunInterfaceConstructorReference.class","size":1591,"crc":687584605},{"key":"kotlin/jvm/internal/FunctionAdapter.class","name":"kotlin/jvm/internal/FunctionAdapter.class","size":314,"crc":-72599158},{"key":"kotlin/jvm/internal/FunctionImpl.class","name":"kotlin/jvm/internal/FunctionImpl.class","size":13161,"crc":-558677605},{"key":"kotlin/jvm/internal/FunctionReference.class","name":"kotlin/jvm/internal/FunctionReference.class","size":3689,"crc":1951168182},{"key":"kotlin/jvm/internal/FunctionReferenceImpl.class","name":"kotlin/jvm/internal/FunctionReferenceImpl.class","size":1514,"crc":11015438},{"key":"kotlin/jvm/internal/InlineMarker.class","name":"kotlin/jvm/internal/InlineMarker.class","size":761,"crc":-1234111204},{"key":"kotlin/jvm/internal/Intrinsics$Kotlin.class","name":"kotlin/jvm/internal/Intrinsics$Kotlin.class","size":475,"crc":168489227},{"key":"kotlin/jvm/internal/Intrinsics.class","name":"kotlin/jvm/internal/Intrinsics.class","size":9086,"crc":1370135565},{"key":"kotlin/jvm/internal/MagicApiIntrinsics.class","name":"kotlin/jvm/internal/MagicApiIntrinsics.class","size":2575,"crc":-1698388096},{"key":"kotlin/jvm/internal/MutablePropertyReference.class","name":"kotlin/jvm/internal/MutablePropertyReference.class","size":942,"crc":-873243443},{"key":"kotlin/jvm/internal/MutablePropertyReference0.class","name":"kotlin/jvm/internal/MutablePropertyReference0.class","size":2307,"crc":1128124820},{"key":"kotlin/jvm/internal/MutablePropertyReference0Impl.class","name":"kotlin/jvm/internal/MutablePropertyReference0Impl.class","size":2126,"crc":-184418059},{"key":"kotlin/jvm/internal/MutablePropertyReference1.class","name":"kotlin/jvm/internal/MutablePropertyReference1.class","size":2347,"crc":377178670},{"key":"kotlin/jvm/internal/MutablePropertyReference1Impl.class","name":"kotlin/jvm/internal/MutablePropertyReference1Impl.class","size":2190,"crc":2046035585},{"key":"kotlin/jvm/internal/MutablePropertyReference2.class","name":"kotlin/jvm/internal/MutablePropertyReference2.class","size":2348,"crc":-571971330},{"key":"kotlin/jvm/internal/MutablePropertyReference2Impl.class","name":"kotlin/jvm/internal/MutablePropertyReference2Impl.class","size":2011,"crc":-677246454},{"key":"kotlin/jvm/internal/PropertyReference.class","name":"kotlin/jvm/internal/PropertyReference.class","size":3270,"crc":-917982476},{"key":"kotlin/jvm/internal/PropertyReference0.class","name":"kotlin/jvm/internal/PropertyReference0.class","size":1821,"crc":-1475025845},{"key":"kotlin/jvm/internal/PropertyReference0Impl.class","name":"kotlin/jvm/internal/PropertyReference0Impl.class","size":1798,"crc":1194211845},{"key":"kotlin/jvm/internal/PropertyReference1.class","name":"kotlin/jvm/internal/PropertyReference1.class","size":1861,"crc":-1829718760},{"key":"kotlin/jvm/internal/PropertyReference1Impl.class","name":"kotlin/jvm/internal/PropertyReference1Impl.class","size":1830,"crc":-1299899906},{"key":"kotlin/jvm/internal/PropertyReference2.class","name":"kotlin/jvm/internal/PropertyReference2.class","size":1862,"crc":-885315845},{"key":"kotlin/jvm/internal/PropertyReference2Impl.class","name":"kotlin/jvm/internal/PropertyReference2Impl.class","size":1619,"crc":617056996},{"key":"kotlin/jvm/internal/Ref$BooleanRef.class","name":"kotlin/jvm/internal/Ref$BooleanRef.class","size":593,"crc":904687793},{"key":"kotlin/jvm/internal/Ref$ByteRef.class","name":"kotlin/jvm/internal/Ref$ByteRef.class","size":584,"crc":1970120690},{"key":"kotlin/jvm/internal/Ref$CharRef.class","name":"kotlin/jvm/internal/Ref$CharRef.class","size":584,"crc":-2104091034},{"key":"kotlin/jvm/internal/Ref$DoubleRef.class","name":"kotlin/jvm/internal/Ref$DoubleRef.class","size":590,"crc":1433144171},{"key":"kotlin/jvm/internal/Ref$FloatRef.class","name":"kotlin/jvm/internal/Ref$FloatRef.class","size":587,"crc":-224759536},{"key":"kotlin/jvm/internal/Ref$IntRef.class","name":"kotlin/jvm/internal/Ref$IntRef.class","size":581,"crc":-414275565},{"key":"kotlin/jvm/internal/Ref$LongRef.class","name":"kotlin/jvm/internal/Ref$LongRef.class","size":584,"crc":526024706},{"key":"kotlin/jvm/internal/Ref$ObjectRef.class","name":"kotlin/jvm/internal/Ref$ObjectRef.class","size":827,"crc":168012497},{"key":"kotlin/jvm/internal/Ref$ShortRef.class","name":"kotlin/jvm/internal/Ref$ShortRef.class","size":587,"crc":-780272668},{"key":"kotlin/jvm/internal/Ref.class","name":"kotlin/jvm/internal/Ref.class","size":808,"crc":745872339},{"key":"kotlin/jvm/internal/Reflection.class","name":"kotlin/jvm/internal/Reflection.class","size":7937,"crc":901832041},{"key":"kotlin/jvm/internal/ReflectionFactory.class","name":"kotlin/jvm/internal/ReflectionFactory.class","size":6141,"crc":-1592711195},{"key":"kotlin/jvm/internal/RepeatableContainer.class","name":"kotlin/jvm/internal/RepeatableContainer.class","size":506,"crc":527536588},{"key":"kotlin/jvm/internal/SpreadBuilder.class","name":"kotlin/jvm/internal/SpreadBuilder.class","size":2089,"crc":238365591},{"key":"kotlin/jvm/internal/TypeIntrinsics.class","name":"kotlin/jvm/internal/TypeIntrinsics.class","size":9334,"crc":-1140538051},{"key":"META-INF/kotlin-stdlib-jdk7.kotlin_module","name":"META-INF/kotlin-stdlib-jdk7.kotlin_module","size":156,"crc":880661633},{"key":"kotlin/internal/jdk7/JDK7PlatformImplementations$ReflectSdkVersion.class","name":"kotlin/internal/jdk7/JDK7PlatformImplementations$ReflectSdkVersion.class","size":2341,"crc":-2105433895},{"key":"kotlin/internal/jdk7/JDK7PlatformImplementations.class","name":"kotlin/internal/jdk7/JDK7PlatformImplementations.class","size":2261,"crc":-497590488},{"key":"kotlin/io/path/CopyActionContext.class","name":"kotlin/io/path/CopyActionContext.class","size":879,"crc":-757334372},{"key":"kotlin/io/path/CopyActionResult.class","name":"kotlin/io/path/CopyActionResult.class","size":1950,"crc":704167179},{"key":"kotlin/io/path/DefaultCopyActionContext.class","name":"kotlin/io/path/DefaultCopyActionContext.class","size":2370,"crc":1327237361},{"key":"kotlin/io/path/DirectoryEntriesReader.class","name":"kotlin/io/path/DirectoryEntriesReader.class","size":4167,"crc":-12766321},{"key":"kotlin/io/path/ExceptionsCollector.class","name":"kotlin/io/path/ExceptionsCollector.class","size":3718,"crc":190126727},{"key":"kotlin/io/path/ExperimentalPathApi.class","name":"kotlin/io/path/ExperimentalPathApi.class","size":1419,"crc":1026282962},{"key":"kotlin/io/path/FileVisitorBuilder.class","name":"kotlin/io/path/FileVisitorBuilder.class","size":1792,"crc":400040566},{"key":"kotlin/io/path/FileVisitorBuilderImpl.class","name":"kotlin/io/path/FileVisitorBuilderImpl.class","size":4176,"crc":-1814083064},{"key":"kotlin/io/path/FileVisitorImpl.class","name":"kotlin/io/path/FileVisitorImpl.class","size":4719,"crc":-1017041734},{"key":"kotlin/io/path/IllegalFileNameException.class","name":"kotlin/io/path/IllegalFileNameException.class","size":1495,"crc":496587067},{"key":"kotlin/io/path/LinkFollowing.class","name":"kotlin/io/path/LinkFollowing.class","size":2018,"crc":-1474594995},{"key":"kotlin/io/path/OnErrorResult.class","name":"kotlin/io/path/OnErrorResult.class","size":1864,"crc":-874369701},{"key":"kotlin/io/path/PathNode.class","name":"kotlin/io/path/PathNode.class","size":2116,"crc":-1274527617},{"key":"kotlin/io/path/PathRelativizer.class","name":"kotlin/io/path/PathRelativizer.class","size":2866,"crc":1506652485},{"key":"kotlin/io/path/PathTreeWalk$bfsIterator$1.class","name":"kotlin/io/path/PathTreeWalk$bfsIterator$1.class","size":7472,"crc":-178981388},{"key":"kotlin/io/path/PathTreeWalk$dfsIterator$1.class","name":"kotlin/io/path/PathTreeWalk$dfsIterator$1.class","size":9638,"crc":2139274482},{"key":"kotlin/io/path/PathTreeWalk.class","name":"kotlin/io/path/PathTreeWalk.class","size":6338,"crc":259943469},{"key":"kotlin/io/path/PathTreeWalkKt.class","name":"kotlin/io/path/PathTreeWalkKt.class","size":2257,"crc":-1104735871},{"key":"kotlin/io/path/PathWalkOption.class","name":"kotlin/io/path/PathWalkOption.class","size":1998,"crc":1690708386},{"key":"kotlin/io/path/PathsKt.class","name":"kotlin/io/path/PathsKt.class","size":489,"crc":2040883135},{"key":"kotlin/io/path/PathsKt__PathReadWriteKt.class","name":"kotlin/io/path/PathsKt__PathReadWriteKt.class","size":19650,"crc":-1187607061},{"key":"kotlin/io/path/PathsKt__PathRecursiveFunctionsKt$WhenMappings.class","name":"kotlin/io/path/PathsKt__PathRecursiveFunctionsKt$WhenMappings.class","size":1106,"crc":-549721949},{"key":"kotlin/io/path/PathsKt__PathRecursiveFunctionsKt$copyToRecursively$1.class","name":"kotlin/io/path/PathsKt__PathRecursiveFunctionsKt$copyToRecursively$1.class","size":1492,"crc":-1562248579},{"key":"kotlin/io/path/PathsKt__PathRecursiveFunctionsKt$copyToRecursively$3.class","name":"kotlin/io/path/PathsKt__PathRecursiveFunctionsKt$copyToRecursively$3.class","size":1523,"crc":-582904199},{"key":"kotlin/io/path/PathsKt__PathRecursiveFunctionsKt$copyToRecursively$5$2.class","name":"kotlin/io/path/PathsKt__PathRecursiveFunctionsKt$copyToRecursively$5$2.class","size":3674,"crc":256235729},{"key":"kotlin/io/path/PathsKt__PathRecursiveFunctionsKt$copyToRecursively$5$3.class","name":"kotlin/io/path/PathsKt__PathRecursiveFunctionsKt$copyToRecursively$5$3.class","size":2857,"crc":-740068133},{"key":"kotlin/io/path/PathsKt__PathRecursiveFunctionsKt.class","name":"kotlin/io/path/PathsKt__PathRecursiveFunctionsKt.class","size":28415,"crc":-1689683687},{"key":"kotlin/io/path/PathsKt__PathUtilsKt.class","name":"kotlin/io/path/PathsKt__PathUtilsKt.class","size":32588,"crc":726889840},{"key":"META-INF/kotlin-stdlib-jdk8.kotlin_module","name":"META-INF/kotlin-stdlib-jdk8.kotlin_module","size":323,"crc":2003306411},{"key":"kotlin/collections/jdk8/CollectionsJDK8Kt.class","name":"kotlin/collections/jdk8/CollectionsJDK8Kt.class","size":1921,"crc":-1317413492},{"key":"kotlin/internal/jdk8/JDK8PlatformImplementations$ReflectSdkVersion.class","name":"kotlin/internal/jdk8/JDK8PlatformImplementations$ReflectSdkVersion.class","size":2341,"crc":1542425448},{"key":"kotlin/internal/jdk8/JDK8PlatformImplementations$getSystemClock$1.class","name":"kotlin/internal/jdk8/JDK8PlatformImplementations$getSystemClock$1.class","size":1247,"crc":-605045436},{"key":"kotlin/internal/jdk8/JDK8PlatformImplementations$getSystemClock$2.class","name":"kotlin/internal/jdk8/JDK8PlatformImplementations$getSystemClock$2.class","size":1178,"crc":907281611},{"key":"kotlin/internal/jdk8/JDK8PlatformImplementations.class","name":"kotlin/internal/jdk8/JDK8PlatformImplementations.class","size":3232,"crc":985976419},{"key":"kotlin/jvm/jdk8/JvmRepeatableKt.class","name":"kotlin/jvm/jdk8/JvmRepeatableKt.class","size":600,"crc":-1675686258},{"key":"kotlin/jvm/optionals/OptionalsKt.class","name":"kotlin/jvm/optionals/OptionalsKt.class","size":4490,"crc":375701210},{"key":"kotlin/random/jdk8/PlatformThreadLocalRandom.class","name":"kotlin/random/jdk8/PlatformThreadLocalRandom.class","size":1727,"crc":172325910},{"key":"kotlin/streams/jdk8/StreamsKt$asSequence$$inlined$Sequence$1.class","name":"kotlin/streams/jdk8/StreamsKt$asSequence$$inlined$Sequence$1.class","size":2071,"crc":-356538716},{"key":"kotlin/streams/jdk8/StreamsKt$asSequence$$inlined$Sequence$2.class","name":"kotlin/streams/jdk8/StreamsKt$asSequence$$inlined$Sequence$2.class","size":2182,"crc":-1339575203},{"key":"kotlin/streams/jdk8/StreamsKt$asSequence$$inlined$Sequence$3.class","name":"kotlin/streams/jdk8/StreamsKt$asSequence$$inlined$Sequence$3.class","size":2181,"crc":-39728859},{"key":"kotlin/streams/jdk8/StreamsKt$asSequence$$inlined$Sequence$4.class","name":"kotlin/streams/jdk8/StreamsKt$asSequence$$inlined$Sequence$4.class","size":2195,"crc":139093511},{"key":"kotlin/streams/jdk8/StreamsKt.class","name":"kotlin/streams/jdk8/StreamsKt.class","size":5742,"crc":-1048739148},{"key":"kotlin/time/jdk8/DurationConversionsJDK8Kt.class","name":"kotlin/time/jdk8/DurationConversionsJDK8Kt.class","size":2607,"crc":1797854078},{"key":"kotlin/time/jdk8/InstantConversionsJDK8Kt.class","name":"kotlin/time/jdk8/InstantConversionsJDK8Kt.class","size":1726,"crc":809407760},{"key":"META-INF/versions/9/module-info.class","name":"META-INF/versions/9/module-info.class","size":1396,"crc":1364684967}]
\ No newline at end of file
diff --git a/Pink/openCVLibrary300/build/intermediates/incremental/debugAndroidTest/mergeDebugAndroidTestResources/compile-file-map.properties b/Pink/openCVLibrary300/build/intermediates/incremental/debugAndroidTest/mergeDebugAndroidTestResources/compile-file-map.properties
deleted file mode 100644
index f24be77..0000000
--- a/Pink/openCVLibrary300/build/intermediates/incremental/debugAndroidTest/mergeDebugAndroidTestResources/compile-file-map.properties
+++ /dev/null
@@ -1 +0,0 @@
-#Mon Jul 13 18:22:00 CST 2026
diff --git a/Pink/openCVLibrary300/build/intermediates/incremental/debugAndroidTest/mergeDebugAndroidTestResources/merger.xml b/Pink/openCVLibrary300/build/intermediates/incremental/debugAndroidTest/mergeDebugAndroidTestResources/merger.xml
deleted file mode 100644
index 6c7f593..0000000
--- a/Pink/openCVLibrary300/build/intermediates/incremental/debugAndroidTest/mergeDebugAndroidTestResources/merger.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-
-
\ No newline at end of file
diff --git a/Pink/openCVLibrary300/build/intermediates/incremental/debugAndroidTest/packageDebugAndroidTestResources/compile-file-map.properties b/Pink/openCVLibrary300/build/intermediates/incremental/debugAndroidTest/packageDebugAndroidTestResources/compile-file-map.properties
deleted file mode 100644
index 1dfb89b..0000000
--- a/Pink/openCVLibrary300/build/intermediates/incremental/debugAndroidTest/packageDebugAndroidTestResources/compile-file-map.properties
+++ /dev/null
@@ -1 +0,0 @@
-#Mon Jul 13 18:18:07 CST 2026
diff --git a/Pink/openCVLibrary300/build/intermediates/incremental/debugAndroidTest/packageDebugAndroidTestResources/merger.xml b/Pink/openCVLibrary300/build/intermediates/incremental/debugAndroidTest/packageDebugAndroidTestResources/merger.xml
deleted file mode 100644
index 6bd45d6..0000000
--- a/Pink/openCVLibrary300/build/intermediates/incremental/debugAndroidTest/packageDebugAndroidTestResources/merger.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-
-
\ No newline at end of file
diff --git a/Pink/openCVLibrary300/build/intermediates/incremental/mergeDebugAndroidTestAssets/merger.xml b/Pink/openCVLibrary300/build/intermediates/incremental/mergeDebugAndroidTestAssets/merger.xml
deleted file mode 100644
index 37ca897..0000000
--- a/Pink/openCVLibrary300/build/intermediates/incremental/mergeDebugAndroidTestAssets/merger.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-
-
\ No newline at end of file
diff --git a/Pink/openCVLibrary300/build/intermediates/incremental/mergeDebugAndroidTestJniLibFolders/merger.xml b/Pink/openCVLibrary300/build/intermediates/incremental/mergeDebugAndroidTestJniLibFolders/merger.xml
deleted file mode 100644
index 064e8bc..0000000
--- a/Pink/openCVLibrary300/build/intermediates/incremental/mergeDebugAndroidTestJniLibFolders/merger.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-
-
\ No newline at end of file
diff --git a/Pink/openCVLibrary300/build/intermediates/incremental/mergeDebugAssets/merger.xml b/Pink/openCVLibrary300/build/intermediates/incremental/mergeDebugAssets/merger.xml
deleted file mode 100644
index d9e9b80..0000000
--- a/Pink/openCVLibrary300/build/intermediates/incremental/mergeDebugAssets/merger.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-
-
\ No newline at end of file
diff --git a/Pink/openCVLibrary300/build/intermediates/incremental/mergeDebugJniLibFolders/merger.xml b/Pink/openCVLibrary300/build/intermediates/incremental/mergeDebugJniLibFolders/merger.xml
deleted file mode 100644
index a0c6a94..0000000
--- a/Pink/openCVLibrary300/build/intermediates/incremental/mergeDebugJniLibFolders/merger.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-
-
\ No newline at end of file
diff --git a/Pink/openCVLibrary300/build/intermediates/incremental/packageDebugAndroidTest/tmp/debugAndroidTest/dex-renamer-state.txt b/Pink/openCVLibrary300/build/intermediates/incremental/packageDebugAndroidTest/tmp/debugAndroidTest/dex-renamer-state.txt
deleted file mode 100644
index 4bffea8..0000000
--- a/Pink/openCVLibrary300/build/intermediates/incremental/packageDebugAndroidTest/tmp/debugAndroidTest/dex-renamer-state.txt
+++ /dev/null
@@ -1,34 +0,0 @@
-#Mon Jul 13 18:22:41 CST 2026
-base.0=D\:\\gitPlanet\\yola\\Pink\\openCVLibrary300\\build\\intermediates\\dex\\debugAndroidTest\\mergeExtDexDebugAndroidTest\\classes.dex
-base.1=D\:\\gitPlanet\\yola\\Pink\\openCVLibrary300\\build\\intermediates\\dex\\debugAndroidTest\\mergeLibDexDebugAndroidTest\\10\\classes.dex
-base.10=D\:\\gitPlanet\\yola\\Pink\\openCVLibrary300\\build\\intermediates\\global_synthetics_dex\\debugAndroidTest\\generateDebugAndroidTestGlobalSynthetics\\classes.dex
-base.2=D\:\\gitPlanet\\yola\\Pink\\openCVLibrary300\\build\\intermediates\\dex\\debugAndroidTest\\mergeLibDexDebugAndroidTest\\12\\classes.dex
-base.3=D\:\\gitPlanet\\yola\\Pink\\openCVLibrary300\\build\\intermediates\\dex\\debugAndroidTest\\mergeLibDexDebugAndroidTest\\13\\classes.dex
-base.4=D\:\\gitPlanet\\yola\\Pink\\openCVLibrary300\\build\\intermediates\\dex\\debugAndroidTest\\mergeLibDexDebugAndroidTest\\1\\classes.dex
-base.5=D\:\\gitPlanet\\yola\\Pink\\openCVLibrary300\\build\\intermediates\\dex\\debugAndroidTest\\mergeLibDexDebugAndroidTest\\2\\classes.dex
-base.6=D\:\\gitPlanet\\yola\\Pink\\openCVLibrary300\\build\\intermediates\\dex\\debugAndroidTest\\mergeLibDexDebugAndroidTest\\6\\classes.dex
-base.7=D\:\\gitPlanet\\yola\\Pink\\openCVLibrary300\\build\\intermediates\\dex\\debugAndroidTest\\mergeLibDexDebugAndroidTest\\8\\classes.dex
-base.8=D\:\\gitPlanet\\yola\\Pink\\openCVLibrary300\\build\\intermediates\\dex\\debugAndroidTest\\mergeLibDexDebugAndroidTest\\9\\classes.dex
-base.9=D\:\\gitPlanet\\yola\\Pink\\openCVLibrary300\\build\\intermediates\\dex\\debugAndroidTest\\mergeProjectDexDebugAndroidTest\\0\\classes.dex
-path.0=classes.dex
-path.1=10/classes.dex
-path.10=classes.dex
-path.2=12/classes.dex
-path.3=13/classes.dex
-path.4=1/classes.dex
-path.5=2/classes.dex
-path.6=6/classes.dex
-path.7=8/classes.dex
-path.8=9/classes.dex
-path.9=0/classes.dex
-renamed.0=classes.dex
-renamed.1=classes2.dex
-renamed.10=classes11.dex
-renamed.2=classes3.dex
-renamed.3=classes4.dex
-renamed.4=classes5.dex
-renamed.5=classes6.dex
-renamed.6=classes7.dex
-renamed.7=classes8.dex
-renamed.8=classes9.dex
-renamed.9=classes10.dex
diff --git a/Pink/openCVLibrary300/build/intermediates/incremental/packageDebugAndroidTest/tmp/debugAndroidTest/zip-cache/androidResources b/Pink/openCVLibrary300/build/intermediates/incremental/packageDebugAndroidTest/tmp/debugAndroidTest/zip-cache/androidResources
deleted file mode 100644
index b31af31..0000000
--- a/Pink/openCVLibrary300/build/intermediates/incremental/packageDebugAndroidTest/tmp/debugAndroidTest/zip-cache/androidResources
+++ /dev/null
@@ -1 +0,0 @@
-[{"key":"AndroidManifest.xml","name":"AndroidManifest.xml","size":1600,"crc":-993897491},{"key":"resources.arsc","name":"resources.arsc","size":40,"crc":322326539}]
\ No newline at end of file
diff --git a/Pink/openCVLibrary300/build/intermediates/incremental/packageDebugAndroidTest/tmp/debugAndroidTest/zip-cache/javaResources0 b/Pink/openCVLibrary300/build/intermediates/incremental/packageDebugAndroidTest/tmp/debugAndroidTest/zip-cache/javaResources0
deleted file mode 100644
index 93abdea..0000000
--- a/Pink/openCVLibrary300/build/intermediates/incremental/packageDebugAndroidTest/tmp/debugAndroidTest/zip-cache/javaResources0
+++ /dev/null
@@ -1 +0,0 @@
-[{"key":"kotlin/annotation/annotation.kotlin_builtins","name":"kotlin/annotation/annotation.kotlin_builtins","size":1006,"crc":96078319},{"key":"kotlin/collections/collections.kotlin_builtins","name":"kotlin/collections/collections.kotlin_builtins","size":8308,"crc":327658458},{"key":"kotlin/concurrent/atomics/atomics.kotlin_builtins","name":"kotlin/concurrent/atomics/atomics.kotlin_builtins","size":2674,"crc":1252866643},{"key":"kotlin/coroutines/coroutines.kotlin_builtins","name":"kotlin/coroutines/coroutines.kotlin_builtins","size":137,"crc":1360136731},{"key":"kotlin/internal/internal.kotlin_builtins","name":"kotlin/internal/internal.kotlin_builtins","size":590,"crc":-739093672},{"key":"kotlin/kotlin.kotlin_builtins","name":"kotlin/kotlin.kotlin_builtins","size":29399,"crc":-2111613243},{"key":"kotlin/ranges/ranges.kotlin_builtins","name":"kotlin/ranges/ranges.kotlin_builtins","size":4184,"crc":1405855901},{"key":"kotlin/reflect/reflect.kotlin_builtins","name":"kotlin/reflect/reflect.kotlin_builtins","size":4827,"crc":-575400209}]
\ No newline at end of file
diff --git a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/android/OpenCVLoader.class b/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/android/OpenCVLoader.class
deleted file mode 100644
index 144bace..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/android/OpenCVLoader.class and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/android/StaticHelper.class b/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/android/StaticHelper.class
deleted file mode 100644
index fa8c10b..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/android/StaticHelper.class and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/android/Utils.class b/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/android/Utils.class
deleted file mode 100644
index 8483f74..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/android/Utils.class and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/calib3d/Calib3d.class b/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/calib3d/Calib3d.class
deleted file mode 100644
index 5bd734e..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/calib3d/Calib3d.class and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/calib3d/StereoBM.class b/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/calib3d/StereoBM.class
deleted file mode 100644
index bb9e85e..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/calib3d/StereoBM.class and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/calib3d/StereoMatcher.class b/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/calib3d/StereoMatcher.class
deleted file mode 100644
index 8846f45..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/calib3d/StereoMatcher.class and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/calib3d/StereoSGBM.class b/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/calib3d/StereoSGBM.class
deleted file mode 100644
index ece84cc..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/calib3d/StereoSGBM.class and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/core/Algorithm.class b/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/core/Algorithm.class
deleted file mode 100644
index 4ed91f0..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/core/Algorithm.class and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/core/Core$MinMaxLocResult.class b/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/core/Core$MinMaxLocResult.class
deleted file mode 100644
index b8b9015..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/core/Core$MinMaxLocResult.class and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/core/Core.class b/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/core/Core.class
deleted file mode 100644
index f5f4171..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/core/Core.class and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/core/CvException.class b/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/core/CvException.class
deleted file mode 100644
index 00a0bbe..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/core/CvException.class and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/core/CvType.class b/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/core/CvType.class
deleted file mode 100644
index 9c2956f..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/core/CvType.class and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/core/DMatch.class b/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/core/DMatch.class
deleted file mode 100644
index 992afb1..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/core/DMatch.class and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/core/KeyPoint.class b/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/core/KeyPoint.class
deleted file mode 100644
index 58256af..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/core/KeyPoint.class and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/core/Mat.class b/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/core/Mat.class
deleted file mode 100644
index c25a929..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/core/Mat.class and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/core/MatOfByte.class b/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/core/MatOfByte.class
deleted file mode 100644
index 0a72d5b..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/core/MatOfByte.class and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/core/MatOfDMatch.class b/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/core/MatOfDMatch.class
deleted file mode 100644
index 6149305..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/core/MatOfDMatch.class and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/core/MatOfDouble.class b/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/core/MatOfDouble.class
deleted file mode 100644
index 4a6bae7..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/core/MatOfDouble.class and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/core/MatOfFloat.class b/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/core/MatOfFloat.class
deleted file mode 100644
index 855d58d..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/core/MatOfFloat.class and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/core/MatOfFloat4.class b/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/core/MatOfFloat4.class
deleted file mode 100644
index b4cdc86..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/core/MatOfFloat4.class and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/core/MatOfFloat6.class b/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/core/MatOfFloat6.class
deleted file mode 100644
index 20041f3..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/core/MatOfFloat6.class and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/core/MatOfInt.class b/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/core/MatOfInt.class
deleted file mode 100644
index 6a3fea6..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/core/MatOfInt.class and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/core/MatOfInt4.class b/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/core/MatOfInt4.class
deleted file mode 100644
index 063f5cf..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/core/MatOfInt4.class and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/core/MatOfKeyPoint.class b/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/core/MatOfKeyPoint.class
deleted file mode 100644
index 968fe31..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/core/MatOfKeyPoint.class and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/core/MatOfPoint.class b/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/core/MatOfPoint.class
deleted file mode 100644
index 6c2c1c4..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/core/MatOfPoint.class and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/core/MatOfPoint2f.class b/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/core/MatOfPoint2f.class
deleted file mode 100644
index 2fc6703..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/core/MatOfPoint2f.class and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/core/MatOfPoint3.class b/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/core/MatOfPoint3.class
deleted file mode 100644
index b614133..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/core/MatOfPoint3.class and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/core/MatOfPoint3f.class b/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/core/MatOfPoint3f.class
deleted file mode 100644
index e749df2..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/core/MatOfPoint3f.class and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/core/MatOfRect.class b/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/core/MatOfRect.class
deleted file mode 100644
index 4a95a12..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/core/MatOfRect.class and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/core/Point.class b/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/core/Point.class
deleted file mode 100644
index 6e3ec57..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/core/Point.class and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/core/Point3.class b/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/core/Point3.class
deleted file mode 100644
index 81359c7..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/core/Point3.class and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/core/Range.class b/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/core/Range.class
deleted file mode 100644
index 43d562b..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/core/Range.class and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/core/Rect.class b/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/core/Rect.class
deleted file mode 100644
index 97a35aa..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/core/Rect.class and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/core/RotatedRect.class b/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/core/RotatedRect.class
deleted file mode 100644
index bc84828..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/core/RotatedRect.class and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/core/Scalar.class b/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/core/Scalar.class
deleted file mode 100644
index 3ea704e..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/core/Scalar.class and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/core/Size.class b/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/core/Size.class
deleted file mode 100644
index d3ff35a..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/core/Size.class and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/core/TermCriteria.class b/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/core/TermCriteria.class
deleted file mode 100644
index b871ea2..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/core/TermCriteria.class and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/features2d/DescriptorExtractor.class b/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/features2d/DescriptorExtractor.class
deleted file mode 100644
index f4faa45..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/features2d/DescriptorExtractor.class and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/features2d/DescriptorMatcher.class b/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/features2d/DescriptorMatcher.class
deleted file mode 100644
index 692eb4e..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/features2d/DescriptorMatcher.class and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/features2d/FeatureDetector.class b/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/features2d/FeatureDetector.class
deleted file mode 100644
index c6310f6..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/features2d/FeatureDetector.class and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/features2d/Features2d.class b/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/features2d/Features2d.class
deleted file mode 100644
index f8a46ec..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/features2d/Features2d.class and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/imgcodecs/Imgcodecs.class b/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/imgcodecs/Imgcodecs.class
deleted file mode 100644
index 5cc6a99..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/imgcodecs/Imgcodecs.class and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/imgproc/CLAHE.class b/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/imgproc/CLAHE.class
deleted file mode 100644
index d6e39be..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/imgproc/CLAHE.class and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/imgproc/Imgproc.class b/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/imgproc/Imgproc.class
deleted file mode 100644
index e33f1f7..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/imgproc/Imgproc.class and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/imgproc/LineSegmentDetector.class b/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/imgproc/LineSegmentDetector.class
deleted file mode 100644
index 824db7b..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/imgproc/LineSegmentDetector.class and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/imgproc/Subdiv2D.class b/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/imgproc/Subdiv2D.class
deleted file mode 100644
index 4df02fa..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/imgproc/Subdiv2D.class and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/ml/ANN_MLP.class b/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/ml/ANN_MLP.class
deleted file mode 100644
index 281f5f5..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/ml/ANN_MLP.class and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/ml/Boost.class b/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/ml/Boost.class
deleted file mode 100644
index 3990793..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/ml/Boost.class and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/ml/DTrees.class b/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/ml/DTrees.class
deleted file mode 100644
index 5c3a784..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/ml/DTrees.class and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/ml/EM.class b/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/ml/EM.class
deleted file mode 100644
index 47ac377..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/ml/EM.class and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/ml/KNearest.class b/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/ml/KNearest.class
deleted file mode 100644
index b4bf98c..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/ml/KNearest.class and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/ml/LogisticRegression.class b/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/ml/LogisticRegression.class
deleted file mode 100644
index cfa19a5..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/ml/LogisticRegression.class and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/ml/Ml.class b/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/ml/Ml.class
deleted file mode 100644
index 49f8e80..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/ml/Ml.class and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/ml/NormalBayesClassifier.class b/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/ml/NormalBayesClassifier.class
deleted file mode 100644
index 0b17ab5..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/ml/NormalBayesClassifier.class and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/ml/RTrees.class b/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/ml/RTrees.class
deleted file mode 100644
index f799b04..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/ml/RTrees.class and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/ml/SVM.class b/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/ml/SVM.class
deleted file mode 100644
index 3c3b4e0..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/ml/SVM.class and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/ml/StatModel.class b/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/ml/StatModel.class
deleted file mode 100644
index c0b834e..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/ml/StatModel.class and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/ml/TrainData.class b/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/ml/TrainData.class
deleted file mode 100644
index baab064..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/ml/TrainData.class and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/objdetect/BaseCascadeClassifier.class b/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/objdetect/BaseCascadeClassifier.class
deleted file mode 100644
index 6d6b3b8..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/objdetect/BaseCascadeClassifier.class and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/objdetect/CascadeClassifier.class b/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/objdetect/CascadeClassifier.class
deleted file mode 100644
index c5474ca..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/objdetect/CascadeClassifier.class and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/objdetect/HOGDescriptor.class b/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/objdetect/HOGDescriptor.class
deleted file mode 100644
index db9122b..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/objdetect/HOGDescriptor.class and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/objdetect/Objdetect.class b/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/objdetect/Objdetect.class
deleted file mode 100644
index 64725ef..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/objdetect/Objdetect.class and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/photo/AlignExposures.class b/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/photo/AlignExposures.class
deleted file mode 100644
index 0e53f94..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/photo/AlignExposures.class and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/photo/AlignMTB.class b/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/photo/AlignMTB.class
deleted file mode 100644
index 30f0015..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/photo/AlignMTB.class and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/photo/CalibrateCRF.class b/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/photo/CalibrateCRF.class
deleted file mode 100644
index 2af6e9e..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/photo/CalibrateCRF.class and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/photo/CalibrateDebevec.class b/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/photo/CalibrateDebevec.class
deleted file mode 100644
index 84ff225..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/photo/CalibrateDebevec.class and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/photo/CalibrateRobertson.class b/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/photo/CalibrateRobertson.class
deleted file mode 100644
index 2a6c043..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/photo/CalibrateRobertson.class and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/photo/MergeDebevec.class b/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/photo/MergeDebevec.class
deleted file mode 100644
index 7ae0447..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/photo/MergeDebevec.class and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/photo/MergeExposures.class b/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/photo/MergeExposures.class
deleted file mode 100644
index dc29ffc..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/photo/MergeExposures.class and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/photo/MergeMertens.class b/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/photo/MergeMertens.class
deleted file mode 100644
index 9483ad7..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/photo/MergeMertens.class and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/photo/MergeRobertson.class b/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/photo/MergeRobertson.class
deleted file mode 100644
index 9611617..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/photo/MergeRobertson.class and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/photo/Photo.class b/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/photo/Photo.class
deleted file mode 100644
index 7bae1f8..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/photo/Photo.class and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/photo/Tonemap.class b/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/photo/Tonemap.class
deleted file mode 100644
index a7a1f7c..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/photo/Tonemap.class and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/photo/TonemapDrago.class b/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/photo/TonemapDrago.class
deleted file mode 100644
index 1397472..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/photo/TonemapDrago.class and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/photo/TonemapDurand.class b/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/photo/TonemapDurand.class
deleted file mode 100644
index 2f44a97..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/photo/TonemapDurand.class and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/photo/TonemapMantiuk.class b/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/photo/TonemapMantiuk.class
deleted file mode 100644
index 42e3260..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/photo/TonemapMantiuk.class and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/photo/TonemapReinhard.class b/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/photo/TonemapReinhard.class
deleted file mode 100644
index 72b9f86..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/photo/TonemapReinhard.class and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/utils/Converters.class b/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/utils/Converters.class
deleted file mode 100644
index 3b136c3..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/utils/Converters.class and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/video/BackgroundSubtractor.class b/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/video/BackgroundSubtractor.class
deleted file mode 100644
index 9553945..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/video/BackgroundSubtractor.class and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/video/BackgroundSubtractorKNN.class b/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/video/BackgroundSubtractorKNN.class
deleted file mode 100644
index 82931e4..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/video/BackgroundSubtractorKNN.class and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/video/BackgroundSubtractorMOG2.class b/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/video/BackgroundSubtractorMOG2.class
deleted file mode 100644
index 663657a..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/video/BackgroundSubtractorMOG2.class and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/video/DenseOpticalFlow.class b/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/video/DenseOpticalFlow.class
deleted file mode 100644
index 3c7dd1f..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/video/DenseOpticalFlow.class and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/video/DualTVL1OpticalFlow.class b/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/video/DualTVL1OpticalFlow.class
deleted file mode 100644
index 3415b5d..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/video/DualTVL1OpticalFlow.class and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/video/KalmanFilter.class b/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/video/KalmanFilter.class
deleted file mode 100644
index 97309fd..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/video/KalmanFilter.class and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/video/Video.class b/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/video/Video.class
deleted file mode 100644
index 062947c..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/video/Video.class and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/videoio/VideoCapture.class b/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/videoio/VideoCapture.class
deleted file mode 100644
index ae5d365..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/videoio/VideoCapture.class and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/videoio/Videoio.class b/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/videoio/Videoio.class
deleted file mode 100644
index 7448b9b..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/videoio/Videoio.class and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/linked_resources_binary_format/debugAndroidTest/processDebugAndroidTestResources/linked-resources-binary-format.ap_ b/Pink/openCVLibrary300/build/intermediates/linked_resources_binary_format/debugAndroidTest/processDebugAndroidTestResources/linked-resources-binary-format.ap_
deleted file mode 100644
index 438930c..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/linked_resources_binary_format/debugAndroidTest/processDebugAndroidTestResources/linked-resources-binary-format.ap_ and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/linked_resources_binary_format/debugAndroidTest/processDebugAndroidTestResources/output-metadata.json b/Pink/openCVLibrary300/build/intermediates/linked_resources_binary_format/debugAndroidTest/processDebugAndroidTestResources/output-metadata.json
deleted file mode 100644
index e3d145e..0000000
--- a/Pink/openCVLibrary300/build/intermediates/linked_resources_binary_format/debugAndroidTest/processDebugAndroidTestResources/output-metadata.json
+++ /dev/null
@@ -1,20 +0,0 @@
-{
- "version": 3,
- "artifactType": {
- "type": "LINKED_RESOURCES_BINARY_FORMAT",
- "kind": "Directory"
- },
- "applicationId": "org.opencv.test",
- "variantName": "debugAndroidTest",
- "elements": [
- {
- "type": "SINGLE",
- "filters": [],
- "attributes": [],
- "versionCode": 0,
- "versionName": "",
- "outputFile": "linked-resources-binary-format.ap_"
- }
- ],
- "elementType": "File"
-}
\ No newline at end of file
diff --git a/Pink/openCVLibrary300/build/intermediates/local_only_symbol_list/debug/parseDebugLocalResources/R-def.txt b/Pink/openCVLibrary300/build/intermediates/local_only_symbol_list/debug/parseDebugLocalResources/R-def.txt
deleted file mode 100644
index 78ac5b8..0000000
--- a/Pink/openCVLibrary300/build/intermediates/local_only_symbol_list/debug/parseDebugLocalResources/R-def.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-R_DEF: Internal format may change without notice
-local
diff --git a/Pink/openCVLibrary300/build/intermediates/local_only_symbol_list/debugAndroidTest/parseDebugAndroidTestLocalResources/R-def.txt b/Pink/openCVLibrary300/build/intermediates/local_only_symbol_list/debugAndroidTest/parseDebugAndroidTestLocalResources/R-def.txt
deleted file mode 100644
index 78ac5b8..0000000
--- a/Pink/openCVLibrary300/build/intermediates/local_only_symbol_list/debugAndroidTest/parseDebugAndroidTestLocalResources/R-def.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-R_DEF: Internal format may change without notice
-local
diff --git a/Pink/openCVLibrary300/build/intermediates/manifest_merge_blame_file/debug/processDebugManifest/manifest-merger-blame-debug-report.txt b/Pink/openCVLibrary300/build/intermediates/manifest_merge_blame_file/debug/processDebugManifest/manifest-merger-blame-debug-report.txt
deleted file mode 100644
index 6145287..0000000
--- a/Pink/openCVLibrary300/build/intermediates/manifest_merge_blame_file/debug/processDebugManifest/manifest-merger-blame-debug-report.txt
+++ /dev/null
@@ -1,11 +0,0 @@
-1
-2
-6
-7
-7-->D:\gitPlanet\yola\Pink\openCVLibrary300\src\main\AndroidManifest.xml:7:5-43
-7-->INJECTED
-8
-9
diff --git a/Pink/openCVLibrary300/build/intermediates/manifest_merge_blame_file/debugAndroidTest/processDebugAndroidTestManifest/manifest-merger-blame-debug-androidTest-report.txt b/Pink/openCVLibrary300/build/intermediates/manifest_merge_blame_file/debugAndroidTest/processDebugAndroidTestManifest/manifest-merger-blame-debug-androidTest-report.txt
deleted file mode 100644
index 1c698ef..0000000
--- a/Pink/openCVLibrary300/build/intermediates/manifest_merge_blame_file/debugAndroidTest/processDebugAndroidTestManifest/manifest-merger-blame-debug-androidTest-report.txt
+++ /dev/null
@@ -1,31 +0,0 @@
-1
-2
-4
-5 D:\gitPlanet\yola\Pink\openCVLibrary300\build\intermediates\tmp\manifest\androidTest\debug\tempFile1ProcessTestManifest1114075493755902143.xml:5:5-74
-6 android:minSdkVersion="24"
-6-->D:\gitPlanet\yola\Pink\openCVLibrary300\build\intermediates\tmp\manifest\androidTest\debug\tempFile1ProcessTestManifest1114075493755902143.xml:5:15-41
-7 android:targetSdkVersion="36" />
-7-->D:\gitPlanet\yola\Pink\openCVLibrary300\build\intermediates\tmp\manifest\androidTest\debug\tempFile1ProcessTestManifest1114075493755902143.xml:5:42-71
-8
-9 D:\gitPlanet\yola\Pink\openCVLibrary300\build\intermediates\tmp\manifest\androidTest\debug\tempFile1ProcessTestManifest1114075493755902143.xml:7:5-11:65
-10 android:name="androidx.test.runner.AndroidJUnitRunner"
-10-->D:\gitPlanet\yola\Pink\openCVLibrary300\build\intermediates\tmp\manifest\androidTest\debug\tempFile1ProcessTestManifest1114075493755902143.xml:7:22-76
-11 android:functionalTest="false"
-11-->D:\gitPlanet\yola\Pink\openCVLibrary300\build\intermediates\tmp\manifest\androidTest\debug\tempFile1ProcessTestManifest1114075493755902143.xml:10:22-52
-12 android:handleProfiling="false"
-12-->D:\gitPlanet\yola\Pink\openCVLibrary300\build\intermediates\tmp\manifest\androidTest\debug\tempFile1ProcessTestManifest1114075493755902143.xml:9:22-53
-13 android:label="Tests for org.opencv.test"
-13-->D:\gitPlanet\yola\Pink\openCVLibrary300\build\intermediates\tmp\manifest\androidTest\debug\tempFile1ProcessTestManifest1114075493755902143.xml:11:22-63
-14 android:targetPackage="org.opencv.test" />
-14-->D:\gitPlanet\yola\Pink\openCVLibrary300\build\intermediates\tmp\manifest\androidTest\debug\tempFile1ProcessTestManifest1114075493755902143.xml:8:22-61
-15
-16 INJECTED
-17 android:debuggable="true"
-18 android:extractNativeLibs="false" />
-18-->INJECTED
-19
-20
diff --git a/Pink/openCVLibrary300/build/intermediates/merged_java_res/debug/mergeDebugJavaResource/feature-openCVLibrary300.jar b/Pink/openCVLibrary300/build/intermediates/merged_java_res/debug/mergeDebugJavaResource/feature-openCVLibrary300.jar
deleted file mode 100644
index 15cb0ec..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/merged_java_res/debug/mergeDebugJavaResource/feature-openCVLibrary300.jar and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/merged_java_res/debugAndroidTest/mergeDebugAndroidTestJavaResource/feature-openCVLibrary300.jar b/Pink/openCVLibrary300/build/intermediates/merged_java_res/debugAndroidTest/mergeDebugAndroidTestJavaResource/feature-openCVLibrary300.jar
deleted file mode 100644
index 493cf47..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/merged_java_res/debugAndroidTest/mergeDebugAndroidTestJavaResource/feature-openCVLibrary300.jar and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/merged_manifest/debug/processDebugManifest/AndroidManifest.xml b/Pink/openCVLibrary300/build/intermediates/merged_manifest/debug/processDebugManifest/AndroidManifest.xml
deleted file mode 100644
index e2f9160..0000000
--- a/Pink/openCVLibrary300/build/intermediates/merged_manifest/debug/processDebugManifest/AndroidManifest.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/Pink/openCVLibrary300/build/intermediates/navigation_json/debug/extractDeepLinksDebug/navigation.json b/Pink/openCVLibrary300/build/intermediates/navigation_json/debug/extractDeepLinksDebug/navigation.json
deleted file mode 100644
index 0637a08..0000000
--- a/Pink/openCVLibrary300/build/intermediates/navigation_json/debug/extractDeepLinksDebug/navigation.json
+++ /dev/null
@@ -1 +0,0 @@
-[]
\ No newline at end of file
diff --git a/Pink/openCVLibrary300/build/intermediates/nested_resources_validation_report/debug/generateDebugResources/nestedResourcesValidationReport.txt b/Pink/openCVLibrary300/build/intermediates/nested_resources_validation_report/debug/generateDebugResources/nestedResourcesValidationReport.txt
deleted file mode 100644
index 08f4ebe..0000000
--- a/Pink/openCVLibrary300/build/intermediates/nested_resources_validation_report/debug/generateDebugResources/nestedResourcesValidationReport.txt
+++ /dev/null
@@ -1 +0,0 @@
-0 Warning/Error
\ No newline at end of file
diff --git a/Pink/openCVLibrary300/build/intermediates/nested_resources_validation_report/debugAndroidTest/generateDebugAndroidTestResources/nestedResourcesValidationReport.txt b/Pink/openCVLibrary300/build/intermediates/nested_resources_validation_report/debugAndroidTest/generateDebugAndroidTestResources/nestedResourcesValidationReport.txt
deleted file mode 100644
index 08f4ebe..0000000
--- a/Pink/openCVLibrary300/build/intermediates/nested_resources_validation_report/debugAndroidTest/generateDebugAndroidTestResources/nestedResourcesValidationReport.txt
+++ /dev/null
@@ -1 +0,0 @@
-0 Warning/Error
\ No newline at end of file
diff --git a/Pink/openCVLibrary300/build/intermediates/packaged_manifests/debugAndroidTest/processDebugAndroidTestManifest/AndroidManifest.xml b/Pink/openCVLibrary300/build/intermediates/packaged_manifests/debugAndroidTest/processDebugAndroidTestManifest/AndroidManifest.xml
deleted file mode 100644
index 8dd7239..0000000
--- a/Pink/openCVLibrary300/build/intermediates/packaged_manifests/debugAndroidTest/processDebugAndroidTestManifest/AndroidManifest.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/Pink/openCVLibrary300/build/intermediates/packaged_manifests/debugAndroidTest/processDebugAndroidTestManifest/output-metadata.json b/Pink/openCVLibrary300/build/intermediates/packaged_manifests/debugAndroidTest/processDebugAndroidTestManifest/output-metadata.json
deleted file mode 100644
index 06024f1..0000000
--- a/Pink/openCVLibrary300/build/intermediates/packaged_manifests/debugAndroidTest/processDebugAndroidTestManifest/output-metadata.json
+++ /dev/null
@@ -1,18 +0,0 @@
-{
- "version": 3,
- "artifactType": {
- "type": "PACKAGED_MANIFESTS",
- "kind": "Directory"
- },
- "applicationId": "org.opencv.test",
- "variantName": "debugAndroidTest",
- "elements": [
- {
- "type": "SINGLE",
- "filters": [],
- "attributes": [],
- "outputFile": "AndroidManifest.xml"
- }
- ],
- "elementType": "File"
-}
\ No newline at end of file
diff --git a/Pink/openCVLibrary300/build/intermediates/project_dex_archive/debugAndroidTest/dexBuilderDebugAndroidTest/out/52ccb3c1d32197a9e773b0a74f5d32c0228e32ba46b99acc9a880daa09af271c_1.jar b/Pink/openCVLibrary300/build/intermediates/project_dex_archive/debugAndroidTest/dexBuilderDebugAndroidTest/out/52ccb3c1d32197a9e773b0a74f5d32c0228e32ba46b99acc9a880daa09af271c_1.jar
deleted file mode 100644
index c14b1e6..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/project_dex_archive/debugAndroidTest/dexBuilderDebugAndroidTest/out/52ccb3c1d32197a9e773b0a74f5d32c0228e32ba46b99acc9a880daa09af271c_1.jar and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/project_dex_archive/debugAndroidTest/dexBuilderDebugAndroidTest/out/52ccb3c1d32197a9e773b0a74f5d32c0228e32ba46b99acc9a880daa09af271c_2.jar b/Pink/openCVLibrary300/build/intermediates/project_dex_archive/debugAndroidTest/dexBuilderDebugAndroidTest/out/52ccb3c1d32197a9e773b0a74f5d32c0228e32ba46b99acc9a880daa09af271c_2.jar
deleted file mode 100644
index 07ef01f..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/project_dex_archive/debugAndroidTest/dexBuilderDebugAndroidTest/out/52ccb3c1d32197a9e773b0a74f5d32c0228e32ba46b99acc9a880daa09af271c_2.jar and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/android/OpenCVLoader.class b/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/android/OpenCVLoader.class
deleted file mode 100644
index 144bace..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/android/OpenCVLoader.class and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/android/StaticHelper.class b/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/android/StaticHelper.class
deleted file mode 100644
index fa8c10b..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/android/StaticHelper.class and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/android/Utils.class b/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/android/Utils.class
deleted file mode 100644
index 8483f74..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/android/Utils.class and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/calib3d/Calib3d.class b/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/calib3d/Calib3d.class
deleted file mode 100644
index 5bd734e..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/calib3d/Calib3d.class and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/calib3d/StereoBM.class b/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/calib3d/StereoBM.class
deleted file mode 100644
index bb9e85e..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/calib3d/StereoBM.class and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/calib3d/StereoMatcher.class b/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/calib3d/StereoMatcher.class
deleted file mode 100644
index 8846f45..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/calib3d/StereoMatcher.class and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/calib3d/StereoSGBM.class b/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/calib3d/StereoSGBM.class
deleted file mode 100644
index ece84cc..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/calib3d/StereoSGBM.class and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/core/Algorithm.class b/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/core/Algorithm.class
deleted file mode 100644
index 4ed91f0..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/core/Algorithm.class and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/core/Core$MinMaxLocResult.class b/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/core/Core$MinMaxLocResult.class
deleted file mode 100644
index b8b9015..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/core/Core$MinMaxLocResult.class and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/core/Core.class b/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/core/Core.class
deleted file mode 100644
index f5f4171..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/core/Core.class and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/core/CvException.class b/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/core/CvException.class
deleted file mode 100644
index 00a0bbe..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/core/CvException.class and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/core/CvType.class b/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/core/CvType.class
deleted file mode 100644
index 9c2956f..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/core/CvType.class and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/core/DMatch.class b/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/core/DMatch.class
deleted file mode 100644
index 992afb1..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/core/DMatch.class and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/core/KeyPoint.class b/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/core/KeyPoint.class
deleted file mode 100644
index 58256af..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/core/KeyPoint.class and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/core/Mat.class b/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/core/Mat.class
deleted file mode 100644
index c25a929..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/core/Mat.class and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/core/MatOfByte.class b/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/core/MatOfByte.class
deleted file mode 100644
index 0a72d5b..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/core/MatOfByte.class and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/core/MatOfDMatch.class b/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/core/MatOfDMatch.class
deleted file mode 100644
index 6149305..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/core/MatOfDMatch.class and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/core/MatOfDouble.class b/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/core/MatOfDouble.class
deleted file mode 100644
index 4a6bae7..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/core/MatOfDouble.class and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/core/MatOfFloat.class b/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/core/MatOfFloat.class
deleted file mode 100644
index 855d58d..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/core/MatOfFloat.class and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/core/MatOfFloat4.class b/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/core/MatOfFloat4.class
deleted file mode 100644
index b4cdc86..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/core/MatOfFloat4.class and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/core/MatOfFloat6.class b/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/core/MatOfFloat6.class
deleted file mode 100644
index 20041f3..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/core/MatOfFloat6.class and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/core/MatOfInt.class b/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/core/MatOfInt.class
deleted file mode 100644
index 6a3fea6..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/core/MatOfInt.class and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/core/MatOfInt4.class b/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/core/MatOfInt4.class
deleted file mode 100644
index 063f5cf..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/core/MatOfInt4.class and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/core/MatOfKeyPoint.class b/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/core/MatOfKeyPoint.class
deleted file mode 100644
index 968fe31..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/core/MatOfKeyPoint.class and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/core/MatOfPoint.class b/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/core/MatOfPoint.class
deleted file mode 100644
index 6c2c1c4..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/core/MatOfPoint.class and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/core/MatOfPoint2f.class b/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/core/MatOfPoint2f.class
deleted file mode 100644
index 2fc6703..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/core/MatOfPoint2f.class and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/core/MatOfPoint3.class b/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/core/MatOfPoint3.class
deleted file mode 100644
index b614133..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/core/MatOfPoint3.class and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/core/MatOfPoint3f.class b/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/core/MatOfPoint3f.class
deleted file mode 100644
index e749df2..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/core/MatOfPoint3f.class and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/core/MatOfRect.class b/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/core/MatOfRect.class
deleted file mode 100644
index 4a95a12..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/core/MatOfRect.class and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/core/Point.class b/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/core/Point.class
deleted file mode 100644
index 6e3ec57..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/core/Point.class and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/core/Point3.class b/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/core/Point3.class
deleted file mode 100644
index 81359c7..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/core/Point3.class and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/core/Range.class b/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/core/Range.class
deleted file mode 100644
index 43d562b..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/core/Range.class and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/core/Rect.class b/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/core/Rect.class
deleted file mode 100644
index 97a35aa..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/core/Rect.class and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/core/RotatedRect.class b/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/core/RotatedRect.class
deleted file mode 100644
index bc84828..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/core/RotatedRect.class and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/core/Scalar.class b/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/core/Scalar.class
deleted file mode 100644
index 3ea704e..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/core/Scalar.class and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/core/Size.class b/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/core/Size.class
deleted file mode 100644
index d3ff35a..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/core/Size.class and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/core/TermCriteria.class b/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/core/TermCriteria.class
deleted file mode 100644
index b871ea2..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/core/TermCriteria.class and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/features2d/DescriptorExtractor.class b/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/features2d/DescriptorExtractor.class
deleted file mode 100644
index f4faa45..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/features2d/DescriptorExtractor.class and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/features2d/DescriptorMatcher.class b/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/features2d/DescriptorMatcher.class
deleted file mode 100644
index 692eb4e..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/features2d/DescriptorMatcher.class and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/features2d/FeatureDetector.class b/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/features2d/FeatureDetector.class
deleted file mode 100644
index c6310f6..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/features2d/FeatureDetector.class and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/features2d/Features2d.class b/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/features2d/Features2d.class
deleted file mode 100644
index f8a46ec..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/features2d/Features2d.class and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/imgcodecs/Imgcodecs.class b/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/imgcodecs/Imgcodecs.class
deleted file mode 100644
index 5cc6a99..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/imgcodecs/Imgcodecs.class and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/imgproc/CLAHE.class b/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/imgproc/CLAHE.class
deleted file mode 100644
index d6e39be..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/imgproc/CLAHE.class and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/imgproc/Imgproc.class b/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/imgproc/Imgproc.class
deleted file mode 100644
index e33f1f7..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/imgproc/Imgproc.class and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/imgproc/LineSegmentDetector.class b/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/imgproc/LineSegmentDetector.class
deleted file mode 100644
index 824db7b..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/imgproc/LineSegmentDetector.class and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/imgproc/Subdiv2D.class b/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/imgproc/Subdiv2D.class
deleted file mode 100644
index 4df02fa..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/imgproc/Subdiv2D.class and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/ml/ANN_MLP.class b/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/ml/ANN_MLP.class
deleted file mode 100644
index 281f5f5..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/ml/ANN_MLP.class and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/ml/Boost.class b/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/ml/Boost.class
deleted file mode 100644
index 3990793..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/ml/Boost.class and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/ml/DTrees.class b/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/ml/DTrees.class
deleted file mode 100644
index 5c3a784..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/ml/DTrees.class and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/ml/EM.class b/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/ml/EM.class
deleted file mode 100644
index 47ac377..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/ml/EM.class and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/ml/KNearest.class b/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/ml/KNearest.class
deleted file mode 100644
index b4bf98c..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/ml/KNearest.class and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/ml/LogisticRegression.class b/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/ml/LogisticRegression.class
deleted file mode 100644
index cfa19a5..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/ml/LogisticRegression.class and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/ml/Ml.class b/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/ml/Ml.class
deleted file mode 100644
index 49f8e80..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/ml/Ml.class and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/ml/NormalBayesClassifier.class b/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/ml/NormalBayesClassifier.class
deleted file mode 100644
index 0b17ab5..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/ml/NormalBayesClassifier.class and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/ml/RTrees.class b/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/ml/RTrees.class
deleted file mode 100644
index f799b04..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/ml/RTrees.class and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/ml/SVM.class b/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/ml/SVM.class
deleted file mode 100644
index 3c3b4e0..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/ml/SVM.class and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/ml/StatModel.class b/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/ml/StatModel.class
deleted file mode 100644
index c0b834e..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/ml/StatModel.class and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/ml/TrainData.class b/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/ml/TrainData.class
deleted file mode 100644
index baab064..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/ml/TrainData.class and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/objdetect/BaseCascadeClassifier.class b/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/objdetect/BaseCascadeClassifier.class
deleted file mode 100644
index 6d6b3b8..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/objdetect/BaseCascadeClassifier.class and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/objdetect/CascadeClassifier.class b/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/objdetect/CascadeClassifier.class
deleted file mode 100644
index c5474ca..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/objdetect/CascadeClassifier.class and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/objdetect/HOGDescriptor.class b/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/objdetect/HOGDescriptor.class
deleted file mode 100644
index db9122b..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/objdetect/HOGDescriptor.class and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/objdetect/Objdetect.class b/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/objdetect/Objdetect.class
deleted file mode 100644
index 64725ef..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/objdetect/Objdetect.class and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/photo/AlignExposures.class b/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/photo/AlignExposures.class
deleted file mode 100644
index 0e53f94..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/photo/AlignExposures.class and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/photo/AlignMTB.class b/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/photo/AlignMTB.class
deleted file mode 100644
index 30f0015..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/photo/AlignMTB.class and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/photo/CalibrateCRF.class b/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/photo/CalibrateCRF.class
deleted file mode 100644
index 2af6e9e..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/photo/CalibrateCRF.class and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/photo/CalibrateDebevec.class b/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/photo/CalibrateDebevec.class
deleted file mode 100644
index 84ff225..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/photo/CalibrateDebevec.class and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/photo/CalibrateRobertson.class b/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/photo/CalibrateRobertson.class
deleted file mode 100644
index 2a6c043..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/photo/CalibrateRobertson.class and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/photo/MergeDebevec.class b/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/photo/MergeDebevec.class
deleted file mode 100644
index 7ae0447..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/photo/MergeDebevec.class and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/photo/MergeExposures.class b/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/photo/MergeExposures.class
deleted file mode 100644
index dc29ffc..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/photo/MergeExposures.class and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/photo/MergeMertens.class b/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/photo/MergeMertens.class
deleted file mode 100644
index 9483ad7..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/photo/MergeMertens.class and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/photo/MergeRobertson.class b/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/photo/MergeRobertson.class
deleted file mode 100644
index 9611617..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/photo/MergeRobertson.class and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/photo/Photo.class b/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/photo/Photo.class
deleted file mode 100644
index 7bae1f8..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/photo/Photo.class and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/photo/Tonemap.class b/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/photo/Tonemap.class
deleted file mode 100644
index a7a1f7c..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/photo/Tonemap.class and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/photo/TonemapDrago.class b/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/photo/TonemapDrago.class
deleted file mode 100644
index 1397472..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/photo/TonemapDrago.class and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/photo/TonemapDurand.class b/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/photo/TonemapDurand.class
deleted file mode 100644
index 2f44a97..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/photo/TonemapDurand.class and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/photo/TonemapMantiuk.class b/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/photo/TonemapMantiuk.class
deleted file mode 100644
index 42e3260..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/photo/TonemapMantiuk.class and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/photo/TonemapReinhard.class b/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/photo/TonemapReinhard.class
deleted file mode 100644
index 72b9f86..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/photo/TonemapReinhard.class and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/utils/Converters.class b/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/utils/Converters.class
deleted file mode 100644
index 3b136c3..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/utils/Converters.class and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/video/BackgroundSubtractor.class b/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/video/BackgroundSubtractor.class
deleted file mode 100644
index 9553945..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/video/BackgroundSubtractor.class and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/video/BackgroundSubtractorKNN.class b/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/video/BackgroundSubtractorKNN.class
deleted file mode 100644
index 82931e4..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/video/BackgroundSubtractorKNN.class and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/video/BackgroundSubtractorMOG2.class b/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/video/BackgroundSubtractorMOG2.class
deleted file mode 100644
index 663657a..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/video/BackgroundSubtractorMOG2.class and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/video/DenseOpticalFlow.class b/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/video/DenseOpticalFlow.class
deleted file mode 100644
index 3c7dd1f..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/video/DenseOpticalFlow.class and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/video/DualTVL1OpticalFlow.class b/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/video/DualTVL1OpticalFlow.class
deleted file mode 100644
index 3415b5d..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/video/DualTVL1OpticalFlow.class and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/video/KalmanFilter.class b/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/video/KalmanFilter.class
deleted file mode 100644
index 97309fd..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/video/KalmanFilter.class and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/video/Video.class b/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/video/Video.class
deleted file mode 100644
index 062947c..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/video/Video.class and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/videoio/VideoCapture.class b/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/videoio/VideoCapture.class
deleted file mode 100644
index ae5d365..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/videoio/VideoCapture.class and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/videoio/Videoio.class b/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/videoio/Videoio.class
deleted file mode 100644
index 7448b9b..0000000
Binary files a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/videoio/Videoio.class and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/intermediates/runtime_symbol_list/debugAndroidTest/processDebugAndroidTestResources/R.txt b/Pink/openCVLibrary300/build/intermediates/runtime_symbol_list/debugAndroidTest/processDebugAndroidTestResources/R.txt
deleted file mode 100644
index e69de29..0000000
diff --git a/Pink/openCVLibrary300/build/intermediates/signing_config_versions/debugAndroidTest/writeDebugAndroidTestSigningConfigVersions/signing-config-versions.json b/Pink/openCVLibrary300/build/intermediates/signing_config_versions/debugAndroidTest/writeDebugAndroidTestSigningConfigVersions/signing-config-versions.json
deleted file mode 100644
index 51f6368..0000000
--- a/Pink/openCVLibrary300/build/intermediates/signing_config_versions/debugAndroidTest/writeDebugAndroidTestSigningConfigVersions/signing-config-versions.json
+++ /dev/null
@@ -1 +0,0 @@
-{"enableV1Signing":false,"enableV2Signing":true,"enableV3Signing":false,"enableV4Signing":false}
\ No newline at end of file
diff --git a/Pink/openCVLibrary300/build/intermediates/stable_resource_ids_file/debugAndroidTest/processDebugAndroidTestResources/stableIds.txt b/Pink/openCVLibrary300/build/intermediates/stable_resource_ids_file/debugAndroidTest/processDebugAndroidTestResources/stableIds.txt
deleted file mode 100644
index e69de29..0000000
diff --git a/Pink/openCVLibrary300/build/intermediates/symbol_list_with_package_name/debug/generateDebugRFile/package-aware-r.txt b/Pink/openCVLibrary300/build/intermediates/symbol_list_with_package_name/debug/generateDebugRFile/package-aware-r.txt
deleted file mode 100644
index 802704b..0000000
--- a/Pink/openCVLibrary300/build/intermediates/symbol_list_with_package_name/debug/generateDebugRFile/package-aware-r.txt
+++ /dev/null
@@ -1 +0,0 @@
-org.opencv
diff --git a/Pink/openCVLibrary300/build/intermediates/symbol_list_with_package_name/debugAndroidTest/generateDebugAndroidTestRFile/package-aware-r.txt b/Pink/openCVLibrary300/build/intermediates/symbol_list_with_package_name/debugAndroidTest/generateDebugAndroidTestRFile/package-aware-r.txt
deleted file mode 100644
index c747aaf..0000000
--- a/Pink/openCVLibrary300/build/intermediates/symbol_list_with_package_name/debugAndroidTest/generateDebugAndroidTestRFile/package-aware-r.txt
+++ /dev/null
@@ -1 +0,0 @@
-org.opencv.test
diff --git a/Pink/openCVLibrary300/build/outputs/aar/openCVLibrary300-debug.aar b/Pink/openCVLibrary300/build/outputs/aar/openCVLibrary300-debug.aar
deleted file mode 100644
index 56043e9..0000000
Binary files a/Pink/openCVLibrary300/build/outputs/aar/openCVLibrary300-debug.aar and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/outputs/apk/androidTest/debug/openCVLibrary300-debug-androidTest.apk b/Pink/openCVLibrary300/build/outputs/apk/androidTest/debug/openCVLibrary300-debug-androidTest.apk
deleted file mode 100644
index 51d84dc..0000000
Binary files a/Pink/openCVLibrary300/build/outputs/apk/androidTest/debug/openCVLibrary300-debug-androidTest.apk and /dev/null differ
diff --git a/Pink/openCVLibrary300/build/outputs/apk/androidTest/debug/output-metadata.json b/Pink/openCVLibrary300/build/outputs/apk/androidTest/debug/output-metadata.json
deleted file mode 100644
index 508217c..0000000
--- a/Pink/openCVLibrary300/build/outputs/apk/androidTest/debug/output-metadata.json
+++ /dev/null
@@ -1,21 +0,0 @@
-{
- "version": 3,
- "artifactType": {
- "type": "APK",
- "kind": "Directory"
- },
- "applicationId": "org.opencv.test",
- "variantName": "debugAndroidTest",
- "elements": [
- {
- "type": "SINGLE",
- "filters": [],
- "attributes": [],
- "versionCode": 0,
- "versionName": "",
- "outputFile": "openCVLibrary300-debug-androidTest.apk"
- }
- ],
- "elementType": "File",
- "minSdkVersionForDexing": 24
-}
\ No newline at end of file
diff --git a/Pink/openCVLibrary300/build/outputs/logs/manifest-merger-debug-report.txt b/Pink/openCVLibrary300/build/outputs/logs/manifest-merger-debug-report.txt
deleted file mode 100644
index dc5a258..0000000
--- a/Pink/openCVLibrary300/build/outputs/logs/manifest-merger-debug-report.txt
+++ /dev/null
@@ -1,22 +0,0 @@
--- Merging decision tree log ---
-manifest
-ADDED from D:\gitPlanet\yola\Pink\openCVLibrary300\src\main\AndroidManifest.xml:2:1-8:12
-INJECTED from D:\gitPlanet\yola\Pink\openCVLibrary300\src\main\AndroidManifest.xml:2:1-8:12
- package
- ADDED from D:\gitPlanet\yola\Pink\openCVLibrary300\src\main\AndroidManifest.xml:3:7-27
- INJECTED from D:\gitPlanet\yola\Pink\openCVLibrary300\src\main\AndroidManifest.xml
- android:versionName
- ADDED from D:\gitPlanet\yola\Pink\openCVLibrary300\src\main\AndroidManifest.xml:5:7-34
- xmlns:android
- ADDED from D:\gitPlanet\yola\Pink\openCVLibrary300\src\main\AndroidManifest.xml:2:11-69
- android:versionCode
- ADDED from D:\gitPlanet\yola\Pink\openCVLibrary300\src\main\AndroidManifest.xml:4:7-33
-uses-sdk
-ADDED from D:\gitPlanet\yola\Pink\openCVLibrary300\src\main\AndroidManifest.xml:7:5-43
-INJECTED from D:\gitPlanet\yola\Pink\openCVLibrary300\src\main\AndroidManifest.xml:7:5-43
-INJECTED from D:\gitPlanet\yola\Pink\openCVLibrary300\src\main\AndroidManifest.xml:7:5-43
- android:targetSdkVersion
- INJECTED from D:\gitPlanet\yola\Pink\openCVLibrary300\src\main\AndroidManifest.xml
- android:minSdkVersion
- ADDED from D:\gitPlanet\yola\Pink\openCVLibrary300\src\main\AndroidManifest.xml:7:15-40
- INJECTED from D:\gitPlanet\yola\Pink\openCVLibrary300\src\main\AndroidManifest.xml
diff --git a/Pink/openCVLibrary300/build/tmp/compileDebugJavaWithJavac/previous-compilation-data.bin b/Pink/openCVLibrary300/build/tmp/compileDebugJavaWithJavac/previous-compilation-data.bin
deleted file mode 100644
index aed6cf5..0000000
Binary files a/Pink/openCVLibrary300/build/tmp/compileDebugJavaWithJavac/previous-compilation-data.bin and /dev/null differ
diff --git a/Pink/settings.gradle.kts b/Pink/settings.gradle.kts
index 9c53841..e42774f 100644
--- a/Pink/settings.gradle.kts
+++ b/Pink/settings.gradle.kts
@@ -24,4 +24,5 @@ dependencyResolutionManagement {
rootProject.name = "PinkOV"
include(":app")
+include(":library")
include(":openCVLibrary300")
diff --git a/Pink/经期设置和计算.md b/Pink/经期设置和计算.md
new file mode 100644
index 0000000..c84e1c5
--- /dev/null
+++ b/Pink/经期设置和计算.md
@@ -0,0 +1,72 @@
+易孕期、排卵日、排卵高峰、安全期 的计算方法
+
+# 美柚四类日期计算逻辑(通用妇科标准+APP算法规则)
+先明确核心基准:**以月经周期、排卵日为核心,所有区间围绕排卵日前后划分**
+## 前置基础概念
+1. 排卵日:卵巢排出成熟卵子当天;卵子存活12~24小时,最长不超48h
+2. 精子存活:进入女性体内可存活 **3~5天**(最多7天)
+3. 黄体期:排卵后到下次来月经的固定阶段,绝大多数女性稳定 **14天**(美柚默认标准值)
+> 公式核心:预估排卵日 = 下次月经第一天 − 14天
+
+## 一、第一步:算出【预估排卵日】
+### 标准计算公式
+1. 先算「下次月经来潮日」
+ 本次月经首日 + 平均月经周期天数 = 下次月经首日
+2. 排卵日 = 下次月经首日 − 14天
+示例:
+本次月经7.1,周期30天
+下次月经:7.1+30=7.31
+排卵日=7.31−14=7.17
+
+### APP修正逻辑(美柚动态校准)
+单纯公式只是理论值,美柚会用实测数据修正真实排卵日:
+- 排卵试纸强阳日、基础体温双相拐点、B超卵泡记录 → 自动修正排卵日,推翻纯公式推算
+
+## 二、四大区间逐一定义+计算方式
+### 1. 排卵高峰(排卵峰值日)
+- 定义:卵子最可能排出的当天,受孕概率最高
+- 计算:就是上面算出的**排卵日本身**
+- APP判定加分项:
+ 当日试纸强阳、体温骤降次日升温、小腹排卵痛,会标记为「排卵高峰」,受孕概率标最高值
+
+### 2. 易孕期(排卵期/受孕窗口期)
+原理:精子能提前等卵子,排卵前5天~排卵后1天都有怀孕可能
+#### 计算公式
+易孕期起始日 = 排卵日 − 5天
+易孕期结束日 = 排卵日 + 1天
+区间:排卵前5天 ~ 排卵后1天,共7天
+举例:排卵日7.17
+易孕期:7.12 ~ 7.18
+这7天内同房都有受孕概率,越靠近排卵高峰概率越高
+
+### 3. 安全期(分两段:排卵前安全期、排卵后安全期)
+安全期=排除经期、排除易孕期的日期,理论受孕概率极低,分两段:
+#### ① 排卵前安全期
+本次月经结束次日 → 易孕期前一天(排卵日前6天)
+#### ② 排卵后安全期
+排卵日后2天 → 下次月经来前一天
+> 重要提醒:排卵后安全期相对更稳;排卵前安全期极容易因提前排卵、周期波动失效,不能可靠避孕
+
+### 4. 补充:经期(月经期)
+月经来潮第一天至结束,APP单独色块标注,不属于安全期/易孕期
+
+## 三、完整区间举例演示(周期30天,月经7.1~7.6)
+1. 下次月经:7.31
+2. 排卵日(排卵高峰):7.17
+3. 易孕期:7.12 ~ 7.18
+4. 排卵前安全期:7.7 ~ 7.11
+5. 排卵后安全期:7.19 ~ 7.30
+
+## 四、美柚算法特殊修正规则(和纯手工计算区别)
+1. 周期不固定人群:取近6个月平均周期计算基准,每月动态更新
+2. 实测数据优先:只要录入排卵试纸强阳、体温、B超,会自动偏移排卵日,重新计算全部区间
+3. 黄体期异常修正:若连续多周期高温期≠14天,APP会自动调整黄体基准天数,改变排卵推算
+4. 受孕概率权重:
+ - 排卵高峰(排卵日):概率最高
+ - 易孕期前后几天:概率逐步递减
+ - 安全期:极低概率,但不会显示0%(存在即兴排卵、周期紊乱意外)
+
+## 五、关键局限性(APP计算仅作参考)
+1. 仅适用于有规律月经人群;多囊、周期经常推迟/提前,推算误差很大
+2. 情绪、熬夜、压力、药物会导致即兴排卵,安全期会失效
+3. 试纸、体温记录是提升推算准确度的核心数据,纯靠月经日期预测误差最大
diff --git a/Pink/美柚APP备孕日历功能列表.md b/Pink/美柚APP备孕日历功能列表.md
new file mode 100644
index 0000000..184235e
--- /dev/null
+++ b/Pink/美柚APP备孕日历功能列表.md
@@ -0,0 +1,121 @@
+# 美柚APP底部【记录】模块(备孕日历/备孕模式)完整功能清单
+底部导航「记录」页,切换至**备孕模式**后,核心载体为**备孕日历**,分为四大板块:日历视图、当日打卡记录项、备孕数据图表、模块全局设置,完整功能如下:
+
+
+
+## 一、备孕日历基础视图功能(日历主界面)
+1. **周期智能预测展示**
+ - 日历色块标注:月经期、易孕期、排卵日、排卵高峰、安全期
+ - 每日受孕概率百分比展示(基于月经、体温、试纸、同房数据计算)
+ - 月度/周视图切换,可左右滑动切换月份
+ - 历史周期回溯:查看过往数月全部记录与排卵预测
+ - 未来周期自动推算(经期、排卵、下次月经预估)
+2. **日期操作能力**
+ - 点击任意日期,打开当日记录面板补录/修改数据
+ - 长按日期快速新增单项记录(月经、同房、体温等)
+ - 日期标记:已记录数据的日期会显示对应图标(同房、试纸、体温、症状)
+3. **今日核心备孕提示**
+ - 当日排卵状态、最佳同房时机提醒
+ - 排卵试纸/基础体温打卡提醒
+ - 经期、黄体期、卵泡期阶段提示
+
+## 二、日历内当日打卡记录项(全部可录入数据)
+### 1. 月经记录(核心基础项)
+- 标记「大姨妈来了」,录入月经**开始/结束日期**
+- 经量分级:少量/中等/量大
+- 经血状态:血块、褐色分泌物、淋漓不尽
+- 经期不适症状勾选:痛经、腰酸、乏力、头晕、胸胀等
+- 经期备注文字记录
+
+### 2. 同房(爱爱)记录
+- 标记当日有无同房,可选择**内射/外射**
+- 同房次数、时间段简易标注
+- 同房后行为记录(垫高臀部、冲洗等)
+- 同房感受、身体异常备注
+
+### 3. 排卵试纸记录(备孕核心工具项)
+- 手动录入试纸结果:白板/弱阳/阳/强阳/转弱
+- **拍照识别试纸**:上传照片AI自动判读显色强度,支持大卫、金秀儿等主流试纸品牌
+- 记录测试时段(早/中/晚)、测试浓度
+- 多条试纸同一天多次测试可分次录入,生成试纸趋势
+- 试纸照片云端保存,日历对应日期可回看
+
+### 4. 基础体温(BBT)记录
+- 手动输入晨起静息体温(精确0.1℃)
+- 蓝牙体温计设备自动同步体温数据
+- 语音快捷录入体温
+- 标注测量异常情况(熬夜、醒后活动、生病发烧)
+- 自动生成**双相体温曲线图**,区分卵泡低温期、黄体高温期,标记排卵拐点
+
+### 5. 宫颈粘液(白带)记录
+- 拉丝度分级:无、少量、可拉丝、蛋清状长拉丝
+- 性状区分:浑浊粘稠、透明稀薄、乳白色
+- 颜色、异味异常记录
+
+### 6. 身体症状库(全身体征打卡)
+排卵相关:小腹坠痛、一侧卵巢刺痛、乳房胀痛、乳头敏感
+全身状态:头晕、嗜睡、失眠、腰酸、长痘、水肿、情绪烦躁
+其他:感冒、腹痛、疲劳、偏头痛等
+
+### 7. 早孕试纸记录
+- 区分白板/浅印/明显双杠/强阳
+- 拍照识别早孕试纸,记录检测日期
+- 汇总早孕测试时间线,辅助判断是否受孕
+
+### 8. 生活习惯&药物记录
+- 叶酸、维生素、促排药物、中药等服药打卡
+- 饮酒、熬夜、运动、饮食记录
+- 体检、抽血、B超卵泡监测备注
+
+### 9. 心情&日记
+- 心情标签:焦虑、期待、低落、放松等
+- 文字日记:备孕感受、身体变化、就医记录、检查结果
+- 可插入图片(B超单、化验单、试纸照片)
+
+## 三、备孕数据图表&分析工具(日历附属功能)
+1. **基础体温趋势图**:全周期曲线,自动标注排卵日、黄体高温区间
+2. **排卵试纸强度曲线**:可视化试纸强弱变化,定位峰值排卵日
+3. **月经周期统计**:平均周期、最短/最长周期、经期平均天数
+4. **同房分布统计**:易孕期同房频次、排卵日同房记录汇总
+5. **周期健康分析**:自动识别周期紊乱、黄体期过短、无双向体温等异常,给出备孕调理建议
+6. **数据导出**:周期记录截图/导出,可给医生查看
+
+## 四、备孕日历模块内专属设置功能
+### 1. 基础周期参数设置
+- 自定义平均月经周期、标准经期天数、黄体期天数
+- 修正末次月经,重置全周期预测模型
+- 手动调整排卵预估日期(试纸/体温数据自动修正)
+
+### 2. 提醒设置(日历推送提醒)
+- 经期到来提前提醒
+- 易孕期/排卵日同房提醒
+- 每日测排卵试纸打卡提醒
+- 晨起测基础体温闹钟提醒
+- 叶酸每日服用提醒
+- 自定义提醒时间、推送开关
+
+### 3. 记录项自定义开关
+- 隐藏/显示不需要的打卡项(如不用体温可关闭体温模块)
+- 自定义常用症状快捷勾选列表
+
+### 4. 数据管理设置
+- 单条记录删除、批量删除单日全部记录
+- 周期数据备份、云端同步(多手机账号互通)
+- 数据隐私:记录页面加密锁、隐藏生理数据
+- 清空历史周期记录、重置备孕档案
+
+### 5. 模式切换设置
+- 备孕↔经期↔怀孕模式一键切换(切换后日历记录项同步变更)
+- 切换怀孕模式后,日历自动转为孕周记录视图
+
+## 五、辅助配套小工具(备孕日历页内嵌入口)
+1. 卵泡监测记录:录入B超卵泡大小、内膜厚度
+2. 孕前检查清单、产检记录归档
+3. 预产期测算工具(测出双杠后一键推算)
+4. 排卵计算小工具、安全期计算器
+5. 备孕知识卡片:每日好孕科普、排卵/受孕原理科普
+
+## 六、日历数据联动能力
+1. 所有记录数据同步至「我-个人健康档案」
+2. 数据同步至美柚社区备孕圈子,可分享周期记录(可选私密/公开)
+3. 试纸、体温、月经数据联动算法,动态修正每日排卵概率,提升预测准确度
\ No newline at end of file