[
  {
    "path": ".github/pull_request_template.txt",
    "content": "# Description\n\n<# Please include a summary of the change and which issue is fixed. Please also include relevant motivation and context. List any dependencies that are required for this change. #>\n\n## Screenshots 📸\n\n<details open><summary>Show/Hide content</summary>\n\n<# Please provide screenshots for any visual change. The best way is to take screenshots directly from the app with production-like data. #>\n\n</details> \n\n# How Has This Been Tested? 👨‍🔬\n\n<# Please describe the tests that you ran to verify your changes. #>\n\n## What Has Not Been Tested? 🙅🏻‍♂️\n\n<# Please describe what has not been possible to test neither automatically nor manually. #>\n\n# Checklist ✅\n\n- [ ] I have performed a self-review of my own code.\n- [ ] I have commented my code, particularly in hard-to-understand areas.\n- [ ] I have checked all visual changes in both light and dark mode."
  },
  {
    "path": ".github/stale.yml",
    "content": "# Number of days of inactivity before an issue becomes stale\ndaysUntilStale: 60\n# Number of days of inactivity before a stale issue is closed\ndaysUntilClose: 7\n# Issues with these labels will never be considered stale\nexemptLabels:\n  - pinned\n  - security\n# Label to use when marking an issue as stale\nstaleLabel: stale\n# Comment to post when marking an issue as stale. Set to `false` to disable\nmarkComment: >\n  This issue has been automatically marked as stale because it has not had\n  recent activity. It will be closed if no further activity occurs. Thank you\n  for your contributions.\n# Comment to post when closing a stale issue. Set to `false` to disable\ncloseComment: false"
  },
  {
    "path": ".github/workflows/deploy-develop.yml",
    "content": "name: Deploy production app\n\non:\n  push:\n    branches:\n    - develop\n\njobs:\n  build:\n\n    runs-on: ubuntu-18.04\n\n    steps:\n    - name: Check out code\n      uses: actions/checkout@v1\n    - name: Set up JDK 11\n      uses: actions/setup-java@v1\n      with:\n        java-version: '11'\n    - name: Recover Gradle cache\n      uses: actions/cache@v1\n      with:\n        path: ~/.gradle/caches\n        key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle') }}\n    - name: Download release certificate\n      id: release_cert\n      uses: timheuer/base64-to-file@v1.0.3\n      with:\n        fileName: 'erouska_release.jks'\n        encodedString: ${{ secrets.RELEASE_KEYSTORE_BASE64 }}\n    - name: Build release apps\n      run: ./gradlew assembleDevRelease\n      env:\n        EROUSKA_RELEASE_KEYSTORE_PATH: ${{ steps.release_cert.outputs.filePath }}\n        EROUSKA_RELEASE_KEYSTORE_PASSWORD: ${{ secrets.RELEASE_KEYSTORE_PASSWORD }}\n        EROUSKA_RELEASE_KEY_PASSWORD: ${{ secrets.RELEASE_KEY_PASSWORD }}\n    - name: Publish artefact\n      uses: actions/upload-artifact@v1\n      with:\n        name: app-releases\n        path: app/build/outputs\n    - name: Upload DEV app to Firebase App Distribution\n      uses: wzieba/Firebase-Distribution-Github-Action@v1.2.1\n      with:\n        appId: 1:1077972356575:android:75624eb96818aa0d61886a\n        token: ${{ secrets.FIREBASE_TOKEN }}\n        groups: internal-test\n        file: app/build/outputs/apk/dev/release/covid19-cz-dev-release.apk\n"
  },
  {
    "path": ".github/workflows/deploy-master.yml",
    "content": "name: Deploy production app\n\non:\n  push:\n    branches:\n    - master\n\njobs:\n  build:\n\n    runs-on: ubuntu-18.04\n\n    steps:\n    - name: Check out code\n      uses: actions/checkout@v1\n    - name: Set up JDK 11\n      uses: actions/setup-java@v1\n      with:\n        java-version: '11'\n    - name: Recover Gradle cache\n      uses: actions/cache@v1\n      with:\n        path: ~/.gradle/caches\n        key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle') }}\n    - name: Download release certificate\n      id: release_cert\n      uses: timheuer/base64-to-file@v1.0.3\n      with:\n        fileName: 'erouska_release.jks'\n        encodedString: ${{ secrets.RELEASE_KEYSTORE_BASE64 }}\n    - name: Build release apps\n      run: ./gradlew assembleProdRelease bundleProdRelease\n      env:\n        EROUSKA_RELEASE_KEYSTORE_PATH: ${{ steps.release_cert.outputs.filePath }}\n        EROUSKA_RELEASE_KEYSTORE_PASSWORD: ${{ secrets.RELEASE_KEYSTORE_PASSWORD }}\n        EROUSKA_RELEASE_KEY_PASSWORD: ${{ secrets.RELEASE_KEY_PASSWORD }}\n    - name: Publish artefact\n      uses: actions/upload-artifact@v1\n      with:\n        name: app-releases\n        path: app/build/outputs\n    - name: Upload PROD app to Firebase App Distribution\n      uses: wzieba/Firebase-Distribution-Github-Action@v1.2.1\n      with:\n        appId: 1:941144972907:android:937903c1584d72a673db2e\n        token: ${{ secrets.FIREBASE_TOKEN }}\n        groups: internal-test\n        file: app/build/outputs/apk/prod/release/covid19-cz-prod-release.apk\n"
  },
  {
    "path": ".gitignore",
    "content": "# Created by https://www.gitignore.io/api/intellij,android,gradle,windows,osx\n\n### Intellij ###\n# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio\n\n*.iml\n\n## Directory-based project format:\n#.idea/\n# if you remove the above rule, at least ignore the following:\n\n# User-specific stuff:\n.idea/workspace.xml\n.idea/tasks.xml\n.idea/dictionaries\n\n# Sensitive or high-churn files:\n.idea/dataSources.ids\n.idea/dataSources.xml\n.idea/sqlDataSources.xml\n.idea/dynamic.xml\n.idea/uiDesigner.xml\n.idea/jarRepositories.xml\n.idea/misc.xml\n.idea/modules.xml\n.idea/runConfigurations.xml\n.idea/vcs.xml\n.idea/compiler.xml\n.idea/caches\n.idea/.name\n.idea/navEditor.xml\n.idea/assetWizardSettings.xml\n.idea/codeStyles/Project.xml\n\n# Gradle:\n.idea/gradle.xml\n.idea/libraries\n\n# Mongo Explorer plugin:\n.idea/mongoSettings.xml\n\n## File-based project format:\n*.ipr\n*.iws\n\n## Plugin-specific files:\n\n# IntelliJ\n/out/\n\n# mpeltonen/sbt-idea plugin\n.idea_modules/\n\n# JIRA plugin\natlassian-ide-plugin.xml\n\n# Crashlytics plugin (for Android Studio and IntelliJ)\ncom_crashlytics_export_strings.xml\ncrashlytics.properties\ncrashlytics-build.properties\n\n\n### Android ###\n# Built application files\n*.apk\n*.ap_\n\n# Files for the Dalvik VM\n*.dex\n\n# Java class files\n*.class\n\n# Generated files\nbin/\ngen/\n\n# Gradle files\n.gradle\n.gradle/\nbuild/\n/build\n\n# Local configuration file (sdk path, etc)\nlocal.properties\n# signing.properties\n# *.keystore\n\n# Proguard folder generated by Eclipse\nproguard/\n\n# Log Files\n*.log\n\n# Android Studio Navigation editor temp files\n.navigation/\n\n### Android Patch ###\ngen-external-apklibs\n\n# Ignore Gradle GUI config\ngradle-app.setting\n\n# Avoid ignoring Gradle wrapper jar file (.jar files are usually ignored)\n!gradle-wrapper.jar\n\n\n### Windows ###\n# Windows image file caches\nThumbs.db\nehthumbs.db\n\n# Folder config file\nDesktop.ini\n\n# Recycle Bin used on file shares\n$RECYCLE.BIN/\n\n# Windows Installer files\n*.cab\n*.msi\n*.msm\n*.msp\n\n# Windows shortcuts\n*.lnk\n\n\n### OSX ###\n.DS_Store\n.AppleDouble\n.LSOverride\n\n# Icon must end with two \\r\nIcon\n\n\n# Thumbnails\n._*\n\n# Files that might appear in the root of a volume\n.DocumentRevisions-V100\n.fseventsd\n.Spotlight-V100\n.TemporaryItems\n.Trashes\n.VolumeIcon.icns\n\n# Directories potentially created on remote AFP share\n.AppleDB\n.AppleDesktop\nNetwork Trash Folder\nTemporary Items\n.apdisk\n.idea/inspectionProfiles/Project_Default.xml\n"
  },
  {
    "path": ".idea/codeStyles/codeStyleConfig.xml",
    "content": "<component name=\"ProjectCodeStyleConfiguration\">\n  <state>\n    <option name=\"USE_PER_PROJECT_SETTINGS\" value=\"true\" />\n    <option name=\"PREFERRED_PROJECT_CODE_STYLE\" value=\"Default\" />\n  </state>\n</component>"
  },
  {
    "path": "LICENSE",
    "content": "MIT License\n\nCopyright (c) 2020 Ministry of Health of the Czech Republic\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n"
  },
  {
    "path": "README.md",
    "content": "# erouska-android\n\n[<img src=\"https://lh3.googleusercontent.com/cjsqrWQKJQp9RFO7-hJ9AfpKzbUb_Y84vXfjlP0iRHBvladwAfXih984olktDhPnFqyZ0nu9A5jvFwOEQPXzv7hr3ce3QVsLN8kQ2Ao=s0\">](https://play.google.com/store/apps/details?id=cz.covid19cz.erouska)\n\nRead our **FAQ**: [Czech](https://erouska.cz/caste-dotazy), [English](https://erouska.cz/en/caste-dotazy)\n\neRouška (_rouška_ = _face mask_ in Czech) helps to fight against COVID-19.\n\neRouška uses Bluetooth to scan the area around the device for other eRouška users and saves the data of these encounters.\n\nIt's the only app in Czechia authorized to use Exposure Notifications API from Apple/Google.\n\n## Who is developing eRouška?\n\nStarting with version 2.0, the eRouška application is developed by the Ministry of Health in collaboration with the National Agency for Communication and Information Technologies ([NAKIT](https://nakit.cz/)). Earlier versions of eRouška application were developed by a team of volunteers from the [COVID19CZ](https://covid19cz.cz) community. Most of original eRouška developers continue to work on newer versions in the NAKIT team.\n\n## International cooperation\n\nWe are open-source from day one and we will be happy to work with people in other countries if they want to develop a similar app. Contact [David Vávra](mailto:david.vavra@erouska.cz) for technical details.\n\n## Building the App from the source code\n\nClone this repository and import the project into Android Studio. Make sure you have JDK 8.\n\nRun:\n`./gradlew assembleDevDebug`\n\n## Contributing\nWe are happy to accept pull requests! See [Git Workflow](#git-workflow).\n\nIf you want to become a more permanent part of the team, join [our Slack](https://covid19cz.slack.com), channel _#erouska_.\n\n## Translations\n\nHelp us translate to your language or if you see a problem with translation, fix it. Our translation is open to volunteers [at OneSky](https://covid19cz.oneskyapp.com/).\n\n## <a name=\"git-workflow\"></a>Git workflow\n\n- Work in a fork then send a pull request to the `develop` branch. \n- Pull requests are merged with `squash commits`.\n- Admins rebase `develop` to `master` using the script below. This triggers a release build.\n\n## eRouška release process\n\neRouška uses GitHub Actions. A push to master branch triggers an App build. Then the App is published to [Firebase App Distribution](https://firebase.google.com/docs/app-distribution). \n\nThere are two variants of the App: **DEV** and **PROD**. **PROD** is also built as an App Bundle artefact, that needs to be manually uploaded to Google Play.\n\nVersioning is automatic: major and minor version is in Git, patch is _versionCode_ (a number of commits from the start).\n\nRelease is done by executing the release.sh script. Right click it on Android Studio and hit Run 'release.sh' or execute via command line.\nIf it fails, it fails. Most likely your master has different history from origin. That should never be the case, so you should fix it.\n\nMake sure to update translations & RC defaults before release (next section).\n\n## Updating translations\n- Update only Czech and English file in a PR, don't upload anything to OneSky\n- Don't put Czech strings into English file, add there either your English translation or `TODO: translate`\n- Before every release, the person who is preparing the release will upload Czech file into OneSky and notify translators\n- After it's translated, push English and Slovak file from OneSky to develop. Don't update Czech file.\n\n## Updating RC defaults\n- Don't add any RC defaults to a pull request, change it only in Dev RC for testing ([follow this guide](https://github.com/covid19cz/erouska-remote-config#how-to-add-new-localizable-rc-key))\n- Before every release, the person who is preparing the release should update RC defaults and push them to develop\n\n"
  },
  {
    "path": "app/build.gradle",
    "content": "apply plugin: 'com.android.application'\napply plugin: 'dagger.hilt.android.plugin'\napply plugin: 'kotlin-android'\napply plugin: 'kotlin-android-extensions'\napply plugin: 'kotlin-kapt'\napply plugin: 'com.google.gms.google-services'\napply plugin: \"androidx.navigation.safeargs.kotlin\"\napply plugin: 'com.google.firebase.crashlytics'\n\nandroid {\n\n    compileSdkVersion rootProject.ext.compileSdkVersion\n    defaultConfig {\n        applicationId \"cz.covid19cz.erouska\"\n        minSdkVersion rootProject.ext.minSdkVersion\n        targetSdkVersion rootProject.ext.targetSdkVersion\n        versionCode rootProject.ext.commitCount()\n        versionName rootProject.ext.versionName\n        archivesBaseName = \"covid19-cz\"\n        multiDexEnabled true\n        // If we support another language, add it here\n        def supportedLanguages = [\"en\", \"cs\", \"sk\"]\n        resConfigs supportedLanguages\n        buildConfigField \"String[]\", \"SUPPORTED_LANGUAGES\", \"{\\\"\" + supportedLanguages.join(\"\\\",\\\"\") + \"\\\"}\"\n\n        testInstrumentationRunner \"androidx.test.runner.AndroidJUnitRunner\"\n        testInstrumentationRunnerArguments clearPackageData: 'true'\n    }\n\n    testOptions {\n        execution 'ANDROIDX_TEST_ORCHESTRATOR'\n    }\n\n    flavorDimensions \"environment\"\n    testBuildType \"debug\"\n\n    productFlavors {\n        dev {\n            dimension \"environment\"\n            applicationIdSuffix \".dev\"\n        }\n        prod {\n            dimension \"environment\"\n        }\n    }\n\n    signingConfigs {\n        debug {\n            storeFile file(\"../meta/debug.keystore\")\n        }\n        release {\n            storeFile file(System.getenv(\"EROUSKA_RELEASE_KEYSTORE_PATH\") ?: \"No CI\")\n            storePassword System.getenv(\"EROUSKA_RELEASE_KEYSTORE_PASSWORD\")\n            keyAlias \"covid19cz\"\n            keyPassword System.getenv(\"EROUSKA_RELEASE_KEY_PASSWORD\")\n        }\n    }\n\n    buildTypes {\n        release {\n            debuggable false\n            minifyEnabled true\n            shrinkResources true\n            signingConfig signingConfigs.release\n            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'\n        }\n        debug {\n            debuggable true\n            minifyEnabled false\n            signingConfig signingConfigs.debug\n        }\n    }\n\n    sourceSets {\n        main.java.srcDirs += 'src/main/kotlin'\n        debug.java.srcDirs += 'src/debug/kotlin'\n        release.java.srcDirs += 'src/release/kotlin'\n        androidTest.java.srcDirs += 'src/androidTest/kotlin'\n    }\n\n    compileOptions {\n        sourceCompatibility 1.8\n        targetCompatibility 1.8\n    }\n\n    kotlinOptions {\n        jvmTarget = JavaVersion.VERSION_1_8.toString()\n    }\n\n    buildFeatures {\n        dataBinding = true\n    }\n\n    lintOptions {\n        disable 'MissingTranslation'\n    }\n\n    packagingOptions {\n        exclude 'META-INF/main.kotlin_module'\n    }\n}\n\nandroidExtensions {\n    experimental = true\n}\n\ndependencies {\n    implementation fileTree(dir: 'libs', include: ['*.jar', '*.aar'])\n\n    implementation \"org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.4.32\"\n\n    implementation \"org.jetbrains.kotlinx:kotlinx-coroutines-core-common:1.3.5\"\n    implementation \"org.jetbrains.kotlinx:kotlinx-coroutines-android:1.5.0\"\n    implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-play-services:1.3.7'\n\n    // Android Basics\n    implementation 'androidx.multidex:multidex:2.0.1'\n    implementation 'androidx.core:core-ktx:1.6.0'\n    implementation \"androidx.appcompat:appcompat:1.3.1\"\n    implementation 'androidx.fragment:fragment-ktx:1.3.6'\n    implementation 'androidx.constraintlayout:constraintlayout:2.1.1'\n    implementation \"com.google.android.material:material:1.4.0\"\n    implementation \"androidx.recyclerview:recyclerview:1.2.1\"\n    implementation \"androidx.browser:browser:1.3.0\"\n    implementation \"com.google.android.play:core-ktx:1.8.1\"\n    implementation \"androidx.work:work-runtime-ktx:2.7.0\"\n\n    // Arch\n    implementation project(':arch')\n\n    // Navigation\n    implementation \"androidx.navigation:navigation-fragment-ktx:2.3.5\"\n    implementation \"androidx.navigation:navigation-ui-ktx:2.3.5\"\n\n    // Dagger-Hilt\n    implementation \"com.google.dagger:hilt-android:2.38.1\"\n    kapt \"com.google.dagger:hilt-android-compiler:2.38.1\"\n    implementation 'androidx.hilt:hilt-lifecycle-viewmodel:1.0.0-alpha03'\n    implementation 'androidx.hilt:hilt-work:1.0.0'\n    kapt 'androidx.hilt:hilt-compiler:1.0.0'\n\n    //RxJava\n    implementation \"io.reactivex.rxjava2:rxjava:2.2.17\"\n    implementation \"io.reactivex.rxjava2:rxandroid:2.1.1\"\n\n    //RxPermisssions\n    implementation 'com.github.tbruyelle:rxpermissions:0.10.2'\n\n    // ViewModel and LiveData\n    implementation \"androidx.lifecycle:lifecycle-viewmodel-ktx:2.3.1\"\n\n    //Room\n    implementation \"androidx.room:room-runtime:2.3.0\"\n    kapt \"androidx.room:room-compiler:2.3.0\"\n    implementation \"androidx.room:room-ktx:2.3.0\"\n\n    // Gson\n    implementation 'com.google.code.gson:gson:2.8.8'\n\n    // Firebase\n    implementation platform('com.google.firebase:firebase-bom:26.0.0')\n\n    implementation 'com.google.firebase:firebase-analytics'\n    implementation 'com.google.firebase:firebase-auth'\n    implementation 'com.google.firebase:firebase-config-ktx'\n    implementation 'com.google.firebase:firebase-functions-ktx'\n    implementation 'com.google.firebase:firebase-storage-ktx'\n    implementation 'com.google.firebase:firebase-messaging-ktx'\n    implementation 'com.google.firebase:firebase-crashlytics'\n\n    // Play Services\n    implementation 'com.google.android.play:core:1.10.2'\n    implementation 'com.google.android.gms:play-services-base:17.6.0'\n    implementation 'com.google.android.gms:play-services-basement:17.6.0'\n    implementation 'com.google.android.gms:play-services-safetynet:17.0.1'\n    implementation 'com.google.android.gms:play-services-tasks:17.2.1'\n\n    implementation 'androidx.legacy:legacy-support-v4:1.0.0'\n    implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0'\n\n    // Markdown\n    implementation \"io.noties.markwon:core:4.3.1\"\n    implementation \"io.noties.markwon:html:4.3.1\"\n    implementation \"io.noties.markwon:inline-parser:4.3.1\"\n    implementation 'io.noties.markwon:image-glide:4.3.1'\n    implementation 'com.atlassian.commonmark:commonmark-ext-autolink:0.12.1'\n    implementation 'org.apache.commons:commons-lang3:3.11'\n\n    // Retrofit\n    implementation 'com.squareup.retrofit2:retrofit:2.9.0'\n    implementation 'com.squareup.retrofit2:converter-gson:2.9.0'\n    implementation 'com.squareup.okhttp3:logging-interceptor:4.9.0'\n\n    // Others\n    implementation 'com.android.support:customtabs:28.0.0'\n    implementation 'com.jaredrummler:android-device-names:2.0.0'\n    implementation 'com.jakewharton.threetenabp:threetenabp:1.2.4'\n\n    // JWT\n    implementation 'com.auth0.android:jwtdecode:2.0.0'\n\n    // Tests\n    testImplementation 'junit:junit:4.13'\n    androidTestImplementation 'org.awaitility:awaitility:3.1.6'\n\n    androidTestImplementation 'junit:junit:4.13'\n    androidTestImplementation 'androidx.test.ext:junit:1.1.1'\n    androidTestImplementation 'androidx.test:runner:1.2.0'\n    androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'\n    androidTestImplementation 'androidx.test:rules:1.2.0'\n    androidTestImplementation \"org.koin:koin-test:2.0.1\"\n    androidTestImplementation 'androidx.test.espresso:espresso-intents:3.2.0'\n    androidTestUtil 'androidx.test:orchestrator:1.2.0'\n\n    androidTestImplementation 'androidx.test.uiautomator:uiautomator:2.2.0'\n}\n"
  },
  {
    "path": "app/proguard-rules.pro",
    "content": "# Add project specific ProGuard rules here.\n# You can control the set of applied configuration files using the\n# proguardFiles setting in build.gradle.\n#\n# For more details, see\n#   http://developer.android.com/guide/developing/tools/proguard.html\n\n# If your project uses WebView with JS, uncomment the following\n# and specify the fully qualified class name to the JavaScript interface\n# class:\n#-keepclassmembers class fqcn.of.javascript.interface.for.webview {\n#   public *;\n#}\n\n# Makes debugging easier\n-dontobfuscate\n-keepattributes SourceFile,LineNumberTable\n"
  },
  {
    "path": "app/src/androidTest/kotlin/cz/covid19cz/erouska/helpers/Actions.kt",
    "content": "package cz.covid19cz.erouska.helpers\n\nimport android.app.Instrumentation\nimport android.content.Intent\nimport android.view.View\nimport androidx.annotation.StringRes\nimport androidx.test.espresso.Espresso.onView\nimport androidx.test.espresso.ViewInteraction\nimport androidx.test.espresso.action.ViewActions\nimport androidx.test.espresso.assertion.ViewAssertions\nimport androidx.test.espresso.intent.Intents\nimport androidx.test.espresso.intent.matcher.IntentMatchers\nimport androidx.test.espresso.matcher.ViewMatchers.*\nimport androidx.test.platform.app.InstrumentationRegistry\nimport androidx.test.uiautomator.UiDevice\nimport androidx.test.uiautomator.UiSelector\nimport org.hamcrest.CoreMatchers.containsString\nimport org.hamcrest.Matcher\nimport org.hamcrest.core.AllOf\n\nconst val RETRY_TIMEOUT = 10L\n\nprivate val device = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation())\n\nfun click(element: Matcher<View>): ViewInteraction = onView(element).perform(ViewActions.click())\n\nfun click(id: Int): ViewInteraction =  click(withId(id))\n\nfun scrollTo(id: Int): ViewInteraction = onView(withId(id)).perform(ViewActions.scrollTo())\n\nfun clickUiAutomator(buttonText: String) = device.findObject(UiSelector().clickable(true).textStartsWith(buttonText)).click() // startsWith because it is case insensitive\n\nfun clickUiAutomatorByResourceId(resourceId: String) = device.findObject(UiSelector().resourceId(resourceId)).click()\n\nfun checkMatchesString(id: Int, @StringRes stringId: String): ViewInteraction = onView(withId(id)).check(\n    ViewAssertions.matches(withText(stringId))\n)\n\nfun checkMatchesSubString(id: Int, @StringRes stringId: String): ViewInteraction = onView(withId(id)).check(\n    ViewAssertions.matches(withSubstring(stringId))\n)\n\nfun checkMatchesContainsString(id: Int, @StringRes stringId: String): ViewInteraction = onView(withId(id)).check(\n    ViewAssertions.matches(withText(containsString(stringId)))\n)\n\nfun checkDisplayed(id: Int): ViewInteraction = onView(withId(id)).check(\n    ViewAssertions.matches(\n        isDisplayed()\n    )\n)\n\nfun checkDisplayed(text: String): ViewInteraction = onView(withText(text)).check(\n    ViewAssertions.matches(\n        isDisplayed()\n    )\n)\n\nfun typeText(id: Int, @StringRes text: String): ViewInteraction = onView(withId(id)).perform(ViewActions.typeText(text),\n    ViewActions.closeSoftKeyboard()\n)\n\n\n/**\n * verify link\n * @param element element that has link\n * @param url link that should be open\n * @param clickableText optional pass if only part of the element is clickable\n */\nfun verifyLink(element: Matcher<View>, url: String, clickableText: String? = null) {\n\n    Intents.init()\n    val expectedIntent = AllOf.allOf(\n        IntentMatchers.hasAction(Intent.ACTION_VIEW),\n        IntentMatchers.hasData(url)\n    )\n    Intents.intending(expectedIntent).respondWith(Instrumentation.ActivityResult(0, null))\n\n    if(clickableText.isNullOrBlank()) {\n        onView(element).perform(ViewActions.click())\n    } else {\n        onView(element).perform(ViewActions.openLinkWithText(TextMatchesIgnoringWhitespaceType(clickableText)))\n    }\n\n    Intents.intended(expectedIntent)\n    Intents.release()\n}\n\nfun verifyMultipleLinks(element: Matcher<View>, urlTextPairs: ArrayList<ClickableLink>) {\n    urlTextPairs.map {clickableLink -> verifyLink(element, clickableLink.url, clickableLink.clickableText)}\n}"
  },
  {
    "path": "app/src/androidTest/kotlin/cz/covid19cz/erouska/helpers/ClickableLink.kt",
    "content": "package cz.covid19cz.erouska.helpers\n\nclass ClickableLink(var url: String, var clickableText: String)"
  },
  {
    "path": "app/src/androidTest/kotlin/cz/covid19cz/erouska/helpers/TextMatchesIgnoringWhitespaceType.kt",
    "content": "package cz.covid19cz.erouska.helpers\n\nimport org.hamcrest.Description\nimport org.hamcrest.TypeSafeMatcher\n\nclass TextMatchesIgnoringWhitespaceType(string: String?) :\n    TypeSafeMatcher<String>() {\n    private val string: String\n    override fun matchesSafely(item: String): Boolean {\n        return normalizeWhitespaces(string).equals(normalizeWhitespaces(item), ignoreCase = true)\n    }\n\n    override fun describeTo(description: Description) {\n        description.appendText(\"Expected same strings\")\n    }\n\n    private fun normalizeWhitespaces(string: String): String {\n        return string.replace(\"\\\\s\".toRegex(), \"\")\n    }\n\n    init {\n        requireNotNull(string) { \"Non-null value required by TextMatchesIgnoringWhitespaceType()\" }\n        this.string = string\n    }\n}"
  },
  {
    "path": "app/src/androidTest/kotlin/cz/covid19cz/erouska/screens/A1Screen.kt",
    "content": "package cz.covid19cz.erouska.screens\n\nimport cz.covid19cz.erouska.R\nimport cz.covid19cz.erouska.helpers.checkDisplayed\nimport cz.covid19cz.erouska.helpers.click\n\nobject A1Screen {\n\n    fun startActivation() {\n        click(R.id.welcome_continue_btn)\n    }\n\n    fun checkAllPartsDisplayed() {\n        checkDisplayed(R.id.welcome_title)\n        checkDisplayed(R.id.welcome_desc)\n        checkDisplayed(R.id.welcome_help_btn)\n        checkDisplayed(R.id.mzcr_icon)\n        checkDisplayed(R.id.welcome_continue_btn)\n    }\n\n    fun goToHelp() {\n        click(R.id.welcome_help_btn)\n    }\n}"
  },
  {
    "path": "app/src/androidTest/kotlin/cz/covid19cz/erouska/screens/A2Screen.kt",
    "content": "package cz.covid19cz.erouska.screens\n\nimport android.bluetooth.BluetoothAdapter\nimport cz.covid19cz.erouska.R\nimport cz.covid19cz.erouska.helpers.checkDisplayed\nimport cz.covid19cz.erouska.helpers.click\nimport cz.covid19cz.erouska.helpers.clickUiAutomatorByResourceId\n\nobject A2Screen {\n\n\n    fun checkAllPartsDisplayed() {\n        checkDisplayed(R.id.notifications_img)\n        checkDisplayed(R.id.notifications_title)\n        checkDisplayed(R.id.notifications_body_1)\n        checkDisplayed(R.id.notifications_body_2)\n        checkDisplayed(R.id.enable_btn)\n    }\n\n    /**\n     * Check if bluetooth is turn on and if not turn it on using the app\n     */\n    fun enableBt() {\n        val mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter()\n        if (!mBluetoothAdapter.isEnabled) {\n            click(R.id.enable_btn)\n            clickUiAutomatorByResourceId(\"android:id/button1\")\n        }\n    }\n\n    fun turnOnNotifications() {\n        click(R.id.enable_btn)\n    }\n\n    fun acceptCovidActivation() {\n        clickUiAutomatorByResourceId(\"android:id/button1\")\n    }\n}"
  },
  {
    "path": "app/src/androidTest/kotlin/cz/covid19cz/erouska/screens/A3Screen.kt",
    "content": "package cz.covid19cz.erouska.screens\n\nimport androidx.test.espresso.matcher.ViewMatchers.withId\nimport cz.covid19cz.erouska.R\nimport cz.covid19cz.erouska.helpers.checkDisplayed\nimport cz.covid19cz.erouska.helpers.click\nimport cz.covid19cz.erouska.helpers.verifyLink\nimport cz.covid19cz.erouska.screens.N1Screen.TERMS_OF_USE_URL\n\nobject A3Screen {\n\n    fun checkAllPartsDisplayed() {\n        checkDisplayed(R.id.img_privacy)\n        checkDisplayed(R.id.privacy_header)\n        checkDisplayed(R.id.privacy_body_1)\n        checkDisplayed(R.id.privacy_body_2)\n        checkDisplayed(R.id.activate_btn)\n    }\n\n    fun checkTermsOfUseLink() {\n        verifyLink(withId(R.id.privacy_body_2), TERMS_OF_USE_URL, \"podmínkách používání\")\n    }\n\n    fun finishActivation() {\n        click(R.id.activate_btn)\n    }\n}"
  },
  {
    "path": "app/src/androidTest/kotlin/cz/covid19cz/erouska/screens/B1Screen.kt",
    "content": "package cz.covid19cz.erouska.screens\n\nimport cz.covid19cz.erouska.R\nimport cz.covid19cz.erouska.helpers.RETRY_TIMEOUT\nimport cz.covid19cz.erouska.helpers.checkDisplayed\nimport org.awaitility.Awaitility.await\nimport java.util.concurrent.TimeUnit\n\nobject B1Screen {\n\n    fun checkActiveScreen() {\n        await().ignoreExceptions().atMost(RETRY_TIMEOUT, TimeUnit.SECONDS).untilAsserted {\n            checkDisplayed(R.id.app_running_image)\n        }\n        checkDisplayed(R.id.app_running_title)\n        checkDisplayed(R.id.app_running_body)\n        checkDisplayed(R.id.app_running_body_secondary)\n        checkDisplayed(R.id.buttonStop)\n    }\n}"
  },
  {
    "path": "app/src/androidTest/kotlin/cz/covid19cz/erouska/screens/N1Screen.kt",
    "content": "package cz.covid19cz.erouska.screens\n\nimport androidx.test.espresso.matcher.ViewMatchers.withId\nimport cz.covid19cz.erouska.R\nimport cz.covid19cz.erouska.helpers.ClickableLink\nimport cz.covid19cz.erouska.helpers.verifyMultipleLinks\n\nobject N1Screen {\n    private const val EROUSKA_BASE_URL = \"https://erouska.cz/\"\n    private const val AUDIT_URL = \"${EROUSKA_BASE_URL}audit-kod\"\n    private const val COVIDCZ_GITHUB_URL = \"https://github.com/covid19cz/\"\n    private const val IOS_GITHUB_URL = \"${COVIDCZ_GITHUB_URL}erouska-ios\"\n    private const val ANDROID_GITHUB_URL = \"${COVIDCZ_GITHUB_URL}erouska-android\"\n    private const val APPSTORE_URL = \"https://apps.apple.com/cz/app/erou%C5%A1ka/id1509210215\"\n    private const val GOOGLE_PLAY_URL = \"https://play.google.com/store/apps/details?id=cz.covid19cz.erouska\"\n    private const val APPLE_TRACKING_URL = \"https://www.apple.com/covid19/contacttracing\"\n    private const val GOOGLE_TRACKING_URL = \"https://www.google.com/covid19/exposurenotifications/\"\n    private const val CHYTRA_KARANTENA_URL = \"https://koronavirus.mzcr.cz/chytra-karantena/\"\n    private const val COVID_MZCR_URL = \"https://koronavirus.mzcr.cz/\"\n\n    const val TERMS_OF_USE_URL = \"${EROUSKA_BASE_URL}podminky-pouzivani\"\n\n    fun checkScreenAndLink() {\n        val descriptionElement = withId(R.id.help_desc)\n        val helpClickableLinks = arrayListOf(\n            ClickableLink(\"${EROUSKA_BASE_URL}vyhodnoceni-rizika\",\"Spolehlivost vyhodnocení rizikového kontaktu\"),\n            ClickableLink(\"${TERMS_OF_USE_URL}#technicke\",\"Technické podmínky v Podmínkách zpracování\"),\n            ClickableLink(GOOGLE_PLAY_URL,\"Google Play (Android)\"),\n            ClickableLink(APPSTORE_URL, \"App Store (iOS)\"),\n            ClickableLink(TERMS_OF_USE_URL,\"Informacích o zpracování osobních údajů v aplikaci eRouška 2.0\"),\n            ClickableLink(COVID_MZCR_URL,\"na webu Ministerstva zdravotnictví ČR\"),\n            ClickableLink(CHYTRA_KARANTENA_URL,\"chytré karantény\"),\n            ClickableLink(APPLE_TRACKING_URL,\"Apple (anglicky)\"),\n            ClickableLink(GOOGLE_TRACKING_URL,\"Google (česky)\"),\n            ClickableLink(TERMS_OF_USE_URL,\"Informace o zpracování osobních údajů v aplikaci eRouška 2.0\"),\n            ClickableLink(AUDIT_URL,\"Audit zdrojového kódu aplikace\"),\n            ClickableLink(TERMS_OF_USE_URL,\"Informacích o zpracování osobních údajů v rámci aplikace eRouška 2.0\"),\n            ClickableLink(ANDROID_GITHUB_URL,\"Android\"),\n            ClickableLink(IOS_GITHUB_URL,\"iOS\"),\n            ClickableLink(AUDIT_URL,\"prověřují nezávislé autority\"),\n            ClickableLink(TERMS_OF_USE_URL,\"nepracuje s osobními údaji\"),\n            ClickableLink(TERMS_OF_USE_URL,\"Informacích o zpracování osobních údajů v rámci aplikace eRouška\")\n        )\n\n        verifyMultipleLinks(descriptionElement, helpClickableLinks)\n    }\n}"
  },
  {
    "path": "app/src/androidTest/kotlin/cz/covid19cz/erouska/testRules/DisableAnimationsRule.kt",
    "content": "package cz.covid19cz.erouska.testRules\n\nimport androidx.test.platform.app.InstrumentationRegistry\nimport androidx.test.uiautomator.UiDevice\nimport org.junit.rules.TestRule\nimport org.junit.runner.Description\nimport org.junit.runners.model.Statement\n\n/**\n * Test rule for disabling animations before test start.\n * Animations are re-enabled after test finish.\n *\n * @author Michal Kubele (michal.kubele@gmail.com)\n */\nclass DisableAnimationsRule : TestRule {\n\n    private val device = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation())\n\n    companion object {\n        private const val DISABLED = 0\n        private const val ENABLED = 1\n        private const val TRANSITION_ANIMATION_SCALE = \"settings put global transition_animation_scale %d\"\n        private const val WINDOW_ANIMATION_SCALE = \"settings put global window_animation_scale %d\"\n        private const val ANIMATOR_DURATION_SCALE = \"settings put global animator_duration_scale %d\"\n    }\n\n    override fun apply(base: Statement, description: Description): Statement {\n        return object : Statement() {\n            @Throws(Throwable::class)\n            override fun evaluate() {\n                disableAnimations()\n                try {\n                    base.evaluate()\n                } finally {\n                    enableAnimations()\n                }\n            }\n        }\n    }\n\n    internal fun enableAnimations() {\n        device.run {\n            executeCommand(TRANSITION_ANIMATION_SCALE, ENABLED)\n            executeCommand(WINDOW_ANIMATION_SCALE, ENABLED)\n            executeCommand(ANIMATOR_DURATION_SCALE, ENABLED)\n        }\n    }\n\n    internal fun disableAnimations() {\n        device.run {\n            executeCommand(TRANSITION_ANIMATION_SCALE, DISABLED)\n            executeCommand(WINDOW_ANIMATION_SCALE, DISABLED)\n            executeCommand(ANIMATOR_DURATION_SCALE, DISABLED)\n        }\n    }\n}\n\n/**\n * Executes provided shell [command] with arguments [args] on the device.\n *\n * @param command command to run\n * @param args arguments for command\n */\nfun UiDevice.executeCommand(command: String, vararg args: Any) {\n    this.executeShellCommand(command.format(*args))\n}"
  },
  {
    "path": "app/src/androidTest/kotlin/cz/covid19cz/erouska/tests/ActivationTest.kt",
    "content": "package cz.covid19cz.erouska.tests\n\nimport androidx.test.ext.junit.runners.AndroidJUnit4\nimport androidx.test.rule.ActivityTestRule\nimport cz.covid19cz.erouska.screens.*\nimport cz.covid19cz.erouska.testRules.DisableAnimationsRule\nimport cz.covid19cz.erouska.ui.main.MainActivityOld\nimport org.junit.Rule\nimport org.junit.Test\nimport org.junit.runner.RunWith\n\n\n@RunWith(AndroidJUnit4::class)\nclass ActivationTest {\n    @get:Rule\n    val disableAnimationsRule = DisableAnimationsRule()\n\n    @get:Rule\n    val activityRule: ActivityTestRule<MainActivityOld> = ActivityTestRule(MainActivityOld::class.java)\n\n    @Test\n    fun activationTest() {\n        A1Screen.run {\n            checkAllPartsDisplayed()\n            startActivation()\n        }\n        A2Screen.run {\n            checkAllPartsDisplayed()\n            enableBt()\n            turnOnNotifications()\n            acceptCovidActivation()\n        }\n        A3Screen.run {\n            checkTermsOfUseLink()\n            checkAllPartsDisplayed()\n            finishActivation()\n        }\n        B1Screen.checkActiveScreen()\n    }\n\n    @Test\n    fun checkHelpScreenTest() {\n        A1Screen.goToHelp()\n        N1Screen.checkScreenAndLink()\n    }\n}\n"
  },
  {
    "path": "app/src/dev/google-services.json",
    "content": "{\n  \"project_info\": {\n    \"project_number\": \"382369682317\",\n    \"firebase_url\": \"https://erouska-key-server-dev.firebaseio.com\",\n    \"project_id\": \"erouska-key-server-dev\",\n    \"storage_bucket\": \"erouska-key-server-dev.appspot.com\"\n  },\n  \"client\": [\n    {\n      \"client_info\": {\n        \"mobilesdk_app_id\": \"1:382369682317:android:eae01d4d3e32686d0f23c4\",\n        \"android_client_info\": {\n          \"package_name\": \"cz.covid19cz.erouska.dev\"\n        }\n      },\n      \"oauth_client\": [\n        {\n          \"client_id\": \"382369682317-55si8a5km4pp4s3af88ehcn6sb5ol0ph.apps.googleusercontent.com\",\n          \"client_type\": 3\n        }\n      ],\n      \"api_key\": [\n        {\n          \"current_key\": \"AIzaSyCvhX7EQRKWpX1XYmU5wiyW2PIetK1EX6U\"\n        }\n      ],\n      \"services\": {\n        \"appinvite_service\": {\n          \"other_platform_oauth_client\": [\n            {\n              \"client_id\": \"382369682317-55si8a5km4pp4s3af88ehcn6sb5ol0ph.apps.googleusercontent.com\",\n              \"client_type\": 3\n            },\n            {\n              \"client_id\": \"382369682317-oa2dc4siamp24t9tk4u9gfvbs6g4of3h.apps.googleusercontent.com\",\n              \"client_type\": 2,\n              \"ios_info\": {\n                \"bundle_id\": \"cz.covid19cz.erouska.dev\"\n              }\n            }\n          ]\n        }\n      }\n    }\n  ],\n  \"configuration_version\": \"1\"\n}"
  },
  {
    "path": "app/src/dev/res/drawable/ic_launcher_background.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"108dp\"\n    android:height=\"108dp\"\n    android:viewportWidth=\"108\"\n    android:viewportHeight=\"108\">\n\n  <group android:scaleX=\"0.2109375\"\n      android:scaleY=\"0.2109375\">\n    <path\n        android:pathData=\"M0,0h512v512h-512z\"\n        android:fillColor=\"#EE225B\"/>\n  </group>\n\n  <group android:scaleX=\"0.14132813\"\n      android:scaleY=\"0.14132813\"\n      android:translateX=\"17.82\"\n      android:translateY=\"17.82\">\n    <group>\n      <clip-path\n          android:pathData=\"M0,0h512v512h-512z\"/>\n      <path\n          android:pathData=\"M96,360.4l151.6,151.6l264.4,0l0,-240.7l-96,-95.6l-320,184.7\"\n          android:fillColor=\"#E01A53\"/>\n    </group>\n    <group>\n      <clip-path\n          android:pathData=\"M0,0h512v512h-512z\"/>\n      <path\n          android:pathData=\"M405.8,352.5c1.2,4.7 53.1,-31.5 106.2,-35.2\"\n          android:strokeWidth=\"23\"\n          android:fillColor=\"#00000000\"\n          android:strokeColor=\"#FFFFFF\"\n          android:strokeLineCap=\"round\"/>\n      <path\n          android:pathData=\"M106.2,352.5C105,357.2 53.1,321 0,317.3\"\n          android:strokeWidth=\"23\"\n          android:fillColor=\"#00000000\"\n          android:strokeColor=\"#FFFFFF\"\n          android:strokeLineCap=\"round\"/>\n      <path\n          android:pathData=\"M405.8,159.7c1.2,-4.7 53.1,31.5 106.2,35.2\"\n          android:strokeWidth=\"23\"\n          android:fillColor=\"#00000000\"\n          android:strokeColor=\"#FFFFFF\"\n          android:strokeLineCap=\"round\"/>\n      <path\n          android:pathData=\"M106.2,159.7C105,155 53.1,191.2 0,194.9\"\n          android:strokeWidth=\"23\"\n          android:fillColor=\"#00000000\"\n          android:strokeColor=\"#FFFFFF\"\n          android:strokeLineCap=\"round\"/>\n    </group>\n    <path\n        android:pathData=\"M401,154.6v55.7L236,191l20,-75C333.2,116 400.3,154.3 401,154.6z\"\n        android:fillColor=\"#A4DBDD\"/>\n    <path\n        android:pathData=\"M401,301.7v55.7L256,401l-20,-90C236,311 400,302 401,301.7z\"\n        android:fillColor=\"#C0E5E7\"/>\n    <path\n        android:pathData=\"M236,246l20,75c77.2,0 144,-19 145,-19.3l0,-45.7C400.3,256 236,246 236,246z\"\n        android:fillColor=\"#A4DBDD\"/>\n    <path\n        android:pathData=\"M401,210.3V256c-0.7,0 -87.7,0 -165,0l20,-65C333.3,191 400.3,210.1 401,210.3z\"\n        android:fillColor=\"#C0E5E7\"/>\n    <path\n        android:pathData=\"M256,321v75c-77.2,0 -144.3,-38.3 -145,-38.6v-55.7L256,321z\"\n        android:fillColor=\"#DFF2F3\"/>\n    <path\n        android:pathData=\"M256,116v75l-145,19.3v-55.7C111.7,154.3 178.6,116 256,116z\"\n        android:fillColor=\"#C0E5E7\"/>\n    <path\n        android:pathData=\"M256,191v65l-72.5,20L111,256v-45.7C112,210 178.8,191 256,191z\"\n        android:fillColor=\"#DFF2F3\"/>\n    <path\n        android:pathData=\"M111,256c0,0 0,45.7 0,45.7c0.7,0.2 67.7,19.3 145,19.3v-65C256,256 111,256 111,256z\"\n        android:fillColor=\"#C0E5E7\"/>\n    <path\n        android:pathData=\"M416,150.2v211.5l-5,2.9c-2.9,1.7 -72.3,41.3 -155,41.3v-20c65.3,0 123.1,-27.2 140,-36V162c-17,-8.8 -74.9,-36 -140,-36v-20c82.7,0 152.1,39.7 155,41.4L416,150.2z\"\n        android:fillColor=\"#FFFFFF\"/>\n    <path\n        android:pathData=\"M256,386v20c-82.7,0 -152.1,-39.7 -155,-41.4l-5,-2.9V150.2l5,-2.9c2.9,-1.7 72.3,-41.4 155,-41.4v20c-65.3,0 -123.1,27.2 -140,36V350C132.9,358.8 190.9,386 256,386z\"\n        android:fillColor=\"#FFFFFF\"/>\n  </group>\n</vector>\n"
  },
  {
    "path": "app/src/dev/res/drawable/ic_launcher_foreground.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"108dp\"\n    android:height=\"108dp\"\n    android:viewportWidth=\"108\"\n    android:viewportHeight=\"108\">\n  <path\n      android:pathData=\"M0,106l108,-64l0,66l-108,0z\"\n      android:strokeWidth=\"1\"\n      android:fillColor=\"#DF2A24\"\n      android:fillType=\"nonZero\"\n      android:strokeColor=\"#00000000\"/>\n  <path\n      android:pathData=\"M60.846,84.634L57.317,78.521L59.482,77.271C61.653,76.018 63.312,76.384 64.459,78.37C65.009,79.322 65.151,80.254 64.887,81.164C64.623,82.074 63.997,82.814 63.011,83.383L60.846,84.634ZM59.341,78.847L61.578,82.722L62.26,82.328C62.857,81.984 63.222,81.534 63.354,80.98C63.487,80.426 63.376,79.841 63.02,79.224C62.683,78.642 62.25,78.281 61.721,78.141C61.191,78.002 60.623,78.107 60.015,78.459L59.341,78.847ZM71.414,78.532L67.748,80.649L64.219,74.536L67.744,72.501L68.391,73.622L66.243,74.863L67.028,76.222L69.027,75.068L69.672,76.185L67.673,77.339L68.48,78.737L70.769,77.416L71.414,78.532ZM74.463,68.622L75.886,75.95L74.326,76.851L68.717,71.94L70.2,71.083L73.931,74.601C74.132,74.792 74.29,74.971 74.406,75.139L74.432,75.125C74.342,74.923 74.265,74.689 74.202,74.422L73.022,69.454L74.463,68.622Z\"\n      android:strokeWidth=\"1\"\n      android:fillColor=\"#FFFFFF\"\n      android:fillType=\"nonZero\"\n      android:strokeColor=\"#00000000\"/>\n</vector>\n"
  },
  {
    "path": "app/src/dev/res/values/controls.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"uri_scheme\">erouska-dev</string>\n    <string name=\"key_server_base_url\">https://europe-west1-erouska-key-server-dev.cloudfunctions.net/</string>\n    <string name=\"verification_server_base_url\">https://apiserver-eyrqoibmxa-ew.a.run.app/</string>\n    <string name=\"covid_data_server_base_url\">https://europe-west1-erouska-key-server-dev.cloudfunctions.net</string>\n    <string name=\"fileprovider_authorities\" translatable=\"false\">cz.covid19cz.erouska.dev.fileprovider</string>\n</resources>"
  },
  {
    "path": "app/src/dev/res/values/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"app_name\">eRouška DEV</string>\n</resources>"
  },
  {
    "path": "app/src/main/AndroidManifest.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:tools=\"http://schemas.android.com/tools\"\n    package=\"cz.covid19cz.erouska\">\n\n    <uses-feature android:name=\"android.hardware.bluetooth_le\" android:required=\"true\" />\n    <uses-feature android:name=\"android.hardware.bluetooth\" />\n\n    <uses-permission android:name=\"android.permission.INTERNET\" />\n    <uses-permission android:name=\"android.permission.BLUETOOTH\" />\n    <uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\" />\n\n    <application\n        android:name=\".App\"\n        android:allowBackup=\"false\"\n        android:icon=\"@mipmap/ic_launcher\"\n        android:label=\"@string/app_name\"\n        android:roundIcon=\"@mipmap/ic_launcher_round\"\n        android:supportsRtl=\"true\"\n        android:theme=\"@style/AppTheme\">\n\n        <activity\n            android:name=\".ui.main.MainActivity\"\n            android:launchMode=\"singleTop\"\n            android:screenOrientation=\"portrait\"\n            android:exported=\"true\"\n            android:theme=\"@style/AppTheme\">\n            <intent-filter>\n                <action android:name=\"android.intent.action.MAIN\" />\n                <category android:name=\"android.intent.category.LAUNCHER\" />\n            </intent-filter>\n        </activity>\n\n        <activity\n            android:name=\".ui.main.MainActivityOld\"\n            android:launchMode=\"singleTop\"\n            android:screenOrientation=\"portrait\"\n            android:exported=\"false\"\n            android:theme=\"@style/AppTheme.Launchscreen\">\n        </activity>\n\n        <service\n            android:name=\".exposurenotifications.service.PushService\"\n            android:exported=\"false\">\n            <intent-filter>\n                <action android:name=\"com.google.firebase.MESSAGING_EVENT\" />\n            </intent-filter>\n        </service>\n\n        <!-- Receivers -->\n        <receiver\n            android:name=\".exposurenotifications.receiver.ExposureNotificationBroadcastReceiver\"\n            android:permission=\"com.google.android.gms.nearby.exposurenotification.EXPOSURE_CALLBACK\"\n            android:exported=\"true\">\n            <intent-filter>\n                <action android:name=\"com.google.android.gms.exposurenotification.ACTION_EXPOSURE_STATE_UPDATED\" />\n            </intent-filter>\n        </receiver>\n\n        <provider\n            android:name=\"androidx.startup.InitializationProvider\"\n            android:authorities=\"${applicationId}.androidx-startup\"\n            android:exported=\"false\"\n            tools:node=\"remove\">\n        </provider>\n\n        <provider\n            android:name=\"androidx.core.content.FileProvider\"\n            android:authorities=\"@string/fileprovider_authorities\"\n            android:exported=\"false\"\n            android:grantUriPermissions=\"true\">\n            <meta-data\n                android:name=\"android.support.FILE_PROVIDER_PATHS\"\n                android:resource=\"@xml/file_paths\" />\n        </provider>\n\n        <meta-data\n            android:name=\"com.google.firebase.messaging.default_notification_icon\"\n            android:resource=\"@drawable/ic_notification_normal\" />\n        <meta-data\n            android:name=\"com.google.firebase.messaging.default_notification_color\"\n            android:resource=\"@color/colorSecondary\" />\n        <meta-data android:name=\"google_analytics_adid_collection_enabled\" android:value=\"false\" />\n    </application>\n\n    <queries>\n        <intent>\n            <action android:name=\"android.intent.action.SENDTO\" />\n            <data android:scheme=\"mailto\" />\n        </intent>\n    </queries>\n\n</manifest>"
  },
  {
    "path": "app/src/main/kotlin/cz/covid19cz/erouska/App.kt",
    "content": "package cz.covid19cz.erouska\n\nimport androidx.hilt.work.HiltWorkerFactory\nimport androidx.work.Configuration\nimport androidx.work.WorkManager\nimport arch.BaseApp\nimport com.jakewharton.threetenabp.AndroidThreeTen\nimport cz.covid19cz.erouska.exposurenotifications.Notifications\nimport cz.covid19cz.erouska.exposurenotifications.worker.DownloadKeysWorker\nimport dagger.hilt.android.HiltAndroidApp\nimport java.io.File\nimport javax.inject.Inject\n\n@HiltAndroidApp\nclass App : BaseApp(), Configuration.Provider {\n\n    @Inject\n    lateinit var workerFactory: HiltWorkerFactory\n\n    @Inject\n    lateinit var notifications: Notifications\n\n    override fun onCreate() {\n        super.onCreate()\n        AppConfig.fetchRemoteConfig()\n        AndroidThreeTen.init(this)\n        notifications.init()\n        removeObsoleteData()\n\n        // Init WorkManager with app context, battery saver prevention\n        WorkManager.getInstance(this)\n\n        //TODO: Remove if eRouška gets resurrected\n        unscheduleWorkers()\n    }\n\n    private fun unscheduleWorkers(){\n        WorkManager.getInstance(this).cancelAllWork()\n    }\n\n    override fun getWorkManagerConfiguration() =\n        Configuration.Builder()\n            .setWorkerFactory(workerFactory)\n            .build()\n\n    private fun removeObsoleteData() {\n        val obsoleteDb = File(filesDir.parent + \"/databases/android-devices.db\")\n        if (obsoleteDb.exists()) {\n            obsoleteDb.delete()\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/kotlin/cz/covid19cz/erouska/AppConfig.kt",
    "content": "package cz.covid19cz.erouska\n\nimport com.google.firebase.remoteconfig.FirebaseRemoteConfig\nimport com.google.firebase.remoteconfig.FirebaseRemoteConfigSettings\nimport cz.covid19cz.erouska.utils.L\n\nobject AppConfig {\n    const val FIREBASE_REGION = \"europe-west1\"\n\n    private val firebaseRemoteConfig = FirebaseRemoteConfig.getInstance()\n\n    // Exposure Notifications Settings\n    val reportTypeWeights\n        get() = firebaseRemoteConfig.getString(\"v2_reportTypeWeights\").split(\";\").map { it.toDouble() }\n    val infectiousnessWeights\n        get() = firebaseRemoteConfig.getString(\"v2_infectiousnessWeights\").split(\";\")\n            .map { it.toDouble() }\n    val attenuationBucketThresholdDb\n        get() = firebaseRemoteConfig.getString(\"v2_attenuationBucketThresholdDb\").split(\";\")\n            .map { it.toInt() }\n    val attenuationBucketWeights\n        get() = firebaseRemoteConfig.getString(\"v2_attenuationBucketWeights\").split(\";\")\n            .map { it.toDouble() }\n    val minimumWindowScore\n        get() = firebaseRemoteConfig.getDouble(\"v2_minimumWindowScore\")\n    val daysSinceOnsetToInfectiousness\n        get() = firebaseRemoteConfig.getString(\"v2_daysSinceOnsetToInfectiousness\").split(\";\")\n            .map { it.toInt() }\n    val diagnosisKeysDataMappingLimitDays\n        get() = firebaseRemoteConfig.getLong(\"v2_diagnosisKeysDataMappingLimitDays\").toInt()\n    val dbCleanupDays\n        get() = firebaseRemoteConfig.getLong(\"v2_dbCleanupDays\").toInt()\n    val supportEmail\n        get() = firebaseRemoteConfig.getString(\"v2_supportEmail\")\n    val reportTypeWhenMissing\n        get() = firebaseRemoteConfig.getLong(\"v2_reportTypeWhenMissing\").toInt()\n    val infectiousnessWhenDaysSinceOnsetMissing\n        get() = firebaseRemoteConfig.getLong(\"v2_infectiousnessWhenDaysSinceOnsetMissing\").toInt()\n    val shareAppDynamicLink\n        get() = firebaseRemoteConfig.getString(\"v2_shareAppDynamicLink\")\n    val minSupportedVersionCodeAndroid\n        get() = firebaseRemoteConfig.getLong(\"v2_minSupportedVersionCodeAndroid\")\n    val riskyEncountersTitle\n        get() = firebaseRemoteConfig.getString(\"v2_riskyEncountersTitleAn\")\n    val noEncounterHeader\n        get() = firebaseRemoteConfig.getString(\"v2_noEncounterHeader\")\n    val noEncounterCardTitle\n        get() = firebaseRemoteConfig.getString(\"v2_noEncounterCardTitle\")\n    val noEncounterBody\n        get() = firebaseRemoteConfig.getString(\"v2_noEncounterBody\")\n    val encounterUpdateFrequency\n        get() = String.format(firebaseRemoteConfig.getString(\"v2_encounterUpdateFrequency\"), keyImportPeriodHours)\n    val exposureUITitle\n        get() = firebaseRemoteConfig.getString(\"v2_exposureUITitle\")\n    val symptomsUITitle\n        get() = firebaseRemoteConfig.getString(\"v2_symptomsUITitle\")\n    val spreadPreventionUITitle\n        get() = firebaseRemoteConfig.getString(\"v2_spreadPreventionUITitle\")\n    val exposureHelpUITitle\n        get() = firebaseRemoteConfig.getString(\"v2_exposureHelpUITitle\")\n    val recentExposuresUITitle\n        get() = firebaseRemoteConfig.getString(\"v2_recentExposuresUITitle\")\n    val symptomsContentJson\n        get() = firebaseRemoteConfig.getString(\"v2_symptomsContentJson\")\n    val preventionContentJson\n        get() = firebaseRemoteConfig.getString(\"v2_preventionContentJson\")\n    val exposureHelpContentJson\n        get() = firebaseRemoteConfig.getString(\"v2_exposureHelpContentJson\")\n    val encounterWarning\n        get() = firebaseRemoteConfig.getString(\"v2_encounterWarning\")\n    val selfCheckerPeriodHours\n        get() = firebaseRemoteConfig.getLong(\"v2_selfCheckerPeriodHours\")\n    val keyExportUrl\n        get() = firebaseRemoteConfig.getString(\"v2_keyExportUrl\")\n    val keyImportPeriodHours\n        get() = firebaseRemoteConfig.getLong(\"v2_keyImportPeriodHours\")\n    val keyImportDataOutdatedHours\n        get() = firebaseRemoteConfig.getLong(\"v2_keyImportDataOutdatedHours\")\n    val contactsContentJson\n        get() = firebaseRemoteConfig.getString(\"v2_contactsContentJson\")\n    val riskyEncountersWithSymptoms\n        get() = firebaseRemoteConfig.getString(\"v2_riskyEncountersWithSymptoms\")\n    val riskyEncountersWithoutSymptoms\n        get() = firebaseRemoteConfig.getString(\"v2_riskyEncountersWithoutSymptoms\")\n    val currentMeasuresUrl\n        get() = firebaseRemoteConfig.getString(\"v2_currentMeasuresUrl\")\n    val minGmsVersionCode\n        get() = firebaseRemoteConfig.getLong(\"v2_minGmsVersionCode\")\n    val conditionsOfUseUrl\n        get() = firebaseRemoteConfig.getString(\"v2_conditionsOfUseUrl\")\n    val verificationServerApiKey\n        get() = firebaseRemoteConfig.getString(\"v2_verificationServerApiKey\")\n    val showChatBotLink\n        get() = firebaseRemoteConfig.getBoolean(\"v2_showChatBotLink\")\n    val handleError500AsInvalidCode\n        get() = firebaseRemoteConfig.getBoolean(\"v2_handleError500AsInvalidCode\")\n    val handleError400AsExpiredOrUsedCode\n        get() = firebaseRemoteConfig.getBoolean(\"v2_handleError400AsExpiredOrUsedCode\")\n    val keyExportNonTravellerUrls\n        get() = firebaseRemoteConfig.getString(\"v2_keyExportNonTravellerUrls\")\n    val keyExportEuTravellerUrls\n        get() = firebaseRemoteConfig.getString(\"v2_keyExportEuTravellerUrls\")\n    val recentExposureNotificationTitle\n        get() = firebaseRemoteConfig.getString(\"v2_recentExposureNotificationTitle\")\n    val updateNewsOnRequest\n        get() = firebaseRemoteConfig.getBoolean(\"v2_updateNewsOnRequest\")\n    val efgsDays\n        get() = firebaseRemoteConfig.getLong(\"v2_efgsDays\").toInt()\n    val efgsSupportedCountries\n        get() = firebaseRemoteConfig.getString(\"v2_efgsCountries\")\n    val efgsVisitedCountries\n        get() = firebaseRemoteConfig.getString(\"v2_efgsVisitedCountries\").split(\";\")\n    val efgsReportType\n        get() = firebaseRemoteConfig.getString(\"v2_efgsReportType\")\n    val efgsConsentToFederation\n        get() = firebaseRemoteConfig.getBoolean(\"v2_efgsConsentToFederation\")\n    val efgsTravellerDefault\n        get() = firebaseRemoteConfig.getBoolean(\"v2_efgsTravellerDefault\")\n    val howItWorksUITitle\n        get() = firebaseRemoteConfig.getString(\"v2_howItWorksUITitle\")\n    val howItWorksEvalContent\n        get() = firebaseRemoteConfig.getString(\"v2_howItWorksEvalContent\")\n    val helpJson\n        get() = firebaseRemoteConfig.getString(\"v2_helpJson\")\n    val validationTokenExpirationLeewayMinutes\n        get() = firebaseRemoteConfig.getLong(\"v2_validationTokenExpirationLeewayMinutes\")\n    val ragnarokHeadline\n        get() = firebaseRemoteConfig.getString(\"v2_ragnarokHeadline\")\n    val ragnarokBody\n        get() = firebaseRemoteConfig.getString(\"v2_ragnarokBody\")\n    val ragnarokMoreInfo\n        get() = firebaseRemoteConfig.getString(\"v2_ragnarokMoreInfo\")\n\n    init {\n        val configSettings: FirebaseRemoteConfigSettings = FirebaseRemoteConfigSettings.Builder()\n            .setMinimumFetchIntervalInSeconds(if (BuildConfig.DEBUG) 0 else 3600)\n            .build()\n        firebaseRemoteConfig.setConfigSettingsAsync(configSettings)\n\n        firebaseRemoteConfig.setDefaultsAsync(R.xml.remote_config_defaults).addOnCompleteListener {\n            print()\n        }\n    }\n\n    fun fetchRemoteConfig() {\n        firebaseRemoteConfig.fetchAndActivate().addOnCompleteListener { task ->\n            if (task.isSuccessful) {\n                val updated = task.result\n                L.d(\"Config params updated: $updated\")\n                print()\n            } else {\n                L.e(\"Config params update failed\")\n                task.exception?.printStackTrace()\n            }\n        }\n    }\n\n    private fun print() {\n        for (item in firebaseRemoteConfig.all) {\n            L.d(\"${item.key}: ${item.value.asString()}\")\n        }\n    }\n}"
  },
  {
    "path": "app/src/main/kotlin/cz/covid19cz/erouska/DI.kt",
    "content": "package cz.covid19cz.erouska\n\nimport android.content.Context\nimport androidx.room.Room\nimport com.google.android.gms.nearby.Nearby\nimport com.google.android.gms.nearby.exposurenotification.ExposureNotificationClient\nimport cz.covid19cz.erouska.db.DailySummariesDb\nimport dagger.Module\nimport dagger.Provides\nimport dagger.hilt.InstallIn\nimport dagger.hilt.android.qualifiers.ApplicationContext\nimport dagger.hilt.components.SingletonComponent\nimport javax.inject.Singleton\n\n@Module\n@InstallIn(SingletonComponent::class)\nobject AppModule {\n\n    @Provides\n    @Singleton\n    fun provideExposureNotificationClient(@ApplicationContext context: Context): ExposureNotificationClient {\n        return Nearby.getExposureNotificationClient(context)\n    }\n\n    @Provides\n    @Singleton\n    fun provideDailySummariesDb(@ApplicationContext context: Context): DailySummariesDb {\n        return Room.databaseBuilder(\n            context.applicationContext,\n            DailySummariesDb::class.java, \"daily_summaries\"\n        ).build()\n    }\n\n\n}\n\n\n\n\n\n"
  },
  {
    "path": "app/src/main/kotlin/cz/covid19cz/erouska/db/DailySummariesDb.kt",
    "content": "package cz.covid19cz.erouska.db\n\nimport androidx.room.Database\nimport androidx.room.RoomDatabase\n\n@Database(version = 1, entities = [DailySummaryEntity::class], exportSchema = false)\nabstract class DailySummariesDb : RoomDatabase(){\n    abstract fun dao(): DailySummaryDao\n}"
  },
  {
    "path": "app/src/main/kotlin/cz/covid19cz/erouska/db/DailySummaryDao.kt",
    "content": "package cz.covid19cz.erouska.db\n\nimport androidx.room.Dao\nimport androidx.room.Insert\nimport androidx.room.OnConflictStrategy\nimport androidx.room.Query\nimport cz.covid19cz.erouska.AppConfig\nimport java.util.concurrent.TimeUnit\n\n@Dao\ninterface DailySummaryDao {\n\n    @Insert(onConflict = OnConflictStrategy.IGNORE)\n    suspend fun insert(entity : List<DailySummaryEntity>)\n\n    @Query(\"SELECT * FROM daily_summaries ORDER BY days_since_epoch DESC LIMIT 1\")\n    suspend fun getLatest() : List<DailySummaryEntity>\n\n    @Query(\"SELECT * FROM daily_summaries WHERE notified == 1 ORDER BY days_since_epoch DESC LIMIT 1\")\n    suspend fun getLastNotified() : List<DailySummaryEntity>\n\n    @Query(\"SELECT * FROM daily_summaries ORDER BY days_since_epoch DESC\")\n    suspend fun getAllByExposureDate() : List<DailySummaryEntity>\n\n    @Query(\"SELECT * FROM daily_summaries ORDER BY import_timestamp DESC, days_since_epoch DESC\")\n    suspend fun getAllByImportDate() : List<DailySummaryEntity>\n\n    @Query(\"UPDATE daily_summaries SET notified = 1\")\n    suspend fun markAsNotified()\n\n    @Query(\"UPDATE daily_summaries SET accepted = 1\")\n    suspend fun markAsAccepted()\n\n    @Query(\"DELETE FROM daily_summaries WHERE days_since_epoch < :beforeDaysSinceEpoch\")\n    suspend fun deleteOld(beforeDaysSinceEpoch : Long = TimeUnit.MILLISECONDS.toDays (System.currentTimeMillis()) - AppConfig.dbCleanupDays)\n}"
  },
  {
    "path": "app/src/main/kotlin/cz/covid19cz/erouska/db/DailySummaryEntity.kt",
    "content": "package cz.covid19cz.erouska.db\n\nimport androidx.room.ColumnInfo\nimport androidx.room.Entity\nimport androidx.room.PrimaryKey\nimport cz.covid19cz.erouska.ext.daysSinceEpochToDateString\n\n@Entity(tableName = \"daily_summaries\")\ndata class DailySummaryEntity(\n    @ColumnInfo(name = \"days_since_epoch\")\n    @PrimaryKey val daysSinceEpoch: Int,\n    @ColumnInfo(name = \"maximum_score\")\n    val maximumScore: Double,\n    @ColumnInfo(name = \"score_sum\")\n    val scoreSum: Double,\n    @ColumnInfo(name = \"weightened_duration_sum\")\n    val weightenedDurationSum: Double,\n    @ColumnInfo(name = \"import_timestamp\")\n    val importTimestamp: Long,\n    @ColumnInfo(name = \"notified\")\n    val notified: Boolean,\n    @ColumnInfo(name = \"accepted\")\n    val accepted: Boolean\n){\n\n    fun getDateString() : String{\n        return daysSinceEpoch.daysSinceEpochToDateString()\n    }\n\n    fun getLongDateString() : String{\n        return daysSinceEpoch.daysSinceEpochToDateString(\"d. MMMM yyyy\")\n    }\n}"
  },
  {
    "path": "app/src/main/kotlin/cz/covid19cz/erouska/db/SharedPrefsRepository.kt",
    "content": "package cz.covid19cz.erouska.db\n\nimport android.content.Context\nimport android.content.Context.MODE_PRIVATE\nimport android.content.SharedPreferences\nimport arch.livedata.SafeMutableLiveData\nimport com.auth0.android.jwt.JWT\nimport cz.covid19cz.erouska.AppConfig\nimport cz.covid19cz.erouska.ext.timestampToDate\nimport dagger.hilt.android.qualifiers.ApplicationContext\nimport java.util.concurrent.TimeUnit\nimport javax.inject.Inject\nimport javax.inject.Singleton\n\n@Singleton\nclass SharedPrefsRepository @Inject constructor(@ApplicationContext c: Context) {\n\n    companion object {\n        const val LAST_KEY_IMPORT = \"preference.last_import\"\n        const val LAST_KEY_IMPORT_TIME = \"preference.last_import_time\"\n        const val LAST_SHOWN_EXPOSURE_INFO = \"lastShownExposureInfo\"\n        const val EXPOSURE_NOTIFICATIONS_ENABLED = \"exposureNotificationsEnabled\"\n        const val LAST_SET_DIAGNOSIS_KEYS_DATA_MAPPING = \"lastSetDiagnosisKeysDataMapping\"\n        const val EFGS_INTRODUCED = \"efgsIntroduced\"\n        const val APP_OPEN_TIMESTAMP = \"lastTimeAppOpened\"\n        const val SUPPRESS_UPDATE_SCREENS = \"suppressUpdateScreens\"\n\n        const val REPORT_TYPE_WEIGHTS = \"reportTypeWeights\"\n        const val INFECTIOUSNESS_WEIGHTS = \"infectiousnessWeights\"\n        const val ATTENUATION_BUCKET_THRESHOLD_DB = \"attenuationBucketThresholdDb\"\n        const val ATTENUATION_BUCKET_WEIGHTS = \"attenuationBucketWeights\"\n        const val MINIMUM_WINDOW_SCORE = \"minimumWindowScore\"\n\n        const val LAST_STATS_UPDATE = \"lastStatsUpdate\"\n        const val LAST_METRICS_UPDATE = \"lastMetricsUpdate\"\n\n        // stats\n        const val TESTS_TOTAL = \"testsTotal\"\n        const val TESTS_INCREASE = \"testsIncrease\"\n        const val TESTS_INCREASE_DATE = \"testsIncreaseDate\"\n\n        const val ANTIGEN_TESTS_TOTAL = \"antigenTestsTotal\"\n        const val ANTIGEN_TESTS_INCREASE = \"antigenTestsIncrease\"\n        const val ANTIGEN_TESTS_INCREASE_DATE = \"antigenTestsIncreaseDate\"\n\n        const val VACCINATIONS_TOTAL = \"vaccinationsTotal\"\n        const val VACCINATIONS_INCREASE = \"vaccinationsIncrease\"\n        const val VACCINATIONS_INCREASE_DATE = \"vaccinationsIncreaseDate\"\n\n        const val DAILY_DOSES_DATE = \"dailyDosesDate\"\n\n        const val FIRST_DOSE_TOTAL = \"firstDoseTotal\"\n        const val FIRST_DOSE_INCREASE = \"firstDoseIncrease\"\n\n        const val SECOND_DOSE_TOTAL = \"secondDoseTotal\"\n        const val SECOND_DOSE_INCREASE = \"secondDoseIncrease\"\n\n        const val CONFIRMED_CASES_TOTAL = \"confirmedCasesTotal\"\n        const val CONFIRMED_CASES_INCREASE = \"confirmedCasesIncrease\"\n        const val CONFIRMED_CASES_INCREASE_DATE = \"confirmedCasesIncreaseDate\"\n\n        const val ACTIVE_CASES_TOTAL = \"activeCasesTotal\"\n        const val CURED_TOTAL = \"curedTotal\"\n        const val DECEASED_TOTAL = \"deceasedTotal\"\n        const val CURRENTLY_HOSPITALIZED_TOTAL = \"currentlyHospitalizedTotal\"\n\n        // metrics\n        const val ACTIVATIONS_TOTAL = \"activationsTotal\"\n        const val ACTIVATIONS_YESTERDAY = \"activationsIncrease\"\n        const val KEY_PUBLISHERS_TOTAL = \"keyPublishersTotal\"\n        const val KEY_PUBLISHERS_YESTERDAY = \"keyPublishersYesterday\"\n        const val NOTIFICATIONS_TOTAL = \"notificationsTotal\"\n        const val NOTIFICATIONS_YESTERDAY = \"notificationsTotal\"\n        const val TRAVELLER = \"traveller\"\n        const val CONSENT_TO_FEDERATION = \"consentToFederation\"\n        const val PUSH_TOKEN_REGISTERED = \"pushTokenRegistered\"\n        const val PUSH_TOPIC_REGISTERED = \"pushTopicRegistered\"\n\n        const val HOW_IT_WORKS_SHOWN = \"howItWorksShown\"\n\n        const val LAST_DATA_SENT_TIME = \"lastDataSentTime\"\n        const val VALIDATION_CODE = \"validationCode\"\n        const val VALIDATION_TOKEN = \"validationToken\"\n        const val SYMPTOM_DATE = \"symptomDate\"\n    }\n\n    private val prefs: SharedPreferences = c.getSharedPreferences(\"prefs\", MODE_PRIVATE)\n    val lastKeyImportLive = SafeMutableLiveData(getLastKeyImport())\n\n    fun lastKeyExportFileName(indexUrl: String): String {\n        return prefs.getString(LAST_KEY_IMPORT + indexUrl, \"\") ?: \"\"\n    }\n\n    fun setLastKeyExportFileName(indexUrl: String, filename: String) {\n        prefs.edit().putString(LAST_KEY_IMPORT + indexUrl, filename).apply()\n    }\n\n    fun setLastKeyImport() {\n        val timestamp = System.currentTimeMillis()\n        prefs.edit().putLong(LAST_KEY_IMPORT_TIME, timestamp).apply()\n        lastKeyImportLive.postValue(timestamp)\n    }\n\n    fun getLastKeyImport(): Long {\n        return prefs.getLong(LAST_KEY_IMPORT_TIME, 0L)\n    }\n\n    fun setLastSetDiagnosisKeysDataMapping() {\n        prefs.edit().putLong(LAST_SET_DIAGNOSIS_KEYS_DATA_MAPPING, System.currentTimeMillis())\n            .apply()\n    }\n\n    fun getLastSetDiagnosisKeysDataMapping(): Long {\n        return prefs.getLong(LAST_SET_DIAGNOSIS_KEYS_DATA_MAPPING, 0L)\n    }\n\n    fun setLastShownExposureInfo(daysSinceEpoch: Int) {\n        prefs.edit().putInt(LAST_SHOWN_EXPOSURE_INFO, daysSinceEpoch).apply()\n    }\n\n    fun getLastShownExposureInfo(): Int {\n        return prefs.getInt(LAST_SHOWN_EXPOSURE_INFO, 0)\n    }\n\n    fun isTraveller(): Boolean {\n        return prefs.getBoolean(TRAVELLER, true)\n    }\n\n    fun setTraveller(traveller: Boolean) {\n        prefs.edit().putBoolean(TRAVELLER, traveller).apply()\n    }\n\n    fun isConsentToFederation(): Boolean {\n        return prefs.getBoolean(CONSENT_TO_FEDERATION, false)\n    }\n\n    fun setConsentToFederation(consentToFederation: Boolean) {\n        prefs.edit().putBoolean(CONSENT_TO_FEDERATION, consentToFederation).apply()\n    }\n\n    fun isPushTokenRegistered(): Boolean {\n        return prefs.getBoolean(PUSH_TOKEN_REGISTERED, false)\n    }\n\n    fun setPushTokenRegistered() {\n        prefs.edit().putBoolean(PUSH_TOKEN_REGISTERED, true).apply()\n    }\n\n    fun isPushTopicRegistered(): Boolean {\n        return prefs.getBoolean(PUSH_TOPIC_REGISTERED, false)\n    }\n\n    fun setPushTopicRegistered() {\n        prefs.edit().putBoolean(PUSH_TOPIC_REGISTERED, true).apply()\n    }\n\n    fun hasOutdatedKeyData(): Boolean {\n        val lastTimestamp = getLastKeyImport()\n        return lastTimestamp != 0L && (System.currentTimeMillis() - lastTimestamp) / (1000 * 60 * 60) > AppConfig.keyImportDataOutdatedHours\n    }\n\n    fun clearLastKeyExportFileName() {\n        prefs.edit().remove(LAST_KEY_IMPORT).apply()\n    }\n\n    fun clearLastKeyImportTime() {\n        prefs.edit().remove(LAST_KEY_IMPORT_TIME).apply()\n    }\n\n    fun isExposureNotificationsEnabled(): Boolean {\n        return prefs.getBoolean(EXPOSURE_NOTIFICATIONS_ENABLED, false)\n    }\n\n    fun setExposureNotificationsEnabled(enabled: Boolean) {\n        prefs.edit().putBoolean(EXPOSURE_NOTIFICATIONS_ENABLED, enabled).apply()\n    }\n\n    fun setAppVisitedTimestamp() {\n        prefs.edit().putLong(APP_OPEN_TIMESTAMP, System.currentTimeMillis()).apply()\n    }\n\n    fun getLastTimeAppVisited(): Long {\n        return prefs.getLong(APP_OPEN_TIMESTAMP, 0L)\n    }\n\n    fun setSuppressUpdateScreens(suppress: Boolean) {\n        prefs.edit().putBoolean(SUPPRESS_UPDATE_SCREENS, suppress).apply()\n    }\n\n    fun shouldSuppressUpdateScreens(): Boolean {\n        return prefs.getBoolean(SUPPRESS_UPDATE_SCREENS, false)\n    }\n\n    fun clearCustomConfig() {\n        prefs.edit().apply {\n            remove(REPORT_TYPE_WEIGHTS)\n            remove(ATTENUATION_BUCKET_THRESHOLD_DB)\n            remove(ATTENUATION_BUCKET_WEIGHTS)\n            remove(MINIMUM_WINDOW_SCORE)\n        }.apply()\n    }\n\n    fun setReportTypeWeights(value: String) {\n        prefs.edit().putString(REPORT_TYPE_WEIGHTS, value).apply()\n    }\n\n    fun setInfectiousnessWeights(value: String) {\n        prefs.edit().putString(INFECTIOUSNESS_WEIGHTS, value).apply()\n    }\n\n    fun setAttenuationBucketThresholdDb(value: String) {\n        prefs.edit().putString(ATTENUATION_BUCKET_THRESHOLD_DB, value).apply()\n    }\n\n    fun setAttenuationBucketWeights(value: String) {\n        prefs.edit().putString(ATTENUATION_BUCKET_WEIGHTS, value).apply()\n    }\n\n    fun setMinimumWindowScore(value: String) {\n        prefs.edit().putString(MINIMUM_WINDOW_SCORE, value).apply()\n    }\n\n    fun getReportTypeWeights(): List<Double>? {\n        return prefs.getString(REPORT_TYPE_WEIGHTS, null)?.let {\n            it.split(\";\").mapNotNull { it.toDoubleOrNull() }\n        }\n    }\n\n    fun getInfectiousnessWeights(): List<Double>? {\n        return prefs.getString(INFECTIOUSNESS_WEIGHTS, null)?.let {\n            it.split(\";\").mapNotNull { it.toDoubleOrNull() }\n        }\n    }\n\n    fun getAttenuationBucketThresholdDb(): List<Int>? {\n        return prefs.getString(ATTENUATION_BUCKET_THRESHOLD_DB, null)?.let {\n            it.split(\";\").mapNotNull { it.toIntOrNull() }\n        }\n    }\n\n    fun getAttenuationBucketWeights(): List<Double>? {\n        return prefs.getString(ATTENUATION_BUCKET_WEIGHTS, null)?.let {\n            it.split(\";\").mapNotNull { it.toDoubleOrNull() }\n        }\n    }\n\n    fun getMinimumWindowScore(): Double? {\n        return prefs.getString(MINIMUM_WINDOW_SCORE, null)?.toDoubleOrNull()\n    }\n\n    fun getLastStatsUpdate(): Long {\n        return prefs.getLong(LAST_STATS_UPDATE, 0)\n    }\n\n    fun setLastStatsUpdate(modified: Long) {\n        return prefs.edit().putLong(LAST_STATS_UPDATE, modified).apply()\n    }\n\n    fun getLastMetricsUpdate(): Long {\n        return prefs.getLong(LAST_METRICS_UPDATE, 0)\n    }\n\n    fun setLastMetricsUpdate(modified: Long) {\n        return prefs.edit().putLong(LAST_METRICS_UPDATE, modified).apply()\n    }\n\n    fun getTestsTotal(): Int {\n        return prefs.getInt(TESTS_TOTAL, 0)\n    }\n\n    fun setTestsTotal(value: Int) {\n        return prefs.edit().putInt(TESTS_TOTAL, value).apply()\n    }\n\n    fun getTestsIncrease(): Int {\n        return prefs.getInt(TESTS_INCREASE, 0)\n    }\n\n    fun setTestsIncrease(value: Int) {\n        return prefs.edit().putInt(TESTS_INCREASE, value).apply()\n    }\n\n    fun getTestsIncreaseDate(): Long {\n        return prefs.getLong(TESTS_INCREASE_DATE, 0)\n    }\n\n    fun setTestsIncreaseDate(value: Long) {\n        return prefs.edit().putLong(TESTS_INCREASE_DATE, value).apply()\n    }\n\n    fun getAntigenTestsTotal(): Int {\n        return prefs.getInt(ANTIGEN_TESTS_TOTAL, 0)\n    }\n\n    fun setAntigenTestsTotal(value: Int) {\n        return prefs.edit().putInt(ANTIGEN_TESTS_TOTAL, value).apply()\n    }\n\n    fun getAntigenTestsIncrease(): Int {\n        return prefs.getInt(ANTIGEN_TESTS_INCREASE, 0)\n    }\n\n    fun setAntigenTestsIncrease(value: Int) {\n        return prefs.edit().putInt(ANTIGEN_TESTS_INCREASE, value).apply()\n    }\n\n    fun getAntigenTestsIncreaseDate(): Long {\n        return prefs.getLong(ANTIGEN_TESTS_INCREASE_DATE, 0)\n    }\n\n    fun setAntigenTestsIncreaseDate(value: Long) {\n        return prefs.edit().putLong(ANTIGEN_TESTS_INCREASE_DATE, value).apply()\n    }\n\n    fun getVaccinationsTotal(): Int {\n        return prefs.getInt(VACCINATIONS_TOTAL, 0)\n    }\n\n    fun setVaccinationsTotal(value: Int) {\n        return prefs.edit().putInt(VACCINATIONS_TOTAL, value).apply()\n    }\n\n    fun getVaccinationsIncrease(): Int {\n        return prefs.getInt(VACCINATIONS_INCREASE, 0)\n    }\n\n    fun setVaccinationsIncrease(value: Int) {\n        return prefs.edit().putInt(VACCINATIONS_INCREASE, value).apply()\n    }\n\n    fun getVaccinationsIncreaseDate(): Long {\n        return prefs.getLong(VACCINATIONS_INCREASE_DATE, 0)\n    }\n\n    fun setVaccinationsIncreaseDate(value: Long) {\n        return prefs.edit().putLong(VACCINATIONS_INCREASE_DATE, value).apply()\n    }\n\n    fun getFirstDoseTotal(): Int {\n        return prefs.getInt(FIRST_DOSE_TOTAL, 0)\n    }\n\n    fun setFirstDoseTotal(value: Int) {\n        return prefs.edit().putInt(FIRST_DOSE_TOTAL, value).apply()\n    }\n\n    fun getFirstDoseIncrease(): Int {\n        return prefs.getInt(FIRST_DOSE_INCREASE, 0)\n    }\n\n    fun setFirstDoseIncrease(value: Int) {\n        return prefs.edit().putInt(FIRST_DOSE_INCREASE, value).apply()\n    }\n\n    fun getSecondDoseTotal(): Int {\n        return prefs.getInt(SECOND_DOSE_TOTAL, 0)\n    }\n\n    fun setSecondDoseTotal(value: Int) {\n        return prefs.edit().putInt(SECOND_DOSE_TOTAL, value).apply()\n    }\n\n    fun getSecondDoseIncrease(): Int {\n        return prefs.getInt(SECOND_DOSE_INCREASE, 0)\n    }\n\n    fun setSecondDoseIncrease(value: Int) {\n        return prefs.edit().putInt(SECOND_DOSE_INCREASE, value).apply()\n    }\n\n    fun getDailyDosesDate(): Long {\n        return prefs.getLong(DAILY_DOSES_DATE, 0)\n    }\n\n    fun setDailyDosesDate(value: Long) {\n        return prefs.edit().putLong(DAILY_DOSES_DATE, value).apply()\n    }\n\n    fun getConfirmedCasesTotal(): Int {\n        return prefs.getInt(CONFIRMED_CASES_TOTAL, 0)\n    }\n\n    fun setConfirmedCasesTotal(value: Int) {\n        return prefs.edit().putInt(CONFIRMED_CASES_TOTAL, value).apply()\n    }\n\n    fun getConfirmedCasesIncrease(): Int {\n        return prefs.getInt(CONFIRMED_CASES_INCREASE, 0)\n    }\n\n    fun setConfirmedCasesIncrease(value: Int) {\n        return prefs.edit().putInt(CONFIRMED_CASES_INCREASE, value).apply()\n    }\n\n    fun getConfirmedCasesIncreaseDate(): Long {\n        return prefs.getLong(CONFIRMED_CASES_INCREASE_DATE, 0)\n    }\n\n    fun setConfirmedCasesIncreaseDate(value: Long) {\n        return prefs.edit().putLong(CONFIRMED_CASES_INCREASE_DATE, value).apply()\n    }\n\n    fun getActiveCasesTotal(): Int {\n        return prefs.getInt(ACTIVE_CASES_TOTAL, 0)\n    }\n\n    fun setActiveCasesTotal(value: Int) {\n        return prefs.edit().putInt(ACTIVE_CASES_TOTAL, value).apply()\n    }\n\n    fun getCuredTotal(): Int {\n        return prefs.getInt(CURED_TOTAL, 0)\n    }\n\n    fun setCuredTotal(value: Int) {\n        return prefs.edit().putInt(CURED_TOTAL, value).apply()\n    }\n\n    fun getDeceasedTotal(): Int {\n        return prefs.getInt(DECEASED_TOTAL, 0)\n    }\n\n    fun setDeceasedTotal(value: Int) {\n        return prefs.edit().putInt(DECEASED_TOTAL, value).apply()\n    }\n\n    fun getCurrentlyHospitalizedTotal(): Int {\n        return prefs.getInt(CURRENTLY_HOSPITALIZED_TOTAL, 0)\n    }\n\n    fun setCurrentlyHospitalizedTotal(value: Int) {\n        return prefs.edit().putInt(CURRENTLY_HOSPITALIZED_TOTAL, value).apply()\n    }\n\n    fun getActivationsTotal(): Int {\n        return prefs.getInt(ACTIVATIONS_TOTAL, 0)\n    }\n\n    fun setActivationsTotal(value: Int) {\n        return prefs.edit().putInt(ACTIVATIONS_TOTAL, value).apply()\n    }\n\n    fun getActivationsYesterday(): Int {\n        return prefs.getInt(ACTIVATIONS_YESTERDAY, 0)\n    }\n\n    fun setActivationsYesterday(value: Int) {\n        return prefs.edit().putInt(ACTIVATIONS_YESTERDAY, value).apply()\n    }\n\n    fun getKeyPublishersTotal(): Int {\n        return prefs.getInt(KEY_PUBLISHERS_TOTAL, 0)\n    }\n\n    fun setKeyPublishersTotal(value: Int) {\n        return prefs.edit().putInt(KEY_PUBLISHERS_TOTAL, value).apply()\n    }\n\n    fun getKeyPublishersYesterday(): Int {\n        return prefs.getInt(KEY_PUBLISHERS_YESTERDAY, 0)\n    }\n\n    fun setKeyPublishersYesterday(value: Int) {\n        return prefs.edit().putInt(KEY_PUBLISHERS_YESTERDAY, value).apply()\n    }\n\n    fun getNotificationsTotal(): Int {\n        return prefs.getInt(NOTIFICATIONS_TOTAL, 0)\n    }\n\n    fun setNotificationsTotal(value: Int) {\n        return prefs.edit().putInt(NOTIFICATIONS_TOTAL, value).apply()\n    }\n\n    fun getNotificationsYesterday(): Int {\n        return prefs.getInt(NOTIFICATIONS_YESTERDAY, 0)\n    }\n\n    fun setNotificationsYesterday(value: Int) {\n        return prefs.edit().putInt(NOTIFICATIONS_YESTERDAY, value).apply()\n    }\n\n    fun wasEFGSIntroduced(): Boolean {\n        return prefs.getBoolean(EFGS_INTRODUCED, false)\n    }\n\n    fun setEFGSIntroduced(value: Boolean) {\n        return prefs.edit().putBoolean(EFGS_INTRODUCED, value).apply()\n    }\n\n    fun wasHowItWorksShown(): Boolean {\n        return prefs.getBoolean(HOW_IT_WORKS_SHOWN, false)\n    }\n\n    fun setHowItWorksShown() {\n        prefs.edit().putBoolean(HOW_IT_WORKS_SHOWN, true).apply()\n    }\n\n    fun setVerificationData(code: String, token: String) {\n        prefs.edit().putString(VALIDATION_CODE, code)\n            .putString(VALIDATION_TOKEN, token).apply()\n    }\n\n    fun getVerificationCode(): String? {\n        return prefs.getString(VALIDATION_CODE, null)\n    }\n\n    fun getVerificationToken(): String? {\n        return prefs.getString(VALIDATION_TOKEN, null)\n    }\n\n    fun deletePublishKeysTemporaryData() {\n        prefs.edit().remove(VALIDATION_CODE)\n            .remove(VALIDATION_TOKEN)\n            .remove(CONSENT_TO_FEDERATION)\n            .remove(SYMPTOM_DATE)\n            .apply()\n    }\n\n    fun isCodeValidated(code: String?): Boolean {\n        val savedCode = prefs.getString(VALIDATION_CODE, null)\n        return if (savedCode == code) {\n            hasValidationToken(useLeeway = true)\n        } else {\n            false\n        }\n    }\n\n    fun hasValidationToken(useLeeway: Boolean): Boolean {\n        val token = prefs.getString(VALIDATION_TOKEN, null)\n        return if (token != null) {\n            //Leeway is time, which is subtracted from expiration, to be sure, user has enough time to complete the process before expiration\n            !JWT(token).isExpired(if (useLeeway) AppConfig.validationTokenExpirationLeewayMinutes * 60 else 60)\n        } else {\n            false\n        }\n    }\n\n    fun setSymptomDate(timestamp: Long?) {\n        if (timestamp == null) {\n            prefs.edit().remove(SYMPTOM_DATE).apply()\n        } else {\n            prefs.edit().putLong(SYMPTOM_DATE, timestamp).apply()\n        }\n    }\n\n    fun getSymptomOnsetInterval(): Long? {\n        return prefs.getLong(SYMPTOM_DATE, 0L).let {\n            //Unix timestamp / 600\n            if (it != 0L) TimeUnit.SECONDS.convert(it, TimeUnit.MILLISECONDS) / 600 else null\n        }\n    }\n\n    fun setLastDataSentDate() {\n        prefs.edit().putLong(LAST_DATA_SENT_TIME, System.currentTimeMillis()).apply()\n    }\n\n    fun getLastDataSentDateString(): String? {\n        return prefs.getLong(LAST_DATA_SENT_TIME, 0L).let {\n            if (it != 0L) it.timestampToDate() else null\n        }\n    }\n}"
  },
  {
    "path": "app/src/main/kotlin/cz/covid19cz/erouska/exposurenotifications/ExposureCryptoTools.kt",
    "content": "package cz.covid19cz.erouska.exposurenotifications\n\nimport android.util.Base64\nimport com.google.android.gms.nearby.exposurenotification.TemporaryExposureKey\nimport cz.covid19cz.erouska.utils.L\nimport java.nio.charset.StandardCharsets\nimport java.util.*\nimport javax.crypto.Mac\nimport javax.crypto.spec.SecretKeySpec\nimport javax.inject.Inject\nimport javax.inject.Singleton\nimport kotlin.collections.ArrayList\nimport kotlin.random.Random\n\n@Singleton\nclass ExposureCryptoTools @Inject constructor() {\n\n    fun hashedKeys(keys: List<TemporaryExposureKey>, hmacKey: String): String {\n        val cleartextSegments = ArrayList<HashedKeyData>()\n        for (k in keys) {\n            val base64key = k.keyData.encodeBase64()\n            cleartextSegments.add(\n                HashedKeyData(\n                    base64key, String.format(\n                        Locale.ENGLISH,\n                        \"%s.%d.%d\",\n                        base64key,\n                        k.rollingStartIntervalNumber,\n                        k.rollingPeriod\n                    )\n                )\n            )\n        }\n        val cleartext = cleartextSegments.sortedBy { it.base64key }.joinToString(\",\") { it.data }\n        L.i(\"Hashing ${keys.size} keys\")\n        val mac = Mac.getInstance(\"HmacSHA256\")\n        mac.init(SecretKeySpec(hmacKey.decodeBase64(), \"HmacSHA256\"))\n        return mac.doFinal(cleartext.toByteArray(StandardCharsets.UTF_8)).encodeBase64()\n    }\n\n    fun newHmacKey(): String {\n        val bytes = ByteArray(16)\n        Random.nextBytes(bytes)\n        return bytes.encodeBase64()\n    }\n\n    private class HashedKeyData(val base64key: String, val data: String)\n}\n\nfun ByteArray.encodeBase64(): String {\n    return Base64.encodeToString(this, Base64.NO_WRAP)\n}\n\nfun String.decodeBase64(): ByteArray {\n    return Base64.decode(this, Base64.NO_WRAP)\n}"
  },
  {
    "path": "app/src/main/kotlin/cz/covid19cz/erouska/exposurenotifications/ExposureNotificationsErrorHandling.kt",
    "content": "package cz.covid19cz.erouska.exposurenotifications\n\nimport android.content.Context\nimport androidx.appcompat.app.AlertDialog\nimport androidx.fragment.app.Fragment\nimport androidx.lifecycle.lifecycleScope\nimport com.google.android.gms.common.api.ApiException\nimport com.google.android.gms.common.api.CommonStatusCodes\nimport com.google.android.gms.common.api.Status\nimport com.google.android.gms.nearby.exposurenotification.ExposureNotificationStatusCodes\nimport cz.covid19cz.erouska.R\nimport cz.covid19cz.erouska.ui.dashboard.event.GmsApiErrorEvent\nimport cz.covid19cz.erouska.utils.DeviceInfo\nimport cz.covid19cz.erouska.utils.SupportEmailGenerator\nimport java.util.regex.Matcher\nimport java.util.regex.Pattern\nimport javax.inject.Inject\nimport javax.inject.Singleton\n\n\n/**\n * This class is heavily inspired by Swiss COVID app:\n * https://github.com/DP-3T/dp3t-app-android-ch/blob/1cc2f7cef39206a09ad74ddbdcce69dd7af7d03b/app/src/main/java/ch/admin/bag/dp3t/util/ENExceptionHelper.java\n */\n@Singleton\nclass ExposureNotificationsErrorHandling @Inject constructor(\n    private val deviceInfo: DeviceInfo,\n    private val supportEmailGenerator: SupportEmailGenerator\n) {\n\n    companion object {\n        const val REQUEST_GMS_ERROR_RESOLUTION = 42\n        private const val ERROR_CODE_UNKNOWN = -2\n    }\n\n    private val CONNECTION_RESULT_PATTERN: Pattern =\n        Pattern.compile(\"ConnectionResult\\\\{[^}]*statusCode=[a-zA-Z0-9_]+\\\\((\\\\d+)\\\\)\")\n\n    fun handle(gmsApiErrorEvent: GmsApiErrorEvent, fragment: Fragment, screen: String) {\n        if (gmsApiErrorEvent.throwable is ApiException) {\n            try {\n                fragment.startIntentSenderForResult(\n                    gmsApiErrorEvent.throwable.status.resolution?.intentSender,\n                    REQUEST_GMS_ERROR_RESOLUTION,\n                    null,\n                    0,\n                    0,\n                    0,\n                    null\n                )\n            } catch (t: Throwable) {\n                showErrorDialog(fragment, gmsApiErrorEvent.throwable, screen)\n            }\n        } else {\n            showErrorDialog(fragment, gmsApiErrorEvent.throwable, screen)\n        }\n    }\n\n    private fun showErrorDialog(fragment: Fragment, throwable: Throwable, screen: String) {\n        val errorMessage = getErrorMessage(throwable, fragment.requireContext())\n        AlertDialog.Builder(fragment.requireContext())\n            .setTitle(fragment.getString(R.string.activation_error))\n            .setMessage(\n                fragment.getString(\n                    R.string.activation_error_reason,\n                    errorMessage\n                )\n            )\n            .setPositiveButton(R.string.support_request_button) { _, _ ->\n                supportEmailGenerator.sendSupportEmail(\n                    fragment.requireActivity(),\n                    fragment.lifecycleScope,\n                    errorCode = errorMessage,\n                    isError = true,\n                    screenOrigin = screen\n                )\n            }.setNegativeButton(R.string.send_data_close) { _, _ -> }.show()\n    }\n\n    private fun getErrorMessage(exception: Throwable, context: Context): String {\n        var errorDetailMessage: String? = null\n        var attachExceptionMessage = true\n        if (exception is ApiException) {\n            val status = exception.status\n            if (status.statusCode == CommonStatusCodes.API_NOT_CONNECTED && status.statusMessage != null) {\n                when (val connectionStatusCode: Int = getConnectionStatusCode(status)) {\n                    ExposureNotificationStatusCodes.FAILED_NOT_SUPPORTED -> if (!deviceInfo.supportsBLE()) {\n                        errorDetailMessage =\n                            context.getString(R.string.activation_error_reason_bluetooth_le)\n                        attachExceptionMessage = false\n                    } else if (!deviceInfo.isUserDeviceOwner()) {\n                        errorDetailMessage =\n                            context.getString(R.string.activation_error_reason_admin)\n                        attachExceptionMessage = false\n                    } else if (!deviceInfo.supportsMultiAds()) {\n                        errorDetailMessage =\n                            context.getString(R.string.activation_error_reason_bluetooth_ad)\n                    } else {\n                        errorDetailMessage =\n                            context.getString(R.string.activation_error_reason_en_api)\n                    }\n                    ExposureNotificationStatusCodes.FAILED_UNAUTHORIZED -> {\n                        errorDetailMessage =\n                            context.getString(R.string.activation_error_reason_unauthorized)\n                    }\n                    else -> errorDetailMessage =\n                        ExposureNotificationStatusCodes.getStatusCodeString(connectionStatusCode)\n                }\n            }\n        }\n        return if (errorDetailMessage != null) {\n            if (attachExceptionMessage) {\n                \"$errorDetailMessage\\n${exception.message}\"\n            } else {\n                errorDetailMessage\n            }\n        } else {\n            exception.message ?: \"\"\n        }\n    }\n\n    private fun getConnectionStatusCode(status: Status): Int {\n        val statusMessage = status.statusMessage\n        if (statusMessage != null) {\n            val matcher: Matcher = CONNECTION_RESULT_PATTERN.matcher(statusMessage)\n            if (matcher.find()) {\n                val connectionStatusCode: String? = matcher.group(1)\n                return connectionStatusCode?.toInt() ?: ERROR_CODE_UNKNOWN\n            }\n        }\n        return ERROR_CODE_UNKNOWN\n    }\n}"
  },
  {
    "path": "app/src/main/kotlin/cz/covid19cz/erouska/exposurenotifications/ExposureNotificationsRepository.kt",
    "content": "package cz.covid19cz.erouska.exposurenotifications\n\nimport android.content.Context\nimport androidx.work.Constraints\nimport androidx.work.ExistingPeriodicWorkPolicy\nimport androidx.work.PeriodicWorkRequestBuilder\nimport androidx.work.WorkManager\nimport com.google.android.gms.nearby.exposurenotification.*\nimport com.google.gson.Gson\nimport cz.covid19cz.erouska.AppConfig\nimport cz.covid19cz.erouska.db.DailySummariesDb\nimport cz.covid19cz.erouska.db.DailySummaryEntity\nimport cz.covid19cz.erouska.db.SharedPrefsRepository\nimport cz.covid19cz.erouska.exposurenotifications.worker.SelfCheckerWorker\nimport cz.covid19cz.erouska.net.ExposureServerRepository\nimport cz.covid19cz.erouska.net.FirebaseFunctionsRepository\nimport cz.covid19cz.erouska.net.model.*\nimport cz.covid19cz.erouska.ui.verification.InvalidTokenException\nimport cz.covid19cz.erouska.ui.verification.NoKeysException\nimport cz.covid19cz.erouska.ui.verification.ReportExposureException\nimport cz.covid19cz.erouska.ui.verification.VerifyException\nimport cz.covid19cz.erouska.utils.L\nimport dagger.hilt.android.qualifiers.ApplicationContext\nimport org.threeten.bp.LocalDate\nimport retrofit2.HttpException\nimport java.io.File\nimport java.util.concurrent.TimeUnit\nimport javax.inject.Inject\nimport javax.inject.Singleton\nimport kotlin.coroutines.resume\nimport kotlin.coroutines.resumeWithException\nimport kotlin.coroutines.suspendCoroutine\n\n@Singleton\nclass ExposureNotificationsRepository @Inject constructor(\n    @ApplicationContext private val context: Context,\n    private val client: ExposureNotificationClient,\n    private val server: ExposureServerRepository,\n    private val cryptoTools: ExposureCryptoTools,\n    private val prefs: SharedPrefsRepository,\n    private val firebaseFunctionsRepository: FirebaseFunctionsRepository,\n    private val db: DailySummariesDb,\n    private val notifications: Notifications\n) {\n\n    suspend fun start() = suspendCoroutine<Void> { cont ->\n        client.start()\n            .addOnSuccessListener {\n                prefs.setExposureNotificationsEnabled(true)\n                cont.resume(it)\n            }.addOnFailureListener {\n                cont.resumeWithException(it)\n            }\n    }\n\n    suspend fun stop() = suspendCoroutine<Void> { cont ->\n        client.stop()\n            .addOnSuccessListener {\n                prefs.setExposureNotificationsEnabled(false)\n                cont.resume(it)\n            }.addOnFailureListener {\n                cont.resumeWithException(it)\n            }\n    }\n\n    suspend fun isEnabled(): Boolean = suspendCoroutine { cont ->\n        client.isEnabled\n            .addOnSuccessListener {\n                cont.resume(it)\n            }.addOnFailureListener {\n                cont.resumeWithException(it)\n            }\n    }\n\n    suspend fun getStatus(): Set<ExposureNotificationStatus> = suspendCoroutine { cont ->\n        client.status\n            .addOnSuccessListener {\n                cont.resume(it)\n            }.addOnFailureListener {\n                cont.resumeWithException(it)\n            }\n    }\n\n    suspend fun provideDiagnosisKeys(\n        keyList: List<DownloadedKeys>\n    ): Boolean = suspendCoroutine { cont ->\n\n        setDiagnosisKeysMapping()\n\n        val filesToImport = mutableListOf<File>()\n        keyList.forEach { keys ->\n            if (keys.isValid()) {\n                if (keys.files.isNotEmpty()) {\n                    L.i(\"Importing keys ${keys.indexUrl}\")\n                    filesToImport.addAll(keys.files)\n                } else {\n                    L.i(\"Import skipped (no new data) ${keys.indexUrl}\")\n                }\n            } else {\n                L.i(\"Import skipped (invalid data) ${keys.indexUrl}\")\n            }\n        }\n\n        if (filesToImport.isEmpty()) {\n            L.i(\"All skipped (empty)\")\n            prefs.setLastKeyImport()\n        } else {\n            client.provideDiagnosisKeys(filesToImport)\n                .addOnSuccessListener {\n                    L.i(\"Import success of ${filesToImport.size} files\")\n                    prefs.setLastKeyImport()\n                    keyList.forEach { keys ->\n                        if (keys.isValid() && keys.files.isNotEmpty()) {\n                            L.d(\"Last successful import for ${keys.indexUrl} is ${keys.getLastUrl()}\")\n                            prefs.setLastKeyExportFileName(keys.indexUrl, keys.getLastUrl())\n                        }\n                    }\n                    cont.resume(true)\n                }.addOnFailureListener {\n                    cont.resumeWithException(it)\n                }\n        }\n    }\n\n    private fun setDiagnosisKeysMapping() {\n        if (System.currentTimeMillis() - prefs.getLastSetDiagnosisKeysDataMapping() > AppConfig.diagnosisKeysDataMappingLimitDays * 24 * 60 * 60 * 1000) {\n            val daysList = AppConfig.daysSinceOnsetToInfectiousness\n            val daysToInfectiousness = mutableMapOf<Int, Int>()\n            for (i in -14..14) {\n                daysToInfectiousness[i] = daysList[i + 14]\n            }\n            val mapping = DiagnosisKeysDataMapping.DiagnosisKeysDataMappingBuilder()\n                .setDaysSinceOnsetToInfectiousness(daysToInfectiousness)\n                .setInfectiousnessWhenDaysSinceOnsetMissing(AppConfig.infectiousnessWhenDaysSinceOnsetMissing)\n                .setReportTypeWhenMissing(AppConfig.reportTypeWhenMissing)\n                .build()\n            try {\n                client.setDiagnosisKeysDataMapping(mapping)\n            } catch (t: Throwable) {\n                L.e(t)\n            } finally {\n                prefs.setLastSetDiagnosisKeysDataMapping()\n            }\n        }\n    }\n\n    suspend fun getDailySummariesFromApi(filter: Boolean = true): List<DailySummary> =\n        suspendCoroutine { cont ->\n\n            val reportTypeWeights = prefs.getReportTypeWeights() ?: AppConfig.reportTypeWeights\n            val attenuationBucketThresholdDb =\n                prefs.getAttenuationBucketThresholdDb()\n                    ?: AppConfig.attenuationBucketThresholdDb\n            val attenuationBucketWeights =\n                prefs.getAttenuationBucketWeights() ?: AppConfig.attenuationBucketWeights\n            val infectiousnessWeights =\n                prefs.getInfectiousnessWeights() ?: AppConfig.infectiousnessWeights\n\n            client.getDailySummaries(\n                DailySummariesConfig.DailySummariesConfigBuilder().apply {\n\n                    setReportTypeWeight(ReportType.CONFIRMED_TEST, reportTypeWeights[1])\n                    setReportTypeWeight(\n                        ReportType.CONFIRMED_CLINICAL_DIAGNOSIS,\n                        reportTypeWeights[2]\n                    )\n                    setReportTypeWeight(ReportType.SELF_REPORT, reportTypeWeights[3])\n                    setReportTypeWeight(ReportType.RECURSIVE, reportTypeWeights[4])\n\n                    setInfectiousnessWeight(Infectiousness.STANDARD, infectiousnessWeights[1])\n                    setInfectiousnessWeight(Infectiousness.HIGH, infectiousnessWeights[2])\n\n                    setAttenuationBuckets(attenuationBucketThresholdDb, attenuationBucketWeights)\n                    setMinimumWindowScore(AppConfig.minimumWindowScore)\n                }.build()\n            ).addOnSuccessListener {\n                if (filter) {\n                    cont.resume(it.filter {\n                        it.summaryData.maximumScore >= AppConfig.minimumWindowScore\n                    })\n                } else {\n                    cont.resume(it)\n                }\n\n            }.addOnFailureListener {\n                cont.resumeWithException(it)\n            }\n        }\n\n\n    suspend fun getDailySummariesFromDbByExposureDate(): List<DailySummaryEntity> {\n        return db.dao().getAllByExposureDate()\n    }\n\n    suspend fun getDailySummariesFromDbByImportDate(): List<DailySummaryEntity> {\n        return db.dao().getAllByImportDate()\n    }\n\n    suspend fun getLastRiskyExposure(demo: Boolean? = false): DailySummaryEntity? {\n        val lastExposure = db.dao().getLatest().firstOrNull()\n        return if (lastExposure == null && demo == true) {\n            getLastRiskyExposureForDemo()\n        } else {\n            lastExposure\n        }\n    }\n\n    private fun getLastRiskyExposureForDemo(): DailySummaryEntity {\n        return DailySummaryEntity(\n            LocalDate.now().minusDays(1).toEpochDay().toInt(),\n            1000.0,\n            1000.0,\n            1000.0,\n            0,\n            notified = false,\n            accepted = false\n        )\n    }\n\n    suspend fun markAsAccepted() {\n        db.dao().markAsAccepted()\n    }\n\n    suspend fun getTemporaryExposureKeyHistory(): List<TemporaryExposureKey> =\n        suspendCoroutine { cont ->\n            client.temporaryExposureKeyHistory.addOnSuccessListener {\n                cont.resume(it)\n            }.addOnFailureListener {\n                cont.resumeWithException(it)\n            }\n        }\n\n    suspend fun getExposureWindows(): List<ExposureWindow> = suspendCoroutine { cont ->\n        client.exposureWindows\n            .addOnSuccessListener {\n                cont.resume(it)\n            }.addOnFailureListener {\n                cont.resumeWithException(it)\n            }\n    }\n\n    suspend fun verifyCode(code: String) {\n        try {\n            val verifyResponse = server.verifyCode(VerifyCodeRequest(code))\n            if (verifyResponse.token != null) {\n                L.i(\"Verify code success\")\n                prefs.setVerificationData(code, verifyResponse.token)\n            } else {\n                throw VerifyException(verifyResponse.error, verifyResponse.errorCode)\n            }\n        } catch (e: HttpException) {\n            var errorResponse: VerifyCodeResponse? = null\n            try {\n                val errorBody = e.response()?.errorBody()?.string()\n                errorResponse =\n                    Gson().fromJson<VerifyCodeResponse>(errorBody, VerifyCodeResponse::class.java)\n            } catch (e: Throwable) {\n                L.e(e)\n            }\n            // called when we have HTTP not 200\n            if (e.code() == 500 && AppConfig.handleError500AsInvalidCode) {\n                // This should be enabled only on the old prod server\n                throw VerifyException(\"Invalid code\", VerifyCodeResponse.ERROR_CODE_INVALID_CODE)\n            } else if (e.code() == 400) {\n                if (errorResponse?.errorCode == VerifyCodeResponse.ERROR_CODE_INVALID_CODE || errorResponse?.errorCode == VerifyCodeResponse.ERROR_CODE_EXPIRED_CODE) {\n                    throw VerifyException(errorResponse.error, errorResponse.errorCode)\n                } else if (AppConfig.handleError400AsExpiredOrUsedCode) {\n                    throw VerifyException(\n                        errorResponse?.error,\n                        VerifyCodeResponse.ERROR_CODE_EXPIRED_USED_CODE\n                    )\n                } else {\n                    throw VerifyException(errorResponse?.error, errorResponse?.errorCode)\n                }\n            } else {\n                throw VerifyException(errorResponse?.error, errorResponse?.errorCode)\n            }\n        }\n    }\n\n    suspend fun publishKeys(): Int {\n        val keys = getTemporaryExposureKeyHistory()\n        if (keys.isEmpty()) {\n            L.e(\"No keys found, upload cancelled\")\n            throw NoKeysException()\n        }\n        if (prefs.hasValidationToken(useLeeway = false)) {\n            val token = prefs.getVerificationToken()!!\n            val hmackey = cryptoTools.newHmacKey()\n            val keyHash = cryptoTools.hashedKeys(keys, hmackey)\n\n            val certificateResponse = server.verifyCertificate(\n                VerifyCertificateRequest(token, keyHash)\n            )\n            if (certificateResponse.error != null) {\n                // We ignore error in certificate verification, only log it. It was causing error in production builds with older server.\n                L.e(\"Error in certificate verification: \" + certificateResponse.error + \" (\" + certificateResponse.errorCode + \")\")\n            } else {\n                L.i(\"Verify certificate success\")\n            }\n\n            val dtos = keys.map {\n                TemporaryExposureKeyDto(\n                    it.keyData.encodeBase64(),\n                    it.rollingStartIntervalNumber,\n                    it.rollingPeriod\n                )\n            }\n            L.i(\"Uploading ${dtos.size} keys\")\n            val response = server.reportExposure(dtos, certificateResponse.certificate, hmackey)\n            response.errorMessage?.let {\n                L.e(\"Report exposure failed: $it\")\n                throw ReportExposureException(it, response.code)\n            }\n            L.i(\"Report exposure success, ${response.insertedExposures} keys inserted\")\n            return response.insertedExposures ?: 0\n        } else {\n            throw InvalidTokenException()\n        }\n    }\n\n    suspend fun checkExposure() {\n        db.dao().deleteOld()\n        val timestamp = System.currentTimeMillis()\n        db.dao().insert(getDailySummariesFromApi().map {\n            DailySummaryEntity(\n                daysSinceEpoch = it.daysSinceEpoch,\n                maximumScore = it.summaryData.maximumScore,\n                scoreSum = it.summaryData.scoreSum,\n                weightenedDurationSum = it.summaryData.weightedDurationSum,\n                importTimestamp = timestamp,\n                notified = false,\n                accepted = false\n            )\n        })\n\n        // latest exposure found in the database\n        val latestExposure = db.dao().getLatest().firstOrNull()\n        val latestExposureTime = latestExposure?.daysSinceEpoch\n\n        // latest exposure that the user was not notified about yet\n        val lastNotifiedExposureTime = db.dao().getLastNotified().firstOrNull()?.daysSinceEpoch\n\n        // the app should show a notification if there is a new exposure the user was not notified\n        // about, yet, or if there is an exposure, but the app has not been opened since the last\n        // last notification\n        val userNotNotifiedAboutLatest = latestExposureTime != null\n                && latestExposureTime != lastNotifiedExposureTime\n        val lastAppUsedTimestamp = prefs.getLastTimeAppVisited()\n        // Suppress showing update screen after launching the app for first time with a new exposure.\n        prefs.setSuppressUpdateScreens(true)\n        // We can use the import timestamp of the exposure as we are interested in comparing whether\n        // the user visited the app after being notified. The notification can take place only when\n        // the exposure is imported.\n        // In case there is no exposure, the timestamp will default to 0.\n        // It won't cause a false positive as the app timestamp will always be greater than 0.\n        val lastExposureTimestamp = latestExposure?.importTimestamp ?: 0L\n        // If the app visit timestamp is not saved yet, it acts as if the user has not opened the app.\n        // To reduce false positives, we should check the timestamp is non-zero.\n        val appNotOpenedSinceLastNotification = (lastAppUsedTimestamp > 0)\n                && (lastExposureTimestamp > lastAppUsedTimestamp)\n\n        val shouldNotify = userNotNotifiedAboutLatest || appNotOpenedSinceLastNotification\n\n        if (shouldNotify) {\n            notifications.showRiskyExposureNotification()\n            db.dao().markAsNotified()\n            firebaseFunctionsRepository.registerNotification()\n        } else {\n            L.i(\n                \"Not showing notification, lastExposure=$latestExposureTime, \" +\n                        \"lastNotifiedExposure=$lastNotifiedExposureTime\"\n            )\n        }\n    }\n\n    fun scheduleSelfChecker() {\n        //TODO: Uncomment if eRouška gets resurrected\n        /*val constraints = Constraints.Builder().build()\n        val worker = PeriodicWorkRequestBuilder<SelfCheckerWorker>(\n            AppConfig.selfCheckerPeriodHours,\n            TimeUnit.HOURS\n        ).setConstraints(constraints)\n            .addTag(SelfCheckerWorker.TAG)\n            .build()\n\n        WorkManager.getInstance(context)\n            .enqueueUniquePeriodicWork(\n                SelfCheckerWorker.TAG,\n                ExistingPeriodicWorkPolicy.REPLACE,\n                worker\n            )*/\n    }\n\n    suspend fun isEligibleToDownloadKeys(): Boolean {\n        return isEnabled() && System.currentTimeMillis() - prefs.getLastKeyImport() >= AppConfig.keyImportPeriodHours * 60 * 60 * 1000\n    }\n\n    fun isLocationlessScanSupported() = client.deviceSupportsLocationlessScanning()\n\n}"
  },
  {
    "path": "app/src/main/kotlin/cz/covid19cz/erouska/exposurenotifications/Notifications.kt",
    "content": "package cz.covid19cz.erouska.exposurenotifications\n\nimport android.app.Notification\nimport android.app.NotificationChannel\nimport android.app.NotificationManager\nimport android.app.PendingIntent\nimport android.content.Context\nimport android.content.Intent\nimport android.graphics.Color\nimport android.os.Build\nimport androidx.annotation.RequiresApi\nimport androidx.annotation.StringRes\nimport androidx.core.app.NotificationCompat\nimport androidx.core.app.NotificationCompat.PRIORITY_MAX\nimport androidx.work.WorkManager\nimport com.google.firebase.auth.FirebaseAuth\nimport com.google.firebase.ktx.Firebase\nimport com.google.firebase.messaging.FirebaseMessaging\nimport com.google.firebase.messaging.ktx.messaging\nimport cz.covid19cz.erouska.AppConfig\nimport cz.covid19cz.erouska.R\nimport cz.covid19cz.erouska.db.SharedPrefsRepository\nimport cz.covid19cz.erouska.ext.isNetworkAvailable\nimport cz.covid19cz.erouska.net.FirebaseFunctionsRepository\nimport cz.covid19cz.erouska.ui.main.MainActivity\nimport cz.covid19cz.erouska.utils.L\nimport dagger.hilt.android.qualifiers.ApplicationContext\nimport kotlinx.coroutines.Dispatchers\nimport kotlinx.coroutines.GlobalScope\nimport kotlinx.coroutines.launch\nimport kotlinx.coroutines.tasks.await\nimport java.util.*\nimport javax.inject.Inject\nimport javax.inject.Singleton\n\n@Singleton\nclass Notifications @Inject constructor(\n    @ApplicationContext private val context: Context,\n    private val prefs: SharedPrefsRepository,\n    private val firebaseFunctionsRepository: FirebaseFunctionsRepository\n) {\n\n    companion object {\n        const val CHANNEL_ID_EXPOSURE = \"EXPOSURE\"\n        const val CHANNEL_ID_OUTDATED_DATA = \"OUTDATED_DATA\"\n        const val CHANNEL_ID_NOT_RUNNING = \"NOT_RUNNING\"\n        const val CHANNEL_ID_DOWNLOADING = \"DOWNLOADING\"\n\n        const val REQ_ID_EXPOSURE = 100\n        const val REQ_ID_OUTDATED_DATA = 101\n        const val REQ_ID_NOT_RUNNING = 102\n        const val REQ_ID_DOWNLOADING = 103\n    }\n\n    fun showErouskaPausedNotification() {\n        showNotification(\n            R.string.dashboard_title_paused,\n            R.string.notification_exposure_notifications_off_text,\n            CHANNEL_ID_NOT_RUNNING\n        )\n    }\n\n    fun showRiskyExposureNotification() {\n        showNotification(\n            R.string.notification_exposure_title,\n            R.string.notification_exposure_text,\n            CHANNEL_ID_EXPOSURE,\n            autoCancel = true,\n            color = Color.RED,\n            priority = PRIORITY_MAX\n        )\n    }\n\n    fun showOutdatedDataNotification() {\n        showNotification(\n            context.getString(R.string.notification_data_outdated_title),\n            AppConfig.recentExposureNotificationTitle,\n            CHANNEL_ID_OUTDATED_DATA\n        )\n\n    }\n\n    private fun showNotification(\n        @StringRes title: Int,\n        @StringRes text: Int,\n        channelId: String,\n        autoCancel: Boolean = false,\n        color: Int? = null,\n        priority: Int? = null\n    ) {\n        showNotification(\n            context.getString(title),\n            context.getString(text),\n            channelId,\n            autoCancel,\n            color,\n            priority\n        )\n    }\n\n    private fun showNotification(\n        title: String,\n        text: String,\n        channelId: String,\n        autoCancel: Boolean = false,\n        color: Int? = null,\n        priority: Int? = null\n    ) {\n        val builder = NotificationCompat.Builder(context, channelId)\n            .setContentTitle(title)\n            .setContentText(text)\n            .setSmallIcon(R.drawable.ic_notification_normal)\n            .setContentIntent(getContentIntent())\n            .setAutoCancel(autoCancel)\n            .setStyle(\n                NotificationCompat.BigTextStyle()\n                    .bigText(text)\n                    .setBigContentTitle(title)\n            )\n\n        color?.let {\n            builder.setColorized(true)\n            builder.color = color\n        }\n        priority?.let {\n            builder.priority = priority\n        }\n\n        (context.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager).notify(\n            when (channelId) {\n                CHANNEL_ID_EXPOSURE -> REQ_ID_EXPOSURE\n                CHANNEL_ID_OUTDATED_DATA -> REQ_ID_OUTDATED_DATA\n                CHANNEL_ID_NOT_RUNNING -> REQ_ID_NOT_RUNNING\n                else -> 0\n            }, builder.build()\n        )\n    }\n\n    fun dismissNotRunningNotification() {\n        dismissNotification(REQ_ID_NOT_RUNNING)\n    }\n\n    fun dismissOudatedDataNotification() {\n        dismissNotification(REQ_ID_OUTDATED_DATA)\n    }\n\n    fun getDownloadingNotification(workId: UUID): Notification {\n        val cancelIntent = WorkManager.getInstance(context)\n            .createCancelPendingIntent(workId)\n        return NotificationCompat.Builder(context, CHANNEL_ID_DOWNLOADING)\n            .setContentTitle(context.getString(R.string.notification_downloading_title))\n            .setContentText(context.getString(R.string.notification_downloading_description))\n            .setContentIntent(getContentIntent())\n            .setSmallIcon(R.drawable.ic_notification_normal)\n            .addAction(\n                android.R.drawable.ic_delete,\n                context.getString(android.R.string.cancel),\n                cancelIntent\n            )\n            .setOngoing(true)\n            .build()\n    }\n\n    suspend fun getCurrentPushToken(): String {\n        val pushToken = FirebaseMessaging.getInstance().token.await()\n        L.d(\"Push token=$pushToken\")\n        return pushToken\n    }\n\n    private fun dismissNotification(id: Int) {\n        (context.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager).cancel(\n            id\n        )\n    }\n\n    private fun getContentIntent(): PendingIntent {\n        //TODO: Uncomment if eRouška gets resurrected\n        //val notificationIntent = Intent(context, MainActivity::class.java)\n        //TODO: Remove if eRouška gets resurrected\n        val notificationIntent = Intent(context, MainActivity::class.java)\n\n        notificationIntent.flags = Intent.FLAG_ACTIVITY_CLEAR_TOP\n\n        return PendingIntent.getActivity(\n            context,\n            0,\n            notificationIntent,\n            PendingIntent.FLAG_UPDATE_CURRENT\n        )\n    }\n\n    fun init() {\n        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {\n            createNotificationChannel(\n                CHANNEL_ID_EXPOSURE,\n                context.getString(R.string.notification_channel_exposure),\n                NotificationManager.IMPORTANCE_MAX,\n                context\n            )\n            createNotificationChannel(\n                CHANNEL_ID_NOT_RUNNING,\n                context.getString(R.string.notification_channel_exposure_notifications_off),\n                NotificationManager.IMPORTANCE_DEFAULT,\n                context\n            )\n            createNotificationChannel(\n                CHANNEL_ID_OUTDATED_DATA,\n                context.getString(R.string.notification_channel_outdated_data),\n                NotificationManager.IMPORTANCE_DEFAULT,\n                context\n            )\n            createNotificationChannel(\n                CHANNEL_ID_DOWNLOADING,\n                context.getString(R.string.notification_channel_downloading),\n                NotificationManager.IMPORTANCE_MIN,\n                context\n            )\n        }\n        if (!prefs.isPushTokenRegistered() && context.isNetworkAvailable() && FirebaseAuth.getInstance().currentUser != null) {\n            GlobalScope.launch {\n                try {\n                    firebaseFunctionsRepository.changePushToken(getCurrentPushToken())\n                } catch (e: Throwable) {\n                    L.e(e)\n                }\n            }\n        }\n        if (!prefs.isPushTopicRegistered() && context.isNetworkAvailable()) {\n            GlobalScope.launch(Dispatchers.IO) {\n                try {\n                    Firebase.messaging.subscribeToTopic(\"budicek\").await()\n                    prefs.setPushTopicRegistered()\n                    L.d(\"Topic 'budicek' registered\")\n                } catch (e: Throwable) {\n                    L.e(e)\n                }\n            }\n        }\n    }\n\n    @RequiresApi(Build.VERSION_CODES.O)\n    private fun createNotificationChannel(\n        id: String,\n        name: String,\n        importance: Int,\n        context: Context\n    ): NotificationChannel {\n        val channel = NotificationChannel(id, name, importance)\n        (context.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager).createNotificationChannel(\n            channel\n        )\n        return channel\n    }\n}"
  },
  {
    "path": "app/src/main/kotlin/cz/covid19cz/erouska/exposurenotifications/receiver/ExposureNotificationBroadcastReceiver.kt",
    "content": "/*\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\npackage cz.covid19cz.erouska.exposurenotifications.receiver\n\nimport android.content.BroadcastReceiver\nimport android.content.Context\nimport android.content.Intent\nimport com.google.android.gms.nearby.exposurenotification.ExposureNotificationClient\nimport cz.covid19cz.erouska.exposurenotifications.ExposureNotificationsRepository\nimport cz.covid19cz.erouska.utils.L\nimport dagger.hilt.android.AndroidEntryPoint\nimport kotlinx.coroutines.GlobalScope\nimport kotlinx.coroutines.launch\nimport javax.inject.Inject\n\n/**\n * Broadcast receiver for callbacks from exposure notification API.\n */\n@AndroidEntryPoint\nclass ExposureNotificationBroadcastReceiver : BroadcastReceiver() {\n\n    @Inject\n    internal lateinit var exposureNotificationsRepository : ExposureNotificationsRepository\n\n    override fun onReceive(context: Context, intent: Intent) {\n        if (intent.action == ExposureNotificationClient.ACTION_EXPOSURE_STATE_UPDATED) {\n            GlobalScope.launch {\n                try {\n                    exposureNotificationsRepository.checkExposure()\n                } catch (e: Throwable) {\n                    L.e(e)\n                }\n            }\n        }\n    }\n}"
  },
  {
    "path": "app/src/main/kotlin/cz/covid19cz/erouska/exposurenotifications/service/PushService.kt",
    "content": "package cz.covid19cz.erouska.exposurenotifications.service\n\nimport com.google.firebase.auth.FirebaseAuth\nimport com.google.firebase.messaging.FirebaseMessagingService\nimport com.google.firebase.messaging.RemoteMessage\nimport cz.covid19cz.erouska.net.ExposureServerRepository\nimport cz.covid19cz.erouska.net.FirebaseFunctionsRepository\nimport cz.covid19cz.erouska.utils.L\nimport dagger.hilt.android.AndroidEntryPoint\nimport kotlinx.coroutines.GlobalScope\nimport kotlinx.coroutines.launch\nimport javax.inject.Inject\n\n@AndroidEntryPoint\nclass PushService : FirebaseMessagingService() {\n\n    @Inject\n    lateinit var firebaseFunctionsRepository: FirebaseFunctionsRepository\n\n    @Inject\n    lateinit var exposureNotificationsServerRepository: ExposureServerRepository\n\n    override fun onMessageReceived(message: RemoteMessage) {\n        super.onMessageReceived(message)\n        L.d(\"Push message received: ${message.data}\")\n        if (message.data.containsKey(\"downloadKeyExport\")) {\n            exposureNotificationsServerRepository.scheduleKeyDownload()\n        }\n    }\n\n    override fun onNewToken(newToken: String) {\n        super.onNewToken(newToken)\n        L.d(\"New push token: $newToken\")\n        if (FirebaseAuth.getInstance().currentUser != null) {\n            GlobalScope.launch {\n                try {\n                    firebaseFunctionsRepository.changePushToken(newToken)\n                } catch (e: Throwable) {\n                    L.e(e)\n                }\n            }\n        }\n    }\n}"
  },
  {
    "path": "app/src/main/kotlin/cz/covid19cz/erouska/exposurenotifications/worker/DownloadKeysWorker.kt",
    "content": "package cz.covid19cz.erouska.exposurenotifications.worker\n\nimport android.content.Context\nimport androidx.hilt.work.HiltWorker\nimport androidx.work.CoroutineWorker\nimport androidx.work.WorkerParameters\nimport cz.covid19cz.erouska.exposurenotifications.ExposureNotificationsRepository\nimport cz.covid19cz.erouska.exposurenotifications.Notifications\nimport cz.covid19cz.erouska.net.ExposureServerRepository\nimport dagger.assisted.Assisted\nimport dagger.assisted.AssistedInject\n\n@HiltWorker\nclass DownloadKeysWorker @AssistedInject constructor(\n    @Assisted val context: Context,\n    @Assisted workerParams: WorkerParameters,\n    private val exposureNotificationsRepository: ExposureNotificationsRepository,\n    private val serverRepository: ExposureServerRepository,\n    private val notifications: Notifications\n) : CoroutineWorker(context, workerParams) {\n\n    companion object {\n        const val TAG = \"DOWNLOAD_KEYS\"\n    }\n\n    override suspend fun doWork(): Result {\n        //TODO: Remove if eRouška gets resurrected\n        /**\n        try {\n            setForeground(ForegroundInfo(Notifications.REQ_ID_DOWNLOADING, notifications.getDownloadingNotification(id)))\n            if (exposureNotificationsRepository.isEligibleToDownloadKeys()) {\n                L.i(\"Starting download keys worker\")\n                Analytics.logEvent(context, Analytics.KEY_EXPORT_DOWNLOAD_STARTED)\n                val result = serverRepository.downloadKeyExport()\n                exposureNotificationsRepository.provideDiagnosisKeys(result)\n                exposureNotificationsRepository.checkExposure()\n                Analytics.logEvent(context, Analytics.KEY_EXPORT_DOWNLOAD_FINISHED)\n            } else {\n                L.i(\"Skipping download keys worker\")\n            }\n            return Result.success()\n        } catch (t: Throwable) {\n            L.e(t)\n            return if (runAttemptCount < 3) {\n                Result.retry()\n            } else {\n                Result.failure()\n            }\n        }**/\n        return Result.success()\n    }\n}"
  },
  {
    "path": "app/src/main/kotlin/cz/covid19cz/erouska/exposurenotifications/worker/SelfCheckerWorker.kt",
    "content": "package cz.covid19cz.erouska.exposurenotifications.worker\n\nimport android.content.Context\nimport androidx.hilt.work.HiltWorker\nimport androidx.work.CoroutineWorker\nimport androidx.work.WorkerParameters\nimport cz.covid19cz.erouska.db.SharedPrefsRepository\nimport cz.covid19cz.erouska.exposurenotifications.ExposureNotificationsRepository\nimport cz.covid19cz.erouska.exposurenotifications.Notifications\nimport dagger.assisted.Assisted\nimport dagger.assisted.AssistedInject\n\n@HiltWorker\nclass SelfCheckerWorker @AssistedInject constructor(\n    @Assisted val context: Context,\n    @Assisted workerParams: WorkerParameters,\n    private val prefs: SharedPrefsRepository,\n    private val exposureNotificationsRepository: ExposureNotificationsRepository,\n    private val notifications: Notifications\n) : CoroutineWorker(context, workerParams) {\n\n    companion object {\n        const val TAG = \"SELF_CHECKER\"\n    }\n\n    override suspend fun doWork(): Result {\n        //TODO: Remove if eRouška gets resurrected\n        /**\n        val hour = Calendar.getInstance(Locale.getDefault()).get(Calendar.HOUR_OF_DAY)\n        if (hour in 9..19) {\n            if (!exposureNotificationsRepository.isEnabled()) {\n                notifications.showErouskaPausedNotification()\n            }\n            if (prefs.hasOutdatedKeyData()) {\n                notifications.showOutdatedDataNotification()\n            }\n        }**/\n        return Result.success()\n    }\n\n}"
  },
  {
    "path": "app/src/main/kotlin/cz/covid19cz/erouska/ext/ByteArray.kt",
    "content": "package cz.covid19cz.erouska.ext\n\nval ByteArray.asHexLower inline get() = this.joinToString(separator = \"\"){ String.format(\"%02x\",(it.toInt() and 0xFF))}\nval String.hexAsByteArray inline get() = this.chunked(2).map { it.toUpperCase().toInt(16).toByte() }.toByteArray()"
  },
  {
    "path": "app/src/main/kotlin/cz/covid19cz/erouska/ext/Context.kt",
    "content": "package cz.covid19cz.erouska.ext\n\nimport android.app.Activity\nimport android.bluetooth.BluetoothManager\nimport android.content.ActivityNotFoundException\nimport android.content.Context\nimport android.content.Intent\nimport android.content.pm.PackageManager\nimport android.graphics.BitmapFactory\nimport android.location.LocationManager\nimport android.net.ConnectivityManager\nimport android.net.NetworkCapabilities\nimport android.net.Uri\nimport android.os.Build\nimport android.provider.Settings\nimport androidx.annotation.StringRes\nimport androidx.browser.customtabs.CustomTabsIntent\nimport androidx.core.app.ShareCompat\nimport androidx.core.content.ContextCompat\nimport androidx.core.location.LocationManagerCompat\nimport cz.covid19cz.erouska.AppConfig\nimport cz.covid19cz.erouska.R\nimport cz.covid19cz.erouska.ui.base.BaseFragment\nimport cz.covid19cz.erouska.utils.CustomTabHelper\nimport cz.covid19cz.erouska.utils.L\n\nfun Context.isBtEnabled(): Boolean {\n    val btManager = getSystemService(Context.BLUETOOTH_SERVICE) as BluetoothManager\n    return btManager.adapter.isEnabled\n}\n\nfun Context?.isLocationEnabled(): Boolean {\n    val locationManager = this?.getSystemService(LocationManager::class.java) ?: return false\n    return LocationManagerCompat.isLocationEnabled(locationManager)\n}\n\nfun Context.openPermissionsScreen() {\n    val intent = Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS)\n    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)\n    val uri: Uri = Uri.fromParts(\"package\", packageName, null)\n    intent.data = uri\n    startActivity(intent)\n}\n\n@Suppress(\"DEPRECATION\")\nfun Context.isNetworkAvailable(): Boolean {\n    val connectivityManager =\n        getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager\n    with(connectivityManager) {\n        return if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {\n            activeNetworkInfo?.isConnected\n        } else {\n            getNetworkCapabilities(activeNetwork)?.hasCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)\n        } ?: false\n    }\n}\n\nfun Context.shareApp() {\n    val text = getString(R.string.share_app_text, AppConfig.shareAppDynamicLink)\n    val intent = Intent(Intent.ACTION_SEND)\n    intent.type = \"text/plain\"\n    intent.putExtra(Intent.EXTRA_TEXT, text)\n    startActivity(Intent.createChooser(intent, getString(R.string.share_app_title)))\n}\n\nfun BaseFragment<*, *>.showWeb(url: String, customTabHelper: CustomTabHelper) {\n    val intent = CustomTabsIntent.Builder()\n        .setShowTitle(true)\n        .setToolbarColor(ContextCompat.getColor(requireContext(), R.color.colorPrimary))\n        .setCloseButtonIcon(\n            BitmapFactory.decodeResource(\n                resources,\n                R.drawable.ic_action_up\n            )\n        )\n        .build()\n    if (customTabHelper.chromePackageName != null) {\n        intent.launchUrl(requireContext(), Uri.parse(url))\n    } else {\n        // Custom Tabs not available\n        try {\n            startActivity(\n                Intent(\n                    Intent.ACTION_VIEW,\n                    Uri.parse(url)\n                )\n            )\n        } catch (e: ActivityNotFoundException) {\n            L.e(e)\n        }\n    }\n}\n\nfun Activity.sendEmail(\n    recipient: String,\n    subject: Int,\n    file: Uri? = null,\n    @StringRes emailBody: Int\n) {\n    val originalIntent = createEmailShareIntent(recipient, subject, file, emailBody)\n    val emailFilterIntent = Intent(Intent.ACTION_SENDTO, Uri.parse(\"mailto:\"))\n    val originalIntentResults = packageManager.queryIntentActivities(originalIntent, 0)\n    val emailFilterIntentResults = packageManager.queryIntentActivities(emailFilterIntent, 0)\n    val targetedIntents = originalIntentResults\n        .filter { originalResult -> emailFilterIntentResults.any { originalResult.activityInfo.packageName == it.activityInfo.packageName } }\n        .map {\n            createEmailShareIntent(recipient, subject, file, emailBody).apply {\n                `package` = it.activityInfo.packageName\n            }\n        }\n        .toMutableList()\n    if (targetedIntents.size > 0) {\n        val finalIntent = Intent.createChooser(\n            targetedIntents.removeAt(0),\n            getString(R.string.support_email_chooser)\n        )\n        finalIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, targetedIntents.toTypedArray())\n        startActivity(finalIntent)\n    }\n}\n\nprivate fun Activity.createEmailShareIntent(\n    recipient: String,\n    subject: Int,\n    file: Uri?,\n    @StringRes emailBody: Int\n): Intent {\n    val builder = ShareCompat.IntentBuilder.from(this)\n        .setType(\"message/rfc822\")\n        .setEmailTo(arrayOf(recipient))\n        .setSubject(getString(subject))\n        .setText(getString(emailBody))\n    if (file != null) {\n        builder.setStream(file)\n    }\n    return builder.intent\n}\n\nfun Context.getInstallDay(): String {\n    val packageInfo = packageManager.getPackageInfo(packageName, PackageManager.GET_PERMISSIONS)\n    val installTimestamp = packageInfo.firstInstallTime\n    return if (installTimestamp > 0) {\n        installTimestamp.timestampToDate()\n    } else {\n        \"N/A\"\n    }\n}\n"
  },
  {
    "path": "app/src/main/kotlin/cz/covid19cz/erouska/ext/Int.kt",
    "content": "package cz.covid19cz.erouska.ext\n\nimport java.text.SimpleDateFormat\nimport java.util.*\n\nfun Int.daysSinceEpochToDateString(pattern: String = \"d. M. yyyy\"): String {\n    val formatter = SimpleDateFormat(pattern, Locale.getDefault())\n    formatter.timeZone = TimeZone.getTimeZone(\"UTC\")\n    val dateTime = Calendar.getInstance(TimeZone.getTimeZone(\"UTC\")).apply {\n        timeInMillis = (toLong() * 24 * 60 * 60 * 1000)\n    }\n    return formatter.format(dateTime.time)\n}"
  },
  {
    "path": "app/src/main/kotlin/cz/covid19cz/erouska/ext/Long.kt",
    "content": "package cz.covid19cz.erouska.ext\n\nimport java.text.SimpleDateFormat\nimport java.util.*\n\nfun Long.timestampToDate(): String {\n    return SimpleDateFormat(\"d. M. yyyy\", Locale.getDefault()).format(Date(this))\n}\n\nfun Long.timestampToTime(): String {\n    return SimpleDateFormat(\"H:mm\", Locale.getDefault()).format(Date(this))\n}\n\nfun Long.timestampToDateTime(): String {\n    return SimpleDateFormat(\"d.M.yyyy H:mm\", Locale.getDefault()).format(Date(this))\n}"
  },
  {
    "path": "app/src/main/kotlin/cz/covid19cz/erouska/ext/Rx.kt",
    "content": "package cz.covid19cz.erouska.ext\n\nimport io.reactivex.Flowable\nimport io.reactivex.Maybe\nimport io.reactivex.Observable\nimport io.reactivex.Single\nimport io.reactivex.android.schedulers.AndroidSchedulers\nimport io.reactivex.disposables.Disposable\nimport io.reactivex.schedulers.Schedulers\n\nfun <T> Observable<T>.execute(onNext : (t :T) -> Unit, onError : (t :Throwable) -> Unit): Disposable {\n    return inBackground().subscribe(onNext, onError)\n}\n\nfun <T> Single<T>.execute(onNext : (t :T) -> Unit, onError : (t :Throwable) -> Unit): Disposable {\n    return inBackground().subscribe(onNext, onError)\n}\n\nfun <T> Maybe<T>.execute(onSuccess : (t :T) -> Unit, onError : (t :Throwable) -> Unit): Disposable {\n    return inBackground().subscribe(onSuccess, onError)\n}\n\nfun <T> Flowable<T>.execute(onNext : (t :T) -> Unit, onError : (t :Throwable) -> Unit): Disposable {\n    return inBackground().subscribe(onNext, onError)\n}\n\nfun <T> Observable<T>.inBackground(): Observable<T> {\n    return subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread())\n}\n\nfun <T> Single<T>.inBackground(): Single<T> {\n    return subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread())\n}\n\nfun <T> Maybe<T>.inBackground(): Maybe<T> {\n    return subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread())\n}\n\nfun <T> Flowable<T>.inBackground(): Flowable<T> {\n    return subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread())\n}"
  },
  {
    "path": "app/src/main/kotlin/cz/covid19cz/erouska/ext/String.kt",
    "content": "package cz.covid19cz.erouska.ext\n\nfun String.toIntList() : List<Int>{\n    return this.split(\",\").map { it.toInt() }\n}"
  },
  {
    "path": "app/src/main/kotlin/cz/covid19cz/erouska/ext/View.kt",
    "content": "package cz.covid19cz.erouska.ext\n\nimport android.content.Context\nimport android.view.View\nimport android.view.inputmethod.EditorInfo\nimport android.view.inputmethod.InputMethodManager\nimport android.widget.EditText\n\nfun EditText.setOnDoneListener(onDone: () -> Unit) {\n    setOnEditorActionListener { _, actionId, _ ->\n        if (actionId == EditorInfo.IME_ACTION_DONE) {\n            onDone()\n            return@setOnEditorActionListener true\n        }\n        return@setOnEditorActionListener false\n    }\n}\n\nfun View.attachKeyboardController() {\n    setOnFocusChangeListener { _, hasFocus ->\n        if (hasFocus) {\n            showKeyboard()\n        } else {\n            hideKeyboard()\n        }\n    }\n}\n\nfun View.showKeyboard() {\n    post {\n        val imm = context.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager\n        imm.showSoftInput(this, InputMethodManager.SHOW_IMPLICIT)\n    }\n}\n\nfun View.hideKeyboard() {\n    post {\n        val im = context.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager\n        im.hideSoftInputFromWindow(this.windowToken, 0)\n    }\n}\n\nfun View.hide() {\n    visibility = View.GONE\n}\n\nfun View.show() {\n    visibility = View.VISIBLE\n}"
  },
  {
    "path": "app/src/main/kotlin/cz/covid19cz/erouska/net/ExposureServerRepository.kt",
    "content": "package cz.covid19cz.erouska.net\n\nimport android.content.Context\nimport androidx.work.*\nimport com.google.gson.Gson\nimport com.google.gson.GsonBuilder\nimport com.google.gson.reflect.TypeToken\nimport cz.covid19cz.erouska.AppConfig\nimport cz.covid19cz.erouska.BuildConfig\nimport cz.covid19cz.erouska.R\nimport cz.covid19cz.erouska.db.SharedPrefsRepository\nimport cz.covid19cz.erouska.exposurenotifications.worker.DownloadKeysWorker\nimport cz.covid19cz.erouska.net.api.KeyServerApi\nimport cz.covid19cz.erouska.net.api.VerificationServerApi\nimport cz.covid19cz.erouska.net.model.*\nimport cz.covid19cz.erouska.utils.L\nimport dagger.hilt.android.qualifiers.ApplicationContext\nimport kotlinx.coroutines.*\nimport okhttp3.Interceptor\nimport okhttp3.OkHttpClient\nimport okhttp3.Response\nimport okhttp3.logging.HttpLoggingInterceptor\nimport retrofit2.Retrofit\nimport retrofit2.converter.gson.GsonConverterFactory\nimport java.io.DataInputStream\nimport java.io.File\nimport java.io.FileOutputStream\nimport java.io.InputStream\nimport java.lang.reflect.Type\nimport java.net.URL\nimport java.util.concurrent.TimeUnit\nimport javax.inject.Inject\nimport javax.inject.Singleton\n\n@Singleton\nclass ExposureServerRepository @Inject constructor(\n    @ApplicationContext private val context: Context,\n    private val prefs: SharedPrefsRepository\n) {\n\n    private val okhttpBuilder by lazy {\n        val builder = OkHttpClient.Builder()\n        builder.addInterceptor(UserAgentInterceptor())\n        if (BuildConfig.DEBUG) {\n            builder.addInterceptor(HttpLoggingInterceptor().apply {\n                level = HttpLoggingInterceptor.Level.BODY\n            })\n        }\n        builder\n    }\n\n    private val keyServerClient by lazy {\n        Retrofit.Builder()\n            .baseUrl(context.getString(R.string.key_server_base_url))\n            .addConverterFactory(GsonConverterFactory.create(GsonBuilder().create()))\n            .client(okhttpBuilder.build())\n            .build().create(KeyServerApi::class.java)\n    }\n\n    private val verificationServerClient by lazy {\n        Retrofit.Builder()\n            .baseUrl(context.getString(R.string.verification_server_base_url))\n            .addConverterFactory(GsonConverterFactory.create(GsonBuilder().create()))\n            .client(okhttpBuilder.addInterceptor {\n                val request = it.request().newBuilder()\n                    .addHeader(\"X-API-Key\", AppConfig.verificationServerApiKey)\n                    .build()\n                it.proceed(request)\n            }.build())\n            .build().create(VerificationServerApi::class.java)\n    }\n\n    suspend fun reportExposure(\n        temporaryExposureKeyDto: List<TemporaryExposureKeyDto>,\n        certificate: String,\n        hmackey: String\n    ): ExposureResponse {\n        return withContext(Dispatchers.IO) {\n            keyServerClient.reportExposure(\n                ExposureRequest(\n                    temporaryExposureKeys = temporaryExposureKeyDto,\n                    verificationPayload = certificate,\n                    hmackey = hmackey,\n                    revisionToken = null,\n                    traveler = prefs.isTraveller(),\n                    consentToFederation = prefs.isConsentToFederation(),\n                    reportType = AppConfig.efgsReportType,\n                    visitedCountries = if (prefs.isTraveller()) AppConfig.efgsVisitedCountries else emptyList(),\n                    symptomOnsetInterval = prefs.getSymptomOnsetInterval()\n                )\n            )\n        }\n    }\n\n    suspend fun verifyCode(request: VerifyCodeRequest): VerifyCodeResponse {\n        return withContext(Dispatchers.IO) {\n            verificationServerClient.verifyCode(request)\n        }\n    }\n\n    suspend fun verifyCertificate(request: VerifyCertificateRequest): VerifyCertificateResponse {\n        return withContext(Dispatchers.IO) {\n            verificationServerClient.verifyCertificate(request)\n        }\n    }\n\n    suspend fun cover(request: CoverRequest): CoverResponse {\n        return withContext(Dispatchers.IO) {\n            verificationServerClient.cover(request)\n        }\n    }\n\n    suspend fun downloadKeyExport(): List<DownloadedKeys> {\n        return withContext(Dispatchers.IO) {\n            val countryUrls = parseCountryUrls(\n                if (prefs.isTraveller()) {\n                    AppConfig.keyExportEuTravellerUrls\n                } else {\n                    AppConfig.keyExportNonTravellerUrls\n                }\n            )\n            val keysList = mutableListOf<DownloadedKeys>()\n            val keysListTasks = mutableListOf<Deferred<DownloadedKeys?>>()\n            countryUrls.forEach {\n                keysListTasks.add(async { downloadIndex(it) })\n            }\n            keysList.addAll(keysListTasks.awaitAll().filterNotNull())\n            return@withContext keysList\n        }\n    }\n\n    private fun parseCountryUrls(json: String): List<String> {\n        val countryUrlListType: Type = object : TypeToken<ArrayList<CountryUrl>?>() {}.type\n        val countryUrls: ArrayList<CountryUrl> = Gson().fromJson(json, countryUrlListType)\n        return countryUrls.map { it.url }\n    }\n\n    private suspend fun downloadIndex(url: String): DownloadedKeys? {\n        return withContext(Dispatchers.IO) {\n            val indexContent = readURLContent(url)\n            if (indexContent != null) {\n                val lastDownloadedFile = prefs.lastKeyExportFileName(url)\n                var fileNames = indexContent.split('\\n')\n\n                // Find index of last downloaded file and get everything after it\n                val indexOfLastDownload = fileNames.indexOf(lastDownloadedFile)\n                if (indexOfLastDownload != -1) {\n                    fileNames = fileNames.subList(indexOfLastDownload + 1, fileNames.size)\n                }\n\n                val extractedFiles = mutableListOf<File>()\n                val zipUrls = fileNames.map { AppConfig.keyExportUrl + it }\n\n                val downloads = mutableListOf<Deferred<File?>>()\n                zipUrls.forEach {\n                    downloads.add(async { downloadFile(it) })\n                }\n                extractedFiles.addAll(downloads.awaitAll().filterNotNull())\n                return@withContext DownloadedKeys(url, extractedFiles, fileNames)\n            } else {\n                return@withContext null\n            }\n        }\n    }\n\n    private fun downloadFile(zipfile: String): File? {\n        try {\n            val dir = File(context.cacheDir.path + \"/export/\")\n            val fileName = if (zipfile.contains(\"efgs\")) {\n                // EFGS files; e.g. efgs_de/1607061600-1607068800-00001.zip\n                zipfile.split(\"/\").takeLast(2).joinToString(\"/\")\n            } else {\n                // CZ files; e.g. 1607061600-1607068800-00001.zip\n                zipfile.substring(zipfile.lastIndexOf(\"/\") + 1)\n            }\n            val file = File(dir.absolutePath + \"/\" + fileName)\n\n            checkNotNull(file.parentFile).mkdirs()\n\n            file.createNewFile()\n            val u = URL(zipfile)\n            val inputStream: InputStream = u.openStream()\n            val dis = DataInputStream(inputStream)\n            val buffer = ByteArray(1024)\n            var length: Int\n            val fos = FileOutputStream(file)\n            while (dis.read(buffer).also { length = it } > 0) {\n                fos.write(buffer, 0, length)\n            }\n            return file\n        } catch (t: Throwable) {\n            L.e(t)\n        }\n        return null\n    }\n\n    private fun readURLContent(url: String): String? {\n        return try {\n            val indexConnection = URL(url).openConnection()\n            val indexInputStream = indexConnection.getInputStream()\n\n            indexInputStream.readBytes().toString(Charsets.UTF_8)\n        } catch (e: Throwable) {\n            L.w(\"Skipping index download due to $e\")\n            null\n        }\n    }\n\n    fun scheduleKeyDownload() {\n        //TODO: Uncomment if eRouška gets resurrected\n        /*val constraints = Constraints.Builder()\n            .setRequiredNetworkType(NetworkType.CONNECTED)\n            .build()\n        val worker = PeriodicWorkRequestBuilder<DownloadKeysWorker>(\n            AppConfig.keyImportPeriodHours,\n            TimeUnit.HOURS\n        ).setConstraints(constraints)\n            .addTag(DownloadKeysWorker.TAG)\n            .build()\n\n        WorkManager.getInstance(context)\n            .enqueueUniquePeriodicWork(\n                DownloadKeysWorker.TAG,\n                ExistingPeriodicWorkPolicy.REPLACE,\n                worker\n            )*/\n    }\n\n    fun deleteFiles() {\n        val extractedDir = File(context.cacheDir.path + \"/export/\")\n        extractedDir.deleteRecursively()\n        prefs.clearLastKeyExportFileName()\n        prefs.clearLastKeyImportTime()\n    }\n\n    class UserAgentInterceptor : Interceptor {\n\n        companion object {\n            const val USER_AGENT = \"User-agent\"\n        }\n\n        private val userAgent =\n            \"eRouska-Android-${BuildConfig.BUILD_TYPE}/${BuildConfig.VERSION_NAME}\"\n\n        override fun intercept(chain: Interceptor.Chain): Response {\n            val requestBuilder = chain.request().newBuilder()\n            requestBuilder.addHeader(USER_AGENT, userAgent)\n            return chain.proceed(requestBuilder.build())\n        }\n\n    }\n}"
  },
  {
    "path": "app/src/main/kotlin/cz/covid19cz/erouska/net/FirebaseFunctionsRepository.kt",
    "content": "package cz.covid19cz.erouska.net\n\nimport com.google.firebase.auth.FirebaseAuth\nimport com.google.firebase.functions.ktx.functions\nimport com.google.firebase.ktx.Firebase\nimport com.google.gson.Gson\nimport cz.covid19cz.erouska.AppConfig.FIREBASE_REGION\nimport cz.covid19cz.erouska.db.SharedPrefsRepository\nimport cz.covid19cz.erouska.net.exception.UnauthrorizedException\nimport cz.covid19cz.erouska.net.model.CovidStatsResponse\nimport cz.covid19cz.erouska.net.model.DownloadMetricsResponse\nimport cz.covid19cz.erouska.utils.DeviceInfo\nimport cz.covid19cz.erouska.utils.L\nimport cz.covid19cz.erouska.utils.LocaleUtils\nimport kotlinx.coroutines.Dispatchers\nimport kotlinx.coroutines.tasks.await\nimport kotlinx.coroutines.withContext\nimport javax.inject.Inject\nimport javax.inject.Singleton\nimport kotlin.coroutines.suspendCoroutine\n\n@Singleton\nclass FirebaseFunctionsRepository @Inject constructor(\n    private val deviceInfo: DeviceInfo,\n    private val prefs: SharedPrefsRepository\n) {\n\n    /**\n     * Creates a new registration, saved to registrations collection.\n     */\n    suspend fun register(pushRegistrationToken: String) {\n        withContext(Dispatchers.IO) {\n            val data = hashMapOf(\n                \"platform\" to \"android\",\n                \"platformVersion\" to deviceInfo.getAndroidVersion(),\n                \"manufacturer\" to deviceInfo.getManufacturer(),\n                \"model\" to deviceInfo.getDeviceName(),\n                \"locale\" to LocaleUtils.getLocale(),\n                \"pushRegistrationToken\" to pushRegistrationToken\n            )\n            val token = checkNotNull(callFunction(\"RegisterEhrid\", data)[\"customToken\"])\n            FirebaseAuth.getInstance().signInWithCustomToken(token).await()\n            if (FirebaseAuth.getInstance().currentUser == null) {\n                throw RuntimeException(\"Sign in failed\")\n            }\n            prefs.setPushTokenRegistered()\n        }\n    }\n\n    /**\n     * Returns data from collections covidDataIncrease and covidDataTotal for the given input date (if date is missing, TODAY is used)\n     */\n    suspend fun getStats(date: String? = null): CovidStatsResponse {\n        return withContext(Dispatchers.IO) {\n            val data = hashMapOf(\n                \"idToken\" to getIdToken(),\n                \"date\" to date\n            )\n            val covidStats = callFunction(\"GetCovidData\", data)\n            Gson().fromJson(covidStats.toString(), CovidStatsResponse::class.java)\n        }\n    }\n\n    /**\n     * Returns data from collections DownloadMetrics\n     */\n    suspend fun getDownloadMetrics(): DownloadMetricsResponse {\n        val covidStats = callFunction(\"DownloadMetrics\")\n        return Gson().fromJson(covidStats.toString(), DownloadMetricsResponse::class.java)\n    }\n\n    /**\n     * In the registrations collection, changes the value of lastNotificationStatus attribute to sent and the value of lastNotificationUpdatedAt attribute to CURRENT_TIMESTAMP for a given idToken.\n     */\n    suspend fun registerNotification() {\n        withContext(Dispatchers.IO) {\n            val data = hashMapOf(\n                \"idToken\" to getIdToken()\n            )\n            callFunction(\"RegisterNotification\", data)\n        }\n    }\n\n    /**\n     * Changes push token\n     */\n    suspend fun changePushToken(pushRegistrationToken: String) {\n        withContext(Dispatchers.IO) {\n            val data = hashMapOf(\n                \"idToken\" to getIdToken(),\n                \"pushRegistrationToken\" to pushRegistrationToken\n            )\n            callFunction(\"ChangePushToken\", data)\n            prefs.setPushTokenRegistered()\n        }\n    }\n\n    private suspend fun getIdToken(): String = suspendCoroutine { cont ->\n        if (FirebaseAuth.getInstance().currentUser != null) {\n            FirebaseAuth.getInstance().currentUser?.getIdToken(false)?.addOnSuccessListener {\n                cont.resumeWith(Result.success(checkNotNull(it.token)))\n            }?.addOnFailureListener {\n                cont.resumeWith(Result.failure(it))\n            }\n        } else {\n            cont.resumeWith(Result.failure(UnauthrorizedException()))\n        }\n    }\n\n    /**\n     * Generic function for calling Firebase Function.\n     */\n    private suspend fun callFunction(\n        name: String,\n        data: Map<String, String?>? = null\n    ): Map<String, String> {\n        L.d(\"Calling function $name with data: $data\")\n        @Suppress(\"UNCHECKED_CAST\")\n        val response = Firebase.functions(FIREBASE_REGION).getHttpsCallable(name).call(data)\n            .continueWith { task ->\n                (task.result?.data as HashMap<String, String>)\n            }.await()\n        L.d(\"Function $name response: $response\")\n        return response\n    }\n}"
  },
  {
    "path": "app/src/main/kotlin/cz/covid19cz/erouska/net/api/KeyServerApi.kt",
    "content": "package cz.covid19cz.erouska.net.api\n\nimport cz.covid19cz.erouska.net.model.ExposureRequest\nimport cz.covid19cz.erouska.net.model.ExposureResponse\nimport retrofit2.http.Body\nimport retrofit2.http.POST\n\ninterface KeyServerApi {\n\n    @POST(\"PublishKeys\")\n    suspend fun reportExposure(@Body exposureRequest: ExposureRequest) : ExposureResponse\n}"
  },
  {
    "path": "app/src/main/kotlin/cz/covid19cz/erouska/net/api/VerificationServerApi.kt",
    "content": "package cz.covid19cz.erouska.net.api\n\nimport cz.covid19cz.erouska.net.model.*\nimport retrofit2.http.Body\nimport retrofit2.http.POST\n\ninterface VerificationServerApi {\n\n    @POST(\"api/verify\")\n    suspend fun verifyCode(@Body request: VerifyCodeRequest): VerifyCodeResponse\n\n    @POST(\"api/certificate\")\n    suspend fun verifyCertificate(@Body request: VerifyCertificateRequest): VerifyCertificateResponse\n\n    @POST(\"api/cover\")\n    suspend fun cover(@Body request: CoverRequest): CoverResponse\n}"
  },
  {
    "path": "app/src/main/kotlin/cz/covid19cz/erouska/net/exception/UnauthrorizedException.kt",
    "content": "package cz.covid19cz.erouska.net.exception\n\nclass UnauthrorizedException : Throwable()"
  },
  {
    "path": "app/src/main/kotlin/cz/covid19cz/erouska/net/model/CovidDataModel.kt",
    "content": "package cz.covid19cz.erouska.net.model\n\nimport com.google.gson.annotations.SerializedName\n\ndata class CovidStatsResponse(\n    @SerializedName(\"date\") val date: String?,\n    @SerializedName(\"pcrTestsTotal\") val testsTotal: Int?,\n    @SerializedName(\"pcrTestsIncrease\") val testsIncrease: Int?,\n    @SerializedName(\"pcrTestsIncreaseDate\") val testsIncreaseDate: String?,\n    @SerializedName(\"antigenTestsTotal\") val antigenTestsTotal: Int?,\n    @SerializedName(\"antigenTestsIncrease\") val antigenTestsIncrease: Int?,\n    @SerializedName(\"antigenTestsIncreaseDate\") val antigenTestsIncreaseDate: String?,\n    @SerializedName(\"vaccinationsTotal\") val vaccinationsTotal: Int?,\n    @SerializedName(\"vaccinationsIncrease\") val vaccinationsIncrease: Int?,\n    @SerializedName(\"vaccinationsIncreaseDate\") val vaccinationsIncreaseDate: String?,\n    @SerializedName(\"confirmedCasesTotal\") val confirmedCasesTotal: Int?,\n    @SerializedName(\"confirmedCasesIncrease\") val confirmedCasesIncrease: Int?,\n    @SerializedName(\"confirmedCasesIncreaseDate\") val confirmedCasesIncreaseDate: String?,\n    @SerializedName(\"activeCasesTotal\") val activeCasesTotal: Int?,\n    @SerializedName(\"activeCasesIncrease\") val activeCasesIncrease: Int?,\n    @SerializedName(\"curedTotal\") val curedTotal: Int?,\n    @SerializedName(\"curedIncrease\") val curedIncrease: Int?,\n    @SerializedName(\"deceasedTotal\") val deceasedTotal: Int?,\n    @SerializedName(\"deceasedIncrease\") val deceasedIncrease: Int?,\n    @SerializedName(\"currentlyHospitalizedTotal\") val currentlyHospitalizedTotal: Int?,\n    @SerializedName(\"currentlyHospitalizedIncrease\") val currentlyHospitalizedIncrease: Int?,\n    @SerializedName(\"vaccinationsTotalFirstDose\") val vaccinationsTotalFirstDose: Int?,\n    @SerializedName(\"vaccinationsDailyFirstDose\") val vaccinationsDailyFirstDose: Int?,\n    @SerializedName(\"vaccinationsTotalSecondDose\") val vaccinationsTotalSecondDose: Int?,\n    @SerializedName(\"vaccinationsDailySecondDose\") val vaccinationsDailySecondDose: Int?,\n    @SerializedName(\"vaccinationsDailyDosesDate\") val vaccinationsDailyDosesDate: String?,\n)\n\ndata class DownloadMetricsResponse(\n    @SerializedName(\"modified\") val modified: String?,\n    @SerializedName(\"date\") val date: String?,\n    @SerializedName(\"activations_yesterday\") val activationsYesterday: Int?,\n    @SerializedName(\"activations_total\") val activationsTotal: Int?,\n    @SerializedName(\"key_publishers_yesterday\") val keyPublishersYesterday: Int?,\n    @SerializedName(\"key_publishers_total\") val keyPublishersTotal: Int?,\n    @SerializedName(\"notifications_yesterday\") val notificationsYesterday: Int?,\n    @SerializedName(\"notifications_total\") val notificationsTotal: Int?\n)"
  },
  {
    "path": "app/src/main/kotlin/cz/covid19cz/erouska/net/model/DownloadedKeys.kt",
    "content": "package cz.covid19cz.erouska.net.model\n\nimport cz.covid19cz.erouska.utils.L\nimport java.io.File\n\ndata class DownloadedKeys(\n    val indexUrl: String,\n    val files : List<File>,\n    val urls : List<String>\n) {\n    fun getLastUrl() : String{\n        return urls.last()\n    }\n\n    fun isValid(): Boolean {\n        if (files.size != urls.size){\n            L.w(\"Inconsistent download (${files.size}/${urls.size})\")\n        }\n        return files.size == urls.size\n    }\n}"
  },
  {
    "path": "app/src/main/kotlin/cz/covid19cz/erouska/net/model/KeyServerModel.kt",
    "content": "package cz.covid19cz.erouska.net.model\n\nimport android.util.Base64\nimport java.util.*\n\ndata class ExposureRequest(\n    val temporaryExposureKeys: List<TemporaryExposureKeyDto>,\n    val verificationPayload: String?,\n    val hmackey: String?,\n    val revisionToken: String?,\n    val traveler: Boolean,\n    val reportType: String,\n    val visitedCountries: List<String>,\n    val consentToFederation: Boolean = true,\n    val symptomOnsetInterval: Long? = null,\n    val padding: String = Base64.encodeToString(UUID.randomUUID().toString().toByteArray(), Base64.NO_WRAP),\n    val healthAuthorityID: String = \"cz.covid19cz.erouska\",\n)\n\ndata class TemporaryExposureKeyDto(\n    val key: String,\n    val rollingStartNumber: Int,\n    val rollingPeriod: Int\n)\n\ndata class ExposureResponse(\n    val revisionToken: String?,\n    val insertedExposures: Int?,\n    val errorMessage: String?,\n    val code: String?\n)\n\ndata class CountryUrl(\n    val country: String,\n    val url: String\n)"
  },
  {
    "path": "app/src/main/kotlin/cz/covid19cz/erouska/net/model/VerificationServerModel.kt",
    "content": "package cz.covid19cz.erouska.net.model\n\n// Taken from https://github.com/google/exposure-notifications-verification-server#api-guide-for-app-developers\n\ndata class VerifyCodeRequest(\n    val code: String\n)\n\ndata class VerifyCodeResponse(\n    val testType: String?,\n    val symptomDate: String?,\n    val token: String?,\n    val error: String?,\n    val errorCode: String?\n) {\n    companion object {\n        const val ERROR_CODE_INVALID_CODE = \"code_invalid\"\n        const val ERROR_CODE_EXPIRED_CODE = \"code_expired\"\n        const val ERROR_CODE_EXPIRED_USED_CODE = \"code_expired_or_used\"\n    }\n}\n\ndata class VerifyCertificateRequest(\n    val token: String,\n    val ekeyhmac: String\n)\n\ndata class VerifyCertificateResponse(\n    val certificate: String,\n    val error: String?,\n    val errorCode: String?\n)\n\ndata class CoverRequest(\n    val data: String\n)\n\ndata class CoverResponse(\n    val data: String,\n    val error: String?\n)"
  },
  {
    "path": "app/src/main/kotlin/cz/covid19cz/erouska/ui/about/AboutFragment.kt",
    "content": "package cz.covid19cz.erouska.ui.about\n\nimport android.os.Bundle\nimport android.view.View\nimport android.widget.Toast\nimport androidx.core.text.HtmlCompat\nimport cz.covid19cz.erouska.AppConfig\nimport cz.covid19cz.erouska.BuildConfig\nimport cz.covid19cz.erouska.R\nimport cz.covid19cz.erouska.databinding.FragmentAboutBinding\nimport cz.covid19cz.erouska.ext.showWeb\nimport cz.covid19cz.erouska.ui.base.BaseFragment\nimport cz.covid19cz.erouska.ui.base.UrlEvent\nimport cz.covid19cz.erouska.utils.CustomTabHelper\nimport dagger.hilt.android.AndroidEntryPoint\nimport kotlinx.android.synthetic.main.fragment_about.*\nimport javax.inject.Inject\n\n@AndroidEntryPoint\nclass AboutFragment :\n    BaseFragment<FragmentAboutBinding, AboutVM>(R.layout.fragment_about, AboutVM::class) {\n\n    private var easterEggShown = false\n\n    @Inject\n    internal lateinit var customTabHelper: CustomTabHelper\n\n    override fun onCreate(savedInstanceState: Bundle?) {\n        super.onCreate(savedInstanceState)\n        subscribe(UrlEvent::class) {\n            showWeb(it.url, customTabHelper)\n        }\n    }\n\n    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {\n        super.onViewCreated(view, savedInstanceState)\n        enableUpInToolbar(true, IconType.UP)\n\n        about_tos_content.text = HtmlCompat.fromHtml(\n            getString(R.string.about_tos_content, AppConfig.conditionsOfUseUrl),\n            HtmlCompat.FROM_HTML_MODE_LEGACY\n        )\n\n        about_version.setOnLongClickListener {\n            if (easterEggShown) {\n                throw RuntimeException(\"Crashlytics exception test for version ${BuildConfig.VERSION_NAME}.\")\n            } else {\n                Toast.makeText(context, \"Ještě jeden long-press a asi něco vypustíme\", Toast.LENGTH_LONG).show()\n                about_content.text = about_content.text.toString().replace(\"eRouška\", \"eRespirátor\")\n                easterEggShown = true\n                true\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/kotlin/cz/covid19cz/erouska/ui/about/AboutVM.kt",
    "content": "package cz.covid19cz.erouska.ui.about\n\nimport cz.covid19cz.erouska.AppConfig\nimport cz.covid19cz.erouska.ui.base.BaseVM\nimport cz.covid19cz.erouska.ui.base.UrlEvent\nimport dagger.hilt.android.lifecycle.HiltViewModel\nimport javax.inject.Inject\n\n@HiltViewModel\nclass AboutVM @Inject constructor() : BaseVM() {\n\n    fun tosLinkClicked() {\n        publish(UrlEvent(AppConfig.conditionsOfUseUrl))\n    }\n}"
  },
  {
    "path": "app/src/main/kotlin/cz/covid19cz/erouska/ui/about/entity/AboutProfileItem.kt",
    "content": "package cz.covid19cz.erouska.ui.about.entity\n\nimport com.google.gson.annotations.SerializedName\n\nclass AboutProfileItem(\n    @SerializedName(\"name\")\n    val name: String?\n)"
  },
  {
    "path": "app/src/main/kotlin/cz/covid19cz/erouska/ui/activation/ActivationFragment.kt",
    "content": "package cz.covid19cz.erouska.ui.activation\n\nimport android.app.Activity\nimport android.content.Intent\nimport android.os.Bundle\nimport android.view.Menu\nimport android.view.MenuInflater\nimport android.view.MenuItem\nimport android.view.View\nimport androidx.core.text.HtmlCompat\nimport androidx.lifecycle.lifecycleScope\nimport androidx.lifecycle.observe\nimport androidx.navigation.NavOptions.Builder\nimport cz.covid19cz.erouska.AppConfig\nimport cz.covid19cz.erouska.R\nimport cz.covid19cz.erouska.databinding.FragmentActivationBinding\nimport cz.covid19cz.erouska.exposurenotifications.ExposureNotificationsErrorHandling\nimport cz.covid19cz.erouska.ext.hide\nimport cz.covid19cz.erouska.ext.hideKeyboard\nimport cz.covid19cz.erouska.ext.show\nimport cz.covid19cz.erouska.ext.showWeb\nimport cz.covid19cz.erouska.ui.base.BaseFragment\nimport cz.covid19cz.erouska.ui.dashboard.event.GmsApiErrorEvent\nimport cz.covid19cz.erouska.utils.CustomTabHelper\nimport cz.covid19cz.erouska.utils.SupportEmailGenerator\nimport dagger.hilt.android.AndroidEntryPoint\nimport kotlinx.android.synthetic.main.fragment_activation.*\nimport javax.inject.Inject\n\n@AndroidEntryPoint\nclass ActivationFragment :\n    BaseFragment<FragmentActivationBinding, ActivationVM>(\n        R.layout.fragment_activation,\n        ActivationVM::class\n    ) {\n\n    companion object {\n        private const val SCREEN_NAME = \"Activation\"\n    }\n\n    @Inject\n    internal lateinit var customTabHelper: CustomTabHelper\n\n    @Inject\n    internal lateinit var exposureNotificationsErrorHandling: ExposureNotificationsErrorHandling\n\n    @Inject\n    internal lateinit var supportEmailGenerator: SupportEmailGenerator\n\n    override fun onCreate(savedInstanceState: Bundle?) {\n        super.onCreate(savedInstanceState)\n\n        subscribe(GmsApiErrorEvent::class) {\n            exposureNotificationsErrorHandling.handle(it, this, SCREEN_NAME)\n        }\n\n    }\n\n    override fun onStart() {\n        super.onStart()\n        viewModel.state.observe(this) {\n            updateState(it)\n        }\n    }\n\n    override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) {\n        inflater.inflate(R.menu.onboarding, menu)\n        super.onCreateOptionsMenu(menu, inflater)\n    }\n\n    override fun onOptionsItemSelected(item: MenuItem): Boolean {\n        return when (item.itemId) {\n            android.R.id.home -> {\n                val handled = onBackPressed()\n                return if (handled) {\n                    true\n                } else {\n                    super.onOptionsItemSelected(item)\n                }\n            }\n            else -> super.onOptionsItemSelected(item)\n        }\n    }\n\n    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {\n        super.onViewCreated(view, savedInstanceState)\n\n        setupListeners()\n\n        enableUpInToolbar(true)\n\n        privacy_body_2.text = HtmlCompat.fromHtml(\n            getString(R.string.privacy_body_text_2, AppConfig.conditionsOfUseUrl),\n            HtmlCompat.FROM_HTML_MODE_LEGACY\n        )\n    }\n\n    private fun setupListeners() {\n        privacy_body_2.setOnClickListener { showWeb(AppConfig.conditionsOfUseUrl, customTabHelper) }\n        activate_btn.setOnClickListener { viewModel.activate() }\n    }\n\n    private fun updateState(state: ActivationState) {\n        when (state) {\n            is ActivationStart -> onActivationStart()\n            is ActivationFinished -> onActivationSuccess()\n            is ActivationFailed -> onActivationFailed(state.errorMessage)\n            is ActivationInit -> onActivationInit()\n            is NoInternet -> onNoInternet()\n        }\n    }\n\n    private fun showSignedIn() {\n        if (navController().currentDestination?.id == R.id.nav_activation) {\n            navigate(\n                R.id.action_nav_activation_to_nav_dashboard,\n                null,\n                Builder().setPopUpTo(R.id.nav_graph, true).build()\n            )\n        }\n    }\n\n    private fun onActivationStart() {\n        login_progress.show()\n\n        activate_btn.hide()\n        privacy_group.hide()\n        error_group.hide()\n    }\n\n    private fun onActivationSuccess() {\n        showSignedIn()\n    }\n\n    private fun onNoInternet() {\n        showSnackBar(R.string.no_internet)\n    }\n\n    private fun onActivationInit() {\n        activity?.setTitle(R.string.privacy_toolbar_title)\n\n        login_progress.hide()\n\n        activate_btn.show()\n        privacy_group.show()\n        error_group.hide()\n    }\n\n    private fun onActivationFailed(errorMessage: String?) {\n        activity?.setTitle(R.string.error_title)\n        error_body.text =\n            getString(R.string.send_data_failure_body, AppConfig.supportEmail, errorMessage)\n        email_button.setOnClickListener {\n            supportEmailGenerator.sendSupportEmail(\n                requireActivity(),\n                lifecycleScope,\n                errorCode = errorMessage,\n                isError = true,\n                screenOrigin = SCREEN_NAME\n            )\n        }\n        login_progress.hide()\n\n        privacy_group.hide()\n        activate_btn.hide()\n        error_group.show()\n    }\n\n    private fun goBack() {\n        view?.hideKeyboard()\n        viewModel.backPressed()\n    }\n\n    override fun onBackPressed(): Boolean {\n        return if (viewModel.state.value is ActivationFailed) {\n            goBack()\n            true\n        } else false\n    }\n\n    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {\n        when (requestCode) {\n            ExposureNotificationsErrorHandling.REQUEST_GMS_ERROR_RESOLUTION -> {\n                if (resultCode == Activity.RESULT_OK) {\n                    viewModel.activate()\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/kotlin/cz/covid19cz/erouska/ui/activation/ActivationNotificationsFragment.kt",
    "content": "package cz.covid19cz.erouska.ui.activation\n\nimport android.app.Activity\nimport android.content.Intent\nimport android.os.Bundle\nimport android.view.Menu\nimport android.view.MenuInflater\nimport android.view.View\nimport cz.covid19cz.erouska.R\nimport cz.covid19cz.erouska.databinding.FragmentActivationNotificationsBinding\nimport cz.covid19cz.erouska.exposurenotifications.ExposureNotificationsErrorHandling\nimport cz.covid19cz.erouska.ui.base.BaseFragment\nimport cz.covid19cz.erouska.ui.dashboard.event.BluetoothDisabledEvent\nimport cz.covid19cz.erouska.ui.dashboard.event.GmsApiErrorEvent\nimport dagger.hilt.android.AndroidEntryPoint\nimport javax.inject.Inject\n\n@AndroidEntryPoint\nclass ActivationNotificationsFragment :\n    BaseFragment<FragmentActivationNotificationsBinding, ActivationNotificationsVM>(\n        R.layout.fragment_activation_notifications,\n        ActivationNotificationsVM::class\n    ) {\n\n    companion object{\n        private const val SCREEN_NAME = \"Activation Notifications\"\n    }\n\n    @Inject\n    internal lateinit var exposureNotificationsErrorHandling: ExposureNotificationsErrorHandling\n\n    override fun onCreate(savedInstanceState: Bundle?) {\n        super.onCreate(savedInstanceState)\n\n        subscribe(NotificationsVerifiedEvent::class) {\n            toEfgs()\n        }\n\n        subscribe(GmsApiErrorEvent::class) {\n            exposureNotificationsErrorHandling.handle(it, this, SCREEN_NAME)\n        }\n\n        subscribe(BluetoothDisabledEvent::class) {\n            requestEnableBt()\n        }\n    }\n\n    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {\n        super.onViewCreated(view, savedInstanceState)\n        enableUpInToolbar(true)\n    }\n\n    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {\n        when (requestCode) {\n            ExposureNotificationsErrorHandling.REQUEST_GMS_ERROR_RESOLUTION -> {\n                if (resultCode == Activity.RESULT_OK) {\n                    viewModel.enableNotifications()\n                }\n            }\n        }\n    }\n\n    override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) {\n        inflater.inflate(R.menu.onboarding, menu)\n        super.onCreateOptionsMenu(menu, inflater)\n    }\n\n    private fun toEfgs() {\n        navigate(ActivationNotificationsFragmentDirections.actionNavActivationNotificationsToEfgsUpdate(onboarding = true, fullscreen = true))\n    }\n\n}"
  },
  {
    "path": "app/src/main/kotlin/cz/covid19cz/erouska/ui/activation/ActivationNotificationsVM.kt",
    "content": "package cz.covid19cz.erouska.ui.activation\n\nimport androidx.lifecycle.viewModelScope\nimport cz.covid19cz.erouska.exposurenotifications.ExposureNotificationsRepository\nimport cz.covid19cz.erouska.ui.base.BaseVM\nimport cz.covid19cz.erouska.ui.dashboard.event.GmsApiErrorEvent\nimport cz.covid19cz.erouska.utils.L\nimport dagger.hilt.android.lifecycle.HiltViewModel\nimport kotlinx.coroutines.launch\nimport javax.inject.Inject\n\n@HiltViewModel\nclass ActivationNotificationsVM @Inject constructor(\n    private val exposureNotificationsRepository: ExposureNotificationsRepository\n) : BaseVM() {\n\n    fun enableNotifications() {\n            viewModelScope.launch {\n                runCatching {\n                    if (!exposureNotificationsRepository.isEnabled()){\n                        exposureNotificationsRepository.start()\n                        L.d(\"Exposure Notifications started\")\n                    }\n                }.onSuccess {\n                    publish(NotificationsVerifiedEvent)\n                }.onFailure {\n                    publish(GmsApiErrorEvent(it))\n                }\n            }\n        }\n}"
  },
  {
    "path": "app/src/main/kotlin/cz/covid19cz/erouska/ui/activation/ActivationState.kt",
    "content": "package cz.covid19cz.erouska.ui.activation\n\nimport arch.event.LiveEvent\n\nsealed class ActivationState\nobject ActivationStart : ActivationState()\nobject ActivationFinished : ActivationState()\ndata class ActivationFailed(val errorMessage: String?) : ActivationState()\nobject ActivationInit : ActivationState()\nobject NoInternet : ActivationState()\nobject NotificationsVerifiedEvent : LiveEvent()"
  },
  {
    "path": "app/src/main/kotlin/cz/covid19cz/erouska/ui/activation/ActivationVM.kt",
    "content": "package cz.covid19cz.erouska.ui.activation\n\nimport android.content.Context\nimport androidx.lifecycle.LiveData\nimport androidx.lifecycle.MutableLiveData\nimport androidx.lifecycle.viewModelScope\nimport com.google.android.gms.common.api.ApiException\nimport com.google.firebase.auth.FirebaseAuth\nimport cz.covid19cz.erouska.exposurenotifications.Notifications\nimport cz.covid19cz.erouska.ext.isNetworkAvailable\nimport cz.covid19cz.erouska.net.FirebaseFunctionsRepository\nimport cz.covid19cz.erouska.ui.base.BaseVM\nimport cz.covid19cz.erouska.ui.dashboard.event.GmsApiErrorEvent\nimport cz.covid19cz.erouska.utils.L\nimport cz.covid19cz.erouska.utils.LocaleUtils\nimport dagger.hilt.android.lifecycle.HiltViewModel\nimport dagger.hilt.android.qualifiers.ApplicationContext\nimport kotlinx.coroutines.Dispatchers\nimport kotlinx.coroutines.launch\nimport javax.inject.Inject\n\n@HiltViewModel\nclass ActivationVM @Inject constructor(\n    private val firebaseFunctionsRepository: FirebaseFunctionsRepository,\n    @ApplicationContext\n    private val context: Context,\n    private val notifications: Notifications\n) : BaseVM() {\n\n    private val mutableState = MutableLiveData<ActivationState>()\n    val state = mutableState as LiveData<ActivationState>\n\n    private val auth: FirebaseAuth = FirebaseAuth.getInstance()\n\n    init {\n        auth.setLanguageCode(LocaleUtils.getSupportedLanguage())\n        if (auth.currentUser != null) {\n            mutableState.postValue(ActivationFinished)\n        }\n    }\n\n    fun activate() {\n        if (context.isNetworkAvailable()) {\n            viewModelScope.launch(Dispatchers.IO) {\n                mutableState.postValue(ActivationStart)\n                try {\n                    firebaseFunctionsRepository.register(notifications.getCurrentPushToken())\n                    mutableState.postValue(ActivationFinished)\n                } catch (e: Exception) {\n                    if (e is ApiException) {\n                        publish(GmsApiErrorEvent(e))\n                        return@launch\n                    }\n                    L.e(e)\n                    mutableState.postValue(ActivationFailed(e.message))\n                }\n            }\n        } else {\n            mutableState.postValue(NoInternet)\n        }\n    }\n\n    fun backPressed() {\n        mutableState.postValue(ActivationInit)\n    }\n\n}\n"
  },
  {
    "path": "app/src/main/kotlin/cz/covid19cz/erouska/ui/base/BaseActivity.kt",
    "content": "package cz.covid19cz.erouska.ui.base\n\nimport android.app.Activity\nimport android.content.Intent\nimport android.content.IntentSender\nimport androidx.databinding.ViewDataBinding\nimport arch.view.BaseArchActivity\nimport com.google.android.play.core.appupdate.AppUpdateManagerFactory\nimport com.google.android.play.core.install.model.AppUpdateType\nimport com.google.android.play.core.install.model.UpdateAvailability\nimport cz.covid19cz.erouska.AppConfig\nimport cz.covid19cz.erouska.BuildConfig\nimport cz.covid19cz.erouska.R\nimport cz.covid19cz.erouska.utils.L\nimport kotlin.reflect.KClass\n\n\nopen class BaseActivity<B : ViewDataBinding, VM : BaseVM>(\n    layoutId: Int,\n    viewModelClass: KClass<VM>\n) :\n    BaseArchActivity<B, VM>(layoutId, viewModelClass) {\n    override fun onBackPressed() {\n        val childFragmentManager =\n            supportFragmentManager.findFragmentById(R.id.nav_host_fragment)?.childFragmentManager\n\n        if ((childFragmentManager?.fragments?.getOrNull(0) as? BaseFragment<*, *>)?.onBackPressed() != true) {\n            super.onBackPressed()\n        }\n    }\n\n    override fun onResume() {\n        super.onResume()\n\n        updateIfNeeded()\n    }\n\n    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {\n        if (requestCode == APP_UPDATE_REQUEST_CODE) {\n            if (resultCode != Activity.RESULT_OK) {\n                updateIfNeeded()\n            }\n        }\n\n        super.onActivityResult(requestCode, resultCode, data)\n    }\n\n    private fun updateIfNeeded() {\n        if (isObsolete()) {\n            checkForAppUpdate()\n        }\n    }\n\n    private fun isObsolete(): Boolean {\n        return BuildConfig.VERSION_CODE < AppConfig.minSupportedVersionCodeAndroid\n    }\n\n    private fun checkForAppUpdate() {\n        val appUpdateManager = AppUpdateManagerFactory.create(this)\n\n        appUpdateManager.appUpdateInfo.addOnSuccessListener { appUpdateInfo ->\n            if (appUpdateInfo.updateAvailability() == UpdateAvailability.UPDATE_AVAILABLE) {\n                try {\n                    appUpdateManager.startUpdateFlowForResult(\n                        appUpdateInfo,\n                        AppUpdateType.IMMEDIATE,\n                        this,\n                        APP_UPDATE_REQUEST_CODE\n                    )\n                } catch (e: IntentSender.SendIntentException) {\n                    L.e(e)\n                }\n            }\n        }\n    }\n\n    companion object {\n        const val APP_UPDATE_REQUEST_CODE = 1777\n    }\n}"
  },
  {
    "path": "app/src/main/kotlin/cz/covid19cz/erouska/ui/base/BaseFragment.kt",
    "content": "package cz.covid19cz.erouska.ui.base\n\nimport android.app.Activity\nimport android.bluetooth.BluetoothAdapter\nimport android.content.Intent\nimport android.os.Bundle\nimport android.provider.Settings\nimport android.view.MenuItem\nimport androidx.annotation.StringRes\nimport androidx.appcompat.app.AppCompatActivity\nimport androidx.core.content.pm.PackageInfoCompat\nimport androidx.databinding.ViewDataBinding\nimport arch.view.BaseArchFragment\nimport arch.viewmodel.BaseArchViewModel\nimport com.google.android.gms.common.GoogleApiAvailability\nimport com.google.android.material.snackbar.Snackbar\nimport cz.covid19cz.erouska.AppConfig\nimport cz.covid19cz.erouska.R\nimport cz.covid19cz.erouska.utils.L\nimport kotlin.reflect.KClass\n\n\nabstract class BaseFragment<B : ViewDataBinding, VM : BaseArchViewModel>(\n    layoutId: Int,\n    viewModelClass: KClass<VM>\n) : BaseArchFragment<B, VM>(layoutId, viewModelClass) {\n\n    companion object {\n        const val REQUEST_BT_ENABLE = 1000\n    }\n\n    var snackBar: Snackbar? = null\n\n    protected open fun showSnackBar(@StringRes stringRes: Int) {\n        showSnackBar(getString(stringRes))\n    }\n\n    protected open fun showSnackBarForever(@StringRes stringRes: Int) {\n        showSnackBarForever(getString(stringRes))\n    }\n\n    protected open fun showSnackBar(@StringRes stringRes: Int, vararg args: Any) {\n        showSnackBar(getString(stringRes, args))\n    }\n\n    protected open fun showSnackBar(text: String) {\n        showSnackBarWithDuration(text, Snackbar.LENGTH_LONG)\n    }\n\n    protected open fun showSnackBarForever(text: String) {\n        showSnackBarWithDuration(text, Snackbar.LENGTH_INDEFINITE)\n    }\n\n    protected open fun hideSnackBar() {\n        snackBar?.dismiss()\n        snackBar = null\n    }\n\n    private fun showSnackBarWithDuration(text: String, length: Int) {\n        view?.let {\n            if (snackBar == null) {\n                snackBar = Snackbar.make(it, text, length)\n            } else {\n                snackBar?.setText(text)\n            }\n            snackBar?.show()\n        }\n    }\n\n\n    override fun onCreate(savedInstanceState: Bundle?) {\n        super.onCreate(savedInstanceState)\n        setHasOptionsMenu(true)\n    }\n\n    override fun onOptionsItemSelected(item: MenuItem): Boolean {\n        return when (item.itemId) {\n            android.R.id.home -> {\n                return navController().navigateUp()\n            }\n            else -> super.onOptionsItemSelected(item)\n        }\n    }\n\n    open fun onBluetoothEnabled() {\n        // stub\n    }\n\n    fun enableUpInToolbar(enable: Boolean, iconType: IconType = IconType.UP) {\n        (activity as AppCompatActivity).supportActionBar?.setDisplayHomeAsUpEnabled(enable)\n        if (enable) {\n            when (iconType) {\n                IconType.CLOSE -> R.drawable.ic_action_close\n                IconType.UP -> R.drawable.ic_action_up\n            }.run {\n                (activity as AppCompatActivity).supportActionBar?.setHomeAsUpIndicator(this)\n            }\n        }\n    }\n\n    fun setTitle(@StringRes res: Int) {\n        setTitle(getString(res))\n    }\n\n    fun setTitle(title: String) {\n        (activity as AppCompatActivity).supportActionBar?.title = title\n    }\n\n    fun requestEnableBt() {\n        val enableBtIntent = Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE)\n        startActivityForResult(enableBtIntent, REQUEST_BT_ENABLE)\n    }\n\n    fun requestLocationEnable() {\n        val intent = Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS)\n        startActivity(intent)\n    }\n\n    fun isPlayServicesObsolete(): Boolean {\n        return try {\n            val current = PackageInfoCompat.getLongVersionCode(\n                requireContext().packageManager.getPackageInfo(\n                    GoogleApiAvailability.GOOGLE_PLAY_SERVICES_PACKAGE,\n                    0\n                )\n            )\n\n            current < AppConfig.minGmsVersionCode\n        } catch (e: Exception) {\n            L.e(e)\n            true\n        }\n    }\n\n    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {\n        when (requestCode) {\n            REQUEST_BT_ENABLE -> {\n                if (resultCode == Activity.RESULT_OK) {\n                    onBluetoothEnabled()\n                }\n            }\n        }\n\n        super.onActivityResult(requestCode, resultCode, data)\n    }\n\n    open fun onBackPressed(): Boolean {\n        return false\n    }\n\n    enum class IconType {\n        UP, CLOSE\n    }\n}"
  },
  {
    "path": "app/src/main/kotlin/cz/covid19cz/erouska/ui/base/BaseVM.kt",
    "content": "package cz.covid19cz.erouska.ui.base\n\nimport arch.viewmodel.BaseArchViewModel\nimport cz.covid19cz.erouska.ext.execute\nimport io.reactivex.Flowable\nimport io.reactivex.Maybe\nimport io.reactivex.Observable\nimport io.reactivex.Single\nimport io.reactivex.disposables.CompositeDisposable\nimport io.reactivex.disposables.Disposable\n\nopen class BaseVM : BaseArchViewModel() {\n\n    private val disposables = CompositeDisposable()\n\n    fun <T> subscribe(observable: Observable<T>, onError: (Throwable) -> Unit, onNext: (T) -> Unit) : Disposable {\n        val disposable = observable.execute(onNext, onError)\n        disposables.add(disposable)\n        return disposable\n    }\n\n    fun <T> subscribe(observable: Flowable<T>, onError: (Throwable) -> Unit, onNext: (T) -> Unit) : Disposable {\n        val disposable = observable.execute(onNext, onError)\n        disposables.add(disposable)\n        return disposable\n    }\n\n    fun <T> subscribe(single: Single<T>, onError: (Throwable) -> Unit, onNext: (T) -> Unit) : Disposable {\n        val disposable = single.execute(onNext, onError)\n        disposables.add(disposable)\n        return disposable\n    }\n\n    fun <T> subscribe(maybe: Maybe<T>, onError: (Throwable) -> Unit, onSuccess: (T) -> Unit) : Disposable {\n        val disposable = maybe.execute(onSuccess, onError)\n        disposables.add(disposable)\n        return disposable\n    }\n\n    override fun onCleared() {\n        disposables.dispose()\n        super.onCleared()\n    }\n}"
  },
  {
    "path": "app/src/main/kotlin/cz/covid19cz/erouska/ui/base/UrlEvent.kt",
    "content": "package cz.covid19cz.erouska.ui.base\n\nimport arch.event.LiveEvent\n\nclass UrlEvent(val url : String) : LiveEvent()"
  },
  {
    "path": "app/src/main/kotlin/cz/covid19cz/erouska/ui/contacts/Contact.kt",
    "content": "package cz.covid19cz.erouska.ui.contacts\n\ndata class Contact(\n    val title: String,\n    val text: String,\n    val linkTitle: String,\n    val link: String\n)"
  },
  {
    "path": "app/src/main/kotlin/cz/covid19cz/erouska/ui/contacts/ContactsFragment.kt",
    "content": "package cz.covid19cz.erouska.ui.contacts\n\nimport android.os.Bundle\nimport android.view.View\nimport androidx.lifecycle.lifecycleScope\nimport androidx.lifecycle.observe\nimport cz.covid19cz.erouska.R\nimport cz.covid19cz.erouska.databinding.FragmentContactsBinding\nimport cz.covid19cz.erouska.ext.showWeb\nimport cz.covid19cz.erouska.ui.base.BaseFragment\nimport cz.covid19cz.erouska.ui.contacts.event.ContactsEvent\nimport cz.covid19cz.erouska.utils.CustomTabHelper\nimport cz.covid19cz.erouska.utils.SupportEmailGenerator\nimport dagger.hilt.android.AndroidEntryPoint\nimport javax.inject.Inject\n\n@AndroidEntryPoint\nclass ContactsFragment : BaseFragment<FragmentContactsBinding, ContactsVM>(\n    R.layout.fragment_contacts,\n    ContactsVM::class\n) {\n\n    companion object {\n        private const val SCREEN_NAME = \"Contacts\"\n    }\n\n    @Inject\n    internal lateinit var customTabHelper: CustomTabHelper\n\n    @Inject\n    internal lateinit var supportEmailGenerator: SupportEmailGenerator\n\n    override fun onCreate(savedInstanceState: Bundle?) {\n        super.onCreate(savedInstanceState)\n\n        viewModel.state.observe(this) { processEvent(it) }\n    }\n\n    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {\n        super.onViewCreated(view, savedInstanceState)\n\n        enableUpInToolbar(false)\n    }\n\n    private fun processEvent(event: ContactsEvent) {\n        if (event is ContactsEvent.ContactLinkClicked) {\n            val link = event.link\n            if (link.startsWith(\"mailto:\")) {\n                supportEmailGenerator.sendSupportEmail(\n                    requireActivity(),\n                    lifecycleScope,\n                    recipient = link.split(\"mailto:\")[1],\n                    isError = false,\n                    screenOrigin = SCREEN_NAME\n                )\n            } else {\n                showWeb(link, customTabHelper)\n            }\n        }\n    }\n\n}\n"
  },
  {
    "path": "app/src/main/kotlin/cz/covid19cz/erouska/ui/contacts/ContactsVM.kt",
    "content": "package cz.covid19cz.erouska.ui.contacts\n\nimport androidx.databinding.ObservableArrayList\nimport androidx.lifecycle.Lifecycle\nimport androidx.lifecycle.MutableLiveData\nimport androidx.lifecycle.OnLifecycleEvent\nimport com.google.gson.Gson\nimport com.google.gson.reflect.TypeToken\nimport cz.covid19cz.erouska.AppConfig\nimport cz.covid19cz.erouska.ui.base.BaseVM\nimport cz.covid19cz.erouska.ui.contacts.event.ContactsEvent\nimport dagger.hilt.android.lifecycle.HiltViewModel\nimport java.lang.reflect.Type\nimport javax.inject.Inject\n\n@HiltViewModel\nclass ContactsVM @Inject constructor() : BaseVM() {\n\n    val state = MutableLiveData<ContactsEvent>()\n    val items = ObservableArrayList<Contact>()\n\n    @OnLifecycleEvent(Lifecycle.Event.ON_CREATE)\n    fun onCreate() {\n\n        val contactsListType: Type = object : TypeToken<ArrayList<Contact>?>() {}.type\n\n        val contacts: ArrayList<Contact> = Gson().fromJson(AppConfig.contactsContentJson, contactsListType)\n\n        items.clear()\n        items.addAll(contacts)\n\n    }\n\n    fun onLinkClick(link: String) {\n        state.value = ContactsEvent.ContactLinkClicked(link)\n    }\n\n}"
  },
  {
    "path": "app/src/main/kotlin/cz/covid19cz/erouska/ui/contacts/event/ContactsCommandEvent.kt",
    "content": "package cz.covid19cz.erouska.ui.contacts.event\n\nsealed class ContactsEvent {\n    data class ContactLinkClicked(val link: String) : ContactsEvent()\n}"
  },
  {
    "path": "app/src/main/kotlin/cz/covid19cz/erouska/ui/dashboard/DashboardCardView.kt",
    "content": "package cz.covid19cz.erouska.ui.dashboard\n\nimport android.content.Context\nimport android.graphics.drawable.Drawable\nimport android.util.AttributeSet\nimport android.view.View\nimport androidx.constraintlayout.widget.ConstraintLayout\nimport androidx.core.content.ContextCompat\nimport cz.covid19cz.erouska.R\nimport cz.covid19cz.erouska.ext.hide\nimport cz.covid19cz.erouska.ext.show\nimport kotlinx.android.synthetic.main.dashboard_card_view.view.*\nimport kotlinx.android.synthetic.main.view_data_item.view.subtitle_text\nimport kotlinx.android.synthetic.main.view_data_item.view.title_text\n\n\nopen class DashboardCardView : ConstraintLayout {\n    constructor(context: Context) : super(context)\n    constructor(context: Context, attrs: AttributeSet?) : super(context, attrs)\n    constructor(context: Context, attrs: AttributeSet?, attributeSetId: Int) : super(\n        context,\n        attrs,\n        attributeSetId\n    )\n\n    init {\n        View.inflate(context, getLayoutId(), this)\n    }\n\n    open fun getLayoutId() = R.layout.dashboard_card_view\n\n    var card_title: String? = null\n        set(value) {\n            field = value\n            title_text.text = value\n        }\n\n\n    var card_subtitle: String? = null\n        set(value) {\n            field = value\n            subtitle_text.text = value\n            if (!value.isNullOrBlank()) {\n                subtitle_text.show()\n            } else {\n                subtitle_text.hide()\n            }\n        }\n\n    var card_button_text: String? = null\n        set(value) {\n            field = value\n            button.text = value\n            button.show()\n        }\n\n    open var card_show_right_arrow: Boolean? = false\n        set(value) {\n            field = value\n            if (value == true) {\n                title_text.setCompoundDrawablesWithIntrinsicBounds(card_icon, null, ContextCompat.getDrawable(context, R.drawable.ic_arrow_right), null)\n            } else {\n                title_text.setCompoundDrawablesWithIntrinsicBounds(card_icon, null, null, null)\n            }\n        }\n\n    var card_on_content_click: OnClickListener? = null\n        set(value) {\n            field = value\n            content_container.setOnClickListener(value)\n            content_container.isFocusable = true\n            content_container.isClickable = true\n        }\n\n    var card_actionable_button: Boolean? = false\n        set(value) {\n            field = value\n            if (value == true) {\n                button.show()\n            } else {\n                button.hide()\n            }\n        }\n\n    var card_on_button_click: OnClickListener? = null\n        set(value) {\n            field = value\n            card_actionable_button = value != null\n            button.setOnClickListener(value)\n        }\n\n    var card_has_content: Boolean? = true\n        set(value) {\n            field = value\n            if (value == true) {\n                subtitle_text.show()\n            } else {\n                subtitle_text.hide()\n            }\n        }\n\n    var card_alert: Boolean? = false\n        set(value) {\n            field = value\n            if (value == true) {\n                title_text.setTextColor(ContextCompat.getColor(context, R.color.exposure_notification_red))\n            } else {\n                title_text.setTextColor(ContextCompat.getColor(context, R.color.textColorPrimary))\n            }\n        }\n\n    open var card_icon: Drawable? = null\n        set(value) {\n            field = value\n            value?.let {\n                title_text.setCompoundDrawablesWithIntrinsicBounds(it, null, if (card_show_right_arrow == true) ContextCompat.getDrawable(context, R.drawable.ic_arrow_right) else null , null)\n            }\n        }\n}\n\n\n\n\n"
  },
  {
    "path": "app/src/main/kotlin/cz/covid19cz/erouska/ui/dashboard/DashboardFragment.kt",
    "content": "package cz.covid19cz.erouska.ui.dashboard\n\nimport android.app.Activity\nimport android.bluetooth.BluetoothAdapter\nimport android.content.BroadcastReceiver\nimport android.content.Context\nimport android.content.Intent\nimport android.content.IntentFilter\nimport android.location.LocationManager\nimport android.os.Bundle\nimport android.view.Menu\nimport android.view.MenuInflater\nimport android.view.MenuItem\nimport android.view.View\nimport androidx.core.view.isVisible\nimport androidx.fragment.app.activityViewModels\nimport androidx.lifecycle.Observer\nimport androidx.lifecycle.observe\nimport com.tbruyelle.rxpermissions2.RxPermissions\nimport cz.covid19cz.erouska.AppConfig\nimport cz.covid19cz.erouska.BuildConfig\nimport cz.covid19cz.erouska.R\nimport cz.covid19cz.erouska.databinding.FragmentDashboardPlusBinding\nimport cz.covid19cz.erouska.exposurenotifications.ExposureNotificationsErrorHandling\nimport cz.covid19cz.erouska.exposurenotifications.Notifications\nimport cz.covid19cz.erouska.ext.*\nimport cz.covid19cz.erouska.ui.base.BaseFragment\nimport cz.covid19cz.erouska.ui.dashboard.event.DashboardCommandEvent\nimport cz.covid19cz.erouska.ui.dashboard.event.GmsApiErrorEvent\nimport cz.covid19cz.erouska.ui.exposure.event.ExposuresCommandEvent\nimport cz.covid19cz.erouska.ui.main.MainVM\nimport cz.covid19cz.erouska.utils.Analytics\nimport cz.covid19cz.erouska.utils.Analytics.KEY_PAUSE_APP\nimport cz.covid19cz.erouska.utils.Analytics.KEY_RESUME_APP\nimport cz.covid19cz.erouska.utils.Analytics.KEY_SHARE_APP\nimport cz.covid19cz.erouska.utils.showOrHide\nimport dagger.hilt.android.AndroidEntryPoint\nimport kotlinx.android.synthetic.main.fragment_dashboard_plus.*\nimport javax.inject.Inject\n\n@AndroidEntryPoint\nclass DashboardFragment : BaseFragment<FragmentDashboardPlusBinding, DashboardVM>(\n    R.layout.fragment_dashboard_plus,\n    DashboardVM::class\n) {\n\n    companion object {\n        private const val SCREEN_NAME = \"Dashboard\"\n    }\n\n    private val mainViewModel: MainVM by activityViewModels()\n\n    @Inject\n    lateinit var notifications: Notifications\n\n    @Inject\n    internal lateinit var exposureNotificationsErrorHandling: ExposureNotificationsErrorHandling\n\n    private lateinit var rxPermissions: RxPermissions\n    private var demoMode = false\n\n    private val btAndLocationReceiver: BroadcastReceiver = object : BroadcastReceiver() {\n        override fun onReceive(context: Context?, intent: Intent?) {\n            context?.let {\n                viewModel.checkStatus()\n                refreshDotIndicator(context)\n            }\n        }\n    }\n\n    override fun onCreate(savedInstanceState: Bundle?) {\n        super.onCreate(savedInstanceState)\n        activity?.setTitle(R.string.app_name)\n        rxPermissions = RxPermissions(this)\n        subscribeToViewModel()\n\n        viewModel.exposureNotificationsEnabled.observe(this, Observer { isEnabled ->\n            refreshDotIndicator(requireContext())\n            if (isEnabled) {\n                notifications.dismissNotRunningNotification()\n            }\n            checkAppActive()\n        })\n\n        viewModel.bluetoothState.observe(\n            this,\n            Observer { isEnabled -> onBluetoothStateChanged(isEnabled) })\n\n        viewModel.locationState.observe(\n            this,\n            Observer { isEnabled -> onLocationStateChanged(isEnabled) })\n\n        viewModel.lastUpdateTimestamp.observe(this, { updateLastUpdateDateAndTime() })\n        viewModel.lastExposureDate.observe(this, { updateLastUpdateDateAndTime() })\n    }\n\n    override fun onStart() {\n        super.onStart()\n\n        val intentFilter = IntentFilter().apply {\n            addAction(BluetoothAdapter.ACTION_STATE_CHANGED)\n\n            // don't register Location Receiver on devices with Android 11+ (it's not mandatory to have location services turned on)\n            // https://developer.android.com/about/versions/11/behavior-changes-all#exposure-notifications\n            // https://developers.google.com/android/exposure-notifications/implementation-guide#locationless_scanning_in_android_11\n            if (!viewModel.isLocationlessScanSupported()) {\n                addAction(LocationManager.PROVIDERS_CHANGED_ACTION)\n            }\n        }\n\n        context?.registerReceiver(\n            btAndLocationReceiver,\n            intentFilter\n        )\n    }\n\n    override fun onStop() {\n        context?.unregisterReceiver(btAndLocationReceiver)\n        super.onStop()\n    }\n\n    private fun refreshDotIndicator(context: Context) {\n        mainViewModel.serviceRunning.value =\n            viewModel.exposureNotificationsEnabled.value &&\n                    context.isBtEnabled() &&\n                    (viewModel.isLocationlessScanSupported() || context.isLocationEnabled())\n    }\n\n    private fun subscribeToViewModel() {\n        subscribe(DashboardCommandEvent::class) { commandEvent ->\n            when (commandEvent.command) {\n                DashboardCommandEvent.Command.DATA_UP_TO_DATE -> {\n                    notifications.dismissOudatedDataNotification()\n                    showOrHideDataNotification(false)\n                }\n                DashboardCommandEvent.Command.SHOW_HOW_IT_WORKS -> updateOnboardingNotif(true)\n                DashboardCommandEvent.Command.HIDE_HOW_IT_WORKS -> updateOnboardingNotif(false)\n                DashboardCommandEvent.Command.DATA_OBSOLETE -> showOrHideDataNotification(true)\n                DashboardCommandEvent.Command.RECENT_EXPOSURE -> showOrHideExposureNotification(true)\n                DashboardCommandEvent.Command.NOT_ACTIVATED -> showWelcomeScreen()\n                DashboardCommandEvent.Command.EFGS -> showEfgs()\n                DashboardCommandEvent.Command.TURN_OFF -> notifications.showErouskaPausedNotification()\n            }\n        }\n        subscribe(GmsApiErrorEvent::class) {\n            exposureNotificationsErrorHandling.handle(it, this, SCREEN_NAME)\n        }\n\n        subscribe(ExposuresCommandEvent::class) {\n            when (it.command) {\n                ExposuresCommandEvent.Command.RECENT_EXPOSURE -> onRecentExposureDiscovered()\n                ExposuresCommandEvent.Command.NO_RECENT_EXPOSURES -> onNoExposureDiscovered()\n            }\n        }\n    }\n\n    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {\n        super.onViewCreated(view, savedInstanceState)\n\n        if (viewModel.shouldIntroduceEFGS()) {\n            navigate(DashboardFragmentDirections.actionNavDashboardToNavEfgsUpdate(fullscreen = true))\n        }\n\n        exposure_notification_content.text = AppConfig.encounterWarning\n        exposure_notification_close.setOnClickListener {\n            viewModel.acceptExposure()\n            showOrHideExposureNotification(false)\n        }\n        exposure_notification_more_info.setOnClickListener { viewModel.showExposureDetail() }\n\n        data_notification_close.setOnClickListener { showOrHideDataNotification(false) }\n        how_it_works_more.setOnClickListener { viewModel.showHowItWorksPage() }\n        how_it_works_close.setOnClickListener { viewModel.dismissHowItWorksNotification() }\n\n        enableUpInToolbar(false)\n\n        data_notification_content.text = AppConfig.recentExposureNotificationTitle\n\n        dash_card_no_risky_encounter.card_title = AppConfig.noEncounterCardTitle\n\n        dash_bluetooth_off.card_on_content_click = View.OnClickListener { requestEnableBt() }\n        dash_location_off.card_on_content_click = View.OnClickListener { requestLocationEnable() }\n\n        dash_card_risky_encounter.card_on_content_click =\n            View.OnClickListener { viewModel.showExposureDetail() }\n        dash_card_no_risky_encounter.card_on_content_click =\n            View.OnClickListener { viewModel.showExposureDetail() }\n\n        dash_card_positive_test.card_on_content_click =\n            View.OnClickListener { viewModel.sendData() }\n\n        dash_travel.card_on_content_click =\n            View.OnClickListener { viewModel.showEfgs() }\n\n        exposure_notification_content.text = AppConfig.encounterWarning\n        exposure_notification_more_info.setOnClickListener { viewModel.showExposureDetail() }\n        exposure_notification_close.setOnClickListener {\n            viewModel.acceptExposure()\n            exposure_notification_container.hide()\n        }\n\n        dash_card_active.setOnClickListener {\n            viewModel.stop()\n            Analytics.logEvent(requireContext(), KEY_PAUSE_APP)\n        }\n        dash_card_inactive.setOnClickListener {\n            viewModel.start()\n            Analytics.logEvent(requireContext(), KEY_RESUME_APP)\n        }\n\n        updateLastUpdateDateAndTime()\n        viewModel.cancelSuppression()\n    }\n\n    override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) {\n        inflater.inflate(R.menu.dashboard, menu)\n        if (BuildConfig.FLAVOR == \"dev\") {\n            menu.add(0, R.id.action_activation, 11, \"Test Aktivace\")\n            menu.add(0, R.id.action_exposure_demo, 12, \"Test Riz. Notifikace\")\n            menu.add(0, R.id.action_play_services, 13, \"Test PlayServices\")\n            menu.add(0, R.id.action_sandbox, 14, \"Test Sandbox\")\n            menu.add(0, R.id.action_efgs, 15, \"Test EFGS\")\n            menu.add(0, R.id.action_exposure_screen, 17, \"Test Exposure screen\")\n            menu.add(0, R.id.action_exposure_info, 18, \"Test Rizikové setkání\")\n            menu.add(0, R.id.action_efgs_control, 19, \"Test EFGS Control\")\n        }\n        super.onCreateOptionsMenu(menu, inflater)\n    }\n\n    override fun onOptionsItemSelected(item: MenuItem): Boolean {\n        return when (item.itemId) {\n            R.id.menu_share -> {\n                requireContext().shareApp()\n                Analytics.logEvent(requireContext(), KEY_SHARE_APP)\n                true\n            }\n            R.id.nav_about -> {\n                navigate(R.id.nav_about)\n                true\n            }\n            R.id.action_sandbox -> {\n                navigate(R.id.nav_sandbox)\n                true\n            }\n            R.id.action_efgs -> {\n                navigate(DashboardFragmentDirections.actionNavDashboardToNavEfgsUpdate(fullscreen = true))\n                true\n            }\n            R.id.action_activation -> {\n                viewModel.unregister()\n                showWelcomeScreen()\n                true\n            }\n            R.id.action_exposure_demo -> {\n                demoMode = true\n                showOrHideExposureNotification(true)\n                true\n            }\n            R.id.action_exposure_screen -> {\n                navigate(DashboardFragmentDirections.actionNavDashboardToNavExposure(demo = true))\n                true\n            }\n            R.id.action_play_services -> {\n                showPlayServicesUpdate()\n                true\n            }\n            R.id.action_efgs_control -> {\n                navigate(DashboardFragmentDirections.actionNavDashboardToNavEfgs())\n                true\n            }\n            R.id.action_exposure_info -> {\n                navigate(DashboardFragmentDirections.actionNavDashboardToNavExposureInfo(demo = true))\n                true\n            }\n            else -> super.onOptionsItemSelected(item)\n        }\n    }\n\n    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {\n        when (requestCode) {\n            ExposureNotificationsErrorHandling.REQUEST_GMS_ERROR_RESOLUTION -> {\n                if (resultCode == Activity.RESULT_OK) {\n                    viewModel.start()\n                }\n            }\n        }\n    }\n\n    private fun updateLastUpdateDateAndTime() {\n        val lastUpdateTimestamp = viewModel.lastUpdateTimestamp.value\n        val lastUpdateString = lastUpdateTimestamp?.let {\n            if (it != 0L) {\n                resources.getString(\n                    R.string.dashboard_body_no_contact,\n                    it.timestampToDate(), it.timestampToTime()\n                )\n            } else null\n        } ?: resources.getString(R.string.dashboard_loading_data)\n\n        val text = lastUpdateString + \"\\n${AppConfig.encounterUpdateFrequency}\"\n        dash_card_no_risky_encounter.card_subtitle = text\n        updateLastUpdateOnExposureCard(lastUpdateString)\n    }\n\n    private fun updateLastUpdateOnExposureCard(lastUpdateString: String?) {\n        val lastExposureString = resources.getString(\n            R.string.dashboard_risky_encounter_subtitle_bad,\n            viewModel.lastExposureDate.value\n        )\n\n        val text = lastUpdateString?.let {\n            \"${lastExposureString}\\n\\n${lastUpdateString}\"\n        } ?: lastExposureString\n\n        dash_card_risky_encounter.card_subtitle = text\n    }\n\n    private fun onRecentExposureDiscovered() {\n        dash_card_no_risky_encounter.hide()\n        dash_card_risky_encounter.show()\n    }\n\n    private fun onNoExposureDiscovered() {\n        dash_card_no_risky_encounter.show()\n        dash_card_risky_encounter.hide()\n    }\n\n    private fun onBluetoothStateChanged(isEnabled: Boolean) {\n        dash_bluetooth_off.showOrHide(!isEnabled)\n        checkAppActive()\n    }\n\n    private fun onLocationStateChanged(isEnabled: Boolean) {\n        // Location services don't need to be turned on on devices with Android 11+\n        if (viewModel.isLocationlessScanSupported()) {\n            dash_location_off.hide()\n        } else {\n            dash_location_off.showOrHide(!isEnabled)\n        }\n        checkAppActive()\n    }\n\n    private fun checkAppActive() {\n        val enEnabled = viewModel.exposureNotificationsEnabled.value\n        // Location services don't need to be turned on on devices with Android 11+\n        val lsEnabled = viewModel.locationState.value\n        val btEnabled = viewModel.bluetoothState.value\n\n        dash_card_active.showOrHide(enEnabled && (viewModel.isLocationlessScanSupported() || lsEnabled) && btEnabled)\n        dash_card_inactive.showOrHide(!enEnabled && (viewModel.isLocationlessScanSupported() || lsEnabled) && btEnabled)\n    }\n\n    private fun updateOnboardingNotif(show: Boolean) {\n        how_it_works_container.showOrHide(\n            show &&\n                    !data_notification_container.isVisible &&\n                    !exposure_notification_container.isVisible\n        )\n    }\n\n    private fun showOrHideDataNotification(show: Boolean) {\n        data_notification_container.showOrHide(show)\n        // TODO: It's weird to call ViewModel after ViewModel calls View - this loop is dangerous. It should be refactored.\n        viewModel.checkAndShowOrHideHowItWorksNotification() // check if How It Works in-app notification should be shown\n    }\n\n    private fun showOrHideExposureNotification(show: Boolean) {\n        exposure_notification_container.showOrHide(show)\n        viewModel.checkAndShowOrHideHowItWorksNotification() // check if How It Works in-app notification should be shown\n    }\n\n    private fun showWelcomeScreen() {\n        navigate(R.id.action_nav_dashboard_to_nav_welcome_fragment)\n    }\n\n    private fun showPlayServicesUpdate() {\n        navigate(R.id.action_nav_dashboard_to_nav_play_services_update,\n            Bundle().apply { putBoolean(\"demo\", true) })\n    }\n\n    private fun showEfgs() {\n        navigate(R.id.action_nav_dashboard_to_nav_efgs)\n    }\n}\n"
  },
  {
    "path": "app/src/main/kotlin/cz/covid19cz/erouska/ui/dashboard/DashboardVM.kt",
    "content": "package cz.covid19cz.erouska.ui.dashboard\n\nimport androidx.lifecycle.Lifecycle\nimport androidx.lifecycle.MutableLiveData\nimport androidx.lifecycle.OnLifecycleEvent\nimport androidx.lifecycle.viewModelScope\nimport arch.livedata.SafeMutableLiveData\nimport com.google.android.gms.nearby.exposurenotification.ExposureNotificationStatus\nimport com.google.firebase.auth.FirebaseAuth\nimport cz.covid19cz.erouska.R\nimport cz.covid19cz.erouska.db.SharedPrefsRepository\nimport cz.covid19cz.erouska.exposurenotifications.ExposureNotificationsRepository\nimport cz.covid19cz.erouska.ext.daysSinceEpochToDateString\nimport cz.covid19cz.erouska.net.ExposureServerRepository\nimport cz.covid19cz.erouska.ui.base.BaseVM\nimport cz.covid19cz.erouska.ui.dashboard.event.DashboardCommandEvent\nimport cz.covid19cz.erouska.ui.dashboard.event.GmsApiErrorEvent\nimport cz.covid19cz.erouska.ui.exposure.event.ExposuresCommandEvent\nimport cz.covid19cz.erouska.utils.L\nimport dagger.hilt.android.lifecycle.HiltViewModel\nimport kotlinx.coroutines.launch\nimport javax.inject.Inject\n\n@HiltViewModel\nclass DashboardVM\n@Inject constructor(\n    private val exposureNotificationsRepository: ExposureNotificationsRepository,\n    private val exposureNotificationsServerRepository: ExposureServerRepository,\n    private val prefs: SharedPrefsRepository\n) : BaseVM() {\n\n    private val auth: FirebaseAuth = FirebaseAuth.getInstance()\n    val exposureNotificationsEnabled = SafeMutableLiveData(prefs.isExposureNotificationsEnabled())\n\n    val bluetoothState = SafeMutableLiveData(true)\n    val locationState = SafeMutableLiveData(true)\n    val efgsState = SafeMutableLiveData(prefs.isTraveller())\n\n    val lastUpdateTimestamp = MutableLiveData(prefs.getLastKeyImport())\n    val lastExposureDate = MutableLiveData<String>()\n    val exposuresCount = MutableLiveData(0)\n\n    @OnLifecycleEvent(Lifecycle.Event.ON_CREATE)\n    fun onCreate() {\n        prefs.lastKeyImportLive.observeForever {\n            updateLastKeyImport(it)\n            checkForObsoleteData()\n            checkAndShowOrHideHowItWorksNotification()\n        }\n\n        exposureNotificationsEnabled.observeForever { enabled ->\n            if (enabled) {\n                checkForRiskyExposure()\n            }\n        }\n    }\n\n    @OnLifecycleEvent(Lifecycle.Event.ON_RESUME)\n    fun onResume() {\n        if (auth.currentUser == null) {\n            publish(DashboardCommandEvent(DashboardCommandEvent.Command.NOT_ACTIVATED))\n            return\n        }\n        efgsState.value = prefs.isTraveller()\n        checkStatus()\n        checkRiskyExposures()\n\n        exposureNotificationsServerRepository.scheduleKeyDownload()\n        exposureNotificationsRepository.scheduleSelfChecker()\n        checkForObsoleteData()\n        checkAndShowOrHideHowItWorksNotification()\n    }\n\n    private fun updateLastKeyImport(lastKeyImport: Long) {\n        if (lastKeyImport != 0L) {\n            lastUpdateTimestamp.value = lastKeyImport\n        }\n    }\n\n    fun checkStatus() {\n        viewModelScope.launch {\n            kotlin.runCatching {\n                if (!exposureNotificationsRepository.isEnabled()) {\n                    return@runCatching setOf(ExposureNotificationStatus.INACTIVATED)\n                }\n                return@runCatching exposureNotificationsRepository.getStatus()\n            }.onSuccess { status ->\n                L.i(\"EN API Status: ${status.joinToString { it.name }}\")\n                onExposureNotificationsStatusChanged(status)\n            }.onFailure {\n                publish(GmsApiErrorEvent(it))\n            }\n        }\n    }\n\n    /**\n     * Stop the EN API.\n     */\n    fun stop() {\n        viewModelScope.launch {\n            kotlin.runCatching {\n                if (exposureNotificationsRepository.isEnabled()) {\n                    exposureNotificationsRepository.stop()\n                }\n            }.onSuccess {\n                L.i(\"EN API Stopped\")\n                checkStatus()\n                publish(DashboardCommandEvent(DashboardCommandEvent.Command.TURN_OFF))\n            }.onFailure {\n                L.e(it)\n                publish(GmsApiErrorEvent(it)) // handle API error\n            }\n        }\n    }\n\n    /**\n     * Start the EN API.\n     */\n    fun start() {\n        viewModelScope.launch {\n            kotlin.runCatching {\n                exposureNotificationsRepository.start()\n            }.onSuccess {\n                L.i(\"EN API Started\")\n                checkStatus()\n            }.onFailure {\n                L.e(it)\n                publish(GmsApiErrorEvent(it)) // handle API error\n            }\n        }\n    }\n\n    /**\n     * EN API state has changed.\n     */\n    private fun onExposureNotificationsStatusChanged(status: Set<ExposureNotificationStatus>) {\n        bluetoothState.value = !status.contains(ExposureNotificationStatus.BLUETOOTH_DISABLED)\n        locationState.value = !status.contains(ExposureNotificationStatus.LOCATION_DISABLED)\n        exposureNotificationsEnabled.value = status.contains(ExposureNotificationStatus.ACTIVATED)\n    }\n\n    private fun checkForRiskyExposure() {\n        viewModelScope.launch {\n            runCatching {\n                exposureNotificationsRepository.getLastRiskyExposure()\n            }.onSuccess {\n                it?.let {\n                    if (!it.accepted) {\n                        showExposure()\n                    }\n                }\n            }.onFailure {\n                L.e(it)\n            }\n        }\n    }\n\n    private fun checkForObsoleteData() {\n        if (prefs.hasOutdatedKeyData()) {\n            publish(DashboardCommandEvent(DashboardCommandEvent.Command.DATA_OBSOLETE))\n        } else {\n            publish(DashboardCommandEvent(DashboardCommandEvent.Command.DATA_UP_TO_DATE))\n        }\n    }\n\n    /**\n     * Check the database for recent risky exposures.\n     */\n    private fun checkRiskyExposures() {\n        viewModelScope.launch {\n            kotlin.runCatching {\n                exposureNotificationsRepository.getDailySummariesFromDbByExposureDate()\n            }.onSuccess { riskyExposureList ->\n                if (!riskyExposureList.isNullOrEmpty()) {\n                    val lastExposureDate =\n                        riskyExposureList.first().daysSinceEpoch.daysSinceEpochToDateString()\n                    onRiskyExposuresFound(riskyExposureList.size, lastExposureDate)\n                } else {\n                    onNoRiskyExposuresFound()\n                }\n            }.onFailure {\n                L.e(it)\n            }\n        }\n    }\n\n    private fun onRiskyExposuresFound(count: Int, lastExposureDate: String) {\n        this.lastExposureDate.value = lastExposureDate\n        this.exposuresCount.value = count\n        publish(ExposuresCommandEvent(ExposuresCommandEvent.Command.RECENT_EXPOSURE))\n    }\n\n    private fun onNoRiskyExposuresFound() {\n        publish(ExposuresCommandEvent(ExposuresCommandEvent.Command.NO_RECENT_EXPOSURES))\n    }\n\n    private fun showExposure() {\n        publish(DashboardCommandEvent(DashboardCommandEvent.Command.RECENT_EXPOSURE))\n    }\n\n    fun showExposureDetail() {\n        viewModelScope.launch {\n            val lastRiskyExposure = exposureNotificationsRepository.getLastRiskyExposure()\n            if (lastRiskyExposure != null && lastRiskyExposure.daysSinceEpoch > prefs.getLastShownExposureInfo()) {\n                navigate(DashboardFragmentDirections.actionNavDashboardToNavExposureInfo())\n            } else {\n                navigate(DashboardFragmentDirections.actionNavDashboardToNavExposure())\n            }\n        }\n    }\n\n    fun showEfgs() {\n        publish(DashboardCommandEvent(DashboardCommandEvent.Command.EFGS))\n    }\n\n    fun acceptExposure() {\n        viewModelScope.launch {\n            runCatching {\n                exposureNotificationsRepository.markAsAccepted()\n            }.onFailure {\n                L.e(it)\n            }\n        }\n    }\n\n    fun unregister() {\n        FirebaseAuth.getInstance().signOut()\n    }\n\n    fun sendData() {\n        navigate(R.id.action_nav_dashboard_to_nav_verification)\n    }\n\n    fun shouldIntroduceEFGS(): Boolean {\n        return !prefs.wasEFGSIntroduced() && !prefs.shouldSuppressUpdateScreens()\n    }\n\n    fun cancelSuppression() {\n        return prefs.setSuppressUpdateScreens(false)\n    }\n\n    fun isLocationlessScanSupported() = exposureNotificationsRepository.isLocationlessScanSupported()\n\n    fun checkAndShowOrHideHowItWorksNotification() {\n        if (prefs.wasHowItWorksShown()) {\n            publish(DashboardCommandEvent(DashboardCommandEvent.Command.HIDE_HOW_IT_WORKS))\n        } else {\n            publish(DashboardCommandEvent(DashboardCommandEvent.Command.SHOW_HOW_IT_WORKS))\n        }\n    }\n\n    fun dismissHowItWorksNotification() {\n        prefs.setHowItWorksShown()\n        publish(DashboardCommandEvent(DashboardCommandEvent.Command.HIDE_HOW_IT_WORKS))\n    }\n\n    fun showHowItWorksPage() {\n        navigate(DashboardFragmentDirections.actionNavDashboardToNavHowItWorks())\n    }\n}\n"
  },
  {
    "path": "app/src/main/kotlin/cz/covid19cz/erouska/ui/dashboard/TravellerDashboardCardView.kt",
    "content": "package cz.covid19cz.erouska.ui.dashboard\n\nimport android.content.Context\nimport android.graphics.drawable.Drawable\nimport android.util.AttributeSet\nimport cz.covid19cz.erouska.R\nimport kotlinx.android.synthetic.main.view_data_item.view.*\n\nclass TravellerDashboardCardView : DashboardCardView {\n    constructor(context: Context) : super(context)\n    constructor(context: Context, attrs: AttributeSet?) : super(context, attrs)\n    constructor(context: Context, attrs: AttributeSet?, attributeSetId: Int) : super(\n        context,\n        attrs,\n        attributeSetId\n    )\n\n    override fun getLayoutId(): Int = R.layout.traveller_dashboard_card_view\n\n    override var card_icon: Drawable? = null\n        set(value) {\n            field = value\n            value?.let {\n                icon.setImageDrawable(it)\n            }\n        }\n\n}\n"
  },
  {
    "path": "app/src/main/kotlin/cz/covid19cz/erouska/ui/dashboard/event/DashboardCommandEvent.kt",
    "content": "package cz.covid19cz.erouska.ui.dashboard.event\n\nimport arch.event.LiveEvent\n\nclass DashboardCommandEvent(val command: Command) : LiveEvent() {\n\n    enum class Command {\n        TURN_OFF,\n        DATA_OBSOLETE,\n        DATA_UP_TO_DATE,\n        RECENT_EXPOSURE,\n        EFGS,\n        NOT_ACTIVATED,\n        SHOW_HOW_IT_WORKS,\n        HIDE_HOW_IT_WORKS\n    }\n\n}\n"
  },
  {
    "path": "app/src/main/kotlin/cz/covid19cz/erouska/ui/dashboard/event/DisabledEvent.kt",
    "content": "package cz.covid19cz.erouska.ui.dashboard.event\n\nimport arch.event.LiveEvent\n\nclass BluetoothDisabledEvent : LiveEvent()"
  },
  {
    "path": "app/src/main/kotlin/cz/covid19cz/erouska/ui/dashboard/event/GmsApiErrorEvent.kt",
    "content": "package cz.covid19cz.erouska.ui.dashboard.event\n\nimport arch.event.LiveEvent\n\nclass GmsApiErrorEvent(val throwable: Throwable) : LiveEvent()"
  },
  {
    "path": "app/src/main/kotlin/cz/covid19cz/erouska/ui/efgs/EfgsFragment.kt",
    "content": "package cz.covid19cz.erouska.ui.efgs\n\nimport android.os.Bundle\nimport android.view.View\nimport androidx.appcompat.app.AlertDialog\nimport androidx.core.text.HtmlCompat\nimport cz.covid19cz.erouska.AppConfig\nimport cz.covid19cz.erouska.R\nimport cz.covid19cz.erouska.databinding.FragmentEfgsBinding\nimport cz.covid19cz.erouska.ui.base.BaseFragment\nimport dagger.hilt.android.AndroidEntryPoint\n\n@AndroidEntryPoint\nclass EfgsFragment :\n    BaseFragment<FragmentEfgsBinding, EfgsVM>(R.layout.fragment_efgs, EfgsVM::class) {\n\n    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {\n        super.onViewCreated(view, savedInstanceState)\n\n        enableUpInToolbar(true, IconType.CLOSE)\n\n        viewModel.efgsState.observe(viewLifecycleOwner){ checked ->\n            if (binding.efgsCheckbox.tag != null) {\n                if (!checked) {\n                    showEfgsDisableConfirmationDialog()\n                }\n            } else {\n                // using tag as init flag to prevent dialog onCreate\n                binding.efgsCheckbox.tag = true\n            }\n        }\n    }\n\n    private fun showEfgsDisableConfirmationDialog() {\n        AlertDialog.Builder(requireContext())\n            .setMessage(\n                HtmlCompat.fromHtml(\n                    getString(R.string.efgs_disable_confirmation, AppConfig.efgsDays),\n                    HtmlCompat.FROM_HTML_MODE_LEGACY\n                )\n            )\n            .setPositiveButton(R.string.efgs_disable_confirmation_on) { _, _ ->\n                viewModel.efgsState.value = true\n            }\n            .setNegativeButton(R.string.efgs_disable_confirmation_off) { _, _ ->\n\n            }.show()\n    }\n}"
  },
  {
    "path": "app/src/main/kotlin/cz/covid19cz/erouska/ui/efgs/EfgsVM.kt",
    "content": "package cz.covid19cz.erouska.ui.efgs\n\nimport androidx.lifecycle.Lifecycle\nimport androidx.lifecycle.OnLifecycleEvent\nimport arch.livedata.SafeMutableLiveData\nimport cz.covid19cz.erouska.AppConfig\nimport cz.covid19cz.erouska.db.SharedPrefsRepository\nimport cz.covid19cz.erouska.ui.base.BaseVM\nimport dagger.hilt.android.lifecycle.HiltViewModel\nimport javax.inject.Inject\n\n@HiltViewModel\nclass EfgsVM @Inject constructor(val prefs : SharedPrefsRepository) : BaseVM() {\n\n    val efgsState = SafeMutableLiveData(prefs.isTraveller())\n\n    @OnLifecycleEvent(Lifecycle.Event.ON_CREATE)\n    fun onCreate(){\n        efgsState.observeForever {\n            prefs.setTraveller(it)\n        }\n    }\n\n    fun efgsDays() = AppConfig.efgsDays\n\n    fun efgsSupportedCountries() = AppConfig.efgsSupportedCountries\n\n}"
  },
  {
    "path": "app/src/main/kotlin/cz/covid19cz/erouska/ui/efgs/event/EfgsCommandEvent.kt",
    "content": "package cz.covid19cz.erouska.ui.efgs.event\n\nimport arch.event.LiveEvent\n\nclass EfgsCommandEvent(val command: Command) : LiveEvent() {\n\n    enum class Command{\n        TURN_ON,\n        TURN_OFF,\n    }\n\n}"
  },
  {
    "path": "app/src/main/kotlin/cz/covid19cz/erouska/ui/efgsagreement/EfgsAgreementFragment.kt",
    "content": "package cz.covid19cz.erouska.ui.efgsagreement\n\nimport android.app.Activity\nimport android.content.Intent\nimport android.os.Bundle\nimport android.text.method.LinkMovementMethod\nimport android.view.View\nimport androidx.core.text.HtmlCompat\nimport cz.covid19cz.erouska.AppConfig\nimport cz.covid19cz.erouska.R\nimport cz.covid19cz.erouska.databinding.FragmentEfgsAgreementBinding\nimport cz.covid19cz.erouska.exposurenotifications.ExposureNotificationsErrorHandling\nimport cz.covid19cz.erouska.ui.base.BaseFragment\nimport cz.covid19cz.erouska.ui.dashboard.event.GmsApiErrorEvent\nimport dagger.hilt.android.AndroidEntryPoint\nimport javax.inject.Inject\n\n@AndroidEntryPoint\nclass EfgsAgreementFragment : BaseFragment<FragmentEfgsAgreementBinding, EfgsAgreementVM>(R.layout.fragment_efgs_agreement, EfgsAgreementVM::class) {\n\n    companion object {\n        private const val SCREEN_NAME = \"EFGS Agreement\"\n    }\n\n    @Inject\n    internal lateinit var exposureNotificationsErrorHandling: ExposureNotificationsErrorHandling\n    private var gmsDialogShown = false\n\n    override fun onCreate(savedInstanceState: Bundle?) {\n        super.onCreate(savedInstanceState)\n\n        subscribe(GmsApiErrorEvent::class) {\n            if (!gmsDialogShown) {\n                gmsDialogShown = true\n                exposureNotificationsErrorHandling.handle(it, this, SCREEN_NAME)\n            }\n        }\n    }\n\n    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {\n        super.onViewCreated(view, savedInstanceState)\n\n        binding.textDescription.text = HtmlCompat.fromHtml(\n            getString(R.string.efgs_agreement_description, AppConfig.conditionsOfUseUrl),\n            HtmlCompat.FROM_HTML_MODE_LEGACY\n        )\n        binding.textDescription.movementMethod = LinkMovementMethod.getInstance()\n    }\n\n    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {\n        super.onActivityResult(requestCode, resultCode, data)\n        if (requestCode == ExposureNotificationsErrorHandling.REQUEST_GMS_ERROR_RESOLUTION) {\n            gmsDialogShown = false\n            when (resultCode) {\n                Activity.RESULT_OK -> viewModel.publishKeys()\n            }\n        }\n    }\n\n}"
  },
  {
    "path": "app/src/main/kotlin/cz/covid19cz/erouska/ui/efgsagreement/EfgsAgreementVM.kt",
    "content": "package cz.covid19cz.erouska.ui.efgsagreement\n\nimport androidx.lifecycle.viewModelScope\nimport arch.livedata.SafeMutableLiveData\nimport com.google.android.gms.common.api.ApiException\nimport cz.covid19cz.erouska.db.SharedPrefsRepository\nimport cz.covid19cz.erouska.exposurenotifications.ExposureNotificationsRepository\nimport cz.covid19cz.erouska.ui.base.BaseVM\nimport cz.covid19cz.erouska.ui.dashboard.event.GmsApiErrorEvent\nimport cz.covid19cz.erouska.ui.error.entity.ErrorType\nimport cz.covid19cz.erouska.ui.verification.NoKeysException\nimport cz.covid19cz.erouska.ui.verification.ReportExposureException\nimport cz.covid19cz.erouska.utils.L\nimport dagger.hilt.android.lifecycle.HiltViewModel\nimport kotlinx.coroutines.launch\nimport java.net.UnknownHostException\nimport javax.inject.Inject\n\n@HiltViewModel\nclass EfgsAgreementVM @Inject constructor(val prefs: SharedPrefsRepository, val exposureNotificationsRepo: ExposureNotificationsRepository) :\n    BaseVM() {\n\n    val traveller = prefs.isTraveller()\n    val loading = SafeMutableLiveData(false)\n\n    fun agree() {\n        prefs.setConsentToFederation(true)\n        publishKeys()\n    }\n\n    fun disagree() {\n        prefs.setConsentToFederation(false)\n        publishKeys()\n    }\n\n    fun publishKeys() {\n        loading.value = true\n        viewModelScope.launch {\n            kotlin.runCatching {\n                if (!exposureNotificationsRepo.isEnabled()) {\n                    exposureNotificationsRepo.start()\n                }\n                exposureNotificationsRepo.publishKeys()\n            }.onSuccess {\n                loading.value = false\n                prefs.deletePublishKeysTemporaryData()\n                prefs.setLastDataSentDate()\n                navigate(EfgsAgreementFragmentDirections.actionNavEfgsAgreementToNavPublishSuccess(it > 1))\n            }.onFailure {\n                loading.value = false\n                handleSendDataErrors(it)\n            }\n        }\n    }\n\n    private fun handleSendDataErrors(exception: Throwable) {\n        when (exception) {\n            is ApiException -> publish(GmsApiErrorEvent(exception))\n            is NoKeysException -> navigate(EfgsAgreementFragmentDirections.actionNavEfgsAgreementToNavPublishSuccess(false))\n            is ReportExposureException -> {\n                navigate(EfgsAgreementFragmentDirections.actionNavEfgsAgreementToNavError(\n                    type = ErrorType.GENERAL_ERROR ,\n                    errorCode = \"${exception.message} ${exception.code}\"\n                ))\n            }\n            is UnknownHostException -> {\n                navigate(EfgsAgreementFragmentDirections.actionNavEfgsAgreementToNavError(\n                    type = ErrorType.NO_INTERNET\n                ))\n            }\n            else -> {\n                L.e(exception)\n                navigate(EfgsAgreementFragmentDirections.actionNavEfgsAgreementToNavError(\n                    type = ErrorType.GENERAL_ERROR ,\n                    errorCode = \"${exception.message}\"\n                ))\n            }\n        }\n    }\n\n\n}"
  },
  {
    "path": "app/src/main/kotlin/cz/covid19cz/erouska/ui/error/ErrorFragment.kt",
    "content": "package cz.covid19cz.erouska.ui.error\n\nimport android.os.Bundle\nimport android.view.MenuItem\nimport android.view.View\nimport androidx.lifecycle.lifecycleScope\nimport androidx.navigation.fragment.navArgs\nimport cz.covid19cz.erouska.AppConfig\nimport cz.covid19cz.erouska.R\nimport cz.covid19cz.erouska.databinding.FragmentErrorBinding\nimport cz.covid19cz.erouska.ext.*\nimport cz.covid19cz.erouska.ui.base.BaseFragment\nimport cz.covid19cz.erouska.ui.error.entity.ErrorType\nimport cz.covid19cz.erouska.ui.verification.VerificationFragment\nimport cz.covid19cz.erouska.utils.SupportEmailGenerator\nimport dagger.hilt.android.AndroidEntryPoint\nimport javax.inject.Inject\n\n@AndroidEntryPoint\nclass ErrorFragment : BaseFragment<FragmentErrorBinding, ErrorVM>(\n    R.layout.fragment_error,\n    ErrorVM::class\n) {\n\n    private val args: ErrorFragmentArgs by navArgs()\n\n    @Inject\n    internal lateinit var supportEmailGenerator: SupportEmailGenerator\n\n    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {\n        super.onViewCreated(view, savedInstanceState)\n\n        enableUpInToolbar(true, IconType.CLOSE)\n\n        when (args.type) {\n            ErrorType.EXPIRED_OR_USED_CODE -> {\n                onCodeExpiredOrUsed()\n            }\n            ErrorType.INVALID_CODE -> {\n                onCodeInvalid()\n            }\n            ErrorType.GENERAL_ERROR -> {\n                onGeneralError(args.errorCode)\n            }\n            ErrorType.NO_INTERNET -> {\n                onNoInternet()\n            }\n        }\n    }\n\n    private fun onCodeExpiredOrUsed() {\n        with(binding) {\n            emailButton.show()\n            closeButton.hide()\n            tryAgainButton.hide()\n\n            errorHeader.text = getString(R.string.send_data_failure_header)\n            errorBody.text =\n                getString(R.string.send_data_code_expired_or_used, AppConfig.supportEmail)\n\n            emailButton.setOnClickListener {\n                supportEmailGenerator.sendVerificationEmail(requireActivity())\n            }\n        }\n    }\n\n    private fun onCodeInvalid() {\n        with(binding){\n            tryAgainButton.show()\n            emailButton.show()\n            closeButton.hide()\n\n            emailButton.text = getString(R.string.support_request_button)\n\n            errorHeader.text = getString(R.string.send_data_code_invalid_header)\n            errorBody.text = getString(R.string.send_data_code_invalid_body, AppConfig.supportEmail)\n\n            tryAgainButton.setOnClickListener { navController().navigateUp() }\n            emailButton.setOnClickListener {\n                supportEmailGenerator.sendInvalidCodeEmail(requireActivity())\n            }\n        }\n    }\n\n\n    private fun onGeneralError(errorMessage: String) {\n        with(binding) {\n            emailButton.show()\n            closeButton.hide()\n            tryAgainButton.hide()\n\n            errorDesc.show()\n            errorDesc.text = getString(R.string.general_desc)\n\n            emailButton.text = getString(R.string.support_request_button)\n            errorHeader.text = getString(R.string.send_data_failure_header)\n            errorBody.text = getString(R.string.general_error, AppConfig.supportEmail, errorMessage)\n\n            emailButton.setOnClickListener {\n                supportEmailGenerator.sendSupportEmail(\n                    requireActivity(),\n                    lifecycleScope,\n                    errorCode = errorMessage,\n                    isError = true,\n                    screenOrigin = VerificationFragment.SCREEN_NAME\n                )\n            }\n        }\n    }\n\n    private fun onNoInternet() {\n        with(binding) {\n            emailButton.hide()\n            closeButton.show()\n            tryAgainButton.show()\n\n            tryAgainButton.setOnClickListener { navController().navigateUp() }\n            closeButton.setOnClickListener {\n                navigate(ErrorFragmentDirections.actionNavErrorToNavDashboard())\n            }\n\n            errorHeader.text = getString(R.string.send_data_failure_header)\n            errorBody.text = getString(R.string.no_internet_error)\n        }\n    }\n\n    override fun onOptionsItemSelected(item: MenuItem): Boolean {\n        return when (item.itemId) {\n            android.R.id.home -> {\n                navigate(ErrorFragmentDirections.actionNavErrorToNavDashboard())\n                true\n            }\n            else -> super.onOptionsItemSelected(item)\n        }\n    }\n}"
  },
  {
    "path": "app/src/main/kotlin/cz/covid19cz/erouska/ui/error/ErrorVM.kt",
    "content": "package cz.covid19cz.erouska.ui.error\n\nimport cz.covid19cz.erouska.ui.base.BaseVM\nimport dagger.hilt.android.lifecycle.HiltViewModel\nimport javax.inject.Inject\n\n@HiltViewModel\nclass ErrorVM @Inject constructor() :\n    BaseVM()"
  },
  {
    "path": "app/src/main/kotlin/cz/covid19cz/erouska/ui/error/entity/ErrorType.kt",
    "content": "package cz.covid19cz.erouska.ui.error.entity\n\nenum class ErrorType {\n    NO_INTERNET, GENERAL_ERROR, INVALID_CODE, EXPIRED_OR_USED_CODE\n}"
  },
  {
    "path": "app/src/main/kotlin/cz/covid19cz/erouska/ui/exposure/ExposureFragment.kt",
    "content": "package cz.covid19cz.erouska.ui.exposure\n\nimport android.os.Bundle\nimport android.view.Menu\nimport android.view.MenuInflater\nimport android.view.View\nimport androidx.navigation.fragment.navArgs\nimport cz.covid19cz.erouska.AppConfig\nimport cz.covid19cz.erouska.R\nimport cz.covid19cz.erouska.databinding.FragmentExposureBinding\nimport cz.covid19cz.erouska.ext.hide\nimport cz.covid19cz.erouska.ext.show\nimport cz.covid19cz.erouska.ui.base.BaseFragment\nimport cz.covid19cz.erouska.ui.exposure.event.ExposuresCommandEvent\nimport cz.covid19cz.erouska.ui.exposurehelp.entity.ExposureHelpType\nimport dagger.hilt.android.AndroidEntryPoint\nimport kotlinx.android.synthetic.main.fragment_exposure.*\n\n@AndroidEntryPoint\nclass ExposureFragment : BaseFragment<FragmentExposureBinding, ExposureVM>(\n    R.layout.fragment_exposure,\n    ExposureVM::class\n) {\n\n    val args: ExposureFragmentArgs by navArgs()\n\n    override fun onCreate(savedInstanceState: Bundle?) {\n        super.onCreate(savedInstanceState)\n        setHasOptionsMenu(true)\n    }\n\n    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {\n        super.onViewCreated(view, savedInstanceState)\n        enableUpInToolbar(true, IconType.CLOSE)\n\n        activity?.title = AppConfig.exposureUITitle\n\n        symptoms_text.text = AppConfig.symptomsUITitle\n        spread_text.text = AppConfig.spreadPreventionUITitle\n        earlier_exposures_text.text = AppConfig.recentExposuresUITitle\n        symptoms_content.text = AppConfig.riskyEncountersWithSymptoms\n        no_symptoms_content.text = AppConfig.riskyEncountersWithoutSymptoms\n\n        viewModel.checkExposures(args.demo)\n\n        subscribe(ExposuresCommandEvent::class) {\n            when (it.command) {\n                ExposuresCommandEvent.Command.NO_RECENT_EXPOSURES -> onNoRecentExposures()\n                ExposuresCommandEvent.Command.RECENT_EXPOSURE -> onRecentExposures()\n            }\n        }\n\n        setupListeners()\n    }\n\n    private fun setupListeners() {\n        symptoms_container.setOnClickListener { navigate(ExposureFragmentDirections.actionNavExposureToNavExposureHelp(ExposureHelpType.SYMPTOMS)) }\n        spread_prevention_container.setOnClickListener { navigate(ExposureFragmentDirections.actionNavExposureToNavExposureHelp(ExposureHelpType.PREVENTION)) }\n        earlier_exposures_container.setOnClickListener { navigate(R.id.action_nav_dashboard_to_nav_recent_exposures) }\n    }\n\n    private fun onNoRecentExposures() {\n        no_exposures_header.text = AppConfig.noEncounterHeader\n        no_exposures_body.text = AppConfig.noEncounterBody\n\n        no_exposures_group.show()\n        exposures_group.hide()\n    }\n\n    private fun onRecentExposures() {\n        exposures_group.show()\n        no_exposures_group.hide()\n    }\n\n    override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) {\n        inflater.inflate(R.menu.exposure, menu)\n        super.onCreateOptionsMenu(menu, inflater)\n    }\n\n}\n"
  },
  {
    "path": "app/src/main/kotlin/cz/covid19cz/erouska/ui/exposure/ExposureVM.kt",
    "content": "package cz.covid19cz.erouska.ui.exposure\n\nimport androidx.lifecycle.MutableLiveData\nimport androidx.lifecycle.viewModelScope\nimport cz.covid19cz.erouska.db.SharedPrefsRepository\nimport cz.covid19cz.erouska.exposurenotifications.ExposureNotificationsRepository\nimport cz.covid19cz.erouska.ext.daysSinceEpochToDateString\nimport cz.covid19cz.erouska.ui.base.BaseVM\nimport cz.covid19cz.erouska.ui.exposure.event.ExposuresCommandEvent\nimport cz.covid19cz.erouska.utils.L\nimport dagger.hilt.android.lifecycle.HiltViewModel\nimport kotlinx.coroutines.launch\nimport javax.inject.Inject\n\n@HiltViewModel\nclass ExposureVM @Inject constructor(private val exposureNotificationsRepo: ExposureNotificationsRepository, private val prefs : SharedPrefsRepository) :\n    BaseVM() {\n\n    val lastExposureDate = MutableLiveData<String>()\n\n    fun checkExposures(demo: Boolean) {\n        if (!demo) {\n            viewModelScope.launch {\n                kotlin.runCatching {\n                    exposureNotificationsRepo.getLastRiskyExposure()\n                }.onSuccess {\n                    publish(\n                        ExposuresCommandEvent(\n                            if (it != null) {\n                                lastExposureDate.value = it.daysSinceEpoch.daysSinceEpochToDateString()\n                                ExposuresCommandEvent.Command.RECENT_EXPOSURE\n                            } else {\n                                ExposuresCommandEvent.Command.NO_RECENT_EXPOSURES\n                            }\n                        )\n                    )\n                }.onFailure {\n                    L.e(it)\n                }\n            }\n        } else {\n            lastExposureDate.value =\n                ((System.currentTimeMillis() / 1000 / 60 / 60 / 24) - 3).toInt()\n                    .daysSinceEpochToDateString()\n            publish(\n                ExposuresCommandEvent(ExposuresCommandEvent.Command.RECENT_EXPOSURE)\n            )\n        }\n    }\n\n    fun debugRecentExp() {\n        publish(ExposuresCommandEvent(ExposuresCommandEvent.Command.RECENT_EXPOSURE))\n    }\n\n    fun debugExp() {\n        publish(ExposuresCommandEvent(ExposuresCommandEvent.Command.NO_RECENT_EXPOSURES))\n    }\n\n}"
  },
  {
    "path": "app/src/main/kotlin/cz/covid19cz/erouska/ui/exposure/event/ExposuresEvent.kt",
    "content": "package cz.covid19cz.erouska.ui.exposure.event\n\nimport arch.event.LiveEvent\n\nclass ExposuresCommandEvent(val command: Command) : LiveEvent() {\n\n    enum class Command {\n        NO_RECENT_EXPOSURES,\n        RECENT_EXPOSURE\n    }\n\n}\n"
  },
  {
    "path": "app/src/main/kotlin/cz/covid19cz/erouska/ui/exposurehelp/ExposureHelpFragment.kt",
    "content": "package cz.covid19cz.erouska.ui.exposurehelp\n\nimport android.os.Bundle\nimport androidx.navigation.fragment.navArgs\nimport cz.covid19cz.erouska.AppConfig\nimport cz.covid19cz.erouska.R\nimport cz.covid19cz.erouska.databinding.FragmentExposureHelpBinding\nimport cz.covid19cz.erouska.ui.base.BaseFragment\nimport cz.covid19cz.erouska.ui.exposurehelp.entity.ExposureHelpType\nimport dagger.hilt.android.AndroidEntryPoint\n\n@AndroidEntryPoint\nclass ExposureHelpFragment : BaseFragment<FragmentExposureHelpBinding, ExposureHelpVM>(\n    R.layout.fragment_exposure_help,\n    ExposureHelpVM::class\n) {\n\n    val args: ExposureHelpFragmentArgs by navArgs()\n\n    override fun onCreate(savedInstanceState: Bundle?) {\n        super.onCreate(savedInstanceState)\n\n        enableUpInToolbar(true, IconType.CLOSE)\n\n        when (args.type) {\n            ExposureHelpType.SYMPTOMS -> {\n                activity?.title = AppConfig.symptomsUITitle\n                viewModel.setData(AppConfig.symptomsContentJson)\n            }\n            ExposureHelpType.PREVENTION -> {\n                activity?.title = AppConfig.spreadPreventionUITitle\n                viewModel.setData(AppConfig.preventionContentJson, bottomTitle = true)\n            }\n            ExposureHelpType.EXPOSURE -> {\n                activity?.title = AppConfig.exposureHelpUITitle\n                viewModel.setData(AppConfig.exposureHelpContentJson)\n            }\n        }\n    }\n}"
  },
  {
    "path": "app/src/main/kotlin/cz/covid19cz/erouska/ui/exposurehelp/ExposureHelpVM.kt",
    "content": "package cz.covid19cz.erouska.ui.exposurehelp\n\nimport androidx.databinding.ObservableArrayList\nimport arch.adapter.RecyclerLayoutStrategy\nimport com.google.gson.Gson\nimport cz.covid19cz.erouska.R\nimport cz.covid19cz.erouska.ui.base.BaseVM\nimport cz.covid19cz.erouska.ui.exposurehelp.entity.ExposureHelpData\nimport cz.covid19cz.erouska.ui.exposurehelp.entity.ExposureHelpItem\nimport cz.covid19cz.erouska.ui.exposurehelp.entity.ExposureHelpTitle\nimport java.lang.IllegalArgumentException\n\nclass ExposureHelpVM : BaseVM(){\n\n    val layoutStrategy = object: RecyclerLayoutStrategy {\n        override fun getLayoutId(item: Any): Int {\n            return when(item){\n                is ExposureHelpItem -> R.layout.item_exposure_help\n                is ExposureHelpTitle -> R.layout.item_exposure_help_title\n                else -> throw IllegalArgumentException(\"Missing layout mapping\")\n            }\n        }\n    }\n\n    val items = ObservableArrayList<Any>()\n\n    fun setData(jsonData : String, bottomTitle : Boolean = false){\n        val data: ExposureHelpData = Gson().fromJson(jsonData, ExposureHelpData::class.java)\n        items.clear()\n        if (data.title != null && !bottomTitle){\n            items.add(ExposureHelpTitle(data.title))\n        }\n        items.addAll(data.items)\n        if (data.title != null && bottomTitle){\n            items.add(ExposureHelpTitle(data.title))\n        }\n    }\n\n}"
  },
  {
    "path": "app/src/main/kotlin/cz/covid19cz/erouska/ui/exposurehelp/entity/ExposureHelpData.kt",
    "content": "package cz.covid19cz.erouska.ui.exposurehelp.entity\n\ndata class ExposureHelpData(\n    val title: String?,\n    val items: ArrayList<ExposureHelpItem>\n)"
  },
  {
    "path": "app/src/main/kotlin/cz/covid19cz/erouska/ui/exposurehelp/entity/ExposureHelpItem.kt",
    "content": "package cz.covid19cz.erouska.ui.exposurehelp.entity\n\ndata class ExposureHelpItem(\n    val iconUrl: String,\n    val label: String\n)"
  },
  {
    "path": "app/src/main/kotlin/cz/covid19cz/erouska/ui/exposurehelp/entity/ExposureHelpTitle.kt",
    "content": "package cz.covid19cz.erouska.ui.exposurehelp.entity\n\nclass ExposureHelpTitle(val title : String)"
  },
  {
    "path": "app/src/main/kotlin/cz/covid19cz/erouska/ui/exposurehelp/entity/ExposureHelpType.kt",
    "content": "package cz.covid19cz.erouska.ui.exposurehelp.entity\n\nenum class ExposureHelpType {\n    SYMPTOMS, PREVENTION, EXPOSURE\n}"
  },
  {
    "path": "app/src/main/kotlin/cz/covid19cz/erouska/ui/exposureinfo/ExposureInfoFragment.kt",
    "content": "package cz.covid19cz.erouska.ui.exposureinfo\n\nimport android.os.Bundle\nimport android.view.Menu\nimport android.view.MenuInflater\nimport android.view.View\nimport androidx.navigation.fragment.navArgs\nimport cz.covid19cz.erouska.AppConfig\nimport cz.covid19cz.erouska.R\nimport cz.covid19cz.erouska.databinding.FragmentExposureInfoBinding\nimport cz.covid19cz.erouska.ui.base.BaseFragment\nimport dagger.hilt.android.AndroidEntryPoint\n\n@AndroidEntryPoint\nclass ExposureInfoFragment : BaseFragment<FragmentExposureInfoBinding, ExposureInfoVM>(R.layout.fragment_exposure_info, ExposureInfoVM::class) {\n\n    val args: ExposureInfoFragmentArgs by navArgs()\n\n    override fun onCreate(savedInstanceState: Bundle?) {\n        super.onCreate(savedInstanceState)\n        setHasOptionsMenu(true)\n        viewModel.demo = args.demo\n    }\n\n    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {\n        super.onViewCreated(view, savedInstanceState)\n        enableUpInToolbar(true, IconType.CLOSE)\n        activity?.title = AppConfig.exposureUITitle\n    }\n\n    override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) {\n        inflater.inflate(R.menu.exposure, menu)\n        super.onCreateOptionsMenu(menu, inflater)\n    }\n}"
  },
  {
    "path": "app/src/main/kotlin/cz/covid19cz/erouska/ui/exposureinfo/ExposureInfoVM.kt",
    "content": "package cz.covid19cz.erouska.ui.exposureinfo\n\nimport androidx.lifecycle.Lifecycle\nimport androidx.lifecycle.MutableLiveData\nimport androidx.lifecycle.OnLifecycleEvent\nimport androidx.lifecycle.viewModelScope\nimport cz.covid19cz.erouska.db.SharedPrefsRepository\nimport cz.covid19cz.erouska.exposurenotifications.ExposureNotificationsRepository\nimport cz.covid19cz.erouska.ui.base.BaseVM\nimport dagger.hilt.android.lifecycle.HiltViewModel\nimport kotlinx.coroutines.launch\nimport javax.inject.Inject\n\n@HiltViewModel\nclass ExposureInfoVM @Inject constructor(private val exposureNotificationsRepo : ExposureNotificationsRepository, private val prefs : SharedPrefsRepository) : BaseVM(){\n\n    val date = MutableLiveData<String>()\n    var demo = false\n\n    @OnLifecycleEvent(Lifecycle.Event.ON_CREATE)\n    fun onCreate(){\n        viewModelScope.launch {\n            exposureNotificationsRepo.getLastRiskyExposure(demo)?.let {\n                date.value = exposureNotificationsRepo.getLastRiskyExposure(demo)?.getDateString()\n                prefs.setLastShownExposureInfo(it.daysSinceEpoch)\n            }\n        }\n    }\n\n    fun dismiss(){\n        navigate(ExposureInfoFragmentDirections.actionNavExposureInfoToNavExposure())\n    }\n}"
  },
  {
    "path": "app/src/main/kotlin/cz/covid19cz/erouska/ui/help/HelpFragment.kt",
    "content": "package cz.covid19cz.erouska.ui.help\n\nimport android.os.Bundle\nimport android.view.View\nimport androidx.lifecycle.lifecycleScope\nimport androidx.navigation.fragment.navArgs\nimport cz.covid19cz.erouska.R\nimport cz.covid19cz.erouska.databinding.FragmentHelpBinding\nimport cz.covid19cz.erouska.ui.base.BaseFragment\nimport cz.covid19cz.erouska.utils.SupportEmailGenerator\nimport dagger.hilt.android.AndroidEntryPoint\nimport kotlinx.android.synthetic.main.fragment_help.*\nimport kotlinx.android.synthetic.main.search_toolbar.*\nimport javax.inject.Inject\n\n@AndroidEntryPoint\nclass HelpFragment : BaseFragment<FragmentHelpBinding, HelpVM>(\n    R.layout.fragment_help,\n    HelpVM::class\n) {\n\n    companion object {\n        private const val SCREEN_NAME = \"Help\"\n    }\n\n    private val args: HelpFragmentArgs by navArgs()\n\n    @Inject\n    internal lateinit var supportEmailGenerator: SupportEmailGenerator\n\n    override fun onCreate(savedInstanceState: Bundle?) {\n        super.onCreate(savedInstanceState)\n        viewModel.fillInHelp()\n    }\n\n    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {\n        super.onViewCreated(view, savedInstanceState)\n\n        args.fullscreen.let { fullscreen ->\n            enableUpInToolbar(\n                fullscreen,\n                if (fullscreen) {\n                    IconType.CLOSE\n                } else {\n                    IconType.UP\n                }\n            )\n        }\n\n        activity?.toolbar_search_view?.apply {\n\n            setQuery(\"\", false)\n\n            setOnSearchClickListener {\n                viewModel.onSearchTapped()\n            }\n\n            isIconified = true\n\n        }\n\n        support_button.setOnClickListener {\n            supportEmailGenerator.sendSupportEmail(\n                requireActivity(),\n                lifecycleScope,\n                isError = false,\n                screenOrigin = SCREEN_NAME\n            )\n        }\n\n    }\n\n}\n"
  },
  {
    "path": "app/src/main/kotlin/cz/covid19cz/erouska/ui/help/HelpVM.kt",
    "content": "package cz.covid19cz.erouska.ui.help\n\nimport androidx.databinding.ObservableArrayList\nimport arch.adapter.RecyclerLayoutStrategy\nimport cz.covid19cz.erouska.AppConfig\nimport cz.covid19cz.erouska.R\nimport cz.covid19cz.erouska.ui.about.AboutFragmentArgs\nimport cz.covid19cz.erouska.ui.base.BaseVM\nimport cz.covid19cz.erouska.ui.help.data.*\nimport cz.covid19cz.erouska.ui.helpcategory.HelpCategoryFragmentArgs\nimport dagger.hilt.android.lifecycle.HiltViewModel\nimport javax.inject.Inject\n\n@HiltViewModel\nclass HelpVM @Inject constructor() : BaseVM() {\n\n    val layoutStrategy = object : RecyclerLayoutStrategy {\n        override fun getLayoutId(item: Any): Int {\n            return when (item) {\n                is FaqCategory -> R.layout.item_help_faq_category\n                is AboutAppCategory -> R.layout.item_help_about_category\n                else -> R.layout.item_help_how_category\n            }\n        }\n    }\n\n    var items = ObservableArrayList<Category>()\n\n    fun fillInHelp() {\n        items.clear()\n        items.add(HowItWorksCategory())\n        items.addAll(AppConfig.helpJson.toFaqCategories())\n        items.add(AboutAppCategory())\n    }\n\n    fun onSearchTapped() = navigate(R.id.nav_help_search)\n\n    fun onItemClicked(category: Category) {\n        when (category) {\n            is FaqCategory -> {\n                navigate(\n                    R.id.nav_help_category,\n                    HelpCategoryFragmentArgs(category = category).toBundle()\n                )\n            }\n\n            is AboutAppCategory -> {\n                navigate(\n                    R.id.nav_about,\n                    AboutFragmentArgs(fullscreen = true).toBundle()\n                )\n            }\n\n            is HowItWorksCategory -> {\n                navigate(\n                    R.id.nav_how_it_works\n                )\n            }\n        }\n\n    }\n\n}\n"
  },
  {
    "path": "app/src/main/kotlin/cz/covid19cz/erouska/ui/help/data/AboutAppCategory.kt",
    "content": "package cz.covid19cz.erouska.ui.help.data\n\nclass AboutAppCategory : Category\n"
  },
  {
    "path": "app/src/main/kotlin/cz/covid19cz/erouska/ui/help/data/Category.kt",
    "content": "package cz.covid19cz.erouska.ui.help.data\n\ninterface Category\n"
  },
  {
    "path": "app/src/main/kotlin/cz/covid19cz/erouska/ui/help/data/FaqCategory.kt",
    "content": "package cz.covid19cz.erouska.ui.help.data\n\nimport android.os.Parcelable\nimport com.google.gson.Gson\nimport com.google.gson.JsonParseException\nimport com.google.gson.reflect.TypeToken\nimport cz.covid19cz.erouska.utils.L\nimport kotlinx.android.parcel.Parcelize\nimport java.lang.reflect.Type\nimport java.util.*\n\n@Parcelize\ndata class FaqCategory(\n    val title: String,\n    val subtitle: String,\n    val icon: String,\n    val questions: List<Question>\n) : Category, Parcelable\n\nfun String?.toFaqCategories(): List<FaqCategory> {\n    val categoryType: Type = object : TypeToken<ArrayList<FaqCategory>>() {}.type\n    return try {\n        val structuredQs: ArrayList<FaqCategory>? = Gson().fromJson(this, categoryType)\n        structuredQs.orEmpty()\n    } catch (ex1: JsonParseException) {\n        L.e(ex1)\n        Collections.emptyList()\n    }\n}\n\n"
  },
  {
    "path": "app/src/main/kotlin/cz/covid19cz/erouska/ui/help/data/HowToCategory.kt",
    "content": "package cz.covid19cz.erouska.ui.help.data\n\nclass HowItWorksCategory : Category\n"
  },
  {
    "path": "app/src/main/kotlin/cz/covid19cz/erouska/ui/help/data/Question.kt",
    "content": "package cz.covid19cz.erouska.ui.help.data\n\nimport android.os.Parcelable\nimport kotlinx.android.parcel.Parcelize\n\n@Parcelize\ndata class Question\nconstructor(\n    var question: String,\n    var answer: String\n) : Parcelable"
  },
  {
    "path": "app/src/main/kotlin/cz/covid19cz/erouska/ui/helpcategory/HelpCategoryFragment.kt",
    "content": "package cz.covid19cz.erouska.ui.helpcategory\n\nimport android.os.Bundle\nimport android.view.View\nimport androidx.navigation.fragment.navArgs\nimport cz.covid19cz.erouska.R\nimport cz.covid19cz.erouska.databinding.FragmentHelpCategoryBinding\nimport cz.covid19cz.erouska.ui.base.BaseFragment\nimport dagger.hilt.android.AndroidEntryPoint\nimport kotlinx.android.synthetic.main.search_toolbar.*\n\n@AndroidEntryPoint\nclass HelpCategoryFragment : BaseFragment<FragmentHelpCategoryBinding, HelpCategoryVM>(\n    R.layout.fragment_help_category,\n    HelpCategoryVM::class\n) {\n\n    private val args: HelpCategoryFragmentArgs by navArgs()\n\n    override fun onCreate(savedInstanceState: Bundle?) {\n        super.onCreate(savedInstanceState)\n        viewModel.fillInQuestions(args.category.questions)\n        viewModel.categoryTitle = args.category.title\n    }\n\n    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {\n        super.onViewCreated(view, savedInstanceState)\n        enableUpInToolbar(true, IconType.UP)\n        activity?.title = viewModel.categoryTitle\n\n        activity?.toolbar_search_view?.apply {\n\n            setQuery(\"\", false)\n\n            setOnSearchClickListener {\n                viewModel.onSearchTapped()\n            }\n\n            isIconified = true\n\n        }\n\n    }\n\n}\n"
  },
  {
    "path": "app/src/main/kotlin/cz/covid19cz/erouska/ui/helpcategory/HelpCategoryVM.kt",
    "content": "package cz.covid19cz.erouska.ui.helpcategory\n\nimport androidx.databinding.ObservableArrayList\nimport arch.adapter.RecyclerLayoutStrategy\nimport cz.covid19cz.erouska.R\nimport cz.covid19cz.erouska.ui.base.BaseVM\nimport cz.covid19cz.erouska.ui.help.data.Question\nimport cz.covid19cz.erouska.ui.helpquestion.HelpQuestionFragmentArgs\nimport dagger.hilt.android.lifecycle.HiltViewModel\nimport javax.inject.Inject\n\n@HiltViewModel\nclass HelpCategoryVM @Inject constructor() : BaseVM() {\n\n    lateinit var categoryTitle: String\n\n    val layoutStrategy = object : RecyclerLayoutStrategy {\n        override fun getLayoutId(item: Any): Int {\n            return R.layout.item_help_question\n        }\n    }\n\n    var items = ObservableArrayList<Question>()\n\n    fun onItemClicked(question: Question) {\n        navigate(R.id.nav_help_question, HelpQuestionFragmentArgs(question = question, category = categoryTitle).toBundle())\n    }\n\n    fun fillInQuestions(questions: List<Question>) {\n        items.addAll(questions)\n    }\n\n    fun onSearchTapped() = navigate(R.id.nav_help_search)\n\n}\n"
  },
  {
    "path": "app/src/main/kotlin/cz/covid19cz/erouska/ui/helpquestion/HelpQuestionFragment.kt",
    "content": "package cz.covid19cz.erouska.ui.helpquestion\n\nimport android.os.Bundle\nimport android.view.View\nimport androidx.navigation.fragment.navArgs\nimport cz.covid19cz.erouska.R\nimport cz.covid19cz.erouska.databinding.FragmentHelpQuestionBinding\nimport cz.covid19cz.erouska.ui.base.BaseFragment\nimport cz.covid19cz.erouska.utils.Markdown\nimport dagger.hilt.android.AndroidEntryPoint\nimport kotlinx.android.synthetic.main.fragment_help_question.*\nimport javax.inject.Inject\n\n@AndroidEntryPoint\nclass HelpQuestionFragment : BaseFragment<FragmentHelpQuestionBinding, HelpQuestionVM>(\n    R.layout.fragment_help_question,\n    HelpQuestionVM::class\n) {\n\n    @Inject\n    lateinit var markdown: Markdown\n\n    private val args: HelpQuestionFragmentArgs by navArgs()\n\n    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {\n        super.onViewCreated(view, savedInstanceState)\n        enableUpInToolbar(true, IconType.UP)\n        activity?.title = args.category\n\n        markdown.show(question, args.question.question)\n        markdown.show(answer, args.question.answer)\n\n    }\n\n}\n"
  },
  {
    "path": "app/src/main/kotlin/cz/covid19cz/erouska/ui/helpquestion/HelpQuestionVM.kt",
    "content": "package cz.covid19cz.erouska.ui.helpquestion\n\nimport androidx.databinding.ObservableArrayList\nimport arch.adapter.RecyclerLayoutStrategy\nimport cz.covid19cz.erouska.R\nimport cz.covid19cz.erouska.ui.base.BaseVM\nimport cz.covid19cz.erouska.ui.help.data.Question\nimport dagger.hilt.android.lifecycle.HiltViewModel\nimport javax.inject.Inject\n\n@HiltViewModel\nclass HelpQuestionVM @Inject constructor() : BaseVM() {\n\n    val layoutStrategy = object : RecyclerLayoutStrategy {\n        override fun getLayoutId(item: Any): Int {\n            return R.layout.item_help_question\n        }\n    }\n\n    var items = ObservableArrayList<Question>()\n\n}\n"
  },
  {
    "path": "app/src/main/kotlin/cz/covid19cz/erouska/ui/helpsearch/HelpSearchFragment.kt",
    "content": "package cz.covid19cz.erouska.ui.helpsearch\n\nimport android.app.SearchManager\nimport android.content.Context\nimport android.os.Bundle\nimport android.view.MenuItem\nimport android.view.View\nimport android.widget.SearchView\nimport androidx.lifecycle.Observer\nimport cz.covid19cz.erouska.R\nimport cz.covid19cz.erouska.databinding.FragmentHelpSearchBinding\nimport cz.covid19cz.erouska.ext.attachKeyboardController\nimport cz.covid19cz.erouska.ext.show\nimport cz.covid19cz.erouska.ui.base.BaseFragment\nimport cz.covid19cz.erouska.utils.Markdown\nimport cz.covid19cz.erouska.utils.showOrHide\nimport dagger.hilt.android.AndroidEntryPoint\nimport kotlinx.android.synthetic.main.fragment_help_search.*\nimport kotlinx.android.synthetic.main.search_toolbar.*\nimport javax.inject.Inject\n\n@AndroidEntryPoint\nclass HelpSearchFragment : BaseFragment<FragmentHelpSearchBinding, HelpSearchVM>(\n    R.layout.fragment_help_search,\n    HelpSearchVM::class\n) {\n\n    @Inject\n    internal lateinit var markdown: Markdown\n\n    override fun onOptionsItemSelected(item: MenuItem): Boolean {\n        return when (item.itemId) {\n            android.R.id.home -> {\n                goBack()\n                true\n            }\n            else -> super.onOptionsItemSelected(item)\n        }\n    }\n\n    override fun onCreate(savedInstanceState: Bundle?) {\n        super.onCreate(savedInstanceState)\n        viewModel.fillQuestions()\n\n        viewModel.queryData.observe(this,\n            Observer {\n                when {\n                    it.isEmpty() -> empty_text_view.text = \"\"\n                    it.length < viewModel.minQueryLength -> empty_text_view.setText(R.string.help_type_more)\n                    else -> empty_text_view.setText(R.string.help_no_results)\n                }\n            })\n\n        viewModel.searchEmpty.observe(this,\n            Observer { isEmpty ->\n                help_categories.showOrHide(!isEmpty)\n                empty_text_view.showOrHide(isEmpty)\n                empty_image_view.showOrHide(isEmpty)\n            })\n\n    }\n\n    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {\n        super.onViewCreated(view, savedInstanceState)\n        enableUpInToolbar(true, IconType.UP)\n\n        // Associate searchable configuration with the SearchView\n        val searchManager = activity?.getSystemService(Context.SEARCH_SERVICE) as SearchManager\n\n        activity?.toolbar_search_view?.apply {\n\n            attachKeyboardController()\n            setSearchableInfo(searchManager.getSearchableInfo(activity?.componentName))\n\n            setOnQueryTextListener(object : SearchView.OnQueryTextListener {\n\n                override fun onQueryTextSubmit(query: String?): Boolean {\n                    return false\n                }\n\n                override fun onQueryTextChange(query: String?): Boolean {\n                    viewModel.searchQuery(query)\n                    return true\n                }\n\n            })\n\n            setOnCloseListener {\n                goBack()\n                true\n            }\n\n            show()\n            requestFocus()\n\n        }\n\n    }\n\n    override fun onBackPressed(): Boolean {\n        goBack()\n        return true\n    }\n\n    private fun removeSearchViewCallbacks() {\n        activity?.toolbar_search_view?.apply {\n            setOnCloseListener(null)\n            setOnQueryTextListener(null)\n        }\n    }\n\n    private fun goBack() {\n        removeSearchViewCallbacks()\n        collapseSearchView()\n        navController().navigateUp()\n    }\n\n    private fun collapseSearchView() {\n        activity?.toolbar_search_view?.apply {\n            setQuery(\"\", false)\n        }\n    }\n\n}\n"
  },
  {
    "path": "app/src/main/kotlin/cz/covid19cz/erouska/ui/helpsearch/HelpSearchVM.kt",
    "content": "package cz.covid19cz.erouska.ui.helpsearch\n\nimport androidx.databinding.ObservableArrayList\nimport androidx.lifecycle.viewModelScope\nimport arch.adapter.RecyclerLayoutStrategy\nimport arch.livedata.SafeMutableLiveData\nimport cz.covid19cz.erouska.AppConfig\nimport cz.covid19cz.erouska.R\nimport cz.covid19cz.erouska.ui.base.BaseVM\nimport cz.covid19cz.erouska.ui.help.data.FaqCategory\nimport cz.covid19cz.erouska.ui.help.data.toFaqCategories\nimport cz.covid19cz.erouska.ui.helpsearch.data.SearchableQuestion\nimport cz.covid19cz.erouska.utils.L\nimport cz.covid19cz.erouska.utils.Markdown\nimport dagger.hilt.android.lifecycle.HiltViewModel\nimport kotlinx.coroutines.*\nimport org.apache.commons.lang3.StringUtils\nimport java.util.regex.Pattern\nimport javax.inject.Inject\n\n@HiltViewModel\nclass HelpSearchVM @Inject constructor(\n    val markdown: Markdown\n) : BaseVM() {\n\n    val layoutStrategy = object : RecyclerLayoutStrategy {\n        override fun getLayoutId(item: Any): Int {\n            return R.layout.item_search\n        }\n    }\n\n    val searchResult = ObservableArrayList<SearchableQuestion>()\n    val searchEmpty = SafeMutableLiveData(searchResult.isEmpty())\n    val content = ArrayList<SearchableQuestion>()\n    val queryData = SafeMutableLiveData(\"\")\n    val minQueryLength = 2\n\n    private var searchJob: Job? = null\n\n    fun fillQuestions() {\n        val structuredQs: List<FaqCategory> = AppConfig.helpJson.toFaqCategories()\n\n        val allQuestions = structuredQs.map {\n            it.questions.map { question ->\n                SearchableQuestion(it.title, question.question, question.answer)\n            }\n        }.flatten()\n\n        content.clear()\n        content.addAll(allQuestions)\n    }\n\n    fun searchQuery(query: String?) {\n        searchJob?.cancel()\n        this.queryData.value = query?.trim() ?: \"\"\n\n        if (queryData.value.length >= minQueryLength) {\n            searchJob = viewModelScope.launch {\n                startSearch()\n            }\n        } else {\n            resetSearchResult()\n        }\n    }\n\n    private suspend fun updateSearchResult(searchResults: List<SearchableQuestion>) =\n        withContext(Dispatchers.Main) {\n            searchResult.clear()\n            searchResult.addAll(searchResults)\n            updateSearchResultCount()\n        }\n\n    private fun resetSearchResult() {\n        searchResult.clear()\n        updateSearchResultCount()\n    }\n\n    private fun updateSearchResultCount() {\n        searchEmpty.postValue(searchResult.isEmpty())\n    }\n\n    private suspend fun startSearch() = withContext(Dispatchers.Default) {\n        val result = searchQueryInText()\n        if (isActive) {\n            updateSearchResult(result)\n        } else {\n            L.d(\"Job was already cancelled, not going to display results\")\n        }\n    }\n\n    private fun searchQueryInText(): List<SearchableQuestion> {\n        val tempSearchResult = mutableListOf<SearchableQuestion>()\n        content.forEach { question ->\n            val newQ = highlightSearchedText(question.question)\n            val newA = highlightSearchedText(question.answer)\n\n            if (newQ.second || newA.second) {\n                val q = SearchableQuestion(question.category)\n                q.answer = newA.first\n                q.question = newQ.first\n                tempSearchResult.add(q)\n            }\n        }\n        return tempSearchResult\n    }\n\n    private fun highlightSearchedText(originalText: String): Pair<String, Boolean> {\n        val pattern = StringUtils.stripAccents(queryData.value)\n        val r = Pattern.compile(pattern, Pattern.CASE_INSENSITIVE)\n        val searchedText = StringUtils.stripAccents(originalText)\n        var printedText = originalText\n\n        val m = r.matcher(searchedText)\n\n        val replaceList = arrayListOf<String>()\n        while (m.find()) {\n            replaceList.add(printedText.substring(m.start(0), m.end(0)))\n        }\n        val searchMatches = replaceList.distinct()\n\n        for (replaceString in searchMatches) {\n            printedText = printedText.replace(\n                replaceString,\n                \"${Markdown.doubleSearchChar}${replaceString}${Markdown.doubleSearchChar}\"\n            )\n        }\n\n        return Pair(printedText, searchMatches.isNotEmpty())\n    }\n\n}\n"
  },
  {
    "path": "app/src/main/kotlin/cz/covid19cz/erouska/ui/helpsearch/data/SearchableQuestion.kt",
    "content": "package cz.covid19cz.erouska.ui.helpsearch.data\n\ndata class SearchableQuestion(\n    val category: String,\n    var question: String = \"\",\n    var answer: String = \"\"\n)"
  },
  {
    "path": "app/src/main/kotlin/cz/covid19cz/erouska/ui/helpsearch/ui/SearchableItem.kt",
    "content": "package cz.covid19cz.erouska.ui.helpsearch.ui\n\nimport android.content.Context\nimport android.util.AttributeSet\nimport android.view.View\nimport android.widget.LinearLayout\nimport cz.covid19cz.erouska.R\nimport cz.covid19cz.erouska.utils.Markdown\nimport kotlinx.android.synthetic.main.item_search_layout.view.*\nimport javax.inject.Inject\n\nclass SearchableItem : LinearLayout {\n\n    constructor(context: Context) : super(context)\n    constructor(context: Context, attrs: AttributeSet?) : super(context, attrs)\n    constructor(context: Context, attrs: AttributeSet?, attributeSetId: Int) : super(\n        context,\n        attrs,\n        attributeSetId\n    )\n\n    init {\n        View.inflate(context, R.layout.item_search_layout, this)\n    }\n\n    @Inject\n    lateinit var markdown: Markdown\n\n    var search_category: String? = null\n        set(value) {\n            field = value\n            category.text = value\n        }\n\n    var search_question: String? = null\n        set(value) {\n            value?.let {\n                markdown.show(question, it)\n            }\n            field = value\n        }\n\n    var search_answer: String? = null\n        set(value) {\n            value?.let {\n                markdown.show(answer, it)\n            }\n            field = value\n        }\n\n}\n"
  },
  {
    "path": "app/src/main/kotlin/cz/covid19cz/erouska/ui/how/HowItWorksFragment.kt",
    "content": "package cz.covid19cz.erouska.ui.how\n\nimport android.os.Bundle\nimport android.view.View\nimport androidx.lifecycle.lifecycleScope\nimport cz.covid19cz.erouska.AppConfig\nimport cz.covid19cz.erouska.R\nimport cz.covid19cz.erouska.databinding.FragmentExposureBinding\nimport cz.covid19cz.erouska.ui.base.BaseFragment\nimport cz.covid19cz.erouska.ui.how.event.HowItWorksEvent\nimport cz.covid19cz.erouska.utils.SupportEmailGenerator\nimport dagger.hilt.android.AndroidEntryPoint\nimport kotlinx.android.synthetic.main.fragment_how_it_works.*\nimport javax.inject.Inject\n\n@AndroidEntryPoint\nclass HowItWorksFragment : BaseFragment<FragmentExposureBinding, HowItWorksVM>(\n    R.layout.fragment_how_it_works,\n    HowItWorksVM::class\n) {\n\n    companion object {\n        private const val SCREEN_NAME = \"How It Works\"\n    }\n\n    @Inject\n    internal lateinit var supportEmailGenerator: SupportEmailGenerator\n\n    override fun onCreate(savedInstanceState: Bundle?) {\n        super.onCreate(savedInstanceState)\n        setHasOptionsMenu(true)\n    }\n\n    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {\n        super.onViewCreated(view, savedInstanceState)\n        enableUpInToolbar(true, IconType.CLOSE)\n\n        activity?.title = AppConfig.howItWorksUITitle\n        how_it_works_eval_content.text = AppConfig.howItWorksEvalContent\n\n        subscribe(HowItWorksEvent::class) {\n            when (it.command) {\n                HowItWorksEvent.Command.WRITE_EMAIL -> onWriteEmail()\n                HowItWorksEvent.Command.CLOSE -> onClose()\n            }\n        }\n    }\n\n    private fun onWriteEmail() {\n        supportEmailGenerator.sendSupportEmail(\n            requireActivity(),\n            lifecycleScope,\n            recipient = AppConfig.supportEmail,\n            isError = false,\n            screenOrigin = SCREEN_NAME\n        )\n    }\n\n    private fun onClose() {\n        navController().navigateUp()\n    }\n}"
  },
  {
    "path": "app/src/main/kotlin/cz/covid19cz/erouska/ui/how/HowItWorksVM.kt",
    "content": "package cz.covid19cz.erouska.ui.how\n\nimport androidx.lifecycle.Lifecycle\nimport androidx.lifecycle.OnLifecycleEvent\nimport cz.covid19cz.erouska.db.SharedPrefsRepository\nimport cz.covid19cz.erouska.ui.base.BaseVM\nimport cz.covid19cz.erouska.ui.how.event.HowItWorksEvent\nimport dagger.hilt.android.lifecycle.HiltViewModel\nimport javax.inject.Inject\n\n@HiltViewModel\nclass HowItWorksVM @Inject constructor(private val prefs: SharedPrefsRepository) :\n    BaseVM() {\n\n    @OnLifecycleEvent(Lifecycle.Event.ON_CREATE)\n    fun onCreate() {\n        prefs.setHowItWorksShown()\n    }\n\n    fun writeEmail() {\n        publish(HowItWorksEvent(HowItWorksEvent.Command.WRITE_EMAIL))\n    }\n\n    fun close() {\n        publish(HowItWorksEvent(HowItWorksEvent.Command.CLOSE))\n    }\n}"
  },
  {
    "path": "app/src/main/kotlin/cz/covid19cz/erouska/ui/how/event/HowItWorksEvent.kt",
    "content": "package cz.covid19cz.erouska.ui.how.event\n\nimport arch.event.LiveEvent\n\nclass HowItWorksEvent(val command: Command) : LiveEvent() {\n\n    enum class Command {\n        WRITE_EMAIL,\n        CLOSE\n    }\n}"
  },
  {
    "path": "app/src/main/kotlin/cz/covid19cz/erouska/ui/main/MainActivity.kt",
    "content": "package cz.covid19cz.erouska.ui.main\n\nimport android.content.Intent\nimport android.net.Uri\nimport android.os.Bundle\nimport android.widget.Toast\nimport cz.covid19cz.erouska.R\nimport cz.covid19cz.erouska.databinding.ActivityRagnarokBinding\nimport cz.covid19cz.erouska.ui.base.BaseActivity\nimport cz.covid19cz.erouska.ui.base.UrlEvent\nimport cz.covid19cz.erouska.ui.ragnarok.RagnarokVM\nimport dagger.hilt.android.AndroidEntryPoint\nimport kotlinx.android.synthetic.main.activity_ragnarok.*\n\n@AndroidEntryPoint\nclass MainActivity : BaseActivity<ActivityRagnarokBinding, RagnarokVM>(R.layout.activity_ragnarok, RagnarokVM::class) {\n\n    override fun onCreate(savedInstanceState: Bundle?) {\n        super.onCreate(savedInstanceState)\n        subscribe(UrlEvent::class){\n            startActivity(Intent(Intent.ACTION_VIEW, Uri.parse(it.url)))\n        }\n        buttonMoreInfo.setOnLongClickListener {\n            Toast.makeText(this,\"eRagnarök\", Toast.LENGTH_LONG).show()\n            true\n        }\n    }\n}"
  },
  {
    "path": "app/src/main/kotlin/cz/covid19cz/erouska/ui/main/MainActivityOld.kt",
    "content": "package cz.covid19cz.erouska.ui.main\n\nimport android.content.ComponentName\nimport android.content.Intent\nimport android.os.Bundle\nimport android.view.MenuItem\nimport android.view.View.GONE\nimport android.view.View.VISIBLE\nimport androidx.browser.customtabs.CustomTabsClient\nimport androidx.browser.customtabs.CustomTabsServiceConnection\nimport androidx.core.content.ContextCompat\nimport androidx.lifecycle.Observer\nimport androidx.navigation.NavDestination\nimport androidx.navigation.NavOptions\nimport androidx.navigation.findNavController\nimport androidx.navigation.ui.NavigationUI\nimport com.google.android.play.core.review.ReviewInfo\nimport com.google.android.play.core.review.ReviewManager\nimport com.google.android.play.core.review.ReviewManagerFactory\nimport cz.covid19cz.erouska.R\nimport cz.covid19cz.erouska.databinding.ActivityMainBinding\nimport cz.covid19cz.erouska.db.SharedPrefsRepository\nimport cz.covid19cz.erouska.ui.base.BaseActivity\nimport cz.covid19cz.erouska.ui.exposurehelp.ExposureHelpFragmentArgs\nimport cz.covid19cz.erouska.ui.exposurehelp.entity.ExposureHelpType\nimport cz.covid19cz.erouska.utils.Analytics\nimport cz.covid19cz.erouska.utils.Analytics.KEY_CONTACTS\nimport cz.covid19cz.erouska.utils.Analytics.KEY_HELP\nimport cz.covid19cz.erouska.utils.Analytics.KEY_HOME\nimport cz.covid19cz.erouska.utils.Analytics.KEY_NEWS\nimport cz.covid19cz.erouska.utils.CustomTabHelper\nimport cz.covid19cz.erouska.utils.L\nimport cz.covid19cz.erouska.utils.showOrHide\nimport dagger.hilt.android.AndroidEntryPoint\nimport kotlinx.android.synthetic.main.activity_main.*\nimport kotlinx.android.synthetic.main.search_toolbar.*\nimport javax.inject.Inject\n\n@AndroidEntryPoint\nclass MainActivityOld :\n    BaseActivity<ActivityMainBinding, MainVM>(R.layout.activity_main, MainVM::class) {\n\n    @Inject\n    internal lateinit var customTabHelper: CustomTabHelper\n\n    @Inject\n    internal lateinit var prefs : SharedPrefsRepository\n\n    private lateinit var reviewManager: ReviewManager\n    var reviewInfo: ReviewInfo? = null\n\n    private val fragmentsWithSearch = arrayListOf(\n        R.id.nav_help,\n        R.id.nav_help_search,\n        R.id.nav_help_category\n    )\n\n    private val customTabsConnection = object : CustomTabsServiceConnection() {\n        override fun onCustomTabsServiceConnected(\n            name: ComponentName,\n            client: CustomTabsClient\n        ) {\n            connectedToCustomTabsService = true\n            client.warmup(0)\n        }\n\n        override fun onServiceDisconnected(name: ComponentName?) {\n            connectedToCustomTabsService = false\n        }\n    }\n    private var connectedToCustomTabsService = false\n\n    override fun onCreate(savedInstanceState: Bundle?) {\n        setTheme(R.style.AppTheme)\n        super.onCreate(savedInstanceState)\n        setSupportActionBar(toolbar)\n\n        findNavController(R.id.nav_host_fragment).let {\n            bottom_navigation.setOnNavigationItemSelectedListener { item ->\n                val options = NavOptions.Builder().setPopUpTo(R.id.nav_graph, false).build()\n                navigate(item.itemId, navOptions = options)\n                logTabClickEventToAnalytics(item)\n                true\n            }\n\n            it.addOnDestinationChangedListener { _, destination, arguments ->\n                updateTitle(destination)\n                toolbar_search_view.showOrHide(fragmentsWithSearch.contains(destination.id))\n                updateBottomNavigation(destination, arguments)\n            }\n        }\n\n        viewModel.serviceRunning.observe(this, Observer { isRunning ->\n            ContextCompat.getColor(\n                this,\n                if (isRunning) R.color.green else R.color.red\n            ).let {\n                bottom_navigation.getOrCreateBadge(R.id.nav_dashboard).backgroundColor = it\n            }\n        })\n    }\n\n    private fun logTabClickEventToAnalytics(item: MenuItem) {\n        val event = when (item.itemId) {\n            R.id.nav_dashboard -> KEY_HOME\n            R.id.nav_my_data -> KEY_NEWS\n            R.id.nav_contacts -> KEY_CONTACTS\n            R.id.nav_help -> KEY_HELP\n            else -> throw IllegalStateException(\"analytics event for ${item.title} is not mapped\")\n        }\n        Analytics.logEvent(this, event)\n    }\n\n    override fun onOptionsItemSelected(item: MenuItem): Boolean {\n        return when (item.itemId) {\n            R.id.nav_about -> {\n                false\n            }\n            R.id.nav_help -> {\n                navigate(R.id.nav_help, Bundle().apply { putBoolean(\"fullscreen\", true) })\n                true\n            }\n            R.id.nav_exposure_help -> {\n                navigate(\n                    R.id.nav_exposure_help,\n                    ExposureHelpFragmentArgs(ExposureHelpType.EXPOSURE).toBundle()\n                )\n                true\n            }\n            else -> {\n                NavigationUI.onNavDestinationSelected(\n                    item,\n                    findNavController(R.id.nav_host_fragment)\n                ) || super.onOptionsItemSelected(item)\n            }\n        }\n    }\n\n    override fun onStart() {\n        super.onStart()\n        customTabHelper.chromePackageName?.let {\n            CustomTabsClient.bindCustomTabsService(this, it, customTabsConnection)\n        }\n        prefs.setAppVisitedTimestamp()\n    }\n\n    override fun onStop() {\n        if (connectedToCustomTabsService) {\n            unbindService(customTabsConnection)\n            connectedToCustomTabsService = false\n        }\n        // saving timestamp in onStop so that it eliminates cases when the feature in question\n        // took place while being in the app\n        prefs.setAppVisitedTimestamp()\n        super.onStop()\n    }\n\n    /** Call this on a Fragment which might show reviews, ideally in onViewCreated **/\n    fun initReviews() {\n        reviewManager = ReviewManagerFactory.create(this)\n        reviewManager.requestReviewFlow().addOnCompleteListener { request ->\n            if (request.isSuccessful) {\n                reviewInfo = request.result\n            } else {\n                L.e(request.exception)\n            }\n        }\n    }\n\n    /** Call this when asking for review **/\n    fun askForReview() {\n        if (reviewInfo != null) {\n            reviewManager.launchReviewFlow(this, reviewInfo!!).addOnFailureListener {\n                L.e(it)\n            }.addOnCompleteListener { L.i(\"Review success\") }\n        }\n    }\n\n    private fun updateTitle(destination: NavDestination) {\n        if (destination.label != null) {\n            title = destination.label\n        } else {\n            setTitle(R.string.app_name)\n        }\n    }\n\n    private fun updateBottomNavigation(\n        destination: NavDestination,\n        arguments: Bundle?\n    ) {\n        bottom_navigation.visibility =\n            if (destination.arguments[\"fullscreen\"]?.defaultValue == true\n                || arguments?.getBoolean(\"fullscreen\") == true\n            ) {\n                GONE\n            } else {\n                VISIBLE\n            }\n    }\n    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {\n        super.onActivityResult(requestCode, resultCode, data)\n        L.d(\"$requestCode\")\n    }\n\n}\n"
  },
  {
    "path": "app/src/main/kotlin/cz/covid19cz/erouska/ui/main/MainVM.kt",
    "content": "package cz.covid19cz.erouska.ui.main\n\nimport androidx.lifecycle.Lifecycle\nimport androidx.lifecycle.OnLifecycleEvent\nimport arch.livedata.SafeMutableLiveData\nimport com.google.firebase.auth.FirebaseAuth\nimport cz.covid19cz.erouska.R\nimport cz.covid19cz.erouska.ui.base.BaseVM\nimport dagger.hilt.android.lifecycle.HiltViewModel\nimport javax.inject.Inject\n\n@HiltViewModel\nclass MainVM @Inject constructor(): BaseVM() {\n\n    val serviceRunning = SafeMutableLiveData(false)\n    private val auth: FirebaseAuth = FirebaseAuth.getInstance()\n\n    @OnLifecycleEvent(Lifecycle.Event.ON_CREATE)\n    fun onCreate() {\n        if (auth.currentUser == null) {\n            setNavigationGraph(R.navigation.nav_graph, R.id.nav_welcome_fragment)\n        } else {\n            setNavigationGraph(R.navigation.nav_graph, R.id.nav_dashboard)\n        }\n    }\n\n}"
  },
  {
    "path": "app/src/main/kotlin/cz/covid19cz/erouska/ui/mydata/CaseItemView.kt",
    "content": "package cz.covid19cz.erouska.ui.mydata\n\nimport android.content.Context\nimport android.graphics.drawable.Drawable\nimport android.util.AttributeSet\nimport android.view.View\nimport androidx.constraintlayout.widget.ConstraintLayout\nimport cz.covid19cz.erouska.R\nimport cz.covid19cz.erouska.ext.show\nimport kotlinx.android.synthetic.main.view_data_item.view.*\n\n\nclass CaseItemView : ConstraintLayout {\n    constructor(context: Context) : super(context)\n    constructor(context: Context, attrs: AttributeSet?) : super(context, attrs)\n    constructor(context: Context, attrs: AttributeSet?, attributeSetId: Int) : super(\n        context,\n        attrs,\n        attributeSetId\n    )\n\n    init {\n        View.inflate(context, R.layout.view_data_item, this)\n    }\n\n    var case_title: String? = null\n        set(value) {\n            field = value\n            title_text.text = value\n        }\n\n    var case_subtitle: String? = null\n        set(value) {\n            field = value\n            subtitle_text.text = value\n            subtitle_text.show()\n        }\n\n    var case_icon: Drawable? = null\n        set(value) {\n            field = value\n            value?.let {\n                icon.setImageDrawable(it)\n            }\n        }\n}\n\n\n\n\n"
  },
  {
    "path": "app/src/main/kotlin/cz/covid19cz/erouska/ui/mydata/MyDataFragment.kt",
    "content": "package cz.covid19cz.erouska.ui.mydata\n\nimport android.os.Bundle\nimport android.view.View\nimport cz.covid19cz.erouska.AppConfig\nimport cz.covid19cz.erouska.R\nimport cz.covid19cz.erouska.databinding.FragmentMyDataBinding\nimport cz.covid19cz.erouska.ext.showWeb\nimport cz.covid19cz.erouska.ui.base.BaseFragment\nimport cz.covid19cz.erouska.utils.Analytics\nimport cz.covid19cz.erouska.utils.Analytics.KEY_CURRENT_MEASURES\nimport cz.covid19cz.erouska.utils.CustomTabHelper\nimport dagger.hilt.android.AndroidEntryPoint\nimport kotlinx.android.synthetic.main.fragment_my_data.*\nimport javax.inject.Inject\n\n@AndroidEntryPoint\nclass MyDataFragment :\n    BaseFragment<FragmentMyDataBinding, MyDataVM>(R.layout.fragment_my_data, MyDataVM::class) {\n\n    @Inject\n    internal lateinit var customTabHelper: CustomTabHelper\n\n    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {\n        super.onViewCreated(view, savedInstanceState)\n\n        if (!AppConfig.updateNewsOnRequest) {\n            refresh_container.isEnabled = false\n        }\n\n        measures_text.setOnClickListener {\n            openMeasures()\n            Analytics.logEvent(requireContext(), KEY_CURRENT_MEASURES)\n        }\n    }\n\n    private fun openMeasures() {\n        showWeb(viewModel.getMeasuresUrl(), customTabHelper)\n    }\n}\n"
  },
  {
    "path": "app/src/main/kotlin/cz/covid19cz/erouska/ui/mydata/MyDataVM.kt",
    "content": "package cz.covid19cz.erouska.ui.mydata\n\nimport android.text.format.DateUtils\nimport androidx.lifecycle.Lifecycle\nimport androidx.lifecycle.OnLifecycleEvent\nimport androidx.lifecycle.viewModelScope\nimport arch.livedata.SafeMutableLiveData\nimport arch.utils.safeLet\nimport com.google.android.gms.common.api.ApiException\nimport cz.covid19cz.erouska.AppConfig\nimport cz.covid19cz.erouska.db.SharedPrefsRepository\nimport cz.covid19cz.erouska.net.FirebaseFunctionsRepository\nimport cz.covid19cz.erouska.ui.base.BaseVM\nimport cz.covid19cz.erouska.utils.L\nimport dagger.hilt.android.lifecycle.HiltViewModel\nimport kotlinx.coroutines.launch\nimport java.text.SimpleDateFormat\nimport java.util.*\nimport java.util.concurrent.TimeUnit\nimport javax.inject.Inject\n\n@HiltViewModel\nclass MyDataVM @Inject constructor(\n    private val firebaseFunctionsRepository: FirebaseFunctionsRepository,\n    val prefs: SharedPrefsRepository\n) : BaseVM() {\n\n    companion object {\n        const val LAST_UPDATE_UI_FORMAT = \"d. M. yyyy\" // date format used in UI\n        const val LAST_UPDATE_API_FORMAT = \"yyyyMMdd\" // date format returned from API\n    }\n\n    @OnLifecycleEvent(Lifecycle.Event.ON_RESUME)\n    fun onResume() {\n        if (AppConfig.updateNewsOnRequest || (!AppConfig.updateNewsOnRequest && !DateUtils.isToday(prefs.getLastStatsUpdate()))) {\n            getStats()\n        }\n\n        if (AppConfig.updateNewsOnRequest || (!AppConfig.updateNewsOnRequest && !DateUtils.isToday(prefs.getLastMetricsUpdate()))) {\n            getMetrics()\n        }\n\n    }\n\n    fun onRefresh() {\n        getMetrics()\n        getStats()\n    }\n\n    val isLoading = SafeMutableLiveData(false)\n\n    // vaccinations\n    val vaccinationsTotal = SafeMutableLiveData(prefs.getVaccinationsTotal())\n    val vaccinationsIncrease = SafeMutableLiveData(prefs.getVaccinationsIncrease())\n    val vaccinationsIncreaseDate = if (prefs.getVaccinationsIncreaseDate() == 0L) {\n        SafeMutableLiveData(\"-\")\n    } else {\n        SafeMutableLiveData(\n            SimpleDateFormat(\n                LAST_UPDATE_UI_FORMAT,\n                Locale.getDefault()\n            ).format(Date(prefs.getVaccinationsIncreaseDate()))\n        )\n    }\n\n\n    val firstDoseTotal = SafeMutableLiveData(prefs.getFirstDoseTotal())\n    val firstDoseIncrease = SafeMutableLiveData(prefs.getFirstDoseIncrease())\n\n    val secondDoseTotal = SafeMutableLiveData(prefs.getSecondDoseTotal())\n    val secondDoseIncrease = SafeMutableLiveData(prefs.getSecondDoseIncrease())\n\n    val dailyDosesDate = if (prefs.getDailyDosesDate() == 0L) {\n        SafeMutableLiveData(\"-\")\n    } else {\n        SafeMutableLiveData(\n            SimpleDateFormat(\n                LAST_UPDATE_UI_FORMAT,\n                Locale.getDefault()\n            ).format(Date(prefs.getDailyDosesDate()))\n        )\n    }\n\n    // stats\n    val testsTotal = SafeMutableLiveData(prefs.getTestsTotal())\n    val testsIncrease = SafeMutableLiveData(prefs.getTestsIncrease())\n    val testsIncreaseDate = if (prefs.getTestsIncreaseDate() == 0L) {\n        SafeMutableLiveData(\"-\")\n    } else {\n        SafeMutableLiveData(\n            SimpleDateFormat(\n                LAST_UPDATE_UI_FORMAT,\n                Locale.getDefault()\n            ).format(Date(prefs.getTestsIncreaseDate()))\n        )\n    }\n\n    val antigenTestsTotal = SafeMutableLiveData(prefs.getAntigenTestsTotal())\n    val antigenTestsIncrease = SafeMutableLiveData(prefs.getAntigenTestsIncrease())\n    val antigenTestsIncreaseDate = if (prefs.getAntigenTestsIncreaseDate() == 0L) {\n        SafeMutableLiveData(\"-\")\n    } else {\n        SafeMutableLiveData(\n            SimpleDateFormat(\n                LAST_UPDATE_UI_FORMAT,\n                Locale.getDefault()\n            ).format(Date(prefs.getAntigenTestsIncreaseDate()))\n        )\n    }\n\n    val confirmedCasesTotal = SafeMutableLiveData(prefs.getConfirmedCasesTotal())\n    val confirmedCasesIncrease = SafeMutableLiveData(prefs.getConfirmedCasesIncrease())\n    val confirmedCasesIncreaseDate= if (prefs.getConfirmedCasesIncreaseDate() == 0L) {\n        SafeMutableLiveData(\"-\")\n    } else {\n        SafeMutableLiveData(\n            SimpleDateFormat(\n                LAST_UPDATE_UI_FORMAT,\n                Locale.getDefault()\n            ).format(Date(prefs.getConfirmedCasesIncreaseDate()))\n        )\n    }\n\n    val activeCasesTotal = SafeMutableLiveData(prefs.getActiveCasesTotal())\n    val curedTotal = SafeMutableLiveData(prefs.getCuredTotal())\n    val deceasedTotal = SafeMutableLiveData(prefs.getDeceasedTotal())\n    val currentlyHospitalizedTotal = SafeMutableLiveData(prefs.getCurrentlyHospitalizedTotal())\n\n    // metrics\n    val activationsTotal = SafeMutableLiveData(prefs.getActivationsTotal())\n    val activationsYesterday = SafeMutableLiveData(prefs.getActivationsYesterday())\n    val keyPublishersTotal = SafeMutableLiveData(prefs.getKeyPublishersTotal())\n    val keyPublishersYesterday = SafeMutableLiveData(prefs.getKeyPublishersYesterday())\n    val notificationsTotal = SafeMutableLiveData(prefs.getNotificationsTotal())\n    val notificationsYesterday = SafeMutableLiveData(prefs.getNotificationsYesterday())\n\n    var lastMetricsIncreaseDate = if (prefs.getLastMetricsUpdate() == 0L) {\n        SafeMutableLiveData(\"-\")\n    } else {\n        SafeMutableLiveData(\n            SimpleDateFormat(\n                LAST_UPDATE_UI_FORMAT,\n                Locale.getDefault()\n            ).format(Date(prefs.getLastMetricsUpdate() - TimeUnit.DAYS.toMillis(1))) // increase day = day before day of last update\n        )\n    }\n\n    fun getMeasuresUrl() = AppConfig.currentMeasuresUrl\n\n    private fun getStats(date: String? = null) {\n        isLoading.value = true\n        viewModelScope.launch {\n            kotlin.runCatching {\n                return@runCatching firebaseFunctionsRepository.getStats(date)\n            }.onSuccess { response ->\n                L.d(response.toString())\n                isLoading.value = false\n\n                safeLet(response.testsTotal,\n                    response.testsIncrease,\n                    response.testsIncreaseDate) { total, increase, increaseDate ->\n                    testsTotal.value = total\n                    testsIncrease.value = increase\n\n                    prefs.setTestsTotal(total)\n                    prefs.setTestsIncrease(increase)\n\n                    val lastUpdateDate = SimpleDateFormat(\n                        LAST_UPDATE_API_FORMAT,\n                        Locale.getDefault()\n                    ).parse(increaseDate)\n\n                    lastUpdateDate?.time?.let { lastUpdateMillis ->\n                        prefs.setTestsIncreaseDate(lastUpdateMillis)\n\n                        testsIncreaseDate.value = SimpleDateFormat(\n                            LAST_UPDATE_UI_FORMAT,\n                            Locale.getDefault()\n                        ).format(\n                            Date(lastUpdateMillis)\n                        )\n                    }\n                }\n               safeLet(response.antigenTestsTotal,\n                    response.antigenTestsIncrease,\n                    response.antigenTestsIncreaseDate) { total, increase, increaseDate ->\n                    antigenTestsTotal.value = total\n                    antigenTestsIncrease.value = increase\n\n                    prefs.setAntigenTestsTotal(total)\n                    prefs.setAntigenTestsIncrease(increase)\n\n                    val lastUpdateDate = SimpleDateFormat(\n                        LAST_UPDATE_API_FORMAT,\n                        Locale.getDefault()\n                    ).parse(increaseDate)\n\n                    lastUpdateDate?.time?.let { lastUpdateMillis ->\n                        prefs.setAntigenTestsIncreaseDate(lastUpdateMillis)\n\n                        antigenTestsIncreaseDate.value = SimpleDateFormat(\n                            LAST_UPDATE_UI_FORMAT,\n                            Locale.getDefault()\n                        ).format(\n                            Date(lastUpdateMillis)\n                        )\n                    }\n                }\n               safeLet(response.vaccinationsTotal,\n                    response.vaccinationsIncrease,\n                    response.vaccinationsIncreaseDate) { total, increase, increaseDate ->\n                    vaccinationsTotal.value = total\n                    vaccinationsIncrease.value = increase\n\n                    prefs.setVaccinationsTotal(total)\n                    prefs.setVaccinationsIncrease(increase)\n\n                    val lastUpdateDate = SimpleDateFormat(\n                        LAST_UPDATE_API_FORMAT,\n                        Locale.getDefault()\n                    ).parse(increaseDate)\n\n                    lastUpdateDate?.time?.let { lastUpdateMillis ->\n                        prefs.setVaccinationsIncreaseDate(lastUpdateMillis)\n\n                        vaccinationsIncreaseDate.value = SimpleDateFormat(\n                            LAST_UPDATE_UI_FORMAT,\n                            Locale.getDefault()\n                        ).format(\n                            Date(lastUpdateMillis)\n                        )\n                    }\n               }\n\n               safeLet(response.vaccinationsTotalFirstDose,\n                    response.vaccinationsDailyFirstDose) { total, increase ->\n                   firstDoseTotal.value = total\n                   firstDoseIncrease.value = increase\n\n                    prefs.setFirstDoseTotal(total)\n                    prefs.setFirstDoseIncrease(increase)\n                }\n               safeLet(response.vaccinationsTotalSecondDose,\n                    response.vaccinationsDailySecondDose) { total, increase ->\n                   secondDoseTotal.value = total\n                   secondDoseIncrease.value = increase\n\n                    prefs.setSecondDoseTotal(total)\n                    prefs.setSecondDoseIncrease(increase)\n                }\n\n                response.vaccinationsDailyDosesDate?.let { increaseDate ->\n                    val lastUpdateDate = SimpleDateFormat(\n                        LAST_UPDATE_API_FORMAT,\n                        Locale.getDefault()\n                    ).parse(increaseDate)\n\n                    lastUpdateDate?.time?.let { lastUpdateMillis ->\n                        prefs.setDailyDosesDate(lastUpdateMillis)\n\n                        dailyDosesDate.value = SimpleDateFormat(\n                            LAST_UPDATE_UI_FORMAT,\n                            Locale.getDefault()\n                        ).format(\n                            Date(lastUpdateMillis)\n                        )\n                    }\n                }\n\n                safeLet(\n                    response.confirmedCasesTotal,\n                    response.confirmedCasesIncrease,\n                    response.confirmedCasesIncreaseDate,\n                ) { total, increase, increaseDate ->\n                    confirmedCasesTotal.value = total\n                    confirmedCasesIncrease.value = increase\n\n                    prefs.setConfirmedCasesTotal(total)\n                    prefs.setConfirmedCasesIncrease(increase)\n\n                    val lastUpdateDate = SimpleDateFormat(\n                        LAST_UPDATE_API_FORMAT,\n                        Locale.getDefault()\n                    ).parse(increaseDate)\n\n                    lastUpdateDate?.time?.let { lastUpdateMillis ->\n                        prefs.setConfirmedCasesIncreaseDate(lastUpdateMillis)\n\n                        confirmedCasesIncreaseDate.value = SimpleDateFormat(\n                            LAST_UPDATE_UI_FORMAT,\n                            Locale.getDefault()\n                        ).format(\n                            Date(lastUpdateMillis)\n                        )\n                    }\n                }\n                response.activeCasesTotal?.let { total ->\n                    activeCasesTotal.value = total\n                    prefs.setActiveCasesTotal(total)\n                }\n                response.curedTotal?.let { total ->\n                    curedTotal.value = total\n                    prefs.setCuredTotal(total)\n                }\n                response.deceasedTotal?.let { total ->\n                    deceasedTotal.value = total\n                    prefs.setDeceasedTotal(total)\n                }\n                response.currentlyHospitalizedTotal?.let { total ->\n                    currentlyHospitalizedTotal.value = total\n                    prefs.setCurrentlyHospitalizedTotal(total)\n                }\n\n                response.date?.let {\n                    val lastStatsUpdate = SimpleDateFormat(\n                        LAST_UPDATE_API_FORMAT,\n                        Locale.getDefault()\n                    ).parse(response.date)\n\n                    lastStatsUpdate?.time?.let { lastUpdateMillis ->\n                        prefs.setLastStatsUpdate(lastUpdateMillis)\n                    }\n                }\n            }.onFailure {\n                isLoading.value = false\n                if (it is ApiException) {\n                    L.e(it.status.toString() + \" \" + it.message)\n                } else {\n                    L.e(it)\n                }\n            }\n        }\n    }\n\n    private fun getMetrics() {\n        isLoading.value = true\n        viewModelScope.launch {\n            kotlin.runCatching {\n                return@runCatching firebaseFunctionsRepository.getDownloadMetrics()\n            }.onSuccess { response ->\n                L.d(response.toString())\n                isLoading.value = false\n\n                safeLet(\n                    response.activationsTotal,\n                    response.activationsYesterday\n                ) { total, yesterday ->\n                    activationsTotal.value = total\n                    activationsYesterday.value = yesterday\n\n                    prefs.setActivationsTotal(total)\n                    prefs.setActivationsYesterday(yesterday)\n                }\n                safeLet(\n                    response.keyPublishersTotal,\n                    response.keyPublishersYesterday\n                ) { total, yesterday ->\n                    keyPublishersTotal.value = total\n                    keyPublishersYesterday.value = yesterday\n\n                    prefs.setKeyPublishersTotal(total)\n                    prefs.setKeyPublishersYesterday(yesterday)\n                }\n                safeLet(\n                    response.notificationsTotal,\n                    response.notificationsYesterday\n                ) { total, yesterday ->\n                    notificationsTotal.value = total\n                    notificationsYesterday.value = yesterday\n\n                    prefs.setNotificationsTotal(total)\n                    prefs.setNotificationsYesterday(yesterday)\n                }\n\n                response.date?.let {\n                    val lastMetricsUpdate = SimpleDateFormat(\n                        LAST_UPDATE_API_FORMAT,\n                        Locale.getDefault()\n                    ).parse(response.date)\n\n                    lastMetricsUpdate?.time?.let { lastUpdateMillis ->\n                        prefs.setLastMetricsUpdate(lastUpdateMillis)\n                        val lastMetricsIncreaseMillis = lastUpdateMillis - TimeUnit.DAYS.toMillis(1) // increase day = day before day of last update\n\n                        lastMetricsIncreaseDate.value = SimpleDateFormat(\n                            LAST_UPDATE_UI_FORMAT,\n                            Locale.getDefault()\n                        ).format(\n                            Date(lastMetricsIncreaseMillis)\n                        )\n                    }\n                }\n            }.onFailure {\n                isLoading.value = false\n                if (it is ApiException) {\n                    L.e(it.status.toString() + \" \" + it.message)\n                } else {\n                    L.e(it)\n                }\n            }\n        }\n    }\n}"
  },
  {
    "path": "app/src/main/kotlin/cz/covid19cz/erouska/ui/noverificationcode/NoVerificationCodeFragment.kt",
    "content": "package cz.covid19cz.erouska.ui.noverificationcode\n\nimport android.os.Bundle\nimport android.view.View\nimport cz.covid19cz.erouska.AppConfig\nimport cz.covid19cz.erouska.R\nimport cz.covid19cz.erouska.databinding.FragmentNoVerificationCodeBinding\nimport cz.covid19cz.erouska.ui.base.BaseFragment\nimport cz.covid19cz.erouska.ui.noverificationcode.event.WriteEmailEvent\nimport cz.covid19cz.erouska.utils.SupportEmailGenerator\nimport dagger.hilt.android.AndroidEntryPoint\nimport javax.inject.Inject\n\n@AndroidEntryPoint\nclass NoVerificationCodeFragment : BaseFragment<FragmentNoVerificationCodeBinding, NoVerificationCodeVM>(\n    R.layout.fragment_no_verification_code,\n    NoVerificationCodeVM::class\n) {\n\n    @Inject\n    internal lateinit var supportEmailGenerator: SupportEmailGenerator\n\n    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {\n        super.onViewCreated(view, savedInstanceState)\n\n        enableUpInToolbar(true, IconType.CLOSE)\n\n        subscribe(WriteEmailEvent::class) {\n            onWriteEmail()\n        }\n\n        with(binding) {\n            noVerificationCodeBody.text = getString(R.string.no_verification_body, AppConfig.supportEmail)\n            noVerificationCodeCaption.text = getString(R.string.no_verification_caption, AppConfig.supportEmail)\n        }\n    }\n\n    private fun onWriteEmail() {\n        binding.emailButton.setOnClickListener {\n            supportEmailGenerator.sendVerificationEmail(requireActivity())\n        }\n    }\n}"
  },
  {
    "path": "app/src/main/kotlin/cz/covid19cz/erouska/ui/noverificationcode/NoVerificationCodeVM.kt",
    "content": "package cz.covid19cz.erouska.ui.noverificationcode\n\nimport cz.covid19cz.erouska.ui.base.BaseVM\nimport cz.covid19cz.erouska.ui.noverificationcode.event.WriteEmailEvent\nimport dagger.hilt.android.lifecycle.HiltViewModel\nimport javax.inject.Inject\n\n@HiltViewModel\nclass NoVerificationCodeVM @Inject constructor() :\n    BaseVM() {\n\n    fun writeEmail() {\n        publish(WriteEmailEvent())\n    }\n}"
  },
  {
    "path": "app/src/main/kotlin/cz/covid19cz/erouska/ui/noverificationcode/event/NoVerificationCodeEvent.kt",
    "content": "package cz.covid19cz.erouska.ui.noverificationcode.event\n\nimport arch.event.LiveEvent\n\nclass WriteEmailEvent : LiveEvent()"
  },
  {
    "path": "app/src/main/kotlin/cz/covid19cz/erouska/ui/permissions/BasePermissionsFragment.kt",
    "content": ""
  },
  {
    "path": "app/src/main/kotlin/cz/covid19cz/erouska/ui/publishsuccess/PublishSuccessFragment.kt",
    "content": "package cz.covid19cz.erouska.ui.publishsuccess\n\nimport cz.covid19cz.erouska.R\nimport cz.covid19cz.erouska.databinding.FragmentPublishSuccessBinding\nimport cz.covid19cz.erouska.ui.base.BaseFragment\n\nclass PublishSuccessFragment : BaseFragment<FragmentPublishSuccessBinding, PublishSuccessVM>(R.layout.fragment_publish_success, PublishSuccessVM::class)"
  },
  {
    "path": "app/src/main/kotlin/cz/covid19cz/erouska/ui/publishsuccess/PublishSuccessVM.kt",
    "content": "package cz.covid19cz.erouska.ui.publishsuccess\n\nimport cz.covid19cz.erouska.ui.base.BaseVM\n\nclass PublishSuccessVM : BaseVM() {\n\n    val enoughKeys : Boolean = true\n\n    fun close(){\n        navigate(PublishSuccessFragmentDirections.actionNavPublishSuccessToNavDashboard())\n    }\n}"
  },
  {
    "path": "app/src/main/kotlin/cz/covid19cz/erouska/ui/ragnarok/RagnarokVM.kt",
    "content": "package cz.covid19cz.erouska.ui.ragnarok\n\nimport androidx.lifecycle.Lifecycle\nimport androidx.lifecycle.MutableLiveData\nimport androidx.lifecycle.OnLifecycleEvent\nimport androidx.lifecycle.viewModelScope\nimport cz.covid19cz.erouska.AppConfig\nimport cz.covid19cz.erouska.exposurenotifications.ExposureNotificationsRepository\nimport cz.covid19cz.erouska.ui.base.BaseVM\nimport cz.covid19cz.erouska.ui.base.UrlEvent\nimport dagger.hilt.android.lifecycle.HiltViewModel\nimport kotlinx.coroutines.launch\nimport javax.inject.Inject\n\n@HiltViewModel\nclass RagnarokVM @Inject constructor(private val enRepository : ExposureNotificationsRepository) : BaseVM() {\n\n    val headline = MutableLiveData(AppConfig.ragnarokHeadline)\n    val body = MutableLiveData(AppConfig.ragnarokBody)\n\n    fun showMoreInfo(){\n        publish(UrlEvent(AppConfig.ragnarokMoreInfo))\n    }\n\n    @OnLifecycleEvent(Lifecycle.Event.ON_CREATE)\n    fun onCreate(){\n        viewModelScope.launch {\n            kotlin.runCatching {\n                enRepository.stop()\n            }\n        }\n    }\n}"
  },
  {
    "path": "app/src/main/kotlin/cz/covid19cz/erouska/ui/recentexposures/RecentExposuresFragment.kt",
    "content": "package cz.covid19cz.erouska.ui.recentexposures\n\nimport android.os.Bundle\nimport android.view.View\nimport cz.covid19cz.erouska.AppConfig\nimport cz.covid19cz.erouska.R\nimport cz.covid19cz.erouska.databinding.FragmentRecentExposuresBinding\nimport cz.covid19cz.erouska.ui.base.BaseFragment\nimport dagger.hilt.android.AndroidEntryPoint\n\n@AndroidEntryPoint\nclass RecentExposuresFragment : BaseFragment<FragmentRecentExposuresBinding, RecentExposuresVM>(\n    R.layout.fragment_recent_exposures,\n    RecentExposuresVM::class\n) {\n\n    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {\n        super.onViewCreated(view, savedInstanceState)\n        enableUpInToolbar(true)\n        activity?.title = AppConfig.recentExposuresUITitle\n        viewModel.loadExposures()\n    }\n}"
  },
  {
    "path": "app/src/main/kotlin/cz/covid19cz/erouska/ui/recentexposures/RecentExposuresVM.kt",
    "content": "package cz.covid19cz.erouska.ui.recentexposures\n\nimport androidx.databinding.ObservableArrayList\nimport androidx.lifecycle.viewModelScope\nimport arch.adapter.RecyclerLayoutStrategy\nimport arch.viewmodel.BaseArchViewModel\nimport cz.covid19cz.erouska.R\nimport cz.covid19cz.erouska.db.DailySummaryEntity\nimport cz.covid19cz.erouska.exposurenotifications.ExposureNotificationsRepository\nimport cz.covid19cz.erouska.ui.recentexposures.entity.RecentExposureGroupHeaderItem\nimport cz.covid19cz.erouska.utils.L\nimport dagger.hilt.android.lifecycle.HiltViewModel\nimport kotlinx.coroutines.Dispatchers\nimport kotlinx.coroutines.launch\nimport org.threeten.bp.LocalDate\nimport java.lang.IllegalArgumentException\nimport javax.inject.Inject\n\n@HiltViewModel\nclass RecentExposuresVM @Inject constructor(\n    private val exposureNotificationsRepo: ExposureNotificationsRepository\n) : BaseArchViewModel() {\n\n    val layoutStrategy = object: RecyclerLayoutStrategy{\n        override fun getLayoutId(item: Any): Int {\n            return when(item){\n                is RecentExposureGroupHeaderItem -> R.layout.item_recent_exposure_group_header\n                is DailySummaryEntity -> R.layout.item_recent_exposure\n                else -> throw IllegalArgumentException(\"Missing layout mapping\")\n            }\n        }\n    }\n\n    val items = ObservableArrayList<Any>()\n\n    fun loadExposures(demo: Boolean = false) {\n        items.clear()\n        if (!demo) {\n            viewModelScope.launch(Dispatchers.IO) {\n                kotlin.runCatching {\n                    exposureNotificationsRepo.getDailySummariesFromDbByImportDate()\n                }.onSuccess { dailySummaries ->\n                    viewModelScope.launch(Dispatchers.Main) {\n                        var previousTimestamp = -1L\n                        dailySummaries.forEachIndexed { _, item ->\n                            if (previousTimestamp != item.importTimestamp){\n                                items.add(RecentExposureGroupHeaderItem(item.importTimestamp))\n                                previousTimestamp = item.importTimestamp\n                            }\n                            items.add(item)\n                        }\n                    }\n                }.onFailure {\n                    L.e(it)\n                }\n            }\n        } else {\n            val now = LocalDate.now()\n            items.addAll(\n                listOf(\n                    // old exposures\n                    DailySummaryEntity(\n                        LocalDate.of(2019, 12, 28).toEpochDay().toInt(),\n                        1000.0,\n                        1000.0,\n                        1000.0,\n                        0,\n                        false,\n                        false\n                    ),\n                    DailySummaryEntity(\n                        LocalDate.of(2019, 3, 20).toEpochDay().toInt(),\n                        1000.0,\n                        1000.0,\n                        1000.0,\n                        0,\n                        false,\n                        false\n                    ),\n                    DailySummaryEntity(\n                        LocalDate.of(2019, 5, 14).toEpochDay().toInt(),\n                        1000.0,\n                        1000.0,\n                        1000.0,\n                        0,\n                        false,\n                        false\n                    ),\n                    DailySummaryEntity(\n                        LocalDate.of(2019, 8, 5).toEpochDay().toInt(),\n                        1000.0,\n                        1000.0,\n                        1000.0,\n                        0,\n                        false,\n                        false\n                    ),\n                    // very recent exposures\n                    DailySummaryEntity(\n                        now.minusDays(10).toEpochDay().toInt(),\n                        1000.0,\n                        1000.0,\n                        1000.0,\n                        0,\n                        false,\n                        false\n                    ),\n                    DailySummaryEntity(\n                        now.minusDays(5).toEpochDay().toInt(),\n                        1000.0,\n                        1000.0,\n                        1000.0,\n                        0,\n                        false,\n                        false\n                    ),\n                    DailySummaryEntity(\n                        now.minusDays(12).toEpochDay().toInt(),\n                        1000.0,\n                        1000.0,\n                        1000.0,\n                        0,\n                        false,\n                        false\n                    )\n                )\n            )\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/kotlin/cz/covid19cz/erouska/ui/recentexposures/entity/RecentExposureGroupHeaderItem.kt",
    "content": "package cz.covid19cz.erouska.ui.recentexposures.entity\n\nimport cz.covid19cz.erouska.ext.timestampToDate\nimport cz.covid19cz.erouska.ext.timestampToTime\n\nclass RecentExposureGroupHeaderItem(val timestamp : Long) {\n\n    fun getDateString() : String{\n        return timestamp.timestampToDate()\n    }\n\n    fun getTimeString() : String{\n        return timestamp.timestampToTime()\n    }\n}"
  },
  {
    "path": "app/src/main/kotlin/cz/covid19cz/erouska/ui/sandbox/SandboxConfigFragment.kt",
    "content": "package cz.covid19cz.erouska.ui.sandbox\n\nimport android.os.Bundle\nimport cz.covid19cz.erouska.R\nimport cz.covid19cz.erouska.databinding.FragmentSandboxConfigBinding\nimport cz.covid19cz.erouska.ui.base.BaseFragment\nimport cz.covid19cz.erouska.ui.sandbox.event.SnackbarEvent\nimport dagger.hilt.android.AndroidEntryPoint\n\n@AndroidEntryPoint\nclass SandboxConfigFragment : BaseFragment<FragmentSandboxConfigBinding, SandboxConfigVM>(\n    R.layout.fragment_sandbox_config,\n    SandboxConfigVM::class\n) {\n    override fun onCreate(savedInstanceState: Bundle?) {\n        super.onCreate(savedInstanceState)\n        subscribe(SnackbarEvent::class) {\n            showSnackBar(it.text)\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/kotlin/cz/covid19cz/erouska/ui/sandbox/SandboxConfigVM.kt",
    "content": "package cz.covid19cz.erouska.ui.sandbox\n\nimport androidx.lifecycle.Lifecycle\nimport androidx.lifecycle.OnLifecycleEvent\nimport cz.covid19cz.erouska.AppConfig\nimport cz.covid19cz.erouska.db.SharedPrefsRepository\nimport cz.covid19cz.erouska.ui.base.BaseVM\nimport cz.covid19cz.erouska.ui.sandbox.event.SnackbarEvent\nimport dagger.hilt.android.lifecycle.HiltViewModel\nimport javax.inject.Inject\n\n@HiltViewModel\nclass SandboxConfigVM @Inject constructor(val prefs : SharedPrefsRepository) : BaseVM() {\n\n    val reportTypeWeights = SandboxConfigValues(\"reportTypeWeights\", 6)\n    val infectiousnessWeights = SandboxConfigValues(\"infectiousnessWeights\", 3)\n    val attenuationBucketThresholdDb = SandboxConfigValues(\"attenuationBucketThresholdDb\", 3)\n    val attenuationBucketWeights = SandboxConfigValues(\"attenuationBucketWeights\", 4)\n    val minimumWindowScore = SandboxConfigValues(\"minimumWindowScore\", 1)\n\n    @OnLifecycleEvent(Lifecycle.Event.ON_CREATE)\n    fun onCreate(){\n        load()\n    }\n\n    private fun load(){\n        reportTypeWeights.setDoubleValues(prefs.getReportTypeWeights() ?: AppConfig.reportTypeWeights)\n        infectiousnessWeights.setDoubleValues(prefs.getInfectiousnessWeights() ?: AppConfig.infectiousnessWeights)\n        attenuationBucketThresholdDb.setIntValues(prefs.getAttenuationBucketThresholdDb() ?: AppConfig.attenuationBucketThresholdDb)\n        attenuationBucketWeights.setDoubleValues(prefs.getAttenuationBucketWeights() ?: AppConfig.attenuationBucketWeights)\n        minimumWindowScore.setDoubleValue(0, prefs.getMinimumWindowScore() ?: AppConfig.minimumWindowScore)\n    }\n\n    fun save(){\n        prefs.setReportTypeWeights(reportTypeWeights.joinToString())\n        prefs.setInfectiousnessWeights(infectiousnessWeights.joinToString())\n        prefs.setAttenuationBucketThresholdDb(attenuationBucketThresholdDb.joinToString())\n        prefs.setAttenuationBucketWeights(attenuationBucketWeights.joinToString())\n        prefs.setMinimumWindowScore(minimumWindowScore.stringValues[0].value!!)\n        publish(SnackbarEvent(\"Config saved\"))\n    }\n\n    fun useDefaults(){\n        prefs.clearCustomConfig()\n        load()\n        publish(SnackbarEvent(\"Using remote config\"))\n    }\n\n\n\n}\n"
  },
  {
    "path": "app/src/main/kotlin/cz/covid19cz/erouska/ui/sandbox/SandboxConfigValues.kt",
    "content": "package cz.covid19cz.erouska.ui.sandbox\n\nimport androidx.lifecycle.MutableLiveData\n\nclass SandboxConfigValues(val title: String, val size : Int) {\n\n    val stringValues = Array<MutableLiveData<String>>(size) { MutableLiveData() }\n\n    fun setDoubleValues(newValues : List<Double>){\n        if (newValues.size == stringValues.size){\n            for (i in newValues.indices){\n                setDoubleValue(i, newValues[i])\n            }\n        }\n    }\n\n    fun setIntValues(newValues : List<Int>){\n        if (newValues.size == stringValues.size){\n            for (i in newValues.indices){\n                setIntValue(i, newValues[i])\n            }\n        }\n    }\n\n    fun setDoubleValue(index : Int, value : Double){\n        stringValues[index].value = value.toString()\n    }\n\n    fun setIntValue(index : Int, value : Int){\n        stringValues[index].value = value.toString()\n    }\n\n    fun getIntValues() : List<Int>{\n        return stringValues.map { it.value?.toIntOrNull() ?: 0 }\n    }\n\n    fun getIntValue(index : Int) : Int{\n        return stringValues[0].value?.toIntOrNull() ?: 0\n    }\n\n    fun getDoubleValues() : List<Double>{\n        return stringValues.map { it.value?.toDoubleOrNull() ?: 0.0 }\n    }\n\n    fun getDoubleValue(index : Int) : Double{\n        return stringValues[0].value?.toDoubleOrNull() ?: 0.0\n    }\n\n    fun setValues(values : String){\n        values.split(\";\").forEachIndexed { i, s ->\n            if (i < stringValues.size) {\n                stringValues[i].value = s\n            }\n        }\n    }\n\n    fun joinToString() : String{\n        return stringValues.map { it.value }.joinToString(\";\")\n    }\n}"
  },
  {
    "path": "app/src/main/kotlin/cz/covid19cz/erouska/ui/sandbox/SandboxDataFragment.kt",
    "content": "package cz.covid19cz.erouska.ui.sandbox\n\nimport android.os.Bundle\nimport android.view.View\nimport arch.adapter.RecyclerLayoutStrategy\nimport com.google.android.gms.nearby.exposurenotification.ExposureWindow\nimport com.google.android.gms.nearby.exposurenotification.ScanInstance\nimport cz.covid19cz.erouska.R\nimport cz.covid19cz.erouska.databinding.FragmentSandboxDataBinding\nimport cz.covid19cz.erouska.ui.base.BaseFragment\nimport dagger.hilt.android.AndroidEntryPoint\n\n@AndroidEntryPoint\nclass SandboxDataFragment : BaseFragment<FragmentSandboxDataBinding, SandboxDataVM>(\n    R.layout.fragment_sandbox_data,\n    SandboxDataVM::class\n) {\n    private val exposureWindowsLayoutStrategy = object : RecyclerLayoutStrategy {\n        override fun getLayoutId(item: Any): Int {\n            return when (item) {\n                is ExposureWindow -> R.layout.item_exposure_window\n                is String -> R.layout.item_scan_instance_header\n                is ScanInstance -> R.layout.item_scan_instance\n                else -> throw RuntimeException(\"Layout mapping not found\")\n            }\n        }\n    }\n\n    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {\n        super.onViewCreated(view, savedInstanceState)\n        binding.exposureWindowsLayoutStrategy = exposureWindowsLayoutStrategy\n    }\n}\n"
  },
  {
    "path": "app/src/main/kotlin/cz/covid19cz/erouska/ui/sandbox/SandboxDataVM.kt",
    "content": "package cz.covid19cz.erouska.ui.sandbox\n\nimport androidx.databinding.ObservableArrayList\nimport androidx.lifecycle.Lifecycle\nimport androidx.lifecycle.OnLifecycleEvent\nimport androidx.lifecycle.viewModelScope\nimport com.google.android.gms.nearby.exposurenotification.DailySummary\nimport cz.covid19cz.erouska.db.SharedPrefsRepository\nimport cz.covid19cz.erouska.exposurenotifications.ExposureNotificationsRepository\nimport cz.covid19cz.erouska.ext.daysSinceEpochToDateString\nimport cz.covid19cz.erouska.ui.base.BaseVM\nimport cz.covid19cz.erouska.utils.L\nimport dagger.hilt.android.lifecycle.HiltViewModel\nimport kotlinx.coroutines.launch\nimport javax.inject.Inject\n\n@HiltViewModel\nclass SandboxDataVM @Inject constructor(private val exposureNotificationsRepository: ExposureNotificationsRepository, val prefs : SharedPrefsRepository) : BaseVM() {\n\n    val dailySummaries = ObservableArrayList<DailySummary>()\n    val exposureWindows = ObservableArrayList<Any>()\n\n    @OnLifecycleEvent(Lifecycle.Event.ON_RESUME)\n    fun onResume(){\n        getDailySummaries()\n        getExposureWindows()\n    }\n\n    private fun getExposureWindows() {\n        exposureWindows.clear()\n        viewModelScope.launch {\n            kotlin.runCatching {\n                exposureNotificationsRepository.getExposureWindows().sortedByDescending { it.dateMillisSinceEpoch }\n            }.onSuccess {\n                it.forEach {\n                    exposureWindows.add(it)\n                    exposureWindows.add(\"HEADER\")\n                    it.scanInstances.forEach {\n                        exposureWindows.add(it)\n                    }\n                }\n                exposureWindows.addAll(it)\n            }.onFailure {\n                L.e(it)\n            }\n        }\n    }\n\n    private fun getDailySummaries() {\n        dailySummaries.clear()\n        viewModelScope.launch {\n            kotlin.runCatching {\n                exposureNotificationsRepository.getDailySummariesFromApi().sortedByDescending { it.daysSinceEpoch }\n            }.onSuccess {\n                dailySummaries.addAll(it)\n            }.onFailure {\n                L.e(it)\n            }\n        }\n    }\n\n    fun daysToString(daysSinceEpoch: Int): String {\n        return daysSinceEpoch.daysSinceEpochToDateString()\n    }\n\n}\n"
  },
  {
    "path": "app/src/main/kotlin/cz/covid19cz/erouska/ui/sandbox/SandboxFragment.kt",
    "content": "package cz.covid19cz.erouska.ui.sandbox\n\nimport android.app.Activity\nimport android.content.Intent\nimport android.os.Bundle\nimport cz.covid19cz.erouska.R\nimport cz.covid19cz.erouska.databinding.FragmentSandboxBinding\nimport cz.covid19cz.erouska.exposurenotifications.ExposureNotificationsErrorHandling\nimport cz.covid19cz.erouska.ui.base.BaseFragment\nimport cz.covid19cz.erouska.ui.dashboard.event.GmsApiErrorEvent\nimport cz.covid19cz.erouska.ui.sandbox.event.SnackbarEvent\nimport dagger.hilt.android.AndroidEntryPoint\nimport javax.inject.Inject\n\n@AndroidEntryPoint\nclass SandboxFragment :\n    BaseFragment<FragmentSandboxBinding, SandboxVM>(R.layout.fragment_sandbox, SandboxVM::class) {\n\n    companion object {\n        private const val SCREEN_NAME = \"Sandbox\"\n    }\n\n    @Inject\n    internal lateinit var exposureNotificationsErrorHandling: ExposureNotificationsErrorHandling\n\n    override fun onCreate(savedInstanceState: Bundle?) {\n        super.onCreate(savedInstanceState)\n\n        subscribe(GmsApiErrorEvent::class) {\n            exposureNotificationsErrorHandling.handle(it, this, SCREEN_NAME)\n        }\n\n        subscribe(SnackbarEvent::class) {\n            showSnackBar(it.text)\n        }\n    }\n\n    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {\n        super.onActivityResult(requestCode, resultCode, data)\n        if (requestCode == ExposureNotificationsErrorHandling.REQUEST_GMS_ERROR_RESOLUTION && resultCode == Activity.RESULT_OK) {\n            viewModel.refreshTeks()\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/kotlin/cz/covid19cz/erouska/ui/sandbox/SandboxVM.kt",
    "content": "package cz.covid19cz.erouska.ui.sandbox\n\nimport android.util.Base64\nimport androidx.databinding.ObservableArrayList\nimport androidx.lifecycle.Lifecycle\nimport androidx.lifecycle.MutableLiveData\nimport androidx.lifecycle.OnLifecycleEvent\nimport androidx.lifecycle.viewModelScope\nimport com.google.android.gms.common.api.ApiException\nimport com.google.android.gms.nearby.exposurenotification.TemporaryExposureKey\nimport cz.covid19cz.erouska.R\nimport cz.covid19cz.erouska.exposurenotifications.ExposureNotificationsRepository\nimport cz.covid19cz.erouska.ext.timestampToDateTime\nimport cz.covid19cz.erouska.net.ExposureServerRepository\nimport cz.covid19cz.erouska.net.model.DownloadedKeys\nimport cz.covid19cz.erouska.ui.base.BaseVM\nimport cz.covid19cz.erouska.ui.dashboard.event.GmsApiErrorEvent\nimport cz.covid19cz.erouska.ui.sandbox.event.SnackbarEvent\nimport cz.covid19cz.erouska.ui.verification.ReportExposureException\nimport cz.covid19cz.erouska.ui.verification.VerifyException\nimport cz.covid19cz.erouska.utils.L\nimport dagger.hilt.android.lifecycle.HiltViewModel\nimport kotlinx.coroutines.launch\nimport javax.inject.Inject\n\n@HiltViewModel\nclass SandboxVM @Inject constructor(\n    private val exposureNotificationsRepository: ExposureNotificationsRepository,\n    private val serverRepository: ExposureServerRepository\n) : BaseVM() {\n\n    val filesString = MutableLiveData<String?>()\n    val teks = ObservableArrayList<TemporaryExposureKey>()\n    var downloadResult: List<DownloadedKeys>? = null\n    val code = MutableLiveData(\"\")\n\n    @OnLifecycleEvent(Lifecycle.Event.ON_CREATE)\n    fun onCreate() {\n        refreshTeks()\n    }\n\n    fun tekToString(tek: TemporaryExposureKey): String {\n        return Base64.encodeToString(tek.keyData, Base64.NO_WRAP)\n    }\n\n    fun reportTypeToString(reportType: Int): String {\n        return when (reportType) {\n            0 -> \"UNKNOWN\"\n            1 -> \"CONFIRMED_TEST\"\n            2 -> \"CONFIRMED_CLINICAL_DIAGNOSIS\"\n            3 -> \"SELF_REPORT\"\n            4 -> \"RECURSIVE\"\n            5 -> \"REVOKED\"\n            else -> reportType.toString()\n        }\n    }\n\n    fun rollingStartToString(rollingStart: Int): String {\n        val timeInMillis = (rollingStart.toLong() * 10 * 60 * 1000)\n        return timeInMillis.timestampToDateTime()\n    }\n\n    fun rollingIntervalToString(rollingInterval: Int): String {\n        return \"${(rollingInterval * 10) / 60}h\"\n    }\n\n    fun refreshTeks() {\n        teks.clear()\n        viewModelScope.launch {\n            kotlin.runCatching {\n                exposureNotificationsRepository.getTemporaryExposureKeyHistory()\n            }.onSuccess {\n                teks.addAll(it.sortedByDescending { it.rollingStartIntervalNumber })\n            }.onFailure {\n                publish(GmsApiErrorEvent(it))\n                L.e(it)\n            }\n        }\n    }\n\n    fun downloadKeyExport() {\n        viewModelScope.launch {\n            kotlin.runCatching {\n                downloadResult = serverRepository.downloadKeyExport()\n                L.d(\"files=${downloadResult}\")\n                return@runCatching downloadResult\n            }.onSuccess {\n                showSnackbar(\"Download success\")\n            }.onFailure {\n                showSnackbar(\"Download failed: ${it.message}\")\n            }\n\n        }\n    }\n\n    fun deleteKeys() {\n        serverRepository.deleteFiles()\n        filesString.value = null\n    }\n\n    fun provideDiagnosisKeys() {\n        if (downloadResult != null) {\n            viewModelScope.launch {\n                runCatching {\n                    exposureNotificationsRepository.provideDiagnosisKeys(downloadResult!!)\n                }.onSuccess {\n                    showSnackbar(\"Import success\")\n                }.onFailure {\n                    showSnackbar(\"Import error: ${it.message}\")\n                    L.e(it)\n                }\n            }\n        } else {\n            showSnackbar(\"Download keys first\")\n        }\n    }\n\n    fun reportExposureWithVerification(code: String) {\n        viewModelScope.launch {\n            runCatching {\n                exposureNotificationsRepository.verifyCode(code)\n                exposureNotificationsRepository.publishKeys()\n            }.onSuccess {\n                showSnackbar(\"Upload success: $it keys\")\n            }.onFailure {\n                when (it) {\n                    is ApiException -> publish(GmsApiErrorEvent(it))\n                    is VerifyException -> showSnackbar(\"Verification error: ${it.message}\")\n                    is ReportExposureException -> showSnackbar(\"Upload error: ${it.message}\")\n                    else -> showSnackbar(\"${it.message}\")\n                }\n                L.e(it)\n            }\n        }\n    }\n\n    private fun showSnackbar(text: String) {\n        publish(SnackbarEvent(text))\n    }\n\n    fun navigateToData() {\n        navigate(R.id.nav_sandbox_data)\n    }\n\n    fun navigateToConfig() {\n        navigate(R.id.nav_sandbox_config)\n    }\n\n}"
  },
  {
    "path": "app/src/main/kotlin/cz/covid19cz/erouska/ui/sandbox/event/SnackbarEvent.kt",
    "content": "package cz.covid19cz.erouska.ui.sandbox.event\n\nimport arch.event.LiveEvent\n\nclass SnackbarEvent(val text : String) : LiveEvent()"
  },
  {
    "path": "app/src/main/kotlin/cz/covid19cz/erouska/ui/symptomdate/SymptomDateFragment.kt",
    "content": "package cz.covid19cz.erouska.ui.symptomdate\n\nimport android.app.DatePickerDialog\nimport android.os.Bundle\nimport android.view.View\nimport cz.covid19cz.erouska.R\nimport cz.covid19cz.erouska.databinding.FragmentSymptomDateBinding\nimport cz.covid19cz.erouska.ext.hideKeyboard\nimport cz.covid19cz.erouska.ui.base.BaseFragment\nimport cz.covid19cz.erouska.ui.symptomdate.event.DatePickerEvent\nimport cz.covid19cz.erouska.ui.symptomdate.event.SymptomDateCommandEvent\nimport cz.covid19cz.erouska.ui.symptomdate.event.SymptomDateCommandEvent.Command.NAV_EFGS_AGREEMENT\nimport cz.covid19cz.erouska.ui.symptomdate.event.SymptomDateCommandEvent.Command.NAV_TRAVELLER\nimport dagger.hilt.android.AndroidEntryPoint\nimport java.util.*\n\n@AndroidEntryPoint\nclass SymptomDateFragment : BaseFragment<FragmentSymptomDateBinding, SymptomDateVM>(\n    R.layout.fragment_symptom_date,\n    SymptomDateVM::class\n) {\n\n    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {\n        super.onViewCreated(view, savedInstanceState)\n        view.hideKeyboard()\n        subscribe(DatePickerEvent::class) {\n            showDatePickerDialog(it.preselect)\n        }\n        subscribe(SymptomDateCommandEvent::class) {\n            when (it.command) {\n                NAV_TRAVELLER -> navigate(R.id.action_nav_symptom_date_to_nav_traveller)\n                NAV_EFGS_AGREEMENT -> navigate(R.id.action_nav_symptom_date_to_efgsAgreementFragment)\n            }\n        }\n\n    }\n\n    private fun showDatePickerDialog(preselect: Date?) {\n        val preselectCalendar = Calendar.getInstance()\n        if (preselect != null) {\n            preselectCalendar.time = preselect\n        }\n        val datePickerDialog = DatePickerDialog(\n            requireContext(),\n            { view, year, month, day ->\n                viewModel.symptomDate.value = Calendar.getInstance().apply {\n                    set(Calendar.YEAR, year)\n                    set(Calendar.MONTH, month)\n                    set(Calendar.DAY_OF_MONTH, day)\n                }.time\n            },\n            preselectCalendar.get(Calendar.YEAR),\n            preselectCalendar.get(Calendar.MONTH),\n            preselectCalendar.get(Calendar.DAY_OF_MONTH)\n        )\n        datePickerDialog.datePicker.minDate = Calendar.getInstance().apply { add(Calendar.DAY_OF_MONTH, -14) }.timeInMillis\n        datePickerDialog.datePicker.maxDate = Calendar.getInstance().timeInMillis\n        datePickerDialog.show()\n    }\n\n}"
  },
  {
    "path": "app/src/main/kotlin/cz/covid19cz/erouska/ui/symptomdate/SymptomDateVM.kt",
    "content": "package cz.covid19cz.erouska.ui.symptomdate\n\nimport androidx.lifecycle.MutableLiveData\nimport arch.livedata.SafeMutableLiveData\nimport cz.covid19cz.erouska.db.SharedPrefsRepository\nimport cz.covid19cz.erouska.ext.timestampToDate\nimport cz.covid19cz.erouska.ui.base.BaseVM\nimport cz.covid19cz.erouska.ui.symptomdate.event.DatePickerEvent\nimport cz.covid19cz.erouska.ui.symptomdate.event.SymptomDateCommandEvent\nimport dagger.hilt.android.lifecycle.HiltViewModel\nimport java.util.*\nimport javax.inject.Inject\n\n@HiltViewModel\nclass SymptomDateVM @Inject constructor(val prefs: SharedPrefsRepository) : BaseVM() {\n\n    val hasSymptoms = SafeMutableLiveData(true)\n    val symptomDate = MutableLiveData<Date?>()\n    val symptomDateString = MutableLiveData<String?>()\n\n    init {\n        symptomDate.observeForever {\n            setSymptomDateString(it?.time?.timestampToDate())\n        }\n        hasSymptoms.observeForever {\n            if (!it) {\n                clearSymptomFields()\n            }\n        }\n    }\n\n    private fun clearSymptomFields() {\n        symptomDate.value = null\n        setSymptomDateString(null)\n    }\n\n    private fun setSymptomDateString(symptomDate: String?) {\n        symptomDateString.value = symptomDate\n    }\n\n    fun showDatePicker() {\n        publish(DatePickerEvent(symptomDate.value))\n    }\n\n    fun next() {\n        prefs.setSymptomDate(symptomDate.value?.time)\n        if (prefs.isTraveller()) {\n            publish(SymptomDateCommandEvent(SymptomDateCommandEvent.Command.NAV_EFGS_AGREEMENT))\n        } else {\n            publish(SymptomDateCommandEvent(SymptomDateCommandEvent.Command.NAV_TRAVELLER))\n        }\n    }\n\n}"
  },
  {
    "path": "app/src/main/kotlin/cz/covid19cz/erouska/ui/symptomdate/event/DatePickerEvent.kt",
    "content": "package cz.covid19cz.erouska.ui.symptomdate.event\n\nimport arch.event.LiveEvent\nimport java.util.*\n\nclass DatePickerEvent(val preselect : Date?) : LiveEvent()"
  },
  {
    "path": "app/src/main/kotlin/cz/covid19cz/erouska/ui/symptomdate/event/SymptomDateCommandEvent.kt",
    "content": "package cz.covid19cz.erouska.ui.symptomdate.event\n\nimport arch.event.LiveEvent\nimport java.util.*\n\nclass SymptomDateCommandEvent(val command: Command) : LiveEvent() {\n\n    enum class Command {\n        NAV_TRAVELLER,\n        NAV_EFGS_AGREEMENT\n    }\n\n}\n"
  },
  {
    "path": "app/src/main/kotlin/cz/covid19cz/erouska/ui/traveller/TravellerFragment.kt",
    "content": "package cz.covid19cz.erouska.ui.traveller\n\nimport cz.covid19cz.erouska.R\nimport cz.covid19cz.erouska.databinding.FragmentSymptomDateBinding\nimport cz.covid19cz.erouska.ui.base.BaseFragment\nimport dagger.hilt.android.AndroidEntryPoint\n\n@AndroidEntryPoint\nclass TravellerFragment : BaseFragment<FragmentSymptomDateBinding, TravellerVM>(R.layout.fragment_traveller, TravellerVM::class)"
  },
  {
    "path": "app/src/main/kotlin/cz/covid19cz/erouska/ui/traveller/TravellerVM.kt",
    "content": "package cz.covid19cz.erouska.ui.traveller\n\nimport cz.covid19cz.erouska.db.SharedPrefsRepository\nimport cz.covid19cz.erouska.ui.base.BaseVM\nimport dagger.hilt.android.lifecycle.HiltViewModel\nimport javax.inject.Inject\n\n@HiltViewModel\nclass TravellerVM @Inject constructor(val prefs : SharedPrefsRepository) : BaseVM() {\n\n    fun next(traveller : Boolean){\n        prefs.setTraveller(traveller)\n        navigate(TravellerFragmentDirections.actionNavTravellerToEfgsAgreementFragment())\n    }\n\n\n}"
  },
  {
    "path": "app/src/main/kotlin/cz/covid19cz/erouska/ui/update/efgs/EfgsUpdateFragment.kt",
    "content": "package cz.covid19cz.erouska.ui.update.efgs\n\nimport android.os.Bundle\nimport android.view.View\nimport androidx.appcompat.app.AppCompatActivity\nimport cz.covid19cz.erouska.AppConfig\nimport cz.covid19cz.erouska.R\nimport cz.covid19cz.erouska.databinding.FragmentEfgsUpdateBinding\nimport cz.covid19cz.erouska.ui.base.BaseFragment\nimport cz.covid19cz.erouska.utils.CustomTabHelper\nimport dagger.hilt.android.AndroidEntryPoint\nimport kotlinx.android.synthetic.main.fragment_efgs_update.*\nimport javax.inject.Inject\n\n@AndroidEntryPoint\nclass EfgsUpdateFragment : BaseFragment<FragmentEfgsUpdateBinding, EfgsUpdateVM>(\n    R.layout.fragment_efgs_update,\n    EfgsUpdateVM::class\n) {\n\n    @Inject\n    internal lateinit var customTabHelper: CustomTabHelper\n\n    private var isFullscreen: Boolean = false\n    private var isOnboarding: Boolean = false\n\n    override fun onCreate(savedInstanceState: Bundle?) {\n        super.onCreate(savedInstanceState)\n\n        isOnboarding = arguments?.let {\n            EfgsUpdateFragmentArgs.fromBundle(it).onboarding\n        } ?: false\n\n        isFullscreen = arguments?.let {\n            EfgsUpdateFragmentArgs.fromBundle(it).fullscreen\n        } ?: false\n\n        (activity as? AppCompatActivity)?.supportActionBar?.setDisplayShowTitleEnabled(!isFullscreen || isOnboarding)\n        enableUpInToolbar(!isFullscreen || isOnboarding)\n    }\n\n    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {\n        super.onViewCreated(view, savedInstanceState)\n        showEFGSNews()\n    }\n\n    override fun onDestroyView() {\n        super.onDestroyView()\n        (activity as? AppCompatActivity)?.supportActionBar?.setDisplayShowTitleEnabled(true)\n    }\n\n    private fun showEFGSNews() {\n        viewModel.sharedPrefsRepository.setEFGSIntroduced(true)\n\n        legacy_update_button.setOnClickListener {\n            if (isOnboarding){\n                navigate(R.id.action_nav_efgs_update_fragment_to_activation_fragment)\n            } else {\n                navController().navigateUp()\n            }\n        }\n\n        legacy_update_checkbox.setOnCheckedChangeListener { _, isChecked ->\n            viewModel.sharedPrefsRepository.setTraveller(isChecked)\n        }\n    }\n}"
  },
  {
    "path": "app/src/main/kotlin/cz/covid19cz/erouska/ui/update/efgs/EfgsUpdateVM.kt",
    "content": "package cz.covid19cz.erouska.ui.update.efgs\n\nimport arch.viewmodel.BaseArchViewModel\nimport cz.covid19cz.erouska.AppConfig\nimport cz.covid19cz.erouska.db.SharedPrefsRepository\nimport dagger.hilt.android.lifecycle.HiltViewModel\nimport javax.inject.Inject\n\n@HiltViewModel\nclass EfgsUpdateVM @Inject constructor(\n     val sharedPrefsRepository: SharedPrefsRepository\n) : BaseArchViewModel() {\n\n     fun efgsDays() = AppConfig.efgsDays\n     fun efgsSupportedCountries() = AppConfig.efgsSupportedCountries\n}"
  },
  {
    "path": "app/src/main/kotlin/cz/covid19cz/erouska/ui/update/playservices/UpdatePlayServicesFragment.kt",
    "content": "package cz.covid19cz.erouska.ui.update.playservices\n\nimport android.content.Intent\nimport android.net.Uri\nimport android.os.Bundle\nimport cz.covid19cz.erouska.R\nimport cz.covid19cz.erouska.databinding.FragmentPlayServicesUpdateBinding\nimport cz.covid19cz.erouska.ui.base.BaseFragment\nimport cz.covid19cz.erouska.ui.update.playservices.event.UpdatePlayServicesEvent\nimport dagger.hilt.android.AndroidEntryPoint\n\n@AndroidEntryPoint\nclass UpdatePlayServicesFragment :\n    BaseFragment<FragmentPlayServicesUpdateBinding, UpdatePlayServicesVM>(\n        R.layout.fragment_play_services_update,\n        UpdatePlayServicesVM::class\n    ) {\n\n    companion object {\n        const val GMS_STORE_URL = \"https://play.google.com/store/apps/details?id=com.google.android.gms\"\n    }\n\n    private var isDemoMode: Boolean = false\n\n    override fun onCreate(savedInstanceState: Bundle?) {\n        super.onCreate(savedInstanceState)\n\n        subscribe(UpdatePlayServicesEvent::class) {\n            when (it.command) {\n                UpdatePlayServicesEvent.Command.PLAY_STORE -> openPlayStore()\n            }\n        }\n\n        isDemoMode = arguments?.let {\n            UpdatePlayServicesFragmentArgs.fromBundle(it).demo\n        } ?: false\n    }\n\n    override fun onResume() {\n        super.onResume()\n        if (!isDemoMode && !isPlayServicesObsolete()) {\n            navController().navigateUp()\n        }\n    }\n\n    private fun openPlayStore() {\n        if (isDemoMode) {\n            startActivity(Intent(Intent.ACTION_VIEW, Uri.parse(GMS_STORE_URL)))\n        } else {\n            if (isPlayServicesObsolete()){\n                startActivity(Intent(Intent.ACTION_VIEW, Uri.parse(GMS_STORE_URL)))\n            } else {\n                navController().navigateUp()\n            }\n        }\n    }\n\n    override fun onBackPressed(): Boolean {\n        return if (isPlayServicesObsolete()) {\n            activity?.finish()\n            true\n        } else {\n            navController().navigateUp()\n            true\n        }\n    }\n\n}"
  },
  {
    "path": "app/src/main/kotlin/cz/covid19cz/erouska/ui/update/playservices/UpdatePlayServicesVM.kt",
    "content": "package cz.covid19cz.erouska.ui.update.playservices\n\nimport cz.covid19cz.erouska.ui.base.BaseVM\nimport cz.covid19cz.erouska.ui.update.playservices.event.UpdatePlayServicesEvent\nimport dagger.hilt.android.lifecycle.HiltViewModel\nimport javax.inject.Inject\n\n@HiltViewModel\nclass UpdatePlayServicesVM @Inject constructor() : BaseVM() {\n\n    fun openPlayStore() {\n        publish(UpdatePlayServicesEvent(UpdatePlayServicesEvent.Command.PLAY_STORE))\n    }\n\n}"
  },
  {
    "path": "app/src/main/kotlin/cz/covid19cz/erouska/ui/update/playservices/event/UpdatePlayServicesEvent.kt",
    "content": "package cz.covid19cz.erouska.ui.update.playservices.event\n\nimport arch.event.LiveEvent\n\nclass UpdatePlayServicesEvent(val command: Command) : LiveEvent() {\n\n    enum class Command {\n        PLAY_STORE\n    }\n\n}"
  },
  {
    "path": "app/src/main/kotlin/cz/covid19cz/erouska/ui/verification/InvalidTokenException.kt",
    "content": "package cz.covid19cz.erouska.ui.verification\n\nclass InvalidTokenException : Throwable()"
  },
  {
    "path": "app/src/main/kotlin/cz/covid19cz/erouska/ui/verification/NoKeysException.kt",
    "content": "package cz.covid19cz.erouska.ui.verification\n\nclass NoKeysException : Throwable()"
  },
  {
    "path": "app/src/main/kotlin/cz/covid19cz/erouska/ui/verification/ReportExposureException.kt",
    "content": "package cz.covid19cz.erouska.ui.verification\n\nclass ReportExposureException(val error: String, val code: String?) : Throwable()"
  },
  {
    "path": "app/src/main/kotlin/cz/covid19cz/erouska/ui/verification/VerificationFragment.kt",
    "content": "package cz.covid19cz.erouska.ui.verification\n\nimport android.os.Bundle\nimport android.view.View\nimport cz.covid19cz.erouska.R\nimport cz.covid19cz.erouska.databinding.FragmentVerificationBinding\nimport cz.covid19cz.erouska.ext.attachKeyboardController\nimport cz.covid19cz.erouska.ext.setOnDoneListener\nimport cz.covid19cz.erouska.ui.base.BaseFragment\nimport cz.covid19cz.erouska.ui.main.MainActivityOld\nimport cz.covid19cz.erouska.ui.verification.event.VerificationCommandEvent\nimport cz.covid19cz.erouska.ui.verification.event.VerificationCommandEvent.Command\nimport dagger.hilt.android.AndroidEntryPoint\n\n@AndroidEntryPoint\nclass VerificationFragment : BaseFragment<FragmentVerificationBinding, VerificationVM>(\n    R.layout.fragment_verification,\n    VerificationVM::class\n) {\n\n    companion object {\n        const val SCREEN_NAME = \"Verification\"\n    }\n\n    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {\n        super.onViewCreated(view, savedInstanceState)\n\n        subscribe(VerificationCommandEvent::class) {\n            when (it.command) {\n                Command.NAV_SYMPTOMS -> navigate(R.id.action_nav_verification_to_nav_symptom_date)\n                Command.NAV_NO_CODE -> navigate(R.id.action_nav_error_to_nav_no_verification_code)\n            }\n        }\n\n        enableUpInToolbar(true, IconType.CLOSE)\n        setupListeners()\n        activity?.let {\n            (it as MainActivityOld).initReviews()\n        }\n        with(binding) {\n            codeInput.attachKeyboardController()\n            codeInput.requestFocus()\n            codeInput.setOnDoneListener { viewModel.verifyAndConfirm() }\n        }\n    }\n\n    private fun setupListeners() {\n        with(binding) {\n            codeInput.attachKeyboardController()\n            codeInput.setOnDoneListener { viewModel.verifyAndConfirm() }\n        }\n    }\n}"
  },
  {
    "path": "app/src/main/kotlin/cz/covid19cz/erouska/ui/verification/VerificationVM.kt",
    "content": "package cz.covid19cz.erouska.ui.verification\n\nimport androidx.core.text.isDigitsOnly\nimport androidx.lifecycle.MutableLiveData\nimport androidx.lifecycle.viewModelScope\nimport arch.livedata.SafeMutableLiveData\nimport cz.covid19cz.erouska.R\nimport cz.covid19cz.erouska.db.SharedPrefsRepository\nimport cz.covid19cz.erouska.exposurenotifications.ExposureNotificationsRepository\nimport cz.covid19cz.erouska.net.model.VerifyCodeResponse\nimport cz.covid19cz.erouska.ui.base.BaseVM\nimport cz.covid19cz.erouska.ui.error.entity.ErrorType\nimport cz.covid19cz.erouska.ui.verification.event.VerificationCommandEvent\nimport cz.covid19cz.erouska.utils.L\nimport dagger.hilt.android.lifecycle.HiltViewModel\nimport kotlinx.coroutines.launch\nimport java.net.UnknownHostException\nimport javax.inject.Inject\n\n@HiltViewModel\nclass VerificationVM @Inject constructor(\n    private val exposureNotificationRepo: ExposureNotificationsRepository,\n    private val prefs: SharedPrefsRepository\n) :\n    BaseVM() {\n\n    val code = SafeMutableLiveData(\"\")\n    val error = MutableLiveData<Int?>(null)\n    val lastDataSentDate = MutableLiveData<String>(prefs.getLastDataSentDateString())\n    val loading = SafeMutableLiveData(false)\n\n    init {\n        code.observeForever {\n            if (error.value != null) {\n                error.value = null\n            }\n        }\n    }\n\n    fun verifyAndConfirm() {\n        if (!isCodeValid(code.value)) {\n            error.value = R.string.send_data_code_invalid\n            return\n        }\n        validate()\n    }\n\n    fun navigateToVerificationCode() {\n        publish(VerificationCommandEvent(VerificationCommandEvent.Command.NAV_NO_CODE))\n    }\n\n    private fun validate() {\n        if (prefs.isCodeValidated(code.value)) {\n            navigateToSymptomsScreen()\n        } else {\n            startLoading()\n            viewModelScope.launch {\n                runCatching {\n                    exposureNotificationRepo.verifyCode(code.value)\n                }.onSuccess {\n                    stopLoading()\n                    navigateToSymptomsScreen()\n                }.onFailure {\n                    stopLoading()\n                    handleSendDataErrors(it)\n                }\n            }\n        }\n    }\n\n    private fun startLoading() {\n        loading.value = true\n    }\n\n    private fun stopLoading() {\n        loading.value = false\n    }\n\n    private fun handleSendDataErrors(exception: Throwable) {\n        val errorAndCode: Pair<ErrorType, String> = when (exception) {\n            is VerifyException -> mapExceptionToErrorType(exception)\n            is UnknownHostException -> createNoInternetErrorType()\n            else -> {\n                L.e(exception)\n                createNoInternetErrorType()\n            }\n        }\n\n        showError(errorAndCode.first, errorAndCode.second)\n    }\n\n\n    private fun mapExceptionToErrorType(exception: VerifyException): Pair<ErrorType, String> {\n        if (exception.code == null) {\n            return createNoInternetErrorType()\n        }\n        val errorCodeMap: Map<String, ErrorType> = mutableMapOf(\n            VerifyCodeResponse.ERROR_CODE_EXPIRED_CODE to ErrorType.EXPIRED_OR_USED_CODE,\n            VerifyCodeResponse.ERROR_CODE_EXPIRED_USED_CODE to ErrorType.EXPIRED_OR_USED_CODE,\n            VerifyCodeResponse.ERROR_CODE_INVALID_CODE to ErrorType.INVALID_CODE,\n        )\n        val type = errorCodeMap.getOrElse(exception.code, { ErrorType.GENERAL_ERROR })\n        val message = \"${exception.message} ${exception.code}\"\n        return Pair(type, message)\n    }\n\n    private fun createNoInternetErrorType() = Pair(ErrorType.NO_INTERNET, \"\")\n\n    private fun showError(errorType: ErrorType, errorMessage: String) {\n        navigate(\n            VerificationFragmentDirections.actionNavVerificationToNavError(\n                type = errorType,\n                errorCode = errorMessage\n            )\n        )\n    }\n\n    private fun navigateToSymptomsScreen() {\n        publish(VerificationCommandEvent(VerificationCommandEvent.Command.NAV_SYMPTOMS))\n    }\n\n    private fun isCodeValid(code: String): Boolean {\n        return code.length == 8 && code.isDigitsOnly()\n    }\n}\n"
  },
  {
    "path": "app/src/main/kotlin/cz/covid19cz/erouska/ui/verification/VerifyException.kt",
    "content": "package cz.covid19cz.erouska.ui.verification\n\nclass VerifyException(message : String?, val code: String?) : Throwable(message)"
  },
  {
    "path": "app/src/main/kotlin/cz/covid19cz/erouska/ui/verification/event/VerificationCommandEvent.kt",
    "content": "package cz.covid19cz.erouska.ui.verification.event\n\nimport arch.event.LiveEvent\nimport java.util.*\n\nclass VerificationCommandEvent(val command: Command) : LiveEvent() {\n\n    enum class Command {\n        NAV_SYMPTOMS,\n        NAV_NO_CODE\n    }\n\n}\n"
  },
  {
    "path": "app/src/main/kotlin/cz/covid19cz/erouska/ui/welcome/WelcomeFragment.kt",
    "content": "package cz.covid19cz.erouska.ui.welcome\n\nimport android.os.Bundle\nimport android.text.method.LinkMovementMethod\nimport android.view.View\nimport androidx.core.text.HtmlCompat\nimport cz.covid19cz.erouska.R\nimport cz.covid19cz.erouska.databinding.FragmentWelcomeBinding\nimport cz.covid19cz.erouska.ui.base.BaseFragment\nimport cz.covid19cz.erouska.ui.welcome.event.WelcomeCommandEvent\nimport dagger.hilt.android.AndroidEntryPoint\nimport kotlinx.android.synthetic.main.fragment_welcome.*\n\n@AndroidEntryPoint\nclass WelcomeFragment :\n    BaseFragment<FragmentWelcomeBinding, WelcomeVM>(R.layout.fragment_welcome, WelcomeVM::class) {\n\n    override fun onCreate(savedInstanceState: Bundle?) {\n        super.onCreate(savedInstanceState)\n\n        subscribe(WelcomeCommandEvent::class) {\n            when (it.command) {\n                WelcomeCommandEvent.Command.VERIFY_APP -> openAppActivation()\n                WelcomeCommandEvent.Command.HELP -> openHelpPage()\n            }\n        }\n    }\n\n    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {\n        super.onViewCreated(view, savedInstanceState)\n        enableUpInToolbar(false)\n\n        val welcomeDescription: String = String.format(\n            getString(R.string.welcome_description)\n        )\n\n        welcome_desc.text = HtmlCompat.fromHtml(welcomeDescription, HtmlCompat.FROM_HTML_MODE_LEGACY)\n        welcome_desc.movementMethod = LinkMovementMethod.getInstance()\n\n    }\n\n    private fun openAppActivation() {\n        if (isPlayServicesObsolete()) {\n            showPlayServicesUpdate()\n            return\n        }\n        navigate(R.id.action_nav_welcome_fragment_to_nav_activation_notifications)\n    }\n\n    private fun openHelpPage() {\n        navigate(R.id.action_nav_welcome_fragment_to_nav_how_it_works)\n    }\n\n    private fun showPlayServicesUpdate() {\n        navigate(R.id.action_nav_welcome_to_nav_play_services_update)\n    }\n}"
  },
  {
    "path": "app/src/main/kotlin/cz/covid19cz/erouska/ui/welcome/WelcomeVM.kt",
    "content": "package cz.covid19cz.erouska.ui.welcome\n\nimport cz.covid19cz.erouska.db.SharedPrefsRepository\nimport cz.covid19cz.erouska.ui.base.BaseVM\nimport cz.covid19cz.erouska.ui.welcome.event.WelcomeCommandEvent\nimport dagger.hilt.android.lifecycle.HiltViewModel\nimport javax.inject.Inject\n\n@HiltViewModel\nclass WelcomeVM @Inject constructor(private val prefs: SharedPrefsRepository) : BaseVM() {\n\n    fun nextStep() {\n        publish(WelcomeCommandEvent(WelcomeCommandEvent.Command.VERIFY_APP))\n    }\n\n    fun help() {\n        publish(WelcomeCommandEvent(WelcomeCommandEvent.Command.HELP))\n    }\n}\n"
  },
  {
    "path": "app/src/main/kotlin/cz/covid19cz/erouska/ui/welcome/event/WelcomeCommandEvent.kt",
    "content": "package cz.covid19cz.erouska.ui.welcome.event\n\nimport arch.event.LiveEvent\n\nclass WelcomeCommandEvent(val command: Command) : LiveEvent() {\n\n    enum class Command{\n        VERIFY_APP,\n        HELP\n    }\n\n}"
  },
  {
    "path": "app/src/main/kotlin/cz/covid19cz/erouska/utils/Analytics.kt",
    "content": "package cz.covid19cz.erouska.utils\n\nimport android.content.Context\nimport android.os.Bundle\nimport com.google.firebase.analytics.FirebaseAnalytics\n\nobject Analytics {\n    const val KEY_EXPORT_DOWNLOAD_STARTED = \"key_export_download_started\"\n    const val KEY_EXPORT_DOWNLOAD_FINISHED = \"key_export_download_finished\"\n\n    const val KEY_SHARE_APP = \"tap_share_app\"\n    const val KEY_PAUSE_APP = \"tap_pause_app\"\n    const val KEY_RESUME_APP = \"tap_resume_app\"\n\n    const val KEY_HOME = \"tap_tab_home\"\n    const val KEY_NEWS = \"tap_tab_news\"\n    const val KEY_CONTACTS = \"tap_tab_contacts\"\n    const val KEY_HELP = \"tap_tab_help\"\n\n    const val KEY_CURRENT_MEASURES = \"tap_current_measures\"\n    \n    fun logEvent(context: Context, key: String) {\n        val analytics = FirebaseAnalytics.getInstance(context)\n        analytics.logEvent(key, Bundle())\n    }\n}"
  },
  {
    "path": "app/src/main/kotlin/cz/covid19cz/erouska/utils/CustomTabHelper.kt",
    "content": "package cz.covid19cz.erouska.utils\n\nimport android.content.Context\nimport android.content.Intent\nimport android.content.pm.PackageManager\nimport android.net.Uri\nimport android.text.TextUtils\nimport androidx.browser.customtabs.CustomTabsService\nimport dagger.hilt.android.qualifiers.ApplicationContext\nimport javax.inject.Inject\nimport javax.inject.Singleton\n\n@Singleton\nclass CustomTabHelper @Inject constructor(\n    @ApplicationContext private val context: Context\n) {\n\n    companion object {\n        private const val STABLE_PACKAGE = \"com.android.chrome\"\n        private const val BETA_PACKAGE = \"com.chrome.beta\"\n        private const val DEV_PACKAGE = \"com.chrome.dev\"\n        private const val LOCAL_PACKAGE = \"com.google.android.apps.chrome\"\n    }\n\n    private var sPackageNameToUse: String? = null\n\n    val chromePackageName by lazy {\n        return@lazy getPackageNameToUse(context, \"https://erouska.cz\")\n    }\n\n    private fun getPackageNameToUse(context: Context, url: String): String? {\n\n        sPackageNameToUse?.let {\n            return it\n        }\n\n        val pm = context.packageManager\n\n        val activityIntent = Intent(Intent.ACTION_VIEW, Uri.parse(url))\n        val defaultViewHandlerInfo = pm.resolveActivity(activityIntent, 0)\n        var defaultViewHandlerPackageName: String? = null\n\n        defaultViewHandlerInfo?.let {\n            defaultViewHandlerPackageName = it.activityInfo.packageName\n        }\n\n        val resolvedActivityList = pm.queryIntentActivities(activityIntent, 0)\n        val packagesSupportingCustomTabs = ArrayList<String>()\n        for (info in resolvedActivityList) {\n            val serviceIntent = Intent()\n            serviceIntent.action = CustomTabsService.ACTION_CUSTOM_TABS_CONNECTION\n            serviceIntent.setPackage(info.activityInfo.packageName)\n\n            pm.resolveService(serviceIntent, 0)?.let {\n                packagesSupportingCustomTabs.add(info.activityInfo.packageName)\n            }\n        }\n\n        when {\n            packagesSupportingCustomTabs.isEmpty() -> sPackageNameToUse = null\n            packagesSupportingCustomTabs.size == 1 -> sPackageNameToUse =\n                packagesSupportingCustomTabs[0]\n            !TextUtils.isEmpty(defaultViewHandlerPackageName)\n                    && !hasSpecializedHandlerIntents(context, activityIntent)\n                    && packagesSupportingCustomTabs.contains(defaultViewHandlerPackageName) ->\n                sPackageNameToUse = defaultViewHandlerPackageName\n            packagesSupportingCustomTabs.contains(STABLE_PACKAGE) -> sPackageNameToUse =\n                STABLE_PACKAGE\n            packagesSupportingCustomTabs.contains(BETA_PACKAGE) -> sPackageNameToUse = BETA_PACKAGE\n            packagesSupportingCustomTabs.contains(DEV_PACKAGE) -> sPackageNameToUse = DEV_PACKAGE\n            packagesSupportingCustomTabs.contains(LOCAL_PACKAGE) -> sPackageNameToUse =\n                LOCAL_PACKAGE\n        }\n        return sPackageNameToUse\n    }\n\n    private fun hasSpecializedHandlerIntents(context: Context, intent: Intent): Boolean {\n        try {\n            val pm = context.packageManager\n            val handlers = pm.queryIntentActivities(\n                intent,\n                PackageManager.GET_RESOLVED_FILTER\n            )\n            if (handlers.size == 0) {\n                return false\n            }\n            for (resolveInfo in handlers) {\n                val filter = resolveInfo.filter ?: continue\n                if (filter.countDataAuthorities() == 0 || filter.countDataPaths() == 0) continue\n                if (resolveInfo.activityInfo == null) continue\n                return true\n            }\n        } catch (e: RuntimeException) {\n        }\n        return false\n    }\n}\n"
  },
  {
    "path": "app/src/main/kotlin/cz/covid19cz/erouska/utils/DeviceInfo.kt",
    "content": "package cz.covid19cz.erouska.utils\n\nimport android.annotation.SuppressLint\nimport android.bluetooth.BluetoothAdapter\nimport android.content.Context\nimport android.content.pm.PackageManager\nimport android.os.Build\nimport android.os.PowerManager\nimport android.os.UserManager\nimport com.jaredrummler.android.device.DeviceName\nimport cz.covid19cz.erouska.ext.isBtEnabled\nimport cz.covid19cz.erouska.ext.isLocationEnabled\nimport dagger.hilt.android.qualifiers.ApplicationContext\nimport javax.inject.Inject\nimport javax.inject.Singleton\n\n@Singleton\nclass DeviceInfo @Inject constructor(\n    @ApplicationContext private val context: Context\n) {\n\n    @SuppressLint(\"DefaultLocale\")\n    fun getManufacturer(): String {\n        return Build.MANUFACTURER.capitalize()\n    }\n\n    fun getDeviceName(): String {\n        return try {\n            DeviceName.getDeviceInfo(context).marketName\n        } catch (t: Throwable) {\n            Build.MODEL\n        }\n    }\n\n    fun getAndroidVersion(): String {\n        return Build.VERSION.RELEASE\n    }\n\n    fun isBtEnabled(): Boolean {\n        return context.isBtEnabled()\n    }\n\n    fun isLocationEnabled(): Boolean {\n        return context.isLocationEnabled()\n    }\n\n    fun isIgnoringBatteryOptimizations(): Boolean {\n        val pwrm =\n            context.applicationContext.getSystemService(Context.POWER_SERVICE) as PowerManager\n        val name = context.applicationContext.packageName\n        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {\n            return pwrm.isIgnoringBatteryOptimizations(name)\n        }\n        return true\n    }\n\n    fun isBatterySaverOn(): Boolean {\n        val pwrm =\n            context.applicationContext.getSystemService(Context.POWER_SERVICE) as PowerManager\n        return pwrm.isPowerSaveMode\n    }\n\n    fun supportsBLE(): Boolean {\n        return context.packageManager.hasSystemFeature(PackageManager.FEATURE_BLUETOOTH_LE)\n    }\n\n    fun isUserDeviceOwner(): Boolean {\n        val um = context.getSystemService(Context.USER_SERVICE) as UserManager\n        return um.isSystemUser\n    }\n\n    fun supportsMultiAds(): Boolean {\n        return BluetoothAdapter.getDefaultAdapter().isMultipleAdvertisementSupported\n    }\n}\n"
  },
  {
    "path": "app/src/main/kotlin/cz/covid19cz/erouska/utils/L.kt",
    "content": "package cz.covid19cz.erouska.utils\n\nimport android.util.Log\nimport com.google.firebase.crashlytics.FirebaseCrashlytics\nimport cz.covid19cz.erouska.BuildConfig\n\n/**\n * Created by stepansonsky on 07/01/16.\n */\nobject L {\n\n    fun d(text: String) {\n        val logStrings = createLogStrings(text)\n        if (BuildConfig.DEBUG) {\n            Log.d(logStrings[0], logStrings[1])\n        }\n    }\n\n    fun i(text: String) {\n        val logStrings = createLogStrings(text)\n        if (BuildConfig.DEBUG) {\n            Log.i(logStrings[0], logStrings[1])\n        }\n        FirebaseCrashlytics.getInstance().log(\"I/${logStrings[0]}: ${logStrings[1]}\")\n    }\n\n    fun w(text: String) {\n        val logStrings = createLogStrings(text)\n        if (BuildConfig.DEBUG) {\n            Log.w(logStrings[0], logStrings[1])\n        }\n        FirebaseCrashlytics.getInstance().log(\"W/${logStrings[0]}: ${logStrings[1]}\")\n    }\n\n    fun e(text: String) {\n        val logStrings = createLogStrings(text)\n        if (BuildConfig.DEBUG) {\n            Log.e(logStrings[0], logStrings[1])\n        }\n        FirebaseCrashlytics.getInstance().log(\"E/${logStrings[0]}: ${logStrings[1]}\")\n    }\n\n    fun e(throwable: Throwable?) {\n        throwable?.let {\n            if (BuildConfig.DEBUG) {\n                Log.e(\"L\", throwable.message, throwable)\n                throwable.printStackTrace()\n            }\n            FirebaseCrashlytics.getInstance().recordException(throwable)\n        }\n    }\n\n    private fun createLogStrings(text: String): Array<String> {\n        val ste = Thread.currentThread().stackTrace\n        val line = \"(\" + (ste[4].fileName + \":\" + ste[4].lineNumber + \")\")\n        return arrayOf(line, text)\n    }\n}\n"
  },
  {
    "path": "app/src/main/kotlin/cz/covid19cz/erouska/utils/LocaleUtils.kt",
    "content": "package cz.covid19cz.erouska.utils\n\nimport cz.covid19cz.erouska.BuildConfig\nimport java.util.*\n\nobject LocaleUtils {\n\n    fun getLocale(): String {\n        return Locale.getDefault().toString()\n    }\n\n    fun getSupportedLanguage(): String {\n        val currentLanguage = Locale.getDefault().language\n        return if (BuildConfig.SUPPORTED_LANGUAGES.contains(currentLanguage)) {\n            currentLanguage\n        } else {\n            \"en\"\n        }\n    }\n}"
  },
  {
    "path": "app/src/main/kotlin/cz/covid19cz/erouska/utils/Markdown.kt",
    "content": "package cz.covid19cz.erouska.utils\n\nimport android.content.Context\nimport android.text.style.BackgroundColorSpan\nimport android.widget.TextView\nimport androidx.annotation.Nullable\nimport cz.covid19cz.erouska.R\nimport dagger.hilt.android.qualifiers.ApplicationContext\nimport io.noties.markwon.AbstractMarkwonPlugin\nimport io.noties.markwon.Markwon\nimport io.noties.markwon.MarkwonSpansFactory\nimport io.noties.markwon.MarkwonVisitor\nimport io.noties.markwon.core.MarkwonTheme\nimport io.noties.markwon.html.HtmlPlugin\nimport io.noties.markwon.image.glide.GlideImagesPlugin\nimport io.noties.markwon.inlineparser.InlineProcessor\nimport io.noties.markwon.inlineparser.MarkwonInlineParserPlugin\nimport org.commonmark.ext.autolink.AutolinkExtension\nimport org.commonmark.node.CustomNode\nimport org.commonmark.node.Node\nimport org.commonmark.parser.Parser\nimport java.util.regex.Pattern\nimport javax.inject.Inject\nimport javax.inject.Singleton\n\n\n@Singleton\nclass Markdown @Inject constructor(\n    @ApplicationContext val context: Context\n) {\n    private val markwon by lazy {\n        Markwon.builder(context)\n            .usePlugin(HtmlPlugin.create { plugin -> plugin.excludeDefaults(false) })\n            .usePlugin(GlideImagesPlugin.create(context))\n            .usePlugin(object : AbstractMarkwonPlugin() {\n                override fun configureParser(builder: Parser.Builder) {\n                    builder.extensions(listOf(AutolinkExtension.create()))\n                }\n            })\n            .usePlugin(MarkwonInlineParserPlugin.create { factoryBuilder ->\n                factoryBuilder\n                    .addInlineProcessor(SearchedTextInlineProcessor())\n            })\n            .usePlugin(object : AbstractMarkwonPlugin() {\n\n                // general formatting\n                override fun configureTheme(builder: MarkwonTheme.Builder) {\n                    builder.headingBreakHeight(0)\n                    builder.headingTextSizeMultipliers(\n                        floatArrayOf(1.15f, 1.10f, 1.05f, 1f, .83f, .67f)\n                    )\n                }\n\n                // searched text highlighting\n                override fun configureVisitor(builder: MarkwonVisitor.Builder) {\n                    builder.on(SearchedTextNode::class.java, GenericInlineNodeVisitor())\n                }\n\n                // searched text highlighting\n                override fun configureSpansFactory(builder: MarkwonSpansFactory.Builder) {\n                    builder\n                        .setFactory(\n                            SearchedTextNode::class.java\n                        ) { _, _ ->\n                            arrayOf(BackgroundColorSpan(context.getColor(R.color.highlight)))\n                        }\n                }\n            })\n            .build()\n    }\n\n    fun show(textView: TextView, markdown: String?) {\n        markdown?.replace(\"\\\\n\", \"\\n\")?.let {\n            markwon.setMarkdown(textView, it)\n        }\n    }\n\n    class GenericInlineNodeVisitor : MarkwonVisitor.NodeVisitor<Node?> {\n\n        override fun visit(visitor: MarkwonVisitor, n: Node) {\n            val length = visitor.length()\n            visitor.visitChildren(n)\n            visitor.setSpansForNodeOptional(n, length)\n        }\n    }\n\n    class SearchedTextInlineProcessor : InlineProcessor() {\n\n        override fun specialCharacter(): Char {\n            return searchChar\n        }\n\n        @Nullable\n        override fun parse(): Node? {\n            val match = match(RE)\n            if (match != null) {\n                // consume syntax\n                val text = match.substring(2, match.length - 2)\n                val node = SearchedTextNode()\n                node.appendChild(text(text))\n                return node\n            }\n            return null\n        }\n\n        companion object {\n            private val RE: Pattern = Pattern.compile(\"${doubleSearchChar}(.+?)${doubleSearchChar}\")\n        }\n    }\n\n    private class SearchedTextNode : CustomNode()\n\n    companion object {\n        const val searchChar = '\\u200B'\n        const val doubleSearchChar  = \"${searchChar}${searchChar}\"\n    }\n\n}\n"
  },
  {
    "path": "app/src/main/kotlin/cz/covid19cz/erouska/utils/MiscUtils.kt",
    "content": "package cz.covid19cz.erouska.utils\n\nimport java.text.DecimalFormat\nimport java.text.NumberFormat\n\nobject SignNumberFormat {\n    @JvmStatic\n    fun format(value: Number): String {\n        return NumberFormat.getInstance().also { it.showSign() }.format(value)\n    }\n}\n\nfun NumberFormat.showSign() {\n    if (this is DecimalFormat) {\n        this.positivePrefix = \"+ \"\n    }\n}"
  },
  {
    "path": "app/src/main/kotlin/cz/covid19cz/erouska/utils/SharedPrefsLiveData.kt",
    "content": "package cz.covid19cz.erouska.utils\n\nimport android.content.SharedPreferences\nimport android.content.SharedPreferences.Editor\nimport androidx.lifecycle.MutableLiveData\nimport kotlin.properties.ReadOnlyProperty\nimport kotlin.properties.ReadWriteProperty\nimport kotlin.reflect.KProperty\n\n// Simple SharedPreferences delegates - supports getter/setter\n// Note: When not specified explicitly, the name of the property is used as a preference key\n// Example: `val userName by sharedPrefs().string()`\nfun SharedPreferencesProvider.int(def: Int = 0, key: String? = null): ReadWriteProperty<Any?, Int> = delegatePrimitive(def, key, SharedPreferences::getInt, Editor::putInt)\n\nfun SharedPreferencesProvider.long(def: Long = 0, key: String? = null): ReadWriteProperty<Any?, Long> = delegatePrimitive(def, key, SharedPreferences::getLong, Editor::putLong)\nfun SharedPreferencesProvider.float(def: Float = 0f, key: String? = null): ReadWriteProperty<Any?, Float> = delegatePrimitive(def, key, SharedPreferences::getFloat, Editor::putFloat)\nfun SharedPreferencesProvider.boolean(def: Boolean = false, key: String? = null): ReadWriteProperty<Any?, Boolean> = delegatePrimitive(def, key, SharedPreferences::getBoolean, Editor::putBoolean)\nfun SharedPreferencesProvider.stringSet(def: Set<String> = emptySet(), key: String? = null): ReadWriteProperty<Any?, Set<String>?> = delegate(def, key, SharedPreferences::getStringSet, Editor::putStringSet)\nfun SharedPreferencesProvider.string(def: String? = null, key: String? = null): ReadWriteProperty<Any?, String?> = delegate(def, key, SharedPreferences::getString, Editor::putString)\n\n// LiveData SharedPreferences delegates - provides LiveData access to prefs with sync across app on changes\n// Note: When not specified explicitly, the name of the property is used as a preference key\n// Example: `val userName by sharedPrefs().stringLiveData()`\nfun SharedPreferencesProvider.intLiveData(def: Int, key: String? = null): ReadOnlyProperty<Any?, MutableLiveData<Int>> = liveDataDelegatePrimitive(def, key, SharedPreferences::getInt, Editor::putInt)\n\nfun SharedPreferencesProvider.longLiveData(def: Long, key: String? = null): ReadOnlyProperty<Any?, MutableLiveData<Long>> = liveDataDelegatePrimitive(def, key, SharedPreferences::getLong, Editor::putLong)\nfun SharedPreferencesProvider.floatLiveData(def: Float, key: String? = null): ReadOnlyProperty<Any?, MutableLiveData<Float>> = liveDataDelegatePrimitive(def, key, SharedPreferences::getFloat, Editor::putFloat)\nfun SharedPreferencesProvider.booleanLiveData(def: Boolean, key: String? = null): ReadOnlyProperty<Any?, MutableLiveData<Boolean>> = liveDataDelegatePrimitive(def, key, SharedPreferences::getBoolean, Editor::putBoolean)\nfun SharedPreferencesProvider.stringLiveData(def: String? = null, key: String? = null): ReadOnlyProperty<Any?, MutableLiveData<String?>> = liveDataDelegate(def, key, SharedPreferences::getString, Editor::putString)\nfun SharedPreferencesProvider.stringSetLiveData(def: Set<String>? = null, key: String? = null): ReadOnlyProperty<Any?, MutableLiveData<Set<String>?>> = liveDataDelegate(def, key, SharedPreferences::getStringSet, Editor::putStringSet)\n\n// -- internal\n\nprivate inline fun <T> SharedPreferencesProvider.delegate(\n    defaultValue: T?,\n    key: String? = null,\n    crossinline getter: SharedPreferences.(String, T?) -> T?,\n    crossinline setter: Editor.(String, T?) -> Editor\n) =\n    object : ReadWriteProperty<Any?, T?> {\n        override fun getValue(thisRef: Any?, property: KProperty<*>): T? =\n            provide().getter(key\n                ?: property.name, defaultValue)\n\n        override fun setValue(thisRef: Any?, property: KProperty<*>, value: T?) =\n            provide().edit().setter(key\n                ?: property.name, value).apply()\n    }\n\nprivate inline fun <T> SharedPreferencesProvider.delegatePrimitive(\n    defaultValue: T,\n    key: String? = null,\n    crossinline getter: SharedPreferences.(String, T) -> T,\n    crossinline setter: Editor.(String, T) -> Editor\n) =\n    object : ReadWriteProperty<Any?, T> {\n        override fun getValue(thisRef: Any?, property: KProperty<*>): T =\n            provide().getter(key\n                ?: property.name, defaultValue)!!\n\n        override fun setValue(thisRef: Any?, property: KProperty<*>, value: T) =\n            provide().edit().setter(key\n                ?: property.name, value).apply()\n    }\n\nprivate inline fun <T> SharedPreferencesProvider.liveDataDelegate(\n    defaultValue: T? = null,\n    key: String? = null,\n    crossinline getter: SharedPreferences.(String, T?) -> T?,\n    crossinline setter: Editor.(String, T?) -> Editor\n): ReadOnlyProperty<Any?, MutableLiveData<T?>> = object : MutableLiveData<T?>(), ReadOnlyProperty<Any?, MutableLiveData<T?>>, SharedPreferences.OnSharedPreferenceChangeListener {\n    var originalProperty: KProperty<*>? = null\n    lateinit var prefKey: String\n\n    override fun getValue(thisRef: Any?, property: KProperty<*>): MutableLiveData<T?> {\n        originalProperty = property\n        prefKey = key ?: originalProperty!!.name\n        return this\n    }\n\n    override fun getValue(): T? {\n\n        val value = provide().getter(prefKey, defaultValue)\n        return super.getValue()\n            ?: value\n            ?: defaultValue\n    }\n\n    override fun setValue(value: T?) {\n        super.setValue(value)\n        provide().edit().setter(prefKey, value).apply()\n    }\n\n    override fun onActive() {\n        super.onActive()\n        value = provide().getter(prefKey, defaultValue)\n        provide().registerOnSharedPreferenceChangeListener(this)\n    }\n\n    override fun onSharedPreferenceChanged(sharedPreferences: SharedPreferences, changedKey: String) {\n        if (changedKey == prefKey) {\n            value = sharedPreferences.getter(changedKey, defaultValue)\n        }\n    }\n\n    override fun onInactive() {\n        super.onInactive()\n        provide().unregisterOnSharedPreferenceChangeListener(this)\n    }\n}\n\nprivate inline fun <T> SharedPreferencesProvider.liveDataDelegatePrimitive(\n    defaultValue: T,\n    key: String? = null,\n    crossinline getter: SharedPreferences.(String, T) -> T,\n    crossinline setter: Editor.(String, T) -> Editor\n): ReadOnlyProperty<Any?, MutableLiveData<T>> = object : MutableLiveData<T>(), ReadOnlyProperty<Any?, MutableLiveData<T>>, SharedPreferences.OnSharedPreferenceChangeListener {\n    var originalProperty: KProperty<*>? = null\n    lateinit var prefKey: String\n\n    override fun getValue(thisRef: Any?, property: KProperty<*>): MutableLiveData<T> {\n        originalProperty = property\n        prefKey = key ?: originalProperty!!.name\n        return this\n    }\n\n    override fun getValue(): T {\n\n        val value = provide().getter(prefKey, defaultValue)\n        return super.getValue()\n            ?: value\n            ?: defaultValue\n    }\n\n    override fun setValue(value: T) {\n        super.setValue(value)\n        provide().edit().setter(prefKey, value).apply()\n    }\n\n    override fun onActive() {\n        super.onActive()\n        value = provide().getter(prefKey, defaultValue)\n        provide().registerOnSharedPreferenceChangeListener(this)\n    }\n\n    override fun onSharedPreferenceChanged(sharedPreferences: SharedPreferences, changedKey: String) {\n        if (changedKey == prefKey) {\n            value = sharedPreferences.getter(changedKey, defaultValue)\n        }\n    }\n\n    override fun onInactive() {\n        super.onInactive()\n        provide().unregisterOnSharedPreferenceChangeListener(this)\n    }\n}\n\nclass SharedPreferencesProvider(private val provider: () -> SharedPreferences) {\n    internal fun provide() = provider()\n}"
  },
  {
    "path": "app/src/main/kotlin/cz/covid19cz/erouska/utils/SupportEmailGenerator.kt",
    "content": "package cz.covid19cz.erouska.utils\n\nimport android.app.Activity\nimport android.content.Context\nimport android.net.Uri\nimport androidx.annotation.StringRes\nimport androidx.appcompat.app.AlertDialog\nimport androidx.core.content.FileProvider\nimport cz.covid19cz.erouska.AppConfig\nimport cz.covid19cz.erouska.BuildConfig\nimport cz.covid19cz.erouska.R\nimport cz.covid19cz.erouska.db.DailySummariesDb\nimport cz.covid19cz.erouska.db.SharedPrefsRepository\nimport cz.covid19cz.erouska.exposurenotifications.ExposureNotificationsRepository\nimport cz.covid19cz.erouska.ext.*\nimport dagger.hilt.android.qualifiers.ApplicationContext\nimport kotlinx.coroutines.CoroutineScope\nimport kotlinx.coroutines.Dispatchers\nimport kotlinx.coroutines.launch\nimport kotlinx.coroutines.withContext\nimport java.io.File\nimport javax.inject.Inject\nimport javax.inject.Singleton\n\n@Singleton\nclass SupportEmailGenerator @Inject constructor(\n    @ApplicationContext private val context: Context,\n    private val deviceInfo: DeviceInfo,\n    private val exposureNotificationsRepository: ExposureNotificationsRepository,\n    private val prefs: SharedPrefsRepository,\n    private val db: DailySummariesDb\n) {\n    fun sendSupportEmail(\n        activity: Activity,\n        scope: CoroutineScope,\n        recipient: String = AppConfig.supportEmail,\n        errorCode: String? = null,\n        isError: Boolean,\n        screenOrigin: String\n    ) {\n        AlertDialog.Builder(activity)\n            .setMessage(R.string.support_request)\n            .setPositiveButton(R.string.support_request_allowed) { _, _ ->\n                scope.launch {\n                    activity.sendEmail(\n                        recipient,\n                        R.string.support_email_subject,\n                        getDiagnosticFile(errorCode, screenOrigin),\n                        getEmailBodyText(isError)\n                    )\n                }\n            }\n            .setNegativeButton(R.string.support_request_denied) { _, _ ->\n                activity.sendEmail(\n                    recipient,\n                    R.string.support_email_subject,\n                    emailBody = getEmailBodyText(isError)\n                )\n            }.show()\n    }\n\n    fun sendVerificationEmail(\n        activity: Activity,\n        recipient: String = AppConfig.supportEmail,\n    ) {\n        activity.sendEmail(\n            recipient,\n            R.string.verification_email_subject,\n            emailBody = R.string.verification_email_body_error\n        )\n    }\n\n    fun sendInvalidCodeEmail(\n        activity: Activity,\n        recipient: String = AppConfig.supportEmail,\n    ) {\n        activity.sendEmail(\n            recipient,\n            R.string.send_data_code_invalid_header,\n            emailBody = R.string.no_code_email_body_error\n        )\n    }\n\n    private suspend fun getDiagnosticFile(errorCode: String?, screenOrigin: String): Uri {\n        return withContext(Dispatchers.IO) {\n            val file = File(context.cacheDir, context.getString(R.string.support_file_name))\n            file.writeText(generateDiagnosticText(errorCode, screenOrigin))\n            FileProvider.getUriForFile(\n                context,\n                context.getString(R.string.fileprovider_authorities),\n                file\n            )\n        }\n    }\n\n    private suspend fun generateDiagnosticText(errorCode: String?, screenOrigin: String): String {\n        return withContext(Dispatchers.Default) {\n            val lastExposureDaysSinceEpoch = db.dao().getLatest().firstOrNull()?.daysSinceEpoch\n            val lastNotifiedExposureImportTimestamp =\n                db.dao().getLastNotified().firstOrNull()?.importTimestamp\n            var text =\n                if (errorCode != null) formatLine(R.string.support_error_code, errorCode) else \"\"\n            text += formatLine(R.string.support_app_version, BuildConfig.VERSION_NAME)\n            text += formatLine(\n                R.string.support_system_version,\n                \"Android ${deviceInfo.getAndroidVersion()}\"\n            )\n            text += formatLine(\n                R.string.support_device,\n                \"${deviceInfo.getManufacturer()} ${deviceInfo.getDeviceName()}\"\n            )\n            text += formatLine(R.string.support_localization, LocaleUtils.getLocale())\n            text += formatLine(\n                R.string.support_bluetooth,\n                \"${\n                deviceInfo.isBtEnabled().toOnOff()\n                } (${\n                deviceInfo.supportsBLE().toSupports(\"BLE\")\n                }, ${deviceInfo.supportsMultiAds().toSupports(\"MultiAds\")})\"\n            )\n            text += formatLine(\n                R.string.support_location_services,\n                deviceInfo.isLocationEnabled().toOnOff()\n            )\n            text += formatLine(\n                \"EN API Enabled\",\n                exposureNotificationsRepository.isEnabled().toOnOff()\n            )\n            text += formatLine(\n                \"EN API Status\",\n                exposureNotificationsRepository.getStatus().joinToString { it.name }\n            )\n            text += formatLine(\n                R.string.support_primary_account,\n                deviceInfo.isUserDeviceOwner().toOnOff()\n            )\n            text += formatLine(\"Internet\", context.isNetworkAvailable().toOnOff())\n            text += formatLine(\"Battery saver\", deviceInfo.isBatterySaverOn().toOnOff())\n            text += formatLine(\n                R.string.support_battery_optimization_exception,\n                deviceInfo.isIgnoringBatteryOptimizations().toOnOff()\n            )\n            text += formatLine(R.string.support_installation, context.getInstallDay())\n            text += formatLine(\n                R.string.support_last_key_download,\n                prefs.getLastKeyImport().timestampToDateTime()\n            )\n            text += formatLine(\n                R.string.support_last_notified_risky_encounter,\n                lastNotifiedExposureImportTimestamp?.timestampToDateTime() ?: \"N/A\"\n            )\n            text += formatLine(\n                R.string.support_last_risky_encounter_from,\n                lastExposureDaysSinceEpoch?.daysSinceEpochToDateString() ?: \"N/A\"\n            )\n            text += formatLine(\n                R.string.support_screen_origin,\n                screenOrigin\n            )\n            text\n        }\n    }\n\n    @StringRes\n    private fun getEmailBodyText(isError: Boolean): Int {\n        return if (isError) {\n            R.string.support_email_body_error\n        } else {\n            R.string.support_email_body_contact\n        }\n    }\n\n    private fun formatLine(label: Int, value: String): String {\n        return \"${context.getString(label)}: $value\\n\"\n    }\n\n    private fun formatLine(label: String, value: String): String {\n        return \"$label: $value\\n\"\n    }\n\n    private fun Boolean.toOnOff(): String {\n        return if (this) \"ON\" else \"OFF\"\n    }\n\n    private fun Boolean.toSupports(subject: String): String {\n        return if (this) \"${context.getString(R.string.support_bluetooth_supports)} $subject\" else \"${\n        context.getString(\n            R.string.support_bluetooth_doesnt_support\n        )\n        } $subject\"\n    }\n}\n\n\n\n\n"
  },
  {
    "path": "app/src/main/kotlin/cz/covid19cz/erouska/utils/Text.kt",
    "content": "package cz.covid19cz.erouska.utils\n\nimport android.content.Context\nimport android.widget.TextView\nimport androidx.annotation.PluralsRes\nimport androidx.annotation.StringRes\nimport androidx.databinding.BindingAdapter\nimport kotlinx.android.parcel.RawValue\n\nsealed class Text {\n    data class CharText(val charSequence: CharSequence) : Text()\n\n    data class ResText(\n        @StringRes val resId: Int,\n        val formatArgs: List<@RawValue Any> = emptyList()\n    ) : Text()\n\n    data class ResQuantityText(\n        @PluralsRes val resId: Int,\n        val quantity: Int,\n        val formatArgs: List<@RawValue Any> = emptyList()\n    ) : Text()\n\n    data class ResolvedText(val resolver: @RawValue TextResolver): Text()\n\n    fun toCharSequence(context: Context): CharSequence {\n        return when (this) {\n            is CharText -> charSequence\n            is ResText -> if (formatArgs.isEmpty()) context.getText(resId) else context.getString(\n                resId,\n                *formatArgs.resolverFormatArgs(context).toTypedArray()\n            )\n            is ResQuantityText -> if (formatArgs.isEmpty()) context.resources.getQuantityString(\n                resId, quantity, quantity\n            ) else context.resources.getQuantityString(\n                resId,\n                quantity,\n                *formatArgs.resolverFormatArgs(context).toTypedArray()\n            )\n            is ResolvedText -> resolver(context)\n        }\n    }\n}\n\nprivate fun List<Any>.resolverFormatArgs(context: Context): List<Any> {\n    return this.map { if (it is Text) it.toCharSequence(context) else it }\n}\n\ntypealias TextResolver = (Context) -> CharSequence\n\nfun CharSequence.toText() = Text.CharText(this)\nfun @receiver:StringRes Int.toText(vararg formatArgs: Any) = Text.ResText(this, formatArgs.toList())\nfun @receiver:PluralsRes Int.toQuantityText(quantity: Int, vararg formatArgs: Any) =\n    Text.ResQuantityText(this, quantity, formatArgs.toList())\n\n@BindingAdapter(\"android:text\")\nfun setText(textView: TextView, text: Text?) {\n    textView.text = text?.toCharSequence(textView.context)\n}\n\nprivate val PHONE_REGEX = Regex(\"\"\"(\\+\\d+)?\\s*(\\d{3})\\s*(\\d{3})\\s*(\\d{3})\"\"\")\n"
  },
  {
    "path": "app/src/main/kotlin/cz/covid19cz/erouska/utils/ViewUtils.kt",
    "content": "package cz.covid19cz.erouska.utils\n\nimport android.view.View\nimport cz.covid19cz.erouska.ext.hide\nimport cz.covid19cz.erouska.ext.show\n\nfun View.showOrHide(show: Boolean) {\n    if (show) {\n        show()\n    } else {\n        hide()\n    }\n}"
  },
  {
    "path": "app/src/main/res/drawable/highlight_selector.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<ripple xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:color=\"?android:attr/colorControlHighlight\">\n    <item android:id=\"@android:id/mask\">\n        <shape android:shape=\"rectangle\">\n            <solid android:color=\"@android:color/white\"/>\n        </shape>\n    </item>\n</ripple>"
  },
  {
    "path": "app/src/main/res/drawable/ic_about.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"20dp\"\n    android:height=\"20dp\"\n    android:viewportWidth=\"20\"\n    android:viewportHeight=\"20\">\n  <path\n      android:pathData=\"M10,0C4.48,0 0,4.48 0,10C0,15.52 4.48,20 10,20C15.52,20 20,15.52 20,10C20,4.48 15.52,0 10,0ZM11,15H9V9H11V15ZM11,7H9V5H11V7Z\"\n      android:fillColor=\"#757575\"/>\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_ack_case.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"24dp\"\n    android:height=\"24dp\"\n    android:viewportWidth=\"24\"\n    android:viewportHeight=\"24\">\n  <path\n      android:pathData=\"M12,2C12.6497,2 13.1765,2.5267 13.1765,3.1765C13.1765,3.6118 12.94,3.9919 12.5885,4.1954L12.5884,5.5558C13.3413,5.6237 14.057,5.8205 14.7133,6.1241L15.4245,4.8917C15.3412,4.7303 15.2941,4.5471 15.2941,4.3529C15.2941,3.7032 15.8208,3.1765 16.4706,3.1765C17.1203,3.1765 17.6471,3.7032 17.6471,4.3529C17.6471,5.0027 17.1203,5.5294 16.4706,5.5294L16.4162,5.5262L15.7314,6.713C16.3341,7.1392 16.8608,7.6659 17.287,8.2686L18.4731,7.5831L18.4754,7.54C18.5295,6.9404 19.0334,6.4706 19.6471,6.4706C20.2968,6.4706 20.8235,6.9973 20.8235,7.6471C20.8235,8.2968 20.2968,8.8235 19.6471,8.8235C19.4108,8.8235 19.1908,8.7539 19.0065,8.634L17.8759,9.2867C18.1795,9.943 18.3763,10.6587 18.4442,11.4116L19.8046,11.4115C20.0081,11.06 20.3882,10.8235 20.8235,10.8235C21.4733,10.8235 22,11.3503 22,12C22,12.6497 21.4733,13.1765 20.8235,13.1765C20.3882,13.1765 20.0081,12.94 19.8046,12.5885L18.4442,12.5884C18.3763,13.3413 18.1795,14.057 17.8759,14.7133L19.0065,15.366C19.1908,15.2461 19.4108,15.1765 19.6471,15.1765C20.2968,15.1765 20.8235,15.7032 20.8235,16.3529C20.8235,17.0027 20.2968,17.5294 19.6471,17.5294C19.0334,17.5294 18.5295,17.0596 18.4754,16.46L18.4731,16.4162L17.287,15.7314C16.8608,16.3341 16.3341,16.8608 15.7314,17.287L16.4162,18.4731L16.4706,18.4706C17.0842,18.4706 17.5882,18.9404 17.6423,19.54L17.6471,19.6471C17.6471,20.2968 17.1203,20.8235 16.4706,20.8235C15.8208,20.8235 15.2941,20.2968 15.2941,19.6471C15.2941,19.4529 15.3412,19.2697 15.4245,19.1083L14.7133,17.8759C14.057,18.1795 13.3413,18.3763 12.5884,18.4442L12.5885,19.8046C12.94,20.0081 13.1765,20.3882 13.1765,20.8235C13.1765,21.4733 12.6497,22 12,22C11.3503,22 10.8235,21.4733 10.8235,20.8235C10.8235,20.3882 11.06,20.0081 11.4115,19.8046L11.4116,18.4442C10.6587,18.3763 9.943,18.1795 9.2867,17.8759L8.5755,19.1083C8.6588,19.2697 8.7059,19.4529 8.7059,19.6471C8.7059,20.2968 8.1792,20.8235 7.5294,20.8235C6.8797,20.8235 6.3529,20.2968 6.3529,19.6471C6.3529,18.9973 6.8797,18.4706 7.5294,18.4706L7.5837,18.4718L8.2686,17.287C7.6659,16.8608 7.1392,16.3341 6.713,15.7314L5.5277,16.4167C5.4946,17.0368 4.9813,17.5294 4.3529,17.5294C3.7032,17.5294 3.1765,17.0027 3.1765,16.3529C3.1765,15.7032 3.7032,15.1765 4.3529,15.1765C4.5892,15.1765 4.8092,15.2461 4.9935,15.366L6.1241,14.7133C5.8205,14.057 5.6237,13.3413 5.5558,12.5884L4.1954,12.5885C3.9919,12.94 3.6118,13.1765 3.1765,13.1765C2.5267,13.1765 2,12.6497 2,12C2,11.3503 2.5267,10.8235 3.1765,10.8235C3.6118,10.8235 3.9919,11.06 4.1954,11.4115L5.5558,11.4116C5.6237,10.6587 5.8205,9.943 6.1241,9.2867L4.9935,8.634C4.8092,8.7539 4.5892,8.8235 4.3529,8.8235C3.7032,8.8235 3.1765,8.2968 3.1765,7.6471C3.1765,6.9973 3.7032,6.4706 4.3529,6.4706C4.9813,6.4706 5.4946,6.9632 5.5277,7.5833L6.713,8.2686C7.1392,7.6659 7.6659,7.1392 8.2686,6.713L7.5837,5.5282L7.5294,5.5294C6.8797,5.5294 6.3529,5.0027 6.3529,4.3529C6.3529,3.7032 6.8797,3.1765 7.5294,3.1765C8.1792,3.1765 8.7059,3.7032 8.7059,4.3529C8.7059,4.5471 8.6588,4.7303 8.5755,4.8917L9.2867,6.1241C9.943,5.8205 10.6587,5.6237 11.4116,5.5558L11.4115,4.1954C11.06,3.9919 10.8235,3.6118 10.8235,3.1765C10.8235,2.5267 11.3503,2 12,2ZM15.0485,8.6154L11.0746,12.5897L8.8625,10.3771L7.5385,11.7012L11.0694,15.2321L11.0708,15.2312L11.0762,15.2358L16.3726,9.9395L15.0485,8.6154Z\"\n      android:fillColor=\"#757575\"\n      android:fillType=\"evenOdd\"/>\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_act_case.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"24dp\"\n    android:height=\"24dp\"\n    android:viewportWidth=\"24\"\n    android:viewportHeight=\"24\">\n  <path\n      android:pathData=\"M11.9996,18.4714C15.5734,18.4714 18.4706,15.5742 18.4706,12.0004C18.4706,8.4266 15.5734,5.5294 11.9996,5.5294C8.4257,5.5294 5.5286,8.4266 5.5286,12.0004C5.5286,15.5742 8.4257,18.4714 11.9996,18.4714Z\"\n      android:fillColor=\"#757575\"/>\n  <path\n      android:pathData=\"M12.5875,3.1762H11.4113V20.8238H12.5875V3.1762Z\"\n      android:fillColor=\"#757575\"/>\n  <path\n      android:pathData=\"M3.1755,12.5889V11.4119L20.8239,11.4119V12.5889L3.1755,12.5889Z\"\n      android:fillColor=\"#757575\"\n      android:fillType=\"evenOdd\"/>\n  <path\n      android:pathData=\"M15.902,4.0641L16.9213,4.6526L8.0971,19.9366L7.0778,19.3481L15.902,4.0641Z\"\n      android:fillColor=\"#757575\"\n      android:fillType=\"evenOdd\"/>\n  <path\n      android:pathData=\"M4.0634,8.0979L4.6518,7.0786L19.9358,15.9028L19.3473,16.9221L4.0634,8.0979Z\"\n      android:fillColor=\"#757575\"\n      android:fillType=\"evenOdd\"/>\n  <path\n      android:pathData=\"M19.3473,7.0786L19.9358,8.0979L4.6518,16.9221L4.0634,15.9028L19.3473,7.0786Z\"\n      android:fillColor=\"#757575\"\n      android:fillType=\"evenOdd\"/>\n  <path\n      android:pathData=\"M7.0779,4.6527L8.0972,4.0642L16.9213,19.3481L15.9021,19.9366L7.0779,4.6527Z\"\n      android:fillColor=\"#757575\"\n      android:fillType=\"evenOdd\"/>\n  <path\n      android:pathData=\"M11.9996,4.3524C12.6492,4.3524 13.1758,3.8258 13.1758,3.1762C13.1758,2.5266 12.6492,2 11.9996,2C11.35,2 10.8234,2.5266 10.8234,3.1762C10.8234,3.8258 11.35,4.3524 11.9996,4.3524Z\"\n      android:fillColor=\"#757575\"/>\n  <path\n      android:pathData=\"M7.5286,5.5294C6.879,5.5294 6.3524,5.0028 6.3524,4.3532C6.3524,3.7036 6.879,3.177 7.5286,3.177C8.1782,3.177 8.7048,3.7036 8.7048,4.3532C8.7048,5.0028 8.1782,5.5294 7.5286,5.5294Z\"\n      android:fillColor=\"#757575\"/>\n  <path\n      android:pathData=\"M4.3524,8.8233C3.7028,8.8233 3.1762,8.2967 3.1762,7.6471C3.1762,6.9975 3.7028,6.4709 4.3524,6.4709C5.002,6.4709 5.5286,6.9975 5.5286,7.6471C5.5286,8.2967 5.002,8.8233 4.3524,8.8233Z\"\n      android:fillColor=\"#757575\"/>\n  <path\n      android:pathData=\"M3.1762,13.1766C2.5266,13.1766 2,12.65 2,12.0004C2,11.3508 2.5266,10.8242 3.1762,10.8242C3.8258,10.8242 4.3524,11.3508 4.3524,12.0004C4.3524,12.65 3.8258,13.1766 3.1762,13.1766Z\"\n      android:fillColor=\"#757575\"/>\n  <path\n      android:pathData=\"M16.4706,5.5294C17.1202,5.5294 17.6468,5.0028 17.6468,4.3532C17.6468,3.7036 17.1202,3.177 16.4706,3.177C15.821,3.177 15.2944,3.7036 15.2944,4.3532C15.2944,5.0028 15.821,5.5294 16.4706,5.5294Z\"\n      android:fillColor=\"#757575\"/>\n  <path\n      android:pathData=\"M19.6468,8.8233C20.2964,8.8233 20.823,8.2967 20.823,7.6471C20.823,6.9975 20.2964,6.4709 19.6468,6.4709C18.9972,6.4709 18.4706,6.9975 18.4706,7.6471C18.4706,8.2967 18.9972,8.8233 19.6468,8.8233Z\"\n      android:fillColor=\"#757575\"/>\n  <path\n      android:pathData=\"M20.8237,13.1766C21.4733,13.1766 21.9999,12.65 21.9999,12.0004C21.9999,11.3508 21.4733,10.8242 20.8237,10.8242C20.1741,10.8242 19.6475,11.3508 19.6475,12.0004C19.6475,12.65 20.1741,13.1766 20.8237,13.1766Z\"\n      android:fillColor=\"#757575\"/>\n  <path\n      android:pathData=\"M12.0003,19.6484C12.6499,19.6484 13.1765,20.175 13.1765,20.8246C13.1765,21.4742 12.6499,22.0008 12.0003,22.0008C11.3507,22.0008 10.8241,21.4742 10.8241,20.8246C10.8241,20.175 11.3507,19.6484 12.0003,19.6484Z\"\n      android:fillColor=\"#757575\"/>\n  <path\n      android:pathData=\"M7.5294,18.4714C6.8798,18.4714 6.3532,18.998 6.3532,19.6476C6.3532,20.2972 6.8798,20.8238 7.5294,20.8238C8.179,20.8238 8.7056,20.2972 8.7056,19.6476C8.7056,18.998 8.179,18.4714 7.5294,18.4714Z\"\n      android:fillColor=\"#757575\"/>\n  <path\n      android:pathData=\"M4.3532,15.1774C3.7036,15.1774 3.177,15.704 3.177,16.3536C3.177,17.0032 3.7036,17.5298 4.3532,17.5298C5.0028,17.5298 5.5294,17.0032 5.5294,16.3536C5.5294,15.704 5.0028,15.1774 4.3532,15.1774Z\"\n      android:fillColor=\"#757575\"/>\n  <path\n      android:pathData=\"M16.4705,18.4714C17.1201,18.4714 17.6467,18.998 17.6467,19.6476C17.6467,20.2972 17.1201,20.8238 16.4705,20.8238C15.8209,20.8238 15.2943,20.2972 15.2943,19.6476C15.2943,18.998 15.8209,18.4714 16.4705,18.4714Z\"\n      android:fillColor=\"#757575\"/>\n  <path\n      android:pathData=\"M19.6475,15.1774C20.2971,15.1774 20.8237,15.704 20.8237,16.3536C20.8237,17.0032 20.2971,17.5298 19.6475,17.5298C18.9979,17.5298 18.4713,17.0032 18.4713,16.3536C18.4713,15.704 18.9979,15.1774 19.6475,15.1774Z\"\n      android:fillColor=\"#757575\"/>\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_action_close.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"24dp\"\n    android:height=\"24dp\"\n    android:viewportWidth=\"24\"\n    android:viewportHeight=\"24\">\n  <path\n      android:fillColor=\"@color/toolbarActiveColor\"\n      android:pathData=\"M19,6.41L17.59,5 12,10.59 6.41,5 5,6.41 10.59,12 5,17.59 6.41,19 12,13.41 17.59,19 19,17.59 13.41,12z\"/>\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_action_up.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"24dp\"\n    android:height=\"24dp\"\n    android:viewportWidth=\"24\"\n    android:viewportHeight=\"24\">\n    <path\n        android:fillColor=\"@color/toolbarActiveColor\"\n        android:pathData=\"M20,11H7.83l5.59,-5.59L12,4l-8,8 8,8 1.41,-1.41L7.83,13H20v-2z\" />\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_active.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"42dp\"\n    android:height=\"42dp\"\n    android:viewportWidth=\"42\"\n    android:viewportHeight=\"42\">\n  <path\n      android:pathData=\"M21,39.83C28.6169,39.834 35.4861,35.2488 38.4038,28.2129C41.3215,21.1769 39.7129,13.0761 34.3284,7.6887C28.9438,2.3013 20.8439,0.6885 13.8064,3.6024C6.7689,6.5163 2.18,13.3831 2.18,21C2.18,31.3956 10.6044,39.8245 21,39.83Z\"\n      android:strokeWidth=\"1\"\n      android:fillColor=\"#FAFEFC\"\n      android:fillType=\"nonZero\"\n      android:strokeColor=\"#00000000\"/>\n  <path\n      android:pathData=\"M21,0C9.402,0 0,9.402 0,21C0,32.598 9.402,42 21,42C32.598,42 42,32.598 42,21C42,9.402 32.598,0 21,0L21,0ZM21,39.83C10.6005,39.83 2.17,31.3995 2.17,21C2.17,10.6005 10.6005,2.17 21,2.17C31.3995,2.17 39.83,10.6005 39.83,21C39.83,31.3995 31.3995,39.83 21,39.83L21,39.83Z\"\n      android:strokeWidth=\"1\"\n      android:fillColor=\"#CEF1D0\"\n      android:fillType=\"nonZero\"\n      android:strokeColor=\"#00000000\"/>\n  <path\n      android:pathData=\"M19.82,30.39C19.2811,30.3799 18.7691,30.1528 18.4,29.76L12.5,23.28C12.006,22.7781 11.8264,22.0459 12.0321,21.3724C12.2378,20.6988 12.7957,20.1919 13.4859,20.0516C14.1761,19.9113 14.8877,20.1602 15.34,20.7L19.56,25.33L27,13.69C27.3698,13.1112 28.0202,12.7737 28.7063,12.8045C29.3925,12.8354 30.01,13.2299 30.3263,13.8395C30.6427,14.4492 30.6098,15.1812 30.24,15.76L21.46,29.51C21.1363,30.014 20.5969,30.3391 20,30.39L19.82,30.39Z\"\n      android:strokeWidth=\"1\"\n      android:fillColor=\"#2D842F\"\n      android:fillType=\"nonZero\"\n      android:strokeColor=\"#00000000\"/>\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_antigen.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"24dp\"\n    android:height=\"24dp\"\n    android:viewportWidth=\"24\"\n    android:viewportHeight=\"24\">\n  <path\n      android:pathData=\"M8.8072,3.1679L16.5828,10.9436C17.3814,11.7421 17.83,12.8252 17.83,13.9545L17.8297,16.1378L20.6496,18.9578C21.1168,19.425 21.1168,20.1825 20.6496,20.6496C20.1825,21.1168 19.425,21.1168 18.9578,20.6496L16.1378,17.8297L13.996,17.829L13.9959,17.7593C13.9401,16.1065 13.3113,14.599 12.3018,13.4292L14.4464,15.5743C14.7579,15.8857 15.2628,15.8857 15.5743,15.5743C15.8635,15.2851 15.8841,14.829 15.6363,14.516L15.5743,14.4464L9.3711,8.2433C9.0597,7.9318 8.5547,7.9318 8.2433,8.2433C7.9541,8.5325 7.9334,8.9885 8.1813,9.3015L8.2433,9.3711L11.5708,12.6982C10.8221,12.0521 9.935,11.562 8.9601,11.2781C8.9233,11.2008 8.872,11.1277 8.8072,11.0629C8.5056,10.7613 8.0226,10.7517 7.7095,11.0342C7.477,11.0121 7.2399,11 7,11C6.4916,11 5.9958,11.0542 5.5181,11.1572L4.2958,9.935L5.4236,8.8072C5.7351,8.4957 5.7351,7.9908 5.4236,7.6793C5.1122,7.3679 4.6072,7.3679 4.2958,7.6793L3.1679,8.8072C1.6107,7.2499 1.6107,4.7252 3.1679,3.1679C4.7252,1.6107 7.2499,1.6107 8.8072,3.1679Z\"\n      android:fillColor=\"#757575\"\n      android:fillType=\"evenOdd\"/>\n  <path\n      android:pathData=\"M7,13C9.7614,13 12,15.2386 12,18C12,20.7614 9.7614,23 7,23C4.2386,23 2,20.7614 2,18C2,15.2386 4.2386,13 7,13ZM7,14.2812C6.6875,14.2812 6.5166,14.4375 6.3945,14.7793L4.3877,20.3896C4.3486,20.5068 4.3242,20.5996 4.3242,20.6973C4.3242,20.9219 4.4854,21.0635 4.7295,21.0635C4.9639,21.0635 5.0957,20.9561 5.1885,20.6631L5.75,18.998L8.2451,18.998L8.8066,20.6631C8.8994,20.9512 9.0313,21.0635 9.2656,21.0635C9.5147,21.0635 9.6758,20.9219 9.6758,20.6924C9.6758,20.5996 9.6514,20.4971 9.6123,20.3896L7.6055,14.7793C7.4834,14.4375 7.3125,14.2812 7,14.2812ZM7.0146,15.3408L8.0156,18.3096L5.9795,18.3096L6.9805,15.3408L7.0146,15.3408Z\"\n      android:fillColor=\"#757575\"\n      android:fillType=\"nonZero\"/>\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_arrow_right.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"24dp\"\n    android:height=\"24dp\"\n    android:tint=\"#C5C5C7\"\n    android:viewportWidth=\"24\"\n    android:viewportHeight=\"24\">\n    <path\n        android:fillColor=\"@android:color/white\"\n        android:pathData=\"M5.88,4.12L13.76,12l-7.88,7.88L8,22l10,-10L8,2z\" />\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_balloon.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"180dp\"\n    android:height=\"180dp\"\n    android:viewportWidth=\"500\"\n    android:viewportHeight=\"500\">\n  <group>\n    <clip-path\n        android:pathData=\"M84.001,254.706l263.6,0l0,235.2l-263.6,0z\"/>\n    <path\n        android:pathData=\"M297.218,383.155C298.774,389.977 302.993,394.917 308.078,394.993C314.594,395.092 319.996,387.211 320.146,377.391C320.294,367.572 315.133,359.53 308.617,359.431C303.651,359.355 299.349,363.931 297.51,370.453L274.188,370.099C273.865,361.727 272.144,353.655 269.127,346.177L327.184,319.31C331.642,324.703 337.634,327.216 342.209,324.996C348.073,322.152 349.352,312.684 345.067,303.846C340.781,295.009 332.554,290.151 326.691,292.995C322.221,295.163 320.438,301.182 321.73,307.836L263.318,334.876C259.749,329.194 255.399,324.048 250.398,319.565L264.219,298.085C270.832,300.367 277.256,299.392 280.008,295.116C283.534,289.637 279.697,280.885 271.438,275.573C263.179,270.259 253.624,270.392 250.099,275.872C247.411,280.051 249.023,286.118 253.589,291.126L240.19,311.952C231.42,306.543 221.388,302.893 210.473,301.695L212.949,278.208C219.883,277.271 225.182,273.512 225.715,268.454C226.399,261.974 219.034,255.885 209.268,254.855C199.5,253.826 191.029,258.245 190.346,264.724C189.824,269.665 193.994,274.359 200.325,276.777L197.721,301.483C188.306,302.122 179.333,304.599 171.172,308.603L158.416,288.026C163.32,283.035 165.199,276.815 162.52,272.495C159.087,266.956 149.536,266.661 141.189,271.836C132.842,277.01 128.859,285.695 132.292,291.234C134.909,295.457 141.082,296.608 147.566,294.635L160.309,315.19C151.864,321.384 144.756,329.354 139.672,338.697L120.027,328.365C121.723,321.578 120.191,315.263 115.69,312.896C109.922,309.862 101.541,314.451 96.97,323.143C92.399,331.836 93.367,341.341 99.135,344.375C103.531,346.686 109.437,344.551 114.026,339.563L134.623,350.396C133.042,355.182 131.91,360.194 131.361,365.414C131.151,367.4 131.082,369.367 131.037,371.329L106.582,372.37C104.636,365.648 100.138,360.961 95.057,361.176C88.547,361.453 83.608,369.633 84.025,379.444C84.442,389.257 90.058,396.987 96.569,396.711C101.531,396.5 105.562,391.684 107.022,385.066L131.896,384.008C132.989,391.014 135.098,397.71 138.101,403.941L118.181,418.012C112.905,413.418 106.584,411.913 102.43,414.846C97.108,418.605 97.386,428.156 103.053,436.178C108.719,444.201 117.627,447.655 122.949,443.896C127.007,441.03 127.786,434.801 125.429,428.447L144.626,414.885C149.716,421.919 156.037,428.021 163.36,432.832L153.643,457.28C146.714,456.31 140.597,458.501 138.719,463.228C136.312,469.283 141.76,477.133 150.887,480.759C160.014,484.387 169.364,482.419 171.77,476.363C173.605,471.747 170.857,466.1 165.412,462.064L174.617,438.904C180.998,441.612 187.875,443.448 195.128,444.214C195.518,444.254 195.901,444.241 196.29,444.276L198.357,467.591C191.733,469.842 187.255,474.551 187.704,479.617C188.28,486.108 196.677,490.668 206.459,489.801C216.242,488.932 223.706,482.967 223.131,476.478C222.693,471.53 217.697,467.724 211.02,466.569L209.047,444.306C217.969,443.516 226.458,441.03 234.223,437.206L248.008,458.181C243.239,463.301 241.524,469.566 244.317,473.816C247.896,479.262 257.45,479.302 265.657,473.909C273.865,468.514 277.616,459.728 274.038,454.281C271.31,450.132 265.109,449.142 258.679,451.286L245.08,430.595C251.496,425.87 257.168,420.154 261.724,413.539L283.203,425.914C281.247,432.632 282.535,439 286.942,441.539C292.588,444.792 301.14,440.53 306.042,432.018C310.946,423.508 310.342,413.973 304.696,410.72C300.391,408.241 294.408,410.148 289.631,414.956L267.926,402.452C270.688,396.342 272.594,389.749 273.559,382.797L297.218,383.155Z\"\n        android:fillColor=\"#C9E2F4\"\n        android:fillType=\"evenOdd\"/>\n  </group>\n  <path\n      android:pathData=\"M191.801,398.77C192.926,402.772 190.594,406.927 186.592,408.052C182.59,409.177 178.435,406.845 177.31,402.843C176.185,398.841 178.517,394.686 182.519,393.561C186.521,392.436 190.676,394.768 191.801,398.77\"\n      android:strokeAlpha=\"0.5\"\n      android:fillColor=\"#2B2F62\"\n      android:fillType=\"evenOdd\"\n      android:fillAlpha=\"0.5\"/>\n  <path\n      android:pathData=\"M367.826,361.809C367.826,361.809 378.264,350.444 348.182,318.672C330.135,299.61 306.527,271.27 325.114,227.041C337.554,197.443 317.528,164.736 319.144,145.949\"\n      android:strokeWidth=\"4\"\n      android:fillColor=\"#00000000\"\n      android:strokeColor=\"#7A87AA\"\n      android:fillType=\"evenOdd\"\n      android:strokeLineCap=\"round\"/>\n  <path\n      android:pathData=\"M245.604,382.37C246.729,386.372 244.396,390.527 240.395,391.652 236.393,392.777 232.237,390.445 231.113,386.443 229.988,382.441 232.32,378.286 236.322,377.161 240.323,376.036 244.479,378.368 245.604,382.37M229.428,412.802C231.076,418.665 229.168,424.33 225.166,425.455 221.165,426.579 216.585,422.739 214.937,416.875 213.288,411.012 215.197,405.347 219.199,404.222 223.2,403.098 227.781,406.939 229.428,412.802\"\n      android:strokeAlpha=\"0.5\"\n      android:fillColor=\"#2B2F62\"\n      android:fillType=\"evenOdd\"\n      android:fillAlpha=\"0.5\"/>\n  <path\n      android:pathData=\"M304.568,164.015C304.568,164.015 307.722,151.893 307.195,151.723C285.297,144.683 262.581,111.59 257.238,96.275C245.297,62.051 254.936,29.929 294.383,22.516C330.299,15.767 358.298,41.046 355.77,77.759C354.298,99.15 348.023,132.324 328.862,147.833C328.437,148.177 335.297,159.35 335.297,159.35L304.568,164.015Z\"\n      android:fillColor=\"#FF0D58\"\n      android:fillType=\"evenOdd\"/>\n  <group>\n    <clip-path\n        android:pathData=\"M313.421,165.961C313.421,165.961 314.639,153.495 314.092,153.41C291.363,149.882 263.749,120.75 256.076,106.459C238.929,74.525 243.424,41.29 281.226,27.798C315.644,15.513 347.252,36.101 350.499,72.758C352.391,94.116 351.383,127.863 334.884,146.178C334.518,146.584 343.041,156.547 343.041,156.547L313.421,165.961Z\"/>\n    <path\n        android:pathData=\"M276.759,111.555C287.438,125.677 299.808,135.818 313.869,141.977C334.961,151.215 348.806,156.057 359.772,131.843C367.082,115.7 367.082,98.195 359.772,79.328L336.774,62.503L276.766,111.554\"\n        android:fillColor=\"#E00051\"\n        android:fillType=\"nonZero\"/>\n  </group>\n  <path\n      android:pathData=\"M301.661,54.814C285.853,57.318 273.493,67.597 273.365,67.702L276.771,89.205C276.771,89.205 278.305,98.894 278.305,98.894L278.305,98.894L280.176,110.706C280.326,110.765 295.168,116.657 310.845,114.253L311.239,115.279L339.368,101.331L337.497,89.521L337.497,89.521L332.556,58.327C332.409,58.268 317.423,52.318 301.661,54.814Z\"\n      android:fillColor=\"#B6FFF6\"\n      android:fillType=\"nonZero\"/>\n  <path\n      android:pathData=\"M333.091,58.242L334.961,70.055L299.685,71.438L301.362,54.862C317.561,52.298 332.937,58.186 333.091,58.242Z\"\n      android:fillColor=\"#97F4EC\"\n      android:fillType=\"nonZero\"/>\n  <path\n      android:pathData=\"M338.03,89.437L339.9,101.247L310.94,115.326L303.719,96.897C303.719,96.897 337.826,89.531 338.03,89.437Z\"\n      android:fillColor=\"#B6FFF6\"\n      android:fillType=\"nonZero\"/>\n  <path\n      android:pathData=\"M301.533,83.107L308.25,98.354C318.508,96.645 328.511,93.649 338.028,89.435L336.493,79.744C336.355,79.766 301.533,83.107 301.533,83.107Z\"\n      android:fillColor=\"#97F4EC\"\n      android:fillType=\"nonZero\"/>\n  <path\n      android:pathData=\"M334.962,70.056L336.496,79.745L301.869,85.23L303.881,70.771C314.168,69.229 324.608,68.989 334.962,70.056Z\"\n      android:fillColor=\"#B6FFF6\"\n      android:fillType=\"nonZero\"/>\n  <path\n      android:pathData=\"M308.879,98.254L311.399,114.166C295.195,116.732 279.828,110.843 279.67,110.785L277.799,98.973L308.879,98.254Z\"\n      android:fillColor=\"#DAFFFB\"\n      android:fillType=\"nonZero\"/>\n  <path\n      android:pathData=\"M301.991,54.764L304.511,70.675L274.733,79.594L272.863,67.783C281.432,61.213 291.405,56.756 301.991,54.764L301.991,54.764Z\"\n      android:fillColor=\"#B6FFF6\"\n      android:fillType=\"nonZero\"/>\n  <path\n      android:pathData=\"M304.511,70.675L306.696,84.469L292.153,91.121L276.267,89.288L274.732,79.597C284.249,75.383 294.252,72.385 304.511,70.675Z\"\n      android:fillColor=\"#DAFFFB\"\n      android:fillType=\"nonZero\"/>\n  <path\n      android:pathData=\"M276.266,89.283C276.266,89.283 277.801,98.972 277.801,98.972C288.155,100.038 298.595,99.797 308.881,98.254L306.696,84.46L276.266,89.283Z\"\n      android:fillColor=\"#B6FFF6\"\n      android:fillType=\"nonZero\"/>\n  <group>\n    <clip-path\n        android:pathData=\"M315.272,162.654C315.272,162.654 316.491,150.188 315.943,150.102C293.214,146.574 265.601,117.442 257.928,103.152C240.78,71.217 245.275,37.983 283.077,24.49C317.495,12.206 349.104,32.793 352.35,69.45C354.242,90.808 353.234,124.555 336.735,142.87C336.369,143.277 344.893,153.239 344.893,153.239L315.272,162.654Z\"/>\n    <path\n        android:pathData=\"M342.221,96.279L342.129,96.345L336.729,62.246L336.836,62.279C341.26,63.687 349.663,66.283 357.594,65.601L356.822,60.722C349.823,61.314 342.341,58.878 338.229,57.567C337.273,57.263 336.51,57.021 335.876,56.851L335.874,56.839L334.748,56.388C313.108,47.824 288.618,51.703 270.683,66.535L269.75,67.312L269.752,67.324C269.2,67.681 268.55,68.147 267.735,68.732C264.229,71.246 257.87,75.898 251.029,77.49L251.8,82.359C259.552,80.553 266.747,75.491 270.515,72.785L270.607,72.72L276.007,106.814L275.899,106.78C271.475,105.373 263.072,102.776 255.143,103.46L255.914,108.328C262.913,107.736 270.397,110.188 274.507,111.496C275.541,111.825 276.351,112.081 277.015,112.252L277.982,112.639C299.622,121.204 324.113,117.325 342.047,102.492L342.847,101.825C343.427,101.457 344.118,100.964 344.999,100.331C348.503,97.817 354.864,93.164 361.704,91.572L360.933,86.704C353.184,88.512 345.994,93.574 342.221,96.279ZM338.453,99.885C322.093,112.908 300.181,116.379 280.598,109.048L274.279,69.152C290.638,56.129 312.551,52.658 332.134,59.989L338.453,99.885Z\"\n        android:fillColor=\"#FFF\"\n        android:fillType=\"nonZero\"/>\n  </group>\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_bluetooth_onboard.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"130dp\"\n    android:height=\"130dp\"\n    android:viewportWidth=\"500\"\n    android:viewportHeight=\"500\">\n    <path\n        android:fillColor=\"#BFE3F8\"\n        android:pathData=\"M249.9,250m-224.2,0a224.2,224.2 0,1 1,448.4 0a224.2,224.2 0,1 1,-448.4 0\" />\n    <path\n        android:fillColor=\"#DFF2FC\"\n        android:pathData=\"M250,0C111.9,0 0,111.9 0,250c0,138.1 111.9,250 250,250s250,-111.9 250,-250C500,111.9 388.1,0 250,0zM250,474.2C126.2,474.2 25.8,373.8 25.8,250S126.2,25.8 250,25.8S474.2,126.2 474.2,250S373.8,474.2 250,474.2z\" />\n    <group>\n        <clip-path android:pathData=\"M249.9,250m-224.2,0a224.2,224.2 0,1 1,448.4 0a224.2,224.2 0,1 1,-448.4 0\" />\n        <path\n            android:fillColor=\"#F89A57\"\n            android:pathData=\"M201.4,238.5c18.2,-16 54.4,87.8 54.2,95.7c-0.8,31.4 -6.4,63.9 -22.3,73.2c-14.6,0.2 -33.2,-3.2 -46.8,-7.6c-0.7,-12.2 -5.9,-55.7 -5.6,-74.3C181.2,308.2 197.9,241.6 201.4,238.5z\" />\n        <path\n            android:fillColor=\"#F89A57\"\n            android:pathData=\"M143.6,545.7c13.9,-53.4 32.7,-113.5 43.6,-149.2c19.7,-5.8 30.8,-1.7 47.5,6.2c-4.6,42.4 -14.3,134.2 -20.1,189.8C187.7,581.2 163.5,565.3 143.6,545.7z\" />\n        <path\n            android:fillColor=\"#282B67\"\n            android:pathData=\"M218.3,376.6l68.5,-7.7c5.7,-0.6 9.9,-5.8 9.2,-11.6l-18.3,-162.5c-0.6,-5.7 -5.8,-9.9 -11.6,-9.2l-68.5,7.7c-5.7,0.6 -9.9,5.8 -9.2,11.6l18.3,162.5C207.4,373.2 212.6,377.3 218.3,376.6z\" />\n        <path\n            android:fillColor=\"#3550A3\"\n            android:pathData=\"M219.3,371.8l65.4,-7.4c6.6,-0.7 11.3,-6.7 10.6,-13.3l-18,-159.4c-0.7,-6.6 -6.7,-11.3 -13.3,-10.6l-65.4,7.4c-6.6,0.7 -11.3,6.7 -10.6,13.3l18,159.4C206.8,367.8 212.8,372.5 219.3,371.8z\" />\n        <path\n            android:fillColor=\"#282B67\"\n            android:pathData=\"M223.2,195.2l11.3,-1.3c0.8,-0.1 1.4,-0.8 1.3,-1.7l0,0c-0.1,-0.8 -0.8,-1.4 -1.7,-1.3l-11.3,1.3c-0.8,0.1 -1.4,0.8 -1.3,1.7l0,0C221.7,194.7 222.4,195.3 223.2,195.2z\" />\n        <path\n            android:fillColor=\"#282B67\"\n            android:pathData=\"M239.9,191.8c0.1,0.8 0.8,1.4 1.7,1.3c0.8,-0.1 1.4,-0.8 1.3,-1.7c-0.1,-0.8 -0.8,-1.4 -1.7,-1.3S239.9,191 239.9,191.8z\" />\n        <path\n            android:fillColor=\"#282B67\"\n            android:pathData=\"M246.4,359.1c0.3,2.5 2.6,4.3 5.1,4c2.5,-0.3 4.3,-2.6 4,-5.1c-0.3,-2.5 -2.6,-4.3 -5.1,-4S246.1,356.6 246.4,359.1z\" />\n        <group>\n            <clip-path android:pathData=\"M215.9,356.1l68.6,-7.7c2.5,-0.3 4.2,-2.5 4,-5L272,196.7c-0.3,-2.5 -2.5,-4.2 -5,-4l-68.6,7.7c-2.5,0.3 -4.2,2.5 -4,5L211,352.2C211.2,354.6 213.5,356.4 215.9,356.1z\" />\n            <path\n                android:fillColor=\"#C1C9E6\"\n                android:pathData=\"M188.348,200.981l88.72,-10.136l18.035,157.867l-88.72,10.136z\" />\n            <path\n                android:fillColor=\"#FFFFFF\"\n                android:pathData=\"M188.337,201.131l88.72,-10.136l5.664,49.576l-88.72,10.136z\" />\n            <path\n                android:fillColor=\"#98A3D0\"\n                android:pathData=\"M206.183,264.503a6,6 83.858,1 0,7.524 -9.349a6,6 83.858,1 0,-7.524 9.349z\" />\n            <path\n                android:fillColor=\"#98A3D0\"\n                android:pathData=\"M223.1,267.7c-0.8,0 -1.5,-0.6 -1.6,-1.4c-0.1,-0.9 0.5,-1.6 1.4,-1.7l51.2,-5.8c0.9,-0.1 1.6,0.5 1.7,1.4c0.1,0.9 -0.5,1.6 -1.4,1.7l-51.2,5.8C223.2,267.7 223.1,267.7 223.1,267.7z\" />\n            <path\n                android:fillColor=\"#98A3D0\"\n                android:pathData=\"M224,275.6c-0.8,0 -1.5,-0.6 -1.6,-1.4c-0.1,-0.9 0.5,-1.6 1.4,-1.7l51.2,-5.8c0.9,-0.1 1.6,0.5 1.7,1.4c0.1,0.9 -0.5,1.6 -1.4,1.7l-51.2,5.8C224.1,275.6 224.1,275.6 224,275.6z\" />\n            <path\n                android:fillColor=\"#98A3D0\"\n                android:pathData=\"M222.2,259.7c-0.8,0 -1.5,-0.6 -1.6,-1.4c-0.1,-0.9 0.5,-1.6 1.4,-1.7l51.2,-5.8c0.9,-0.1 1.6,0.5 1.7,1.4c0.1,0.9 -0.5,1.6 -1.4,1.7l-51.2,5.8C222.3,259.7 222.2,259.7 222.2,259.7z\" />\n            <path\n                android:fillColor=\"#98A3D0\"\n                android:pathData=\"M214.7,342c-0.8,0 -1.5,-0.6 -1.6,-1.4c-0.1,-0.9 0.5,-1.6 1.4,-1.7l67.9,-7.8c0.9,-0.1 1.6,0.5 1.7,1.4c0.1,0.9 -0.5,1.6 -1.4,1.7l-67.9,7.8C214.8,342 214.7,342 214.7,342z\" />\n            <path\n                android:fillColor=\"#98A3D0\"\n                android:pathData=\"M215.7,350.9c-0.8,0 -1.5,-0.6 -1.6,-1.4c-0.1,-0.9 0.5,-1.6 1.4,-1.7l67.9,-7.8c0.9,-0.1 1.6,0.5 1.7,1.4c0.1,0.9 -0.5,1.6 -1.4,1.7l-67.9,7.8C215.8,350.9 215.7,350.9 215.7,350.9z\" />\n            <path\n                android:fillColor=\"#FFFFFF\"\n                android:pathData=\"M207.024,287.498l69.446,-7.934l4.767,41.727l-69.446,7.934z\" />\n        </group>\n        <group>\n            <clip-path android:pathData=\"M215.9,356.1l68.6,-7.7c2.5,-0.3 4.2,-2.5 4,-5L272,196.7c-0.3,-2.5 -2.5,-4.2 -5,-4l-68.6,7.7c-2.5,0.3 -4.2,2.5 -4,5L211,352.2C211.2,354.6 213.5,356.4 215.9,356.1z\" />\n            <path\n                android:fillColor=\"#DA0D81\"\n                android:pathData=\"M216.286,237.922a14.4,14.4 46.781,1 0,0.895 -28.786a14.4,14.4 46.781,1 0,-0.895 28.786z\" />\n            <path\n                android:fillColor=\"#FFFFFF\"\n                android:pathData=\"M216.9,224.8L216.9,224.8c-3.9,0.4 -6.6,3.9 -6.2,7.7l13.9,-1.5C224.2,227.1 220.7,224.4 216.9,224.8z\" />\n            <path\n                android:fillColor=\"#FFFFFF\"\n                android:pathData=\"M216.7,223.2c2.2,-0.2 3.8,-2.2 3.5,-4.4c-0.2,-2.2 -2.2,-3.8 -4.4,-3.5c-2.2,0.2 -3.8,2.2 -3.5,4.4C212.5,221.8 214.5,223.4 216.7,223.2z\" />\n            <path\n                android:fillColor=\"#2B479B\"\n                android:pathData=\"M313.8,207.6c-0.1,0.1 -0.2,0.1 -0.4,0.1l-75,8.1c-0.6,0.1 -1.2,-0.4 -1.2,-1c-0.1,-0.6 0.4,-1.2 1,-1.2l75,-8.1c0.6,-0.1 1.2,0.4 1.2,1C314.5,207 314.2,207.4 313.8,207.6z\" />\n            <path\n                android:fillColor=\"#2B479B\"\n                android:pathData=\"M314.4,213.4c-0.1,0.1 -0.2,0.1 -0.4,0.1l-45.3,4.9c-0.6,0.1 -1.2,-0.4 -1.2,-1c-0.1,-0.6 0.4,-1.2 1,-1.2l45.3,-4.9c0.6,-0.1 1.2,0.4 1.2,1C315.1,212.7 314.8,213.1 314.4,213.4z\" />\n            <path\n                android:fillColor=\"#2B479B\"\n                android:pathData=\"M263.1,218.9c-0.1,0.1 -0.2,0.1 -0.4,0.1l-23.6,2.5c-0.6,0.1 -1.2,-0.4 -1.2,-1c-0.1,-0.6 0.4,-1.2 1,-1.2l23.6,-2.5c0.6,-0.1 1.2,0.4 1.2,1C263.7,218.2 263.5,218.7 263.1,218.9z\" />\n            <path\n                android:fillColor=\"#2B479B\"\n                android:pathData=\"M294.6,221.3c-0.1,0.1 -0.2,0.1 -0.4,0.1l-54.6,5.9c-0.6,0.1 -1.2,-0.4 -1.2,-1c-0.1,-0.6 0.4,-1.2 1,-1.2l54.6,-5.9c0.6,-0.1 1.2,0.4 1.2,1C295.3,220.6 295,221.1 294.6,221.3z\" />\n        </group>\n        <path\n            android:fillColor=\"#F89A57\"\n            android:pathData=\"M219.6,396.7c5.6,0.8 21.5,-25.4 11,-55.8c14.2,-12.3 21.4,-46.7 10.2,-51.3c-7.8,-3.2 -48,60.9 -47.7,67.4C193.7,368.9 219.8,389 219.6,396.7z\" />\n        <path\n            android:fillColor=\"#D37C38\"\n            android:pathData=\"M230.6,341c2,4.8 3.5,9.9 4.3,15.1c0.8,5.2 0.9,10.6 -0.1,15.9c-1,5.3 -3.2,10.4 -6.4,14.7c-3.2,4.3 -7.2,7.8 -11.7,10.6c3.6,-3.8 6.9,-7.7 9.5,-12.1c2.6,-4.3 4.4,-9 5.3,-13.9c0.9,-4.9 1.1,-9.9 0.8,-15C231.9,351.3 231.2,346.2 230.6,341z\" />\n        <path\n            android:fillColor=\"#F89A57\"\n            android:pathData=\"M288.6,390.1c-15,-15.5 -30.3,-30.6 -34.9,-26.2c-6,5.8 9,49.7 35.1,67.6C298.7,438.2 320.7,392.9 288.6,390.1z\" />\n        <path\n            android:fillColor=\"#F89A57\"\n            android:pathData=\"M288.6,289c-20,57.6 -3.2,133.8 0.9,136.7c16.6,11.8 57.6,16.8 61.6,11c14.8,-21.1 21.7,-57.5 9,-78.1c-4.3,-6.9 -44.7,-15.4 -53.6,-13.6c-3.8,-16 -2.5,-40.9 -0.6,-51.3C309.9,270.8 294.2,273 288.6,289z\" />\n        <path\n            android:fillColor=\"#282B67\"\n            android:pathData=\"M243.9,420c-18.6,-12.1 -56.2,-23.5 -72.8,-14.8c-1,1.8 -0.3,9.2 0.8,10.9l67.6,18.4C241.5,431 244.3,424.8 243.9,420z\" />\n        <path\n            android:fillColor=\"#DA0D81\"\n            android:pathData=\"M216.7,634.9c7.2,-71.6 20.1,-151.6 22.9,-200.4c-20.7,-12.6 -40.5,-18.4 -67.6,-18.4c-17.6,52.6 -54.2,162.2 -73.4,231.5C140.3,650.4 180.4,646.1 216.7,634.9z\" />\n        <path\n            android:fillColor=\"#F89A57\"\n            android:pathData=\"M285.9,417c0,0 13.8,61 13.8,70.2c13.7,3.1 37.2,-7.7 42.8,-7.3c0,0 8.8,-50.2 13.5,-65.1L285.9,417z\" />\n        <path\n            android:fillColor=\"#282B67\"\n            android:pathData=\"M352.6,447.8c-20.3,-6.8 -57.5,-7.8 -69.9,4.9c-0.3,2 2.4,8.9 3.8,10.2l66.3,0C353.6,459 354.3,452.3 352.6,447.8z\" />\n        <path\n            android:fillColor=\"#DA0D81\"\n            android:pathData=\"M389.8,660.7c-14.1,-70.4 -25.4,-150.4 -37,-197.8c-22.3,-6.6 -41.9,-7.1 -66.3,0c-0.7,55 -2.3,169.5 0.4,240.8C325.3,695.5 360.3,680.8 389.8,660.7z\" />\n    </group>\n    <group>\n        <clip-path android:pathData=\"M249.9,250m-224.2,0a224.2,224.2 0,1 1,448.4 0a224.2,224.2 0,1 1,-448.4 0\" />\n        <path\n            android:fillColor=\"#F7B586\"\n            android:pathData=\"M369.1,161.7c-19.8,-1.9 -16.4,68.8 -11.9,73.3c15.2,15.1 37.5,17.2 52.5,17.6c10.6,-5.6 21.2,-17.2 29.2,-25.8C422.5,199.9 402,164.7 369.1,161.7z\" />\n        <path\n            android:fillColor=\"#F7B586\"\n            android:pathData=\"M330,235.5c8.1,-4.2 15.8,-7.3 25.1,-7c6.8,0.2 4.7,-22.4 -2.6,-19.6c-9.4,3.7 -18.8,7.9 -28.1,12.7c-7.2,3.7 -8.5,9.2 -6.7,12.5C319.2,237.1 323.9,238.6 330,235.5z\" />\n        <path\n            android:fillColor=\"#F7B586\"\n            android:pathData=\"M345.8,253.4c8.8,-5.6 16.2,-9.7 29.3,-6.8c7.3,1.6 6.4,-24.6 -1.8,-21.4c-10.7,4.3 -21.3,9.1 -31.9,14.4c-8.1,4.1 -10.1,10.2 -7.6,13.3C335.9,255.7 340.2,257.4 345.8,253.4z\" />\n        <path\n            android:fillColor=\"#F7B586\"\n            android:pathData=\"M316.9,217.2c8.2,-4 16,-7 25.2,-6.5c6.8,0.4 10.7,-11.6 10.8,-16l0,0c0.1,-4.4 -5.7,-6.3 -13,-3.6c-9.5,3.5 -19,7.6 -28.4,12.2c-7.2,3.5 -12.3,8.4 -9.5,13.3C304.2,220.2 310.8,220.2 316.9,217.2z\" />\n        <path\n            android:fillColor=\"#F7B586\"\n            android:pathData=\"M352.9,162.1c-8.4,0 -42.6,0.8 -48.6,6c-3.4,3 -3.3,7.2 0.1,9.6c3,2.2 7.3,2.5 11.2,3c7.5,0.9 16,-0.3 22.9,0.5c3.7,0.4 13,2.5 16.8,1.6C361.2,181.4 361.7,162.2 352.9,162.1z\" />\n        <path\n            android:fillColor=\"#F7B586\"\n            android:pathData=\"M529.9,368.1c-24.8,-37.7 -73,-116.5 -90.9,-141.3c-16.8,0.7 -18.8,15 -29.6,25.5c14.8,31.6 44,96.9 63.1,138.4C472.5,390.8 519.6,388.5 529.9,368.1z\" />\n        <path\n            android:fillColor=\"#282B67\"\n            android:pathData=\"M402.3,227.1l-49.7,20.6c-5,2.1 -10.8,-0.3 -12.8,-5.3l-50.2,-121.3c-2.1,-5 0.3,-10.8 5.3,-12.8l49.7,-20.6c5,-2.1 10.8,0.3 12.8,5.3l50.2,121.3C409.7,219.3 407.3,225 402.3,227.1z\" />\n        <path\n            android:fillColor=\"#3550A3\"\n            android:pathData=\"M400.8,223.6l-49.7,20.6c-5,2.1 -10.8,-0.3 -12.8,-5.3l-50.2,-121.3c-2.1,-5 0.3,-10.8 5.3,-12.8l49.7,-20.6c5,-2.1 10.8,0.3 12.8,5.3l50.2,121.3C408.2,215.7 405.8,221.5 400.8,223.6z\" />\n        <path\n            android:fillColor=\"#282B67\"\n            android:pathData=\"M328.2,98.6l-8.6,3.5c-0.6,0.3 -1.3,0 -1.6,-0.7l0,0c-0.3,-0.6 0,-1.3 0.7,-1.6l8.6,-3.5c0.6,-0.3 1.3,0 1.6,0.7l0,0C329.1,97.6 328.8,98.4 328.2,98.6z\" />\n        <path\n            android:fillColor=\"#282B67\"\n            android:pathData=\"M314.9,102.8c0.3,0.6 0,1.3 -0.7,1.6s-1.3,0 -1.6,-0.7c-0.3,-0.6 0,-1.3 0.7,-1.6C313.9,101.9 314.6,102.2 314.9,102.8z\" />\n        <path\n            android:fillColor=\"#282B67\"\n            android:pathData=\"M373,226.6m-3.8,0a3.8,3.8 0,1 1,7.6 0a3.8,3.8 0,1 1,-7.6 0\" />\n        <group>\n            <clip-path android:pathData=\"M396.3,211.3l-50.7,21c-2.3,0.9 -4.9,-0.1 -5.9,-2.4l-45.5,-110.1c-0.9,-2.3 0.1,-4.9 2.4,-5.9l50.7,-21c2.3,-0.9 4.9,0.1 5.9,2.4l45.5,110.1C399.7,207.7 398.6,210.3 396.3,211.3z\" />\n            <path\n                android:fillColor=\"#C1C9E6\"\n                android:pathData=\"M288.371,118.117l67.306,-28.273l50.349,119.86l-67.306,28.273z\" />\n            <path\n                android:fillColor=\"#FFFFFF\"\n                android:pathData=\"M299.023,143.632l67.306,-28.273l24.477,58.27l-67.306,28.273z\" />\n            <path\n                android:fillColor=\"#98A3D0\"\n                android:pathData=\"M353.7,106.1c-0.1,0.1 -0.2,0.2 -0.4,0.2L301.8,128c-0.7,0.3 -1.4,0 -1.7,-0.7c-0.3,-0.7 0,-1.4 0.7,-1.7l51.5,-21.6c0.7,-0.3 1.4,0 1.7,0.7C354.2,105.2 354.1,105.8 353.7,106.1z\" />\n            <path\n                android:fillColor=\"#98A3D0\"\n                android:pathData=\"M356.5,112.9c-0.1,0.1 -0.2,0.2 -0.4,0.2l-51.5,21.6c-0.7,0.3 -1.4,0 -1.7,-0.7c-0.3,-0.7 0,-1.4 0.7,-1.7l51.5,-21.6c0.7,-0.3 1.4,0 1.7,0.7C357,112 356.9,112.5 356.5,112.9z\" />\n            <path\n                android:fillColor=\"#98A3D0\"\n                android:pathData=\"M342.6,203.4c1.1,2.5 -0.1,5.4 -2.6,6.5c-2.5,1.1 -5.4,-0.1 -6.5,-2.6c-1.1,-2.5 0.1,-5.4 2.6,-6.5C338.7,199.7 341.6,200.9 342.6,203.4z\" />\n            <path\n                android:fillColor=\"#98A3D0\"\n                android:pathData=\"M389.5,191.9c-0.1,0.1 -0.2,0.2 -0.4,0.2l-38.8,16.3c-0.7,0.3 -1.4,0 -1.7,-0.7c-0.3,-0.7 0,-1.4 0.7,-1.7l38.8,-16.3c0.7,-0.3 1.4,0 1.7,0.7C390.1,191 389.9,191.5 389.5,191.9z\" />\n            <path\n                android:fillColor=\"#98A3D0\"\n                android:pathData=\"M392.1,197.9c-0.1,0.1 -0.2,0.2 -0.4,0.2l-38.8,16.3c-0.7,0.3 -1.4,0 -1.7,-0.7c-0.3,-0.7 0,-1.4 0.7,-1.7l38.8,-16.3c0.7,-0.3 1.4,0 1.7,0.7C392.6,197 392.5,197.6 392.1,197.9z\" />\n            <path\n                android:fillColor=\"#98A3D0\"\n                android:pathData=\"M387,185.8c-0.1,0.1 -0.2,0.2 -0.4,0.2l-38.8,16.3c-0.7,0.3 -1.4,0 -1.7,-0.7c-0.3,-0.7 0,-1.4 0.7,-1.7l38.8,-16.3c0.7,-0.3 1.4,0 1.7,0.7C387.5,184.9 387.4,185.5 387,185.8z\" />\n        </group>\n        <path\n            android:fillColor=\"#F7B586\"\n            android:pathData=\"M410.5,241.5c-3.7,2.8 -25.4,-9.7 -30,-35.6c-10.5,5.4 -26.6,8.5 -25.6,0.3c0.6,-5.6 20.5,-17.5 26.9,-19.2c9.4,0.6 24.6,4.8 29.4,7.2C411.2,194.2 407.3,236 410.5,241.5z\" />\n        <path\n            android:fillColor=\"#F7944D\"\n            android:pathData=\"M380.6,206c1.6,4 3.1,7.9 4.9,11.7c1.8,3.8 3.9,7.3 6.5,10.4c2.6,3.1 5.7,5.8 9.3,7.8c3.6,2.1 7.5,3.5 11.6,4.9c-4.3,-0.2 -8.6,-1.1 -12.5,-3c-4,-1.8 -7.6,-4.6 -10.4,-8c-2.8,-3.4 -4.9,-7.3 -6.4,-11.4C382.1,214.4 381.1,210.2 380.6,206z\" />\n        <path\n            android:fillColor=\"#282B67\"\n            android:pathData=\"M413,262.9c8.2,-9.7 29.9,-20.6 35.7,-22.4c4,-1.6 13.8,12.6 12.5,16.5l-38.9,25.2C419.7,280 412.7,270.4 413,262.9z\" />\n        <path\n            android:fillColor=\"#3550A3\"\n            android:pathData=\"M488.8,437.6c-25.9,-52.9 -50.6,-118.7 -66.5,-155.4c9.5,-10.5 22.8,-19 38.9,-25.2c28.5,35.4 87.8,109 122.2,156.7C552,427.7 519.8,435.8 488.8,437.6z\" />\n        <path\n            android:fillColor=\"#2B479B\"\n            android:pathData=\"M541.3,428.8c-17.6,4.8 -35.2,7.8 -52.5,8.7c-25.9,-52.9 -50.6,-118.7 -66.5,-155.4c1.7,-1.9 3.5,-3.7 5.4,-5.4C456.8,334.7 514,401.6 541.3,428.8z\" />\n    </group>\n    <group>\n        <clip-path android:pathData=\"M249.9,250m-224.2,0a224.2,224.2 0,1 1,448.4 0a224.2,224.2 0,1 1,-448.4 0\" />\n        <path\n            android:fillColor=\"#DB7627\"\n            android:pathData=\"M139.9,238.1c1.2,-19.8 -65.3,-43.3 -66.8,-37c-7.2,30.1 -5.6,43.1 4.2,60.4c10.4,5.9 24.8,12.4 38.9,10C119.9,266.1 139.4,245.4 139.9,238.1z\" />\n        <path\n            android:fillColor=\"#DB7627\"\n            android:pathData=\"M124,174.5c-2.6,-8 -14.1,-40.2 -20.9,-44.2c-3.9,-2.3 -7.8,-0.9 -9.1,3.1c-1.1,3.5 -0.1,7.7 0.7,11.5c1.5,7.4 5.3,15.1 6.7,21.9c0.7,3.7 1.7,13.2 3.7,16.5C108.3,188.4 126.7,182.8 124,174.5z\" />\n        <path\n            android:fillColor=\"#DB7627\"\n            android:pathData=\"M90.5,423.2c10.8,-43.8 21.8,-124.5 27.9,-154.5c-11.9,-11.9 -30.4,-15.8 -41.1,-7.3C64.1,293.7 47.4,376.3 30,418.6C53.8,420.9 68.5,429.5 90.5,423.2z\" />\n        <path\n            android:fillColor=\"#282B67\"\n            android:pathData=\"M106,257.6l-44.1,-30.8c-4.5,-3.1 -5.5,-9.2 -2.4,-13.7l75.1,-107.7c3.1,-4.5 9.2,-5.5 13.7,-2.4l44.1,30.8c4.5,3.1 5.5,9.2 2.4,13.7l-75.1,107.7C116.6,259.6 110.5,260.7 106,257.6z\" />\n        <path\n            android:fillColor=\"#3550A3\"\n            android:pathData=\"M108.2,254.4l-44.1,-30.8c-4.5,-3.1 -5.5,-9.2 -2.4,-13.7l75.1,-107.7c3.1,-4.5 9.2,-5.5 13.7,-2.4l44.1,30.8c4.5,3.1 5.5,9.2 2.4,13.7L121.9,252C118.8,256.5 112.7,257.5 108.2,254.4z\" />\n        <path\n            android:fillColor=\"#282B67\"\n            android:pathData=\"M174.3,125.9l-7.6,-5.3c-0.6,-0.4 -0.7,-1.1 -0.3,-1.7l0,0c0.4,-0.6 1.1,-0.7 1.7,-0.3l7.6,5.3c0.6,0.4 0.7,1.1 0.3,1.7l0,0C175.6,126.2 174.8,126.3 174.3,125.9z\" />\n        <path\n            android:fillColor=\"#282B67\"\n            android:pathData=\"M163.5,116.9c-0.4,0.6 -1.1,0.7 -1.7,0.3c-0.6,-0.4 -0.7,-1.1 -0.3,-1.7c0.4,-0.6 1.1,-0.7 1.7,-0.3C163.8,115.6 163.9,116.4 163.5,116.9z\" />\n        <path\n            android:fillColor=\"#282B67\"\n            android:pathData=\"M93.7,234.8c-1.2,1.7 -3.5,2.1 -5.2,0.9c-1.7,-1.2 -2.1,-3.5 -0.9,-5.2c1.2,-1.7 3.5,-2.1 5.2,-0.9C94.4,230.8 94.9,233.1 93.7,234.8z\" />\n        <group>\n            <clip-path android:pathData=\"M116.1,244l-45,-31.4c-2,-1.4 -2.5,-4.2 -1.1,-6.2l68.1,-97.7c1.4,-2 4.2,-2.5 6.2,-1.1l45,31.4c2,1.4 2.5,4.2 1.1,6.2l-68.1,97.7C120.9,245 118.1,245.5 116.1,244z\" />\n            <path\n                android:fillColor=\"#C1C9E6\"\n                android:pathData=\"M61.291,211.455l74.295,-106.678l59.904,41.72l-74.295,106.678z\" />\n            <path\n                android:fillColor=\"#FFFFFF\"\n                android:pathData=\"M72.82,194.775l36.119,-51.862l59.904,41.72l-36.119,51.862z\" />\n            <path\n                android:fillColor=\"#98A3D0\"\n                android:pathData=\"M123.5,136.9c-0.5,-0.4 -0.6,-1.2 -0.2,-1.7c0.4,-0.6 1.2,-0.7 1.8,-0.3l45.8,31.9c0.6,0.4 0.7,1.2 0.3,1.8c-0.4,0.6 -1.2,0.7 -1.8,0.3L123.6,137C123.6,136.9 123.5,136.9 123.5,136.9z\" />\n            <path\n                android:fillColor=\"#98A3D0\"\n                android:pathData=\"M119.3,142.9c-0.5,-0.4 -0.6,-1.2 -0.2,-1.7c0.4,-0.6 1.2,-0.7 1.8,-0.3l45.8,31.9c0.6,0.4 0.7,1.2 0.3,1.8c-0.4,0.6 -1.2,0.7 -1.8,0.3L119.5,143C119.4,142.9 119.4,142.9 119.3,142.9z\" />\n            <path\n                android:fillColor=\"#98A3D0\"\n                android:pathData=\"M82.5,210.7c-1.6,2.2 -4.6,2.8 -6.9,1.2c-2.2,-1.6 -2.8,-4.6 -1.2,-6.9c1.6,-2.2 4.6,-2.8 6.9,-1.2C83.5,205.4 84.1,208.5 82.5,210.7z\" />\n            <path\n                android:fillColor=\"#98A3D0\"\n                android:pathData=\"M86,214.5c-0.5,-0.4 -0.6,-1.2 -0.2,-1.7c0.4,-0.6 1.2,-0.7 1.8,-0.3l34.6,24.1c0.6,0.4 0.7,1.2 0.3,1.8c-0.4,0.6 -1.2,0.7 -1.8,0.3l-34.6,-24.1C86.1,214.5 86.1,214.5 86,214.5z\" />\n        </group>\n        <path\n            android:fillColor=\"#DB7627\"\n            android:pathData=\"M91.1,253.8c-2,-4.3 14.7,-17.8 42.8,-20.7c4.5,-9.6 22.1,-31.3 30.4,-24.6c4,3.2 -16.6,37.5 -16.6,37.5s-13.4,12.4 -31.6,25.3C116.2,271.4 97.6,250.8 91.1,253.8z\" />\n        <path\n            android:fillColor=\"#804A1F\"\n            android:pathData=\"M133.9,233.5c-4.1,0.4 -8.1,0.8 -12,1.7c-3.9,0.8 -7.7,2 -11.3,3.5c-3.6,1.5 -7.1,3.4 -10.4,5.6c-3.3,2.2 -6.5,4.6 -9.7,7.2c2.3,-3.4 5.1,-6.4 8.3,-9.1c3.2,-2.6 6.8,-4.8 10.6,-6.5c3.8,-1.6 7.9,-2.7 12.1,-3.1C125.8,232.5 129.9,232.6 133.9,233.5z\" />\n        <path\n            android:fillColor=\"#C1C9E6\"\n            android:pathData=\"M103.2,465.9c5.7,-62.8 16.3,-133 18.3,-175.8c-18.2,-10.8 -35.7,-15.8 -59.4,-15.5c-15,46.3 -46.1,142.7 -62.3,203.6C36.4,480.2 71.5,476 103.2,465.9z\" />\n        <path\n            android:fillColor=\"#98A3D0\"\n            android:pathData=\"M121.5,290.1c-2.2,-1.3 -4.5,-2.6 -6.7,-3.7c-6.3,35.7 -16.7,73.8 -31.3,112.5C72.9,426.8 60.9,453 48,477.1c19.2,-1.9 37.7,-5.7 55.2,-11.3C108.9,403.1 119.5,332.9 121.5,290.1z\" />\n        <path\n            android:fillColor=\"#DB7627\"\n            android:pathData=\"M76.9,195.1c-1.8,-2.2 -4.1,-3.7 -6.1,-3.4c-3.8,0.6 -7.1,5.9 -6.2,9.8c0.4,1.7 1.3,3 2.4,4.1c2.1,2.3 5,4.6 8.5,4C83.2,208.3 79.5,198.3 76.9,195.1z\" />\n        <path\n            android:fillColor=\"#DB7627\"\n            android:pathData=\"M84.4,195.7c9,-1.5 4.7,-13 1.8,-16.6c-2.1,-2.5 -4.6,-4.2 -7,-3.8c-4.3,0.6 -8.1,6.7 -7.1,11.1c0.4,1.9 1.5,3.4 2.7,4.7C77.1,193.8 80.5,196.3 84.4,195.7z\" />\n        <path\n            android:fillColor=\"#DB7627\"\n            android:pathData=\"M83.6,172.8c0.4,1.9 1.5,3.3 2.6,4.6c2.3,2.6 5.6,5.1 9.5,4.5c8.8,-1.5 4.6,-12.7 1.7,-16.3c-2,-2.5 -4.5,-4.1 -6.9,-3.7C86.3,162.5 82.6,168.4 83.6,172.8z\" />\n    </group>\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_calendar.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"24dp\"\n    android:height=\"24dp\"\n    android:autoMirrored=\"true\"\n    android:viewportWidth=\"24\"\n    android:viewportHeight=\"24\">\n    <path\n        android:fillColor=\"#757575\"\n        android:pathData=\"M20,3h-1L19,1h-2v2L7,3L7,1L5,1v2L4,3c-1.1,0 -2,0.9 -2,2v16c0,1.1 0.9,2 2,2h16c1.1,0 2,-0.9 2,-2L22,5c0,-1.1 -0.9,-2 -2,-2zM20,21L4,21L4,8h16v13z\" />\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_chat.xml",
    "content": "<vector android:height=\"24dp\" android:tint=\"#757575\"\n    android:viewportHeight=\"24.0\" android:viewportWidth=\"24.0\"\n    android:width=\"24dp\" xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <path android:fillColor=\"#FF000000\" android:pathData=\"M20,2L4,2c-1.1,0 -1.99,0.9 -1.99,2L2,22l4,-4h14c1.1,0 2,-0.9 2,-2L22,4c0,-1.1 -0.9,-2 -2,-2zM6,9h12v2L6,11L6,9zM14,14L6,14v-2h8v2zM18,8L6,8L6,6h12v2z\"/>\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_confirm.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:aapt=\"http://schemas.android.com/aapt\"\n    android:width=\"316dp\"\n    android:height=\"198dp\"\n    android:viewportWidth=\"316\"\n    android:viewportHeight=\"198\">\n  <path\n      android:pathData=\"M167.336,190C135.806,190 106.261,190.62 88.87,166.857C77.17,150.87 53,121.213 53,99.817C53,46.618 119.465,4.045 166.94,48.738C214.415,93.432 264,81.735 264,134.933C264,188.132 220.078,190 167.336,190Z\"\n      android:fillType=\"evenOdd\">\n    <aapt:attr name=\"android:fillColor\">\n      <gradient \n          android:gradientRadius=\"229.40881\"\n          android:centerX=\"33.63397\"\n          android:centerY=\"5.282925\"\n          android:type=\"radial\">\n        <item android:offset=\"0\" android:color=\"#FFFFFFFF\"/>\n        <item android:offset=\"1\" android:color=\"#FFC9E2F4\"/>\n      </gradient>\n    </aapt:attr>\n  </path>\n  <group>\n    <clip-path\n        android:pathData=\"M167.312,189.959C135.789,189.959 106.25,190.574 88.863,166.97C77.165,151.09 53,121.631 53,100.378C53,47.535 172.19,-21.179 219.655,23.216C267.121,67.611 263.956,82.417 263.956,135.26C263.956,188.103 220.043,189.959 167.312,189.959Z\"/>\n    <path\n        android:pathData=\"M181.428,133.914L138.218,135.077C137.353,135.099 136.632,134.421 136.609,133.561L134.107,41.698C134.084,40.838 134.766,40.122 135.631,40.099L178.842,38.937C179.707,38.914 180.428,39.592 180.451,40.452L182.953,132.316C182.976,133.175 182.294,133.891 181.428,133.914\"\n        android:fillColor=\"#334176\"\n        android:fillType=\"evenOdd\"/>\n    <path\n        android:pathData=\"M182.763,125.345l-46.344,1.246l-2.196,-80.646l46.343,-1.246z\"\n        android:fillColor=\"#E6235C\"\n        android:fillType=\"evenOdd\"/>\n    <path\n        android:pathData=\"M181.626,69.736L181.981,90.043C182.1,96.849 176.48,102.467 169.429,102.59L148.393,102.957C141.341,103.08 135.529,97.662 135.41,90.855L135.056,70.548C134.937,63.742 140.557,58.124 147.608,58.001L168.645,57.634C175.696,57.511 181.508,62.929 181.626,69.736\"\n        android:fillColor=\"#E6235C\"\n        android:fillType=\"evenOdd\"/>\n    <path\n        android:pathData=\"M178.745,123.396l3.828,-21.074l-0.813,-18.017l-8.617,-11.68l-29.41,16.916z\"\n        android:fillColor=\"#DE0051\"\n        android:fillType=\"evenOdd\"/>\n    <path\n        android:pathData=\"M158.272,66.209C151.313,66.331 145.369,70.057 145.308,70.095L145.475,79.688L145.551,84.01L145.643,89.28C145.703,89.315 151.739,92.797 158.636,92.712L158.744,93.183L171.7,88.825L171.608,83.556L171.365,69.64C171.305,69.605 165.21,66.088 158.272,66.209\"\n        android:fillColor=\"#BCE0E3\"\n        android:fillType=\"evenOdd\"/>\n    <path\n        android:pathData=\"M171.6,69.636L171.692,74.905L156.417,73.342L158.14,66.212C165.271,66.088 171.537,69.602 171.6,69.636\"\n        android:fillColor=\"#A1D6DA\"\n        android:fillType=\"evenOdd\"/>\n    <path\n        android:pathData=\"M171.842,83.552L171.934,88.821L158.612,93.186L156.616,84.7C156.616,84.7 171.749,83.581 171.842,83.552\"\n        android:fillColor=\"#BCE0E3\"\n        android:fillType=\"evenOdd\"/>\n    <path\n        android:pathData=\"M156.508,78.548L158.479,85.614C163,85.498 167.489,84.805 171.841,83.551L171.766,79.228C171.705,79.229 156.508,78.548 156.508,78.548\"\n        android:fillColor=\"#A1D6DA\"\n        android:fillType=\"evenOdd\"/>\n    <path\n        android:pathData=\"M171.692,74.906L171.768,79.229L156.524,79.495L158.264,73.309C162.787,73.268 167.298,73.804 171.692,74.906\"\n        android:fillColor=\"#BCE0E3\"\n        android:fillType=\"evenOdd\"/>\n    <path\n        android:pathData=\"M158.756,85.609L158.879,92.707C151.746,92.832 145.484,89.318 145.42,89.283L145.328,84.013L158.756,85.609Z\"\n        android:fillColor=\"#DDEFF1\"\n        android:fillType=\"evenOdd\"/>\n    <path\n        android:pathData=\"M158.417,66.208L158.541,73.306L145.179,75.368L145.087,70.1C149.174,67.759 153.738,66.426 158.417,66.208\"\n        android:fillColor=\"#BCE0E3\"\n        android:fillType=\"evenOdd\"/>\n    <path\n        android:pathData=\"M158.541,73.306L158.648,79.459L151.984,81.469L145.254,79.693L145.178,75.37C149.531,74.115 154.02,73.422 158.541,73.306\"\n        android:fillColor=\"#DDEFF1\"\n        android:fillType=\"evenOdd\"/>\n    <path\n        android:pathData=\"M145.254,79.691L145.329,84.013C149.723,85.114 154.234,85.65 158.757,85.609L158.649,79.456L145.254,79.691Z\"\n        android:fillColor=\"#BCE0E3\"\n        android:fillType=\"evenOdd\"/>\n    <path\n        android:pathData=\"M171.393,88.137C163.561,92.816 153.915,92.984 145.925,88.582L145.614,70.784C153.446,66.106 163.092,65.937 171.082,70.339L171.393,88.137ZM173.234,86.795L173.19,86.819L172.924,71.606L172.969,71.628C174.789,72.514 178.251,74.163 181.708,74.353L181.67,72.176C178.62,72.004 175.545,70.481 173.854,69.657C173.46,69.466 173.146,69.313 172.883,69.2L172.883,69.195L172.426,68.929C163.624,63.862 152.843,64.05 144.224,69.421L143.775,69.703L143.775,69.708C143.516,69.83 143.208,69.994 142.821,70.199C141.16,71.08 138.14,72.72 135.098,72.995L135.136,75.166C138.583,74.855 141.988,73.087 143.773,72.138L143.817,72.116L144.082,87.325L144.038,87.304C142.218,86.418 138.756,84.768 135.3,84.579L135.338,86.751C138.388,86.923 141.463,88.452 143.154,89.276C143.579,89.483 143.913,89.645 144.188,89.76L144.581,89.988C153.382,95.055 164.164,94.867 172.784,89.496L173.168,89.254C173.44,89.129 173.768,88.956 174.185,88.734C175.846,87.852 178.867,86.213 181.909,85.938L181.871,83.767C178.424,84.08 175.022,85.847 173.234,86.795L173.234,86.795Z\"\n        android:fillColor=\"#FFF\"\n        android:fillType=\"evenOdd\"/>\n    <path\n        android:pathData=\"M155.593,201.35C142.637,201.818 129.651,201.9 116.738,202.91 109.861,203.449 109.993,201.019 110.001,194.634 110.004,193.247 112.54,184.273 113.233,180.707 114.938,175.593 116.215,170.353 117.904,165.238 118.859,162.344 119.719,159.356 122.861,157.898 136.206,155.669 148.439,157.843 158.928,166.938 162.098,174.017 159.267,181.165 159.178,188.286 158.977,192.91 159.339,197.689 155.593,201.35M183.037,199.102C182.981,193.079 182.925,187.057 182.869,181.034 183.824,178.456 186.152,177.586 188.454,177.204 197.602,175.689 206.782,174.591 215.88,177.627 216.669,178.031 215.201,178.409 217.212,179.519 217.178,183.182 219.364,186.214 220.353,189.68 223.02,199.027 221.672,199.307 211.43,199.643 204.208,199.881 196.987,200.203 189.763,200.306 187.5,200.338 184.913,201.464 183.037,199.102\"\n        android:fillColor=\"#B9417E\"\n        android:fillType=\"evenOdd\"/>\n    <path\n        android:pathData=\"M122.517,159.152C118.749,151.62 125.482,152.579 129.14,151.052C138.489,148.569 147.075,149.502 154.281,156.609C159.723,158.676 161.115,162.042 157.641,166.969C146.587,161.459 135.017,158.236 122.517,159.152\"\n        android:fillColor=\"#2D2F62\"\n        android:fillType=\"evenOdd\"/>\n    <path\n        android:pathData=\"M179.337,93.317C180.887,89.647 183.726,83.575 186.83,84.875C190.121,86.254 189.28,91.026 189.188,93.781C188.943,101.165 186.949,107.971 188.639,115.392C189.388,118.684 191.889,119.616 195.653,119.767C200.406,119.957 205.185,120.896 209.833,122.007C219.772,124.381 222.362,127.569 223.196,137.809C223.912,146.607 222.024,154.934 218.072,162.774C216.655,165.582 215.328,168.342 215.207,171.533C213.896,172.689 212.303,173.276 210.621,173.065C203.521,172.173 196.477,172.267 189.449,173.725C188.025,174.02 186.644,173.492 185.514,172.504C184.809,167.871 182.724,164.267 178.959,161.144C170.789,154.368 166.603,144.956 163.11,135.23C162.531,134.233 162.36,133.174 162.624,132.048C163.171,130.51 164.31,129.702 165.886,129.433C167.744,129.252 169.423,129.832 171.044,130.654C171.934,131.108 174.423,133.313 175.061,133.51C175.269,133.574 175.397,132.954 175.167,132.407C174.905,131.537 174.361,121.832 174.348,120.823C174.91,112.849 176.852,99.202 179.337,93.317\"\n        android:fillColor=\"#E0A16F\"\n        android:fillType=\"evenOdd\"/>\n    <path\n        android:pathData=\"M154.281,156.609C146.188,153.454 137.783,151.698 129.134,151.053C129.494,143.347 129.684,135.814 128.379,128.334C125.757,113.311 127.839,104.489 131.24,89.98C131.364,89.449 133.309,84.813 133.652,84.333C134.313,83.405 135.153,82.561 135.166,84.685C135.184,87.606 135.431,87.824 135.538,91.032C135.742,97.15 135.462,103.963 136.515,110.014C136.526,110.079 139.152,108.767 139.262,108.667C139.612,108.352 139.865,107.94 140.127,107.496C143.163,103.169 145.744,98.554 149.354,94.698C151.332,92.584 153.56,90.377 156.804,91.75C159.797,93.017 157.505,96.512 156.258,99.209C154.431,103.16 152.258,107.129 150.054,111.164C148.311,114.356 146.988,116.519 146.422,122.234C145.016,128.02 146.954,130.61 146.961,134.99C150.339,134.694 158.594,134.474 161.436,134.191C162.13,134.328 162.7,134.674 163.167,135.193C162.662,143.34 156.726,149.259 154.281,156.609\"\n        android:fillColor=\"#E0A16F\"\n        android:fillType=\"evenOdd\"/>\n    <path\n        android:pathData=\"M185.514,172.504C195.32,169.361 205.244,169.769 215.21,171.535C218.473,173.55 217.253,176.68 217.212,179.519C205.662,177.752 194.181,177.531 182.868,181.032C179.105,176.766 181.942,174.522 185.514,172.504\"\n        android:fillColor=\"#2E2F61\"\n        android:fillType=\"evenOdd\"/>\n    <path\n        android:pathData=\"M127.096,47.838C127.54,47.424 128.238,47.447 128.654,47.889 129.054,48.313 129.048,48.97 128.652,49.388L128.602,49.436 122.129,55.457 127.855,56.589C128.641,56.745 128.995,57.65 128.543,58.29L128.504,58.343 123.2,64.999 130.301,66.273C131.019,66.402 131.409,67.171 131.103,67.816L131.073,67.874 128.003,73.479 130.276,73.911C130.853,74.02 131.238,74.557 131.162,75.128L131.152,75.192C131.042,75.764 130.501,76.147 129.926,76.072L129.862,76.062 126.107,75.349C125.395,75.214 125.012,74.45 125.315,73.81L125.345,73.75 128.408,68.159 120.998,66.83C120.201,66.687 119.833,65.771 120.291,65.125L120.33,65.073 125.657,58.387 119.593,57.188C118.735,57.018 118.416,55.977 119.009,55.36L119.055,55.315 127.096,47.838zM187.127,52.703C187.328,52.155 187.923,51.863 188.478,52.027L188.539,52.048 191.809,53.227C192.489,53.472 192.746,54.287 192.344,54.872L192.305,54.926 188.825,59.399 195.156,61.611C195.92,61.878 196.137,62.838 195.584,63.404L195.535,63.452 189.898,68.582 195.017,70.473C195.836,70.776 195.985,71.852 195.304,72.368L195.248,72.407 186.94,77.968C186.435,78.306 185.75,78.173 185.41,77.672 185.082,77.189 185.194,76.54 185.654,76.191L185.708,76.152 192.237,71.782 187.441,70.01C186.69,69.733 186.485,68.784 187.032,68.224L187.081,68.177 192.69,63.071 186.655,60.962C185.967,60.722 185.705,59.902 186.108,59.314L186.148,59.259 189.637,54.773 187.787,54.106C187.235,53.907 186.941,53.316 187.107,52.764L187.127,52.703z\"\n        android:fillColor=\"#949FC8\"\n        android:fillType=\"nonZero\"/>\n    <path\n        android:pathData=\"M197.133,56.721C197.071,58.303 197.705,59.631 198.819,59.947C200.246,60.353 201.901,58.95 202.516,56.814C203.131,54.677 202.474,52.617 201.047,52.212C199.959,51.902 198.743,52.648 197.951,53.964L192.845,52.512C193.27,50.664 193.371,48.8 193.151,46.989L198.415,45.994C199.076,47.435 200.244,48.336 201.382,48.121C202.839,47.846 203.682,45.853 203.264,43.67C202.847,41.488 201.326,39.941 199.868,40.217C198.757,40.427 198.008,41.637 197.897,43.166L192.544,44.178C192.097,42.726 191.446,41.346 190.612,40.072L194.925,36.194C196.244,37.083 197.714,37.249 198.573,36.477C199.674,35.488 199.349,33.35 197.848,31.702C196.348,30.055 194.239,29.521 193.139,30.51C192.3,31.264 192.294,32.685 193.001,34.048L188.819,37.807C187.213,36.108 185.223,34.72 182.895,33.815L184.833,28.831C186.413,29.035 187.801,28.526 188.218,27.453C188.753,26.077 187.495,24.313 185.409,23.513C183.322,22.712 181.198,23.178 180.663,24.553C180.256,25.601 180.894,26.873 182.142,27.774L180.104,33.017C177.996,32.602 175.876,32.614 173.844,33.007L172.261,27.761C173.635,26.96 174.417,25.712 174.084,24.61C173.658,23.198 171.576,22.57 169.434,23.209C167.291,23.847 165.9,25.509 166.327,26.921C166.651,27.998 167.94,28.613 169.483,28.565L171.065,33.806C168.841,34.661 166.805,35.983 165.133,37.724L161.427,34.309C162.202,32.926 162.24,31.457 161.391,30.674C160.303,29.672 158.188,30.18 156.667,31.809C155.147,33.439 154.796,35.572 155.884,36.575C156.713,37.338 158.138,37.22 159.443,36.401L163.329,39.981C162.697,40.934 162.151,41.962 161.72,43.07C161.556,43.491 161.425,43.917 161.298,44.343L155.86,43.128C155.831,41.545 155.12,40.256 153.99,40.004C152.543,39.681 150.971,41.176 150.481,43.344C149.99,45.512 150.766,47.531 152.214,47.855C153.318,48.101 154.49,47.287 155.203,45.927L160.735,47.163C160.56,48.758 160.626,50.344 160.916,51.882L155.702,53.781C154.815,52.467 153.514,51.766 152.427,52.162C151.034,52.669 150.528,54.772 151.298,56.858C152.068,58.944 153.821,60.224 155.215,59.717C156.277,59.33 156.818,58.015 156.676,56.488L161.702,54.658C162.404,56.494 163.431,58.199 164.756,59.681L161.169,64.449C159.703,63.829 158.228,63.947 157.535,64.868C156.646,66.05 157.378,68.085 159.17,69.415C160.961,70.746 163.134,70.867 164.022,69.686C164.699,68.786 164.43,67.39 163.473,66.188L166.871,61.671C168.113,62.639 169.516,63.446 171.065,64.04C171.149,64.072 171.233,64.092 171.317,64.122L170.388,69.337C168.798,69.438 167.534,70.203 167.333,71.336C167.074,72.788 168.65,74.279 170.852,74.666C173.054,75.053 175.049,74.19 175.308,72.738C175.505,71.632 174.632,70.506 173.233,69.86L174.12,64.881C176.128,65.235 178.142,65.191 180.076,64.814L181.863,70.208C180.51,71.045 179.762,72.313 180.123,73.406C180.587,74.806 182.686,75.378 184.81,74.684C186.934,73.99 188.281,72.291 187.817,70.891C187.463,69.823 186.158,69.242 184.618,69.331L182.856,64.01C184.546,63.357 186.133,62.442 187.527,61.266L191.515,65.235C190.687,66.587 190.592,68.054 191.41,68.868C192.458,69.912 194.591,69.484 196.175,67.915C197.757,66.345 198.19,64.226 197.142,63.183C196.343,62.388 194.914,62.451 193.579,63.22L189.548,59.209C190.518,58.038 191.328,56.71 191.953,55.248L197.133,56.721Z\"\n        android:fillColor=\"#9EBD63\"\n        android:fillType=\"evenOdd\"/>\n    <path\n        android:pathData=\"M180.622,58.791L176.874,58.816L176.776,44.783C175.415,46.064 173.808,47.016 171.954,47.639L171.93,44.259C172.906,43.935 173.965,43.325 175.106,42.429C176.247,41.533 177.026,40.492 177.445,39.305L180.486,39.284L180.622,58.791Z\"\n        android:fillColor=\"#FFF\"\n        android:fillType=\"evenOdd\"/>\n  </group>\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_contacts.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"24dp\"\n    android:height=\"24dp\"\n    android:viewportWidth=\"24\"\n    android:viewportHeight=\"24\"\n    android:tint=\"?attr/colorControlNormal\">\n  <path\n      android:fillColor=\"@android:color/white\"\n      android:pathData=\"M6.62,10.79c1.44,2.83 3.76,5.14 6.59,6.59l2.2,-2.2c0.27,-0.27 0.67,-0.36 1.02,-0.24 1.12,0.37 2.33,0.57 3.57,0.57 0.55,0 1,0.45 1,1V20c0,0.55 -0.45,1 -1,1 -9.39,0 -17,-7.61 -17,-17 0,-0.55 0.45,-1 1,-1h3.5c0.55,0 1,0.45 1,1 0,1.25 0.2,2.45 0.57,3.57 0.11,0.35 0.03,0.74 -0.25,1.02l-2.2,2.2z\"/>\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_control.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:aapt=\"http://schemas.android.com/aapt\"\n    android:width=\"316dp\"\n    android:height=\"198dp\"\n    android:viewportWidth=\"316\"\n    android:viewportHeight=\"198\">\n  <path\n      android:pathData=\"M125.136,173.276C97.191,161.148 79.124,172.529 60.854,147.609C42.584,122.688 50.879,87.464 50.879,65.025C50.879,9.234 151.735,24.85 192.743,78.417C233.751,131.985 267,85.122 267,140.913C264.783,188.9 189.418,201.176 125.136,173.276Z\"\n      android:fillType=\"evenOdd\">\n    <aapt:attr name=\"android:fillColor\">\n      <gradient \n          android:gradientRadius=\"239.27492\"\n          android:centerX=\"61.215107\"\n          android:centerY=\"32.165432\"\n          android:type=\"radial\">\n        <item android:offset=\"0\" android:color=\"#FFFFFFFF\"/>\n        <item android:offset=\"1\" android:color=\"#FFC9E2F4\"/>\n      </gradient>\n    </aapt:attr>\n  </path>\n  <group>\n    <clip-path\n        android:pathData=\"M125.136,173.269C97.191,161.135 79.124,172.522 60.854,147.59C42.584,122.657 50.879,87.417 50.879,64.967C50.879,9.15 145.085,-44.451 186.093,9.142C227.101,62.734 267,85.073 267,140.89C264.783,188.901 189.418,201.182 125.136,173.269Z\"/>\n    <path\n        android:pathData=\"M172.408,122.738L127.293,123.959C126.389,123.982 125.637,123.27 125.613,122.367L123.001,25.859C122.976,24.956 123.689,24.204 124.592,24.18L169.707,22.959C170.61,22.935 171.363,23.647 171.388,24.551L173.999,121.058C174.024,121.961 173.311,122.713 172.408,122.738\"\n        android:fillColor=\"#334176\"\n        android:fillType=\"evenOdd\"/>\n    <path\n        android:pathData=\"M176,113.65l-50.602,1.309l-2.398,-84.692l50.602,-1.308z\"\n        android:fillColor=\"#FFFDFF\"\n        android:fillType=\"evenOdd\"/>\n    <path\n        android:pathData=\"M167.125,84.952L130.251,85.957C128.052,86.018 126.221,84.269 126.162,82.053L126.001,76.088C125.942,73.872 127.676,72.026 129.875,71.966L166.749,70.96C168.948,70.9 170.779,72.649 170.839,74.865L170.999,80.83C171.058,83.046 169.324,84.892 167.125,84.952\"\n        android:fillColor=\"#E1E3EC\"\n        android:fillType=\"evenOdd\"/>\n    <path\n        android:pathData=\"M130.251,66.957C128.052,67.018 126.221,65.269 126.162,63.053L126.001,57.088C125.942,54.872 127.676,53.026 129.875,52.966L166.749,51.96C168.948,51.9 170.779,53.649 170.839,55.865L170.999,61.83C171.058,64.046 169.324,65.892 167.125,65.952L130.251,66.957Z\"\n        android:fillColor=\"#E0F2F5\"\n        android:fillType=\"evenOdd\"/>\n    <path\n        android:pathData=\"M130.062,49.957C127.961,50.018 126.212,48.269 126.155,46.053L126.001,40.088C125.945,37.872 127.602,36.026 129.703,35.966L164.938,34.96C167.039,34.9 168.788,36.649 168.846,38.865L168.999,44.83C169.055,47.046 167.398,48.892 165.297,48.952L130.062,49.957Z\"\n        android:fillColor=\"#E9DBF0\"\n        android:fillType=\"evenOdd\"/>\n    <path\n        android:pathData=\"M168,79.327l-2.014,-1.908l1.908,-2.014l-1.527,-1.446l-1.908,2.014l-2.013,-1.908l-1.446,1.527l2.013,1.907l-1.908,2.014l1.527,1.446l1.908,-2.014l2.014,1.908z\"\n        android:fillColor=\"#A1A9CD\"\n        android:fillType=\"evenOdd\"/>\n    <path\n        android:pathData=\"M158,79.327l-2.014,-1.909l1.907,-2.014l-1.526,-1.445l-1.908,2.013l-2.013,-1.907l-1.446,1.527l2.013,1.907l-1.908,2.013l1.527,1.447l1.908,-2.014l2.014,1.908z\"\n        android:fillColor=\"#A1A9CD\"\n        android:fillType=\"evenOdd\"/>\n    <path\n        android:pathData=\"M137,80.327l-2.014,-1.909l1.908,-2.014l-1.527,-1.445l-1.908,2.013l-2.013,-1.907l-1.446,1.527l2.013,1.907l-1.907,2.013l1.526,1.447l1.908,-2.014l2.014,1.908z\"\n        android:fillColor=\"#A1A9CD\"\n        android:fillType=\"evenOdd\"/>\n    <path\n        android:pathData=\"M137,62.327l-2.014,-1.909l1.908,-2.014l-1.527,-1.445l-1.908,2.013l-2.013,-1.907l-1.446,1.527l2.013,1.907l-1.907,2.013l1.526,1.447l1.908,-2.014l2.014,1.908z\"\n        android:fillColor=\"#3AB4CD\"\n        android:fillType=\"evenOdd\"/>\n    <path\n        android:pathData=\"M146,45.327l-2.014,-1.909l1.908,-2.014l-1.527,-1.445l-1.908,2.013l-2.013,-1.907l-1.446,1.527l2.013,1.907l-1.907,2.013l1.526,1.447l1.908,-2.014l2.014,1.908z\"\n        android:fillColor=\"#B78BCD\"\n        android:fillType=\"evenOdd\"/>\n    <path\n        android:pathData=\"M169,60.327l-2.014,-1.909l1.908,-2.014l-1.527,-1.445l-1.908,2.013l-2.013,-1.907l-1.446,1.527l2.013,1.907l-1.907,2.013l1.526,1.447l1.908,-2.014l2.014,1.908z\"\n        android:fillColor=\"#3AB4CD\"\n        android:fillType=\"evenOdd\"/>\n    <path\n        android:pathData=\"M145.48,78.844l2.52,-0.065l-0.052,-1.82l-2.519,0.065l-1.911,0.049l-2.518,0.065l0.052,1.821l2.518,-0.066z\"\n        android:fillColor=\"#A1A9CD\"\n        android:fillType=\"evenOdd\"/>\n    <path\n        android:pathData=\"M143.48,60.844l2.52,-0.065l-0.052,-1.82l-2.519,0.065l-1.911,0.049l-2.518,0.065l0.052,1.821l2.518,-0.066z\"\n        android:fillColor=\"#3AB4CD\"\n        android:fillType=\"evenOdd\"/>\n    <path\n        android:pathData=\"M133.48,43.844l2.52,-0.065l-0.052,-1.82l-2.519,0.065l-1.911,0.049l-2.518,0.065l0.052,1.821l2.518,-0.066z\"\n        android:fillColor=\"#B78BCD\"\n        android:fillType=\"evenOdd\"/>\n    <path\n        android:pathData=\"M154.48,43.844l2.52,-0.065l-0.052,-1.82l-2.519,0.065l-1.911,0.049l-2.518,0.065l0.052,1.821l2.518,-0.066z\"\n        android:fillColor=\"#B78BCD\"\n        android:fillType=\"evenOdd\"/>\n    <path\n        android:pathData=\"M165.48,43.844l2.52,-0.065l-0.052,-1.82l-2.519,0.065l-1.911,0.049l-2.518,0.065l0.052,1.821l2.518,-0.066z\"\n        android:fillColor=\"#B78BCD\"\n        android:fillType=\"evenOdd\"/>\n    <path\n        android:pathData=\"M155.48,60.844l2.52,-0.065l-0.052,-1.82l-2.519,0.065l-1.911,0.049l-2.518,0.065l0.052,1.821l2.518,-0.066z\"\n        android:fillColor=\"#3AB4CD\"\n        android:fillType=\"evenOdd\"/>\n    <path\n        android:pathData=\"M146.016,194.215C132.656,194.715 119.264,194.802 105.948,195.881 98.857,196.456 98.992,193.862 99.001,187.045 99.004,185.564 101.62,175.983 102.334,172.176 104.092,166.716 105.409,161.12 107.151,155.659 108.136,152.569 109.022,149.379 112.263,147.823 126.024,145.443 138.639,147.764 149.455,157.474 152.724,165.032 149.804,172.664 149.712,180.267 149.505,185.204 149.879,190.307 146.016,194.215M175.174,192.392C175.116,186.104 175.058,179.816 175,173.528 175.987,170.837 178.395,169.928 180.776,169.529 190.238,167.948 199.734,166.801 209.143,169.97 209.96,170.393 208.441,170.787 210.521,171.946 210.486,175.77 212.747,178.936 213.77,182.554 216.529,192.314 215.134,192.606 204.541,192.958 197.071,193.206 189.602,193.541 182.131,193.649 179.79,193.683 177.114,194.859 175.174,192.392\"\n        android:fillColor=\"#B9417E\"\n        android:fillType=\"evenOdd\"/>\n    <path\n        android:pathData=\"M112.135,149.76C108.283,141.86 115.168,142.865 118.909,141.263C128.471,138.659 137.252,139.637 144.622,147.093C150.187,149.261 151.611,152.791 148.058,157.959C136.752,152.18 124.92,148.799 112.135,149.76\"\n        android:fillColor=\"#2D2F62\"\n        android:fillType=\"evenOdd\"/>\n    <path\n        android:pathData=\"M170.431,81.053C172.036,77.181 174.975,70.776 178.189,72.148C181.597,73.602 180.726,78.637 180.631,81.543C180.378,89.332 178.313,96.511 180.062,104.34C180.838,107.811 183.428,108.795 187.326,108.954C192.247,109.155 197.195,110.145 202.008,111.317C212.3,113.822 214.982,117.184 215.845,127.986C216.587,137.267 214.632,146.051 210.539,154.321C209.073,157.283 207.698,160.194 207.573,163.561C206.215,164.78 204.566,165.399 202.825,165.176C195.473,164.235 188.179,164.335 180.902,165.872C179.427,166.184 177.997,165.628 176.827,164.585C176.097,159.698 173.938,155.896 170.04,152.601C161.58,145.454 157.246,135.526 153.628,125.266C153.029,124.214 152.852,123.097 153.125,121.909C153.692,120.286 154.87,119.434 156.503,119.15C158.427,118.96 160.165,119.571 161.844,120.438C162.765,120.918 165.343,123.244 166.004,123.451C166.218,123.519 166.351,122.865 166.112,122.288C165.841,121.37 165.278,111.133 165.265,110.068C165.847,101.657 167.857,87.261 170.431,81.053\"\n        android:fillColor=\"#E0A16F\"\n        android:fillType=\"evenOdd\"/>\n    <path\n        android:pathData=\"M144.86,145.959C136.536,142.641 127.89,140.796 118.994,140.118C119.364,132.018 119.56,124.099 118.217,116.237C115.52,100.445 117.662,91.172 121.16,75.921C121.288,75.362 123.289,70.489 123.641,69.984C124.321,69.009 125.185,68.122 125.199,70.354C125.217,73.425 125.471,73.654 125.581,77.026C125.791,83.457 125.503,90.619 126.586,96.98C126.597,97.047 129.298,95.669 129.412,95.564C129.771,95.232 130.032,94.799 130.302,94.332C133.425,89.784 136.079,84.933 139.792,80.88C141.827,78.658 144.118,76.337 147.455,77.781C150.534,79.113 148.176,82.787 146.894,85.622C145.014,89.775 142.779,93.947 140.512,98.188C138.719,101.544 137.358,103.817 136.777,109.824C135.33,115.906 137.324,118.629 137.33,123.233C140.805,122.922 149.297,122.691 152.22,122.394C152.934,122.537 153.519,122.901 154,123.447C153.48,132.011 147.375,138.232 144.86,145.959\"\n        android:fillColor=\"#E0A16F\"\n        android:fillType=\"evenOdd\"/>\n    <path\n        android:pathData=\"M177.501,165.32C187.475,162.136 197.568,162.55 207.703,164.339C211.021,166.379 209.781,169.55 209.739,172.426C197.993,170.636 186.317,170.412 174.811,173.959C170.983,169.638 173.869,167.365 177.501,165.32\"\n        android:fillColor=\"#2E2F61\"\n        android:fillType=\"evenOdd\"/>\n  </group>\n  <path\n      android:pathData=\"M174.632,67C166.551,67 160,73.551 160,81.632C160,89.713 166.551,96.264 174.632,96.264C182.713,96.264 189.264,89.713 189.264,81.632C189.264,73.551 182.713,67 174.632,67ZM174.632,69.491C181.338,69.491 186.774,74.927 186.774,81.632C186.774,88.338 181.338,93.774 174.632,93.774C167.926,93.774 162.491,88.338 162.491,81.632C162.491,74.927 167.926,69.491 174.632,69.491Z\"\n      android:fillColor=\"#9EBD63\"\n      android:fillType=\"nonZero\"/>\n  <path\n      android:pathData=\"M174.632,69.491C181.338,69.491 186.774,74.927 186.774,81.632C186.774,88.338 181.338,93.774 174.632,93.774C167.926,93.774 162.491,88.338 162.491,81.632C162.491,74.927 167.926,69.491 174.632,69.491Z\"\n      android:fillColor=\"#D5E9F7\"\n      android:fillAlpha=\"0.3\"\n      android:fillType=\"nonZero\"/>\n  <path\n      android:pathData=\"M182.314,92.279L184.249,90.711L194.134,102.479C194.569,102.997 194.502,103.768 193.984,104.203C193.979,104.207 193.973,104.212 193.967,104.217C193.43,104.652 192.643,104.576 192.199,104.047L182.314,92.279L182.314,92.279Z\"\n      android:fillColor=\"#9EBD63\"\n      android:fillType=\"evenOdd\"/>\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_cured.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"24dp\"\n    android:height=\"24dp\"\n    android:viewportWidth=\"24\"\n    android:viewportHeight=\"24\">\n  <path\n      android:pathData=\"M12,2C12.6497,2 13.1765,2.5267 13.1765,3.1765C13.1765,3.6118 12.94,3.9919 12.5885,4.1954L12.5884,5.5558C13.3413,5.6237 14.057,5.8205 14.7133,6.1241L15.4245,4.8917C15.3412,4.7303 15.2941,4.5471 15.2941,4.3529C15.2941,3.7032 15.8208,3.1765 16.4706,3.1765C17.1203,3.1765 17.6471,3.7032 17.6471,4.3529C17.6471,5.0027 17.1203,5.5294 16.4706,5.5294L16.4162,5.5262L15.7314,6.713C16.3341,7.1392 16.8608,7.6659 17.287,8.2686L18.4731,7.5831L18.4754,7.54C18.5295,6.9404 19.0334,6.4706 19.6471,6.4706C20.2968,6.4706 20.8235,6.9973 20.8235,7.6471C20.8235,8.2968 20.2968,8.8235 19.6471,8.8235C19.4108,8.8235 19.1908,8.7539 19.0065,8.634L17.8759,9.2867C18.1795,9.943 18.3763,10.6587 18.4442,11.4116L19.8046,11.4115C20.0081,11.06 20.3882,10.8235 20.8235,10.8235C21.4733,10.8235 22,11.3503 22,12C22,12.6497 21.4733,13.1765 20.8235,13.1765C20.3882,13.1765 20.0081,12.94 19.8046,12.5885L18.4442,12.5884C18.3763,13.3413 18.1795,14.057 17.8759,14.7133L19.0065,15.366C19.1908,15.2461 19.4108,15.1765 19.6471,15.1765C20.2968,15.1765 20.8235,15.7032 20.8235,16.3529C20.8235,17.0027 20.2968,17.5294 19.6471,17.5294C18.9973,17.5294 18.4706,17.0027 18.4706,16.3529L18.4731,16.4162L17.287,15.7314C16.8608,16.3341 16.3341,16.8608 15.7314,17.287L16.4162,18.4731L16.4706,18.4706C17.0842,18.4706 17.5882,18.9404 17.6423,19.54L17.6471,19.6471C17.6471,20.2968 17.1203,20.8235 16.4706,20.8235C15.8208,20.8235 15.2941,20.2968 15.2941,19.6471C15.2941,19.4529 15.3412,19.2697 15.4245,19.1083L14.7133,17.8759C14.057,18.1795 13.3413,18.3763 12.5884,18.4442L12.5885,19.8046C12.94,20.0081 13.1765,20.3882 13.1765,20.8235C13.1765,21.4733 12.6497,22 12,22C11.3503,22 10.8235,21.4733 10.8235,20.8235C10.8235,20.3882 11.06,20.0081 11.4115,19.8046L11.4116,18.4442C10.6587,18.3763 9.943,18.1795 9.2867,17.8759L8.5755,19.1083C8.6588,19.2697 8.7059,19.4529 8.7059,19.6471C8.7059,20.2968 8.1792,20.8235 7.5294,20.8235C6.8797,20.8235 6.3529,20.2968 6.3529,19.6471C6.3529,18.9973 6.8797,18.4706 7.5294,18.4706C7.5476,18.4706 7.5657,18.471 7.5837,18.4718L8.2686,17.287C7.6659,16.8608 7.1392,16.3341 6.713,15.7314L5.5277,16.4167C5.4946,17.0368 4.9813,17.5294 4.3529,17.5294C3.7032,17.5294 3.1765,17.0027 3.1765,16.3529C3.1765,15.7032 3.7032,15.1765 4.3529,15.1765C4.5892,15.1765 4.8092,15.2461 4.9935,15.366L6.1241,14.7133C5.8205,14.057 5.6237,13.3413 5.5558,12.5884L4.1954,12.5885C3.9919,12.94 3.6118,13.1765 3.1765,13.1765C2.5267,13.1765 2,12.6497 2,12C2,11.3503 2.5267,10.8235 3.1765,10.8235C3.6118,10.8235 3.9919,11.06 4.1954,11.4115L5.5558,11.4116C5.6237,10.6587 5.8205,9.943 6.1241,9.2867L4.9935,8.634C4.8092,8.7539 4.5892,8.8235 4.3529,8.8235C3.7032,8.8235 3.1765,8.2968 3.1765,7.6471C3.1765,6.9973 3.7032,6.4706 4.3529,6.4706C4.9813,6.4706 5.4946,6.9632 5.5277,7.5833L6.713,8.2686C7.1392,7.6659 7.6659,7.1392 8.2686,6.713L7.5837,5.5282C7.5657,5.529 7.5476,5.5294 7.5294,5.5294C6.8797,5.5294 6.3529,5.0027 6.3529,4.3529C6.3529,3.7032 6.8797,3.1765 7.5294,3.1765C8.1792,3.1765 8.7059,3.7032 8.7059,4.3529C8.7059,4.5471 8.6588,4.7303 8.5755,4.8917L9.2867,6.1241C9.943,5.8205 10.6587,5.6237 11.4116,5.5558L11.4115,4.1954C11.06,3.9919 10.8235,3.6118 10.8235,3.1765C10.8235,2.5267 11.3503,2 12,2ZM14.6041,8.0728L15.9312,9.4L13.3315,12L15.9312,14.6L14.6041,15.9272L12.0038,13.3269L9.4041,15.9272L8.0769,14.6L10.6769,12L8.0769,9.4L9.4041,8.0728L12.0038,10.6723L14.6041,8.0728Z\"\n      android:fillColor=\"#757575\"\n      android:fillType=\"evenOdd\"/>\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_data.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"24dp\"\n    android:height=\"24dp\"\n    android:viewportWidth=\"24\"\n    android:viewportHeight=\"24\"\n    android:tint=\"?attr/colorControlNormal\">\n  <path\n      android:fillColor=\"@android:color/white\"\n      android:pathData=\"M19,3h-4.18C14.4,1.84 13.3,1 12,1c-1.3,0 -2.4,0.84 -2.82,2L5,3c-1.1,0 -2,0.9 -2,2v14c0,1.1 0.9,2 2,2h14c1.1,0 2,-0.9 2,-2L21,5c0,-1.1 -0.9,-2 -2,-2zM12,3c0.55,0 1,0.45 1,1s-0.45,1 -1,1 -1,-0.45 -1,-1 0.45,-1 1,-1zM14,17L7,17v-2h7v2zM17,13L7,13v-2h10v2zM17,9L7,9L7,7h10v2z\"/>\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_death_toll.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"24dp\"\n    android:height=\"24dp\"\n    android:viewportWidth=\"24\"\n    android:viewportHeight=\"24\">\n  <path\n      android:pathData=\"M13.5714,2C13.9659,2 14.2857,2.3198 14.2857,2.7143V6.2857H18.5714C18.9659,6.2857 19.2857,6.6055 19.2857,7V9.8571C19.2857,10.2516 18.9659,10.5714 18.5714,10.5714H14.2857V21.2857C14.2857,21.6802 13.9659,22 13.5714,22H10.7143C10.3198,22 10,21.6802 10,21.2857V10.5707L5.7143,10.5714C5.3198,10.5714 5,10.2516 5,9.8571V7C5,6.6055 5.3198,6.2857 5.7143,6.2857L10,6.285V2.7143C10,2.3198 10.3198,2 10.7143,2H13.5714Z\"\n      android:fillColor=\"#757575\"\n      android:fillType=\"evenOdd\"/>\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_encounter.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:aapt=\"http://schemas.android.com/aapt\"\n    android:width=\"316dp\"\n    android:height=\"198dp\"\n    android:viewportWidth=\"316\"\n    android:viewportHeight=\"198\">\n  <path\n      android:pathData=\"M22,131C22,81.244 61.423,106.121 76,76C90.577,45.879 98.528,8.663 210,56C283,87 293,94.244 293,144C293,193.756 176.756,189 127,189C77.244,189 22,180.756 22,131Z\"\n      android:fillType=\"evenOdd\">\n    <aapt:attr name=\"android:fillColor\">\n      <gradient \n          android:gradientRadius=\"199.03261\"\n          android:centerX=\"89.56753\"\n          android:centerY=\"-3.801174\"\n          android:type=\"radial\">\n        <item android:offset=\"0\" android:color=\"#FFFFFFFF\"/>\n        <item android:offset=\"1\" android:color=\"#FFC9E2F4\"/>\n      </gradient>\n    </aapt:attr>\n  </path>\n  <group>\n    <clip-path\n        android:pathData=\"M22,131C22,81.244 66.265,24.85 72,13C86.577,-17.121 167.293,13 203,13C252.756,13 293,94.244 293,144C293,193.756 176.756,189 127,189C77.244,189 22,180.756 22,131Z\"/>\n    <path\n        android:pathData=\"M95.142,96.727L70.269,81.903C69.546,81.472 69.308,80.535 69.74,79.811L101.979,25.715C102.411,24.991 103.348,24.754 104.072,25.185L128.945,40.009C129.669,40.441 129.906,41.377 129.475,42.102L97.235,96.197C96.804,96.921 95.866,97.158 95.142,96.727\"\n        android:fillColor=\"#334176\"\n        android:fillType=\"evenOdd\"/>\n    <path\n        android:pathData=\"M99.488,92.416l-27.495,-16.386l28.702,-48.16l27.495,16.386z\"\n        android:fillColor=\"#FFFDFF\"\n        android:fillType=\"evenOdd\"/>\n    <path\n        android:pathData=\"M108.028,68.488L88.976,57.134C87.205,56.078 86.626,53.788 87.681,52.018L88.558,50.546C89.613,48.776 91.903,48.196 93.673,49.251L112.726,60.606C114.496,61.661 115.076,63.951 114.021,65.722L113.144,67.193C112.089,68.963 109.798,69.543 108.028,68.488\"\n        android:fillColor=\"#E0F2F5\"\n        android:fillType=\"evenOdd\"/>\n    <path\n        android:pathData=\"M110.993,66.427l-0.458,-1.812l1.812,-0.459l-0.348,-1.373l-1.812,0.459l-0.458,-1.812l-1.374,0.348l0.458,1.811l-1.811,0.459l0.347,1.373l1.813,-0.459l0.458,1.813z\"\n        android:fillColor=\"#3AB4CD\"\n        android:fillType=\"evenOdd\"/>\n    <path\n        android:pathData=\"M93.041,55.728l-0.458,-1.812l1.811,-0.459l-0.347,-1.374l-1.813,0.459l-0.458,-1.811l-1.373,0.348l0.458,1.811l-1.812,0.459l0.348,1.373l1.812,-0.459l0.459,1.813z\"\n        android:fillColor=\"#3AB4CD\"\n        android:fillType=\"evenOdd\"/>\n    <path\n        android:pathData=\"M98.251,58.185l1.606,0.957l0.725,-1.217l-1.606,-0.957l-1.217,-0.726l-1.605,-0.956l-0.725,1.217l1.605,0.957z\"\n        android:fillColor=\"#3AB4CD\"\n        android:fillType=\"evenOdd\"/>\n    <path\n        android:pathData=\"M104.239,61.714l1.606,0.957l0.725,-1.217l-1.606,-0.957l-1.217,-0.726l-1.605,-0.956l-0.725,1.217l1.605,0.957z\"\n        android:fillColor=\"#3AB4CD\"\n        android:fillType=\"evenOdd\"/>\n    <path\n        android:pathData=\"M56.921,144.714C59.205,139.176 60.78,133.432 61.89,127.554C61.964,119.624 65.253,112.543 67.887,105.315C69.057,102.106 71.914,100.915 75.205,100.749C81.469,101.165 87.526,102.326 92.93,105.789C95.143,107.847 95.014,110.278 94.522,113.068C90.939,133.408 84.524,152.841 76.277,171.727C73.439,178.226 69.881,184.435 68.138,191.391C60.968,193.53 53.625,192.274 46.366,192.363C42.457,192.411 43.943,189.525 44.527,187.494C48.635,173.227 52.785,158.972 56.921,144.714\"\n        android:fillColor=\"#C4CAE2\"\n        android:fillType=\"evenOdd\"/>\n    <path\n        android:pathData=\"M68.138,191.391C63.524,189.885 66.958,187.408 67.749,185.797C78.513,163.867 86.742,141.041 91.921,117.17C92.602,114.034 94.872,110.71 92.567,107.27C92.948,105.449 93.836,104.666 95.647,105.76C98.863,109.55 98.645,114.197 98.277,118.595C96.833,135.843 95.06,153.062 92.112,170.135C91.972,170.946 87.25,187.628 84.871,188.192C79.338,189.501 73.861,191.083 68.138,191.391\"\n        android:fillColor=\"#99A3C9\"\n        android:fillType=\"evenOdd\"/>\n    <path\n        android:pathData=\"M75.235,101.823C77.694,98.03 76.1,94.547 74.681,90.881 73.82,88.656 73.774,86.116 73.362,83.718 74.775,82.835 76.058,83.408 77.342,84.056 79.657,85.41 81.279,88.111 84.481,87.691 85.763,87.325 86.767,86.427 87.947,85.864 91.061,84.632 93.299,83.406 96.603,82.757 99.712,82.145 103.095,81.668 104.931,79.033 106.392,76.936 107.319,75.094 109.863,73.382 111.378,72.362 113.817,71.699 115.216,73.466 116.451,75.024 115.154,76.532 114.614,78.017 111.594,86.327 106.378,92.941 98.949,97.668 95.847,99.641 94.377,102.128 94.679,105.738 93.974,106.252 93.269,106.76 92.566,107.27 87.212,104.108 80.966,103.787 75.235,101.823M89.564,42.42C89.822,43.246 90.247,44.179 90.409,45.138 89.125,47.174 87.365,50.289 86.177,52.174 84.871,49.404 84.607,47.918 84.141,46.057 83.552,43.707 82.622,40.894 85.484,39.622 88.157,38.434 88.932,40.399 89.564,42.42M82.64,61.095C82.339,64.229 83.683,68.616 77.782,67.483 76.957,67.361 76.401,66.932 76.203,66.095 74.391,61.966 74.24,58.755 80.169,58.9 82.199,58.271 82.717,59.347 82.64,61.095\"\n        android:fillColor=\"#7C522D\"\n        android:fillType=\"evenOdd\"/>\n    <path\n        android:pathData=\"M80.169,58.9C79.919,55.251 80.686,52.734 85.491,53.372 88.654,57.152 88.672,61.034 82.64,61.095 81.816,60.363 80.993,59.632 80.169,58.9zM76.203,66.095C76.73,66.558 77.255,67.02 77.782,67.483 78.131,68.35 78.479,69.217 78.828,70.083 77.422,76.622 74.03,72.663 73.078,70.813 71.59,67.919 72.327,65.714 76.203,66.095\"\n        android:fillColor=\"#7C522D\"\n        android:fillType=\"evenOdd\"/>\n    <path\n        android:pathData=\"M256.445,97.032L229.314,107.146C228.524,107.441 227.645,107.039 227.35,106.249L205.354,47.242C205.059,46.452 205.461,45.573 206.25,45.279L233.382,35.165C234.172,34.87 235.051,35.272 235.345,36.061L257.342,95.069C257.636,95.859 257.235,96.738 256.445,97.032\"\n        android:fillColor=\"#242C53\"\n        android:fillType=\"evenOdd\"/>\n    <path\n        android:pathData=\"M255.805,90.945l-29.992,11.18l-19.583,-52.533l29.991,-11.18z\"\n        android:fillColor=\"#FFFDFF\"\n        android:fillType=\"evenOdd\"/>\n    <path\n        android:pathData=\"M221.738,75.232C219.807,75.952 217.658,74.97 216.938,73.039L216.483,71.817C215.764,69.886 216.745,67.737 218.676,67.018L238.219,59.733C240.15,59.012 242.299,59.994 243.018,61.925L243.474,63.147C244.194,65.078 243.212,67.227 241.281,67.946L221.738,75.232Z\"\n        android:fillColor=\"#E9DBF0\"\n        android:fillType=\"evenOdd\"/>\n    <path\n        android:pathData=\"M229.272,69.093l-1.624,-0.742l0.741,-1.624l-1.23,-0.563l-0.742,1.625l-1.624,-0.742l-0.562,1.231l1.623,0.741l-0.742,1.624l1.231,0.563l0.742,-1.624l1.625,0.742z\"\n        android:fillColor=\"#B78BCD\"\n        android:fillType=\"evenOdd\"/>\n    <path\n        android:pathData=\"M221.859,71.231l1.674,-0.624l-0.474,-1.268l-1.673,0.624l-1.268,0.473l-1.673,0.623l0.473,1.268l1.673,-0.623z\"\n        android:fillColor=\"#B78BCD\"\n        android:fillType=\"evenOdd\"/>\n    <path\n        android:pathData=\"M233.324,66.957l1.674,-0.624l-0.473,-1.268l-1.674,0.624l-1.268,0.473l-1.673,0.624l0.473,1.267l1.673,-0.623z\"\n        android:fillColor=\"#B78BCD\"\n        android:fillType=\"evenOdd\"/>\n    <path\n        android:pathData=\"M238.909,64.875l1.673,-0.623l-0.473,-1.269l-1.673,0.624l-1.268,0.473l-1.673,0.624l0.473,1.267l1.672,-0.623z\"\n        android:fillColor=\"#B78BCD\"\n        android:fillType=\"evenOdd\"/>\n    <path\n        android:pathData=\"M285.598,116.541C289.258,121.054 292.918,125.566 296.577,130.078C297.281,131.529 297.832,132.966 297.829,134.668C297.791,152.076 297.833,169.484 297.818,186.892C297.817,188.001 298.213,189.399 296.579,189.886C294.102,187.429 294.337,184.188 294.709,181.281C296.119,170.273 292.263,161.569 285.335,153.021C277.362,143.182 269.616,132.893 265.288,120.647C267.554,113.242 273.897,111.477 280.301,109.787C283.925,110.574 284.66,113.638 285.598,116.541\"\n        android:fillColor=\"#3D539A\"\n        android:fillType=\"evenOdd\"/>\n    <path\n        android:pathData=\"M281.859,166.817C279.951,162.259 275.281,152.849 275.114,152.532C269.981,142.779 265.046,132.943 262.9,121.987C263.409,120.624 264.315,119.915 265.829,120.22C273.468,132.642 280.563,145.541 290.358,156.364C296.565,163.223 296.992,170.69 296.609,178.9C296.439,182.554 296.58,186.223 296.58,189.886C293.555,191.154 292.289,189.456 291.17,186.951C288.156,180.199 284.974,173.523 281.859,166.817\"\n        android:fillColor=\"#334A91\"\n        android:fillType=\"evenOdd\"/>\n    <path\n        android:pathData=\"M274.725,103.186C278.145,104.474 280.045,106.97 280.572,110.559C275.376,113.349 269.609,115.264 265.83,120.22C265.079,120.655 264.328,121.09 263.578,121.525C257.975,120.433 257.985,116.507 258.84,112.148C263.018,107.191 267.997,103.633 274.725,103.186\"\n        android:fillColor=\"#2B2F62\"\n        android:fillType=\"evenOdd\"/>\n    <path\n        android:pathData=\"M250.004,75.44C249.867,75.096 249.557,74.112 248.966,72.608C254.19,74.819 257.482,78.944 260.522,83.12C265.427,89.86 270.143,96.209 274.725,103.186C269.8,106.213 264.874,109.24 259.947,112.269C258.88,111.113 258.365,109.207 256.508,109.077C249.288,108.57 242.049,104.215 234.611,105.266C234.296,104.686 242.777,102.218 244.735,101.405C247.009,100.462 249.295,99.561 250.128,99.58C250.514,99.709 248.337,98.832 247.628,97.927C245.38,95.059 246.432,93.698 246.73,92.607C247.899,88.315 243.023,87.558 239.988,88.887C238.497,89.54 237.096,90.364 235.549,89.582C234.192,88.673 234.376,87.984 234.523,86.341C234.817,84.794 237.366,82.556 238.574,81.75C240.662,80.512 243.139,79.259 245.554,79.651C251.398,80.596 253.714,84.771 250.004,75.44\"\n        android:fillColor=\"#E5B993\"\n        android:fillType=\"evenOdd\"/>\n    <path\n        android:pathData=\"M219.487,84.921C219.513,85.193 220.679,88.37 221.801,91.362C218.136,91.405 212.779,97.668 209.703,90.998C209.561,89.887 210.146,89.123 210.917,88.448C213.774,87.272 216.63,86.096 219.487,84.921\"\n        android:fillColor=\"#E3BA98\"\n        android:fillType=\"evenOdd\"/>\n    <path\n        android:pathData=\"M214.063,70.718C214.822,72.843 215.53,74.614 216.39,76.991C214.157,76.708 211.206,76.448 210.569,73.92C210.038,71.81 212.433,71.081 214.063,70.718\"\n        android:fillColor=\"#E0C0A7\"\n        android:fillType=\"evenOdd\"/>\n    <path\n        android:pathData=\"M222.725,93.812C223.66,96.443 224.372,98.214 225.229,100.493C225.028,100.536 224.978,100.575 224.781,100.624C222.361,101.227 219.377,103.559 217.733,100.301C215.929,96.725 220.28,95.173 222.725,93.812\"\n        android:fillColor=\"#E2BA9A\"\n        android:fillType=\"evenOdd\"/>\n    <path\n        android:pathData=\"M226.235,103.314C227.463,106.324 229.809,106.467 232.524,105.95C231.605,106.687 230.785,107.516 229.828,108.202C228.352,109.26 226.791,110.381 224.999,108.894C222.866,107.126 225.879,103.469 226.235,103.314\"\n        android:fillColor=\"#DFB99A\"\n        android:fillType=\"evenOdd\"/>\n    <path\n        android:pathData=\"M248.66,101.512C248.935,100.75 249.209,99.987 249.484,99.225C251.763,100.456 254.043,101.687 256.324,102.918C256.225,103.225 256.128,103.531 256.03,103.837C253.573,103.062 251.117,102.287 248.66,101.512\"\n        android:fillColor=\"#E1A779\"\n        android:fillType=\"evenOdd\"/>\n    <path\n        android:pathData=\"M166.548,142.954L133.588,142.97C132.746,142.97 132.061,142.287 132.061,141.444L132.028,70.209C132.027,69.366 132.71,68.682 133.553,68.682L166.513,68.666C167.356,68.666 168.04,69.349 168.04,70.192L168.074,141.427C168.074,142.27 167.391,142.954 166.548,142.954\"\n        android:fillColor=\"#334176\"\n        android:fillType=\"evenOdd\"/>\n    <path\n        android:pathData=\"M168.072,136.284l-36.013,0.017l-0.029,-63.079l36.012,-0.017z\"\n        android:fillColor=\"#E6235C\"\n        android:fillType=\"evenOdd\"/>\n    <path\n        android:pathData=\"M167.947,94.363L167.947,110.14C167.947,115.428 163.535,119.715 158.093,119.715L141.856,119.715C136.413,119.715 132.002,115.428 132.002,110.14L132.002,94.363C132.002,89.075 136.413,84.788 141.856,84.788L158.093,84.788C163.536,84.788 167.947,89.075 167.947,94.363\"\n        android:fillColor=\"#E6235C\"\n        android:fillType=\"evenOdd\"/>\n    <path\n        android:pathData=\"M165.001,136l3.237,-16.315l-0.137,-13.885l-6.739,-9.309l-22.921,12.74z\"\n        android:fillColor=\"#DE0051\"\n        android:fillType=\"evenOdd\"/>\n    <path\n        android:pathData=\"M149.974,91.307C144.603,91.307 139.966,94.121 139.918,94.15L139.918,101.602L139.918,104.96L139.918,109.055C139.965,109.083 144.575,111.869 149.898,111.896L149.975,112.264L160.03,109.055L160.03,104.961L160.03,94.15C159.985,94.122 155.329,91.307 149.974,91.307\"\n        android:fillColor=\"#BCE0E3\"\n        android:fillType=\"evenOdd\"/>\n    <path\n        android:pathData=\"M160.212,94.15L160.212,98.244L148.447,96.822L149.872,91.308C155.377,91.308 160.164,94.122 160.212,94.15\"\n        android:fillColor=\"#A1D6DA\"\n        android:fillType=\"evenOdd\"/>\n    <path\n        android:pathData=\"M160.211,104.961L160.211,109.055L149.873,112.264L148.447,105.646C148.447,105.646 160.139,104.982 160.211,104.961\"\n        android:fillColor=\"#BCE0E3\"\n        android:fillType=\"evenOdd\"/>\n    <path\n        android:pathData=\"M148.447,100.867L149.872,106.381C153.363,106.353 156.835,105.876 160.211,104.96L160.211,101.602C160.164,101.602 148.447,100.867 148.447,100.867\"\n        android:fillColor=\"#A1D6DA\"\n        android:fillType=\"evenOdd\"/>\n    <path\n        android:pathData=\"M160.212,98.244L160.212,101.602L148.447,101.602L149.872,96.822C153.363,96.851 156.836,97.329 160.212,98.244\"\n        android:fillColor=\"#BCE0E3\"\n        android:fillType=\"evenOdd\"/>\n    <path\n        android:pathData=\"M150.086,106.381L150.086,111.896C144.58,111.896 139.796,109.082 139.746,109.054L139.746,104.96L150.086,106.381Z\"\n        android:fillColor=\"#DDEFF1\"\n        android:fillType=\"evenOdd\"/>\n    <path\n        android:pathData=\"M150.086,91.308L150.086,96.823L139.748,98.244L139.748,94.15C142.933,92.388 146.473,91.415 150.086,91.308\"\n        android:fillColor=\"#BCE0E3\"\n        android:fillType=\"evenOdd\"/>\n    <path\n        android:pathData=\"M150.086,96.823L150.086,101.603L144.917,103.074L139.747,101.603L139.747,98.245C143.123,97.329 146.596,96.852 150.086,96.823\"\n        android:fillColor=\"#DDEFF1\"\n        android:fillType=\"evenOdd\"/>\n    <path\n        android:pathData=\"M139.747,101.602L139.747,104.96C143.123,105.875 146.596,106.352 150.087,106.381L150.087,101.601L139.747,101.602Z\"\n        android:fillColor=\"#BCE0E3\"\n        android:fillType=\"evenOdd\"/>\n    <path\n        android:pathData=\"M159.803,108.516C153.697,112.044 146.251,112.044 140.145,108.516L140.145,94.689C146.251,91.162 153.697,91.162 159.803,94.689L159.803,108.516ZM161.242,107.499L161.207,107.517L161.207,95.698L161.242,95.715C162.634,96.428 165.283,97.756 167.948,97.95L167.948,96.259C165.597,96.084 163.245,94.86 161.951,94.197C161.65,94.043 161.41,93.92 161.208,93.828L161.208,93.824L160.859,93.612C154.135,89.557 145.814,89.557 139.091,93.612L138.741,93.824L138.741,93.828C138.539,93.92 138.299,94.043 137.998,94.197C136.704,94.859 134.352,96.091 132.001,96.263L132.001,97.951C134.665,97.755 137.316,96.429 138.707,95.716L138.741,95.699L138.741,107.515L138.707,107.498C137.314,106.785 134.665,105.457 132.001,105.264L132.001,106.951C134.352,107.126 136.704,108.355 137.998,109.018C138.323,109.184 138.579,109.315 138.789,109.408L139.089,109.59C145.813,113.645 154.134,113.645 160.858,109.59L161.158,109.408C161.369,109.314 161.624,109.184 161.949,109.018C163.243,108.355 165.596,107.123 167.947,106.951L167.947,105.264C165.283,105.46 162.634,106.787 161.242,107.499L161.242,107.499Z\"\n        android:fillColor=\"#FFF\"\n        android:fillType=\"evenOdd\"/>\n    <path\n        android:pathData=\"M146.026,199.101C135.05,199.137 124.06,198.843 113.106,199.343 107.273,199.609 107.452,197.543 107.639,192.105 107.68,190.924 110.079,183.352 110.766,180.335 112.352,176.027 113.581,171.6 115.154,167.291 116.043,164.853 116.855,162.333 119.555,161.179 130.909,159.654 141.198,161.848 149.817,169.887 152.299,176.005 149.702,182.013 149.426,188.076 149.126,192.008 149.298,196.088 146.026,199.101M169.676,182.562C170.556,180.393 172.551,179.717 174.51,179.457 182.292,178.423 190.091,177.744 197.703,180.584 198.36,180.95 197.107,181.231 198.777,182.233 198.645,185.351 200.409,187.995 201.148,190.974 203.142,199.01 201.993,199.21 193.318,199.21 187.2,199.21 181.082,199.282 174.967,199.168 173.051,199.132 170.83,200.019 169.31,197.954 169.432,192.824 169.554,187.693 169.676,182.562z\"\n        android:fillColor=\"#B9417E\"\n        android:fillType=\"evenOdd\"/>\n    <path\n        android:pathData=\"M119.228,162.237C116.253,155.717 121.922,156.722 125.06,155.523C133.04,153.671 140.279,154.706 146.176,160.961C150.722,162.873 151.805,165.778 148.727,169.877C139.529,164.875 129.83,161.807 119.228,162.237\"\n        android:fillColor=\"#2D2F62\"\n        android:fillType=\"evenOdd\"/>\n    <path\n        android:pathData=\"M175.736,100.778C178.482,102.045 177.636,106.085 177.481,108.43C177.066,114.711 175.187,120.451 176.407,126.819C176.948,129.643 179.038,130.507 182.219,130.741C186.235,131.037 190.252,131.97 194.153,133.045C202.496,135.346 204.598,138.133 205.015,146.878C205.374,154.391 203.541,161.43 199.976,167.996C198.699,170.348 197.498,172.661 197.305,175.376C196.163,176.323 194.799,176.779 193.383,176.552C187.4,175.593 181.437,175.476 175.45,176.521C174.236,176.733 173.083,176.245 172.154,175.371C171.689,171.406 170.026,168.278 166.928,165.513C160.206,159.514 156.93,151.381 154.248,143C153.787,142.134 153.672,141.228 153.927,140.276C154.433,138.982 155.419,138.325 156.76,138.14C158.338,138.039 159.742,138.579 161.09,139.324C161.83,139.736 163.874,141.684 164.409,141.869C164.582,141.93 164.708,141.405 164.529,140.933C164.332,140.185 164.145,131.904 164.162,131.045C164.863,124.269 166.89,112.7 169.158,107.758C170.573,104.676 173.146,99.584 175.736,100.778Z\"\n        android:fillColor=\"#E0A16F\"\n        android:fillType=\"evenOdd\"/>\n    <path\n        android:pathData=\"M146.176,160.96C139.417,158.047 132.355,156.316 125.056,155.525C125.577,148.972 125.95,142.561 125.056,136.155C123.261,123.287 125.271,115.832 128.557,103.571C128.677,103.122 130.454,99.228 130.757,98.828C131.343,98.056 132.077,97.361 132.028,99.17C131.961,101.659 132.164,101.851 132.164,104.587C132.164,109.803 131.736,115.597 132.456,120.78C132.463,120.836 134.722,119.792 134.819,119.71C135.123,119.451 135.349,119.108 135.584,118.736C138.275,115.137 140.588,111.279 143.751,108.095C145.484,106.351 147.431,104.533 150.137,105.793C152.634,106.957 150.596,109.869 149.465,112.131C147.808,115.444 145.858,118.764 143.879,122.139C142.315,124.808 141.134,126.613 140.495,131.464C139.142,136.353 140.709,138.613 140.591,142.343C143.457,142.186 150.449,142.23 152.861,142.069C153.444,142.204 153.917,142.514 154.297,142.97C153.64,149.894 148.452,154.769 146.176,160.96\"\n        android:fillColor=\"#E0A16F\"\n        android:fillType=\"evenOdd\"/>\n    <path\n        android:pathData=\"M172.154,175.371C180.54,172.969 188.925,173.594 197.308,175.377C200.012,177.184 198.891,179.817 198.777,182.233C189.054,180.405 179.347,179.896 169.675,182.561C166.612,178.822 169.076,176.991 172.154,175.371\"\n        android:fillColor=\"#2E2F61\"\n        android:fillType=\"evenOdd\"/>\n  </group>\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_error.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"130dp\"\n    android:height=\"130dp\"\n    android:viewportWidth=\"500\"\n    android:viewportHeight=\"500\">\n  <path\n      android:pathData=\"M250.1,250m-224.2,0a224.2,224.2 0,1 1,448.4 0a224.2,224.2 0,1 1,-448.4 0\"\n      android:fillColor=\"#F2D3D4\"/>\n  <path\n      android:pathData=\"M250,0C111.9,0 0,111.9 0,250c0,138.1 111.9,250 250,250s250,-111.9 250,-250C500,111.9 388.1,0 250,0zM250,474.2C126.2,474.2 25.8,373.8 25.8,250S126.2,25.8 250,25.8S474.2,126.2 474.2,250S373.8,474.2 250,474.2z\"\n      android:fillColor=\"#F6E6E7\"/>\n  <path\n      android:pathData=\"M284.2,250l52.5,-52.5c9.4,-9.4 9.4,-24.7 0,-34.1c-9.4,-9.4 -24.7,-9.4 -34.1,0l-52.5,52.5l-52.5,-52.5c-9.4,-9.4 -24.7,-9.4 -34.1,0c-9.4,9.4 -9.4,24.7 0,34.1l52.5,52.5l-52.5,52.5c-9.4,9.4 -9.4,24.7 0,34.1c4.7,4.7 10.9,7.1 17.1,7.1c6.2,0 12.4,-2.4 17.1,-7.1l52.5,-52.5l52.5,52.5c4.7,4.7 10.9,7.1 17.1,7.1s12.4,-2.4 17.1,-7.1c9.4,-9.4 9.4,-24.7 0,-34.1L284.2,250z\"\n      android:fillColor=\"#DF6061\"/>\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_eval.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:aapt=\"http://schemas.android.com/aapt\"\n    android:width=\"316dp\"\n    android:height=\"199dp\"\n    android:viewportWidth=\"316\"\n    android:viewportHeight=\"199\">\n  <path\n      android:pathData=\"M146,183C95,160 67,211 32,166C-3,121 136,-41 175,47C214,135 224,33 277,105C330,177 197,206 146,183Z\"\n      android:fillType=\"evenOdd\">\n    <aapt:attr name=\"android:fillColor\">\n      <gradient \n          android:gradientRadius=\"277.73605\"\n          android:centerX=\"120.19271\"\n          android:centerY=\"-32.652966\"\n          android:type=\"radial\">\n        <item android:offset=\"0\" android:color=\"#FFFFFFFF\"/>\n        <item android:offset=\"1\" android:color=\"#FFC9E2F4\"/>\n      </gradient>\n    </aapt:attr>\n  </path>\n  <path\n      android:pathData=\"M115.003,106.19L41.426,106.275L41.426,106.275C39.534,106.275 38,104.743 38,102.853L38,29.697C38,27.807 39.534,26.275 41.426,26.275L115,26.275C116.657,26.275 118,27.618 118,29.275L118,103.19C118,104.845 116.659,106.188 115.003,106.19Z\"\n      android:fillColor=\"#334176\"\n      android:fillType=\"evenOdd\"/>\n  <path\n      android:pathData=\"M114.919,106.19L41.422,106.275L41.422,106.275C39.532,106.275 38,104.754 38,102.879L38,42.275L118,42.275L117.915,103.194C117.913,104.848 116.573,106.188 114.919,106.19Z\"\n      android:fillColor=\"#E8EFF5\"\n      android:fillType=\"evenOdd\"/>\n  <path\n      android:pathData=\"M101.296,83.081C101.222,84.946 101.972,86.512 103.287,86.885C104.973,87.364 106.929,85.709 107.656,83.19C108.383,80.672 107.606,78.243 105.92,77.764C104.635,77.4 103.197,78.279 102.262,79.831L96.228,78.119C96.732,75.94 96.85,73.741 96.591,71.606L102.811,70.434C103.591,72.132 104.971,73.196 106.315,72.942C108.038,72.618 109.034,70.268 108.54,67.694C108.046,65.121 106.25,63.298 104.527,63.622C103.214,63.87 102.329,65.297 102.198,67.1L95.874,68.292C95.345,66.581 94.576,64.953 93.591,63.451L98.687,58.88C100.246,59.927 101.982,60.123 102.997,59.213C104.297,58.047 103.914,55.526 102.141,53.584C100.368,51.641 97.877,51.012 96.576,52.178C95.585,53.067 95.578,54.742 96.414,56.349L91.473,60.781C89.574,58.778 87.224,57.142 84.472,56.075L86.762,50.198C88.629,50.439 90.269,49.838 90.762,48.573C91.394,46.952 89.908,44.872 87.443,43.928C84.978,42.984 82.467,43.533 81.835,45.155C81.354,46.391 82.108,47.889 83.583,48.952L81.174,55.134C78.684,54.644 76.179,54.658 73.779,55.122L71.907,48.936C73.531,47.992 74.456,46.521 74.063,45.221C73.559,43.556 71.099,42.817 68.567,43.57C66.036,44.322 64.393,46.282 64.896,47.947C65.28,49.216 66.803,49.942 68.626,49.885L70.495,56.063C67.867,57.072 65.462,58.63 63.486,60.683L59.107,56.657C60.023,55.027 60.068,53.294 59.065,52.372C57.779,51.19 55.28,51.789 53.484,53.709C51.687,55.63 51.272,58.146 52.558,59.328C53.538,60.229 55.221,60.089 56.763,59.124L61.355,63.345C60.608,64.468 59.963,65.68 59.454,66.986C59.261,67.483 59.105,67.985 58.956,68.487L52.53,67.055C52.495,65.189 51.655,63.669 50.321,63.371C48.61,62.991 46.753,64.753 46.174,67.309C45.594,69.865 46.511,72.246 48.222,72.628C49.526,72.918 50.911,71.958 51.754,70.355L58.29,71.812C58.082,73.692 58.161,75.563 58.504,77.376L52.343,79.616C51.295,78.066 49.758,77.239 48.473,77.706C46.827,78.304 46.23,80.783 47.14,83.243C48.049,85.702 50.121,87.212 51.767,86.613C53.022,86.157 53.662,84.606 53.495,82.807L59.432,80.649C60.261,82.813 61.475,84.824 63.04,86.572L58.803,92.193C57.07,91.462 55.328,91.601 54.509,92.687C53.459,94.079 54.324,96.48 56.44,98.048C58.557,99.617 61.124,99.76 62.174,98.367C62.974,97.306 62.656,95.661 61.524,94.243L65.539,88.918C67.007,90.059 68.665,91.01 70.495,91.711C70.594,91.749 70.694,91.772 70.793,91.808L69.695,97.956C67.816,98.075 66.323,98.977 66.085,100.313C65.779,102.024 67.641,103.782 70.243,104.239C72.845,104.695 75.202,103.678 75.508,101.966C75.741,100.661 74.71,99.334 73.056,98.573L74.104,92.703C76.477,93.119 78.857,93.068 81.142,92.624L83.253,98.983C81.655,99.97 80.77,101.465 81.198,102.753C81.746,104.404 84.225,105.079 86.735,104.26C89.245,103.442 90.836,101.439 90.288,99.788C89.87,98.529 88.329,97.844 86.508,97.949L84.426,91.676C86.424,90.905 88.298,89.826 89.945,88.44L94.658,93.119C93.679,94.713 93.567,96.443 94.533,97.403C95.772,98.633 98.293,98.13 100.163,96.279C102.033,94.428 102.545,91.931 101.306,90.7C100.362,89.762 98.674,89.838 97.096,90.744L92.334,86.015C93.479,84.634 94.437,83.068 95.175,81.345L101.296,83.081Z\"\n      android:fillColor=\"#B9417E\"\n      android:fillType=\"evenOdd\"/>\n  <path\n      android:pathData=\"M71.863,81.942L68.868,81.942 68.868,69.951C67.774,71.038 66.485,71.842 65,72.363L65,69.476C65.781,69.204 66.63,68.689 67.547,67.93 68.463,67.172 69.092,66.287 69.433,65.275L71.863,65.275 71.863,81.942zM83.03,75.805L83.03,70.132 79.269,75.805 83.03,75.805zM83.03,81.942L83.03,78.602 76.333,78.602 76.333,75.816 83.432,65.275 86.066,65.275 86.066,75.805 88.098,75.805 88.098,78.602 86.066,78.602 86.066,81.942 83.03,81.942z\"\n      android:fillColor=\"#FFF\"\n      android:fillType=\"evenOdd\"/>\n  <path\n      android:pathData=\"M203.254,36.893C203.254,36.893 204.115,32.188 208.534,33.111C211.657,33.763 213.241,37.081 211.573,39.839C209.633,43.047 205.739,41.594 205.739,41.594\"\n      android:fillColor=\"#FFC722\"\n      android:fillType=\"evenOdd\"/>\n  <path\n      android:pathData=\"M208.391,40.485C208.75,40.72 208.931,41.282 209.077,41.66C209.237,42.073 209.39,42.508 209.423,42.952C209.479,43.724 209.288,44.474 209.03,45.192C208.488,46.7 207.546,48.678 205.891,49.194C205.827,49.214 205.854,49.316 205.919,49.296C207.654,48.779 208.626,46.722 209.183,45.151C209.466,44.352 209.674,43.463 209.51,42.616C209.431,42.204 209.276,41.798 209.112,41.413C208.963,41.064 208.78,40.607 208.444,40.394C208.387,40.359 208.335,40.448 208.391,40.485\"\n      android:fillColor=\"#FFC722\"\n      android:fillType=\"evenOdd\"/>\n  <path\n      android:pathData=\"M185.34,81.004L186.532,84.929C188.032,84.931 190.721,80.863 190.947,80.192C192.544,75.389 190.321,72.904 190.321,72.904L185.417,70.583L185.34,81.004Z\"\n      android:fillColor=\"#D59F6F\"\n      android:fillType=\"evenOdd\"/>\n  <path\n      android:pathData=\"M201.076,113.338C200.212,115.036 196.518,133.524 195.583,135.772C195.451,136.097 193.663,137.703 193.226,138.221C193.023,138.465 192.809,138.669 192.585,138.842C189.666,141.252 185.914,138.161 185.833,134.916L185.833,134.855C185.761,129.047 186.325,115.499 187.234,105.307C187.617,101.012 188.462,97.267 188.701,95.024L203.018,91.708C209.954,106.433 202.744,110.084 201.076,113.338\"\n      android:fillColor=\"#2E2F61\"\n      android:fillType=\"evenOdd\"/>\n  <path\n      android:pathData=\"M213.889,168.311C213.889,168.311 217.374,168.292 217.881,165.645 217.881,165.645 219.457,166.481 220.406,168.193 220.585,168.514 220.603,168.903 220.444,169.234 220.073,170.007 219.356,171.577 218.964,172.936 218.421,174.823 215.732,176.597 213.096,176.635L209.164,176.635C209.164,176.635 207.1,176.198 211.255,173.548 213.085,172.382 213.889,168.311 213.889,168.311M190.915,171.776C190.915,171.776 190.016,172.348 187.777,172.176 187.421,172.149 186.144,171.93 185.624,171.776 185.624,171.776 176.794,175.109 176.75,175.924 176.706,176.74 177.83,176.629 177.83,176.629L191.18,176.635C191.18,176.635 192.834,174.505 190.915,171.776\"\n      android:fillColor=\"#FFF\"\n      android:fillType=\"evenOdd\"/>\n  <path\n      android:pathData=\"M195.584,147.18C194.954,152.247 192.591,160.439 191.843,165.422 191.226,169.532 191.209,172.253 191.209,172.253 191.209,172.253 187.493,172.641 185.624,171.776 185.624,171.776 185.701,141.394 185.833,134.917 185.853,134.368 185.874,133.991 185.904,133.808 186.331,131.286 190.795,133.503 193.093,134.835 193.907,135.292 195.468,135.482 195.468,135.482 195.468,135.482 195.488,135.655 195.529,135.96 195.732,137.73 196.24,141.894 195.584,147.18M203.6,134.181C204.304,137.019 213.849,134.09 213.559,131.56 213.227,128.671 213.559,121.549 213.559,113.932 213.559,112.142 213.382,105.782 213.292,104.724 213.013,101.445 212.275,99.57 211.48,97.832 210.58,95.863 210.188,94.763 210.188,94.763L197.776,94.037C197.776,94.037 198.262,104.027 199.682,113.94 201.103,123.854 202.766,130.84 203.6,134.181\"\n      android:fillColor=\"#2E2F61\"\n      android:fillType=\"evenOdd\"/>\n  <path\n      android:pathData=\"M212.73,129.999C212.73,129.999 214.87,132.33 215.697,137.16C216.31,140.746 216.864,150.564 217.793,158.242C218.353,162.872 219.07,166.524 219.07,166.524C219.07,166.524 216.317,168.733 213.889,168.311C213.889,168.311 204.073,137.571 203.309,133.002C202.74,129.591 212.73,129.999 212.73,129.999\"\n      android:fillColor=\"#2E2F61\"\n      android:fillType=\"evenOdd\"/>\n  <path\n      android:pathData=\"M188.846,90.971C188.846,90.971 188.091,94.61 188.091,95.045 188.091,95.479 188.236,95.885 188.471,95.939 191.255,96.644 194.464,96.819 199.083,96.789 205.616,96.744 211.01,96.029 211.36,95.549 211.705,95.075 210.3,91.77 210.075,90.971 210.075,90.971 208.415,86.582 210.79,80.888 211.495,79.199 212.259,76.914 212.934,74.47 214.534,68.677 215.649,61.943 214.359,59.854 212.61,57.019 209.415,56.655 207.876,56.785L194.779,57.589C194.779,57.589 190.694,57.818 189.265,60.139 188.511,61.365 186.681,65.975 185.405,71.315 187.719,72.119 190.33,73.05 190.33,73.05L190.18,79.214C190.18,79.214 189.901,83.343 189.55,85.802 189.365,87.097 188.846,90.971 188.846,90.971M208.198,42.322C208.906,42.551 209.093,41.75 209.093,41.75 209.093,41.75 209.519,40.079 208.1,37.667 206.519,34.98 204.362,34.492 204.362,34.492 204.362,34.492 203.749,34.316 203.733,34.928\"\n      android:fillColor=\"#B9417E\"\n      android:fillType=\"evenOdd\"/>\n  <path\n      android:pathData=\"M188.861,68.105C188.861,68.105 189.268,80.857 188.443,83.115C187.069,86.881 182.903,85.964 182.403,82.34C181.771,77.757 186.896,67.353 186.896,67.353\"\n      android:fillColor=\"#E6B085\"\n      android:fillType=\"evenOdd\"/>\n  <path\n      android:pathData=\"M187.645,74.656L192.999,74.656L189.62,65.131C189.508,64.815 189.209,64.604 188.874,64.604L184.645,64.604C184.369,64.604 184.176,64.877 184.268,65.137L187.645,74.656Z\"\n      android:fillColor=\"#27255E\"\n      android:fillType=\"evenOdd\"/>\n  <path\n      android:pathData=\"M184.346,64.738l-0.513,0.529l0.494,0.024z\"\n      android:fillColor=\"#27255E\"\n      android:fillType=\"evenOdd\"/>\n  <path\n      android:pathData=\"M187.121,75.196L192.475,75.196L189.096,65.671C188.984,65.355 188.685,65.144 188.35,65.144L184.12,65.144C183.844,65.144 183.652,65.417 183.744,65.677L187.121,75.196Z\"\n      android:fillColor=\"#0D053D\"\n      android:fillType=\"evenOdd\"/>\n  <path\n      android:pathData=\"M192.058,72.477C192.058,72.477 191.389,71.799 191.072,71.257 190.652,70.539 190.496,69.601 191.056,69.404 191.616,69.206 191.682,70.401 193,71.29 193.668,71.74 194.789,74.059 194.789,74.059L194.912,74.933M207.878,56.787C204.887,62.952 200.054,63.17 200.054,63.17 194.253,63.787 194.781,57.591 194.781,57.591L196.397,57.227C197.47,56.984 198.266,56.088 198.401,54.994 198.411,54.912 198.419,54.833 198.427,54.751 198.548,53.604 198.522,52.417 198.482,51.655 198.456,51.154 198.425,50.838 198.425,50.838L197.945,46.78C197.945,46.78 206.823,40.539 204.98,46.187 204.07,48.979 203.854,51.532 203.867,53.398 203.877,55.136 205.209,56.581 206.944,56.715L207.878,56.787z\"\n      android:fillColor=\"#E5B993\"\n      android:fillType=\"evenOdd\"/>\n  <path\n      android:pathData=\"M198.427,54.751C198.549,53.604 198.522,52.417 198.482,51.655L201.637,50.838C201.637,50.838 201.471,53.784 198.427,54.751\"\n      android:fillColor=\"#D59F6F\"\n      android:fillType=\"evenOdd\"/>\n  <path\n      android:pathData=\"M193.058,39.988C192.464,43.178 192.374,50.933 196.227,53.107 199.243,54.809 203.237,50.83 205.882,46.932 208.527,43.033 205.533,37.758 202.002,36.818 198.471,35.878 193.832,35.833 193.058,39.988M208.407,70.373L205.609,80.815C205.609,80.815 208.85,82.592 211.819,82.513L214.927,72.333\"\n      android:fillColor=\"#E5B993\"\n      android:fillType=\"evenOdd\"/>\n  <path\n      android:pathData=\"M207.717,72.949C207.717,72.949 209.95,74.489 214.069,75.143L214.533,73.673L207.94,72.158L207.717,72.949Z\"\n      android:fillColor=\"#D59F6F\"\n      android:fillType=\"evenOdd\"/>\n  <path\n      android:pathData=\"M206.646,66.436L205.482,71.702C205.482,71.702 210.006,73.825 215.706,74.213C215.706,74.213 217.746,60.081 212.106,57.77C212.106,57.77 209.012,57.22 206.646,66.436\"\n      android:fillColor=\"#B9417E\"\n      android:fillType=\"evenOdd\"/>\n  <path\n      android:pathData=\"M207.199,80.187C203.619,78.33 194.789,74.059 194.789,74.059L192.811,76.116C192.811,76.116 203.172,85.968 207.925,87.41C210.557,88.208 212.443,80.468 212.443,80.468\"\n      android:fillColor=\"#E5B993\"\n      android:fillType=\"evenOdd\"/>\n  <path\n      android:pathData=\"M193.94,77.044C193.065,76.454 190.278,76.497 188.694,75.698C189.228,74.711 190.278,73.084 191.822,72.049C192.132,72.13 192.385,72.206 192.551,72.267C193.386,72.568 193.438,73.088 193.905,73.761C194.373,74.435 194.791,74.518 194.791,74.518C194.791,74.518 194.982,77.744 193.94,77.044\"\n      android:fillColor=\"#E5B993\"\n      android:fillType=\"evenOdd\"/>\n  <path\n      android:pathData=\"M191.362,73.051L189.416,72.658C189.416,72.658 188.164,72.078 187.435,71.555 186.706,71.031 186.839,70.662 187.435,70.732 187.811,70.776 189.882,71.636 189.882,71.636 189.882,71.636 191.159,71.912 191.553,71.851 191.944,71.791 191.822,71.483 191.822,71.483L192.449,71.833 192.61,72.38M190.331,73.692L187.979,73.401C187.979,73.401 186.219,72.581 185.843,72.536 185.247,72.466 185.114,72.836 185.843,73.359 186.573,73.883 187.286,74.286 187.825,74.462 188.296,74.617 189.77,74.855 189.77,74.855\"\n      android:fillColor=\"#E5B993\"\n      android:fillType=\"evenOdd\"/>\n  <path\n      android:pathData=\"M190.118,74.785L188.284,74.694C188.284,74.694 186.632,74.091 186.306,74.053 185.788,73.992 185.672,74.313 186.306,74.768 186.939,75.223 187.559,75.573 188.028,75.727 188.438,75.861 190.182,76.191 190.182,76.191M190.927,72.751L188.515,72.359 187.011,71.616C187.011,71.616 185.963,70.886 185.521,71.02 185.129,71.137 185.64,71.812 186.159,72.247 186.678,72.681 187.926,73.319 187.926,73.319L190.507,73.944\"\n      android:fillColor=\"#E5B993\"\n      android:fillType=\"evenOdd\"/>\n  <path\n      android:pathData=\"M203.186,47.941C203.186,47.941 203.88,48.189 203.806,49.688C203.723,51.397 203.871,52.861 203.871,52.861L204.57,52.363C204.57,52.363 205.291,51.153 206.431,48.948C208.678,47.542 209.66,44.045 208.365,41.147C206.933,37.941 203.856,44.899 203.856,44.899L203.186,47.941Z\"\n      android:fillColor=\"#FFC722\"\n      android:fillType=\"evenOdd\"/>\n  <path\n      android:pathData=\"M197.46,71.315C197.46,71.315 198.548,75.887 202.499,76.191C202.499,76.191 196.471,76.483 197.46,71.315\"\n      android:fillColor=\"#98417E\"\n      android:fillType=\"evenOdd\"/>\n  <path\n      android:pathData=\"M195.027,39.435C195.043,39.353 194.952,39.436 194.944,39.447C194.94,39.454 194.953,39.476 194.951,39.484C194.943,39.515 194.968,39.58 194.974,39.612C195,39.752 195.028,39.893 195.059,40.032C195.167,40.51 195.314,40.978 195.503,41.43C196.022,42.676 196.871,43.791 198.048,44.479C198.904,44.979 199.876,45.222 200.862,45.269C200.932,45.273 200.931,45.166 200.862,45.161C199.069,45.032 197.447,44.263 196.386,42.787C195.746,41.896 195.333,40.85 195.106,39.78C195.086,39.686 195.088,39.527 195.04,39.442C195.023,39.412 194.955,39.307 194.936,39.41C194.926,39.47 195.016,39.495 195.027,39.435\"\n      android:fillColor=\"#FFC722\"\n      android:fillType=\"evenOdd\"/>\n  <path\n      android:pathData=\"M195.044,39.609C195.044,39.609 196.046,41.935 199.48,44.895C199.876,45.236 200.53,45.735 200.878,46.562C200.927,46.676 200.994,45.674 200.994,45.674L201.665,47.652C201.665,47.652 201.758,45.831 202.021,45.987C203.934,47.123 205.132,48.518 205.132,48.518C205.132,48.518 206.839,46.578 207.656,43.885C208.765,40.228 208.139,35.207 201.763,34.014C196.478,33.024 192.361,36.067 192.047,40.061C191.852,42.539 192.804,44.691 192.804,44.691C192.804,44.691 192.38,40.977 195.044,39.609\"\n      android:fillColor=\"#FFC722\"\n      android:fillType=\"evenOdd\"/>\n  <path\n      android:pathData=\"M201.81,46.382C201.81,46.382 201.974,44.205 203.802,44.798C204.748,45.105 204.857,46.348 204.598,47.42C204.344,48.474 203.735,49.363 202.899,48.999\"\n      android:fillColor=\"#E5B993\"\n      android:fillType=\"evenOdd\"/>\n  <path\n      android:pathData=\"M168.606,103.163C168.604,103.97 172.854,102.975 172.854,102.975C172.854,102.975 172.128,101.654 172.148,99.731C172.188,95.796 172.966,89.206 172.774,85.323L172.913,75.031L165.528,75.013C163.667,77.224 168.607,102.345 168.606,103.163\"\n      android:fillColor=\"#E0A16F\"\n      android:fillType=\"evenOdd\"/>\n  <path\n      android:pathData=\"M173.637,104.328C173.637,104.328 172.607,102.536 172.068,101.524C172.068,101.524 168.691,102.6 168.308,102.84C168.308,102.84 168.389,103.99 168.309,104.585C168.229,105.18 173.637,104.328 173.637,104.328\"\n      android:fillColor=\"#E0A16F\"\n      android:fillType=\"evenOdd\"/>\n  <path\n      android:pathData=\"M173.024,103.395C173.024,103.395 174.077,104.691 174.063,105.63C174.049,106.57 174.044,108.548 173.831,108.729C173.619,108.909 173.03,108.726 172.776,107.816C172.673,107.447 172.699,106.75 172.764,106.013L172.764,106.014C172.764,106.014 171.248,105.072 171.221,103.766C171.194,102.46 172.105,103.018 172.105,103.018L172.999,103.844C173.018,103.65 173.028,103.491 173.024,103.395\"\n      android:fillColor=\"#E0A16F\"\n      android:fillType=\"evenOdd\"/>\n  <path\n      android:pathData=\"M173.514,104.239C173.469,103.972 171.74,102.694 171.74,102.694L168.522,103.221C168.522,103.221 167.405,105.827 167.791,107.468C168.178,109.105 168.36,109.062 168.36,109.062L168.361,109.062C168.507,109.38 168.914,109.42 169.154,109.382C169.358,109.349 169.476,109.255 169.549,109.144C169.718,109.403 170.067,109.479 170.289,109.443C170.47,109.414 170.611,109.298 170.705,109.208C170.819,109.478 171.26,109.594 171.514,109.582C171.738,109.571 171.877,109.431 171.915,109.368C171.915,109.368 172.137,109.678 172.628,109.614C173.122,109.555 173.191,109.002 173.191,109.002L173.384,107.144C173.384,107.144 173.565,104.507 173.514,104.239\"\n      android:fillColor=\"#E0A16F\"\n      android:fillType=\"evenOdd\"/>\n  <path\n      android:pathData=\"M172.072,108.722C172.072,108.722 171.92,107.18 172.27,106.302C172.503,105.716 173.094,106.14 173.256,106.609C173.417,107.078 173.419,107.45 173.419,107.45\"\n      android:fillColor=\"#E0A16F\"\n      android:fillType=\"evenOdd\"/>\n  <path\n      android:pathData=\"M172.677,108.596C172.677,108.596 172.525,107.055 172.875,106.177C173.109,105.591 173.716,106.01 173.861,106.484C174.005,106.95 173.923,107.303 173.923,107.303\"\n      android:fillColor=\"#E0A16F\"\n      android:fillType=\"evenOdd\"/>\n  <path\n      android:pathData=\"M171.596,108.722C171.596,108.722 171.444,107.18 171.794,106.302C172.027,105.716 172.678,106.082 172.744,106.634\"\n      android:fillColor=\"#E0A16F\"\n      android:fillType=\"evenOdd\"/>\n  <path\n      android:pathData=\"M170.553,108.722C170.553,108.722 170.401,107.18 170.751,106.302C170.985,105.716 171.615,106.07 171.694,106.62\"\n      android:fillColor=\"#E0A16F\"\n      android:fillType=\"evenOdd\"/>\n  <path\n      android:pathData=\"M172.876,77.9C172.876,77.9 170.837,78.611 168.703,78.977L168.703,77.038L172.87,76.788L172.876,77.9Z\"\n      android:fillColor=\"#CC9264\"\n      android:fillType=\"evenOdd\"/>\n  <path\n      android:pathData=\"M151.894,170.657L151.144,176.942C151.144,177.592 149.88,178.394 149.143,178.408C147.315,178.437 145.509,176.942 145.509,176.942L145.205,170.425L151.894,170.657Z\"\n      android:fillColor=\"#E0A16F\"\n      android:fillType=\"evenOdd\"/>\n  <path\n      android:pathData=\"M145.341,173.338l6.258,-0.21l0.139,-1.19l-6.476,-0.148z\"\n      android:fillColor=\"#CC9264\"\n      android:fillType=\"evenOdd\"/>\n  <path\n      android:pathData=\"M161.256,181.823C161.279,181.013 152.94,177.079 151.145,176.941C151.145,176.941 147.083,176.726 145.478,176.623C144.386,177.724 144.42,181.078 144.679,181.956C144.783,182.308 145.111,182.547 145.479,182.547L156.86,182.547L160.953,182.547C161.12,182.547 161.256,182.411 161.256,182.244L161.256,181.823Z\"\n      android:fillColor=\"#2E2F61\"\n      android:fillType=\"evenOdd\"/>\n  <path\n      android:pathData=\"M170.788,170.657L170.716,176.942C170.716,177.592 169.451,178.394 168.714,178.408C166.887,178.437 165.081,176.942 165.081,176.942L164.134,170.642L164.099,170.425L166.208,170.498L170.788,170.657Z\"\n      android:fillColor=\"#E0A16F\"\n      android:fillType=\"evenOdd\"/>\n  <path\n      android:pathData=\"M164.587,173.651l6.176,-0.829l0,-1.051l-6.394,0.327z\"\n      android:fillColor=\"#CC9264\"\n      android:fillType=\"evenOdd\"/>\n  <path\n      android:pathData=\"M171.707,135.209L170.789,111.786L170.725,111.8C170.654,110.134 170.599,108.937 170.571,108.539C170.436,106.683 169.971,104.241 169.229,103.633C167.106,101.892 161.843,101.317 159.371,104.174C156.748,107.208 156.958,114.643 156.958,114.643C156.958,114.643 157.691,123.383 158.906,135.52C157.962,150.514 162.29,164.72 163.679,172.716C163.679,172.716 165.015,172.817 171.785,172.377L171.707,135.209Z\"\n      android:fillColor=\"#3D539A\"\n      android:fillType=\"evenOdd\"/>\n  <path\n      android:pathData=\"M157.962,125.79l3.374,-14.534l-2.546,23.099z\"\n      android:fillColor=\"#2E2F61\"\n      android:fillType=\"evenOdd\"/>\n  <path\n      android:pathData=\"M144.772,130.131C144.428,126.66 143.843,119.25 144.027,110.359C143.472,106.545 143.375,99.322 145.346,95.103L150.772,95.415C151.619,93.885 152.566,94.134 153.561,95.281C153.83,95.033 154.102,94.785 154.389,94.539C154.389,94.539 160.524,94.424 165.424,94.718C169.282,94.949 169.667,94.626 169.667,94.626C169.667,94.626 170.849,107.989 170.862,113.655L161.477,110.127C161.477,110.127 158.337,130.865 157.392,134.394C156.551,137.522 153.376,165.781 152.557,172.652C150.424,172.621 146.372,172.455 144.572,172.337C144.405,171.09 140.563,152.999 144.529,134.338C144.823,132.955 144.912,131.538 144.772,130.131\"\n      android:fillColor=\"#3D539A\"\n      android:fillType=\"evenOdd\"/>\n  <path\n      android:pathData=\"M170.244,99.983C169.975,100.992 166.126,101.556 162.966,101.556C159.417,101.556 145.189,100.872 144.082,99.589C143.87,99.346 145.088,88.905 145.491,81.906L145.491,81.896C145.646,79.144 145.833,76.257 146.019,73.531C146.464,66.977 146.934,61.365 147.162,60.863C148.264,58.437 158.144,57.837 161.77,57.723C163.043,57.682 163.038,57.801 163.932,57.842C167.512,58.37 169.888,59.795 171.33,61.337C171.675,63.545 169.933,68.508 169.302,70.205C168.474,72.44 170.653,98.477 170.244,99.983\"\n      android:fillColor=\"#FFF\"\n      android:fillType=\"evenOdd\"/>\n  <path\n      android:pathData=\"M148.952,71.198L145.491,81.896C145.646,79.144 145.833,76.258 146.019,73.531L148.952,71.198Z\"\n      android:fillColor=\"#CECECE\"\n      android:fillType=\"evenOdd\"/>\n  <path\n      android:pathData=\"M171.33,61.337L163.782,72.625C163.782,72.625 163.296,76.521 163.377,77.016C164.778,77.447 170.493,78.076 173.787,77.124C173.486,72.989 172.854,67.397 172.247,64.191C171.828,61.984 171.33,61.337 171.33,61.337\"\n      android:fillColor=\"#FFF\"\n      android:fillType=\"evenOdd\"/>\n  <path\n      android:pathData=\"M180.828,181.823C180.851,181.013 172.512,177.079 170.717,176.941C170.717,176.941 166.654,176.726 165.05,176.623C163.958,177.724 163.992,181.078 164.251,181.956C164.354,182.308 164.683,182.547 165.051,182.547L176.431,182.547L180.525,182.547C180.692,182.547 180.828,182.411 180.828,182.244L180.828,181.823Z\"\n      android:fillColor=\"#2E2F61\"\n      android:fillType=\"evenOdd\"/>\n  <path\n      android:pathData=\"M146.365,75.554C146.355,75.58 146.272,75.745 146.133,76.009C145.858,76.547 145.354,77.808 144.582,78.674C142.98,80.472 141.266,82.728 141.266,82.728L135.194,80.797C135.65,78.842 136.56,75.762 137.354,72.678L137.354,72.673C137.499,72.321 137.634,71.984 137.763,71.669C138.203,70.593 138.549,69.776 138.684,69.45C138.963,68.803 139.232,68.183 139.491,67.583C139.889,67.914 140.287,68.653 140.82,69.584C141.844,71.405 143.36,73.945 146.365,75.554\"\n      android:fillColor=\"#E0A16F\"\n      android:fillType=\"evenOdd\"/>\n  <path\n      android:pathData=\"M146.133,76.009C145.859,76.547 145.381,77.625 144.582,78.674C139.028,75.863 137.289,72.84 137.289,72.84C137.434,72.489 137.634,71.985 137.763,71.669L146.133,76.009Z\"\n      android:fillColor=\"#CC9264\"\n      android:fillType=\"evenOdd\"/>\n  <path\n      android:pathData=\"M150.402,68.071L153.58,58.418C153.58,58.418 144.58,59.556 142.766,61.16C140.382,63.267 138.267,67.597 136.795,71.886C137.985,72.879 144.432,76.175 146.042,76.751C147.492,73.909 149.658,70.189 150.402,68.071\"\n      android:fillColor=\"#FFF\"\n      android:fillType=\"evenOdd\"/>\n  <path\n      android:pathData=\"M142.478,94.691C145.221,98.341 147.653,101.146 147.653,101.146L151.287,101.352C151.287,101.352 149.768,98.588 149.361,97.624C148.293,95.063 145.78,90.678 144.767,88.193C143.85,85.938 140.836,82.113 140.836,82.113L135.195,80.797C134.495,84.984 139.151,90.263 142.478,94.691\"\n      android:fillColor=\"#E0A16F\"\n      android:fillType=\"evenOdd\"/>\n  <path\n      android:pathData=\"M149.716,98.49C149.716,98.49 150.578,99.615 151.331,100.175C152.083,100.734 152.325,100.788 153.192,101.419C154.059,102.05 154.744,103.215 154.668,103.391C154.591,103.566 154.019,103.604 153.589,103.216C153.129,102.802 152.499,102.344 152.178,102.273C151.856,102.201 151.597,102.573 151.665,102.974C151.724,103.322 152.094,104.307 152.756,104.98C153.036,105.265 153.564,105.861 153.441,106.214C153.318,106.568 152.762,106.214 152.245,105.842C151.084,105.006 150.217,103.258 150.217,103.258C150.217,103.258 147.971,103.159 147.742,103.066C147.513,102.973 147.155,100.641 146.305,99.544C145.499,98.501 149.716,98.49 149.716,98.49\"\n      android:fillColor=\"#E0A16F\"\n      android:fillType=\"evenOdd\"/>\n  <path\n      android:pathData=\"M150.288,102.768L151.481,104.832C151.481,104.832 153.208,106.554 152.996,106.948C152.785,107.343 151.442,106.686 150.748,105.876C150.055,105.067 148.883,102.816 148.883,102.816\"\n      android:fillColor=\"#E0A16F\"\n      android:fillType=\"evenOdd\"/>\n  <path\n      android:pathData=\"M149.333,102.867L150.361,104.748C150.361,104.748 151.89,106.386 151.678,106.728C151.464,107.07 150.191,106.167 149.615,105.399C149.038,104.631 148.114,102.541 148.114,102.541\"\n      android:fillColor=\"#E0A16F\"\n      android:fillType=\"evenOdd\"/>\n  <path\n      android:pathData=\"M148.508,102.187L149.367,104.181C149.367,104.181 150.667,105.911 150.454,106.254C150.24,106.596 148.967,105.693 148.391,104.925C147.814,104.157 147.239,101.524 147.239,101.524\"\n      android:fillColor=\"#E0A16F\"\n      android:fillType=\"evenOdd\"/>\n  <path\n      android:pathData=\"M151.846,102.366C151.846,102.366 149.766,103.85 147.239,104.217C144.712,104.583 148.872,106.898 149.044,107.066C149.217,107.234 152.773,108.269 153.333,108.032C153.893,107.795 154.699,108.398 154.673,107.406C154.648,106.415 155.173,105.402 154.673,105.058C154.174,104.713 151.846,102.366 151.846,102.366\"\n      android:fillColor=\"#3D539A\"\n      android:fillType=\"evenOdd\"/>\n  <path\n      android:pathData=\"M170.706,103.714L171.05,103.729L171.05,103.791L171.052,103.907C171.055,103.99 171.062,104.085 171.073,104.189C171.103,104.467 171.16,104.742 171.251,104.996C171.392,105.394 171.601,105.71 171.889,105.92L171.962,105.97L171.776,106.261C171.379,106.006 171.102,105.609 170.926,105.112C170.826,104.829 170.763,104.529 170.73,104.227C170.718,104.113 170.711,104.01 170.707,103.918L170.705,103.79L170.706,103.714Z\"\n      android:fillColor=\"#CC9264\"\n      android:fillType=\"nonZero\"/>\n  <path\n      android:pathData=\"M152.244,58.582C152.244,58.582 155.417,62.475 159.424,61.576C161.248,61.159 161.052,58.215 161.052,58.215C161.052,58.215 160.242,58.133 159.898,57.577C159.825,57.462 159.702,57.029 159.571,56.497C159.326,55.442 159.04,54.003 159.04,54.003L157.641,53.479L153.283,51.844C153.283,51.844 153.274,55.859 152.849,57.806C152.718,58.403 152.244,58.582 152.244,58.582\"\n      android:fillColor=\"#E0A16F\"\n      android:fillType=\"evenOdd\"/>\n  <path\n      android:pathData=\"M152.821,57.783l7.232,0.952l-0.718,-6.35l-5.929,-1.407l-0.417,4.014z\"\n      android:fillColor=\"#E0A16F\"\n      android:fillType=\"evenOdd\"/>\n  <path\n      android:pathData=\"M148.584,43.914C148.814,38.768 151.359,37.231 155.27,36.289C159.695,35.223 161.917,36.76 163.062,38.955C163.513,39.821 163.677,41.562 163.718,42.598C163.755,43.558 163.663,44.052 163.721,44.378C163.872,45.22 164.865,45.873 165.291,46.323C165.52,46.566 165.812,46.909 165.664,47.178C165.541,47.4 165.268,47.576 165.069,47.992C164.73,48.705 165.119,49.274 164.838,50.309C164.618,51.12 164.666,52.247 164.382,53.358C164.185,54.127 162.135,55.028 160.678,54.783C157.515,54.252 152.465,53.9 151.042,51.389C149.62,48.879 148.479,45.108 148.584,43.914\"\n      android:fillColor=\"#E0A16F\"\n      android:fillType=\"evenOdd\"/>\n  <path\n      android:pathData=\"M147.315,46.772C146.483,42.624 147.387,39.162 150.241,37.196C155.741,33.408 161.418,36.282 163.024,37.82C163.729,38.496 165.192,39.786 163.185,39.502C156.215,38.517 155.053,42.115 155.053,42.115C155.053,42.115 155.164,44.644 155.462,45.786L155.471,45.82C155.662,46.58 154.685,47.067 154.185,46.463C153.612,45.77 153.242,45.773 153.16,45.095C153.137,44.895 153.079,47.018 153.501,49.702C153.781,50.947 153.417,54.458 152.989,54.992C151.782,53.618 147.841,49.394 147.315,46.772\"\n      android:fillColor=\"#683A29\"\n      android:fillType=\"evenOdd\"/>\n  <path\n      android:pathData=\"M154.66,47.136C154.911,48.399 155.189,49.325 154.227,49.399C153.265,49.473 152.035,48.795 151.722,47.547C151.378,46.172 152.025,45.405 152.778,45.147C153.371,44.945 154.38,45.73 154.66,47.136\"\n      android:fillColor=\"#E0A16F\"\n      android:fillType=\"evenOdd\"/>\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_exposure_info.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"130dp\"\n    android:height=\"130dp\"\n    android:viewportWidth=\"595\"\n    android:viewportHeight=\"594\">\n  <path\n      android:pathData=\"M562.458,297.532c0,147.412 -119.5,266.913 -266.912,266.913 -147.412,0 -266.914,-119.5 -266.914,-266.913 0,-147.412 119.502,-266.912 266.913,-266.912 147.413,0 266.913,119.5 266.913,266.912\"\n      android:fillColor=\"#C9E2F4\"\n      android:fillType=\"evenOdd\"/>\n  <path\n      android:pathData=\"M296.944,563.082c-146.713,0 -265.648,-118.935 -265.648,-265.649 0,-146.712 118.935,-265.647 265.648,-265.647 146.714,0 265.648,118.935 265.648,265.647 0,146.714 -118.934,265.649 -265.648,265.649m0,-560.073C134.338,3.009 2.52,134.827 2.52,297.433c0,162.606 131.818,294.426 294.424,294.426 162.607,0 294.425,-131.82 294.425,-294.426S459.55,3.01 296.944,3.01\"\n      android:fillColor=\"#E4F1F9\"\n      android:fillType=\"evenOdd\"/>\n  <path\n      android:pathData=\"M362.817,408.518l-119.59,3.238a4.34,4.34 0,0 1,-4.454 -4.221l-6.925,-255.913a4.339,4.339 0,0 1,4.22 -4.454l119.59,-3.237a4.342,4.342 0,0 1,4.454 4.22l6.923,255.913a4.337,4.337 0,0 1,-4.218 4.454\"\n      android:fillColor=\"#334176\"\n      android:fillType=\"evenOdd\"/>\n  <path\n      android:pathData=\"M366.51,384.646l-128.262,3.47 -6.079,-224.662 128.262,-3.47z\"\n      android:fillColor=\"#FFFDFF\"\n      android:fillType=\"evenOdd\"/>\n  <path\n      android:pathData=\"M365.564,349.685l-128.263,3.47 -2.978,-110.084 128.263,-3.47z\"\n      android:fillColor=\"#C4C9E1\"\n      android:fillType=\"evenOdd\"/>\n  <path\n      android:pathData=\"M274.276,263.466c0.135,5.52 -4.232,10.103 -9.752,10.236 -5.52,0.134 -10.103,-4.233 -10.237,-9.753 -0.134,-5.52 4.233,-10.103 9.754,-10.236 5.52,-0.134 10.102,4.233 10.236,9.753\"\n      android:fillColor=\"#A1A9CD\"\n      android:fillType=\"evenOdd\"/>\n  <path\n      android:pathData=\"M347.593,317.7l-96.952,2.342 -0.724,-29.986 96.95,-2.341z\"\n      android:fillColor=\"#FFF\"\n      android:fillType=\"evenOdd\"/>\n  <path\n      android:pathData=\"M344.091,255.55l-57.97,1.4 -0.096,-3.998 57.969,-1.4zM344.296,264.023l-57.971,1.4 -0.096,-3.998 57.97,-1.4zM347.58,333.784l-97.081,2.345 -0.097,-3.998 97.081,-2.345zM347.767,341.57l-97.08,2.344 -0.096,-3.998 97.08,-2.345zM344.518,273.223l-57.97,1.4 -0.097,-3.998 57.97,-1.4z\"\n      android:fillColor=\"#A1A9CD\"\n      android:fillType=\"evenOdd\"/>\n  <path\n      android:pathData=\"M356.186,218.605L238.9,221.724l-1.015,-38.178 117.285,-3.118z\"\n      android:fillColor=\"#E9ECF7\"\n      android:fillType=\"evenOdd\"/>\n  <path\n      android:pathData=\"M351.137,192.028l-108.504,2.935 -0.164,-6.046 108.505,-2.935zM289.435,204.938l-46.3,1.253 -0.164,-6.046 46.3,-1.253zM350.873,203.582l-40.029,1.083 -0.163,-6.046 40.029,-1.083zM297.132,215.23l-53.53,1.447 -0.163,-6.045 53.53,-1.449zM351.335,213.914l-40.029,1.083 -0.163,-6.045 40.028,-1.084z\"\n      android:fillColor=\"#9B8BAD\"\n      android:fillType=\"evenOdd\"/>\n  <group>\n    <clip-path\n        android:pathData=\"M297.473,30.644l4.393,0.035C446.552,33.025 563.12,151.045 563.12,296.292l-0.036,4.393c-2.346,144.688 -120.365,261.255 -265.61,261.255l-4.394,-0.036C148.393,559.558 31.825,441.54 31.825,296.292 31.825,149.578 150.759,30.644 297.473,30.644\"/>\n    <path\n        android:pathData=\"M291.314,596.378c-35.857,1.304 -71.798,1.533 -107.537,4.348 -19.031,1.5 -18.668,-5.27 -18.644,-23.057 0.006,-3.864 7.027,-28.862 8.945,-38.796 4.718,-14.247 8.253,-28.845 12.926,-43.094 2.644,-8.062 5.023,-16.386 13.72,-20.447 36.935,-6.21 70.79,-0.152 99.82,25.182 8.773,19.722 0.937,39.635 0.69,59.472 -0.555,12.88 0.447,26.195 -9.92,36.392M367.27,590.115l-0.466,-50.33c2.642,-7.182 9.085,-9.607 15.457,-10.67 25.319,-4.22 50.726,-7.279 75.904,1.177 2.186,1.125 -1.878,2.179 3.687,5.272 -0.093,10.203 5.957,18.65 8.693,28.304 7.383,26.041 3.65,26.819 -24.695,27.757 -19.987,0.662 -39.972,1.558 -59.966,1.846 -6.262,0.09 -13.424,3.226 -18.615,-3.356\"\n        android:fillColor=\"#B9417E\"\n        android:fillType=\"evenOdd\"/>\n  </group>\n  <group>\n    <clip-path\n        android:pathData=\"M297.473,30.644l4.393,0.035C446.552,33.025 563.12,151.045 563.12,296.292l-0.036,4.393c-2.346,144.688 -120.365,261.255 -265.61,261.255l-4.394,-0.036C148.393,559.558 31.825,441.54 31.825,296.292 31.825,149.578 150.759,30.644 297.473,30.644\"/>\n    <path\n        android:pathData=\"M199.77,478.825c-10.425,-20.983 8.208,-18.31 18.33,-22.566 25.877,-6.915 49.64,-4.317 69.583,15.483 15.061,5.757 18.914,15.135 9.3,28.858 -30.595,-15.35 -62.616,-24.326 -97.212,-21.775\"\n        android:fillColor=\"#2D2F62\"\n        android:fillType=\"evenOdd\"/>\n  </group>\n  <group>\n    <clip-path\n        android:pathData=\"M297.473,30.644l4.393,0.035C446.552,33.025 563.12,151.045 563.12,296.292l-0.036,4.393c-2.346,144.688 -120.365,261.255 -265.61,261.255l-4.394,-0.036C148.393,559.558 31.825,441.54 31.825,296.292 31.825,149.578 150.759,30.644 297.473,30.644\"/>\n    <path\n        android:pathData=\"M357.028,295.423c4.29,-10.225 12.146,-27.14 20.737,-23.517 9.11,3.84 6.781,17.135 6.528,24.81 -0.678,20.571 -6.197,39.53 -1.521,60.205 2.074,9.167 8.996,11.765 19.413,12.186 13.156,0.53 26.38,3.146 39.245,6.239 27.507,6.615 34.675,15.495 36.984,44.023 1.983,24.51 -3.243,47.707 -14.182,69.546 -3.92,7.823 -7.593,15.51 -7.929,24.402 -3.629,3.218 -8.037,4.854 -12.69,4.265 -19.652,-2.485 -39.148,-2.221 -58.597,1.839 -3.943,0.822 -7.763,-0.647 -10.893,-3.401 -1.95,-12.905 -7.72,-22.946 -18.14,-31.647 -22.612,-18.875 -34.196,-45.094 -43.865,-72.19 -1.601,-2.778 -2.076,-5.728 -1.344,-8.864 1.513,-4.285 4.664,-6.535 9.027,-7.287 5.143,-0.5 9.79,1.113 14.276,3.403 2.461,1.264 9.352,7.409 11.118,7.957 0.574,0.178 0.929,-1.548 0.291,-3.072 -0.725,-2.424 -2.23,-29.46 -2.266,-32.27 1.557,-22.214 6.93,-60.233 13.808,-76.627\"\n        android:fillColor=\"#E0A16F\"\n        android:fillType=\"evenOdd\"/>\n  </group>\n  <group>\n    <clip-path\n        android:pathData=\"M297.473,30.644l4.393,0.035C446.552,33.025 563.12,151.045 563.12,296.292l-0.036,4.393c-2.346,144.688 -120.365,261.255 -265.61,261.255l-4.394,-0.036C148.393,559.558 31.825,441.54 31.825,296.292 31.825,149.578 150.759,30.644 297.473,30.644\"/>\n    <path\n        android:pathData=\"M287.683,471.742c-22.397,-8.791 -45.66,-13.682 -69.597,-15.479 0.996,-21.466 1.521,-42.454 -2.091,-63.29 -7.256,-41.851 -1.496,-66.427 7.917,-106.845 0.345,-1.479 5.729,-14.396 6.677,-15.734 1.83,-2.585 4.155,-4.934 4.19,0.981 0.05,8.14 0.734,8.745 1.03,17.682 0.564,17.044 -0.21,36.023 2.703,52.881 0.031,0.18 7.298,-3.474 7.604,-3.753 0.967,-0.877 1.67,-2.025 2.395,-3.262 8.402,-12.055 15.545,-24.912 25.534,-35.653 5.476,-5.887 11.643,-12.038 20.62,-8.212 8.284,3.53 1.94,13.266 -1.511,20.78 -5.056,11.006 -11.07,22.064 -17.17,33.303 -4.824,8.893 -8.487,14.918 -10.05,30.838 -3.893,16.118 1.472,23.335 1.489,35.535 9.35,-0.823 32.197,-1.436 40.062,-2.224 1.921,0.38 3.497,1.344 4.79,2.792 -1.399,22.695 -17.825,39.182 -24.592,59.66\"\n        android:fillColor=\"#E0A16F\"\n        android:fillType=\"evenOdd\"/>\n  </group>\n  <group>\n    <clip-path\n        android:pathData=\"M297.473,30.644l4.393,0.035C446.552,33.025 563.12,151.045 563.12,296.292l-0.036,4.393c-2.346,144.688 -120.365,261.255 -265.61,261.255l-4.394,-0.036C148.393,559.558 31.825,441.54 31.825,296.292 31.825,149.578 150.759,30.644 297.473,30.644\"/>\n    <path\n        android:pathData=\"M374.123,516.02c27.14,-8.757 54.607,-7.618 82.189,-2.698 9.03,5.612 5.654,14.333 5.54,22.241 -31.965,-4.923 -63.74,-5.538 -95.051,4.216 -10.415,-11.885 -2.563,-18.135 7.322,-23.76\"\n        android:fillColor=\"#2E2F61\"\n        android:fillType=\"evenOdd\"/>\n  </group>\n  <path\n      android:pathData=\"M214.53,170.954l-22.254,20.831 21.673,4.313 -17.838,22.537 24.662,4.452 -10.494,19.284 10.395,1.987M376.366,250.134l22.995,-15.492 -18.84,-7.005 19.278,-17.662 -21.506,-7.564 12.212,-15.803 -9.048,-3.285\"\n      android:strokeLineJoin=\"round\"\n      android:strokeWidth=\"6\"\n      android:fillColor=\"#00000000\"\n      android:strokeColor=\"#FFF\"\n      android:fillType=\"evenOdd\"\n      android:strokeLineCap=\"round\"/>\n  <group>\n    <clip-path\n        android:pathData=\"M0,593.07h595.276L595.276,0.82L0,0.82z\"/>\n    <path\n        android:pathData=\"M406.283,193.475c-0.174,4.406 1.583,8.105 4.663,8.986 3.95,1.131 8.531,-2.777 10.233,-8.728 1.704,-5.951 -0.116,-11.692 -4.065,-12.821 -3.01,-0.862 -6.378,1.216 -8.568,4.882l-14.135,-4.045c1.18,-5.148 1.459,-10.342 0.85,-15.387l14.57,-2.77c1.827,4.013 5.06,6.525 8.209,5.927 4.034,-0.767 6.368,-6.319 5.21,-12.4 -1.155,-6.082 -5.364,-10.389 -9.399,-9.621 -3.075,0.584 -5.149,3.955 -5.455,8.215l-14.814,2.818a45.374,45.374 0,0 0,-5.347 -11.438l11.937,-10.801c3.649,2.475 7.718,2.937 10.095,0.787 3.045,-2.756 2.147,-8.71 -2.006,-13.3s-9.989,-6.077 -13.034,-3.322c-2.321,2.101 -2.338,6.058 -0.38,9.855l-11.575,10.472c-4.447,-4.732 -9.952,-8.599 -16.397,-11.12l5.364,-13.886c4.373,0.57 8.215,-0.849 9.37,-3.838 1.478,-3.832 -2.002,-8.746 -7.776,-10.975 -5.775,-2.231 -11.655,-0.934 -13.134,2.897 -1.129,2.92 0.638,6.462 4.093,8.973l-5.642,14.606a44.805,44.805 0,0 0,-17.324 -0.028l-4.382,-14.615c3.803,-2.232 5.967,-5.707 5.047,-8.778 -1.18,-3.933 -6.942,-5.68 -12.871,-3.902 -5.93,1.778 -9.78,6.408 -8.6,10.342 0.9,2.999 4.466,4.713 8.735,4.578l4.38,14.599c-6.156,2.383 -11.79,6.065 -16.418,10.915l-10.257,-9.512c2.146,-3.853 2.25,-7.946 -0.099,-10.125 -3.012,-2.793 -8.865,-1.378 -13.074,3.161 -4.208,4.538 -5.18,10.482 -2.168,13.274 2.295,2.13 6.238,1.799 9.85,-0.482l10.755,9.974a45.304,45.304 0,0 0,-4.452 8.602c-0.453,1.174 -0.817,2.36 -1.168,3.547l-15.052,-3.383c-0.08,-4.409 -2.047,-8 -5.174,-8.703 -4.006,-0.9 -8.355,3.265 -9.713,9.305 -1.357,6.038 0.79,11.664 4.797,12.565 3.055,0.686 6.299,-1.582 8.273,-5.368l15.31,3.44a44.856,44.856 0,0 0,0.502 13.149l-14.43,5.29c-2.457,-3.663 -6.057,-5.616 -9.066,-4.513 -3.855,1.414 -5.254,7.271 -3.124,13.083 2.131,5.811 6.983,9.377 10.84,7.964 2.94,-1.078 4.437,-4.741 4.046,-8.995l13.908,-5.099a45.275,45.275 0,0 0,8.452 13.997l-9.927,13.28c-4.057,-1.727 -8.138,-1.399 -10.058,1.169 -2.459,3.29 -0.433,8.96 4.526,12.666 4.957,3.706 10.97,4.044 13.428,0.754 1.875,-2.508 1.129,-6.395 -1.52,-9.744l9.404,-12.582a45.148,45.148 0,0 0,11.61 6.599c0.23,0.088 0.465,0.144 0.696,0.228l-2.572,14.526c-4.4,0.284 -7.897,2.414 -8.455,5.57 -0.716,4.044 3.645,8.197 9.74,9.275 6.094,1.08 11.616,-1.324 12.332,-5.368 0.545,-3.083 -1.869,-6.219 -5.743,-8.018l2.455,-13.87c5.558,0.984 11.134,0.865 16.485,-0.188l4.945,15.028c-3.743,2.331 -5.815,5.862 -4.814,8.907 1.283,3.901 7.091,5.495 12.97,3.561 5.88,-1.935 9.606,-6.666 8.323,-10.567 -0.978,-2.974 -4.59,-4.593 -8.853,-4.345l-4.878,-14.824c4.68,-1.82 9.07,-4.368 12.928,-7.645l11.038,11.057c-2.293,3.767 -2.555,7.853 -0.291,10.122 2.902,2.906 8.805,1.717 13.187,-2.657 4.379,-4.372 5.579,-10.275 2.676,-13.18 -2.21,-2.216 -6.165,-2.037 -9.861,0.103l-11.154,-11.173c2.683,-3.264 4.926,-6.963 6.655,-11.036l14.338,4.104z\"\n        android:fillColor=\"#C6191B\"\n        android:fillType=\"evenOdd\"/>\n  </group>\n  <group>\n    <clip-path\n        android:pathData=\"M0,593.07h595.276L595.276,0.82L0,0.82z\"/>\n    <path\n        android:pathData=\"M360.584,199.24l-10.373,0.072 -0.27,-39.095c-3.766,3.57 -8.215,6.223 -13.347,7.957l-0.065,-9.415c2.7,-0.904 5.631,-2.604 8.788,-5.099 3.159,-2.495 5.316,-5.396 6.475,-8.702l8.416,-0.059 0.376,54.34z\"\n        android:fillColor=\"#FFF\"\n        android:fillType=\"evenOdd\"/>\n  </group>\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_face_mask.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"24dp\"\n    android:height=\"24dp\"\n    android:viewportWidth=\"24\"\n    android:viewportHeight=\"24\">\n  <path\n      android:pathData=\"M18.0784,15.045C18.8426,14.675 20.273,13.9107 21.7034,13.8365L21.7034,9.9157C20.273,9.7434 18.8426,9.0773 18.0784,8.7073L18.0784,15.045Z\"\n      android:strokeWidth=\"1\"\n      android:fillColor=\"#757575\"\n      android:fillType=\"evenOdd\"\n      android:strokeColor=\"#00000000\"/>\n  <path\n      android:pathData=\"M18.4728,15.8097C18.3005,15.8835 18.2016,15.9328 18.0043,16.0312L17.8562,16.1055C14.1082,18.2508 9.5462,18.2508 5.8716,16.1055L5.7239,16.0312C5.5758,15.9578 5.4278,15.8835 5.2555,15.8097C4.5647,15.5135 3.307,14.8232 2.0247,14.7489L2.0247,16.3274C2.0247,19.3112 4.4416,21.7282 7.4251,21.7282L16.3028,21.7282C19.2866,21.7282 21.7032,19.3112 21.7032,16.3274L21.7032,14.7489C20.4208,14.8232 19.1385,15.4151 18.4728,15.8097\"\n      android:strokeWidth=\"1\"\n      android:fillColor=\"#757575\"\n      android:fillType=\"evenOdd\"\n      android:strokeColor=\"#00000000\"/>\n  <path\n      android:pathData=\"M5.2554,7.9431C5.4035,7.8692 5.4773,7.82 5.6254,7.7458L5.8469,7.6223C9.5954,5.4773 14.1577,5.4773 17.8315,7.6223L18.1031,7.7458C18.1523,7.7704 18.3004,7.8442 18.4485,7.9185C19.1388,8.2142 20.3962,8.9046 21.6785,8.9785L21.6785,7.4008C21.6785,4.4165 19.2619,2 16.2781,2L7.4008,2C4.4169,2 2,4.4165 2,7.4008L2,8.9785C3.3073,8.9292 4.5896,8.2392 5.2554,7.9431\"\n      android:strokeWidth=\"1\"\n      android:fillColor=\"#757575\"\n      android:fillType=\"evenOdd\"\n      android:strokeColor=\"#00000000\"/>\n  <path\n      android:pathData=\"M2.0248,13.8367C3.4552,14.0093 4.8852,14.6751 5.6498,15.0451L5.6498,8.7074C4.8852,9.0774 3.4552,9.8417 2.0248,9.9159L2.0248,13.8367Z\"\n      android:strokeWidth=\"1\"\n      android:fillColor=\"#757575\"\n      android:fillType=\"evenOdd\"\n      android:strokeColor=\"#00000000\"/>\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_google_play_services.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"200dp\"\n    android:height=\"200dp\"\n    android:viewportWidth=\"585\"\n    android:viewportHeight=\"582\">\n    <path\n        android:fillColor=\"#C9E2F4\"\n        android:fillType=\"evenOdd\"\n        android:pathData=\"M553.171,291.813C553.171,436.791 435.643,554.319 290.665,554.319C145.688,554.319 28.159,436.791 28.159,291.813C28.159,146.835 145.688,29.308 290.665,29.308C435.643,29.308 553.171,146.835 553.171,291.813\" />\n    <path\n        android:fillColor=\"#E4F1F9\"\n        android:fillType=\"evenOdd\"\n        android:pathData=\"M292.041,552.978C147.75,552.978 30.779,436.007 30.779,291.716C30.779,147.426 147.75,30.455 292.041,30.455C436.331,30.455 553.302,147.426 553.302,291.716C553.302,436.007 436.331,552.978 292.041,552.978M292.041,2.153C132.119,2.153 2.478,131.795 2.478,291.716C2.478,451.637 132.119,581.28 292.041,581.28C451.962,581.28 581.603,451.637 581.603,291.716C581.603,131.795 451.962,2.153 292.041,2.153\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:fillType=\"evenOdd\"\n        android:pathData=\"M420.057,140.21C463.059,176.24 490.404,230.343 490.404,290.833C490.404,378.621 432.81,452.957 353.347,478.118\"\n        android:strokeWidth=\"16\"\n        android:strokeColor=\"#B9417E\"\n        android:strokeLineJoin=\"round\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:fillType=\"evenOdd\"\n        android:pathData=\"M159.525,434.004C121.392,398.176 97.576,347.286 97.576,290.833C97.576,224.878 130.085,166.515 179.954,130.895\"\n        android:strokeWidth=\"16\"\n        android:strokeColor=\"#B9417E\"\n        android:strokeLineCap=\"square\"\n        android:strokeLineJoin=\"round\" />\n    <path\n        android:fillColor=\"#334176\"\n        android:fillType=\"evenOdd\"\n        android:pathData=\"M355.745,426.813L232.015,426.597C223.991,426.584 217.499,420.068 217.514,412.045L218.013,125.931C218.026,117.909 224.541,111.417 232.563,111.43L356.294,111.646C364.317,111.66 370.809,118.175 370.795,126.198L370.296,412.312C370.282,420.334 363.767,426.827 355.745,426.813\" />\n    <path\n        android:fillColor=\"#E7F4FD\"\n        android:fillType=\"evenOdd\"\n        android:pathData=\"M370.321,398.543l-152.783,-0.267l0.467,-267.611l152.783,0.266z\" />\n    <group>\n        <clip-path android:pathData=\"M0,582.472l585.446,0l0,-582.472l-585.446,0z\" />\n        <path\n            android:fillColor=\"#A1A9CD\"\n            android:fillType=\"evenOdd\"\n            android:pathData=\"M234.083,322.445l123.072,0l0,-9.572l-123.072,0z\" />\n    </group>\n    <group>\n        <clip-path android:pathData=\"M0,582.472l585.446,0l0,-582.472l-585.446,0z\" />\n        <path\n            android:fillColor=\"#A1A9CD\"\n            android:fillType=\"evenOdd\"\n            android:pathData=\"M234.083,340.906l123.072,0l0,-9.572l-123.072,0z\" />\n    </group>\n    <group>\n        <clip-path android:pathData=\"M0,582.472l585.446,0l0,-582.472l-585.446,0z\" />\n        <path\n            android:fillColor=\"#A1A9CD\"\n            android:fillType=\"evenOdd\"\n            android:pathData=\"M234.083,359.367l123.072,0l0,-9.572l-123.072,0z\" />\n    </group>\n    <group>\n        <clip-path android:pathData=\"M0,582.472l585.446,0l0,-582.472l-585.446,0z\" />\n        <path\n            android:fillColor=\"#63B563\"\n            android:fillType=\"evenOdd\"\n            android:pathData=\"M254.581,186.864l8.984,27.596l42.797,25.178l37.248,-12.109l4.697,-29.836l-13.681,-6.103z\" />\n    </group>\n    <group>\n        <clip-path android:pathData=\"M0,582.472l585.446,0l0,-582.472l-585.446,0z\" />\n        <path\n            android:fillColor=\"#62B564\"\n            android:fillType=\"evenOdd\"\n            android:pathData=\"M306.363,239.639L348.307,197.693C348.307,197.693 348.524,191.268 346.214,189.536C343.904,187.803 341.738,186.792 341.738,186.792L310.117,186.792C310.117,186.792 306.218,187.514 304.63,184.626C303.042,181.738 304.342,178.561 304.342,178.561C304.379,178.572 310.177,172.654 309.072,165.956C308.422,162.01 307.802,159.689 304.954,156.777C303.453,155.242 301.527,154.264 299.745,153.624C288.396,149.557 281.906,160.273 281.906,160.273C281.906,160.273 277.051,169.033 283.91,177.191C290.768,185.348 280.373,186.865 280.373,186.865L254.582,186.865L306.363,239.639Z\" />\n    </group>\n    <group>\n        <clip-path android:pathData=\"M0,582.472l585.446,0l0,-582.472l-585.446,0z\" />\n        <path\n            android:fillColor=\"#E6374C\"\n            android:fillType=\"evenOdd\"\n            android:pathData=\"M306.363,239.639L254.683,292.055L341.059,292.055C341.059,292.055 344.224,291.748 346.266,288.889C348.308,286.031 348.308,281.845 348.308,281.845L306.363,239.639Z\" />\n    </group>\n    <group>\n        <clip-path android:pathData=\"M0,582.472l585.446,0l0,-582.472l-585.446,0z\" />\n        <path\n            android:fillColor=\"#FFD600\"\n            android:fillType=\"evenOdd\"\n            android:pathData=\"M306.363,239.639l41.945,42.206l-0.001,-84.152z\" />\n    </group>\n    <group>\n        <clip-path android:pathData=\"M0,582.472l585.446,0l0,-582.472l-585.446,0z\" />\n        <path\n            android:fillColor=\"#43BFEE\"\n            android:fillType=\"evenOdd\"\n            android:pathData=\"M254.581,186.864L249.68,186.864C249.68,186.864 245.902,186.791 243.963,188.935C241.25,191.933 241.103,193.836 241.103,193.836L241.103,224.364C241.103,224.364 241.103,229.162 244.575,229.775C248.047,230.387 250.701,228.55 250.701,228.55C250.701,228.55 257.644,222.424 265.097,225.691C272.55,228.958 273.878,235.084 273.878,235.084C273.878,235.084 276.736,245.906 269.385,250.399C262.034,254.891 258.154,253.564 258.154,253.564C258.154,253.564 253.458,252.543 251.109,250.603C249.68,248.663 247.332,248.255 247.332,248.255C247.332,248.255 241.103,247.948 241.103,253.053L241.103,283.683C241.103,283.683 241.41,288.992 244.882,290.625C248.352,292.259 249.578,291.953 249.578,291.953L254.683,292.055L306.362,239.638L254.581,186.864Z\" />\n    </group>\n    <group>\n        <clip-path android:pathData=\"M31.299,290.594C31.299,434.885 148.27,551.855 292.561,551.855L292.561,551.855C436.851,551.855 553.822,434.885 553.822,290.594L553.822,290.594C553.822,146.302 436.851,29.332 292.561,29.332L292.561,29.332C148.27,29.332 31.299,146.302 31.299,290.594\" />\n        <path\n            android:fillColor=\"#B9417E\"\n            android:fillType=\"evenOdd\"\n            android:pathData=\"M277.274,667.18C230.777,667.306 184.217,666.034 137.809,668.122C113.094,669.235 113.859,660.483 114.668,637.446C114.843,632.443 125.027,600.37 127.944,587.591C134.674,569.344 139.892,550.591 146.565,532.339C150.34,522.013 153.785,511.338 165.227,506.456C213.334,500.024 256.918,509.346 293.41,543.424C303.912,569.35 292.895,594.798 291.711,620.48C290.429,637.138 291.146,654.425 277.274,667.18\" />\n    </group>\n    <group>\n        <clip-path android:pathData=\"M31.299,290.594C31.299,434.885 148.27,551.855 292.561,551.855L292.561,551.855C436.851,551.855 553.822,434.885 553.822,290.594L553.822,290.594C553.822,146.302 436.851,29.332 292.561,29.332L292.561,29.332C148.27,29.332 31.299,146.302 31.299,290.594\" />\n        <path\n            android:fillColor=\"#2D2F62\"\n            android:fillType=\"evenOdd\"\n            android:pathData=\"M163.839,510.938C151.251,483.309 175.268,487.582 188.563,482.511C222.377,474.683 253.041,479.085 278.009,505.599C297.264,513.713 301.843,526.026 288.794,543.38C249.837,522.167 208.758,509.143 163.839,510.938\" />\n    </group>\n    <group>\n        <clip-path android:pathData=\"M31.299,290.594C31.299,434.885 148.27,551.855 292.561,551.855L292.561,551.855C436.851,551.855 553.822,434.885 553.822,290.594L553.822,290.594C553.822,146.302 436.851,29.332 292.561,29.332L292.561,29.332C148.27,29.332 31.299,146.302 31.299,290.594\" />\n        <path\n            android:fillColor=\"#E0A16F\"\n            android:fillType=\"evenOdd\"\n            android:pathData=\"M278.009,505.599C249.383,493.237 219.467,485.888 188.544,482.518C190.77,454.758 192.365,427.599 188.596,400.456C181.025,345.935 189.557,314.357 203.511,262.419C204.022,260.518 211.558,244.025 212.844,242.333C215.327,239.066 218.44,236.122 218.229,243.786C217.937,254.331 218.798,255.143 218.791,266.732C218.779,288.831 216.948,313.378 219.985,335.339C220.017,335.573 229.59,331.159 229.997,330.812C231.288,329.716 232.248,328.26 233.24,326.69C244.651,311.443 254.461,295.104 267.867,281.628C275.215,274.242 283.471,266.544 294.932,271.891C305.505,276.824 296.865,289.157 292.068,298.739C285.04,312.773 276.768,326.831 268.378,341.122C261.741,352.43 256.736,360.073 254.016,380.622C248.271,401.33 254.904,410.909 254.395,426.711C266.502,427.265 307.462,427.01 311.928,427.01C309.127,456.343 287.666,479.373 278.009,505.599\" />\n    </group>\n    <path\n        android:fillColor=\"#00000000\"\n        android:fillType=\"evenOdd\"\n        android:pathData=\"M418.866,207.417l0,-67.599l68.228,0\"\n        android:strokeWidth=\"16\"\n        android:strokeColor=\"#B9417E\"\n        android:strokeLineCap=\"round\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:fillType=\"evenOdd\"\n        android:pathData=\"M165.121,368.977l0,67.598l-68.228,0\"\n        android:strokeWidth=\"16\"\n        android:strokeColor=\"#B9417E\"\n        android:strokeLineCap=\"round\" />\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_help.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"24dp\"\n    android:height=\"24dp\"\n    android:viewportWidth=\"24\"\n    android:viewportHeight=\"24\"\n    android:tint=\"?attr/colorOnSurface\">\n  <path\n      android:fillColor=\"@android:color/black\"\n      android:pathData=\"M12,2C6.48,2 2,6.48 2,12s4.48,10 10,10 10,-4.48 10,-10S17.52,2 12,2zM13,19h-2v-2h2v2zM15.07,11.25l-0.9,0.92C13.45,12.9 13,13.5 13,15h-2v-0.5c0,-1.1 0.45,-2.1 1.17,-2.83l1.24,-1.26c0.37,-0.36 0.59,-0.86 0.59,-1.41 0,-1.1 -0.9,-2 -2,-2s-2,0.9 -2,2L8,9c0,-2.21 1.79,-4 4,-4s4,1.79 4,4c0,0.88 -0.36,1.68 -0.93,2.25z\"/>\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_home.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"24dp\"\n    android:height=\"24dp\"\n    android:viewportWidth=\"24\"\n    android:viewportHeight=\"24\"\n    android:tint=\"?attr/colorControlNormal\">\n  <path\n      android:fillColor=\"@android:color/white\"\n      android:pathData=\"M10,20v-6h4v6h5v-8h3L12,3 2,12h3v8z\"/>\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_hospitalized.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"24dp\"\n    android:height=\"24dp\"\n    android:viewportWidth=\"24\"\n    android:viewportHeight=\"24\">\n  <path\n      android:pathData=\"M17.7143,2C20.0812,2 22,3.9188 22,6.2857V17.7143C22,20.0812 20.0812,22 17.7143,22H6.2857C3.9188,22 2,20.0812 2,17.7143V6.2857C2,3.9188 3.9188,2 6.2857,2H17.7143ZM9.1429,5.5714H7C6.6055,5.5714 6.2857,5.8912 6.2857,6.2857V17.7143C6.2857,18.1088 6.6055,18.4286 7,18.4286H9.1429C9.5373,18.4286 9.8571,18.1088 9.8571,17.7143V13.4279L14.1429,13.4286V17.7143C14.1429,18.1088 14.4627,18.4286 14.8571,18.4286H17C17.3945,18.4286 17.7143,18.1088 17.7143,17.7143V6.2857C17.7143,5.8912 17.3945,5.5714 17,5.5714H14.8571C14.4627,5.5714 14.1429,5.8912 14.1429,6.2857V9.8571L9.8571,9.8564V6.2857C9.8571,5.8912 9.5373,5.5714 9.1429,5.5714Z\"\n      android:fillColor=\"#757575\"\n      android:fillType=\"evenOdd\"/>\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_how_it_works_banner.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:aapt=\"http://schemas.android.com/aapt\"\n    android:width=\"66dp\"\n    android:height=\"59dp\"\n    android:viewportWidth=\"66\"\n    android:viewportHeight=\"59\">\n  <path\n      android:pathData=\"M0,44.7079C0,32.5637 9.6011,38.6354 13.1513,31.2836C16.7015,23.9318 18.6378,14.848 45.786,26.402C63.5646,33.9685 66,35.7367 66,47.8809C66,60.0251 37.6895,58.8644 25.572,58.8644C13.4544,58.8644 0,56.8521 0,44.7079Z\"\n      android:fillType=\"evenOdd\">\n    <aapt:attr name=\"android:fillColor\">\n      <gradient \n          android:gradientRadius=\"48.54642\"\n          android:centerX=\"11.474911\"\n          android:centerY=\"4.166483\"\n          android:type=\"radial\">\n        <item android:offset=\"0\" android:color=\"#FFFFFFFF\"/>\n        <item android:offset=\"1\" android:color=\"#FFC9E2F4\"/>\n      </gradient>\n    </aapt:attr>\n  </path>\n  <group>\n    <clip-path\n        android:pathData=\"M0,44.6202C0,36.474 0,21.6006 0,0L66,0C66,23.729 66,39.6666 66,47.8128C66,60.0321 37.6895,58.8642 25.572,58.8642C13.4544,58.8642 0,56.8395 0,44.6202Z\"/>\n    <path\n        android:pathData=\"M28.872,46.955l9.254,0l0,-6.836l-9.254,0z\"\n        android:fillColor=\"#E0A16F\"\n        android:fillType=\"evenOdd\"/>\n    <path\n        android:pathData=\"M53.9638,60.9992C53.9647,58.8988 53.8347,56.8245 53.2286,54.7982C52.4812,52.2995 50.2951,49.2486 47.5879,48.5232C47.572,48.5188 34.4219,44.9955 33.5241,44.755L33.5241,44.7416C33.5241,44.7416 33.5139,44.7444 33.4994,44.7482C33.4846,44.7444 33.4747,44.7416 33.4747,44.7416L33.4747,44.755C32.5768,44.9955 19.4265,48.5188 19.4108,48.5232C16.7037,49.2486 14.5175,52.2995 13.7702,54.7982C13.164,56.8245 13.0341,58.8988 13.0347,60.9992C13.0347,61.2654 19.6904,62.5401 19.6876,62.5401C19.6883,62.5401 31.8796,64.8346 33.4462,64.8346L33.5527,64.8346C35.1193,64.8346 51.1908,59.8597 51.1917,59.8597C51.189,59.8597 53.9638,61.2654 53.9638,60.9992\"\n        android:fillColor=\"#E0A16F\"\n        android:fillType=\"evenOdd\"/>\n    <group>\n      <clip-path\n          android:pathData=\"M13.035,45.974l40.929,0l0,21.557l-40.929,0z\"/>\n      <path\n          android:pathData=\"M38.1615,46.0068C39.0591,46.2475 47.5719,48.5185 47.5879,48.5229C50.2951,49.2483 52.4812,52.2994 53.2286,54.7981C53.8348,56.8243 53.9647,58.8985 53.9638,60.999C53.9638,61.2653 52.7688,61.1535 52.7716,61.1535C52.7707,61.1535 35.1045,67.5306 33.538,67.5306C33.538,67.5306 33.6058,67.5306 33.538,67.5306C31.9714,67.5306 15.0418,61.6156 15.041,61.6156C15.0437,61.6156 13.0347,61.2653 13.0347,60.999C13.0341,58.8985 13.1641,56.8243 13.7702,54.7981C14.5175,52.2994 16.7038,49.2483 19.4108,48.5229C19.4265,48.5185 27.9768,46.2146 28.8746,45.9739L28.9184,46.0069C31.6505,48.0697 35.4296,48.0696 38.1615,46.0068\"\n          android:fillColor=\"#2B2F62\"\n          android:fillType=\"evenOdd\"/>\n    </group>\n    <path\n        android:pathData=\"M28.8724,40.7645C28.8724,41.4069 28.8724,42.0491 28.871,42.6915C28.8686,43.9997 29.1614,44.7699 30.2725,45.4685C31.1956,46.0488 32.4025,46.3871 33.4916,46.1793C34.6842,45.9521 35.459,45.002 36.2164,44.1435C36.5628,43.7512 36.8883,43.3412 37.1893,42.9131C37.2997,42.756 38.0407,41.3914 38.1282,41.3974C38.1259,41.3974 28.8724,40.7645 28.8724,40.7645\"\n        android:fillColor=\"#AD7E59\"\n        android:fillType=\"evenOdd\"/>\n    <path\n        android:pathData=\"M37.3741,41.9783C37.3782,41.9747 37.3826,41.9711 37.387,41.9677C42.675,37.9689 43.2124,35.6606 43.2124,29.2502C43.2124,21.4568 38.864,16.9796 33.4994,16.9796C28.1347,16.9796 23.7862,21.4568 23.7862,29.2502C23.7862,35.6864 24.4038,38.2946 29.5122,41.9546C29.521,41.961 29.5296,41.9678 29.5375,41.9754C29.7624,42.1837 33.4199,45.4638 37.3741,41.9783\"\n        android:fillColor=\"#E0A16F\"\n        android:fillType=\"evenOdd\"/>\n    <path\n        android:pathData=\"M42.908,33.2246C42.9076,33.2349 42.9063,33.2457 42.9048,33.2559 42.7345,34.2872 43.2642,34.0562 43.2642,34.0562 44.5027,33.8355 44.4885,29.9903 44.4835,29.5818 44.4832,29.5587 44.48,29.5348 44.4739,29.5124 44.0892,28.0863 43.2032,29.9025 43.0496,30.235 43.0343,30.2678 43.0258,30.3029 43.0244,30.339L42.908,33.2246zM24.0226,33.2245C24.0231,33.2349 24.0243,33.2457 24.0259,33.2559 24.1961,34.2872 23.6668,34.0562 23.6668,34.0562 22.4282,33.8355 22.4424,29.9902 22.4474,29.5818 22.4477,29.5587 22.4508,29.5349 22.4569,29.5125 22.8415,28.0863 23.7277,29.9025 23.8814,30.235 23.8966,30.2678 23.905,30.3029 23.9065,30.3391L24.0226,33.2245z\"\n        android:fillColor=\"#E0A16F\"\n        android:fillType=\"evenOdd\"/>\n    <path\n        android:pathData=\"M28.8539,16.5443C28.1328,16.5521 25.304,16.8083 23.5649,20.2213C23.5622,20.2266 23.56,20.2311 23.5576,20.2364C23.4598,20.455 21.3029,25.4201 24.0701,31.8165C24.1293,31.953 24.2884,32.0173 24.4275,31.9621C24.5401,31.9173 24.6103,31.8056 24.6007,31.6853C24.4802,30.1831 23.9784,20.734 30.3083,19.7521C30.4972,19.7228 30.6025,19.5197 30.5134,19.3517L29.1015,16.6912C29.053,16.5998 28.9579,16.5432 28.8539,16.5443\"\n        android:fillColor=\"#522D1E\"\n        android:fillType=\"evenOdd\"/>\n    <path\n        android:pathData=\"M25.4068,17.7486C26.6151,13.8451 38.6084,11.2591 43.893,20.7055C43.8969,20.7123 43.8999,20.7189 43.903,20.7262C44.0091,20.9798 45.9805,25.8587 43.1076,31.7519C43.0546,31.8604 42.9356,31.9219 42.8157,31.9036L42.2397,31.8154C42.0606,31.7881 41.9551,31.6003 42.0272,31.435C42.4118,30.5536 43.3769,27.4987 41.6289,24.346C40.7748,22.8056 39.8681,21.766 36.4017,20.6168C32.5963,19.3553 31.7737,19.5116 30.6998,19.7031C30.6998,19.7031 26.1884,20.18 25.4135,17.8941C25.3976,17.8473 25.3922,17.7959 25.4068,17.7486\"\n        android:fillColor=\"#683A29\"\n        android:fillType=\"evenOdd\"/>\n    <path\n        android:pathData=\"M35.4298,27.2833C35.601,26.971 38.2585,27.075 38.6973,27.1597C39.5848,27.3303 40.9425,27.9815 40.7898,28.1677C40.638,28.3539 39.2059,27.7792 38.2169,27.7735C37.7638,27.771 35.9747,28.2992 35.7242,28.1874C35.4745,28.0749 35.2576,27.5963 35.4298,27.2833\"\n        android:fillColor=\"#683A29\"\n        android:fillType=\"evenOdd\"/>\n    <path\n        android:pathData=\"M38.9561,29.9179C38.9561,30.317 38.6308,30.6404 38.2296,30.6404 37.8285,30.6404 37.5032,30.317 37.5032,29.9179 37.5032,29.5189 37.8285,29.1954 38.2296,29.1954 38.6308,29.1954 38.9561,29.5189 38.9561,29.9179M29.3439,29.9179C29.3439,30.317 29.0187,30.6404 28.6175,30.6404 28.2164,30.6404 27.8911,30.317 27.8911,29.9179 27.8911,29.5189 28.2164,29.1954 28.6175,29.1954 29.0187,29.1954 29.3439,29.5189 29.3439,29.9179\"\n        android:fillColor=\"#1F3572\"\n        android:fillType=\"evenOdd\"/>\n    <path\n        android:pathData=\"M31.7893,27.2104C31.6093,26.9031 28.9558,27.0818 28.5196,27.1789C27.6372,27.3743 26.2987,28.0634 26.4564,28.2453C26.6135,28.4271 28.0287,27.8123 29.0172,27.7789C29.47,27.7635 31.2735,28.2414 31.5206,28.1224C31.7671,28.0031 31.9702,27.5185 31.7893,27.2104\"\n        android:fillColor=\"#683A29\"\n        android:fillType=\"evenOdd\"/>\n    <path\n        android:pathData=\"M34.446,37.4811C34.5462,37.3851 34.7057,37.388 34.8023,37.4876C34.8578,37.5448 34.9083,37.6031 34.9541,37.6625C35.4222,38.2707 35.3658,38.8868 34.9907,39.5786L34.9643,39.6264L34.7785,39.9429L34.7377,40.0146L34.7254,40.0377L34.7219,40.0451C34.6668,40.1721 34.5185,40.2307 34.3907,40.1759C34.263,40.1211 34.2041,39.9736 34.2592,39.8465L34.264,39.8359L34.278,39.8084L34.2967,39.7736L34.3192,39.7331L34.3854,39.6178L34.529,39.3737C34.8362,38.8217 34.882,38.3935 34.5539,37.9672C34.5199,37.9231 34.4819,37.8792 34.4395,37.8355C34.3429,37.7359 34.3458,37.5772 34.446,37.4811Z\"\n        android:fillColor=\"#AD7E59\"\n        android:fillType=\"nonZero\"/>\n    <path\n        android:pathData=\"M22.2067,25.9997C22.5569,25.9997 22.8035,25.692 22.9467,25.0766C23.4689,25.172 23.7978,25.0695 23.9334,24.769C24.0741,24.4571 23.9919,24.2007 23.6867,23.9997C23.8492,23.7571 23.8492,23.5007 23.6867,23.2305C23.44,22.8202 23.07,22.6151 22.5767,22.6151C22.3503,22.2049 22.1447,21.9997 21.96,21.9997C21.5489,21.9997 21.2611,22.1536 21.0967,22.4613C20.664,22.2121 20.294,22.2634 19.9867,22.6151C19.8096,22.8178 19.7274,23.0229 19.74,23.2305C19.2467,23.2305 19,23.4869 19,23.9997C19,24.5125 19.3289,24.769 19.9867,24.769C19.9867,25.2818 20.1922,25.5382 20.6033,25.5382C21.0145,25.5382 21.3022,25.3843 21.4667,25.0766C21.7347,25.692 21.9814,25.9997 22.2067,25.9997Z\"\n        android:fillColor=\"#E6235C\"\n        android:fillType=\"evenOdd\"/>\n    <path\n        android:pathData=\"M21.8815,21.2459C24.0527,21.2459 25.582,20.2356 26.4696,18.2148C29.707,18.7718 31.7462,18.1729 32.587,16.418C33.4594,14.597 32.9497,13.0996 31.0576,11.9258C32.065,10.5091 32.065,9.0117 31.0576,7.4336C29.5283,5.0377 27.2343,3.8398 24.1756,3.8398C23.8897,1.4297 22.6153,0.2318 20.3522,0.2459C17.8034,0.2621 16.0191,1.1606 14.9995,2.9414C12.3168,1.4863 10.0228,1.7858 8.1174,3.8398C7.0195,5.0234 6.5097,6.2213 6.588,7.4336C3.5293,7.4336 2,8.931 2,11.9258C2,14.9206 4.0391,16.418 8.1174,16.418C8.1174,19.4128 9.3919,20.9102 11.9408,20.9102C14.4897,20.9102 16.2739,20.0117 17.2935,18.2148C18.9554,20.2356 20.4847,21.2459 21.8815,21.2459Z\"\n        android:fillColor=\"#E6235C\"\n        android:fillType=\"evenOdd\"/>\n    <group>\n      <clip-path\n          android:pathData=\"M21.8815,21.2459C24.0527,21.2459 25.582,20.2356 26.4696,18.2148C29.707,18.7718 31.7462,18.1729 32.587,16.418C33.4594,14.597 32.9497,13.0996 31.0576,11.9258C32.065,10.5091 32.065,9.0117 31.0576,7.4336C29.5283,5.0377 27.2343,3.8398 24.1756,3.8398C23.8897,1.4297 22.6153,0.2318 20.3522,0.2459C17.8034,0.2621 16.0191,1.1606 14.9995,2.9414C12.3168,1.4863 10.0228,1.7858 8.1174,3.8398C7.0195,5.0234 6.5097,6.2213 6.588,7.4336C3.5293,7.4336 2,8.931 2,11.9258C2,14.9206 4.0391,16.418 8.1174,16.418C8.1174,19.4128 9.3919,20.9102 11.9408,20.9102C14.4897,20.9102 16.2739,20.0117 17.2935,18.2148C18.9554,20.2356 20.4847,21.2459 21.8815,21.2459Z\"/>\n      <path\n          android:pathData=\"M26.9191,7.2264L26.9191,15.5299C26.9191,18.313 24.597,20.5694 21.7326,20.5694L13.1868,20.5694C10.3223,20.5694 8.0003,18.313 8.0003,15.5299L8.0003,7.2264C8.0003,4.4431 10.3223,2.1868 13.1868,2.1868L21.7328,2.1868C24.5973,2.1871 26.9191,4.4433 26.9191,7.2264\"\n          android:fillColor=\"#E6235C\"\n          android:fillType=\"evenOdd\"/>\n      <path\n          android:pathData=\"M17.102,20.554l9.97,0l4.928,-3.265l-8.547,-8.942l-12.063,6.705z\"\n          android:fillColor=\"#DE0051\"\n          android:fillType=\"evenOdd\"/>\n      <path\n          android:pathData=\"M17.4594,5.6181C14.6325,5.6181 12.1922,7.099 12.167,7.114L12.167,11.0365L12.167,12.8039L12.167,14.9588C12.1914,14.9735 14.6177,16.4402 17.4193,16.4544L17.4599,16.6479L22.7524,14.9588L22.7524,12.8042L22.7524,7.114C22.7284,7.0993 20.2781,5.6181 17.4594,5.6181\"\n          android:fillColor=\"#BCE0E3\"\n          android:fillType=\"evenOdd\"/>\n      <path\n          android:pathData=\"M22.848,7.1141L22.848,9.2687L16.6556,8.5208L17.4059,5.6182C20.3029,5.6185 22.8225,7.0996 22.848,7.1141\"\n          android:fillColor=\"#A1D6DA\"\n          android:fillType=\"evenOdd\"/>\n      <path\n          android:pathData=\"M22.8475,12.8044L22.8475,14.9587L17.4064,16.648L16.6559,13.1648C16.6559,13.1648 22.8095,12.8154 22.8475,12.8044\"\n          android:fillColor=\"#BCE0E3\"\n          android:fillType=\"evenOdd\"/>\n      <path\n          android:pathData=\"M16.6556,10.6493L17.4058,13.5518C19.2429,13.5369 21.0707,13.2856 22.8472,12.8039L22.8472,11.0362C22.8225,11.0362 16.6556,10.6493 16.6556,10.6493\"\n          android:fillColor=\"#A1D6DA\"\n          android:fillType=\"evenOdd\"/>\n      <path\n          android:pathData=\"M22.848,9.269L22.848,11.0364L16.6556,11.0364L17.4059,8.5204C19.2429,8.5358 21.0712,8.7873 22.848,9.269\"\n          android:fillColor=\"#BCE0E3\"\n          android:fillType=\"evenOdd\"/>\n      <path\n          android:pathData=\"M17.5184,13.5517L17.5184,16.4543C14.6206,16.4543 12.1024,14.9731 12.0765,14.9584L12.0765,12.8036L17.5184,13.5517Z\"\n          android:fillColor=\"#DDEFF1\"\n          android:fillType=\"evenOdd\"/>\n      <path\n          android:pathData=\"M17.5184,5.6185L17.5184,8.521L12.0772,9.2687L12.0772,7.1144C13.7535,6.1867 15.6167,5.6746 17.5184,5.6185\"\n          android:fillColor=\"#BCE0E3\"\n          android:fillType=\"evenOdd\"/>\n      <path\n          android:pathData=\"M17.5184,8.5209L17.5184,11.037L14.7978,11.8111L12.077,11.037L12.077,9.2693C13.8535,8.7876 15.6815,8.5361 17.5184,8.5209\"\n          android:fillColor=\"#DDEFF1\"\n          android:fillType=\"evenOdd\"/>\n      <path\n          android:pathData=\"M12.077,11.0363L12.077,12.8037C13.8535,13.2852 15.6817,13.5364 17.5188,13.5516L17.5188,11.0358L12.077,11.0363Z\"\n          android:fillColor=\"#BCE0E3\"\n          android:fillType=\"evenOdd\"/>\n      <path\n          android:pathData=\"M22.6327,14.6754C19.4189,16.532 15.5001,16.532 12.2865,14.6754L12.2865,7.3978C15.5001,5.5415 19.4189,5.5415 22.6327,7.3978L22.6327,14.6754ZM23.3899,14.1401L23.3718,14.1494L23.3718,7.929L23.3899,7.938C24.1226,8.3132 25.5169,9.0119 26.9194,9.1143L26.9194,8.2243C25.682,8.1322 24.4441,7.4877 23.763,7.1387C23.6046,7.0576 23.4782,6.9932 23.3721,6.945L23.3721,6.9428L23.1882,6.8309C19.6495,4.6968 15.27,4.6968 11.7315,6.8309L11.5472,6.9428L11.5472,6.945C11.441,6.993 11.3149,7.0576 11.1565,7.1387C10.4753,7.4872 9.2375,8.1359 8.0001,8.2265L8.0001,9.1145C9.4023,9.0117 10.7974,8.3135 11.5294,7.9383L11.5472,7.9295L11.5472,14.1487L11.5294,14.1396C10.7964,13.7644 9.4023,13.0655 8.0001,12.9636L8.0001,13.8516C9.2375,13.9437 10.4753,14.5907 11.1563,14.9394C11.3275,15.0271 11.4619,15.0957 11.5728,15.1447L11.7308,15.2407C15.2693,17.3749 19.649,17.3749 23.1878,15.2407L23.3457,15.1447C23.4571,15.0954 23.5913,15.0271 23.7623,14.9394C24.4432,14.5907 25.6815,13.9422 26.9189,13.8516L26.9189,12.9636C25.5169,13.0669 24.1226,13.7651 23.3899,14.1401L23.3899,14.1401Z\"\n          android:fillColor=\"#FFF\"\n          android:fillType=\"evenOdd\"/>\n    </group>\n  </group>\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_injection_complete.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"20dp\"\n    android:height=\"20dp\"\n    android:viewportWidth=\"20\"\n    android:viewportHeight=\"20\">\n  <path\n      android:pathData=\"M7.3246,2.1191C7.4421,2.1191 7.5205,2.1465 7.6068,2.2209C7.7558,2.3426 7.7988,2.5346 7.7166,2.6916C7.6813,2.7542 7.5205,2.9385 7.3597,3.0993C7.195,3.2601 7.0617,3.4091 7.0617,3.4326C7.0617,3.4522 9.0378,5.4481 11.449,7.8634L15.8402,12.2552L15.8678,12.4866C15.9031,12.8081 15.86,13.5728 15.7853,13.8787C15.7539,14.0158 15.6794,14.2434 15.6206,14.3846L15.5188,14.6434L16.1147,15.2197C16.4871,15.5844 16.7067,15.8274 16.7067,15.8746C16.7067,15.9176 16.6595,16.0117 16.6008,16.0785L16.4989,16.204L18.2475,17.9528C19.4394,19.1446 20.0002,19.7328 20.0002,19.7876C20.0002,19.8856 19.8827,19.9995 19.7806,19.9995C19.736,19.9995 19.1179,19.4083 18.1228,18.4157L16.2049,16.4979L16.0794,16.5999C16.0126,16.6587 15.9265,16.7058 15.8912,16.7058C15.8598,16.7058 15.5619,16.4393 15.2325,16.1138L14.6367,15.5217L14.3818,15.6238C14.2447,15.6787 14.0171,15.7532 13.88,15.7846C13.586,15.8591 12.7273,15.9062 12.4489,15.867L12.2569,15.8397L10.9849,14.5679C10.7735,11.5954 8.3968,9.2215 5.4231,9.0144C4.2383,7.8384 3.4475,7.0597 3.4352,7.0597C3.4117,7.0597 3.2625,7.193 3.1019,7.3577C2.9412,7.5185 2.7569,7.6791 2.6942,7.7144C2.4355,7.8516 2.1218,7.6361 2.1218,7.3224L2.1218,7.1577L4.6428,4.6403L7.1599,2.1191L7.3246,2.1191ZM12.6683,11.1768C12.6595,11.1768 12.4633,11.3643 12.1937,11.6318L11.9039,11.9219L11.9039,11.9219L11.1589,12.667L11.3862,12.8905L11.6096,13.1179L12.3626,12.365L13.1193,11.6083L12.9036,11.3925C12.786,11.275 12.6801,11.1768 12.6683,11.1768ZM10.8648,9.3732C10.853,9.3732 10.5081,9.7064 10.1004,10.1181L9.3554,10.8632L9.5829,11.0866L9.8063,11.314L10.5591,10.5611L11.3158,9.8044L11.1001,9.5887C10.9825,9.4711 10.8766,9.3732 10.8648,9.3732ZM9.0611,7.5693C9.0523,7.5693 8.8562,7.7569 8.5867,8.0243L7.5519,9.0595L7.7792,9.283L8.0026,9.5103L9.5121,8.0007L9.2964,7.785C9.1789,7.6675 9.0729,7.5693 9.0611,7.5693ZM7.2576,5.7656C7.2458,5.7656 6.9012,6.0991 6.4932,6.5107L5.7482,7.2558L5.9757,7.4793L6.1992,7.7067L6.952,6.9538L7.7086,6.1971L7.4929,5.9814C7.3754,5.8638 7.2695,5.7656 7.2576,5.7656ZM3.7135,0.135C3.8233,0.2448 3.8468,0.2997 3.8468,0.433C3.8468,0.5899 3.8272,0.6212 3.486,0.9701L3.1252,1.3387L4.1916,2.4052L5.2581,3.4718L4.3679,4.3658L3.474,5.2561L1.3411,3.123L0.9726,3.4838C0.6236,3.825 0.5922,3.8446 0.4355,3.8446C0.3022,3.8446 0.2473,3.8212 0.1376,3.7114C-0.0153,3.5585 -0.039,3.3781 0.067,3.2173C0.161,3.0761 2.976,0.2489 3.1564,0.1156C3.3723,-0.0454 3.5411,-0.0376 3.7135,0.135Z\"\n      android:fillColor=\"#757575\"\n      android:fillType=\"nonZero\"/>\n  <path\n      android:pathData=\"M5,10C7.7614,10 10,12.2386 10,15C10,17.7614 7.7614,20 5,20C2.2386,20 0,17.7614 0,15C0,12.2386 2.2386,10 5,10ZM7.1728,12.8941L3.6339,16.8305L2.3828,15.4388C2.2434,15.2837 2.0217,15.2837 1.8823,15.4388C1.7429,15.5939 1.7429,15.8404 1.8823,15.9955L3.3801,17.6615C3.5195,17.8165 3.7447,17.8165 3.8841,17.6615L7.6732,13.4507C7.8126,13.2957 7.8126,13.0491 7.6732,12.8941C7.5338,12.739 7.3122,12.739 7.1728,12.8941Z\"\n      android:fillColor=\"#757575\"\n      android:fillType=\"evenOdd\"/>\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_injection_first.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"20dp\"\n    android:height=\"20dp\"\n    android:viewportWidth=\"20\"\n    android:viewportHeight=\"20\">\n  <path\n      android:pathData=\"M7.3246,2.1191C7.4421,2.1191 7.5205,2.1465 7.6068,2.2209C7.7558,2.3426 7.7988,2.5346 7.7166,2.6916C7.6813,2.7542 7.5205,2.9385 7.3597,3.0993C7.195,3.2601 7.0617,3.4091 7.0617,3.4326C7.0617,3.4522 9.0378,5.4481 11.449,7.8634L15.8402,12.2552L15.8678,12.4866C15.9031,12.8081 15.86,13.5728 15.7853,13.8787C15.7539,14.0158 15.6794,14.2434 15.6206,14.3846L15.5188,14.6434L16.1147,15.2197C16.4871,15.5844 16.7067,15.8274 16.7067,15.8746C16.7067,15.9176 16.6595,16.0117 16.6008,16.0785L16.4989,16.204L18.2475,17.9528C19.4394,19.1446 20.0002,19.7328 20.0002,19.7876C20.0002,19.8856 19.8827,19.9995 19.7806,19.9995C19.736,19.9995 19.1179,19.4083 18.1228,18.4157L16.2049,16.4979L16.0794,16.5999C16.0126,16.6587 15.9265,16.7058 15.8912,16.7058C15.8598,16.7058 15.5619,16.4393 15.2325,16.1138L14.6367,15.5217L14.3818,15.6238C14.2447,15.6787 14.0171,15.7532 13.88,15.7846C13.586,15.8591 12.7273,15.9062 12.4489,15.867L12.2569,15.8397L10.9849,14.5679C10.7735,11.5954 8.3968,9.2215 5.4231,9.0144C4.2383,7.8384 3.4475,7.0597 3.4352,7.0597C3.4117,7.0597 3.2625,7.193 3.1019,7.3577C2.9412,7.5185 2.7569,7.6791 2.6942,7.7144C2.4355,7.8516 2.1218,7.6361 2.1218,7.3224L2.1218,7.1577L4.6428,4.6403L7.1599,2.1191L7.3246,2.1191ZM12.6683,11.1768C12.6595,11.1768 12.4633,11.3643 12.1937,11.6318L11.9039,11.9219L11.9039,11.9219L11.1589,12.667L11.3862,12.8905L11.6096,13.1179L12.3626,12.365L13.1193,11.6083L12.9036,11.3925C12.786,11.275 12.6801,11.1768 12.6683,11.1768ZM10.8648,9.3732C10.853,9.3732 10.5081,9.7064 10.1004,10.1181L9.3554,10.8632L9.5829,11.0866L9.8063,11.314L10.5591,10.5611L11.3158,9.8044L11.1001,9.5887C10.9825,9.4711 10.8766,9.3732 10.8648,9.3732ZM9.0611,7.5693C9.0523,7.5693 8.8562,7.7569 8.5867,8.0243L7.5519,9.0595L7.7792,9.283L8.0026,9.5103L9.5121,8.0007L9.2964,7.785C9.1789,7.6675 9.0729,7.5693 9.0611,7.5693ZM7.2576,5.7656C7.2458,5.7656 6.9012,6.0991 6.4932,6.5107L5.7482,7.2558L5.9757,7.4793L6.1992,7.7067L6.952,6.9538L7.7086,6.1971L7.4929,5.9814C7.3754,5.8638 7.2695,5.7656 7.2576,5.7656ZM3.7135,0.135C3.8233,0.2448 3.8468,0.2997 3.8468,0.433C3.8468,0.5899 3.8272,0.6212 3.486,0.9701L3.1252,1.3387L4.1916,2.4052L5.2581,3.4718L4.3679,4.3658L3.474,5.2561L1.3411,3.123L0.9726,3.4838C0.6236,3.825 0.5922,3.8446 0.4355,3.8446C0.3022,3.8446 0.2473,3.8212 0.1376,3.7114C-0.0153,3.5585 -0.039,3.3781 0.067,3.2173C0.161,3.0761 2.976,0.2489 3.1564,0.1156C3.3723,-0.0454 3.5411,-0.0376 3.7135,0.135Z\"\n      android:fillColor=\"#757575\"\n      android:fillType=\"nonZero\"/>\n  <path\n      android:pathData=\"M5,10C7.7614,10 10,12.2386 10,15C10,17.7614 7.7614,20 5,20C2.2386,20 0,17.7614 0,15C0,12.2386 2.2386,10 5,10ZM5.4063,12.293C5.2461,12.293 5.1523,12.332 4.9336,12.4883L3.7266,13.3516C3.5781,13.457 3.5313,13.5391 3.5313,13.6641C3.5313,13.8359 3.6445,13.9531 3.8086,13.9531C3.8945,13.9531 3.9688,13.9258 4.0469,13.8711L5.1016,13.1328L5.1172,13.1328L5.1172,17.707C5.1172,17.9219 5.2578,18.0703 5.457,18.0703C5.6563,18.0703 5.7969,17.9219 5.7969,17.707L5.7969,12.6875C5.7969,12.4414 5.6484,12.293 5.4063,12.293Z\"\n      android:fillColor=\"#757575\"\n      android:fillType=\"evenOdd\"/>\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_item_empty.xml",
    "content": "<vector android:height=\"59.694595dp\" android:viewportHeight=\"582.47\"\n    android:viewportWidth=\"585.45\" android:width=\"60dp\" xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <path android:fillColor=\"#c9e2f4\" android:pathData=\"M292.69,292.17m-262.51,0a262.51,262.51 0,1 1,525.02 0a262.51,262.51 0,1 1,-525.02 0\"/>\n    <path android:fillColor=\"#e4f1f9\" android:pathData=\"M87.91,86.69c-113.08,113.08 -113.08,296.42 0,409.5s296.42,113.08 409.5,0 113.08,-296.42 0,-409.5S201,-26.4 87.91,86.69ZM477.4,476.18c-102,102 -267.45,102 -369.48,0s-102,-267.45 0,-369.48 267.45,-102 369.48,0S579.43,374.15 477.4,476.18Z\"/>\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_launcher_background.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"108dp\"\n    android:height=\"108dp\"\n    android:viewportWidth=\"108\"\n    android:viewportHeight=\"108\">\n  <group android:scaleX=\"0.2109375\"\n      android:scaleY=\"0.2109375\">\n    <path\n        android:pathData=\"M0,0h512v512h-512z\"\n        android:fillColor=\"#EE225B\"/>\n  </group>\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_launcher_foreground.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"108dp\"\n    android:height=\"108dp\"\n    android:viewportWidth=\"108\"\n    android:viewportHeight=\"108\">\n  <group android:scaleX=\"0.14132813\"\n      android:scaleY=\"0.14132813\"\n      android:translateX=\"17.82\"\n      android:translateY=\"17.82\">\n    <group>\n      <clip-path\n          android:pathData=\"M0,0h512v512h-512z\"/>\n      <path\n          android:pathData=\"M96,360.4l151.6,151.6l264.4,0l0,-240.7l-96,-95.6l-320,184.7\"\n          android:fillColor=\"#E01A53\"/>\n    </group>\n    <group>\n      <clip-path\n          android:pathData=\"M0,0h512v512h-512z\"/>\n      <path\n          android:pathData=\"M405.8,352.5c1.2,4.7 53.1,-31.5 106.2,-35.2\"\n          android:strokeWidth=\"23\"\n          android:fillColor=\"#00000000\"\n          android:strokeColor=\"#FFFFFF\"\n          android:strokeLineCap=\"round\"/>\n      <path\n          android:pathData=\"M106.2,352.5C105,357.2 53.1,321 0,317.3\"\n          android:strokeWidth=\"23\"\n          android:fillColor=\"#00000000\"\n          android:strokeColor=\"#FFFFFF\"\n          android:strokeLineCap=\"round\"/>\n      <path\n          android:pathData=\"M405.8,159.7c1.2,-4.7 53.1,31.5 106.2,35.2\"\n          android:strokeWidth=\"23\"\n          android:fillColor=\"#00000000\"\n          android:strokeColor=\"#FFFFFF\"\n          android:strokeLineCap=\"round\"/>\n      <path\n          android:pathData=\"M106.2,159.7C105,155 53.1,191.2 0,194.9\"\n          android:strokeWidth=\"23\"\n          android:fillColor=\"#00000000\"\n          android:strokeColor=\"#FFFFFF\"\n          android:strokeLineCap=\"round\"/>\n    </group>\n    <path\n        android:pathData=\"M401,154.6v55.7L236,191l20,-75C333.2,116 400.3,154.3 401,154.6z\"\n        android:fillColor=\"#A4DBDD\"/>\n    <path\n        android:pathData=\"M401,301.7v55.7L256,401l-20,-90C236,311 400,302 401,301.7z\"\n        android:fillColor=\"#C0E5E7\"/>\n    <path\n        android:pathData=\"M236,246l20,75c77.2,0 144,-19 145,-19.3l0,-45.7C400.3,256 236,246 236,246z\"\n        android:fillColor=\"#A4DBDD\"/>\n    <path\n        android:pathData=\"M401,210.3V256c-0.7,0 -87.7,0 -165,0l20,-65C333.3,191 400.3,210.1 401,210.3z\"\n        android:fillColor=\"#C0E5E7\"/>\n    <path\n        android:pathData=\"M256,321v75c-77.2,0 -144.3,-38.3 -145,-38.6v-55.7L256,321z\"\n        android:fillColor=\"#DFF2F3\"/>\n    <path\n        android:pathData=\"M256,116v75l-145,19.3v-55.7C111.7,154.3 178.6,116 256,116z\"\n        android:fillColor=\"#C0E5E7\"/>\n    <path\n        android:pathData=\"M256,191v65l-72.5,20L111,256v-45.7C112,210 178.8,191 256,191z\"\n        android:fillColor=\"#DFF2F3\"/>\n    <path\n        android:pathData=\"M111,256c0,0 0,45.7 0,45.7c0.7,0.2 67.7,19.3 145,19.3v-65C256,256 111,256 111,256z\"\n        android:fillColor=\"#C0E5E7\"/>\n    <path\n        android:pathData=\"M416,150.2v211.5l-5,2.9c-2.9,1.7 -72.3,41.3 -155,41.3v-20c65.3,0 123.1,-27.2 140,-36V162c-17,-8.8 -74.9,-36 -140,-36v-20c82.7,0 152.1,39.7 155,41.4L416,150.2z\"\n        android:fillColor=\"#FFFFFF\"/>\n    <path\n        android:pathData=\"M256,386v20c-82.7,0 -152.1,-39.7 -155,-41.4l-5,-2.9V150.2l5,-2.9c2.9,-1.7 72.3,-41.4 155,-41.4v20c-65.3,0 -123.1,27.2 -140,36V350C132.9,358.8 190.9,386 256,386z\"\n        android:fillColor=\"#FFFFFF\"/>\n  </group>\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_mask.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"22dp\"\n    android:height=\"22dp\"\n    android:viewportWidth=\"22\"\n    android:viewportHeight=\"22\">\n  <path\n      android:pathData=\"M17.9525,14.5472C18.8058,14.1346 20.4029,13.2823 22,13.1996V8.8273C20.4029,8.6351 18.8058,7.8923 17.9525,7.4797V14.5472Z\"\n      android:fillColor=\"#757575\"\n      android:fillType=\"evenOdd\"/>\n  <path\n      android:pathData=\"M18.3928,15.4C18.2004,15.4823 18.0901,15.5372 17.8698,15.647L17.7044,15.7298C13.5195,18.1223 8.4258,18.1223 4.3229,15.7298L4.158,15.647C3.9926,15.5651 3.8273,15.4823 3.6349,15.4C2.8636,15.0697 1.4593,14.2998 0.0276,14.2171V15.9773C0.0276,19.3048 2.7262,22 6.0574,22H15.9699C19.3015,22 21.9997,19.3048 21.9997,15.9773V14.2171C20.568,14.2998 19.1362,14.9599 18.3928,15.4Z\"\n      android:fillColor=\"#757575\"\n      android:fillType=\"evenOdd\"/>\n  <path\n      android:pathData=\"M3.6348,6.6275C3.8002,6.5451 3.8826,6.4902 4.048,6.4074L4.2953,6.2698C8.4807,3.8777 13.5748,3.8777 17.6769,6.2698L17.98,6.4074C18.035,6.4349 18.2003,6.5172 18.3657,6.6C19.1365,6.9299 20.5404,7.6997 21.9722,7.7821V6.0227C21.9722,2.6948 19.274,0 15.9423,0H6.0303C2.6986,0 0,2.6948 0,6.0227V7.7821C1.4597,7.7272 2.8915,6.9577 3.6348,6.6275Z\"\n      android:fillColor=\"#757575\"\n      android:fillType=\"evenOdd\"/>\n  <path\n      android:pathData=\"M0.0277,13.1997C1.6249,13.3923 3.2215,14.1348 4.0753,14.5474V7.4798C3.2215,7.8924 1.6249,8.7447 0.0277,8.8275V13.1997Z\"\n      android:fillColor=\"#757575\"\n      android:fillType=\"evenOdd\"/>\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_mzcr.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"328dp\"\n    android:height=\"30dp\"\n    android:viewportWidth=\"328\"\n    android:viewportHeight=\"30\">\n  <path\n      android:pathData=\"M111.553,26.215h-0.284v2.811h7.388c0.746,-0.568 1.528,-1.232 2.309,-1.927 3.978,-3.537 -5.648,-1.231 -9.413,-0.884zM111.269,12.726v9.528c1.308,-1.292 3.522,-2.745 7.649,-6.46 4.73,-4.238 0.771,-3.068 -7.649,-3.068zM111.809,0h-7.31v6.29c2.853,-2.23 5.572,-4.104 5.572,-4.104 0.579,-0.848 1.159,-1.561 1.738,-2.186z\"\n      android:fillColor=\"#D71440\"/>\n  <path\n      android:pathData=\"M140.295,0h-15.54c0,2.386 -4.713,3.904 -5.597,4.193 -2.32,1.41 -5.376,3.145 -6.518,4.302 -2.136,2.096 4.493,0.65 12.815,0.65 2.32,0 3.609,2.025 2.43,3.434 -2.578,3.073 -5.671,5.206 -9.059,7.374 -4.639,3 7.181,-2.06 7.181,3.904 0,2.06 -1.546,3.796 -3.609,5.17h17.897V0z\"\n      android:fillColor=\"#D71440\"/>\n  <path\n      android:pathData=\"M65.794,14.568V0h-5.936c-2.316,21.183 -16.757,15.941 -23.09,12.507v16.52h9.807c4.524,-17.388 13.32,-17.098 19.219,-14.46z\"\n      android:fillColor=\"#C9DA36\"/>\n  <path\n      android:pathData=\"M59.02,0H36.768v10.92C49.785,13.734 55.571,7.52 59.021,0zM40.625,4.945c0,-2.13 1.855,-3.88 4.154,-3.88 2.3,0 4.191,1.75 4.191,3.88 0,2.129 -1.854,3.846 -4.19,3.846 -2.263,0 -4.155,-1.717 -4.155,-3.846z\"\n      android:fillColor=\"#C9DA36\"/>\n  <path\n      android:pathData=\"M21.87,15.961c-6.905,0 -12.508,-5.61 -12.508,-12.523 0,-1.194 0.181,-2.352 0.47,-3.438L0,0v12.704l6.76,-7.058c0.361,2.316 1.156,4.524 2.313,6.479L0,13.21v15.816h29.026L29.026,13.717c-2.024,1.412 -4.482,2.244 -7.157,2.244zM9.11,21.354l1.12,-7.6c1.59,1.628 3.506,2.967 5.603,3.908l-6.724,3.692zM21.87,27.47l-3.435,-9.41c1.12,0.217 2.241,0.326 3.434,0.326 1.157,0 2.314,-0.109 3.434,-0.326l-3.434,9.41z\"\n      android:fillColor=\"#FFC121\"/>\n  <path\n      android:pathData=\"M76.164,16.143s13.05,9.846 26.749,-6.442c0,0 -11.17,-14.091 -28.412,1.537v17.788h29.027L103.528,15.484c-5.856,6.259 -16.122,12.993 -27.364,0.659zM89.141,7.213c2.241,0 4.049,1.83 4.049,4.099s-1.808,4.136 -4.049,4.136c-2.24,0 -4.084,-1.867 -4.084,-4.136 0.036,-2.27 1.843,-4.1 4.084,-4.1zM85.144,0L74.501,0v7.74C76.897,4.463 80.388,1.116 85.144,0zM163.876,21.952c-0.981,-0.58 -1.828,-0.847 -2.764,-0.847 -1.828,0 -3.165,1.293 -3.165,3.033 0,1.785 1.293,3.034 3.21,3.034 0.891,0 1.872,-0.313 2.764,-0.892v1.249c-0.803,0.401 -1.65,0.713 -2.898,0.713 -2.987,0 -4.28,-2.32 -4.28,-3.97 0,-2.409 1.828,-4.194 4.369,-4.194 0.802,0 1.649,0.179 2.719,0.67l0.045,1.204zM160.443,19.766l-1.382,-1.383h0.669l1.338,0.714 1.337,-0.714h0.713l-1.382,1.383h-1.293zM169.849,21.194h-3.388v2.41h3.299v1.025h-3.299v2.454h3.522v1.07h-4.636v-7.985h4.502v1.026zM174.976,21.908c-0.669,-0.625 -1.337,-0.848 -1.872,-0.848 -0.714,0 -1.248,0.357 -1.248,0.937 0,1.517 3.432,1.517 3.432,4.06 0,1.25 -0.936,2.141 -2.229,2.141 -0.847,0 -1.56,-0.223 -2.229,-0.713v-1.473c0.58,0.759 1.338,1.16 2.095,1.16 0.892,0 1.293,-0.58 1.293,-1.026 0,-1.65 -3.432,-1.829 -3.432,-4.015 0,-1.294 0.98,-2.141 2.407,-2.141 0.624,0 1.203,0.178 1.783,0.58v1.338zM183.267,28.154h-1.56l-4.057,-3.971v3.97h-1.114v-7.985h1.114v3.658l3.344,-3.658h1.426l-3.432,3.792 4.279,4.194zM188.706,21.194h-3.388v2.41h3.254v1.025h-3.254v2.454h3.477v1.026h-4.636v-7.986h4.547v1.071zM188.127,18.428l-1.516,1.383h-0.669l0.892,-1.383h1.293zM195.304,20.168c1.605,0 2.63,0.848 2.63,2.23 0,0.938 -0.49,1.607 -1.337,1.964 0.713,0.49 1.159,1.204 1.783,2.23 0.356,0.536 0.535,0.803 1.07,1.562h-1.382l-1.07,-1.651c-1.07,-1.65 -1.516,-1.83 -2.095,-1.83h-0.491v3.436h-1.159v-7.986h2.051v0.045zM194.412,23.648h0.713c1.204,0 1.561,-0.625 1.561,-1.294 0,-0.758 -0.446,-1.204 -1.561,-1.204h-0.713v2.498zM204.799,21.194h-3.344v2.41h3.255v1.025h-3.255v2.454h3.478v1.07h-4.637v-7.985h4.503v1.026zM208.543,20.168c1.739,0 2.541,1.026 2.541,2.275 0,1.25 -0.847,2.23 -2.674,2.23h-1.204v3.436h-1.114v-7.986h2.451v0.045zM207.206,23.648h1.293c0.847,0 1.382,-0.446 1.382,-1.25 0,-0.58 -0.312,-1.204 -1.382,-1.204h-1.338l0.045,2.454zM218.797,24.986c0,1.963 -1.159,3.257 -3.522,3.257 -1.694,0 -3.299,-0.937 -3.299,-3.123v-4.952h1.159v4.729c0,0.892 0.134,1.294 0.49,1.65 0.446,0.447 1.026,0.67 1.694,0.67 0.892,0 1.516,-0.268 1.873,-0.625 0.401,-0.401 0.49,-0.981 0.49,-1.74v-4.64h1.159l-0.044,4.774zM220.356,20.168h2.319c1.693,0 2.451,1.026 2.451,2.052 0,0.848 -0.401,1.383 -1.203,1.695 1.203,0.223 1.917,1.026 1.917,2.097 0,0.982 -0.714,2.142 -2.72,2.142h-2.764v-7.986zM221.515,23.603h0.758c1.115,0 1.694,-0.401 1.694,-1.294 0,-0.58 -0.356,-1.115 -1.382,-1.115h-1.025l-0.045,2.41zM221.515,27.083h1.427c1.337,0 1.694,-0.67 1.694,-1.25 0,-0.713 -0.58,-1.248 -1.783,-1.248h-1.382v2.498h0.044zM228.069,27.083h3.566v1.07h-4.725v-7.985h1.159v6.915zM233.819,20.168h-1.159v7.986h1.159v-7.986zM242.334,28.154h-1.605l-4.012,-3.971v3.97h-1.159v-7.985h1.159v3.658l3.343,-3.658h1.427l-3.478,3.792 4.325,4.194zM247.995,20.168h1.382l-2.942,3.747v4.239h-1.159v-4.239l-2.942,-3.747h1.382l2.139,2.766 2.14,-2.766zM165.111,9.725h-1.115v-6.2h-0.044L161.5,6.601h-0.178l-2.452,-3.078v6.201h-1.159L157.711,1.74h1.07l2.63,3.256 2.675,-3.256h1.025v7.985zM168.008,1.74h-1.159v7.985h1.159L168.008,1.74zM177.147,9.725h-0.981l-5.349,-6.156v6.156h-1.07L169.747,1.74h0.891l5.394,6.156L176.032,1.74h1.115v7.985zM180.045,1.74h-1.16v7.985h1.16L180.045,1.74zM185.572,3.48c-0.668,-0.625 -1.337,-0.848 -1.872,-0.848 -0.758,0 -1.248,0.402 -1.248,0.937 0,1.517 3.432,1.517 3.432,4.06 0,1.249 -0.936,2.186 -2.229,2.186 -0.847,0 -1.56,-0.224 -2.229,-0.759L181.426,7.63c0.58,0.758 1.338,1.16 2.096,1.16 0.891,0 1.292,-0.58 1.292,-1.027 0,-1.65 -3.432,-1.829 -3.432,-4.015 0,-1.293 0.981,-2.141 2.407,-2.141 0.624,0 1.204,0.178 1.783,0.58L185.572,3.48zM193.106,2.766h-2.764v6.96h-1.114v-6.96h-2.764L186.464,1.74h6.642v1.026zM198.723,2.766h-3.388v2.409h3.254L198.589,6.2h-3.254v2.454h3.477v1.07h-4.636L194.176,1.74h4.547v1.026zM202.066,1.74c1.605,0 2.63,0.847 2.63,2.23 0,0.937 -0.49,1.606 -1.337,1.963 0.713,0.491 1.159,1.205 1.783,2.186 0.357,0.536 0.535,0.803 1.07,1.562h-1.382l-1.07,-1.651c-1.07,-1.65 -1.515,-1.83 -2.095,-1.83h-0.49v3.48h-1.115L200.06,1.74h2.006zM201.175,5.22h0.713c1.248,0 1.56,-0.625 1.56,-1.294 0,-0.759 -0.446,-1.205 -1.56,-1.205h-0.713L201.175,5.22zM210.848,3.48c-0.669,-0.625 -1.337,-0.848 -1.872,-0.848 -0.713,0 -1.248,0.402 -1.248,0.937 0,1.517 3.432,1.517 3.432,4.06 0,1.249 -0.936,2.186 -2.229,2.186 -0.847,0 -1.56,-0.224 -2.229,-0.759L206.702,7.63c0.58,0.758 1.338,1.16 2.095,1.16 0.892,0 1.293,-0.58 1.293,-1.027 0,-1.65 -3.432,-1.829 -3.432,-4.015 0,-1.293 0.98,-2.141 2.407,-2.141 0.579,0 1.204,0.178 1.783,0.58L210.848,3.48zM218.382,2.766h-2.764v6.96h-1.114v-6.96h-2.764L211.74,1.74h6.642v1.026zM222.26,9.77h-0.223l-3.432,-8.03h1.114l2.407,5.576 2.363,-5.576h1.159l-3.388,8.03zM229.972,1.65c2.63,0 4.28,1.875 4.28,4.105 0,2.142 -1.605,4.104 -4.28,4.104 -2.585,0 -4.235,-1.918 -4.235,-4.104 -0.044,-2.23 1.65,-4.104 4.235,-4.104zM229.972,8.789c1.783,0 3.121,-1.294 3.121,-3.034 0,-1.74 -1.338,-3.033 -3.121,-3.033s-3.076,1.293 -3.076,3.033c0,1.695 1.293,3.034 3.076,3.034zM238.531,2.766L238.531,1.74h6.865l-5.082,6.915h5.082v1.07h-7.177l5.038,-6.96h-4.726zM246.466,1.74h3.076c2.942,0 4.235,2.096 4.235,3.97 0,2.052 -1.605,3.97 -4.235,3.97h-3.12l0.044,-7.94zM247.581,8.655h1.827c2.586,0 3.165,-1.963 3.165,-2.945 0,-1.606 -1.025,-2.944 -3.254,-2.944h-1.783v5.889h0.045zM257.21,1.74c1.605,0 2.63,0.847 2.63,2.23 0,0.937 -0.49,1.606 -1.337,1.963 0.713,0.491 1.159,1.205 1.783,2.186 0.356,0.536 0.535,0.803 1.07,1.562h-1.382l-1.07,-1.651c-1.026,-1.65 -1.516,-1.83 -2.095,-1.83h-0.491v3.48h-1.159L255.159,1.74h2.051zM256.363,5.22h0.713c1.204,0 1.56,-0.625 1.56,-1.294 0,-0.759 -0.445,-1.205 -1.56,-1.205h-0.713L256.363,5.22zM269.157,9.725h-1.159l-1.07,-2.364h-3.388l-0.981,2.364L261.4,9.725l3.433,-7.985h0.802l3.522,7.985zM263.986,6.335h2.451l-1.292,-2.9 -1.159,2.9zM271.876,9.77h-0.223l-3.432,-8.03h1.114l2.407,5.576 2.363,-5.576h1.159l-3.388,8.03zM279.588,1.65c2.63,0 4.279,1.875 4.279,4.105 0,2.142 -1.604,4.104 -4.324,4.104 -2.585,0 -4.235,-1.918 -4.235,-4.104 0,-2.23 1.694,-4.104 4.28,-4.104zM279.588,8.789c1.783,0 3.12,-1.294 3.12,-3.034 0,-1.74 -1.337,-3.033 -3.12,-3.033 -1.783,0 -3.076,1.293 -3.076,3.033 0,1.695 1.293,3.034 3.076,3.034zM290.465,2.766h-2.719v6.96h-1.159v-6.96h-2.764L283.823,1.74h6.642v1.026zM298.935,9.725h-0.981l-5.305,-6.156v6.156h-1.069L291.58,1.74h0.891l5.394,6.156L297.865,1.74h1.07v7.985zM301.833,1.74h-1.159v7.985h1.159L301.833,1.74zM310.391,3.525c-0.98,-0.58 -1.827,-0.848 -2.763,-0.848 -1.828,0 -3.165,1.294 -3.165,3.034 0,1.784 1.292,3.033 3.209,3.033 0.892,0 1.872,-0.312 2.764,-0.892L310.436,9.1c-0.802,0.402 -1.649,0.714 -2.853,0.714 -2.987,0 -4.28,-2.32 -4.28,-3.97 0,-2.454 1.828,-4.194 4.369,-4.194 0.847,0 1.65,0.178 2.719,0.67v1.204zM317.836,2.766h-2.764v6.96h-1.114v-6.96h-2.764L311.194,1.74h6.642v1.026zM321.715,9.77h-0.223l-3.477,-8.03h1.159l2.407,5.576 2.363,-5.576h1.114l-3.343,8.03zM328,0l-1.516,1.338h-0.668L326.663,0L328,0zM327.108,9.725h-1.159L325.949,1.74h1.159v7.985z\"\n      android:fillColor=\"#2E5980\"/>\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_no_risky_encounter.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"42dp\"\n    android:height=\"42dp\"\n    android:viewportWidth=\"42\"\n    android:viewportHeight=\"42\">\n  <path\n      android:pathData=\"M21,39.83C28.6169,39.834 35.4861,35.2488 38.4038,28.2129C41.3215,21.1769 39.7129,13.0761 34.3284,7.6887C28.9438,2.3013 20.8439,0.6885 13.8064,3.6024C6.7689,6.5163 2.18,13.3831 2.18,21C2.18,31.3956 10.6044,39.8245 21,39.83Z\"\n      android:strokeWidth=\"1\"\n      android:fillColor=\"#FAFEFC\"\n      android:fillType=\"nonZero\"\n      android:strokeColor=\"#00000000\"/>\n  <path\n      android:pathData=\"M27.67,13.5L26.83,13.5L26.83,11.83L25.17,11.83L25.17,13.5L16.83,13.5L16.83,11.83L15.17,11.83L15.17,13.5L14.33,13.5C13.4116,13.5055 12.67,14.2516 12.67,15.17L12.67,28.5C12.67,29.4184 13.4116,30.1645 14.33,30.17L27.67,30.17C28.5884,30.1645 29.33,29.4184 29.33,28.5L29.33,15.17C29.33,14.2516 28.5884,13.5055 27.67,13.5L27.67,13.5ZM27.67,28.5L14.33,28.5L14.33,17.67L27.67,17.67L27.67,28.5Z\"\n      android:strokeWidth=\"1\"\n      android:fillColor=\"#2D842F\"\n      android:fillType=\"nonZero\"\n      android:strokeColor=\"#00000000\"/>\n  <path\n      android:pathData=\"M17.93,26L19.11,26L19.11,20.36L17.94,20.36L16.48,21.36L16.48,22.43L17.86,21.43L17.93,21.43L17.93,26ZM22.93,26L24,26L24,25L24.74,25L24.74,24L24,24L24,20.34L22.38,20.34C21.62,21.5 20.86,22.75 20.15,24.02L20.15,25L22.9,25L22.93,26ZM21.24,24C21.75,23.09 22.35,22.11 22.9,21.27L22.96,21.27L22.96,24.06L21.21,24.06L21.24,24Z\"\n      android:strokeWidth=\"1\"\n      android:fillColor=\"#2D842F\"\n      android:fillType=\"nonZero\"\n      android:strokeColor=\"#00000000\"/>\n  <path\n      android:pathData=\"M21,0C9.402,0 0,9.402 0,21C0,32.598 9.402,42 21,42C32.598,42 42,32.598 42,21C42,9.402 32.598,0 21,0L21,0ZM21,39.83C10.6005,39.83 2.17,31.3995 2.17,21C2.17,10.6005 10.6005,2.17 21,2.17C31.3995,2.17 39.83,10.6005 39.83,21C39.83,31.3995 31.3995,39.83 21,39.83Z\"\n      android:strokeWidth=\"1\"\n      android:fillColor=\"#CEF1D0\"\n      android:fillType=\"nonZero\"\n      android:strokeColor=\"#00000000\"/>\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_notif.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:aapt=\"http://schemas.android.com/aapt\"\n    android:width=\"316dp\"\n    android:height=\"199dp\"\n    android:viewportWidth=\"316\"\n    android:viewportHeight=\"199\">\n  <path\n      android:pathData=\"M178.13,177.942C221.789,147.699 273.989,160.931 274.938,122.182C275.887,83.433 266.388,43.74 218.941,43.74C194.568,43.74 145.861,10.661 126.88,66.422C107.898,122.182 76.578,86.269 56.647,134.468C36.716,182.668 134.472,208.185 178.13,177.942Z\"\n      android:fillType=\"evenOdd\">\n    <aapt:attr name=\"android:fillColor\">\n      <gradient \n          android:gradientRadius=\"245.36504\"\n          android:centerX=\"185.96384\"\n          android:centerY=\"30.730356\"\n          android:type=\"radial\">\n        <item android:offset=\"0\" android:color=\"#FFFFFFFF\"/>\n        <item android:offset=\"1\" android:color=\"#FFC9E2F4\"/>\n      </gradient>\n    </aapt:attr>\n  </path>\n  <group>\n    <clip-path\n        android:pathData=\"M150.78,177.698C107.139,147.339 54.96,160.621 54.011,121.723C53.062,82.826 58.762,14.518 106.19,14.518C153.619,14.518 215.293,-15.841 234.267,40.134C253.242,96.108 252.293,85.672 272.216,134.057C292.139,182.441 194.421,208.057 150.78,177.698Z\"/>\n    <path\n        android:pathData=\"M183.811,148.078L143.334,148.007C140.709,148.003 138.585,145.871 138.59,143.246L138.753,49.646C138.757,47.022 140.889,44.898 143.513,44.902L183.991,44.973C186.616,44.977 188.74,47.109 188.735,49.733L188.572,143.334C188.567,145.958 186.436,148.082 183.811,148.078\"\n        android:fillColor=\"#334176\"\n        android:fillType=\"evenOdd\"/>\n    <path\n        android:pathData=\"M188.58,138.829l-49.982,-0.087l0.152,-87.548l49.982,0.087z\"\n        android:fillColor=\"#F8FCFF\"\n        android:fillType=\"evenOdd\"/>\n    <path\n        android:pathData=\"M178.145,138.811l-39.514,-0.088l0.153,-87.547z\"\n        android:fillColor=\"#D9E9F5\"\n        android:fillType=\"evenOdd\"/>\n    <path\n        android:pathData=\"M166.295,104.352L166.295,102.004C166.295,97.539 167.915,96.231 172.352,92.69L172.519,92.555L172.519,92.555L172.855,92.283C176.323,89.463 179.798,86.276 179.798,80.182C179.798,71.252 172.236,67.057 164.327,67.057C157.035,67.057 148.354,70.598 148.392,82.067L154.759,82.067C154.759,76.795 157.807,72.715 164.057,72.715C168.687,72.715 173.008,74.947 173.008,80.566C173.008,84.608 170.731,86.455 167.143,89.342L166.769,89.643C163.161,92.559 159.737,95.72 159.774,101.003L159.813,104.352L166.295,104.352ZM163.277,121.363C165.735,121.363 167.694,119.418 167.694,116.966C167.694,114.476 165.735,112.53 163.277,112.53C160.858,112.53 158.861,114.476 158.861,116.966C158.861,119.418 160.858,121.363 163.277,121.363Z\"\n        android:fillColor=\"#334176\"\n        android:fillAlpha=\"0.53\"\n        android:fillType=\"nonZero\"/>\n    <path\n        android:pathData=\"M158.14,226.712C142.929,226.754 127.697,226.337 112.515,227.021C104.429,227.385 104.68,224.521 104.944,216.985C105.001,215.348 108.333,204.856 109.287,200.675C111.489,194.706 113.196,188.571 115.379,182.6C116.614,179.222 117.741,175.729 121.484,174.132C137.222,172.028 151.48,175.078 163.418,186.226C166.854,194.708 163.25,203.033 162.863,211.435C162.443,216.884 162.678,222.54 158.14,226.712\"\n        android:fillColor=\"#B9417E\"\n        android:fillType=\"evenOdd\"/>\n    <path\n        android:pathData=\"M121.03,175.599C116.912,166.56 124.769,167.958 129.119,166.299C140.181,163.738 150.212,165.178 158.38,173.852C164.68,176.507 166.178,180.535 161.909,186.212C149.164,179.272 135.725,175.011 121.03,175.599\"\n        android:fillColor=\"#2D2F62\"\n        android:fillType=\"evenOdd\"/>\n    <path\n        android:pathData=\"M158.38,173.852C149.016,169.808 139.229,167.404 129.113,166.301C129.841,157.219 130.363,148.335 129.13,139.455C126.653,121.619 129.444,111.288 134.009,94.297C134.176,93.675 136.641,88.28 137.062,87.726C137.875,86.657 138.893,85.694 138.824,88.202C138.729,91.651 139.01,91.917 139.008,95.708C139.004,102.937 138.405,110.968 139.399,118.152C139.409,118.229 142.54,116.785 142.674,116.671C143.096,116.313 143.41,115.837 143.735,115.323C147.468,110.335 150.677,104.99 155.063,100.581C157.466,98.165 160.168,95.646 163.917,97.396C167.376,99.01 164.549,103.044 162.98,106.179C160.681,110.77 157.974,115.369 155.23,120.044C153.058,123.743 151.421,126.244 150.531,132.967C148.652,139.74 150.822,142.875 150.656,148.044C154.616,148.225 168.016,148.142 169.477,148.142C168.561,157.738 161.54,165.272 158.38,173.852\"\n        android:fillColor=\"#E0A16F\"\n        android:fillType=\"evenOdd\"/>\n    <path\n        android:pathData=\"M114.823,48.83C119.993,48.97 123.363,50.24 126.961,53.063C129.694,55.209 132.644,57.079 135.486,59.089C135.859,59.353 136.389,59.496 136.501,60.243C133.057,60.243 129.653,60.295 126.252,60.215C125.025,60.187 124.64,60.545 124.691,61.775C124.785,64.059 124.737,66.349 124.713,68.635C124.675,72.151 122.517,74.293 118.963,74.3C109.869,74.318 100.775,74.317 91.681,74.296C90.821,74.293 89.961,74.094 89.101,73.986C89.101,73.986 89.07,74.017 89.07,74.017C88.93,73.924 88.789,73.831 88.649,73.737C86.918,72.566 85.962,70.933 85.74,68.861C85.756,64.385 85.773,59.909 85.789,55.434C85.75,52.783 86.483,50.55 89.087,49.323C90.2,48.799 91.404,48.94 92.574,48.828C93.245,48.827 93.915,48.825 94.586,48.823C101.332,48.825 108.08,48.647 114.823,48.83\"\n        android:fillColor=\"#F9BD00\"\n        android:fillType=\"evenOdd\"/>\n    <path\n        android:pathData=\"M205.274,120.739C201.986,117.363 198.697,113.987 195.06,110.252C198.097,110.252 200.679,110.183 203.256,110.281C204.551,110.331 204.983,109.943 204.896,108.641C204.787,107.013 204.868,105.373 204.871,103.738C204.878,99.894 207.431,97.222 211.267,97.185C216.663,97.134 235.182,97.15 236.101,97.176C239.232,97.264 241.714,99.265 242.353,102.319C242.539,103.208 242.485,104.148 242.542,105.065C242.524,108.978 242.5,112.89 242.489,116.802C242.478,121.161 239.959,123.897 235.581,123.945C227.537,124.034 219.492,123.978 211.447,123.966C208.842,123.962 207.011,122.429 205.274,120.739\"\n        android:fillColor=\"#9EBD63\"\n        android:fillType=\"evenOdd\"/>\n    <path\n        android:pathData=\"M117.554,99.411C119.411,99.404 120.595,99.197 121.596,97.561C122.977,95.308 124.626,93.219 126.16,91.06C126.711,91.289 126.475,91.721 126.475,92.03C126.489,101.102 126.494,110.174 126.476,119.247C126.469,123.064 124.471,125.051 120.7,125.053C113.325,125.057 105.95,125.058 98.575,125.049C97.781,125.048 96.988,124.975 96.195,124.935C96.195,124.935 95.82,124.623 95.555,124.636C93.421,123.276 92.65,121.321 92.705,118.82C92.805,114.364 92.73,109.903 92.734,105.445C92.738,101.577 94.85,99.492 98.767,99.478C105.029,99.456 111.17,99.436 117.554,99.411\"\n        android:fillColor=\"#B9417E\"\n        android:fillType=\"evenOdd\"/>\n    <path\n        android:pathData=\"M194.453,154.636C192.988,153.388 192.42,151.798 192.427,149.883C192.461,140.815 192.443,131.746 192.443,122.21C194.443,124.906 195.896,127.557 197.977,129.669C198.855,130.559 199.945,130.704 200.817,130.702C207.242,130.681 212.783,130.794 219.204,130.65C222.658,130.572 225.388,132.772 225.202,136.687C224.992,141.141 225.157,145.613 225.152,150.076C225.148,153.383 223.317,155.555 220.056,155.603C212.545,155.714 205.031,155.647 197.518,155.629C196.41,155.626 195.395,155.213 194.453,154.636\"\n        android:fillColor=\"#3D539A\"\n        android:fillType=\"evenOdd\"/>\n    <path\n        android:pathData=\"M212.277,70.878C213.294,70.133 214.339,69.738 215.583,69.74C221.671,69.751 227.759,69.725 233.846,69.756C236.886,69.771 238.549,71.487 238.56,74.526C238.573,78.493 238.566,82.461 238.568,86.428C237.941,88.165 236.833,89.386 234.965,89.792C229.735,89.783 224.503,89.678 219.275,89.786C211.768,89.941 210.695,89.434 211.006,81.426C211.039,80.573 211.203,79.686 210.836,78.849C210.837,78.849 210.881,78.784 210.881,78.784L210.816,78.829C208.294,78.789 202.498,78.643 201.463,78.643C202.371,77.914 209.872,72.638 212.277,70.878\"\n        android:fillColor=\"#F9BD00\"\n        android:fillType=\"evenOdd\"/>\n    <path\n        android:pathData=\"M201.567,58.848C201.5,60.539 202.178,61.959 203.366,62.297C204.888,62.731 206.655,61.231 207.311,58.947C207.968,56.663 207.266,54.46 205.744,54.027C204.583,53.696 203.285,54.493 202.44,55.9L196.991,54.348C197.445,52.372 197.553,50.379 197.318,48.443L202.935,47.38C203.64,48.92 204.887,49.884 206.1,49.654C207.656,49.36 208.556,47.229 208.11,44.896C207.664,42.562 206.041,40.909 204.486,41.203C203.3,41.428 202.5,42.722 202.382,44.356L196.671,45.438C196.193,43.886 195.498,42.41 194.609,41.048L199.211,36.903C200.618,37.853 202.187,38.03 203.104,37.205C204.278,36.147 203.931,33.862 202.33,32.101C200.729,30.339 198.479,29.769 197.305,30.826C196.41,31.632 196.404,33.151 197.158,34.608L192.696,38.627C190.981,36.811 188.858,35.327 186.373,34.359L188.442,29.031C190.127,29.249 191.609,28.705 192.054,27.558C192.624,26.087 191.282,24.201 189.056,23.345C186.83,22.489 184.563,22.988 183.992,24.457C183.557,25.578 184.238,26.938 185.57,27.901L183.395,33.506C181.146,33.062 178.884,33.075 176.716,33.496L175.026,27.887C176.492,27.03 177.327,25.696 176.972,24.518C176.517,23.008 174.295,22.338 172.009,23.02C169.723,23.703 168.239,25.48 168.694,26.989C169.04,28.14 170.416,28.798 172.062,28.746L173.75,34.349C171.376,35.264 169.204,36.677 167.42,38.538L163.465,34.887C164.293,33.409 164.333,31.838 163.427,31.002C162.266,29.93 160.009,30.473 158.386,32.215C156.764,33.957 156.389,36.238 157.551,37.309C158.435,38.126 159.956,37.999 161.348,37.124L165.495,40.952C164.821,41.97 164.238,43.069 163.778,44.253C163.604,44.704 163.463,45.159 163.328,45.614L157.525,44.316C157.494,42.624 156.736,41.246 155.53,40.976C153.985,40.63 152.308,42.229 151.785,44.547C151.262,46.864 152.09,49.023 153.634,49.369C154.812,49.632 156.063,48.762 156.824,47.309L162.727,48.629C162.54,50.334 162.611,52.03 162.921,53.675L157.357,55.705C156.41,54.3 155.022,53.55 153.862,53.974C152.375,54.516 151.836,56.764 152.657,58.994C153.479,61.225 155.349,62.593 156.836,62.05C157.97,61.637 158.547,60.231 158.396,58.599L163.759,56.642C164.508,58.605 165.604,60.428 167.017,62.013L163.19,67.11C161.626,66.447 160.052,66.573 159.312,67.558C158.364,68.821 159.145,70.997 161.057,72.419C162.969,73.841 165.287,73.971 166.235,72.709C166.957,71.746 166.67,70.254 165.648,68.969L169.274,64.14C170.6,65.175 172.097,66.037 173.75,66.673C173.839,66.707 173.93,66.728 174.019,66.761L173.027,72.335C171.331,72.444 169.982,73.262 169.767,74.472C169.491,76.025 171.173,77.619 173.522,78.032C175.872,78.447 178.001,77.524 178.277,75.972C178.488,74.789 177.557,73.585 176.063,72.895L177.01,67.572C179.153,67.95 181.302,67.904 183.366,67.5L185.272,73.267C183.829,74.162 183.03,75.517 183.416,76.686C183.911,78.183 186.15,78.794 188.417,78.052C190.684,77.31 192.121,75.494 191.626,73.997C191.249,72.855 189.856,72.234 188.212,72.329L186.332,66.641C188.136,65.942 189.829,64.964 191.316,63.706L195.572,67.95C194.688,69.395 194.587,70.964 195.46,71.834C196.579,72.95 198.855,72.493 200.544,70.815C202.233,69.137 202.695,66.871 201.576,65.756C200.724,64.906 199.199,64.974 197.774,65.796L193.473,61.508C194.508,60.255 195.373,58.836 196.039,57.273L201.567,58.848Z\"\n        android:fillColor=\"#B9417E\"\n        android:fillType=\"evenOdd\"/>\n    <path\n        android:pathData=\"M183.034,61.328L179.225,61.356L179.126,45.843C177.743,47.26 176.109,48.312 174.225,49L174.201,45.265C175.193,44.906 176.269,44.231 177.428,43.241C178.588,42.251 179.38,41.099 179.805,39.788L182.896,39.765L183.034,61.328Z\"\n        android:fillColor=\"#FFF\"\n        android:fillType=\"evenOdd\"/>\n  </group>\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_notifications_sent.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"24dp\"\n    android:height=\"24dp\"\n    android:viewportWidth=\"24\"\n    android:viewportHeight=\"24\">\n  <path\n      android:pathData=\"M8.1231,4.4585L6.8031,3.1385C4.5877,4.8277 3.1292,7.4308 3,10.3846H4.8461C4.9846,7.9385 6.24,5.7969 8.1231,4.4585V4.4585ZM19.56,10.3846H21.4062C21.2677,7.4308 19.8092,4.8277 17.6031,3.1385L16.2923,4.4585C18.1569,5.7969 19.4215,7.9385 19.56,10.3846ZM17.7415,10.8462C17.7415,8.0123 16.2277,5.64 13.5877,5.0123V4.3846C13.5877,3.6185 12.9692,3 12.2031,3C11.4369,3 10.8185,3.6185 10.8185,4.3846V5.0123C8.1692,5.64 6.6646,8.0031 6.6646,10.8462V15.4615L4.8185,17.3077V18.2308H19.5877V17.3077L17.7415,15.4615V10.8462ZM12.2031,21C12.3323,21 12.4523,20.9908 12.5723,20.9631C13.1723,20.8338 13.6615,20.4277 13.9015,19.8738C13.9938,19.6523 14.04,19.4123 14.04,19.1538H10.3477C10.3569,20.1692 11.1785,21 12.2031,21Z\"\n      android:fillColor=\"#757575\"/>\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_notifications_shown.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"24dp\"\n    android:height=\"24dp\"\n    android:viewportWidth=\"24\"\n    android:viewportHeight=\"24\">\n  <path\n      android:pathData=\"M19.2,3H4.8C3.81,3 3.009,3.81 3.009,4.8L3,21L6.6,17.4H19.2C20.19,17.4 21,16.59 21,15.6V4.8C21,3.81 20.19,3 19.2,3ZM17.4,13.8H6.6V12H17.4V13.8ZM17.4,11.1H6.6V9.3H17.4V11.1ZM17.4,8.4H6.6V6.6H17.4V8.4Z\"\n      android:fillColor=\"#757575\"/>\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_off_bluetooth.xml",
    "content": "<vector android:height=\"40dp\" android:viewportHeight=\"130\"\n    android:viewportWidth=\"130\" android:width=\"40dp\" xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <path android:fillColor=\"#FAFEFC\" android:fillType=\"evenOdd\" android:pathData=\"M124,65.5C124,33.191 97.809,7 65.5,7C33.191,7 7,33.191 7,65.5C7,97.809 33.191,124 65.5,124C97.809,124 124,97.809 124,65.5Z\"/>\n    <path android:fillColor=\"#D6F6EA\" android:fillType=\"evenOdd\" android:pathData=\"M65,123.292C32.812,123.292 6.708,97.188 6.708,65C6.708,32.812 32.812,6.708 65,6.708C97.188,6.708 123.292,32.812 123.292,65C123.292,97.188 97.188,123.292 65,123.292M0,65C0,100.906 29.094,130 65,130C100.906,130 130,100.906 130,65C130,29.094 100.906,0 65,0C29.094,0 0,29.094 0,65Z\"/>\n    <path android:fillColor=\"#3E7372\" android:fillType=\"evenOdd\" android:pathData=\"M58.385,58.382L58.385,38.952L70.053,48.993L58.385,58.382ZM76.935,46.646L57.273,29.745C56.341,28.963 55.048,28.78 53.961,29.276C52.849,29.797 52.15,30.893 52.15,32.118L52.15,55.07L39.163,43.699C37.87,42.577 35.903,42.707 34.765,44.012C33.627,45.316 33.782,47.298 35.076,48.445L52.15,63.442L52.15,63.52L35.076,78.517C33.782,79.665 33.653,81.647 34.765,82.951C35.878,84.255 37.87,84.386 39.163,83.264L52.15,71.866L52.15,94.87C52.15,96.096 52.849,97.191 53.935,97.713C54.349,97.922 54.815,98 55.255,98C55.953,98 56.678,97.765 57.221,97.27L66.302,89.706C67.621,88.611 67.828,86.629 66.717,85.298C65.629,83.968 63.663,83.786 62.343,84.881L58.359,88.193L58.359,68.502L64.31,73.249C64.879,73.692 65.551,73.901 66.224,73.901C67.155,73.901 68.061,73.483 68.682,72.701C69.744,71.345 69.51,69.363 68.139,68.293L62.007,63.468L76.832,51.471C77.556,50.897 77.995,50.01 77.995,49.071C78.047,48.158 77.66,47.272 76.935,46.646L76.935,46.646Z\"/>\n    <path android:fillColor=\"#D21A4B\" android:fillType=\"evenOdd\" android:pathData=\"M86.5,81C87.875,81 89,79.802 89,78.338L89,67.662C89,66.198 87.875,65 86.5,65C85.125,65 84,66.198 84,67.662L84,78.364C84,79.802 85.125,81 86.5,81\"/>\n    <path android:fillColor=\"#D21A4B\" android:fillType=\"evenOdd\" android:pathData=\"M95.694,72.681C94.598,71.707 93.007,71.81 92.042,72.784C91.077,73.757 90.999,75.397 92.225,76.499C94.155,78.216 95.146,80.83 94.676,83.469C94.05,87.056 90.869,89.875 86.983,89.875C82.993,89.875 79.941,87.005 79.315,83.597C78.82,80.932 79.733,78.293 81.741,76.499C82.966,75.423 82.888,73.757 81.922,72.784C80.958,71.81 79.367,71.707 78.272,72.707C75.221,75.423 73.63,79.446 74.073,83.52C74.777,90.003 80.359,95 87.035,95C93.633,95 99.058,90.003 99.892,83.956C100.44,79.728 98.875,75.525 95.694,72.681\"/>\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_off_location.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"40dp\"\n    android:height=\"40dp\"\n    android:viewportWidth=\"40\"\n    android:viewportHeight=\"40\">\n  <path\n      android:pathData=\"M38.154,20.154c0,-9.941 -8.059,-18 -18,-18s-18,8.059 -18,18 8.059,18 18,18 18,-8.059 18,-18z\"\n      android:fillColor=\"#FAFEFC\"\n      android:fillType=\"evenOdd\"/>\n  <path\n      android:pathData=\"M20,37.936c-9.904,0 -17.936,-8.032 -17.936,-17.936S10.096,2.064 20,2.064 37.936,10.096 37.936,20 29.904,37.936 20,37.936zM0,20c0,11.048 8.952,20 20,20s20,-8.952 20,-20S31.048,0 20,0 0,8.952 0,20z\"\n      android:fillColor=\"#D6F6EA\"\n      android:fillType=\"evenOdd\"/>\n  <path\n      android:pathData=\"M20.27,10C16.25,10 13,13.287 13,17.35 13,22.862 20.27,31 20.27,31s7.268,-8.137 7.268,-13.65c0,-4.064 -3.25,-7.35 -7.269,-7.35zM20.27,19.975c-1.434,0 -2.597,-1.176 -2.597,-2.625s1.163,-2.625 2.596,-2.625 2.596,1.176 2.596,2.625 -1.163,2.625 -2.596,2.625z\"\n      android:fillColor=\"#3E7372\"/>\n  <path\n      android:pathData=\"M27,25m-6,0a6,6 0,1 1,12 0a6,6 0,1 1,-12 0\"\n      android:fillColor=\"#FAFEFC\"/>\n  <path\n      android:pathData=\"M26.616,24.923c0.423,0 0.77,-0.368 0.77,-0.82V20.82c0,-0.45 -0.347,-0.819 -0.77,-0.819 -0.423,0 -0.77,0.369 -0.77,0.82v3.292c0,0.443 0.347,0.811 0.77,0.811z\"\n      android:fillColor=\"#D21A4B\"\n      android:fillType=\"evenOdd\"/>\n  <path\n      android:pathData=\"M29.445,22.363a0.814,0.814 0,0 0,-1.123 0.032c-0.297,0.3 -0.322,0.804 0.056,1.143 0.593,0.528 0.898,1.333 0.754,2.145a2.402,2.402 0,0 1,-2.367 1.97,2.386 2.386,0 0,1 -2.36,-1.93 2.33,2.33 0,0 1,0.747 -2.185,0.775 0.775,0 0,0 0.056,-1.143 0.806,0.806 0,0 0,-1.123 -0.024,3.897 3.897,0 0,0 -1.292,3.328c0.216,1.994 1.934,3.532 3.988,3.532 2.03,0 3.7,-1.538 3.956,-3.399a3.962,3.962 0,0 0,-1.292 -3.469z\"\n      android:fillColor=\"#D21A4B\"\n      android:fillType=\"evenOdd\"/>\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_pause.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"42dp\"\n    android:height=\"42dp\"\n    android:viewportWidth=\"42\"\n    android:viewportHeight=\"42\">\n  <path\n      android:pathData=\"M40.0615,21C40.0615,10.4725 31.5275,1.9385 21,1.9385C10.4725,1.9385 1.9385,10.4725 1.9385,21C1.9385,31.5275 10.4725,40.0615 21,40.0615C31.5275,40.0615 40.0615,31.5275 40.0615,21Z\"\n      android:strokeWidth=\"1\"\n      android:fillColor=\"#FEF7F3\"\n      android:fillType=\"nonZero\"\n      android:strokeColor=\"#00000000\"/>\n  <path\n      android:pathData=\"M21,39.8328C10.6008,39.8328 2.1672,31.3992 2.1672,21C2.1672,10.6008 10.6008,2.1672 21,2.1672C31.3992,2.1672 39.8328,10.6008 39.8328,21C39.8328,31.3992 31.3992,39.8328 21,39.8328M0,21C0,32.6004 9.3996,42 21,42C32.6004,42 42,32.6004 42,21C42,9.3996 32.6004,0 21,0C9.3996,0 0,9.3996 0,21Z\"\n      android:strokeWidth=\"1\"\n      android:fillColor=\"#FFE0C9\"\n      android:fillType=\"nonZero\"\n      android:strokeColor=\"#00000000\"/>\n  <path\n      android:pathData=\"M24.6219,14.5385C23.8706,14.5385 23.2615,15.2346 23.2615,16.0931L23.2615,25.9069C23.2615,26.7654 23.8706,27.4615 24.6219,27.4615L25.132,27.4615C25.8832,27.4615 26.4923,26.7654 26.4923,25.9069L26.4923,16.0931C26.4923,15.2346 25.8832,14.5385 25.132,14.5385L24.6219,14.5385ZM15.8308,25.9069C15.8308,26.7654 16.4399,27.4615 17.1911,27.4615L17.7012,27.4615C18.4525,27.4615 19.0615,26.7654 19.0615,25.9069L19.0615,16.0931C19.0615,15.2346 18.4525,14.5385 17.7012,14.5385L17.1911,14.5385C16.4399,14.5385 15.8308,15.2346 15.8308,16.0931L15.8308,25.9069Z\"\n      android:strokeWidth=\"1\"\n      android:fillColor=\"#E37E30\"\n      android:fillType=\"nonZero\"\n      android:strokeColor=\"#00000000\"/>\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_positive.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"42dp\"\n    android:height=\"42dp\"\n    android:viewportWidth=\"42\"\n    android:viewportHeight=\"42\">\n  <path\n      android:pathData=\"M20.3913,39.6752C28.0506,39.8582 35.0579,35.3848 38.1157,28.36C41.1735,21.3352 39.6728,13.1582 34.3198,7.6771C28.9667,2.196 20.8275,0.5024 13.7324,3.3933C6.6373,6.2842 1.9994,13.1838 2.0013,20.8452C1.9426,25.781 3.8472,30.5379 7.2961,34.0693C10.745,37.6007 15.4555,39.6172 20.3913,39.6752Z\"\n      android:strokeWidth=\"1\"\n      android:fillColor=\"#FAFEFC\"\n      android:fillType=\"nonZero\"\n      android:strokeColor=\"#00000000\"/>\n  <path\n      android:pathData=\"M21,0C9.402,0 0,9.402 0,21C0,32.598 9.402,42 21,42C32.598,42 42,32.598 42,21C42,9.402 32.598,0 21,0L21,0ZM21,39.83C10.6005,39.83 2.17,31.3995 2.17,21C2.17,10.6005 10.6005,2.17 21,2.17C31.3995,2.17 39.83,10.6005 39.83,21C39.83,31.3995 31.3995,39.83 21,39.83Z\"\n      android:strokeWidth=\"1\"\n      android:fillColor=\"#CEF1D0\"\n      android:fillType=\"nonZero\"\n      android:strokeColor=\"#00000000\"/>\n  <path\n      android:pathData=\"M24.4966,17.84L20.3866,21.95L18.0966,19.66L16.7266,21.03L20.3766,24.68L20.3766,24.68L25.8366,19.21L24.4966,17.84ZM21.3466,11C22.0164,11.0055 22.5566,11.5501 22.5566,12.22C22.5408,12.6367 22.3098,13.0153 21.9466,13.22L21.9466,14.63C22.7088,14.6961 23.4535,14.8958 24.1466,15.22L24.8866,13.94C24.7934,13.7717 24.7452,13.5823 24.7466,13.39C24.7425,12.8957 25.0372,12.4478 25.4927,12.2558C25.9483,12.0638 26.4746,12.1657 26.8256,12.5138C27.1766,12.8619 27.2828,13.3874 27.0946,13.8445C26.9064,14.3016 26.4609,14.6 25.9666,14.6L25.9066,14.6L25.1966,15.83C25.8215,16.2665 26.3662,16.8078 26.8066,17.43L28.0366,16.72L28.0366,16.72C28.1151,16.0882 28.6664,15.623 29.3024,15.6518C29.9384,15.6806 30.4454,16.1937 30.4666,16.83C30.4666,17.5038 29.9203,18.05 29.2466,18.05C29.0115,18.0512 28.7815,17.9815 28.5866,17.85L27.4166,18.53C27.7375,19.2207 27.9371,19.9615 28.0066,20.72L29.4066,20.72C29.6281,20.3444 30.0305,20.1128 30.4666,20.11C31.1403,20.11 31.6866,20.6562 31.6866,21.33C31.6866,22.0038 31.1403,22.55 30.4666,22.55C30.0305,22.5472 29.6281,22.3156 29.4066,21.94L28.0066,21.94C27.9371,22.6985 27.7375,23.4393 27.4166,24.13L28.5866,24.81C28.7815,24.6785 29.0115,24.6088 29.2466,24.61C29.7069,24.5682 30.1514,24.7902 30.3945,25.1834C30.6377,25.5766 30.6377,26.0734 30.3945,26.4666C30.1514,26.8598 29.7069,27.0818 29.2466,27.04C28.619,27.0426 28.0936,26.565 28.0366,25.94L28.0366,25.89L26.8066,25.19C26.3662,25.8122 25.8215,26.3535 25.1966,26.79L25.9066,28.02L25.9666,28.02C26.5923,28.0221 27.115,28.4973 27.1766,29.12L27.1766,29.23C27.2184,29.6904 26.9964,30.1349 26.6032,30.378C26.21,30.6211 25.7131,30.6211 25.3199,30.378C24.9267,30.1349 24.7047,29.6904 24.7466,29.23C24.7452,29.0377 24.7934,28.8483 24.8866,28.68L24.1466,27.4C23.4535,27.7242 22.7088,27.9239 21.9466,27.99L21.9466,29.4C22.3098,29.6047 22.5408,29.9833 22.5566,30.4C22.5984,30.8604 22.3764,31.3049 21.9832,31.548C21.59,31.7911 21.0931,31.7911 20.6999,31.548C20.3067,31.3049 20.0847,30.8604 20.1266,30.4C20.1423,29.9833 20.3733,29.6047 20.7366,29.4L20.7366,27.99C19.9743,27.9239 19.2296,27.7242 18.5366,27.4L17.8366,28.69C17.9216,28.8609 17.9661,29.0491 17.9666,29.24C17.9706,29.7352 17.6748,30.1838 17.2181,30.3752C16.7613,30.5666 16.2341,30.4628 15.8839,30.1126C15.5337,29.7624 15.43,29.2353 15.6214,28.7785C15.8128,28.3217 16.2613,28.026 16.7566,28.03L16.7566,28.03L17.4666,26.8C16.8439,26.3608 16.2996,25.8199 15.8566,25.2L14.6366,25.9C14.6038,26.565 14.044,27.0809 13.3785,27.0594C12.7131,27.0378 12.1878,26.4867 12.1982,25.821C12.2086,25.1553 12.7508,24.6208 13.4166,24.62C13.6519,24.6169 13.8825,24.6868 14.0766,24.82L15.2466,24.14C14.9288,23.4487 14.7326,22.7079 14.6666,21.95L13.2766,21.95C13.0005,22.4282 12.4376,22.6613 11.9042,22.5184C11.3709,22.3755 11,21.8922 11,21.34C11,20.7878 11.3709,20.3045 11.9042,20.1616C12.4376,20.0187 13.0005,20.2518 13.2766,20.73L14.6866,20.73C14.7526,19.9721 14.9488,19.2312 15.2666,18.54L14.0966,17.86C13.9025,17.9932 13.6719,18.0631 13.4366,18.06C12.7708,18.0592 12.2286,17.5247 12.2182,16.859C12.2078,16.1933 12.7331,15.6422 13.3985,15.6206C14.064,15.5991 14.6238,16.115 14.6566,16.78L15.8766,17.48C16.3196,16.8601 16.8639,16.3192 17.4866,15.88L16.7766,14.65L16.7766,14.65C16.2813,14.654 15.8328,14.3583 15.6414,13.9015C15.45,13.4447 15.5537,12.9176 15.9039,12.5674C16.2541,12.2172 16.7813,12.1134 17.2381,12.3048C17.6948,12.4962 17.9906,12.9448 17.9866,13.44C17.9861,13.6309 17.9416,13.8191 17.8566,13.99L18.5866,15.27C19.2796,14.9458 20.0243,14.7461 20.7866,14.68L20.7866,13.27C20.4233,13.0653 20.1923,12.6867 20.1766,12.27C20.163,11.9464 20.2787,11.6306 20.4982,11.3924C20.7177,11.1542 21.0229,11.013 21.3466,11L21.3466,11Z\"\n      android:strokeWidth=\"1\"\n      android:fillColor=\"#2D842F\"\n      android:fillType=\"nonZero\"\n      android:strokeColor=\"#00000000\"/>\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_prevention.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"24dp\"\n    android:height=\"24dp\"\n    android:autoMirrored=\"true\"\n    android:viewportWidth=\"30\"\n    android:viewportHeight=\"30\">\n    <path\n        android:fillColor=\"#757575\"\n        android:pathData=\"M15,2C12.57,2 4,3 4,13v5a4.17,4.17 0,0 0,1.34 3.19,2.07 2.07,0 0,0 0.87,0.48c0.36,0.93 2.65,6.25 8.67,6.32h0.24c6,-0.07 8.31,-5.39 8.67,-6.32a2.07,2.07 0,0 0,0.87 -0.48A4.17,4.17 0,0 0,26 18L26,13c0,-4 -2,-9 -6,-9C20,4 19,2 15,2ZM20,8s3,2.76 3,9h1v1a2,2 0,0 1,-0.66 1.69,1.5 1.5,0 0,1 -0.58,0.34l-0.54,0.13 -0.17,0.52S20.33,26 15,26s-7,-5.32 -7,-5.32l-0.17,-0.52L7.24,20a1.5,1.5 0,0 1,-0.58 -0.34A2,2 0,0 1,6 18L6,17L7,17C7,10 17,15 20,8ZM10.5,16A1.5,1.5 0,1 0,12 17.5,1.5 1.5,0 0,0 10.5,16ZM19.5,16A1.5,1.5 0,1 0,21 17.5,1.5 1.5,0 0,0 19.5,16Z\" />\n    <path\n        android:fillColor=\"#757575\"\n        android:pathData=\"M20,26.23H9.75V20.65a44.22,44.22 0,0 1,4.95 -0.73,47.39 47.39,0 0,1 5.27,0.73Z\" />\n    <path\n        android:fillColor=\"#757575\"\n        android:pathData=\"M7.5361,20.1105l3.5769,0.5569l-0.1754,1.1264l-3.5769,-0.5569z\" />\n    <path\n        android:fillColor=\"#757575\"\n        android:pathData=\"M22.6909,21.2473l-3.5769,0.5569l-0.1754,-1.1264l3.5769,-0.5569z\" />\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_privacy.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"130dp\"\n    android:height=\"130dp\"\n    android:viewportWidth=\"130\"\n    android:viewportHeight=\"130\">\n  <path\n      android:pathData=\"M64.974,123.292C97.168,123.292 123.266,97.194 123.266,65C123.266,32.806 97.168,6.708 64.974,6.708C32.78,6.708 6.682,32.806 6.682,65C6.682,97.194 32.78,123.292 64.974,123.292Z\"\n      android:fillColor=\"#BFE3F8\"\n      android:fillType=\"evenOdd\"/>\n  <path\n      android:pathData=\"M40.95,47.632C49.686,41.47 60.658,88.66 60.19,92.066C58.344,105.794 54.366,119.756 46.982,123.058C40.56,122.46 32.604,120.12 26.858,117.52C27.118,112.138 26.91,92.872 27.898,84.734C28.808,77.22 39.26,48.828 40.95,47.632Z\"\n      android:fillColor=\"#F6B485\"\n      android:fillType=\"evenOdd\"/>\n  <path\n      android:pathData=\"M81.094,107.822L49.01,107.822C45.266,107.822 42.198,104.754 42.198,101.01L42.198,20.826C42.198,17.082 45.266,14.014 49.01,14.014L81.094,14.014C84.838,14.014 87.906,17.082 87.906,20.826L87.906,100.984C87.906,104.754 84.838,107.822 81.094,107.822Z\"\n      android:fillColor=\"#214880\"\n      android:fillType=\"evenOdd\"/>\n  <path\n      android:pathData=\"M80.184,17.836L72.28,17.836C71.604,17.836 71.032,17.264 71.032,16.588L71.032,14.43C71.032,13.754 71.604,13.182 72.28,13.182L80.184,13.182C80.86,13.182 81.432,13.754 81.432,14.43L81.432,16.588C81.432,17.264 80.886,17.836 80.184,17.836ZM46.878,20.54L46.878,26.286C46.878,26.962 46.306,27.534 45.63,27.534L42.536,27.534C41.86,27.534 41.288,26.962 41.288,26.286L41.288,20.54C41.288,19.864 41.86,19.292 42.536,19.292L45.63,19.292C46.306,19.292 46.878,19.864 46.878,20.54ZM46.878,34.762L46.878,37.362C46.878,37.778 46.54,38.116 46.124,38.116L42.068,38.116C41.652,38.116 41.314,37.778 41.314,37.362L41.314,34.762C41.314,34.346 41.652,34.008 42.068,34.008L46.124,34.008C46.514,34.008 46.878,34.346 46.878,34.762ZM46.878,44.2L46.878,46.8C46.878,47.216 46.54,47.554 46.124,47.554L42.068,47.554C41.652,47.554 41.314,47.216 41.314,46.8L41.314,44.2C41.314,43.784 41.652,43.446 42.068,43.446L46.124,43.446C46.514,43.446 46.878,43.784 46.878,44.2Z\"\n      android:fillColor=\"#214880\"\n      android:fillType=\"evenOdd\"/>\n  <path\n      android:pathData=\"M69.394,22.516L60.71,22.516C60.502,22.516 60.346,22.36 60.346,22.152L60.346,22.1C60.346,21.892 60.502,21.736 60.71,21.736L69.394,21.736C69.602,21.736 69.758,21.892 69.758,22.1L69.758,22.126C69.758,22.334 69.602,22.516 69.394,22.516ZM67.314,19.188L62.79,19.188C62.582,19.188 62.426,19.032 62.426,18.824L62.426,18.798C62.426,18.59 62.582,18.434 62.79,18.434L67.314,18.434C67.522,18.434 67.678,18.59 67.678,18.798L67.678,18.824C67.678,19.032 67.496,19.188 67.314,19.188ZM58.526,21.996C58.526,22.672 57.98,23.218 57.304,23.218C56.628,23.218 56.082,22.672 56.082,21.996C56.082,21.32 56.628,20.774 57.304,20.774C57.98,20.774 58.526,21.32 58.526,21.996ZM65.052,105.144C64.012,105.144 63.05,104.728 62.296,104C60.788,102.492 60.788,100.022 62.296,98.514C63.804,97.006 66.274,97.006 67.782,98.514C69.29,100.022 69.29,102.492 67.782,104C67.054,104.754 66.092,105.144 65.052,105.144ZM65.052,97.708C64.142,97.708 63.232,98.046 62.556,98.748C61.178,100.126 61.178,102.388 62.556,103.766C63.232,104.442 64.116,104.806 65.052,104.806C65.988,104.806 66.898,104.442 67.548,103.766C68.926,102.388 68.926,100.126 67.548,98.748C66.872,98.072 65.962,97.708 65.052,97.708Z\"\n      android:fillColor=\"#15284E\"\n      android:fillType=\"evenOdd\"/>\n  <path\n      android:pathData=\"M84.11,95.03L45.994,95.03C45.318,95.03 44.746,94.458 44.746,93.782L44.746,28.054C44.746,27.378 45.318,26.806 45.994,26.806L84.11,26.806C84.786,26.806 85.358,27.378 85.358,28.054L85.358,93.782C85.332,94.458 84.786,95.03 84.11,95.03Z\"\n      android:fillColor=\"#A6A7AB\"\n      android:fillType=\"evenOdd\"/>\n  <path\n      android:pathData=\"M85,27l-40,0l0,68l40,0z\"\n      android:fillColor=\"#FFF\"\n      android:fillType=\"evenOdd\"/>\n  <path\n      android:pathData=\"M52.468,28.86L46.566,28.86C46.358,28.86 46.202,28.704 46.202,28.496L46.202,28.47C46.202,28.262 46.358,28.106 46.566,28.106L52.468,28.106C52.676,28.106 52.832,28.262 52.832,28.47L52.832,28.496C52.832,28.678 52.676,28.86 52.468,28.86ZM60.06,28.86L54.158,28.86C53.95,28.86 53.794,28.704 53.794,28.496L53.794,28.47C53.794,28.262 53.95,28.106 54.158,28.106L60.06,28.106C60.268,28.106 60.424,28.262 60.424,28.47L60.424,28.496C60.45,28.678 60.268,28.86 60.06,28.86ZM83.434,28.86L74.75,28.86C74.542,28.86 74.386,28.704 74.386,28.496L74.386,28.47C74.386,28.262 74.542,28.106 74.75,28.106L83.434,28.106C83.642,28.106 83.798,28.262 83.798,28.47L83.798,28.496C83.798,28.678 83.642,28.86 83.434,28.86Z\"\n      android:fillColor=\"#243D5B\"\n      android:fillType=\"evenOdd\"/>\n  <path\n      android:pathData=\"M65,34L51,40.182L51,49.455C51,58.032 56.973,66.053 65,68C73.027,66.053 79,58.032 79,49.455L79,40.182L65,34Z\"\n      android:fillColor=\"#8CC23F\"\n      android:fillType=\"evenOdd\"/>\n  <path\n      android:pathData=\"M65.066,56C64.718,56 64.387,55.845 64.147,55.57L60.324,51.151C59.861,50.618 59.899,49.787 60.405,49.3C60.911,48.813 61.7,48.853 62.162,49.386L64.892,52.544L69.706,44.606C70.076,43.999 70.843,43.815 71.425,44.205C72.001,44.595 72.175,45.403 71.805,46.016L66.116,55.398C65.91,55.742 65.561,55.966 65.175,56C65.137,56 65.105,56 65.066,56Z\"\n      android:fillColor=\"#E0E8BD\"\n      android:fillType=\"evenOdd\"/>\n  <path\n      android:pathData=\"M41.444,117.78C43.836,118.404 52.052,107.666 48.906,93.834C55.718,89.128 60.502,74.386 55.796,71.838C52.52,70.096 31.902,96.252 31.72,99.112C31.434,104.364 41.886,114.4 41.444,117.78Z\"\n      android:fillColor=\"#F6B485\"\n      android:fillType=\"evenOdd\"/>\n  <path\n      android:pathData=\"M65,0C29.094,0 0,29.094 0,65C0,100.906 29.094,130 65,130C100.906,130 130,100.906 130,65C130,29.094 100.906,0 65,0ZM65,123.292C32.812,123.292 6.708,97.188 6.708,65C6.708,32.812 32.812,6.708 65,6.708C97.188,6.708 123.292,32.812 123.292,65C123.292,97.188 97.188,123.292 65,123.292Z\"\n      android:fillColor=\"#DFF2FC\"\n      android:fillType=\"evenOdd\"/>\n  <path\n      android:pathData=\"M48.88,93.912C49.53,96.122 49.92,98.41 50.024,100.724C50.128,103.038 49.92,105.43 49.218,107.692C48.542,109.954 47.32,112.086 45.708,113.828C44.122,115.57 42.172,116.922 40.092,117.91C41.834,116.402 43.472,114.842 44.824,113.074C46.15,111.306 47.164,109.33 47.788,107.25C48.438,105.144 48.724,102.96 48.854,100.698C48.984,98.488 48.906,96.2 48.88,93.912Z\"\n      android:fillColor=\"#D79468\"\n      android:fillType=\"evenOdd\"/>\n  <path\n      android:pathData=\"M85.852,67.496C87.464,71.396 92.378,80.132 97.136,84.734C99.788,82.212 115.31,76.388 118.248,77.792C119.461,78.375 120.611,79.143 121.691,80.061C117.966,94.329 108.969,106.466 96.907,114.269C89.001,110.456 82.841,104.655 83.356,102.492C83.842,100.483 89.525,101.312 96.163,102.769C89.417,94.13 81.941,82.107 78.988,69.628C77.402,62.972 82.29,58.838 85.852,67.496Z\"\n      android:fillColor=\"#F6B485\"\n      android:fillType=\"evenOdd\"/>\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_restriction.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"24dp\"\n    android:height=\"24dp\"\n    android:viewportWidth=\"24\"\n    android:viewportHeight=\"24\">\n  <path\n      android:pathData=\"M19,5V19H5V5H19ZM20.1,3H3.9C3.4,3 3,3.4 3,3.9V20.1C3,20.5 3.4,21 3.9,21H20.1C20.5,21 21,20.5 21,20.1V3.9C21,3.4 20.5,3 20.1,3ZM11,7H17V9H11V7ZM11,11H17V13H11V11ZM11,15H17V17H11V15ZM7,7H9V9H7V7ZM7,11H9V13H7V11ZM7,15H9V17H7V15Z\"\n      android:fillColor=\"#757575\"/>\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_risky_encounter.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"42dp\"\n    android:height=\"42dp\"\n    android:viewportWidth=\"42\"\n    android:viewportHeight=\"42\">\n  <path\n      android:pathData=\"M21,39.8C31.4,39.8 39.8,31.4 39.8,21C39.8,10.6 31.4,2.2 21,2.2C10.6,2.2 2.2,10.6 2.2,21C2.2,31.4 10.6,39.8 21,39.8Z\"\n      android:strokeWidth=\"1\"\n      android:fillColor=\"#FDF7F8\"\n      android:fillType=\"nonZero\"\n      android:strokeColor=\"#00000000\"/>\n  <path\n      android:pathData=\"M27.7,13.5L26.9,13.5L26.9,11.8L25.2,11.8L25.2,13.5L16.9,13.5L16.9,11.8L15.2,11.8L15.2,13.5L14.4,13.5C13.5,13.5 12.7,14.3 12.7,15.2L12.7,28.5C12.7,29.4 13.5,30.2 14.4,30.2L27.7,30.2C28.6,30.2 29.4,29.4 29.4,28.5L29.4,15.2C29.3,14.2 28.6,13.5 27.7,13.5ZM27.7,28.5L14.3,28.5L14.3,17.7L27.6,17.7L27.6,28.5L27.7,28.5Z\"\n      android:strokeWidth=\"1\"\n      android:fillColor=\"#D21A4B\"\n      android:fillType=\"nonZero\"\n      android:strokeColor=\"#00000000\"/>\n  <path\n      android:pathData=\"M17.9,26L19.1,26L19.1,20.4L17.9,20.4L16.4,21.4L16.4,22.5L17.8,21.5L17.9,21.5L17.9,26ZM22.9,26L24,26L24,25L24.7,25L24.7,24L24,24L24,20.3L22.3,20.3C21.5,21.5 20.8,22.7 20.1,24L20.1,24.9L22.9,24.9L22.9,26L22.9,26ZM21.2,24C21.7,23.1 22.3,22.1 22.9,21.3L23,21.3L23,24.1L21.2,24L21.2,24Z\"\n      android:strokeWidth=\"1\"\n      android:fillColor=\"#D21A4B\"\n      android:fillType=\"nonZero\"\n      android:strokeColor=\"#00000000\"/>\n  <path\n      android:pathData=\"M21,0C9.4,0 0,9.4 0,21C0,32.6 9.4,42 21,42C32.6,42 42,32.6 42,21C42,9.4 32.6,0 21,0ZM21,39.8C10.6,39.8 2.2,31.4 2.2,21C2.2,10.6 10.6,2.2 21,2.2C31.4,2.2 39.8,10.6 39.8,21C39.8,31.4 31.4,39.8 21,39.8Z\"\n      android:strokeWidth=\"1\"\n      android:fillColor=\"#F2D3D4\"\n      android:fillType=\"nonZero\"\n      android:strokeColor=\"#00000000\"/>\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_shortcut_resume.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"130dp\"\n    android:height=\"130dp\"\n    android:viewportWidth=\"500\"\n    android:viewportHeight=\"500\">\n  <path\n      android:pathData=\"M250.1,250m-224.2,0a224.2,224.2 0,1 1,448.4 0a224.2,224.2 0,1 1,-448.4 0\"\n      android:fillColor=\"#E0E8BD\"/>\n  <path\n      android:pathData=\"M250,0C111.9,0 0,111.9 0,250c0,138.1 111.9,250 250,250s250,-111.9 250,-250C500,111.9 388.1,0 250,0zM250,474.2C126.2,474.2 25.8,373.8 25.8,250S126.2,25.8 250,25.8S474.2,126.2 474.2,250S373.8,474.2 250,474.2z\"\n      android:fillColor=\"#F1F7E7\"/>\n  <path\n      android:pathData=\"M236,361.8c-6.4,0 -12.5,-2.7 -16.9,-7.5l-70.3,-77.1c-8.5,-9.3 -7.8,-23.8 1.5,-32.3c9.3,-8.5 23.8,-7.8 32.3,1.5l50.2,55.1L321.3,163c6.8,-10.6 20.9,-13.8 31.6,-7c10.6,6.8 13.8,20.9 7,31.6L255.3,351.3c-3.8,6 -10.2,9.9 -17.3,10.5C237.3,361.8 236.7,361.8 236,361.8z\"\n      android:fillColor=\"#8CC23F\"/>\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_splashscreen_hands.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"490dp\"\n    android:height=\"338dp\"\n    android:viewportWidth=\"490\"\n    android:viewportHeight=\"338\">\n  <path\n      android:pathData=\"M108.854,150.093L61.002,121.574C59.609,120.744 59.153,118.941 59.984,117.549L122.007,13.477C122.837,12.083 124.64,11.627 126.033,12.458L173.885,40.976C175.277,41.806 175.734,43.609 174.903,45.001L112.88,149.073C112.05,150.466 110.247,150.923 108.854,150.093\"\n      android:fillColor=\"#547F93\"\n      android:fillType=\"evenOdd\"/>\n  <path\n      android:pathData=\"M117.215,141.799l-52.897,-31.525l55.219,-92.652l52.896,31.525z\"\n      android:fillColor=\"#BADDF3\"\n      android:fillType=\"evenOdd\"/>\n  <path\n      android:pathData=\"M125.807,127.381l-52.896,-31.525l27.057,-45.399l52.896,31.524z\"\n      android:fillColor=\"#DDEAF6\"\n      android:fillType=\"evenOdd\"/>\n  <path\n      android:pathData=\"M157.532,65.16l-44.748,-26.669l2.078,-3.488l44.748,26.67z\"\n      android:fillColor=\"#7BABC3\"\n      android:fillType=\"evenOdd\"/>\n  <path\n      android:pathData=\"M131.446,60.23l-23.331,-13.905l2.078,-3.487l23.331,13.905z\"\n      android:fillColor=\"#7BABC3\"\n      android:fillType=\"evenOdd\"/>\n  <path\n      android:pathData=\"M152.863,72.994l-16.203,-9.657l2.078,-3.487l16.203,9.657z\"\n      android:fillColor=\"#7BABC3\"\n      android:fillType=\"evenOdd\"/>\n  <group>\n    <clip-path\n        android:pathData=\"M337.447,23.913l96.968,25.983l-35.938,134.122l-96.968,-25.983z\"/>\n    <path\n        android:pathData=\"M401.715,164.549L346.261,169.834C344.646,169.988 343.213,168.804 343.06,167.19L331.564,46.584C331.41,44.969 332.594,43.536 334.209,43.382L389.662,38.096C391.277,37.942 392.71,39.127 392.864,40.741L404.359,161.347C404.514,162.961 403.329,164.395 401.715,164.549\"\n        android:fillColor=\"#5D8DA4\"\n        android:fillType=\"evenOdd\"/>\n  </group>\n  <path\n      android:pathData=\"M403.556,152.917l-61.3,5.842l-10.234,-107.371l61.3,-5.843z\"\n      android:fillColor=\"#DDEAF6\"\n      android:fillType=\"evenOdd\"/>\n  <path\n      android:pathData=\"M399.504,110.414l-61.3,5.843l-2.556,-26.818l61.3,-5.842z\"\n      android:fillColor=\"#BADDF3\"\n      android:fillType=\"evenOdd\"/>\n  <path\n      android:pathData=\"M390.769,67.268l-51.857,4.943l-0.385,-4.041l51.857,-4.942z\"\n      android:fillColor=\"#AECEE2\"\n      android:fillType=\"evenOdd\"/>\n  <path\n      android:pathData=\"M366.815,78.713l-27.038,2.577l-0.385,-4.04l27.038,-2.577z\"\n      android:fillColor=\"#AECEE2\"\n      android:fillType=\"evenOdd\"/>\n  <path\n      android:pathData=\"M391.634,76.347l-18.777,1.79l-0.385,-4.041l18.777,-1.789z\"\n      android:fillColor=\"#AECEE2\"\n      android:fillType=\"evenOdd\"/>\n  <path\n      android:pathData=\"M351.135,124.173C351.328,126.053 349.959,127.733 348.079,127.926C346.199,128.119 344.519,126.751 344.326,124.871C344.133,122.99 345.501,121.31 347.381,121.117C349.262,120.925 350.942,122.293 351.135,124.173\"\n      android:fillColor=\"#AECEE2\"\n      android:fillType=\"evenOdd\"/>\n  <path\n      android:pathData=\"M459.838,245.94C460.423,248.987 477.526,284.354 486.163,333.256C489.477,352.018 499.468,401.289 497.144,415.915C494.246,434.153 463.172,407.853 451.158,409.804C450.039,409.986 430.392,409.133 427.01,403.334C423.628,397.535 428.732,345.377 430.871,340.16C438.972,320.406 432.936,316.849 423.018,294.595C413.099,272.342 408.336,237.747 406.389,212.835C414.287,200.203 426.952,200.081 439.696,200.13C446.038,203.395 455.283,235.734 459.838,245.94Z\"\n      android:fillColor=\"#DDEEF9\"\n      android:fillType=\"evenOdd\"/>\n  <path\n      android:pathData=\"M402.308,213.471C403.932,211.191 404.944,210.989 407.606,212.311C415.617,239.199 423.623,273.017 435.815,312.518C448.006,352.02 444.277,411.279 439.479,426.345C434.681,441.412 418.615,422.371 412.364,423.221C406.112,424.071 400.841,234.9 402.308,213.471Z\"\n      android:fillColor=\"#BFD7E9\"\n      android:fillType=\"evenOdd\"/>\n  <path\n      android:pathData=\"M439.878,200.762C428.832,203.359 417.099,204.983 407.608,212.312C405.996,212.745 404.385,213.18 402.775,213.614C392.906,208.796 394.88,201.506 398.639,193.831C408.871,186.7 419.895,182.568 432.621,185.086C438.335,189.183 440.685,193.831 439.878,200.762Z\"\n      android:fillColor=\"#5D8DA4\"\n      android:fillType=\"evenOdd\"/>\n  <path\n      android:pathData=\"M399.978,115.437C408.584,122.147 412.648,131.452 416.217,140.726C421.978,155.693 427.579,169.839 432.619,185.085C421.96,188.259 411.299,191.431 400.636,194.607C399.228,191.926 399.221,188.129 395.834,186.962C382.669,182.424 371.387,170.728 357.041,168.977C356.745,167.743 373.733,167.38 377.776,166.844C382.471,166.223 387.167,165.688 388.707,166.138C389.36,166.569 385.752,163.856 384.884,161.82C382.136,155.371 384.768,153.366 385.864,151.488C390.174,144.094 381.491,140.259 375.188,141.217C372.092,141.688 369.078,142.522 366.594,140.298C364.524,137.934 365.208,136.745 366.3,133.766C367.619,131.036 373.469,128.148 376.114,127.251C380.611,125.991 385.838,124.896 390.131,126.825C400.52,131.492 402.745,140.404 400.497,121.217C400.414,120.508 400.327,118.525 399.978,115.437Z\"\n      android:fillColor=\"#A6D0EA\"\n      android:fillType=\"evenOdd\"/>\n  <path\n      android:pathData=\"M339.066,123.639C338.979,124.158 339.564,130.643 340.159,136.761C333.328,135.017 320.254,143.988 317.86,130.061C318.148,127.926 319.616,126.798 321.384,125.926C327.278,125.164 333.173,124.402 339.066,123.639\"\n      android:fillColor=\"#A6D0EA\"\n      android:fillType=\"evenOdd\"/>\n  <path\n      android:pathData=\"M336.059,94.545C336.411,98.871 336.846,102.515 337.26,107.362C333.251,105.723 327.897,103.771 327.973,98.757C328.035,94.571 332.85,94.409 336.059,94.545\"\n      android:fillColor=\"#A6D0EA\"\n      android:fillType=\"evenOdd\"/>\n  <path\n      android:pathData=\"M340.657,141.775C341.085,147.13 341.525,150.774 341.984,155.436C341.589,155.416 341.477,155.464 341.086,155.458C336.288,155.373 329.582,158.221 328.149,151.347C326.577,143.804 335.435,143.085 340.657,141.775\"\n      android:fillColor=\"#A6D0EA\"\n      android:fillType=\"evenOdd\"/>\n  <path\n      android:pathData=\"M342.449,161.18C343.231,167.384 347.52,168.819 352.822,169.209C350.748,170.122 348.811,171.253 346.691,172.052C343.421,173.283 339.963,174.59 337.371,170.934C334.29,166.585 341.709,161.291 342.449,161.18\"\n      android:fillColor=\"#A6D0EA\"\n      android:fillType=\"evenOdd\"/>\n  <path\n      android:pathData=\"M385.018,168.997C385.908,167.717 386.798,166.437 387.686,165.156C391.309,168.579 394.933,172.002 398.558,175.427C398.224,175.946 397.889,176.467 397.555,176.987C393.376,174.324 389.197,171.661 385.018,168.997\"\n      android:fillColor=\"#86C2E1\"\n      android:fillType=\"evenOdd\"/>\n  <path\n      android:pathData=\"M246.227,244.798L182.817,244.828C181.195,244.828 179.88,243.514 179.879,241.892L179.815,104.847C179.815,103.225 181.128,101.909 182.75,101.909L246.16,101.879C247.782,101.879 249.097,103.192 249.098,104.814L249.162,241.86C249.162,243.482 247.848,244.797 246.227,244.798\"\n      android:fillColor=\"#5D8DA4\"\n      android:fillType=\"evenOdd\"/>\n  <path\n      android:pathData=\"M249.157,231.966l-69.283,0.032l-0.056,-121.354l69.282,-0.033z\"\n      android:fillColor=\"#FFFDFF\"\n      android:fillType=\"evenOdd\"/>\n  <path\n      android:pathData=\"M249.148,213.081l-69.282,0.032l-0.028,-59.463l69.282,-0.033z\"\n      android:fillColor=\"#72B1C9\"\n      android:fillType=\"evenOdd\"/>\n  <path\n      android:pathData=\"M201.111,165.232C201.104,168.213 198.681,170.624 195.7,170.617C192.718,170.609 190.307,168.187 190.314,165.205C190.322,162.224 192.745,159.813 195.726,159.82C198.707,159.827 201.119,162.25 201.111,165.232\"\n      android:fillColor=\"#BADDF3\"\n      android:fillType=\"evenOdd\"/>\n  <path\n      android:pathData=\"M239.906,195.558l-52.365,-0.128l0.039,-16.195l52.366,0.127z\"\n      android:fillColor=\"#FFF\"\n      android:fillType=\"evenOdd\"/>\n  <path\n      android:pathData=\"M238.909,161.961l-31.312,-0.076l0.006,-2.16l31.31,0.076z\"\n      android:fillColor=\"#BADDF3\"\n      android:fillType=\"evenOdd\"/>\n  <path\n      android:pathData=\"M238.898,166.538l-31.312,-0.077l0.006,-2.159l31.31,0.076z\"\n      android:fillColor=\"#BADDF3\"\n      android:fillType=\"evenOdd\"/>\n  <path\n      android:pathData=\"M239.669,204.239l-52.436,-0.128l0.006,-2.158l52.435,0.127z\"\n      android:fillColor=\"#BADDF3\"\n      android:fillType=\"evenOdd\"/>\n  <path\n      android:pathData=\"M239.658,208.445l-52.435,-0.128l0.005,-2.16l52.436,0.128z\"\n      android:fillColor=\"#BADDF3\"\n      android:fillType=\"evenOdd\"/>\n  <path\n      android:pathData=\"M238.885,171.506l-31.311,-0.075l0.006,-2.16l31.31,0.075z\"\n      android:fillColor=\"#BADDF3\"\n      android:fillType=\"evenOdd\"/>\n  <path\n      android:pathData=\"M213.247,142.523l63.351,0l0,-20.622l-63.351,0z\"\n      android:fillColor=\"#E9ECF7\"\n      android:fillType=\"evenOdd\"/>\n  <path\n      android:pathData=\"M274.255,128.104l-58.61,0.028l-0.002,-3.266l58.61,-0.027z\"\n      android:fillColor=\"#8EC1DD\"\n      android:fillType=\"evenOdd\"/>\n  <path\n      android:pathData=\"M240.764,134.188l-25.01,0.011l-0.001,-3.266l25.009,-0.011z\"\n      android:fillColor=\"#8EC1DD\"\n      android:fillType=\"evenOdd\"/>\n  <path\n      android:pathData=\"M273.946,134.338l-21.622,0.01l-0.002,-3.266l21.623,-0.01z\"\n      android:fillColor=\"#8EC1DD\"\n      android:fillType=\"evenOdd\"/>\n  <path\n      android:pathData=\"M244.771,139.853l-28.914,0.014l-0.002,-3.267l28.915,-0.013z\"\n      android:fillColor=\"#8EC1DD\"\n      android:fillType=\"evenOdd\"/>\n  <path\n      android:pathData=\"M274.047,139.921l-21.622,0.011l-0.001,-3.266l21.622,-0.011z\"\n      android:fillColor=\"#8EC1DD\"\n      android:fillType=\"evenOdd\"/>\n  <path\n      android:pathData=\"M205.079,141.954C210.328,138.363 211.672,131.196 208.081,125.947C204.49,120.698 197.323,119.354 192.074,122.946C186.825,126.536 185.481,133.703 189.072,138.952C192.663,144.201 199.829,145.546 205.079,141.954\"\n      android:fillColor=\"#547F93\"\n      android:fillType=\"evenOdd\"/>\n  <path\n      android:pathData=\"M201.58,128.448C201.58,130.075 200.26,131.395 198.633,131.395 197.006,131.395 195.687,130.075 195.687,128.448 195.687,126.821 197.006,125.502 198.633,125.502 200.26,125.502 201.58,126.821 201.58,128.448M203.306,137.602C203.306,138.063 200.903,138.829 198.415,138.8 195.926,138.77 193.349,137.946 193.349,137.602 193.349,134.852 195.578,132.624 198.328,132.624 201.077,132.624 203.306,134.852 203.306,137.602\"\n      android:fillColor=\"#FFFDFF\"\n      android:fillType=\"evenOdd\"/>\n  <path\n      android:pathData=\"M56.42,166.614C58.669,160.442 64.166,158.151 70.497,157.831C82.549,158.632 94.201,160.865 104.598,167.526C108.855,171.485 108.607,176.162 107.661,181.53C101.606,215.9 91.349,248.923 78.192,281.07C76.369,285.524 74.491,289.96 72.56,294.381C67.1,306.883 61.652,364.36 47.857,368.476C34.063,372.592 23.966,366.828 10,367C2.48,367.092 -0.125,350.908 1,347C8.903,319.553 51.35,180.52 56.42,166.614Z\"\n      android:fillColor=\"#E0EEF7\"\n      android:fillType=\"evenOdd\"/>\n  <path\n      android:pathData=\"M206.745,352.815C185.63,352.885 164.486,352.32 143.412,353.281C132.189,353.793 132.535,349.818 132.895,339.357C132.973,337.084 137.59,322.517 138.911,316.713C141.962,308.425 144.326,299.909 147.352,291.618C149.063,286.927 150.624,282.079 155.819,279.86C177.663,276.926 197.457,281.147 214.038,296.612C218.814,308.382 213.818,319.941 213.287,331.604C212.71,339.169 213.04,347.019 206.745,352.815\"\n      android:fillColor=\"#7A99AA\"\n      android:fillType=\"evenOdd\"/>\n  <path\n      android:pathData=\"M41.127,360.905C32.251,358.007 38,385 54,338C60.395,319.214 70.626,296.06 80,267C94.078,223.357 106.561,174.348 103.899,170.376C104.633,166.873 106.342,165.366 109.826,167.471C116.011,174.762 113.708,223.541 113,232C110.223,265.184 97.577,345.916 93,347C82.355,349.519 56.12,366.468 45.11,367.059C48.372,364.888 47.045,362.837 41.127,360.905Z\"\n      android:fillColor=\"#A8D6F2\"\n      android:fillType=\"evenOdd\"/>\n  <path\n      android:pathData=\"M251.539,350.609C251.775,340.739 252.01,330.868 252.245,320.997C253.938,316.825 257.775,315.524 261.543,315.023C276.517,313.034 291.52,311.729 306.164,317.192C307.427,317.897 305.016,318.437 308.23,320.364C307.977,326.363 311.37,331.449 312.792,337.18C316.628,352.64 314.417,353.026 297.728,353.027C285.959,353.027 274.187,353.164 262.423,352.945C258.738,352.876 254.465,354.581 251.539,350.609\"\n      android:fillColor=\"#7A99AA\"\n      android:fillType=\"evenOdd\"/>\n  <path\n      android:pathData=\"M70.556,159.896C75.286,152.599 72.219,145.9 69.489,138.846C67.832,134.567 67.745,129.679 66.953,125.064C69.669,123.366 72.138,124.468 74.608,125.716C79.063,128.321 82.184,133.516 88.344,132.709C90.81,132.004 92.742,130.277 95.012,129.194C101.003,126.824 105.308,124.465 111.663,123.216C117.645,122.039 124.152,121.122 127.685,116.051C130.496,112.017 132.279,108.474 137.173,105.18C140.089,103.217 144.78,101.943 147.474,105.341C149.848,108.338 147.353,111.241 146.315,114.097C140.504,130.084 130.47,142.81 116.177,151.903C110.21,155.698 107.381,160.482 107.963,167.428C106.605,168.416 105.249,169.395 103.896,170.375C93.597,164.292 81.581,163.675 70.556,159.896\"\n      android:fillColor=\"#5D8DA4\"\n      android:fillType=\"evenOdd\"/>\n  <path\n      android:pathData=\"M155.19,281.895C149.466,269.351 160.373,271.285 166.41,268.979C181.762,265.415 195.688,267.406 207.034,279.44C215.78,283.119 217.863,288.709 211.942,296.593C194.246,286.971 175.587,281.068 155.19,281.895\"\n      android:fillColor=\"#517A8E\"\n      android:fillType=\"evenOdd\"/>\n  <path\n      android:pathData=\"M251.249,177.086C253.97,171.156 258.921,161.36 263.903,163.658C269.186,166.094 267.558,173.868 267.26,178.377C266.461,190.463 262.846,201.506 265.194,213.757C266.236,219.189 270.257,220.851 276.374,221.302C284.101,221.87 291.829,223.665 299.334,225.735C315.384,230.16 319.428,235.522 320.231,252.347C320.921,266.801 317.396,280.342 310.537,292.974C308.079,297.499 305.769,301.949 305.398,307.171C303.202,308.994 300.578,309.87 297.852,309.434C286.342,307.591 274.87,307.366 263.353,309.375C261.017,309.783 258.799,308.844 257.012,307.163C256.117,299.534 252.918,293.517 246.958,288.197C234.027,276.656 227.723,261.01 222.564,244.885C221.676,243.22 221.454,241.476 221.945,239.646C222.919,237.155 224.815,235.893 227.396,235.536C230.431,235.341 233.132,236.381 235.727,237.814C237.15,238.607 241.083,242.354 242.112,242.711C242.445,242.827 242.688,241.818 242.342,240.91C241.963,239.47 241.604,223.539 241.637,221.886C242.985,208.85 246.884,186.594 251.249,177.086\"\n      android:fillColor=\"#9BC1D8\"\n      android:fillType=\"evenOdd\"/>\n  <path\n      android:pathData=\"M207.034,279.44C194.031,273.833 180.444,270.505 166.401,268.983C167.404,256.376 168.121,244.042 166.402,231.717C162.949,206.961 166.815,192.619 173.137,169.03C173.369,168.166 176.787,160.675 177.37,159.906C178.497,158.421 179.91,157.084 179.816,160.565C179.687,165.353 180.078,165.721 180.078,170.984C180.078,181.019 179.254,192.167 180.639,202.139C180.653,202.245 184.999,200.238 185.183,200.08C185.77,199.582 186.205,198.921 186.656,198.207C191.833,191.281 196.283,183.859 202.368,177.735C205.702,174.378 209.449,170.88 214.655,173.306C219.458,175.544 215.538,181.146 213.362,185.499C210.174,191.873 206.421,198.259 202.616,204.752C199.605,209.888 197.334,213.36 196.104,222.693C193.501,232.097 196.516,236.446 196.289,243.622C201.803,243.32 215.254,243.404 219.895,243.094C221.017,243.354 221.926,243.952 222.658,244.829C221.393,258.149 211.412,267.527 207.034,279.44\"\n      android:fillColor=\"#9BC1D8\"\n      android:fillType=\"evenOdd\"/>\n  <path\n      android:pathData=\"M257.012,307.163C273.145,302.541 289.277,303.745 305.404,307.175C310.607,310.651 308.45,315.716 308.23,320.364C289.525,316.847 270.849,315.867 252.243,320.995C246.348,313.802 251.09,310.278 257.012,307.163\"\n      android:fillColor=\"#517A8E\"\n      android:fillType=\"evenOdd\"/>\n  <path\n      android:pathData=\"M98.121,45.613C98.618,47.203 99.435,48.999 99.748,50.844 97.278,54.76 93.891,60.753 91.607,64.379 89.093,59.05 88.586,56.191 87.689,52.611 86.555,48.09 84.767,42.678 90.273,40.232 95.416,37.946 96.907,41.726 98.121,45.613M84.801,81.542C84.223,87.573 86.807,96.011 75.455,93.831 73.868,93.597 72.797,92.772 72.418,91.162 68.931,83.218 68.641,77.04 80.047,77.32 83.953,76.108 84.949,78.18 84.801,81.542\"\n      android:fillColor=\"#5D8DA4\"\n      android:fillType=\"evenOdd\"/>\n  <path\n      android:pathData=\"M84.801,81.542C83.216,80.135 81.631,78.727 80.047,77.32 79.567,70.3 81.042,65.457 90.285,66.685 96.371,73.956 96.406,81.424 84.801,81.542M72.418,91.161C73.43,92.051 74.442,92.941 75.455,93.831 76.126,95.499 76.796,97.167 77.467,98.835 74.764,111.413 68.237,103.797 66.406,100.237 63.543,94.67 64.96,90.428 72.418,91.161\"\n      android:fillColor=\"#5D8DA4\"\n      android:fillType=\"evenOdd\"/>\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_splashscreen_logo.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"125dp\"\n    android:height=\"133dp\"\n    android:viewportWidth=\"125\"\n    android:viewportHeight=\"133\">\n  <path\n      android:pathData=\"M115.433,37.684L115.433,86.592C115.433,102.986 102.286,116.276 86.069,116.276L37.687,116.276C21.47,116.276 8.323,102.986 8.323,86.592L8.323,37.684C8.323,21.29 21.47,8 37.687,8L86.07,8C102.287,8 115.433,21.291 115.433,37.684Z\"\n      android:fillColor=\"#FF0D58\"\n      android:fillType=\"nonZero\"/>\n  <group>\n    <clip-path\n        android:pathData=\"M115.433,37.684L115.433,86.592C115.433,102.986 102.286,116.276 86.069,116.276L37.687,116.276C21.47,116.276 8.323,102.986 8.323,86.592L8.323,37.684C8.323,21.29 21.47,8 37.687,8L86.07,8C102.287,8 115.433,21.291 115.433,37.684Z\"/>\n    <path\n        android:pathData=\"M28.406,84.225l31.705,32.051l55.327,0l0,-50.894l-20.083,-20.216l-66.943,39.059\"\n        android:fillColor=\"#E00051\"\n        android:fillType=\"nonZero\"/>\n  </group>\n  <path\n      android:pathData=\"M61.877,32.079C45.871,32.079 32.056,40.298 31.913,40.382L31.913,62.153C31.913,62.153 31.913,71.963 31.913,71.963L31.913,71.963L31.913,83.922C32.051,84.004 45.789,92.145 61.649,92.223L61.878,93.298L91.842,83.922L91.842,71.964L91.842,71.964L91.842,40.382C91.706,40.3 77.835,32.079 61.877,32.079Z\"\n      android:fillColor=\"#B6FFF6\"\n      android:fillType=\"nonZero\"/>\n  <path\n      android:pathData=\"M92.383,40.382L92.383,52.341L57.325,48.189L61.574,32.079C77.975,32.081 92.24,40.302 92.383,40.382Z\"\n      android:fillColor=\"#97F4EC\"\n      android:fillType=\"nonZero\"/>\n  <path\n      android:pathData=\"M92.381,71.964L92.381,83.922L61.575,93.298L57.326,73.966C57.326,73.966 92.166,72.026 92.381,71.964Z\"\n      android:fillColor=\"#B6FFF6\"\n      android:fillType=\"nonZero\"/>\n  <path\n      android:pathData=\"M57.325,60.003L61.574,76.113C71.973,76.03 82.322,74.636 92.38,71.963L92.38,62.151C92.24,62.151 57.325,60.003 57.325,60.003Z\"\n      android:fillColor=\"#97F4EC\"\n      android:fillType=\"nonZero\"/>\n  <path\n      android:pathData=\"M92.383,52.343L92.383,62.153L57.325,62.153L61.574,48.187C71.974,48.273 82.324,49.669 92.383,52.343Z\"\n      android:fillColor=\"#B6FFF6\"\n      android:fillType=\"nonZero\"/>\n  <path\n      android:pathData=\"M62.21,76.113L62.21,92.223C45.804,92.223 31.547,84.002 31.401,83.92L31.401,71.961L62.21,76.113Z\"\n      android:fillColor=\"#DAFFFB\"\n      android:fillType=\"nonZero\"/>\n  <path\n      android:pathData=\"M62.21,32.081L62.21,48.191L31.404,52.341L31.404,40.383C40.896,35.235 51.443,32.392 62.21,32.081L62.21,32.081Z\"\n      android:fillColor=\"#B6FFF6\"\n      android:fillType=\"nonZero\"/>\n  <path\n      android:pathData=\"M62.21,48.191L62.21,62.156L46.806,66.451L31.403,62.156L31.403,52.344C41.461,49.67 51.81,48.275 62.21,48.191Z\"\n      android:fillColor=\"#DAFFFB\"\n      android:fillType=\"nonZero\"/>\n  <path\n      android:pathData=\"M31.403,62.151C31.403,62.151 31.403,71.961 31.403,71.961C41.462,74.633 51.811,76.028 62.212,76.113L62.212,62.148L31.403,62.151Z\"\n      android:fillColor=\"#B6FFF6\"\n      android:fillType=\"nonZero\"/>\n  <path\n      android:pathData=\"M95.451,79.378L95.35,79.429L95.35,44.905L95.451,44.955C99.601,47.038 107.494,50.916 115.434,51.483L115.434,46.544C108.429,46.033 101.42,42.456 97.564,40.518C96.667,40.068 95.951,39.711 95.352,39.443L95.352,39.431L94.31,38.81C74.276,26.966 49.481,26.966 29.447,38.81L28.404,39.431L28.404,39.443C27.802,39.709 27.088,40.068 26.192,40.518C22.335,42.453 15.326,46.053 8.321,46.556L8.321,51.484C16.26,50.914 24.158,47.039 28.303,44.956L28.404,44.907L28.404,79.426L28.303,79.375C24.153,77.294 16.26,73.414 8.321,72.848L8.321,77.777C15.326,78.288 22.335,81.88 26.19,83.815C27.16,84.302 27.92,84.682 28.549,84.954L29.443,85.487C49.477,97.333 74.273,97.333 94.307,85.487L95.202,84.954C95.832,84.682 96.592,84.302 97.56,83.815C101.415,81.88 108.425,78.28 115.431,77.777L115.431,72.848C107.494,73.422 99.601,77.297 95.451,79.378ZM91.165,82.35C72.97,92.654 50.784,92.654 32.589,82.35L32.589,41.957C50.784,31.653 72.97,31.653 91.165,41.957L91.165,82.35Z\"\n      android:fillColor=\"#FFF\"\n      android:fillType=\"nonZero\"/>\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_symptoms.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"24dp\"\n    android:height=\"24dp\"\n    android:viewportWidth=\"24\"\n    android:viewportHeight=\"24\">\n    <path\n        android:fillColor=\"#757575\"\n        android:pathData=\"M11.5,0C9.4017,0 2.0016,0.8465 2.0016,9.3113V13.5437C1.9861,14.0487 2.0814,14.5512 2.281,15.017C2.4806,15.4829 2.7799,15.9013 3.1587,16.2439C3.3718,16.4372 3.6296,16.5766 3.9099,16.6502C4.2208,17.4375 6.1982,21.9407 11.3964,22H11.6036C16.7845,21.9407 18.7792,17.4375 19.0901,16.6502C19.3704,16.5766 19.6282,16.4372 19.8413,16.2439C20.2201,15.9013 20.5194,15.4829 20.719,15.017C20.9186,14.5512 21.0139,14.0487 20.9984,13.5437V9.3113C20.9984,5.9254 19.2714,1.693 15.8174,1.693C15.8174,1.693 14.954,0 11.5,0ZM15.8174,5.0789C15.8174,5.0789 18.4079,7.4152 18.4079,12.6972H19.2714V13.5437C19.2982,13.8093 19.2605,14.0773 19.1614,14.3259C19.0624,14.5746 18.9048,14.7967 18.7015,14.9742C18.5589,15.1061 18.3877,15.2045 18.2007,15.262L17.7344,15.3721L17.5876,15.8122C17.5876,15.8122 16.1024,20.3155 11.5,20.3155C6.8976,20.3155 5.4556,15.8122 5.4556,15.8122L5.3088,15.3721L4.7993,15.2366C4.6123,15.1791 4.4411,15.0807 4.2985,14.9488C4.0989,14.7739 3.9435,14.556 3.8446,14.3121C3.7457,14.0682 3.706,13.8052 3.7286,13.5437V12.6972H4.5921C4.5921,6.7718 13.227,11.0042 15.8174,5.0789Z\" />\n    <path\n        android:fillColor=\"#757575\"\n        android:pathData=\"M11.5,19C12.3284,19 13,18.3284 13,17.5C13,16.6716 12.3284,16 11.5,16C10.6716,16 10,16.6716 10,17.5C10,18.3284 10.6716,19 11.5,19Z\" />\n    <path\n        android:fillColor=\"#757575\"\n        android:pathData=\"M8.5,23C8.7761,23 9,22.7761 9,22.5C9,22.2239 8.7761,22 8.5,22C8.2239,22 8,22.2239 8,22.5C8,22.7761 8.2239,23 8.5,23Z\" />\n    <path\n        android:fillColor=\"#757575\"\n        android:pathData=\"M12.5,24C12.7761,24 13,23.7761 13,23.5C13,23.2239 12.7761,23 12.5,23C12.2239,23 12,23.2239 12,23.5C12,23.7761 12.2239,24 12.5,24Z\" />\n    <path\n        android:fillColor=\"#757575\"\n        android:pathData=\"M15.5,23C15.7761,23 16,22.7761 16,22.5C16,22.2239 15.7761,22 15.5,22C15.2239,22 15,22.2239 15,22.5C15,22.7761 15.2239,23 15.5,23Z\" />\n    <path\n        android:fillColor=\"#757575\"\n        android:pathData=\"M9.5,20C9.7761,20 10,19.7761 10,19.5C10,19.2239 9.7761,19 9.5,19C9.2239,19 9,19.2239 9,19.5C9,19.7761 9.2239,20 9.5,20Z\" />\n    <path\n        android:fillColor=\"#757575\"\n        android:pathData=\"M14.5,19C14.7761,19 15,18.7761 15,18.5C15,18.2239 14.7761,18 14.5,18C14.2239,18 14,18.2239 14,18.5C14,18.7761 14.2239,19 14.5,19Z\" />\n    <path\n        android:fillColor=\"#757575\"\n        android:pathData=\"M16.5,23C16.7761,23 17,22.7761 17,22.5C17,22.2239 16.7761,22 16.5,22C16.2239,22 16,22.2239 16,22.5C16,22.7761 16.2239,23 16.5,23Z\" />\n    <path\n        android:fillColor=\"#757575\"\n        android:pathData=\"M18.5,24C18.7761,24 19,23.7761 19,23.5C19,23.2239 18.7761,23 18.5,23C18.2239,23 18,23.2239 18,23.5C18,23.7761 18.2239,24 18.5,24Z\" />\n    <path\n        android:fillColor=\"#757575\"\n        android:pathData=\"M14.5,24C14.7761,24 15,23.7761 15,23.5C15,23.2239 14.7761,23 14.5,23C14.2239,23 14,23.2239 14,23.5C14,23.7761 14.2239,24 14.5,24Z\" />\n    <path\n        android:fillColor=\"#757575\"\n        android:pathData=\"M5.5,22C5.7761,22 6,21.7761 6,21.5C6,21.2239 5.7761,21 5.5,21C5.2239,21 5,21.2239 5,21.5C5,21.7761 5.2239,22 5.5,22Z\" />\n    <path\n        android:fillColor=\"#757575\"\n        android:pathData=\"M9.5,24C9.7761,24 10,23.7761 10,23.5C10,23.2239 9.7761,23 9.5,23C9.2239,23 9,23.2239 9,23.5C9,23.7761 9.2239,24 9.5,24Z\" />\n    <path\n        android:fillColor=\"#757575\"\n        android:pathData=\"M5.5,21C5.7761,21 6,20.7761 6,20.5C6,20.2239 5.7761,20 5.5,20C5.2239,20 5,20.2239 5,20.5C5,20.7761 5.2239,21 5.5,21Z\" />\n    <path\n        android:fillColor=\"#757575\"\n        android:pathData=\"M4.5,24C4.7761,24 5,23.7761 5,23.5C5,23.2239 4.7761,23 4.5,23C4.2239,23 4,23.2239 4,23.5C4,23.7761 4.2239,24 4.5,24Z\" />\n    <path\n        android:fillColor=\"#757575\"\n        android:pathData=\"M8.9585,12.8714L7.0908,12.5232C6.8658,12.4813 6.6493,12.6297 6.6074,12.8548C6.5654,13.0798 6.7139,13.2963 6.9389,13.3382L8.8066,13.6864C9.0317,13.7284 9.2481,13.5799 9.2901,13.3549C9.332,13.1298 9.1836,12.9134 8.9585,12.8714Z\" />\n    <path\n        android:fillColor=\"#757575\"\n        android:pathData=\"M14.3078,13.6759L16.1757,13.3287C16.4008,13.2868 16.5493,13.0705 16.5075,12.8454C16.4657,12.6203 16.2493,12.4718 16.0242,12.5136L14.1563,12.8608C13.9313,12.9027 13.7827,13.119 13.8246,13.3441C13.8664,13.5692 14.0828,13.7177 14.3078,13.6759Z\" />\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_test.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"24dp\"\n    android:height=\"24dp\"\n    android:viewportWidth=\"24\"\n    android:viewportHeight=\"24\">\n  <path\n      android:pathData=\"M8.8072,3.1679L16.5828,10.9436C17.3814,11.7421 17.83,12.8252 17.83,13.9545L17.8297,16.1378L20.6496,18.9578C21.1168,19.425 21.1168,20.1825 20.6496,20.6496C20.1825,21.1168 19.425,21.1168 18.9578,20.6496L16.1378,17.8297L13.9545,17.83C12.8818,17.83 11.8508,17.4252 11.0658,16.7003L12.1907,15.5743C12.5022,15.2628 12.5022,14.7579 12.1907,14.4464C11.8793,14.135 11.3743,14.135 11.0629,14.4464L9.935,15.5743L10.9561,16.5953C10.9519,16.5912 10.9478,16.587 10.9436,16.5828L4.2958,9.935L5.4236,8.8072C5.7351,8.4957 5.7351,7.9908 5.4236,7.6793C5.1122,7.3679 4.6072,7.3679 4.2958,7.6793L3.1679,8.8072C1.6107,7.2499 1.6107,4.7252 3.1679,3.1679C4.7252,1.6107 7.2499,1.6107 8.8072,3.1679ZM8.2433,8.2433C7.9541,8.5325 7.9334,8.9885 8.1813,9.3015L8.2433,9.3711L14.4464,15.5743C14.7579,15.8857 15.2628,15.8857 15.5743,15.5743C15.8635,15.2851 15.8841,14.829 15.6363,14.516L15.5743,14.4464L9.3711,8.2433C9.0597,7.9318 8.5547,7.9318 8.2433,8.2433ZM8.8072,11.0629C8.4957,10.7514 7.9908,10.7514 7.6793,11.0629L6.5515,12.1907L7.6793,13.3186L8.8072,12.1907C9.1186,11.8793 9.1186,11.3743 8.8072,11.0629Z\"\n      android:fillColor=\"#757575\"\n      android:fillType=\"evenOdd\"/>\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_travel.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"42dp\"\n    android:height=\"42dp\"\n    android:viewportWidth=\"42\"\n    android:viewportHeight=\"42\">\n  <path\n      android:pathData=\"M20.5466,39.9945C28.2706,40.1791 35.337,35.6677 38.4207,28.5834C41.5043,21.499 39.9909,13.2528 34.5927,7.7252C29.1944,2.1976 20.9865,0.4897 13.8315,3.4051C6.6765,6.3205 1.9994,13.2786 2.0013,21.0049C1.9421,25.9826 3.8628,30.7798 7.3408,34.3411C10.8188,37.9024 15.5691,39.9361 20.5466,39.9945Z\"\n      android:strokeWidth=\"1\"\n      android:fillColor=\"#FAFEFC\"\n      android:fillType=\"nonZero\"\n      android:strokeColor=\"#00000000\"/>\n  <path\n      android:pathData=\"M21,0C9.402,0 0,9.402 0,21C0,32.598 9.402,42 21,42C32.598,42 42,32.598 42,21C42,9.402 32.598,0 21,0ZM21.4534,39.9945C13.7294,40.1791 6.663,35.6677 3.5793,28.5834C0.4957,21.499 2.0091,13.2528 7.4073,7.7252C12.8056,2.1976 21.0135,0.4897 28.1685,3.4051C35.3235,6.3205 40.0006,13.2786 39.9987,21.0049C40.0579,25.9826 38.1372,30.7798 34.6592,34.3411C31.1812,37.9024 26.4309,39.9361 21.4534,39.9945Z\"\n      android:strokeWidth=\"1\"\n      android:fillColor=\"#CEF1D0\"\n      android:fillType=\"nonZero\"\n      android:strokeColor=\"#00000000\"/>\n  <path\n      android:pathData=\"M18.2275,19.0139C17.2723,17.859 16.3069,16.7138 15.362,15.5491C15.1434,15.3527 15.053,15.0592 15.1253,14.7814C15.1977,14.5036 15.4216,14.2845 15.7112,14.2082C16.3212,13.8702 17.0911,13.9495 17.6113,14.404C19.0389,15.5295 20.4973,16.6257 21.9352,17.7611C22.2344,18.0472 22.6872,18.1288 23.0753,17.9666C24.2873,17.5066 25.5197,17.1249 26.742,16.7138C27.5552,16.3866 28.4856,16.4636 29.2275,16.9194C29.8595,17.287 30.1476,18.0176 29.9259,18.6909C29.6787,19.5186 29.0045,20.1685 28.1388,20.4135C26.8652,20.8442 25.6019,21.2846 24.3283,21.6957C24.0037,21.7678 23.7613,22.0262 23.7224,22.3417C23.3526,24.1034 22.9315,25.8652 22.5618,27.6368C22.4668,28.2986 21.9366,28.8276 21.2471,28.9483C20.5076,29.1245 20.0762,28.8504 20.0454,28.1261C20.0146,27.4019 20.0454,26.8342 20.0454,26.1686C20.0454,25.1899 20.0454,24.2111 20.0454,23.1638C18.9465,23.5358 17.9194,23.8783 16.8923,24.2503C16.7896,24.2503 16.7074,24.4558 16.6663,24.583C16.5226,25.0626 16.3993,25.5618 16.2555,26.0512C16.0473,26.5844 15.4953,26.9232 14.8998,26.8831C14.4376,26.8146 14.1911,26.4525 14.2116,25.8261C14.2116,24.9941 14.3246,24.1622 14.3451,23.3204C14.3472,23.1097 14.2708,22.9051 14.1295,22.743C13.5338,22.0676 12.8867,21.4314 12.2807,20.7855C11.9553,20.505 11.9064,20.0349 12.1677,19.699C12.6202,19.2788 13.3148,19.2062 13.8521,19.5229L15.136,20.4233C15.2508,20.5049 15.3947,20.54 15.5366,20.5212C16.5636,20.1982 17.5907,19.8458 18.6178,19.4739C18.4535,19.2782 18.3405,19.1411 18.2275,19.0139Z\"\n      android:strokeWidth=\"1\"\n      android:fillColor=\"#2D842F\"\n      android:fillType=\"nonZero\"\n      android:strokeColor=\"#00000000\"/>\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_update_expansion.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"585.45dp\"\n    android:height=\"582.47dp\"\n    android:viewportWidth=\"585.45\"\n    android:viewportHeight=\"582.47\">\n  <path\n      android:pathData=\"M290.67,291.81m-262.51,0a262.51,262.51 0,1 1,525.02 0a262.51,262.51 0,1 1,-525.02 0\"\n      android:fillColor=\"#cae2f4\"/>\n  <path\n      android:pathData=\"M206.08,48.08c-0.21,-0.26 -0.6,-0.74 -0.59,-0.75 2,-1.7 3.74,-3.87 6,-4.83 1.26,-0.54 3,1.52 4.09,2.89 0.52,0.64 0,1.24 -0.34,1.82s-1.43,1.51 0.1,2c1.08,0.35 2.52,0.43 2.64,-1.08 0.41,-5.3 4.74,-5.7 8.36,-7.59 9,-4.69 18.74,-4.7 28.31,-6.1 0.73,-0.11 1.91,0.37 2.05,-1h16c1.17,1 2.57,1.64 3.43,3s2.31,1 3.62,0.89c9.05,-0.92 18.11,-1.75 27.15,-2.79 6.59,-0.77 12.59,0.2 17.72,4.75 1.82,1.61 4,1.69 6.3,1.3a24.39,24.39 0,0 1,3.28 -0.45c0.95,0 2.14,-0.63 2.79,0.4s0.22,2 -0.59,3c-1.58,1.88 -0.78,4.25 -1.07,6.4 -0.37,2.87 1.74,3.36 3.53,4.47 2.09,1.29 2.81,3.65 3.41,5.91 0.74,2.73 2.15,4.61 5.7,4.41 -1.18,1.91 -2.15,3.48 -3.13,5 -2.8,4.46 -2.76,6.79 0.75,10.78 1.7,1.93 1.53,3.15 -0.44,4.58a24.64,24.64 0,0 0,-3.43 3.11c-4,4.22 -9.2,5.64 -14.77,5.83 -4.42,0.15 -8,1.31 -10.93,5.07s-7.79,5.36 -12.73,5.57c-3.4,0.15 -6.08,0.76 -6.22,5a5.81,5.81 0,0 1,-2.29 4.32c-4,2.83 -4.87,7.2 -6.08,11.43 -0.51,1.79 -1,3.43 -3.43,3.15 -2.18,-0.25 -5,1.82 -6,-2.25 -0.59,-2.36 -3,-2.15 -5.09,-2 -5.26,0.5 -5.26,0.48 -7.14,-4.46a23.93,23.93 0,0 0,-3.72 -7,10.3 10.3,0 0,1 -2.12,-4.83 34.56,34.56 0,0 0,-1.16 -5.17c-2.61,-7.49 -1.38,-10.88 5.52,-14.76 0.17,-0.1 0.26,-0.33 0.47,-0.62 -2.05,-1.12 -4.06,-2.27 -6.11,-3.32 -1.34,-0.68 -1.65,-1.23 -0.3,-2.32 1.95,-1.56 3.74,-3.31 5.59,-5 -0.81,-1.08 -1.86,-0.64 -2.63,-1 -1.85,-0.89 -2.8,-2.2 -0.9,-3.77 4.85,-4 0.48,-7.69 -0.41,-11.33 -0.78,-3.17 -3.86,-3.58 -6.79,-3.51a28.52,28.52 0,0 0,-4.95 0.55c-2.11,0.43 -4.23,0.35 -5.86,-1.42 -1.45,-1.55 -2.44,-3.07 0.39,-4.22 1.82,-0.74 1.47,-1.8 0.55,-3.09s-2.1,-1.76 -3.24,-0.48c-1.31,1.45 -3,1.75 -4.72,2.17 -2.49,0.6 -5,0.71 -7,3.15 -1.45,1.79 -4.61,1.12 -7,1.21 -2.11,0.09 -3.13,0.56 -2.59,2.8 0.48,1.94 -0.21,2.66 -2.25,3 -5.3,0.78 -10.55,1.65 -15.8,-0.15a1,1 0,0 0,-0.33 -0.06c-1.61,0 -3.75,-1 -4.64,0.54 -0.68,1.2 1,1.41 2.13,1.28 0.66,-0.08 1.3,-0.29 2,-0.38 0.43,0 1.05,-0.15 1.29,0.07 3.26,3.1 7.08,1.35 10.7,1.31a26.26,26.26 0,0 1,3.3 0.29c1,0.11 1.45,0.34 1.23,1.69a7.63,7.63 0,0 0,5.14 8.8c3.87,1.4 5.76,3.86 5.8,7.93 0,1.29 0.09,2.46 -1.44,2.92 -1.05,0.32 -1.5,1 -1,2s0.4,2.43 2.19,2.47c4.15,0.1 6,3.79 8.85,5.94 1.21,0.9 -0.19,1.54 -0.8,1.92 -3.08,2 -6.23,3.82 -9.35,5.73 -1.11,0.68 -1.86,0.37 -2.41,-0.74A35.48,35.48 0,0 0,223 99.34c-0.79,-1.23 -2.08,-2.8 -3.38,-1.74 -1.06,0.87 -0.84,3.36 0.46,4.13 4.1,2.44 2.59,5.59 1.45,8.67 -1,2.66 -2.65,4.23 -5.57,2.15 -1.43,4.91 -3,5.47 -7.36,2.8a5.47,5.47 0,0 0,-2.06 -1c-4.48,-0.52 -7.15,-3.1 -8.63,-7.19 -0.58,-1.59 -1.89,-2 -3.49,-1.89a38.38,38.38 0,0 0,-5.29 0.49c-2.26,0.55 -2.8,0.06 -3.28,-2.37 -0.69,-3.46 0.72,-4 3.48,-4 2.43,-0.07 4.86,-0.41 7.29,-0.64 0.44,0 1.1,0 1.27,-0.26 2.43,-3.83 7.07,-4.63 10.46,-7.51 -4.16,-2 -8.91,2 -12.73,-1.84 2.06,-1.67 5.14,-1.14 7.11,-3.24 -1.83,-1.89 -4.23,-2.86 -5.95,-4.79 -1.44,-1.6 -3.59,-0.55 -4.12,1.67a3.09,3.09 0,0 0,-0.16 0.65c-0.16,3 -4.41,2.46 -4.63,4.76 -0.26,2.83 -1.72,3.45 -3.84,4.75 -2.51,1.54 -5.21,2.42 -7.72,3.78 -2.76,1.49 -0.73,3.83 -0.1,5.77 0.45,1.39 3.13,2.3 1.22,4.15 -1.69,1.64 -3.63,1.81 -5.54,-0.14 -1.1,-1.12 -1.94,0.26 -2.82,0.83 -3.58,2.33 -5.43,1.86 -6.87,-1.89 -0.46,-1.21 -1.18,-0.72 -1.82,-0.58 -4.47,1 -8.93,2.1 -12.26,5.5 -4.27,4.37 -10.13,6.87 -13.8,11.93 -1.18,1.64 -1.9,3.22 -1.28,5.24 0.16,0.51 0.44,1.26 0.21,1.58 -2.71,3.76 0,4.94 2.78,6.28a12,12 0,0 1,2.21 2c3,2.55 5.42,5.61 9.82,6.33 4.07,0.66 4.35,2 2.39,5.87a2.43,2.43 0,0 0,0.87 3.45c2,1.43 1.55,2.5 -0.35,3.71 -0.82,0.52 -3.24,0.62 -1.69,2.62 1.16,1.5 2.52,2.84 4.76,1.31 2.67,-1.82 4.35,-3.72 3.56,-7.4 -1.05,-5 -0.82,-5.08 3.79,-7.08a22.25,22.25 0,0 0,9.21 -6.87c2,-2.63 2.06,-5.23 0.13,-7.59 -1.1,-1.34 -0.77,-2 0.11,-2.95 4.17,-4.4 6.22,-9.88 8,-15.52 0.52,-1.67 4,-2.83 5.31,-1.42 1.88,2 3.95,1.66 6.1,1.4 2.69,-0.32 4.93,0.06 5.82,3 0.44,1.47 1.6,1.58 2.81,1.91 2.68,0.73 3.86,3 2.41,5 -1.67,2.31 -2.73,4.47 -0.34,6.76 1.77,1.68 7.11,1.36 9.06,-0.48a42.68,42.68 0,0 0,2.72 -3.35c1.45,-1.71 2.82,-1.78 4.37,0 2,2.32 2.56,5.09 2.94,8a18.76,18.76 0,0 1,0.18 3c-0.19,6.11 1.77,10.56 8.44,11.92a6.74,6.74 0,0 1,3.61 2.79c1.41,2.07 2.48,4 5.56,3.9 1.45,-0.05 0.94,1.52 0.6,2.62a91.65,91.65 0,0 0,-3.17 14c-0.26,1.81 0.4,2.48 2.4,2.41 6,-0.22 6,-0.12 6.48,6.15a36.05,36.05 0,0 1,0.44 4c0,1.26 1.27,3.2 -0.91,3.63 -1.6,0.32 -3.75,1.55 -4.88,-1.05 -0.13,-0.28 -0.51,-0.72 -0.63,-0.68 -3.86,1.28 -6.55,-3.31 -10.58,-2a7,7 0,0 1,-6.35 -1.11c-2,-1.46 -2.46,-3.06 -0.79,-5l10.32,-12.19c-1.57,-0.45 -2.85,-0.9 -4.05,0.33 -5.21,5.34 -11.46,5.55 -18.15,3.75a5.32,5.32 0,0 0,-1.08 0c0.43,1.83 3,1.45 3.05,3.15a25.41,25.41 0,0 1,-0.63 4.44c-2.3,-2 -5.58,-2.52 -6.23,-5.92a1.29,1.29 0,0 0,-1 -0.73c-2.89,0 -5.85,-0.34 -9.22,1.11 2.09,1.39 3.76,0.83 5.31,0.85s2.69,0.34 3.14,1.88 0.88,2.92 -0.78,4.17c-1.31,1 -1.24,7.34 -0.06,8.35 0.87,0.73 1.67,-0.08 2.47,-0.3 4.43,-1.22 4.42,-1.24 3.59,3.16 1.63,-0.46 2.18,-1.86 3.1,-2.78a3.92,3.92 0,0 1,6.36 1c0.4,0.85 -0.23,1.18 -0.62,1.67 -1.89,2.31 -4.17,4 -7.23,4.3a30.37,30.37 0,0 0,-14.48 5.39c-0.88,0.59 -2,2.56 -3.2,0.9 -0.91,-1.28 -2,-3.16 -0.17,-4.8 0.43,-0.38 0.83,-0.74 0.24,-2 -5.44,3.2 -12.16,3.24 -17.28,7.39a3.88,3.88 0,0 0,-1.43 4.44c0.76,2.69 -0.22,3.74 -3.08,4 -5.28,0.5 -10,2.51 -13.17,7 -1.72,2.4 -4.18,4.31 -4.78,7.46 -0.22,1.17 -1.07,1.58 -2.28,0.92 -0.56,-0.31 -1.09,-1.48 -1.9,-0.41a2.34,2.34 0,0 0,-0.07 2.52c1.91,4 1.13,7.23 -2.19,10.29a94.33,94.33 0,0 1,-13.42 9.79c-7.77,5 -7.49,11.89 -5.45,19.19 1,3.71 1.82,7.23 1.22,11.06 -0.44,2.76 -1.39,3.38 -3.85,2a4.88,4.88 0,0 1,-2.73 -3.91,5.59 5.59,0 0,0 -2.13,-4c-1.5,-1.2 -1.7,-2.67 -0.54,-4.38 1.78,-2.66 1,-6.32 -2,-6.76 -4,-0.6 -7,-3.34 -10.78,-4.11s-4.13,-0.91 -5,3.08A2.3,2.3 0,0 1,97.37 262a6.25,6.25 0,0 1,-2 -0.36c-5.37,-2.63 -10,-1.79 -14.6,2.12 -2.49,2.1 -4.32,3.95 -4.15,7.33 0.15,2.94 0.82,6 -1.42,8.59 -0.45,0.52 -0.22,1.71 -0.13,2.57a138.32,138.32 0,0 1,1.11 13.93c0,4 2.83,6.91 4.44,10.25 1,2.14 6.67,1.73 8.29,-0.15 1.78,-2 4.55,-3.24 3.84,-7 -0.39,-2.05 7.48,-5.53 9.53,-4.59a2.14,2.14 0,0 1,1.08 1.93,23.1 23.1,0 0,1 -2.15,13.87c-1.3,2.53 -0.67,5 -0.35,7.47 0.22,1.64 1.89,1 2.76,0.79 5.32,-1.27 9.21,1 12.69,4.68 1.25,1.34 2,2.43 1,4.33 -2.58,5.08 -0.83,10.33 0.35,15.25 0.72,3 4.5,4.36 7,6.36 1,0.81 2.53,-0.38 3.28,-1.55 1.67,-2.63 3.49,-2.12 5.44,-0.4 3.82,3.35 6.83,3.42 9.84,0.23 0.54,-0.58 1.19,-1.23 1,-2 -0.78,-3.54 1.59,-3.82 4.09,-4.33 3.35,-0.67 6,-2.75 8.68,-4.75 2.52,-1.89 3.39,-1.6 3.78,1.5 0.25,1.9 0.83,2.74 2.7,1.85 2.63,-1.26 4.87,-0.35 6.66,1.45 2.21,2.2 4.53,3.46 7.71,2.68a2.51,2.51 0,0 1,2.52 0.53c2.68,3.31 5.47,1.65 7.84,-0.07 1.83,-1.33 2.94,-1.11 4.6,0.06a53.61,53.61 0,0 1,8.08 6.38c3.23,3.37 8.26,4.25 11.14,8.14 0.84,1.14 2.15,1.93 3,3 1.47,1.84 3.25,2.32 5.56,2.21 8.39,-0.43 15.29,2.81 20.84,9a5.83,5.83 0,0 1,1.23 3.39c0.23,2.07 0.18,4.13 2.58,5.33 1.3,0.64 0.62,2.42 0.72,3.71 0.09,1.06 -0.41,2.77 0.73,3 2.55,0.5 4.93,1.38 7.38,2.07 4.81,1.37 9.23,2.58 13.57,5.7a18,18 0,0 0,13.51 3.1,6.76 6.76,0 0,1 6.36,1.81c2.74,2.41 5.29,5.07 8.67,6.67a9.79,9.79 0,0 0,3.11 1.1c4.07,0.46 6.08,2.92 5.34,7.16 -0.67,3.83 -1.8,7.64 -5.11,10.17 -3.86,3 -6.15,7.65 -10.83,9.68 -1,0.44 -0.86,1.5 -0.79,2.34 0.45,5 -1.59,9.44 -2.78,14.14 -1.24,4.9 -4.37,8.61 -5.85,13.19 -0.35,1.1 -1.13,1.21 -2,1.29a33.22,33.22 0,0 1,-4.3 0.4c-6.71,-0.29 -10.48,5.83 -16.34,7.46 -1.57,0.43 -0.78,2.51 -0.46,3.59 1.09,3.63 -0.15,6.45 -2.33,9.22 -2.73,3.49 -5.27,7.13 -8,10.64 -1.24,1.62 -2.74,3 -5,2.94 -1.32,0 -1.8,0.55 -1.56,1.83a11.87,11.87 0,0 1,0.08 1.33c0.32,5 0.33,5 -4.81,5.87 -1.87,0.3 -3.11,0.92 -2.78,3.2 0.42,2.85 -2.43,2.66 -3.94,3.91 2.25,1.94 2.51,4.6 2.54,7.3 0,2.11 0.28,3.89 2.75,4.67a4.39,4.39 0,0 1,2.79 3.14,12.14 12.14,0 0,0 8,8.67c1.78,0.68 2.67,1.91 1.46,3.83h-4c-9.06,-3.11 -15.77,-9.62 -22.8,-15.68 -1.29,-1.12 -1.85,-2.68 -2.76,-4 -1.84,-2.62 -2.84,-5.95 -5.86,-7.66a8.43,8.43 0,0 1,-3.39 -3.56,8.94 8.94,0 0,0 -1.73,-2.81c-4.81,-4 -6.06,-9.42 -6.07,-15.19 0,-3.44 -2.58,-5.34 -4.17,-7.57 -2.63,-3.67 -2.56,-7.7 -3.25,-11.67 -0.45,-2.59 -0.61,-5 -2.85,-7.14 -1.94,-1.85 -1,-5.08 -1.49,-7.68 -0.37,-2.1 -0.47,-4.2 -2.46,-5.55a2.21,2.21 0,0 1,-0.85 -2.09c0.26,-3.54 -1.83,-5.36 -4.6,-7 -5.7,-3.37 -10.51,-8.17 -17,-10.35 -1.7,-0.57 -2.6,-2.31 -3.58,-3.81a216.09,216.09 0,0 0,-21.68 -27.2c-3.52,-3.83 -4.23,-5.85 -2.15,-10.66 0.22,-0.52 0.89,-0.91 0.14,-1.68 -3.18,-3.22 -3.93,-6.29 -1.51,-10.39 2.12,-3.57 2.37,-8 5.47,-11.08 0.39,-0.39 0,-1.49 0.1,-2.25 0.43,-7 -2.51,-13.17 -5.1,-19.41 -0.55,-1.32 -1.11,-1.11 -1.9,-0.45a11.68,11.68 0,0 0,-1.14 1.19c-1.17,1.21 -1.3,4.38 -2.17,4.07 -2.88,-1 -6.63,-0.65 -8.6,-3 -4.33,-5.11 -11.38,-7.73 -13.07,-15.37 -0.86,-3.87 -5,-5.66 -8.67,-6.55C93,329.4 89,326.81 86.38,322a5.31,5.31 0,0 0,-5.6 -2.78c-5.5,0.52 -9.91,-1.82 -13.75,-5.48 -1.45,-1.37 -2.76,-2.9 -4.26,-4.21a19.23,19.23 0,0 1,-6.7 -16c0.1,-2.79 0.37,-6 -1.12,-8.14C51.86,281 51.27,276 50.28,271l-0.83,0.17c0.12,2.54 0.23,5.08 0.38,7.62 0.08,1.55 0.25,3.1 0.34,4.65 0.06,1 -0.16,2.28 -1.2,2.45 -1.45,0.24 -1.72,-1.23 -1.89,-2.25 -0.44,-2.51 -0.71,-5.05 -1,-7.59s-0.61,-4.75 -2.94,-6.38a3.17,3.17 0,0 1,-0.86 -4.72c1.85,-2.11 2.13,-4.82 3.44,-7.11 1.44,-2.53 1.38,-5.07 -1.27,-7.06a4.66,4.66 0,0 1,-1.65 -3.49c-0.59,-6.08 -1.26,-12.14 -1.85,-18.21a11.63,11.63 0,0 1,1.44 -7.25c1.31,-2.37 0.94,-5.62 1.61,-8.41 2,-8.14 3.92,-16.25 7.56,-23.94 3.3,-7 5.35,-14.55 9.32,-21.24 4.34,-7.3 7.85,-15.12 13.33,-21.72a1,1 0,0 0,0.21 -0.26c4,-8.93 11.3,-15.64 16.47,-23.8A29.08,29.08 0,0 1,98 114.65a35.33,35.33 0,0 0,8.45 -8.88,22.29 22.29,0 0,1 9.34,-8.26 21.87,21.87 0,0 0,9.7 -8.83c2.52,-4.25 7,-6 10.94,-8.39 1.23,-0.74 2.33,0.15 3.65,0.68 -1.9,2.29 -2.36,4.29 1.07,5.34 0.21,0.31 0.44,0.28 0.63,0 0,0 -0.18,-0.22 -0.28,-0.34 0,-1.31 0.1,-2.63 0,-4 -0.09,-2.61 -0.7,-5.42 3.36,-5.65a2.05,2.05 0,0 0,1.73 -1.83c0.05,-3 2.25,-4.22 4.48,-5.17 4.44,-1.9 7.47,-5.91 11.91,-7.78 1.87,-0.79 3.63,-1.81 5.25,0.52 0.71,1 2,0.6 3.12,0.65s2.65,-0.29 3.59,0.24c1.84,1 3.16,1.93 4.34,-0.77 0.36,-0.81 1.78,-0.63 2.77,-0.75 3.81,-0.45 7.68,-0.54 11.4,-1.92 -2.75,-1.13 -4.91,-4.4 -8.62,-1.4 -1.48,1.2 -4,1.26 -6,1.69 -1.12,0.24 -2.69,0.72 -2.84,-1.15 -0.11,-1.5 -0.91,-3.52 1.42,-4.19a60.82,60.82 0,0 1,10.12 -1.82c1.58,-0.17 2,1.05 3,2.24 1.27,-3 3.8,-3.46 6.5,-3.63 3.43,-0.21 4.05,0.61 3,4.07 -0.2,0.19 -0.6,0.48 -0.56,0.56 0.29,0.64 0.63,0.19 0.94,0 2.33,-0.68 1.28,-3.13 2.34,-4.48l0.78,-0.63 1.23,-0.32c1.87,-0.18 4.29,-0.7 4.25,2.07 0,3.25 1.52,3 3.7,2.55 1.35,-0.28 2.74,-0.36 4.5,-0.57a5.43,5.43 0,0 0,-3.75 -1c-1.29,0 -2.73,-0.32 -3,-1.61C210,49.36 208,48.76 206.08,48.08ZM259.08,43.39a57.7,57.7 0,0 0,-13.8 1.54,1.6 1.6,0 0,0 -0.88,1.25c0.07,0.93 0.94,0.73 1.55,0.64 3.4,-0.46 6.8,-0.92 10.18,-1.48C257.08,45.17 258.33,45.28 259,43.39Z\"\n      android:fillColor=\"#9fbd63\"/>\n  <path\n      android:pathData=\"M433.13,182.4c2.14,1.73 4.27,2.52 5.95,-0.49 0.82,-1.48 0.32,-2.69 -1.27,-2.45 -4.4,0.66 -8.94,-1.47 -13.29,1.17 -2.66,1.62 -3.79,0.71 -3.81,-2.52 0,-2.55 0,-5 -1.15,-7.44 -0.83,-1.73 -0.13,-3.76 0.79,-5.43 1,-1.85 1.27,-3.58 -0.17,-5.21 -0.88,-1 -2.1,-0.65 -3.1,-0.13a5.06,5.06 0,0 0,-3 4.82c0.06,1.69 1.62,3.58 0.08,5a17.07,17.07 0,0 1,-6.74 4.16c-3.1,0.91 -4.49,-0.3 -4.79,-4 -0.44,-5.46 -0.44,-5.46 -3.69,-8.15 2.38,-1.5 5.92,-1.79 5.9,-5.74 0,-0.91 1.26,-0.6 2,-0.52 1.87,0.24 3.73,0.55 5.6,0.81 0.71,0.09 1.66,0.78 2.07,-0.1s-0.36,-1.65 -1.13,-2.17a10.84,10.84 0,0 1,-4.64 -6.66c-0.78,-3.13 0.26,-5.41 3.07,-7 3.14,-1.73 4.24,-1.24 4.51,2.3 0.1,1.39 0.8,1.59 1.85,1.8 4.77,1 4.87,1 3.39,5.31 -0.49,1.42 0.12,1.85 1,2.67 4.29,4 8.47,8.16 11.36,13.37 0.62,1.11 1.48,1.82 2.64,1.62 2.56,-0.44 3,0.92 2.91,3a7.91,7.91 0,0 0,0.3 2c0.29,1.47 -0.12,4 1.29,4.1a4.8,4.8 0,0 0,4.89 -3.31c0.94,-4.33 2.66,-7.26 7.39,-8.27 1.86,-0.39 1.81,-4.53 -0.08,-6.37 -2.95,-2.87 -2.52,-6.49 -2.4,-10 0.08,-2.47 2.83,-1.35 4.15,-2.35a6.86,6.86 0,0 0,-1.81 -3.13c-1.26,-1.65 -2.62,-1.77 -4.15,-0.2 -3.57,3.64 -7.68,3.1 -10.25,-1.6a99.38,99.38 0,0 0,-5.39 -8.76,9.25 9.25,0 0,1 0.31,-10.57 19.88,19.88 0,0 0,3.82 -8.73c0.44,-2.59 0.46,-4.78 -1.44,-7.09 -3,-3.63 -1.55,-8.32 -2.1,-12.55a4.67,4.67 0,0 1,1.48 -4.17c2.84,-2.92 7.55,-4.07 11.27,-1.74 6.94,4.34 14.55,7.47 21.33,12.07 3.31,2.24 6.11,4.94 10.65,5.59 2.85,0.4 5.61,3.73 7.21,6.87 0.67,1.3 1.22,2.64 2.48,3.44 3.95,2.54 6.55,6.23 9,10.12a18.54,18.54 0,0 0,4.39 5.39c3.26,2.39 4.16,6.35 6.27,9.45 3.82,5.61 8.84,10.37 11.56,16.83 2.34,5.55 6.25,10.46 8.35,16.07 2.68,7.18 6.22,14 8.41,21.45 3.36,11.52 4.34,23.78 10.29,34.56 2.73,4.94 2.78,10.67 3.27,16.2 0.66,7.28 1.19,14.58 3.5,21.59a2.72,2.72 0,0 1,0.29 1.26c-2.14,9.35 0.89,18.45 1.31,27.68 0.11,2.43 0.76,4.83 -1,7 -1,1.15 -0.39,2.58 -0.32,3.88 0.2,4.4 1.27,8.86 -1.14,13a1.57,1.57 0,0 0,-0.18 1c1.51,7.46 -2.46,14.22 -2.76,21.47 -0.16,3.95 -2.49,7 -5.28,9.7 -3.1,3 -3,3.64 -0.24,6.74a4.49,4.49 0,0 1,0.68 5.53,78.19 78.19,0 0,0 -4.15,10.14 117.54,117.54 0,0 1,-18.16 31.78,57.28 57.28,0 0,0 -8.05,12.86c-1.34,3.19 -3.46,6.21 -5.08,9.42 -1.5,3 -2.83,6 -4.44,8.85a98.25,98.25 0,0 1,-6.21 10c-2,2.76 -4.21,5.44 -6.05,8.33a8.3,8.3 0,0 1,-3.9 3.41c-7.66,3.23 -13.22,9 -17.39,15.9 -2.56,4.22 -6.51,6.13 -10.31,8.47a11.46,11.46 0,0 0,-3.21 2.22c-4.05,4.94 -8.7,9.06 -14.86,11.22a5.41,5.41 0,0 0,-2.14 1.5c-6.13,7 -14.58,8.22 -23.07,9.27 -1.58,0.2 -3.68,0.53 -4.26,-1.55 -0.5,-1.78 0.88,-3.29 2.24,-4.12 2.4,-1.47 3.51,-3.81 5.13,-5.88 6,-7.62 8.62,-17.26 15.18,-24.47a2.27,2.27 0,0 0,0.59 -1.46c-0.38,-7.8 2.94,-13.85 7.94,-19.68 2.84,-3.3 4.75,-7.35 8.74,-9.66a4.72,4.72 0,0 0,1.43 -2.2,69.83 69.83,0 0,0 4.41,-12.6c1.25,-5.89 2.68,-12.36 0.08,-18.62 -1.49,-3.6 -1.79,-6.7 1.44,-10.51a15,15 0,0 0,3.25 -14c-0.44,-1.45 -1,-1.69 -2.32,-1.42 -3.47,0.68 -6,0.08 -7.67,-3.76 -1.84,-4.18 -9.48,-4.93 -14,-1.32s-9.23,2.81 -14.15,1.63c-4.27,-1 -8.42,-1.43 -12,2 -1.52,1.47 -3.23,1.17 -4.76,-0.2 -4,-3.58 -9.19,-6 -11.29,-11.45 -4.64,-1.47 -5,-5.63 -6.15,-9.44 -0.95,-3 -3.75,-4.9 -5.89,-7.13 -3,-3.15 -5.18,-6.46 -4.42,-11.17 0.47,-2.9 -0.23,-5.62 2.26,-8.44 2.25,-2.54 2.82,-6.65 2.23,-10.47 -0.66,-4.27 -1.63,-8.57 -1.58,-12.85 0,-3.89 2.34,-7.36 4.65,-10.42 1.89,-2.5 3.06,-5.42 4.8,-7.83A121.52,121.52 0,0 0,401 280a3.19,3.19 0,0 1,3 -1.22c2.28,0.11 3.53,-1.31 5.11,-2.61 3.37,-2.79 4.62,-6 4.12,-10.42 -0.56,-5 3.21,-7.79 7.12,-9.88s4.51,-6.36 6.37,-9.75c0.64,-1.17 -3,-4.6 -4.93,-4.42 -4.09,0.4 -6,-1.49 -6.46,-5.31a2.7,2.7 0,0 0,-0.91 -1.71c-2.65,-1.92 -2.24,-3.95 -1,-6.65 1.74,-3.8 0.49,-7.85 -0.27,-11.73a6.73,6.73 0,0 1,2 -6.64,2.43 2.43,0 0,1 3,-0.56c5.48,2.69 11.55,2.23 17.37,3.1 1.72,0.26 2.13,-1.23 2.24,-2.67 0.44,-5.91 -3.1,-15.58 -10.27,-17 -3.07,-0.61 -3.55,-2.72 -3.36,-5.45 0.1,-1.49 0.47,-2.08 2,-1.63 0.21,0.07 0.41,0.16 0.63,0.21C431.59,186.89 431.59,186.89 433.13,182.4ZM485.44,238a21.07,21.07 0,0 1,2.64 0c1.9,0.23 3.64,0.13 4.35,-2s0.8,-4.43 -1.05,-6.18a19.41,19.41 0,0 0,-3.47 -2.58A37.08,37.08 0,0 1,477 217.19c-1.58,-2.09 -2.68,-4.46 -5,-6.11 -2.09,-1.51 -3.14,-1.19 -4.56,0.7 -3.14,4.16 -4.34,4.47 -8.92,2.38 -2.44,-1.12 -3.73,-1.1 -3.14,2.12s-0.49,5.11 -3.62,6.51c-4.06,1.81 -5.6,5.72 -5.45,9.88a7.74,7.74 0,0 1,-1.87 5.71c-2.93,3.57 -6.36,5.78 -11.21,5.12 -0.94,-0.12 -2.14,-0.11 -2.54,1.08 -0.33,1 -0.19,2.59 0.47,2.79 3.24,1 6.59,1.67 9.91,2.43 0.14,0 0.36,-0.24 0.51,-0.39 3.86,-3.86 8.49,-5.51 13.95,-6.28 7.22,-1 14.55,0 21.71,-1.74 2.53,-0.63 4.32,1.66 5.79,3.23 1.2,1.28 -1.55,1.76 -1.74,3.06 2.95,2.29 2.95,2.29 2.16,3.94 -2.94,6.09 -1.13,9.35 5.56,9.84 2.69,0.2 4.61,2.07 7,2.91 1.28,0.44 0.55,2.2 0.89,3.33a2.1,2.1 0,0 0,1.39 1.67,46.05 46.05,0 0,1 9,3.9c0,-2.15 -0.1,-3.81 0,-5.46 0.23,-3.26 5.07,-6.42 6.87,-4.36 2.11,2.41 5.13,3 7.28,4.81 4.4,3.74 9.13,3.28 14.15,2.55 1.82,-0.27 2.41,-0.74 2.07,-2.71 -0.58,-3.37 -1,-6.77 0.77,-10.07 0.9,-1.67 -0.21,-2.64 -1.89,-3.08 -1,-0.26 -2.53,-0.26 -2.57,-1.54s1.42,-1.52 2.32,-2.14c0.47,-0.33 1.32,-0.3 1.28,-1.22 -3,-1.23 -6.16,-0.37 -9.24,-0.43 -3.56,-0.06 -6.54,-1.74 -6.81,-4.63 -0.54,-5.78 -3.32,-10.73 -5.2,-16 -4.7,2.26 -5.07,4.39 -1.51,8.22a3.72,3.72 0,0 1,0.93 1.69c0.33,1.72 -2.08,7.19 -3.25,7.24 -3.07,0.12 -4,-2.44 -5,-4.58 -1.46,-3.1 -2.68,-6.32 -3.88,-9.54 -0.54,-1.43 -1.52,-1.39 -2.67,-1.2s-2.35,0.23 -2.31,1.8c0,2.07 -1.15,3.51 -2.31,5 -1.34,1.7 -2.37,3.71 -2,5.82 0.47,2.62 -1,2.19 -2.43,2C489.48,245 486,241 485.44,238ZM482.88,148a13.26,13.26 0,0 0,-2.29 -1.23,3.51 3.51,0 0,1 -2.94,-3.53 4.59,4.59 0,0 1,2.3 -4.17,14.21 14.21,0 0,1 3.12,-1.08c0.55,-0.16 1.25,-0.35 1.22,-0.94s-0.78,-1 -1.43,-1c-2.1,0.15 -4.19,0.47 -6.29,0.57s-4.17,0.18 -5.34,-1.88c-1.06,-1.89 -2.79,-3.13 -4.1,-4.74 -2.78,-3.41 -6.3,-6.57 -3.47,-11.95 1.34,-2.57 -0.93,-5 -4.85,-6.19 -0.76,2.68 0.76,5.25 0.47,7.85 -0.82,7.29 2,12.67 8.15,16.55 2.61,1.64 3,4.1 1.18,6.53 -0.7,0.95 -1,1.33 0,2.34a8.36,8.36 0,0 1,-1.09 12.92c-1,0.71 -2.11,1.23 -3.11,1.92 -0.8,0.57 -1,1.55 0.14,1.64a14.47,14.47 0,0 1,5.89 2.23,2.76 2.76,0 0,0 3.91,-1.35A3.28,3.28 0,0 1,479.2 161c2.79,1.67 2.83,0 3,-2s-0.9,-3.33 -2.22,-4.6c-1.91,-1.85 -1.38,-3.53 0.52,-5A27,27 0,0 1,482.88 148ZM518.61,211.84c-0.08,3.48 0.81,6.59 1.38,9.74 0.37,2.08 2,3.11 4,3.48 1.23,0.23 2.6,0.23 3.17,-1.14 1.46,-3.53 3.17,-2.07 4.93,-0.35a19.63,19.63 0,0 1,1.62 1.67c1.24,1.51 3,1.18 4.28,0.66s0.45,-2.05 0.23,-3.12a11.26,11.26 0,0 0,-0.92 -3.17c-1.76,-3.3 -3.49,-7.1 -7.19,-8.2 -3.49,-1 -6.09,-2.34 -7.34,-5.84 -0.68,-1.9 -1.82,-1.35 -2.57,-0.15A10.3,10.3 0,0 0,518.61 211.87ZM499.93,224.25a4.83,4.83 0,0 0,-2.89 -5.09,25.87 25.87,0 0,1 -4.73,-3.59c-3.22,-2.86 -6.31,-5.87 -9.56,-8.69 -0.76,-0.65 -1.9,-2.29 -2.95,-0.63a2.38,2.38 0,0 0,1 3.44c3.13,1.23 4.53,3.66 5.38,6.65a3.08,3.08 0,0 0,1.65 2c3.66,1.61 6,4.81 8.91,7.32 0.7,0.61 1.19,1.78 2.43,1.21S499.84,225.19 499.93,224.28Z\"\n      android:fillColor=\"#9fbd63\"/>\n  <path\n      android:pathData=\"M350,101.91c1.26,-0.22 1.82,-0.23 1.92,0.27 0.66,3.52 3.16,2.11 5.17,1.94 2.76,-0.23 5.66,0 8.24,-0.85 5.39,-1.72 7.72,2.38 10.88,5a1.32,1.32 0,0 1,0.2 2c-1.12,1.53 -2.27,3.16 -4.17,3.66 -2.58,0.68 -5.07,1.4 -7.14,3.23a2.18,2.18 0,0 1,-2.54 0.18c-3.61,-2.76 -8.31,-2.92 -12.11,-5.2 -1.83,-1.09 -3.37,-2.16 -2.9,-4.63a3.82,3.82 0,0 0,-0.19 -1.31c-0.18,-1.05 -1.68,-2.22 -0.84,-2.94C347.61,102.38 349.32,102.17 350,101.91Z\"\n      android:fillColor=\"#9fbd63\"/>\n  <path\n      android:pathData=\"M121.08,289.1c2.19,-0.36 3.87,0.61 5.86,1.45 5.42,2.29 9.75,6.46 15.34,8.36a9.72,9.72 0,0 1,3.59 2.31c1.06,1 0.34,2.52 0.06,3.74s-1.5,1.18 -2.49,1.05c-4.25,-0.59 -8.62,-0.91 -10.69,-5.75a4.39,4.39 0,0 0,-3 -2.85c-3.86,-0.85 -7.85,-1.25 -11.11,-4 -1.27,-1.05 -2.37,0.46 -3.53,1 -0.88,0.42 -1.52,2 -2.77,1a3,3 0,0 1,-0.79 -3.07,2.62 2.62,0 0,1 2.32,-2.43Z\"\n      android:fillColor=\"#9fbd63\"/>\n  <path\n      android:pathData=\"M172.33,311.42l-7,1.44c-1.76,0.35 -3.89,-0.11 -4.7,2.29 -0.16,0.46 -1.05,0.89 -1.41,0.49 -2.64,-2.93 -6,-1.43 -9.1,-1.63 -1,-0.07 -2.61,0.38 -2.86,-1s1.43,-1 2.24,-1.39c2,-0.87 3.36,-2.14 2.39,-4.34 -0.88,-2 0,-2.17 1.61,-2.34C160.91,304.17 164.05,305.18 172.33,311.42Z\"\n      android:fillColor=\"#9fbd63\"/>\n  <path\n      android:pathData=\"M381.79,45.94a9.09,9.09 0,0 1,1.53 0.49c5.33,2.85 10.16,6.29 13.15,11.75 0.46,0.85 1.21,1.89 0.53,2.76s-1.91,0.33 -2.75,-0.08c-5.6,-2.77 -11.22,-5.49 -16.7,-8.48 -2.32,-1.26 -1.28,-3.24 -0.05,-4.72C378.54,46.41 380.23,46.32 381.79,45.94Z\"\n      android:fillColor=\"#9fbd63\"/>\n  <path\n      android:pathData=\"M136.51,309.84c1,0.16 2.74,-0.75 2.26,1.52 -0.24,1.16 0.27,3.23 -1.4,3.16s-4.23,-0.75 -4.44,-2.78S134.93,309.92 136.51,309.84Z\"\n      android:fillColor=\"#9fbd63\"/>\n  <path\n      android:pathData=\"M166.54,113.55c-1.14,0.15 -2.3,-0.06 -2,-1.14a3.45,3.45 0,0 1,3.72 -2.65c1.36,0 2.21,0.67 2.09,2C170.05,114.39 167.63,112.84 166.54,113.55Z\"\n      android:fillColor=\"#9fbd63\"/>\n  <path\n      android:pathData=\"M180.15,312.23c-1.84,2.57 -4.45,3 -5.33,0.86a2.68,2.68 0,0 1,-0.07 -1.91c0.35,-0.81 1.1,-0.32 1.7,-0.15C177.7,311.37 179.06,311.39 180.15,312.23Z\"\n      android:fillColor=\"#9fbd63\"/>\n  <path\n      android:pathData=\"M199.87,47.7c-1.83,2.62 -3.78,1.9 -5.85,0.74C195.6,44.93 197.6,45.74 199.87,47.7Z\"\n      android:fillColor=\"#9fbd63\"/>\n  <path\n      android:pathData=\"M203.53,50.79l-0.78,0.63Z\"\n      android:fillColor=\"#9fbd63\"/>\n  <path\n      android:pathData=\"M200.41,55.9c-0.31,0.22 -0.65,0.67 -0.94,0 0,-0.08 0.36,-0.37 0.56,-0.56A2.45,2.45 0,0 1,200.41 55.9Z\"\n      android:fillColor=\"#9fbd63\"/>\n  <path\n      android:pathData=\"M141.52,86c0.1,0.12 0.31,0.31 0.28,0.34 -0.19,0.28 -0.42,0.31 -0.63,0Z\"\n      android:fillColor=\"#9fbd63\"/>\n  <path\n      android:pathData=\"M475.05,233.75c-3.89,-2.86 -4.38,-4.79 -3.18,-9.27 0.66,-2.46 -0.77,-5.31 1.17,-7.62C476.58,220 477.78,229.93 475.05,233.75Z\"\n      android:fillColor=\"#9fbd63\"/>\n  <path\n      android:pathData=\"M517.25,251.2c0.83,0.39 2.52,-0.76 2.45,1.16 -0.07,1.73 -1.59,1.54 -2.77,1.42s-2.83,0.58 -2.64,-1.42S516.19,251.51 517.25,251.2Z\"\n      android:fillColor=\"#9fbd63\"/>\n  <path\n      android:pathData=\"M292,2.15C132.12,2.15 2.48,131.8 2.48,291.72S132.12,581.28 292,581.28 581.6,451.64 581.6,291.72 452,2.15 292,2.15ZM292,553C147.75,553 30.78,436 30.78,291.72S147.75,30.46 292,30.46s261.26,117 261.26,261.26S436.33,553 292,553Z\"\n      android:fillColor=\"#e5f2f9\"/>\n  <path\n      android:pathData=\"M150.026,109.35L219.54,150.772A4.27,4.27 75.79,0 1,221.022 156.626L130.924,307.827A4.27,4.27 75.79,0 1,125.07 309.31L55.556,267.887A4.27,4.27 75.79,0 1,54.074 262.033L144.172,110.832A4.27,4.27 75.79,0 1,150.026 109.35z\"\n      android:fillColor=\"#334176\"/>\n  <path\n      android:pathData=\"M140.582,116.858l76.851,45.794l-80.214,134.613l-76.851,-45.794z\"\n      android:fillColor=\"#c3a5ca\"/>\n  <path\n      android:pathData=\"M112.158,164.556l76.851,45.794l-39.303,65.958l-76.851,-45.794z\"\n      android:fillColor=\"#f9d8e9\"/>\n  <path\n      android:pathData=\"M133.802,142.098l65.013,38.74l-3.02,5.068l-65.013,-38.74z\"\n      android:fillColor=\"#9c8cad\"/>\n  <path\n      android:pathData=\"M127.018,153.485l33.898,20.199l-3.02,5.068l-33.898,-20.199z\"\n      android:fillColor=\"#9c8cad\"/>\n  <path\n      android:pathData=\"M168.491,178.2l23.538,14.026l-3.02,5.068l-23.538,-14.026z\"\n      android:fillColor=\"#9c8cad\"/>\n  <path\n      android:pathData=\"M340.584,120.816L416.409,92.557A4.27,4.27 114.56,0 1,421.901 95.067L483.369,259.995A4.27,4.27 114.56,0 1,480.859 265.487L405.034,293.747A4.27,4.27 114.56,0 1,399.541 291.237L338.074,126.309A4.27,4.27 114.56,0 1,340.584 120.816z\"\n      android:fillColor=\"#232c53\"/>\n  <path\n      android:pathData=\"M340.519,132.878l83.827,-31.242l54.724,146.834l-83.827,31.242z\"\n      android:fillColor=\"#fff7b0\"/>\n  <path\n      android:pathData=\"M359.903,184.907l83.827,-31.242l13.669,36.676l-83.827,31.242z\"\n      android:fillColor=\"#c8c28d\"/>\n  <path\n      android:pathData=\"M355.958,153.985l70.915,-26.429l2.06,5.529l-70.915,26.429z\"\n      android:fillColor=\"#a6a276\"/>\n  <path\n      android:pathData=\"M360.579,166.4l36.976,-13.78l2.06,5.529l-36.976,13.78z\"\n      android:fillColor=\"#a6a276\"/>\n  <path\n      android:pathData=\"M405.822,149.538l25.675,-9.569l2.06,5.529l-25.675,9.569z\"\n      android:fillColor=\"#a6a276\"/>\n  <path\n      android:pathData=\"M390.06,229.57m-4.97,0a4.97,4.97 0,1 1,9.94 0a4.97,4.97 0,1 1,-9.94 0\"\n      android:fillColor=\"#a6a276\"/>\n  <path\n      android:pathData=\"M232.47,239.29L324.59,239.29A4.27,4.27 0,0 1,328.86 243.56L328.86,442.66A4.27,4.27 0,0 1,324.59 446.93L232.47,446.93A4.27,4.27 0,0 1,228.2 442.66L228.2,243.56A4.27,4.27 0,0 1,232.47 239.29z\"\n      android:fillColor=\"#334176\"/>\n  <path\n      android:pathData=\"M228.19,251.97h100.66v176.31h-100.66z\"\n      android:fillColor=\"#fefeff\"/>\n  <path\n      android:pathData=\"M228.2,314.46h100.66v86.39h-100.66z\"\n      android:fillColor=\"#c4cae2\"/>\n  <path\n      android:pathData=\"M251.25,331.29m-7.84,0a7.84,7.84 0,1 1,15.68 0a7.84,7.84 0,1 1,-15.68 0\"\n      android:fillColor=\"#a1aacd\"/>\n  <path\n      android:pathData=\"M239.43,351.654l76.08,0.186l-0.057,23.53l-76.08,-0.186z\"\n      android:fillColor=\"#fefefe\"/>\n  <path\n      android:pathData=\"M268.519,323.305l45.49,0.111l-0.008,3.14l-45.49,-0.111z\"\n      android:fillColor=\"#a1aacd\"/>\n  <path\n      android:pathData=\"M268.503,329.955l45.49,0.111l-0.008,3.14l-45.49,-0.111z\"\n      android:fillColor=\"#a1aacd\"/>\n  <path\n      android:pathData=\"M238.929,384.663l76.18,0.186l-0.008,3.14l-76.18,-0.186z\"\n      android:fillColor=\"#a1aacd\"/>\n  <path\n      android:pathData=\"M238.924,390.773l76.18,0.186l-0.008,3.14l-76.18,-0.186z\"\n      android:fillColor=\"#a1aacd\"/>\n  <path\n      android:pathData=\"M268.485,337.175l45.49,0.111l-0.008,3.14l-45.49,-0.111z\"\n      android:fillColor=\"#a1aacd\"/>\n  <path\n      android:pathData=\"M276.72,268.35h92.04v29.96h-92.04z\"\n      android:fillColor=\"#e9edf8\"/>\n  <path\n      android:pathData=\"M280.2,272.64h85.15v4.74h-85.15z\"\n      android:fillColor=\"#9c8cad\"/>\n  <path\n      android:pathData=\"M280.36,281.47h36.33v4.74h-36.33z\"\n      android:fillColor=\"#9c8cad\"/>\n  <path\n      android:pathData=\"M333.49,281.68h31.41v4.74h-31.41z\"\n      android:fillColor=\"#9c8cad\"/>\n  <path\n      android:pathData=\"M280.51,289.7h42.01v4.74h-42.01z\"\n      android:fillColor=\"#9c8cad\"/>\n  <path\n      android:pathData=\"M333.64,289.8h31.41v4.74h-31.41z\"\n      android:fillColor=\"#9c8cad\"/>\n  <path\n      android:pathData=\"M255.41,283.68m-16.73,0a16.73,16.73 0,1 1,33.46 0a16.73,16.73 0,1 1,-33.46 0\"\n      android:fillColor=\"#bd4b85\"/>\n  <path\n      android:pathData=\"M255.49,277.87m-4.28,0a4.28,4.28 0,1 1,8.56 0a4.28,4.28 0,1 1,-8.56 0\"\n      android:fillColor=\"#fefeff\"/>\n  <path\n      android:pathData=\"M262.28,291.16c0,0.67 -3.49,1.79 -7.11,1.74s-7.36,-1.24 -7.36,-1.74a7.24,7.24 0,0 1,14.47 0Z\"\n      android:fillColor=\"#fefeff\"/>\n  <group>\n    <clip-path\n        android:pathData=\"M292.56,290.59m-261.26,0a261.26,261.26 0,1 1,522.52 0a261.26,261.26 0,1 1,-522.52 0\"/>\n    <path\n        android:pathData=\"M18.22,443.43a243.12,243.12 0,0 0,13.89 -48c0.21,-22.16 9.4,-42 16.77,-62.16 3.27,-9 11.25,-12.29 20.45,-12.76 17.51,1.17 34.44,4.41 49.54,14.09 6.19,5.75 5.83,12.55 4.45,20.34 -10,56.86 -27.94,111.17 -51,164 -7.94,18.16 -17.88,35.52 -22.75,55 -20,6 -40.57,2.47 -60.86,2.72 -10.92,0.13 -6.77,-7.94 -5.13,-13.61Q0.81,503.19 18.22,443.43Z\"\n        android:fillColor=\"#c4cae2\"/>\n    <path\n        android:pathData=\"M267.27,603.83c-30.67,0.1 -61.39,-0.72 -92,0.68 -16.3,0.74 -15.8,-5 -15.28,-20.23 0.12,-3.3 6.82,-24.46 8.74,-32.9 4.44,-12 7.87,-24.41 12.27,-36.46 2.48,-6.81 4.75,-13.85 12.3,-17.08 31.73,-4.26 60.49,1.87 84.58,24.34 6.94,17.1 -0.32,33.89 -1.09,50.84C275.94,584 276.42,595.41 267.27,603.83Z\"\n        android:fillColor=\"#ba417e\"/>\n    <path\n        android:pathData=\"M49.58,573.9c-12.9,-4.21 -3.3,-11.13 -1.09,-15.64C78.58,497 101.57,433.17 116.05,366.45c1.9,-8.77 8.25,-18.06 1.81,-27.67 1.06,-5.09 3.54,-7.28 8.61,-4.22 9,10.59 8.37,23.58 7.35,35.87 -4,48.21 -9,96.34 -17.24,144.06 -0.39,2.27 -13.58,48.89 -20.23,50.47C80.88,568.62 65.57,573 49.58,573.9Z\"\n        android:fillColor=\"#9aa3c9\"/>\n    <path\n        android:pathData=\"M562.35,320 L593,357.81c2,4.05 3.51,8.07 3.5,12.83 -0.11,48.65 0,97.31 0,146 0,3.1 1.1,7 -3.46,8.37 -6.93,-6.87 -6.27,-15.92 -5.23,-24.05 3.94,-30.77 -6.84,-55.1 -26.2,-79 -22.29,-27.5 -43.94,-56.25 -56,-90.48 6.34,-20.7 24.07,-25.63 42,-30.36C557.68,303.29 559.73,311.86 562.35,320Z\"\n        android:fillColor=\"#3d539a\"/>\n    <path\n        android:pathData=\"M551.9,460.49c-5.33,-12.74 -18.38,-39 -18.85,-39.92 -14.35,-27.26 -28.14,-54.75 -34.14,-85.38 1.42,-3.81 3.95,-5.79 8.19,-4.94 21.35,34.72 41.18,70.78 68.56,101 17.35,19.17 18.54,40 17.47,63 -0.48,10.21 -0.08,20.46 -0.08,30.7 -8.46,3.54 -12,-1.2 -15.12,-8.2C569.5,497.9 560.61,479.24 551.9,460.49Z\"\n        android:fillColor=\"#344a92\"/>\n    <path\n        android:pathData=\"M332.35,600.63q0.51,-21.51 1,-43c2.46,-6.07 8,-8 13.51,-8.68 21.75,-2.89 43.55,-4.79 64.82,3.15 1.84,1 -1.66,1.81 3,4.61 -0.36,8.71 4.57,16.1 6.63,24.43 5.58,22.46 2.36,23 -21.88,23 -17.1,0 -34.2,0.2 -51.3,-0.12C342.81,603.92 336.6,606.4 332.35,600.63Z\"\n        android:fillColor=\"#ba417e\"/>\n    <path\n        android:pathData=\"M69.41,323.55c6.88,-10.6 2.42,-20.33 -1.55,-30.58 -2.4,-6.22 -2.53,-13.32 -3.68,-20 3.95,-2.47 7.53,-0.87 11.12,0.95 6.47,3.78 11,11.33 20,10.16 3.58,-1 6.39,-3.54 9.69,-5.11 8.7,-3.44 15,-6.87 24.19,-8.69 8.69,-1.71 18.14,-3 23.27,-10.41 4.09,-5.86 6.68,-11 13.79,-15.79 4.23,-2.85 11.05,-4.7 15,0.23 3.45,4.36 -0.17,8.58 -1.68,12.73 -8.44,23.22 -23,41.71 -43.79,54.92 -8.67,5.52 -12.77,12.46 -11.93,22.56l-5.91,4.28C102.89,329.94 85.43,329 69.41,323.55Z\"\n        android:fillColor=\"#7c522d\"/>\n    <path\n        android:pathData=\"M192.37,500.8c-8.31,-18.23 7.53,-15.42 16.3,-18.77 22.31,-5.17 42.54,-2.28 59,15.2 12.71,5.35 15.74,13.47 7.13,24.92C249.11,508.17 222,499.6 192.37,500.8Z\"\n        android:fillColor=\"#2d2f62\"/>\n    <path\n        android:pathData=\"M532,282.64c9.56,3.6 14.87,10.58 16.34,20.61 -14.52,7.8 -30.64,13.15 -41.2,27l-6.29,3.65c-15.67,-3 -15.64,-14 -13.25,-26.21C499.24,293.84 513.16,283.89 532,282.64Z\"\n        android:fillColor=\"#2b2f62\"/>\n    <path\n        android:pathData=\"M331.93,348.53c4,-8.62 11.15,-22.85 18.38,-19.51 7.68,3.54 5.32,14.83 4.88,21.38 -1.16,17.56 -6.41,33.61 -3,51.4 1.51,7.9 7.36,10.31 16.24,11 11.23,0.82 22.46,3.43 33.36,6.44 23.32,6.43 29.19,14.22 30.36,38.66 1,21 -4.12,40.67 -14.08,59 -3.57,6.58 -6.93,13 -7.47,20.63a13.61,13.61 0,0 1,-11 3.29,150.57 150.57,0 0,0 -50.12,-0.09c-3.4,0.59 -6.62,-0.77 -9.22,-3.21 -1.3,-11.09 -5.94,-19.83 -14.6,-27.56 -18.79,-16.76 -27.95,-39.49 -35.44,-62.92a10,10 0,0 1,-0.9 -7.61c1.41,-3.62 4.17,-5.46 7.92,-6 4.41,-0.29 8.33,1.22 12.1,3.31 2.07,1.15 7.78,6.59 9.28,7.11 0.48,0.17 0.83,-1.3 0.33,-2.62 -0.55,-2.09 -1.07,-25.23 -1,-27.64C319.92,394.68 325.59,362.34 331.93,348.53Z\"\n        android:fillColor=\"#e1a16e\"/>\n    <path\n        android:pathData=\"M267.69,497.23a203.53,203.53 0,0 0,-59 -15.19c1.46,-18.32 2.5,-36.24 0,-54.14 -5,-36 0.6,-56.81 9.79,-91.08a134.15,134.15 0,0 1,6.15 -13.25c1.63,-2.16 3.69,-4.1 3.55,0.95 -0.19,7 0.38,7.5 0.38,15.14 0,14.58 -1.2,30.78 0.82,45.26a69.36,69.36 0,0 0,6.6 -3,11.56 11.56,0 0,0 2.14,-2.72c7.52,-10.06 14,-20.84 22.82,-29.74 4.85,-4.88 10.29,-10 17.86,-6.43 7,3.25 1.28,11.39 -1.88,17.71 -4.63,9.26 -10.09,18.54 -15.61,28 -4.38,7.46 -7.68,12.51 -9.46,26.07 -3.79,13.66 0.59,20 0.26,30.4 8,-0.44 27.56,-0.31 34.3,-0.76a7.16,7.16 0,0 1,4 2.52C288.56,466.3 274.05,479.92 267.69,497.23Z\"\n        android:fillColor=\"#e1a16e\"/>\n    <path\n        android:pathData=\"M340.3,537.51c23.44,-6.72 46.88,-5 70.31,0 7.56,5.06 4.42,12.41 4.1,19.17 -27.17,-5.11 -54.3,-6.54 -81.33,0.91C324.81,547.15 331.7,542 340.3,537.51Z\"\n        android:fillColor=\"#2e3061\"/>\n    <path\n        android:pathData=\"M462.87,205.09c-0.39,-1 -1.25,-3.71 -2.91,-7.91 14.6,6.18 23.81,17.71 32.3,29.38C506,245.4 519.15,263.14 532,282.64L490.66,308c-3,-3.23 -4.42,-8.56 -9.62,-8.92 -20.18,-1.42 -40.41,-13.59 -61.2,-10.65 -0.88,-1.62 22.83,-8.52 28.3,-10.79 6.35,-2.64 12.74,-5.16 15.07,-5.11 1.08,0.36 -5,-2.09 -7,-4.62 -6.28,-8 -3.34,-11.82 -2.51,-14.86 3.27,-12 -10.36,-14.12 -18.84,-10.4 -4.17,1.82 -8.08,4.13 -12.41,1.94 -3.79,-2.54 -3.28,-4.47 -2.86,-9.06 0.82,-4.32 7.94,-10.58 11.32,-12.83 5.83,-3.46 12.76,-7 19.51,-5.87C466.76,219.5 473.24,231.17 462.87,205.09Z\"\n        android:fillColor=\"#e6b994\"/>\n    <path\n        android:pathData=\"M377.57,231.59c0.07,0.76 3.33,9.64 6.47,18 -10.25,0.13 -25.22,17.63 -33.82,-1 -0.39,-3.11 1.24,-5.24 3.4,-7.13Z\"\n        android:fillColor=\"#e4bb98\"/>\n    <path\n        android:pathData=\"M362.41,191.89c2.12,5.94 4.1,10.89 6.5,17.54 -6.24,-0.79 -14.49,-1.52 -16.26,-8.59C351.16,195 357.85,192.91 362.41,191.89Z\"\n        android:fillColor=\"#e1c1a7\"/>\n    <path\n        android:pathData=\"M386.62,256.44c2.62,7.36 4.6,12.31 7,18.68 -0.56,0.11 -0.7,0.23 -1.25,0.36 -6.77,1.69 -15.11,8.21 -19.7,-0.9C367.63,264.58 379.79,260.24 386.62,256.44Z\"\n        android:fillColor=\"#e2bb9a\"/>\n    <path\n        android:pathData=\"M396.43,283c3.43,8.41 10,8.81 17.58,7.37 -2.57,2.06 -4.86,4.38 -7.54,6.29 -4.12,3 -8.48,6.09 -13.5,1.94C387,293.65 395.44,283.43 396.43,283Z\"\n        android:fillColor=\"#dfb99a\"/>\n    <path\n        android:pathData=\"M459.11,278q1.15,-3.19 2.3,-6.39l19.12,10.32 -0.82,2.57Z\"\n        android:fillColor=\"#e2a879\"/>\n    <path\n        android:pathData=\"M109.46,157.52c0.72,2.31 1.91,4.92 2.37,7.6 -3.59,5.69 -8.51,14.4 -11.83,19.66 -3.65,-7.74 -4.39,-11.89 -5.69,-17.09 -1.65,-6.57 -4.25,-14.43 3.75,-18C105.53,146.38 107.7,151.87 109.46,157.52Z\"\n        android:fillColor=\"#7c522d\"/>\n    <path\n        android:pathData=\"M90.11,209.72c-0.84,8.76 2.91,21 -13.58,17.85a4.82,4.82 0,0 1,-4.41 -3.88c-5.07,-11.54 -5.49,-20.51 11.08,-20.11C88.88,201.82 90.32,204.83 90.11,209.72Z\"\n        android:fillColor=\"#7c522d\"/>\n    <path\n        android:pathData=\"M90.11,209.72l-6.91,-6.14c-0.69,-10.19 1.45,-17.23 14.88,-15.45C106.92,198.7 107,209.55 90.11,209.72Z\"\n        android:fillColor=\"#7c522d\"/>\n    <path\n        android:pathData=\"M72.12,223.69l4.41,3.88c1,2.43 2,4.85 2.93,7.27 -3.93,18.28 -13.41,7.21 -16.07,2C59.23,228.79 61.28,222.63 72.12,223.69Z\"\n        android:fillColor=\"#7c522d\"/>\n  </group>\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_vacc.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"24dp\"\n    android:height=\"24dp\"\n    android:viewportWidth=\"24\"\n    android:viewportHeight=\"24\">\n  <path\n      android:pathData=\"M5.7133,2.1353C5.8231,2.2451 5.8465,2.3 5.8465,2.4333 5.8465,2.5902 5.827,2.6214 5.4858,2.9704L5.125,3.339 6.1914,4.4055 7.2578,5.472 6.3677,6.3661 5.4737,7.2563 4.4073,6.1898 3.3409,5.1233 2.9723,5.4841C2.6234,5.8253 2.592,5.8449 2.4353,5.8449 2.302,5.8449 2.2471,5.8214 2.1373,5.7116 1.9845,5.5588 1.9608,5.3784 2.0667,5.2176 2.1608,5.0763 4.9758,2.2492 5.1562,2.1159 5.3721,1.9549 5.5409,1.9627 5.7133,2.1353zM9.6066,4.2212C9.7555,4.3429 9.7986,4.5349 9.7164,4.6918 9.6811,4.7545 9.5203,4.9388 9.3595,5.0996 9.1948,5.2604 9.0615,5.4094 9.0615,5.4329 9.0615,5.4524 11.0376,7.4484 13.4488,9.8637L17.84,14.2555 17.8676,14.4869C17.9029,14.8084 17.8598,15.5731 17.7851,15.879 17.7537,16.0161 17.6792,16.2437 17.6204,16.3849L17.5186,16.6437 18.1145,17.22C18.4869,17.5847 18.7065,17.8278 18.7065,17.8749 18.7065,17.918 18.6593,18.012 18.6006,18.0788L18.4987,18.2043 20.2473,19.9531C21.4392,21.1449 22,21.7331 22,21.788 22,21.8859 21.8825,21.9998 21.7804,21.9998 21.7333,21.9998 21.0472,21.341 19.9533,20.2469L18.2047,18.4982 18.0792,18.6002C18.0124,18.659 17.9263,18.7061 17.891,18.7061 17.8596,18.7061 17.5617,18.4396 17.2323,18.1141L16.6365,17.522 16.3816,17.6241C16.2445,17.679 16.0169,17.7535 15.8798,17.7849 15.5858,17.8594 14.7271,17.9065 14.4487,17.8673L14.2567,17.84 9.8653,13.4478C7.4503,11.0363 5.4545,9.06 5.435,9.06 5.4115,9.06 5.2623,9.1933 5.1017,9.358 4.9409,9.5188 4.7567,9.6794 4.694,9.7147 4.4353,9.8518 4.1216,9.6363 4.1216,9.3227L4.1216,9.158 6.6426,6.6406 9.1597,4.1194 9.3244,4.1194C9.4419,4.1194 9.5203,4.1467 9.6066,4.2212zM8.493,8.511L7.748,9.2561 7.9755,9.4796 8.199,9.7069 8.9517,8.9541 9.7084,8.1973 9.4927,7.9816C9.3752,7.8641 9.2693,7.7659 9.2574,7.7659 9.2456,7.7659 8.9009,8.0994 8.493,8.511zM10.2967,10.3147L9.5517,11.0598 9.779,11.2833 10.0024,11.5106 10.7552,10.7578 11.5119,10.001 11.2962,9.7853C11.1787,9.6678 11.0727,9.5696 11.0609,9.5696 11.0491,9.5696 10.7044,9.9031 10.2967,10.3147zM12.1002,12.1184L11.3552,12.8635 11.5827,13.0869 11.8061,13.3143 12.5589,12.5614 13.3156,11.8047 13.0999,11.589C12.9823,11.4714 12.8764,11.3735 12.8646,11.3735 12.8528,11.3735 12.5079,11.7067 12.1002,12.1184zM13.9037,13.9222L13.1587,14.6673 13.386,14.8908 13.6094,15.1182 14.3624,14.3653 15.1191,13.6086 14.9034,13.3929C14.7858,13.2753 14.6799,13.1771 14.6681,13.1771 14.6563,13.1771 14.3114,13.5104 13.9037,13.9222z\"\n      android:fillColor=\"#757575\"\n      android:fillType=\"evenOdd\"/>\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_warn.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:aapt=\"http://schemas.android.com/aapt\"\n    android:width=\"238dp\"\n    android:height=\"178dp\"\n    android:viewportWidth=\"238\"\n    android:viewportHeight=\"178\">\n  <path\n      android:pathData=\"M129.286,169.109C100.733,156.872 21.121,182.994 2.454,157.849C-10.105,140.932 29.632,120.81 29.632,98.17C29.632,41.877 57.943,50.877 119.094,29.482C180.246,8.088 238,41.877 238,98.17C238,154.463 194.968,197.26 129.286,169.109Z\"\n      android:fillType=\"nonZero\">\n    <aapt:attr name=\"android:fillColor\">\n      <gradient \n          android:gradientRadius=\"248.31752\"\n          android:centerX=\"39.98908\"\n          android:centerY=\"0.9043278\"\n          android:type=\"radial\">\n        <item android:offset=\"0\" android:color=\"#FFFFFFFF\"/>\n        <item android:offset=\"1\" android:color=\"#FFC9E2F4\"/>\n      </gradient>\n    </aapt:attr>\n  </path>\n  <group>\n    <clip-path\n        android:pathData=\"M129.286,169.046C100.733,156.721 21.121,183.029 2.454,157.706C-10.105,140.669 29.632,120.404 29.632,97.602C29.632,40.909 40.957,26.158 102.108,4.611C163.259,-16.935 238,40.909 238,97.602C238,154.295 194.968,197.397 129.286,169.046Z\"/>\n    <path\n        android:pathData=\"M144.408,118.754L99.293,120C98.389,120.023 97.637,119.297 97.613,118.376L95.001,19.957C94.976,19.036 95.689,18.269 96.592,18.244L141.707,16.999C142.61,16.975 143.363,17.701 143.388,18.623L145.999,117.041C146.024,117.962 145.311,118.729 144.408,118.754\"\n        android:fillColor=\"#334176\"\n        android:fillType=\"nonZero\"/>\n    <path\n        android:pathData=\"M146,108.691l-48.692,1.308l-2.308,-84.692l48.692,-1.308z\"\n        android:fillColor=\"#E6235C\"\n        android:fillType=\"nonZero\"/>\n    <path\n        android:pathData=\"M144.408,49.477L145.153,70.816C145.403,77.968 139.621,83.976 132.238,84.234L110.212,85.003C102.83,85.261 96.642,79.671 96.393,72.519L95.647,51.18C95.398,44.027 101.18,38.02 108.563,37.762L130.589,36.993C137.972,36.736 144.158,42.325 144.408,49.477\"\n        android:fillColor=\"#E6235C\"\n        android:fillType=\"nonZero\"/>\n    <path\n        android:pathData=\"M141.608,107.156l3.6,-21.602l-1.16,-18.394l-9.144,-11.776l-30.207,17.824z\"\n        android:fillColor=\"#DE0051\"\n        android:fillType=\"nonZero\"/>\n    <path\n        android:pathData=\"M119.894,47.541C112.608,47.795 106.456,51.962 106.392,52.004L106.757,62.457L106.922,67.168L107.122,72.91C107.187,72.947 113.577,76.638 120.799,76.424L120.921,76.935L134.405,71.958L134.204,66.216L133.675,51.051C133.612,51.014 127.158,47.287 119.894,47.541\"\n        android:fillColor=\"#BCE0E3\"\n        android:fillType=\"nonZero\"/>\n    <path\n        android:pathData=\"M133.921,51.043L134.122,56.785L118.092,55.349L119.756,47.546C127.222,47.286 133.854,51.006 133.921,51.043\"\n        android:fillColor=\"#A1D6DA\"\n        android:fillType=\"nonZero\"/>\n    <path\n        android:pathData=\"M134.45,66.207L134.65,71.949L120.783,76.941L118.525,67.725C118.525,67.725 134.353,66.24 134.45,66.207\"\n        android:fillColor=\"#BCE0E3\"\n        android:fillType=\"nonZero\"/>\n    <path\n        android:pathData=\"M118.29,61.021L120.494,68.689C125.227,68.484 129.915,67.65 134.449,66.206L134.284,61.495C134.221,61.498 118.29,61.021 118.29,61.021\"\n        android:fillColor=\"#A1D6DA\"\n        android:fillType=\"nonZero\"/>\n    <path\n        android:pathData=\"M134.122,56.786L134.286,61.496L118.326,62.053L120.026,55.28C124.762,55.156 129.498,55.662 134.122,56.786\"\n        android:fillColor=\"#BCE0E3\"\n        android:fillType=\"nonZero\"/>\n    <path\n        android:pathData=\"M120.784,68.679L121.054,76.414C113.585,76.675 106.957,72.954 106.889,72.918L106.689,67.175L120.784,68.679Z\"\n        android:fillColor=\"#DDEFF1\"\n        android:fillType=\"nonZero\"/>\n    <path\n        android:pathData=\"M120.046,47.537L120.316,55.272L106.361,57.754L106.161,52.013C110.395,49.39 115.15,47.857 120.046,47.537\"\n        android:fillColor=\"#BCE0E3\"\n        android:fillType=\"nonZero\"/>\n    <path\n        android:pathData=\"M120.316,55.272L120.55,61.977L113.61,64.285L106.525,62.467L106.361,57.756C110.895,56.312 115.583,55.477 120.316,55.272\"\n        android:fillColor=\"#DDEFF1\"\n        android:fillType=\"nonZero\"/>\n    <path\n        android:pathData=\"M106.525,62.465L106.69,67.175C111.313,68.298 116.049,68.803 120.785,68.679L120.551,61.974L106.525,62.465Z\"\n        android:fillColor=\"#BCE0E3\"\n        android:fillType=\"nonZero\"/>\n    <path\n        android:pathData=\"M134.07,71.213C125.96,76.45 115.86,76.803 107.404,72.144L106.727,52.749C114.837,47.513 124.937,47.16 133.393,51.818L134.07,71.213ZM135.972,69.718L135.926,69.745L135.347,53.167L135.395,53.19C137.318,54.124 140.977,55.86 144.601,56.007L144.518,53.635C141.32,53.501 138.07,51.895 136.282,51.026C135.866,50.824 135.534,50.664 135.256,50.545L135.256,50.539L134.772,50.257C125.453,44.888 114.165,45.283 105.243,51.288L104.779,51.603L104.779,51.609C104.51,51.747 104.191,51.93 103.79,52.16C102.067,53.151 98.937,54.991 95.756,55.344L95.839,57.71C99.443,57.31 102.974,55.324 104.826,54.258L104.871,54.233L105.449,70.807L105.403,70.785C103.479,69.851 99.821,68.113 96.197,67.968L96.28,70.335C99.477,70.469 102.728,72.082 104.516,72.95C104.965,73.168 105.318,73.339 105.608,73.459L106.024,73.701C115.343,79.07 126.631,78.676 135.553,72.67L135.951,72.4C136.234,72.258 136.573,72.064 137.006,71.815C138.728,70.825 141.86,68.985 145.041,68.632L144.958,66.265C141.354,66.667 137.825,68.653 135.972,69.718L135.972,69.718Z\"\n        android:fillColor=\"#FFF\"\n        android:fillType=\"nonZero\"/>\n    <path\n        android:pathData=\"M117.016,191.291C103.656,191.781 90.264,191.867 76.948,192.923C69.857,193.487 69.992,190.945 70.001,184.267C70.004,182.816 72.62,173.431 73.334,169.701C75.092,164.353 76.409,158.872 78.151,153.522C79.136,150.495 80.022,147.37 83.263,145.846C97.024,143.514 109.639,145.788 120.455,155.3C123.724,162.704 120.804,170.18 120.712,177.628C120.505,182.464 120.879,187.463 117.016,191.291M146.182,189.312C146.122,182.54 146.061,175.769 146,168.997C147.037,166.098 149.565,165.12 152.065,164.691C162,162.987 171.97,161.753 181.85,165.166C182.708,165.62 181.113,166.045 183.297,167.293C183.261,171.412 185.635,174.821 186.708,178.718C189.605,189.228 188.141,189.543 177.018,189.921C169.175,190.188 161.332,190.55 153.487,190.666C151.03,190.702 148.219,191.969 146.182,189.312\"\n        android:fillColor=\"#B9417E\"\n        android:fillType=\"nonZero\"/>\n    <path\n        android:pathData=\"M81.194,145.889C77.143,137.111 84.382,138.229 88.314,136.448C98.367,133.555 107.598,134.642 115.346,142.926C121.197,145.335 122.693,149.258 118.958,154.999C107.073,148.578 94.633,144.822 81.194,145.889\"\n        android:fillColor=\"#2D2F62\"\n        android:fillType=\"nonZero\"/>\n    <path\n        android:pathData=\"M143.261,74.384C144.942,70.388 148.021,63.779 151.389,65.194C154.959,66.695 154.046,71.89 153.947,74.889C153.681,82.927 151.518,90.335 153.351,98.414C154.164,101.996 156.877,103.011 160.96,103.175C166.116,103.383 171.3,104.405 176.342,105.614C187.124,108.198 189.933,111.668 190.838,122.815C191.615,132.392 189.567,141.456 185.279,149.99C183.743,153.047 182.303,156.051 182.172,159.525C180.749,160.783 179.022,161.422 177.198,161.192C169.495,160.221 161.854,160.324 154.231,161.91C152.685,162.232 151.188,161.657 149.961,160.581C149.197,155.539 146.935,151.615 142.851,148.215C133.988,140.84 129.448,130.595 125.658,120.007C125.031,118.922 124.844,117.77 125.131,116.544C125.724,114.869 126.959,113.99 128.67,113.697C130.685,113.501 132.507,114.132 134.265,115.026C135.23,115.521 137.931,117.921 138.623,118.135C138.848,118.205 138.987,117.53 138.737,116.935C138.453,115.988 137.863,105.423 137.849,104.325C138.459,95.645 140.565,80.789 143.261,74.384\"\n        android:fillColor=\"#E0A16F\"\n        android:fillType=\"nonZero\"/>\n    <path\n        android:pathData=\"M116.119,142.999C107.12,139.596 97.773,137.702 88.156,137.007C88.556,128.696 88.767,120.572 87.316,112.505C84.4,96.303 86.715,86.789 90.497,71.142C90.635,70.569 92.799,65.569 93.179,65.051C93.915,64.051 94.849,63.141 94.863,65.431C94.883,68.582 95.158,68.816 95.277,72.276C95.504,78.874 95.193,86.222 96.363,92.748C96.375,92.817 99.295,91.403 99.418,91.295C99.807,90.955 100.089,90.511 100.38,90.032C103.756,85.365 106.626,80.388 110.64,76.23C112.84,73.95 115.317,71.569 118.924,73.051C122.253,74.417 119.704,78.186 118.318,81.095C116.286,85.356 113.869,89.637 111.419,93.988C109.48,97.431 108.009,99.763 107.38,105.926C105.816,112.166 107.972,114.96 107.979,119.683C111.735,119.364 120.915,119.127 124.075,118.822C124.847,118.969 125.48,119.342 126,119.903C125.438,128.689 118.838,135.072 116.119,142.999\"\n        android:fillColor=\"#E0A16F\"\n        android:fillType=\"nonZero\"/>\n    <path\n        android:pathData=\"M148.866,160.36C159.648,157.177 170.56,157.591 181.517,159.38C185.104,161.42 183.763,164.591 183.718,167.466C171.019,165.677 158.396,165.453 145.957,168.999C141.82,164.678 144.939,162.405 148.866,160.36\"\n        android:fillColor=\"#2E2F61\"\n        android:fillType=\"nonZero\"/>\n  </group>\n  <group>\n    <clip-path\n        android:pathData=\"M129.286,169.046C100.733,156.721 21.121,183.029 2.454,157.706C-10.105,140.669 29.632,120.404 29.632,97.602C29.632,40.909 40.957,26.158 102.108,4.611C163.259,-16.935 238,40.909 238,97.602C238,154.295 194.968,197.397 129.286,169.046Z\"/>\n    <path\n        android:pathData=\"M134,21L138,25C147.94,15.06 164.06,15.06 174,25L178,21C165.86,8.86 146.16,8.86 134,21ZM150,37L156,43L162,37C158.7,33.68 153.32,33.68 150,37ZM142,29L146,33C151.52,27.48 160.48,27.48 166,33L170,29C162.28,21.28 149.74,21.28 142,29Z\"\n        android:fillColor=\"#9EBD63\"\n        android:fillType=\"nonZero\"/>\n  </group>\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/launchscreen.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n\n<layer-list xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <item android:drawable=\"@color/launch_screen_background\" />\n    <item\n        android:width=\"80dp\"\n        android:height=\"80dp\"\n        android:drawable=\"@drawable/ic_splashscreen_logo\"\n        android:gravity=\"center\" />\n\n    <item\n        android:drawable=\"@drawable/ic_splashscreen_hands\"\n        android:width=\"400dp\"\n        android:height=\"262dp\"\n        android:gravity=\"bottom|center_horizontal\"/>\n\n</layer-list>"
  },
  {
    "path": "app/src/main/res/drawable-anydpi-v24/ic_notification_normal.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"24dp\"\n    android:height=\"24dp\"\n    android:viewportWidth=\"24\"\n    android:viewportHeight=\"24\"\n    android:tint=\"#FFFFFF\">\n  <group android:scaleX=\"0.92\"\n      android:scaleY=\"0.92\"\n      android:translateX=\"0.96\"\n      android:translateY=\"0.96\">\n    <path\n        android:pathData=\"m23.2,14.3c-1.6,0.1 -3.1,0.7 -4.1,1 -0.1,0 -0.1,0 -0.2,0.1v-6.8c0.1,0 0.1,0 0.2,0.1 0.9,0.3 2.5,0.9 4,1h0.1c0.4,0 0.8,-0.3 0.8,-0.7 0,-0.5 -0.3,-0.8 -0.8,-0.9 -1.3,-0.1 -2.7,-0.5 -3.6,-0.8 -0.3,-0.1 -0.4,-0.2 -0.7,-0.4l-0.2,-0.1c-0.1,-0.1 -3.1,-2 -6.7,-2s-6.6,1.9 -6.7,2l-0.2,0.1c-0.4,0.2 -0.5,0.2 -0.8,0.4 -0.9,0.3 -2.2,0.7 -3.5,0.8 -0.5,0 -0.8,0.4 -0.8,0.9 0,0.4 0.4,0.8 0.8,0.8h0.1c1.5,-0.1 3.1,-0.7 4,-1 0.1,0 0.1,0 0.2,-0.1v6.7c-0.1,0 -0.1,0 -0.2,-0.1 -0.9,-0.3 -2.5,-0.9 -4,-1 0,0 0,0 -0.1,0 -0.4,0 -0.8,0.3 -0.8,0.7 0,0.5 0.3,0.8 0.8,0.9 1.3,0.1 2.7,0.5 3.6,0.8 0.3,0.1 0.4,0.2 0.7,0.4l0.2,0.1c0.1,0.1 3.1,2 6.7,2s6.6,-1.9 6.7,-2l0.2,-0.1c0.4,-0.2 0.4,-0.2 0.7,-0.4 0.9,-0.4 2.3,-0.7 3.6,-0.8 0.5,0 0.8,-0.4 0.8,-0.9 0,-0.4 -0.4,-0.7 -0.8,-0.7z\"\n        android:fillColor=\"#ed205a\"/>\n  </group>\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable-night/ic_splashscreen_hands.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"490dp\"\n    android:height=\"338dp\"\n    android:viewportWidth=\"490\"\n    android:viewportHeight=\"338\">\n  <path\n      android:pathData=\"M55.419,166.777C57.658,160.609 63.13,158.32 69.433,158C81.43,158.801 93.03,161.032 103.38,167.69C107.618,171.646 107.371,176.32 106.429,181.685C100.401,216.034 90.191,249.036 77.093,281.164C75.278,285.614 73.408,290.048 71.486,294.467C66.051,306.961 60.627,364.402 46.895,368.516C33.163,372.629 23.112,366.869 9.209,367.041C1.722,367.133 -0.87,350.959 0.249,347.053C8.117,319.623 50.372,180.675 55.419,166.777Z\"\n      android:fillColor=\"#032F4F\"\n      android:fillType=\"evenOdd\"/>\n  <path\n      android:pathData=\"M40.169,360.832C31.299,357.928 37.044,384.981 53.033,337.876C59.424,319.048 69.647,295.843 79.015,266.718C93.083,222.977 105.557,173.859 102.897,169.878C103.63,166.367 105.338,164.857 108.82,166.966C115.001,174.274 112.7,223.161 111.992,231.64C109.217,264.897 96.579,345.81 92.006,346.896C81.368,349.421 55.152,366.407 44.149,367C47.409,364.824 46.082,362.768 40.169,360.832Z\"\n      android:fillColor=\"#05263D\"\n      android:fillType=\"evenOdd\"/>\n  <path\n      android:pathData=\"M449.121,235.759C449.706,238.794 466.835,274.03 475.477,322.755C478.793,341.449 488.791,390.541 486.459,405.114C483.55,423.289 452.421,397.09 440.382,399.038C439.26,399.219 419.574,398.374 416.187,392.597C412.8,386.82 417.927,334.847 420.072,329.648C428.194,309.962 422.147,306.42 412.214,284.249C402.281,262.078 397.517,227.608 395.573,202.785C403.49,190.196 416.181,190.071 428.95,190.117C435.304,193.369 444.56,225.59 449.121,235.759Z\"\n      android:fillColor=\"#042C49\"\n      android:fillType=\"evenOdd\"/>\n  <path\n      android:pathData=\"M393.474,202.567C395.103,200.296 396.119,200.095 398.79,201.413C406.838,228.203 414.881,261.896 427.127,301.253C439.374,340.61 435.646,399.647 430.834,414.656C426.023,429.664 409.894,410.691 403.619,411.536C397.345,412.381 392.006,223.916 393.474,202.567Z\"\n      android:fillColor=\"#062840\"\n      android:fillType=\"evenOdd\"/>\n  <group>\n    <clip-path\n        android:pathData=\"M327.647,13.99l97.362,26.088l-35.851,133.796l-97.362,-26.088z\"/>\n    <path\n        android:pathData=\"M392.377,154.449L336.73,159.634C335.11,159.785 333.669,158.601 333.513,156.99L321.78,36.605C321.622,34.994 322.809,33.565 324.429,33.415L380.075,28.229C381.695,28.078 383.136,29.262 383.292,30.874L395.025,151.258C395.183,152.869 393.997,154.298 392.377,154.449\"\n        android:fillColor=\"#124056\"\n        android:fillType=\"evenOdd\"/>\n  </group>\n  <path\n      android:pathData=\"M394.141,142.765l-61.549,5.829l-10.275,-107.112l61.549,-5.829z\"\n      android:fillColor=\"#062C47\"\n      android:fillType=\"evenOdd\"/>\n  <path\n      android:pathData=\"M390.075,100.365l-61.55,5.828l-2.566,-26.753l61.55,-5.828z\"\n      android:fillColor=\"#1A526D\"\n      android:fillType=\"evenOdd\"/>\n  <path\n      android:pathData=\"M381.303,57.324l-52.069,4.932l-0.386,-4.032l52.068,-4.93z\"\n      android:fillColor=\"#1A526D\"\n      android:fillType=\"evenOdd\"/>\n  <path\n      android:pathData=\"M357.251,68.741l-27.147,2.57l-0.387,-4.031l27.147,-2.57z\"\n      android:fillColor=\"#1A526D\"\n      android:fillType=\"evenOdd\"/>\n  <path\n      android:pathData=\"M382.171,66.381l-18.852,1.785l-0.387,-4.031l18.853,-1.784z\"\n      android:fillColor=\"#1A526D\"\n      android:fillType=\"evenOdd\"/>\n  <path\n      android:pathData=\"M341.508,114.091C341.702,115.966 340.327,117.642 338.439,117.835C336.551,118.027 334.865,116.662 334.671,114.786C334.477,112.911 335.851,111.235 337.739,111.042C339.627,110.85 341.314,112.215 341.508,114.091\"\n      android:fillColor=\"#1A526D\"\n      android:fillType=\"evenOdd\"/>\n  <path\n      android:pathData=\"M423.325,174.855C429.062,178.943 431.359,184.513 430.548,191.427C419.458,194.018 407.74,194.704 398.211,202.015C396.592,202.448 394.975,202.881 393.358,203.314C383.449,198.508 385.431,191.236 389.205,183.579C399.479,176.465 410.547,172.344 423.325,174.855\"\n      android:fillColor=\"#133E5C\"\n      android:fillType=\"evenOdd\"/>\n  <path\n      android:pathData=\"M391.071,111.142C390.987,110.435 390.9,108.457 390.55,105.376C399.19,112.07 403.271,121.352 406.855,130.604C412.639,145.535 418.263,159.646 423.324,174.855C412.621,178.021 401.917,181.186 391.21,184.354C389.796,181.68 389.789,177.892 386.388,176.727C373.17,172.201 361.842,160.532 347.438,158.786C347.141,157.555 364.198,157.193 368.258,156.658C372.972,156.038 377.687,155.505 379.233,155.954C379.889,156.384 376.266,153.677 375.395,151.647C372.635,145.213 375.278,143.213 376.378,141.339C380.706,133.963 371.987,130.138 365.659,131.094C362.55,131.563 359.524,132.396 357.03,130.177C354.951,127.819 355.638,126.632 356.735,123.66C358.059,120.937 363.933,118.056 366.589,117.161C371.104,115.904 376.352,114.812 380.663,116.736C391.094,121.392 393.328,130.283 391.071,111.142\"\n      android:fillColor=\"#42677E\"\n      android:fillType=\"evenOdd\"/>\n  <path\n      android:pathData=\"M329.39,113.558C329.303,114.076 329.89,120.545 330.488,126.648C323.628,124.908 310.501,133.857 308.098,119.964C308.387,117.834 309.861,116.709 311.636,115.84C317.555,115.079 323.473,114.319 329.39,113.558\"\n      android:fillColor=\"#42677E\"\n      android:fillType=\"evenOdd\"/>\n  <path\n      android:pathData=\"M326.37,84.535C326.724,88.85 327.161,92.485 327.577,97.32C323.552,95.685 318.176,93.739 318.251,88.736C318.314,84.561 323.149,84.399 326.37,84.535\"\n      android:fillColor=\"#42677E\"\n      android:fillType=\"evenOdd\"/>\n  <path\n      android:pathData=\"M330.988,131.65C331.417,136.992 331.859,140.628 332.319,145.278C331.923,145.257 331.81,145.306 331.418,145.3C326.601,145.215 319.867,148.056 318.428,141.199C316.85,133.674 325.744,132.957 330.988,131.65\"\n      android:fillColor=\"#42677E\"\n      android:fillType=\"evenOdd\"/>\n  <path\n      android:pathData=\"M332.786,151.007C333.571,157.196 337.878,158.628 343.202,159.017C341.119,159.928 339.175,161.056 337.046,161.853C333.762,163.081 330.29,164.385 327.688,160.737C324.594,156.399 332.044,151.118 332.786,151.007\"\n      android:fillColor=\"#42677E\"\n      android:fillType=\"evenOdd\"/>\n  <path\n      android:pathData=\"M375.528,158.805C376.422,157.529 377.316,156.252 378.208,154.974C381.845,158.388 385.484,161.803 389.123,165.219C388.788,165.738 388.452,166.258 388.117,166.776C383.92,164.119 379.724,161.463 375.528,158.805\"\n      android:fillColor=\"#2B4B5F\"\n      android:fillType=\"evenOdd\"/>\n  <path\n      android:pathData=\"M108.854,150.093L61.002,121.574C59.609,120.744 59.153,118.941 59.984,117.549L122.007,13.477C122.837,12.083 124.64,11.627 126.033,12.458L173.885,40.976C175.277,41.806 175.734,43.609 174.903,45.001L112.88,149.073C112.05,150.466 110.247,150.923 108.854,150.093\"\n      android:fillColor=\"#3D687C\"\n      android:fillType=\"evenOdd\"/>\n  <path\n      android:pathData=\"M117.215,141.799l-52.897,-31.525l55.219,-92.652l52.896,31.525z\"\n      android:fillColor=\"#0A3049\"\n      android:fillType=\"evenOdd\"/>\n  <path\n      android:pathData=\"M125.807,127.381l-52.896,-31.525l27.057,-45.399l52.896,31.524z\"\n      android:fillColor=\"#2B4F66\"\n      android:fillType=\"evenOdd\"/>\n  <path\n      android:pathData=\"M157.532,65.16l-44.748,-26.669l2.078,-3.488l44.748,26.67z\"\n      android:fillColor=\"#35586E\"\n      android:fillType=\"evenOdd\"/>\n  <path\n      android:pathData=\"M131.446,60.23l-23.331,-13.905l2.078,-3.487l23.331,13.905z\"\n      android:fillColor=\"#35586E\"\n      android:fillType=\"evenOdd\"/>\n  <path\n      android:pathData=\"M152.863,72.994l-16.203,-9.657l2.078,-3.487l16.203,9.657z\"\n      android:fillColor=\"#35586E\"\n      android:fillType=\"evenOdd\"/>\n  <path\n      android:pathData=\"M246.227,244.798L182.817,244.828C181.195,244.828 179.88,243.514 179.879,241.892L179.815,104.847C179.815,103.225 181.128,101.909 182.75,101.909L246.16,101.879C247.782,101.879 249.097,103.192 249.098,104.814L249.162,241.86C249.162,243.482 247.848,244.797 246.227,244.798\"\n      android:fillColor=\"#18485E\"\n      android:fillType=\"evenOdd\"/>\n  <path\n      android:pathData=\"M249.157,231.966l-69.283,0.032l-0.056,-121.354l69.282,-0.033z\"\n      android:fillColor=\"#062942\"\n      android:fillType=\"evenOdd\"/>\n  <path\n      android:pathData=\"M249.148,213.081l-69.282,0.032l-0.028,-59.463l69.282,-0.033z\"\n      android:fillColor=\"#40647B\"\n      android:fillType=\"evenOdd\"/>\n  <path\n      android:pathData=\"M201.111,165.232C201.104,168.213 198.681,170.624 195.7,170.617C192.718,170.609 190.307,168.187 190.314,165.205C190.322,162.224 192.745,159.813 195.726,159.82C198.707,159.827 201.119,162.25 201.111,165.232\"\n      android:fillColor=\"#0B344D\"\n      android:fillType=\"evenOdd\"/>\n  <path\n      android:pathData=\"M239.906,195.558l-52.365,-0.128l0.039,-16.195l52.366,0.127z\"\n      android:fillColor=\"#162630\"\n      android:fillType=\"evenOdd\"/>\n  <path\n      android:pathData=\"M238.909,161.961l-31.312,-0.076l0.006,-2.16l31.31,0.076z\"\n      android:fillColor=\"#0B344D\"\n      android:fillType=\"evenOdd\"/>\n  <path\n      android:pathData=\"M238.898,166.538l-31.312,-0.077l0.006,-2.159l31.31,0.076z\"\n      android:fillColor=\"#0B344D\"\n      android:fillType=\"evenOdd\"/>\n  <path\n      android:pathData=\"M239.669,204.239l-52.436,-0.128l0.006,-2.158l52.435,0.127z\"\n      android:fillColor=\"#0B344D\"\n      android:fillType=\"evenOdd\"/>\n  <path\n      android:pathData=\"M239.658,208.445l-52.435,-0.128l0.005,-2.16l52.436,0.128z\"\n      android:fillColor=\"#0B344D\"\n      android:fillType=\"evenOdd\"/>\n  <path\n      android:pathData=\"M238.885,171.506l-31.311,-0.075l0.006,-2.16l31.31,0.075z\"\n      android:fillColor=\"#0B344D\"\n      android:fillType=\"evenOdd\"/>\n  <path\n      android:pathData=\"M213.247,142.523l63.351,0l0,-20.622l-63.351,0z\"\n      android:fillColor=\"#163B55\"\n      android:fillType=\"evenOdd\"/>\n  <path\n      android:pathData=\"M274.255,128.104l-58.61,0.028l-0.002,-3.266l58.61,-0.027z\"\n      android:fillColor=\"#416881\"\n      android:fillType=\"evenOdd\"/>\n  <path\n      android:pathData=\"M240.764,134.188l-25.01,0.011l-0.001,-3.266l25.009,-0.011z\"\n      android:fillColor=\"#416881\"\n      android:fillType=\"evenOdd\"/>\n  <path\n      android:pathData=\"M273.946,134.338l-21.622,0.01l-0.002,-3.266l21.623,-0.01z\"\n      android:fillColor=\"#416881\"\n      android:fillType=\"evenOdd\"/>\n  <path\n      android:pathData=\"M244.771,139.853l-28.914,0.014l-0.002,-3.267l28.915,-0.013z\"\n      android:fillColor=\"#416881\"\n      android:fillType=\"evenOdd\"/>\n  <path\n      android:pathData=\"M274.047,139.921l-21.622,0.011l-0.001,-3.266l21.622,-0.011z\"\n      android:fillColor=\"#416881\"\n      android:fillType=\"evenOdd\"/>\n  <path\n      android:pathData=\"M205.079,141.954C210.328,138.363 211.672,131.196 208.081,125.947C204.49,120.698 197.323,119.354 192.074,122.946C186.825,126.536 185.481,133.703 189.072,138.952C192.663,144.201 199.829,145.546 205.079,141.954\"\n      android:fillColor=\"#2B5570\"\n      android:fillType=\"evenOdd\"/>\n  <path\n      android:pathData=\"M201.58,128.448C201.58,130.075 200.26,131.395 198.633,131.395 197.006,131.395 195.687,130.075 195.687,128.448 195.687,126.821 197.006,125.502 198.633,125.502 200.26,125.502 201.58,126.821 201.58,128.448M203.306,137.602C203.306,138.063 200.903,138.829 198.415,138.8 195.926,138.77 193.349,137.946 193.349,137.602 193.349,134.852 195.578,132.624 198.328,132.624 201.077,132.624 203.306,134.852 203.306,137.602\"\n      android:fillColor=\"#062942\"\n      android:fillType=\"evenOdd\"/>\n  <path\n      android:pathData=\"M206.745,352.815C185.63,352.885 164.486,352.32 143.412,353.281 132.189,353.793 132.535,349.818 132.895,339.357 132.973,337.084 137.59,322.517 138.911,316.713 141.962,308.425 144.326,299.909 147.352,291.618 149.063,286.927 150.624,282.079 155.819,279.86 177.663,276.926 197.457,281.147 214.038,296.612 218.814,308.382 213.818,319.941 213.287,331.604 212.71,339.169 213.04,347.019 206.745,352.815M251.539,350.609C251.775,340.739 252.01,330.868 252.245,320.997 253.938,316.825 257.775,315.524 261.543,315.023 276.517,313.034 291.52,311.729 306.164,317.192 307.427,317.897 305.016,318.437 308.23,320.364 307.977,326.363 311.37,331.449 312.792,337.18 316.628,352.64 314.417,353.026 297.728,353.027 285.959,353.027 274.187,353.164 262.423,352.945 258.738,352.876 254.465,354.581 251.539,350.609\"\n      android:fillColor=\"#063A57\"\n      android:fillType=\"evenOdd\"/>\n  <path\n      android:pathData=\"M70.556,159.896C75.286,152.599 72.219,145.9 69.489,138.846C67.832,134.567 67.745,129.679 66.953,125.064C69.669,123.366 72.138,124.468 74.608,125.716C79.063,128.321 82.184,133.516 88.344,132.709C90.81,132.004 92.742,130.277 95.012,129.194C101.003,126.824 105.308,124.465 111.663,123.216C117.645,122.039 124.152,121.122 127.685,116.051C130.496,112.017 132.279,108.474 137.173,105.18C140.089,103.217 144.78,101.943 147.474,105.341C149.848,108.338 147.353,111.241 146.315,114.097C140.504,130.084 130.47,142.81 116.177,151.903C110.21,155.698 107.381,160.482 107.963,167.428C106.605,168.416 105.249,169.395 103.896,170.375C93.597,164.292 81.581,163.675 70.556,159.896\"\n      android:fillColor=\"#163D59\"\n      android:fillType=\"evenOdd\"/>\n  <path\n      android:pathData=\"M155.19,281.895C149.466,269.351 160.373,271.285 166.41,268.979C181.762,265.415 195.688,267.406 207.034,279.44C215.78,283.119 217.863,288.709 211.942,296.593C194.246,286.971 175.587,281.068 155.19,281.895\"\n      android:fillColor=\"#0A2A40\"\n      android:fillType=\"evenOdd\"/>\n  <path\n      android:pathData=\"M251.249,177.086C253.97,171.156 258.921,161.36 263.903,163.658C269.186,166.094 267.558,173.868 267.26,178.377C266.461,190.463 262.846,201.506 265.194,213.757C266.236,219.189 270.257,220.851 276.374,221.302C284.101,221.87 291.829,223.665 299.334,225.735C315.384,230.16 319.428,235.522 320.231,252.347C320.921,266.801 317.396,280.342 310.537,292.974C308.079,297.499 305.769,301.949 305.398,307.171C303.202,308.994 300.578,309.87 297.852,309.434C286.342,307.591 274.87,307.366 263.353,309.375C261.017,309.783 258.799,308.844 257.012,307.163C256.117,299.534 252.918,293.517 246.958,288.197C234.027,276.656 227.723,261.01 222.564,244.885C221.676,243.22 221.454,241.476 221.945,239.646C222.919,237.155 224.815,235.893 227.396,235.536C230.431,235.341 233.132,236.381 235.727,237.814C237.15,238.607 241.083,242.354 242.112,242.711C242.445,242.827 242.688,241.818 242.342,240.91C241.963,239.47 241.604,223.539 241.637,221.886C242.985,208.85 246.884,186.594 251.249,177.086\"\n      android:fillColor=\"#2F5268\"\n      android:fillType=\"evenOdd\"/>\n  <path\n      android:pathData=\"M207.034,279.44C194.031,273.833 180.444,270.505 166.401,268.983C167.404,256.376 168.121,244.042 166.402,231.717C162.949,206.961 166.815,192.619 173.137,169.03C173.369,168.166 176.787,160.675 177.37,159.906C178.497,158.421 179.91,157.084 179.816,160.565C179.687,165.353 180.078,165.721 180.078,170.984C180.078,181.019 179.254,192.167 180.639,202.139C180.653,202.245 184.999,200.238 185.183,200.08C185.77,199.582 186.205,198.921 186.656,198.207C191.833,191.281 196.283,183.859 202.368,177.735C205.702,174.378 209.449,170.88 214.655,173.306C219.458,175.544 215.538,181.146 213.362,185.499C210.174,191.873 206.421,198.259 202.616,204.752C199.605,209.888 197.334,213.36 196.104,222.693C193.501,232.097 196.516,236.446 196.289,243.622C201.803,243.32 215.254,243.404 219.895,243.094C221.017,243.354 221.926,243.952 222.658,244.829C221.393,258.149 211.412,267.527 207.034,279.44\"\n      android:fillColor=\"#2F5268\"\n      android:fillType=\"evenOdd\"/>\n  <path\n      android:pathData=\"M257.012,307.163C273.145,302.541 289.277,303.745 305.404,307.175C310.607,310.651 308.45,315.716 308.23,320.364C289.525,316.847 270.849,315.867 252.243,320.995C246.348,313.802 251.09,310.278 257.012,307.163\"\n      android:fillColor=\"#0A2A40\"\n      android:fillType=\"evenOdd\"/>\n  <path\n      android:pathData=\"M98.121,45.613C98.618,47.203 99.435,48.999 99.748,50.844 97.278,54.76 93.891,60.753 91.607,64.379 89.093,59.05 88.586,56.191 87.689,52.611 86.555,48.09 84.767,42.678 90.273,40.232 95.416,37.946 96.907,41.726 98.121,45.613M84.801,81.542C84.223,87.573 86.807,96.011 75.455,93.831 73.868,93.597 72.797,92.772 72.418,91.162 68.931,83.218 68.641,77.04 80.047,77.32 83.953,76.108 84.949,78.18 84.801,81.542\"\n      android:fillColor=\"#163D59\"\n      android:fillType=\"evenOdd\"/>\n  <path\n      android:pathData=\"M84.801,81.542C83.216,80.135 81.631,78.727 80.047,77.32 79.567,70.3 81.042,65.457 90.285,66.685 96.371,73.956 96.406,81.424 84.801,81.542M72.418,91.161C73.43,92.051 74.442,92.941 75.455,93.831 76.126,95.499 76.796,97.167 77.467,98.835 74.764,111.413 68.237,103.797 66.406,100.237 63.543,94.67 64.96,90.428 72.418,91.161\"\n      android:fillColor=\"#163D59\"\n      android:fillType=\"evenOdd\"/>\n</vector>\n"
  },
  {
    "path": "app/src/main/res/layout/activity_main.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<layout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\">\n\n    <data>\n\n        <variable\n            name=\"vm\"\n            type=\"cz.covid19cz.erouska.ui.main.MainVM\" />\n    </data>\n\n    <androidx.constraintlayout.widget.ConstraintLayout\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\">\n\n        <androidx.appcompat.widget.Toolbar\n            android:id=\"@+id/toolbar\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"wrap_content\"\n            android:background=\"@color/toolbarColor\"\n            app:layout_constraintTop_toTopOf=\"parent\" >\n\n            <include\n                layout=\"@layout/search_toolbar\"/>\n\n        </androidx.appcompat.widget.Toolbar>\n\n\n        <fragment\n            android:id=\"@+id/nav_host_fragment\"\n            android:name=\"androidx.navigation.fragment.NavHostFragment\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"0dp\"\n            app:defaultNavHost=\"true\"\n            app:layout_constraintBottom_toTopOf=\"@+id/bottom_navigation\"\n            app:layout_constraintEnd_toEndOf=\"parent\"\n            app:layout_constraintStart_toStartOf=\"parent\"\n            app:layout_constraintTop_toBottomOf=\"@id/toolbar\"\n             />\n\n        <com.google.android.material.bottomnavigation.BottomNavigationView\n            android:id=\"@+id/bottom_navigation\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"wrap_content\"\n            app:layout_constraintBottom_toBottomOf=\"parent\"\n            app:layout_constraintEnd_toEndOf=\"parent\"\n            app:menu=\"@menu/bottom_nav\"\n            app:labelVisibilityMode=\"labeled\"\n            app:layout_constraintTop_toBottomOf=\"@+id/nav_host_fragment\"\n            app:layout_constraintStart_toStartOf=\"parent\" />\n    </androidx.constraintlayout.widget.ConstraintLayout>\n</layout>\n"
  },
  {
    "path": "app/src/main/res/layout/activity_ragnarok.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<layout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\">\n\n    <data>\n\n        <variable\n            name=\"vm\"\n            type=\"cz.covid19cz.erouska.ui.ragnarok.RagnarokVM\" />\n    </data>\n\n        <androidx.constraintlayout.widget.ConstraintLayout\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"match_parent\">\n\n            <ImageView\n                android:id=\"@+id/imageIcon\"\n                android:layout_width=\"120dp\"\n                android:layout_height=\"120dp\"\n                android:src=\"@drawable/ic_ragnarok\"\n                android:layout_marginTop=\"64dp\"\n                app:layout_constraintBottom_toTopOf=\"@id/textHeadline\"\n                app:layout_constraintEnd_toEndOf=\"parent\"\n                app:layout_constraintStart_toStartOf=\"parent\"\n                app:layout_constraintTop_toTopOf=\"parent\"\n                app:layout_constraintVertical_chainStyle=\"packed\" />\n\n            <TextView\n                android:id=\"@+id/textHeadline\"\n                android:layout_width=\"0dp\"\n                android:layout_height=\"wrap_content\"\n                android:layout_marginTop=\"16dp\"\n                android:gravity=\"center\"\n                android:text=\"@{vm.headline}\"\n                android:textAppearance=\"@style/Erouska.Body\"\n                android:textStyle=\"bold\"\n                android:layout_marginStart=\"@dimen/fragment_padding\"\n                android:layout_marginEnd=\"@dimen/fragment_padding\"\n                app:layout_constraintBottom_toTopOf=\"@id/scrollViewBody\"\n                app:layout_constraintEnd_toEndOf=\"parent\"\n                app:layout_constraintStart_toStartOf=\"parent\"\n                app:layout_constraintTop_toBottomOf=\"@id/imageIcon\" />\n\n            <ScrollView\n                android:id=\"@+id/scrollViewBody\"\n                android:layout_width=\"match_parent\"\n                android:layout_height=\"0dp\"\n                app:layout_constraintBottom_toTopOf=\"@+id/buttonMoreInfo\"\n                app:layout_constraintEnd_toEndOf=\"parent\"\n                app:layout_constraintStart_toStartOf=\"parent\"\n                app:layout_constraintTop_toBottomOf=\"@+id/textHeadline\">\n\n                <TextView\n                    android:id=\"@+id/textBody\"\n                    android:layout_width=\"match_parent\"\n                    android:layout_height=\"wrap_content\"\n                    android:layout_marginStart=\"@dimen/fragment_padding\"\n                    android:layout_marginTop=\"16dp\"\n                    android:layout_marginEnd=\"@dimen/fragment_padding\"\n                    android:gravity=\"center\"\n                    android:text=\"@{vm.body}\"\n                    android:textAppearance=\"@style/Erouska.Body\" />\n\n            </ScrollView>\n            <com.google.android.material.button.MaterialButton\n                android:id=\"@+id/buttonMoreInfo\"\n                style=\"@style/DashButton\"\n                android:layout_width=\"wrap_content\"\n                android:layout_height=\"wrap_content\"\n                android:layout_marginTop=\"16dp\"\n                android:layout_marginBottom=\"64dp\"\n                android:onClick=\"@{() -> vm.showMoreInfo()}\"\n                android:text=\"@string/ragnarok_more_info\"\n                app:layout_constraintBottom_toBottomOf=\"parent\"\n                app:layout_constraintEnd_toEndOf=\"parent\"\n                app:layout_constraintStart_toStartOf=\"parent\"\n                app:layout_constraintVertical_chainStyle=\"packed\" />\n\n        </androidx.constraintlayout.widget.ConstraintLayout>\n</layout>"
  },
  {
    "path": "app/src/main/res/layout/dashboard_card_view.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<layout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    xmlns:tools=\"http://schemas.android.com/tools\">\n\n    <androidx.constraintlayout.widget.ConstraintLayout\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        >\n\n        <com.google.android.material.card.MaterialCardView\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"wrap_content\"\n            android:layout_margin=\"8dp\"\n            app:cardElevation=\"4dp\"\n            app:layout_constraintBottom_toBottomOf=\"parent\"\n            app:layout_constraintEnd_toEndOf=\"parent\"\n            app:layout_constraintStart_toStartOf=\"parent\"\n            app:layout_constraintTop_toTopOf=\"parent\"\n            >\n\n            <androidx.constraintlayout.widget.ConstraintLayout\n                android:id=\"@+id/content_container\"\n                android:layout_width=\"match_parent\"\n                android:background=\"?selectableItemBackground\"\n                android:focusable=\"false\"\n                android:clickable=\"false\"\n                android:layout_height=\"wrap_content\"\n                android:padding=\"@dimen/fragment_padding\">\n\n                <TextView\n                    android:id=\"@+id/title_text\"\n                    android:layout_width=\"0dp\"\n                    android:layout_height=\"wrap_content\"\n                    android:drawablePadding=\"16dp\"\n                    android:gravity=\"center_vertical|start\"\n                    tools:text=\"eRouška je aktivní\"\n                    android:textAppearance=\"@style/Erouska.Title\"\n                    app:layout_constraintEnd_toEndOf=\"parent\"\n                    app:layout_constraintStart_toStartOf=\"parent\"\n                    app:layout_constraintTop_toTopOf=\"parent\"\n                    app:drawableStartCompat=\"@drawable/ic_help\"\n                    app:drawableEndCompat=\"@drawable/ic_arrow_right\" />\n\n                <TextView\n                    android:id=\"@+id/subtitle_text\"\n                    android:layout_width=\"0dp\"\n                    android:layout_height=\"wrap_content\"\n                    android:layout_marginTop=\"12dp\"\n                    android:gravity=\"center_vertical|start\"\n                    tools:text=\"Aplikace aktuálně pracuje na pozadí a monitoruje okolí. Nechte zapnuté Bluetooth a s telefonem pracujte jako obvykle.\"\n                    android:textAppearance=\"@style/Erouska.Caption\"\n                    app:layout_constraintEnd_toEndOf=\"parent\"\n                    app:layout_constraintStart_toStartOf=\"parent\"\n                    app:layout_constraintTop_toBottomOf=\"@id/title_text\" />\n\n                <com.google.android.material.button.MaterialButton\n                    android:id=\"@+id/button\"\n                    style=\"@style/Widget.MaterialComponents.Button.TextButton\"\n                    android:layout_width=\"wrap_content\"\n                    android:layout_height=\"wrap_content\"\n                    android:layout_marginTop=\"8dp\"\n                    tools:text=\"Pozastavit\"\n                    android:visibility=\"gone\"\n                    tools:visibility=\"visible\"\n                    android:background=\"@null\"\n                    app:rippleColor=\"@android:color/transparent\"\n                    android:clickable=\"false\"\n                    android:focusable=\"false\"\n                    android:minWidth=\"44dp\"\n                    android:minHeight=\"40dp\"\n                    android:paddingStart=\"0dp\"\n                    android:paddingEnd=\"0dp\"\n                    app:layout_constraintStart_toStartOf=\"parent\"\n                    app:layout_constraintTop_toBottomOf=\"@id/subtitle_text\" />\n\n            </androidx.constraintlayout.widget.ConstraintLayout>\n        </com.google.android.material.card.MaterialCardView>\n    </androidx.constraintlayout.widget.ConstraintLayout>\n</layout>"
  },
  {
    "path": "app/src/main/res/layout/fragment_about.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<layout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    xmlns:tools=\"http://schemas.android.com/tools\">\n\n    <data>\n        <import type=\"cz.covid19cz.erouska.BuildConfig\" />\n\n        <variable\n            name=\"vm\"\n            type=\"cz.covid19cz.erouska.ui.about.AboutVM\" />\n    </data>\n\n    <ScrollView\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\"\n        android:fillViewport=\"true\">\n\n        <androidx.constraintlayout.widget.ConstraintLayout\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"wrap_content\"\n            android:padding=\"@dimen/fragment_padding\">\n\n            <TextView\n                android:id=\"@+id/about_content\"\n                android:layout_width=\"match_parent\"\n                android:layout_height=\"wrap_content\"\n                android:text=\"@string/about_content\"\n                android:textAppearance=\"@style/Erouska.Body\"\n                app:layout_constraintEnd_toEndOf=\"parent\"\n                app:layout_constraintStart_toStartOf=\"parent\"\n                app:layout_constraintTop_toTopOf=\"parent\" />\n\n            <TextView\n                android:id=\"@+id/about_tos_content\"\n                android:layout_width=\"match_parent\"\n                android:layout_height=\"wrap_content\"\n                android:layout_marginTop=\"16dp\"\n                android:onClick=\"@{ () -> vm.tosLinkClicked() }\"\n                android:textAppearance=\"@style/Erouska.Body\"\n                app:layout_constraintEnd_toEndOf=\"parent\"\n                app:layout_constraintStart_toStartOf=\"parent\"\n                app:layout_constraintTop_toBottomOf=\"@id/about_content\" />\n\n            <TextView\n                android:id=\"@+id/about_version\"\n                android:layout_width=\"wrap_content\"\n                android:layout_height=\"wrap_content\"\n                android:clickable=\"true\"\n                android:text=\"@{BuildConfig.VERSION_NAME}\"\n                android:textColor=\"#aaa\"\n                app:layout_constraintBottom_toBottomOf=\"parent\"\n                app:layout_constraintEnd_toEndOf=\"parent\"\n                tools:text=\"2.0\" />\n\n        </androidx.constraintlayout.widget.ConstraintLayout>\n    </ScrollView>\n</layout>"
  },
  {
    "path": "app/src/main/res/layout/fragment_activation.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<layout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    xmlns:tools=\"http://schemas.android.com/tools\">\n\n    <data>\n\n        <variable\n            name=\"vm\"\n            type=\"cz.covid19cz.erouska.ui.activation.ActivationVM\" />\n\n        <variable\n            name=\"checkboxToggle\"\n            type=\"Boolean\" />\n    </data>\n\n    <androidx.constraintlayout.widget.ConstraintLayout\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\">\n\n        <ScrollView\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"0dp\"\n            android:fillViewport=\"true\"\n            app:layout_constraintBottom_toBottomOf=\"parent\"\n            app:layout_constraintTop_toTopOf=\"parent\">\n\n            <androidx.constraintlayout.widget.ConstraintLayout\n                android:layout_width=\"match_parent\"\n                android:layout_height=\"wrap_content\"\n                android:padding=\"@dimen/fragment_padding\">\n\n                <ImageView\n                    android:id=\"@+id/img_privacy\"\n                    android:layout_width=\"wrap_content\"\n                    android:layout_height=\"wrap_content\"\n                    android:src=\"@drawable/ic_privacy\"\n                    app:layout_constraintEnd_toEndOf=\"parent\"\n                    app:layout_constraintStart_toStartOf=\"parent\"\n                    app:layout_constraintTop_toTopOf=\"parent\" />\n\n                <TextView\n                    android:id=\"@+id/privacy_header\"\n                    android:layout_width=\"0dp\"\n                    android:layout_height=\"wrap_content\"\n                    android:layout_marginTop=\"16dp\"\n                    android:text=\"@string/privacy_header_text\"\n                    android:textAppearance=\"@style/Erouska.Title\"\n                    app:layout_constraintEnd_toEndOf=\"parent\"\n                    app:layout_constraintStart_toStartOf=\"parent\"\n                    app:layout_constraintTop_toBottomOf=\"@id/img_privacy\" />\n\n                <TextView\n                    android:id=\"@+id/privacy_body_1\"\n                    android:layout_width=\"0dp\"\n                    android:layout_height=\"wrap_content\"\n                    android:layout_marginTop=\"8dp\"\n                    android:text=\"@string/privacy_body_text_1\"\n                    android:textAppearance=\"@style/Erouska.Body\"\n                    app:layout_constraintEnd_toEndOf=\"parent\"\n                    app:layout_constraintStart_toStartOf=\"parent\"\n                    app:layout_constraintTop_toBottomOf=\"@id/privacy_header\" />\n\n                <TextView\n                    android:id=\"@+id/privacy_body_2\"\n                    android:layout_width=\"0dp\"\n                    android:layout_height=\"wrap_content\"\n                    android:layout_marginTop=\"8dp\"\n                    android:paddingBottom=\"68dp\"\n                    android:textAppearance=\"@style/Erouska.Body\"\n                    app:layout_constraintEnd_toEndOf=\"parent\"\n                    app:layout_constraintStart_toStartOf=\"parent\"\n                    app:layout_constraintTop_toBottomOf=\"@id/privacy_body_1\"\n                    tools:text=\"@string/privacy_body_text_2\" />\n\n                <ImageView\n                    android:id=\"@+id/img_error\"\n                    android:layout_width=\"wrap_content\"\n                    android:layout_height=\"wrap_content\"\n                    android:src=\"@drawable/ic_error\"\n                    app:layout_constraintEnd_toEndOf=\"parent\"\n                    app:layout_constraintStart_toStartOf=\"parent\"\n                    app:layout_constraintTop_toTopOf=\"parent\" />\n\n                <TextView\n                    android:id=\"@+id/error_header\"\n                    android:layout_width=\"wrap_content\"\n                    android:layout_height=\"wrap_content\"\n                    android:layout_marginTop=\"16dp\"\n                    android:text=\"@string/activation_error_header\"\n                    android:textAppearance=\"@style/Erouska.Title.Error\"\n                    app:layout_constraintEnd_toEndOf=\"parent\"\n                    app:layout_constraintStart_toStartOf=\"parent\"\n                    app:layout_constraintTop_toBottomOf=\"@id/img_error\" />\n\n                <TextView\n                    android:id=\"@+id/error_body\"\n                    android:layout_width=\"wrap_content\"\n                    android:layout_height=\"wrap_content\"\n                    android:layout_marginTop=\"16dp\"\n                    tools:text=\"@string/send_data_failure_body\"\n                    android:textAlignment=\"center\"\n                    android:textAppearance=\"@style/Erouska.Body\"\n                    app:layout_constraintEnd_toEndOf=\"parent\"\n                    app:layout_constraintStart_toStartOf=\"parent\"\n                    app:layout_constraintTop_toBottomOf=\"@id/error_header\" />\n\n                <com.google.android.material.button.MaterialButton\n                    android:id=\"@+id/email_button\"\n                    android:layout_width=\"wrap_content\"\n                    android:layout_height=\"wrap_content\"\n                    android:layout_marginTop=\"24dp\"\n                    android:text=\"@string/support_request_button\"\n                    app:layout_constraintEnd_toEndOf=\"parent\"\n                    app:layout_constraintStart_toStartOf=\"parent\"\n                    app:layout_constraintTop_toBottomOf=\"@id/error_body\" />\n\n                <ProgressBar\n                    android:id=\"@+id/login_progress\"\n                    android:layout_width=\"wrap_content\"\n                    android:layout_height=\"wrap_content\"\n                    android:visibility=\"gone\"\n                    app:layout_constraintBottom_toBottomOf=\"parent\"\n                    app:layout_constraintLeft_toLeftOf=\"parent\"\n                    app:layout_constraintRight_toRightOf=\"parent\"\n                    app:layout_constraintTop_toTopOf=\"parent\" />\n\n                <androidx.constraintlayout.widget.Group\n                    android:id=\"@+id/error_group\"\n                    android:layout_width=\"wrap_content\"\n                    android:layout_height=\"wrap_content\"\n                    android:visibility=\"gone\"\n                    app:constraint_referenced_ids=\"img_error,error_header,error_body,email_button\" />\n\n                <androidx.constraintlayout.widget.Group\n                    android:id=\"@+id/privacy_group\"\n                    android:layout_width=\"wrap_content\"\n                    android:layout_height=\"wrap_content\"\n                    android:visibility=\"visible\"\n                    app:constraint_referenced_ids=\"img_privacy,privacy_header,privacy_body_1,privacy_body_2\" />\n\n            </androidx.constraintlayout.widget.ConstraintLayout>\n        </ScrollView>\n\n        <com.google.android.material.button.MaterialButton\n            android:id=\"@+id/activate_btn\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:layout_marginTop=\"16dp\"\n            android:layout_marginBottom=\"16dp\"\n            android:text=\"@string/privacy_finish\"\n            app:layout_constraintBottom_toBottomOf=\"parent\"\n            app:layout_constraintEnd_toEndOf=\"parent\"\n            app:layout_constraintStart_toStartOf=\"parent\" />\n\n    </androidx.constraintlayout.widget.ConstraintLayout>\n</layout>"
  },
  {
    "path": "app/src/main/res/layout/fragment_activation_notifications.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<layout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\">\n\n    <data>\n\n        <variable\n            name=\"vm\"\n            type=\"cz.covid19cz.erouska.ui.activation.ActivationNotificationsVM\" />\n    </data>\n\n\n    <androidx.constraintlayout.widget.ConstraintLayout\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\">\n\n        <ScrollView\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"0dp\"\n            android:fillViewport=\"true\"\n            app:layout_constraintBottom_toBottomOf=\"parent\"\n            app:layout_constraintTop_toTopOf=\"parent\">\n\n            <androidx.constraintlayout.widget.ConstraintLayout\n                android:layout_width=\"match_parent\"\n                android:layout_height=\"wrap_content\"\n                android:padding=\"@dimen/fragment_padding\">\n\n                <ImageView\n                    android:id=\"@+id/notifications_img\"\n                    android:layout_width=\"wrap_content\"\n                    android:layout_height=\"wrap_content\"\n                    android:src=\"@drawable/ic_bluetooth_onboard\"\n                    app:layout_constraintEnd_toEndOf=\"parent\"\n                    app:layout_constraintStart_toStartOf=\"parent\"\n                    app:layout_constraintTop_toTopOf=\"parent\" />\n\n                <TextView\n                    android:id=\"@+id/notifications_title\"\n                    android:layout_width=\"wrap_content\"\n                    android:layout_height=\"wrap_content\"\n                    android:layout_marginTop=\"16dp\"\n                    android:text=\"@string/activation_notifications_header\"\n                    android:textAppearance=\"@style/Erouska.Title\"\n                    app:layout_constraintEnd_toEndOf=\"parent\"\n                    app:layout_constraintStart_toStartOf=\"parent\"\n                    app:layout_constraintTop_toBottomOf=\"@id/notifications_img\" />\n\n                <TextView\n                    android:id=\"@+id/notifications_body_1\"\n                    android:layout_width=\"wrap_content\"\n                    android:layout_height=\"wrap_content\"\n                    android:layout_marginTop=\"8dp\"\n                    android:text=\"@string/activation_notifications_body_1\"\n                    android:textAppearance=\"@style/Erouska.Body\"\n                    app:layout_constraintEnd_toEndOf=\"parent\"\n                    app:layout_constraintStart_toStartOf=\"parent\"\n                    app:layout_constraintTop_toBottomOf=\"@id/notifications_title\" />\n\n                <TextView\n                    android:id=\"@+id/notifications_body_2\"\n                    android:layout_width=\"wrap_content\"\n                    android:layout_height=\"wrap_content\"\n                    android:layout_marginTop=\"8dp\"\n                    android:paddingBottom=\"68dp\"\n                    android:text=\"@string/activation_notifications_body_2\"\n                    android:textAppearance=\"@style/Erouska.Body\"\n                    app:layout_constraintEnd_toEndOf=\"parent\"\n                    app:layout_constraintStart_toStartOf=\"parent\"\n                    app:layout_constraintTop_toBottomOf=\"@id/notifications_body_1\" />\n\n            </androidx.constraintlayout.widget.ConstraintLayout>\n\n        </ScrollView>\n\n        <com.google.android.material.button.MaterialButton\n            android:id=\"@+id/enable_btn\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:layout_marginTop=\"16dp\"\n            android:layout_marginBottom=\"16dp\"\n            android:onClick=\"@{ () -> vm.enableNotifications() }\"\n            android:text=\"@string/enable\"\n            app:layout_constraintBottom_toBottomOf=\"parent\"\n            app:layout_constraintEnd_toEndOf=\"parent\"\n            app:layout_constraintStart_toStartOf=\"parent\" />\n\n    </androidx.constraintlayout.widget.ConstraintLayout>\n\n</layout>"
  },
  {
    "path": "app/src/main/res/layout/fragment_contacts.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<layout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    xmlns:tools=\"http://schemas.android.com/tools\">\n\n    <data>\n\n        <variable\n            name=\"vm\"\n            type=\"cz.covid19cz.erouska.ui.contacts.ContactsVM\" />\n    </data>\n\n    <androidx.constraintlayout.widget.ConstraintLayout\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\">\n\n        <androidx.recyclerview.widget.RecyclerView\n            android:id=\"@+id/contacts_list\"\n            android:layout_width=\"0dp\"\n            android:layout_height=\"match_parent\"\n            app:items=\"@{ vm.items }\"\n            app:layoutId=\"@{ @layout/item_contacts }\"\n            app:layoutManager=\"androidx.recyclerview.widget.LinearLayoutManager\"\n            app:layout_constraintBottom_toBottomOf=\"parent\"\n            app:layout_constraintEnd_toEndOf=\"parent\"\n            app:layout_constraintStart_toStartOf=\"parent\"\n            tools:listitem=\"@layout/item_contacts\"\n            app:layout_constraintTop_toTopOf=\"parent\"\n            app:viewModel=\"@{ vm }\" />\n\n    </androidx.constraintlayout.widget.ConstraintLayout>\n\n</layout>"
  },
  {
    "path": "app/src/main/res/layout/fragment_dashboard_plus.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<layout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    xmlns:tools=\"http://schemas.android.com/tools\">\n\n    <data>\n\n        <import type=\"cz.covid19cz.erouska.BuildConfig\" />\n\n        <variable\n            name=\"vm\"\n            type=\"cz.covid19cz.erouska.ui.dashboard.DashboardVM\" />\n    </data>\n\n    <androidx.constraintlayout.widget.ConstraintLayout\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\">\n\n        <LinearLayout\n            android:id=\"@+id/notifications_container\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"wrap_content\"\n            android:background=\"@color/white\"\n            android:elevation=\"16dp\"\n            android:orientation=\"vertical\"\n            app:layout_constraintEnd_toEndOf=\"parent\"\n            app:layout_constraintStart_toStartOf=\"parent\"\n            app:layout_constraintTop_toTopOf=\"parent\">\n\n            <androidx.constraintlayout.widget.ConstraintLayout\n                android:id=\"@+id/data_notification_container\"\n                android:layout_width=\"match_parent\"\n                android:layout_height=\"wrap_content\"\n                android:background=\"@color/background\"\n                android:paddingStart=\"16dp\"\n                android:paddingTop=\"20dp\"\n                android:paddingEnd=\"16dp\"\n                android:paddingBottom=\"8dp\"\n                android:visibility=\"gone\"\n                tools:visibility=\"gone\">\n\n                <TextView\n                    android:id=\"@+id/data_notification_content\"\n                    android:layout_width=\"0dp\"\n                    android:layout_height=\"wrap_content\"\n                    android:layout_marginBottom=\"4dp\"\n                    android:textAppearance=\"@style/TextAppearance.MaterialComponents.Body1\"\n                    app:layout_constraintEnd_toEndOf=\"parent\"\n                    app:layout_constraintStart_toStartOf=\"parent\"\n                    app:layout_constraintTop_toTopOf=\"parent\"\n                    tools:text=\"It's been some time since your eRouška updated its data with risky encounters. Connect to the internet.\" />\n\n                <com.google.android.material.button.MaterialButton\n                    android:id=\"@+id/data_notification_close\"\n                    style=\"@style/Widget.MaterialComponents.Button.TextButton\"\n                    android:layout_width=\"wrap_content\"\n                    android:layout_height=\"wrap_content\"\n                    android:text=\"@string/data_notification_close\"\n                    android:textColor=\"@color/colorPrimary\"\n                    app:layout_constraintBottom_toBottomOf=\"parent\"\n                    app:layout_constraintEnd_toEndOf=\"parent\"\n                    app:layout_constraintTop_toBottomOf=\"@id/data_notification_content\" />\n\n            </androidx.constraintlayout.widget.ConstraintLayout>\n\n            <androidx.constraintlayout.widget.ConstraintLayout\n                android:id=\"@+id/how_it_works_container\"\n                android:layout_width=\"match_parent\"\n                android:layout_height=\"wrap_content\"\n                android:background=\"@color/background\"\n                android:paddingStart=\"16dp\"\n                android:paddingTop=\"20dp\"\n                android:paddingEnd=\"16dp\"\n                android:paddingBottom=\"8dp\"\n                android:visibility=\"gone\"\n                tools:visibility=\"visible\">\n\n                <TextView\n                    android:id=\"@+id/how_it_works_content\"\n                    android:layout_width=\"0dp\"\n                    android:layout_height=\"wrap_content\"\n                    android:drawablePadding=\"8dp\"\n                    android:gravity=\"center_vertical\"\n                    android:text=\"@string/how_it_works_content\"\n                    android:textAppearance=\"@style/Erouska.Body\"\n                    app:drawableStartCompat=\"@drawable/ic_how_it_works_banner\"\n                    app:layout_constraintEnd_toEndOf=\"parent\"\n                    app:layout_constraintStart_toStartOf=\"parent\"\n                    app:layout_constraintTop_toTopOf=\"parent\"\n                    />\n\n                <com.google.android.material.button.MaterialButton\n                    android:id=\"@+id/how_it_works_more\"\n                    style=\"@style/Widget.MaterialComponents.Button.TextButton\"\n                    android:layout_width=\"wrap_content\"\n                    android:layout_height=\"wrap_content\"\n                    android:text=\"@string/how_it_works_more\"\n                    android:textColor=\"@color/colorPrimary\"\n                    app:layout_constraintBottom_toBottomOf=\"parent\"\n                    app:layout_constraintEnd_toEndOf=\"parent\"\n                    app:layout_constraintTop_toBottomOf=\"@id/how_it_works_content\" />\n\n                <com.google.android.material.button.MaterialButton\n                    android:id=\"@+id/how_it_works_close\"\n                    style=\"@style/Widget.MaterialComponents.Button.TextButton\"\n                    android:layout_width=\"wrap_content\"\n                    android:layout_height=\"wrap_content\"\n                    android:text=\"@string/how_it_works_close\"\n                    android:textColor=\"@color/colorPrimary\"\n                    app:layout_constraintBottom_toBottomOf=\"parent\"\n                    app:layout_constraintEnd_toStartOf=\"@id/how_it_works_more\"\n                    app:layout_constraintTop_toBottomOf=\"@id/how_it_works_content\" />\n\n            </androidx.constraintlayout.widget.ConstraintLayout>\n\n            <androidx.constraintlayout.widget.ConstraintLayout\n                android:id=\"@+id/exposure_notification_container\"\n                android:layout_width=\"match_parent\"\n                android:layout_height=\"wrap_content\"\n                android:background=\"@color/exposure_notification_red\"\n                android:paddingStart=\"16dp\"\n                android:paddingTop=\"20dp\"\n                android:paddingEnd=\"16dp\"\n                android:paddingBottom=\"8dp\"\n                android:visibility=\"gone\"\n                tools:visibility=\"gone\">\n\n                <TextView\n                    android:id=\"@+id/exposure_notification_content\"\n                    android:layout_width=\"0dp\"\n                    android:layout_height=\"wrap_content\"\n                    android:textAppearance=\"@style/TextAppearance.MaterialComponents.Body1\"\n                    android:textColor=\"@color/white\"\n                    app:layout_constraintEnd_toEndOf=\"parent\"\n                    app:layout_constraintStart_toStartOf=\"parent\"\n                    app:layout_constraintTop_toTopOf=\"parent\"\n                    tools:text=\"@tools:sample/lorem\" />\n\n                <com.google.android.material.button.MaterialButton\n                    android:id=\"@+id/exposure_notification_more_info\"\n                    style=\"@style/Widget.MaterialComponents.Button.TextButton\"\n                    android:layout_width=\"wrap_content\"\n                    android:layout_height=\"wrap_content\"\n                    android:text=\"@string/exposure_notification_more_info\"\n                    android:textColor=\"@color/white\"\n                    app:layout_constraintEnd_toEndOf=\"parent\"\n                    app:layout_constraintTop_toBottomOf=\"@+id/exposure_notification_content\" />\n\n                <com.google.android.material.button.MaterialButton\n                    android:id=\"@+id/exposure_notification_close\"\n                    style=\"@style/Widget.MaterialComponents.Button.TextButton\"\n                    android:layout_width=\"wrap_content\"\n                    android:layout_height=\"wrap_content\"\n                    android:text=\"@string/exposure_notification_close\"\n                    android:textColor=\"@color/white\"\n                    app:layout_constraintBottom_toBottomOf=\"@id/exposure_notification_more_info\"\n                    app:layout_constraintEnd_toStartOf=\"@id/exposure_notification_more_info\"\n                    app:layout_constraintTop_toTopOf=\"@id/exposure_notification_more_info\" />\n\n            </androidx.constraintlayout.widget.ConstraintLayout>\n        </LinearLayout>\n\n        <ScrollView\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"0dp\"\n            android:fillViewport=\"true\"\n            app:layout_constraintBottom_toBottomOf=\"parent\"\n            app:layout_constraintTop_toBottomOf=\"@+id/notifications_container\">\n\n            <androidx.constraintlayout.widget.ConstraintLayout\n                android:layout_width=\"match_parent\"\n                android:layout_height=\"wrap_content\"\n                android:padding=\"8dp\">\n\n                <cz.covid19cz.erouska.ui.dashboard.DashboardCardView\n                    android:id=\"@+id/dash_bluetooth_off\"\n                    android:layout_width=\"0dp\"\n                    android:layout_height=\"wrap_content\"\n                    app:card_actionable_button=\"@{true}\"\n                    app:card_show_right_arrow=\"@{false}\"\n                    app:card_alert=\"@{true}\"\n                    app:card_button_text=\"@{@string/enable_bluetooth_button}\"\n                    app:card_has_content=\"@{true}\"\n                    app:card_icon=\"@{@drawable/ic_off_bluetooth}\"\n                    app:card_subtitle=\"@{@string/bt_disabled_desc}\"\n                    app:card_title=\"@{@string/bt_disabled_title}\"\n                    app:layout_constraintEnd_toEndOf=\"parent\"\n                    app:layout_constraintStart_toStartOf=\"parent\"\n                    app:layout_constraintTop_toTopOf=\"parent\"\n                    android:visibility=\"gone\"\n                    tools:visibility=\"visible\"/>\n\n                <cz.covid19cz.erouska.ui.dashboard.DashboardCardView\n                    android:id=\"@+id/dash_location_off\"\n                    android:layout_width=\"0dp\"\n                    android:layout_height=\"wrap_content\"\n                    app:card_actionable_button=\"@{true}\"\n                    app:card_show_right_arrow=\"@{false}\"\n                    app:card_alert=\"@{true}\"\n                    app:card_button_text=\"@{@string/location_off_turn_on}\"\n                    app:card_has_content=\"@{true}\"\n                    app:card_icon=\"@{@drawable/ic_off_location}\"\n                    app:card_subtitle=\"@{@string/location_off_body}\"\n                    app:card_title=\"@{@string/location_off_header}\"\n                    app:layout_constraintEnd_toEndOf=\"parent\"\n                    app:layout_constraintStart_toStartOf=\"parent\"\n                    app:layout_constraintTop_toBottomOf=\"@id/dash_bluetooth_off\"\n                    android:visibility=\"gone\"\n                    tools:visibility=\"visible\"/>\n\n                <cz.covid19cz.erouska.ui.dashboard.DashboardCardView\n                    android:id=\"@+id/dash_card_active\"\n                    android:layout_width=\"0dp\"\n                    android:layout_height=\"wrap_content\"\n                    app:card_actionable_button=\"@{true}\"\n                    app:card_show_right_arrow=\"@{false}\"\n                    app:card_button_text=\"@{@string/pause_app}\"\n                    app:card_icon=\"@{@drawable/ic_active}\"\n                    app:card_subtitle=\"@{@string/dashboard_body}\"\n                    app:card_title=\"@{@string/dashboard_title_running}\"\n                    app:layout_constraintEnd_toEndOf=\"parent\"\n                    app:layout_constraintStart_toStartOf=\"parent\"\n                    app:layout_constraintTop_toBottomOf=\"@id/dash_location_off\"\n                    android:visibility=\"gone\"/>\n\n                <cz.covid19cz.erouska.ui.dashboard.DashboardCardView\n                    android:id=\"@+id/dash_card_inactive\"\n                    android:layout_width=\"0dp\"\n                    android:layout_height=\"wrap_content\"\n                    app:card_actionable_button=\"@{true}\"\n                    app:card_show_right_arrow=\"@{false}\"\n                    app:card_button_text=\"@{@string/start_app}\"\n                    app:card_icon=\"@{@drawable/ic_pause}\"\n                    app:card_subtitle=\"@{@string/dashboard_body_paused}\"\n                    app:card_title=\"@{@string/dashboard_title_paused}\"\n                    app:layout_constraintEnd_toEndOf=\"parent\"\n                    app:layout_constraintStart_toStartOf=\"parent\"\n                    app:layout_constraintTop_toBottomOf=\"@id/dash_card_active\"\n                    android:visibility=\"gone\" />\n\n                <cz.covid19cz.erouska.ui.dashboard.DashboardCardView\n                    android:id=\"@+id/dash_card_no_risky_encounter\"\n                    android:layout_width=\"0dp\"\n                    android:layout_height=\"wrap_content\"\n                    app:card_actionable_button=\"@{false}\"\n                    app:card_show_right_arrow=\"@{true}\"\n                    app:card_icon=\"@{@drawable/ic_no_risky_encounter}\"\n                    app:layout_constraintEnd_toEndOf=\"parent\"\n                    app:layout_constraintStart_toStartOf=\"parent\"\n                    app:layout_constraintTop_toBottomOf=\"@id/dash_card_inactive\"\n                    android:visibility=\"gone\"\n                    tools:visibility=\"visible\"\n                    />\n\n                <cz.covid19cz.erouska.ui.dashboard.DashboardCardView\n                    android:id=\"@+id/dash_card_risky_encounter\"\n                    android:layout_width=\"0dp\"\n                    android:layout_height=\"wrap_content\"\n                    app:card_actionable_button=\"@{false}\"\n                    app:card_show_right_arrow=\"@{true}\"\n                    app:card_alert=\"@{true}\"\n                    app:card_icon=\"@{@drawable/ic_risky_encounter}\"\n                    app:card_title=\"@{@plurals/dashboard_risky_encounter_title_bad(vm.exposuresCount, vm.exposuresCount)}\"\n                    app:layout_constraintEnd_toEndOf=\"parent\"\n                    app:layout_constraintStart_toStartOf=\"parent\"\n                    app:layout_constraintTop_toBottomOf=\"@id/dash_card_no_risky_encounter\"\n                    android:visibility=\"gone\"\n                    tools:visibility=\"visible\"\n                    />\n\n                <cz.covid19cz.erouska.ui.dashboard.DashboardCardView\n                    android:id=\"@+id/dash_card_positive_test\"\n                    android:layout_width=\"0dp\"\n                    android:layout_height=\"wrap_content\"\n                    app:card_actionable_button=\"@{true}\"\n                    app:card_show_right_arrow=\"@{false}\"\n                    app:card_alert=\"@{false}\"\n                    app:card_button_text=\"@{@string/dashboard_positive_test_button}\"\n                    app:card_has_content=\"@{true}\"\n                    app:card_icon=\"@{@drawable/ic_positive}\"\n                    app:card_on_content_click=\"@{() -> vm.sendData()}\"\n                    app:card_title=\"@{@string/dashboard_positive_test_title}\"\n                    app:card_subtitle=\"@{@string/dashboard_positive_test_subtitle}\"\n                    app:layout_constraintEnd_toEndOf=\"parent\"\n                    app:layout_constraintStart_toStartOf=\"parent\"\n                    app:layout_constraintTop_toBottomOf=\"@id/dash_card_risky_encounter\"\n                    />\n\n                <cz.covid19cz.erouska.ui.dashboard.TravellerDashboardCardView\n                    android:id=\"@+id/dash_travel\"\n                    android:layout_width=\"0dp\"\n                    android:layout_height=\"wrap_content\"\n                    app:card_actionable_button=\"@{false}\"\n                    app:card_show_right_arrow=\"@{true}\"\n                    app:card_alert=\"@{false}\"\n                    app:card_has_content=\"@{true}\"\n                    app:card_icon=\"@{@drawable/ic_travel}\"\n                    app:card_title=\"@{@string/dashboard_travel_title}\"\n                    app:card_subtitle=\"@{vm.efgsState ? @string/enabled : @string/disable}\"\n                    app:layout_constraintEnd_toEndOf=\"parent\"\n                    app:layout_constraintStart_toStartOf=\"parent\"\n                    app:layout_constraintTop_toBottomOf=\"@id/dash_card_positive_test\"\n                    android:visibility=\"visible\"/>\n            </androidx.constraintlayout.widget.ConstraintLayout>\n        </ScrollView>\n    </androidx.constraintlayout.widget.ConstraintLayout>\n</layout>"
  },
  {
    "path": "app/src/main/res/layout/fragment_efgs.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<layout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    xmlns:tools=\"http://schemas.android.com/tools\">\n\n    <data>\n        <variable\n            name=\"vm\"\n            type=\"cz.covid19cz.erouska.ui.efgs.EfgsVM\" />\n    </data>\n\n    <ScrollView\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\"\n        android:fillViewport=\"true\">\n\n        <androidx.constraintlayout.widget.ConstraintLayout\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"wrap_content\"\n            android:padding=\"@dimen/fragment_padding\">\n\n            <TextView\n                android:id=\"@+id/efgs_title\"\n                android:text=\"@{@string/efgs_visit(vm.efgsDays)}\"\n                android:layout_width=\"0dp\"\n                android:layout_height=\"wrap_content\"\n                android:textAppearance=\"@style/Erouska.Body\"\n                tools:text=\"@tools:sample/lorem\"\n                app:layout_constraintEnd_toEndOf=\"parent\"\n                app:layout_constraintStart_toStartOf=\"parent\"\n                app:layout_constraintTop_toTopOf=\"parent\" />\n\n            <com.google.android.material.switchmaterial.SwitchMaterial\n                android:id=\"@+id/efgs_checkbox\"\n                android:layout_width=\"match_parent\"\n                android:layout_height=\"wrap_content\"\n                android:layout_marginTop=\"16dp\"\n                android:textAppearance=\"@style/Erouska.Body\"\n                android:text=\"@string/efgs_check\"\n                android:checked=\"@={vm.efgsState}\"\n                app:switchPadding=\"40dp\"\n                app:layout_constraintEnd_toEndOf=\"parent\"\n                app:layout_constraintStart_toStartOf=\"parent\"\n                app:layout_constraintTop_toBottomOf=\"@id/efgs_title\"\n                />\n\n            <TextView\n                android:id=\"@+id/efgs_desc\"\n                android:layout_width=\"0dp\"\n                android:layout_height=\"wrap_content\"\n                android:layout_marginTop=\"16dp\"\n                android:text=\"@{@string/efgs_boundaries + `\\n\\n` + vm.efgsSupportedCountries() + `\\n\\n` + @string/efgs_usage(vm.efgsDays)}\"\n                tools:text=\"@tools:sample/lorem\"\n                android:textAppearance=\"@style/Erouska.Caption\"\n                app:layout_constraintEnd_toEndOf=\"parent\"\n                app:layout_constraintStart_toStartOf=\"parent\"\n                app:layout_constraintTop_toBottomOf=\"@id/efgs_checkbox\" />\n\n        </androidx.constraintlayout.widget.ConstraintLayout>\n    </ScrollView>\n</layout>"
  },
  {
    "path": "app/src/main/res/layout/fragment_efgs_agreement.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<layout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    xmlns:tools=\"http://schemas.android.com/tools\">\n\n    <data>\n        <variable\n            name=\"vm\"\n            type=\"cz.covid19cz.erouska.ui.efgsagreement.EfgsAgreementVM\" />\n    </data>\n\n<androidx.constraintlayout.widget.ConstraintLayout\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\"\n    android:padding=\"@dimen/fragment_padding\">\n\n    <TextView\n        android:id=\"@+id/text_traveller_body\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:text=\"@{vm.traveller ? @string/efgs_agreement_traveller_body : @string/efgs_agreement_non_traveller_body}\"\n        tools:text=\"@string/efgs_agreement_traveller_body\"\n        android:textAppearance=\"@style/Erouska.Body\"\n        app:layout_constraintEnd_toEndOf=\"parent\"\n        app:layout_constraintStart_toStartOf=\"parent\"\n        app:layout_constraintTop_toTopOf=\"parent\" />\n\n    <TextView\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:id=\"@+id/text_description\"\n        android:layout_marginTop=\"16dp\"\n        android:textAppearance=\"@style/Erouska.Description\"\n        tools:text=\"@string/efgs_agreement_description\"\n        app:layout_constraintTop_toBottomOf=\"@id/text_traveller_body\"/>\n\n    <com.google.android.material.button.MaterialButton\n        android:id=\"@+id/button_yes\"\n        android:layout_width=\"0dp\"\n        android:layout_height=\"wrap_content\"\n        android:layout_marginTop=\"16dp\"\n        android:onClick=\"@{() -> vm.agree()}\"\n        android:text=\"@string/efgs_agreement_agree\"\n        app:visibleOrInvisible=\"@{!vm.loading}\"\n        app:layout_constraintEnd_toEndOf=\"parent\"\n        app:layout_constraintStart_toStartOf=\"parent\"\n        app:layout_constraintTop_toBottomOf=\"@id/text_description\" />\n\n    <com.google.android.material.button.MaterialButton\n        android:id=\"@+id/button_no\"\n        android:layout_width=\"0dp\"\n        android:layout_height=\"wrap_content\"\n        style=\"@style/OutlinedButton\"\n        android:onClick=\"@{() -> vm.disagree()}\"\n        app:visibleOrInvisible=\"@{!vm.loading}\"\n        android:text=\"@string/efgs_agreement_disagree\"\n        app:layout_constraintEnd_toEndOf=\"parent\"\n        app:layout_constraintStart_toStartOf=\"parent\"\n        app:layout_constraintTop_toBottomOf=\"@id/button_yes\" />\n\n    <ProgressBar\n        android:id=\"@+id/progress\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        tools:visibility=\"invisible\"\n        app:layout_constraintBottom_toBottomOf=\"@+id/button_no\"\n        app:layout_constraintEnd_toEndOf=\"parent\"\n        app:layout_constraintStart_toStartOf=\"parent\"\n        app:layout_constraintTop_toTopOf=\"@+id/button_yes\"\n        app:visibleOrGone=\"@{vm.loading}\" />\n\n</androidx.constraintlayout.widget.ConstraintLayout>\n</layout>"
  },
  {
    "path": "app/src/main/res/layout/fragment_efgs_update.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<layout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    xmlns:tools=\"http://schemas.android.com/tools\">\n\n    <data>\n        <variable\n            name=\"vm\"\n            type=\"cz.covid19cz.erouska.ui.update.efgs.EfgsUpdateVM\" />\n    </data>\n\n    <androidx.constraintlayout.widget.ConstraintLayout\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\">\n\n        <ScrollView\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"0dp\"\n            android:fillViewport=\"true\"\n            app:layout_constraintBottom_toBottomOf=\"parent\"\n            app:layout_constraintTop_toTopOf=\"parent\">\n\n            <androidx.constraintlayout.widget.ConstraintLayout\n                android:layout_width=\"match_parent\"\n                android:layout_height=\"wrap_content\"\n                android:padding=\"@dimen/fragment_padding\">\n\n                <ImageView\n                    android:id=\"@+id/legacy_update_img\"\n                    android:layout_width=\"200dp\"\n                    android:layout_height=\"200dp\"\n                    app:layout_constraintEnd_toEndOf=\"parent\"\n                    app:layout_constraintStart_toStartOf=\"parent\"\n                    app:layout_constraintTop_toTopOf=\"parent\"\n                    android:src=\"@drawable/ic_update_expansion\"\n                    />\n\n                <TextView\n                    android:id=\"@+id/legacy_update_header\"\n                    android:layout_width=\"wrap_content\"\n                    android:layout_height=\"wrap_content\"\n                    android:layout_marginTop=\"24dp\"\n                    android:textAlignment=\"viewStart\"\n                    android:textAppearance=\"@style/Erouska.Title\"\n                    app:layout_constraintEnd_toEndOf=\"parent\"\n                    app:layout_constraintStart_toStartOf=\"parent\"\n                    app:layout_constraintTop_toBottomOf=\"@id/legacy_update_img\"\n                    android:text=\"@string/efgs_header\" />\n\n                <TextView\n                    android:id=\"@+id/legacy_update_body\"\n                    android:layout_width=\"match_parent\"\n                    android:layout_height=\"wrap_content\"\n                    android:layout_marginTop=\"8dp\"\n                    android:textAlignment=\"textStart\"\n                    android:textAppearance=\"@style/Erouska.Body\"\n                    app:layout_constraintEnd_toEndOf=\"parent\"\n                    app:layout_constraintStart_toStartOf=\"parent\"\n                    app:layout_constraintTop_toBottomOf=\"@id/legacy_update_header\"\n                    android:text=\"@{@string/efgs_boundaries + `\\n\\n` + @string/efgs_visit(vm.efgsDays)}\"\n                    tools:text=\"@{@string/efgs_boundaries + `\\n\\n` + @string/efgs_visit(2)}\" />\n\n                <TextView\n                    android:id=\"@+id/legacy_update_body_plus\"\n                    android:layout_width=\"match_parent\"\n                    android:layout_height=\"wrap_content\"\n                    android:layout_marginTop=\"8dp\"\n                    android:textAlignment=\"textStart\"\n                    android:textAppearance=\"@style/Erouska.Body\"\n                    app:layout_constraintEnd_toEndOf=\"parent\"\n                    app:layout_constraintStart_toStartOf=\"parent\"\n                    app:layout_constraintTop_toBottomOf=\"@id/legacy_update_body\"\n                    android:text=\"@string/efgs_visit_plus\"\n                    tools:text=\"@string/efgs_visit_plus\" />\n\n                <com.google.android.material.switchmaterial.SwitchMaterial\n                    android:id=\"@+id/legacy_update_checkbox\"\n                    android:layout_width=\"match_parent\"\n                    android:layout_height=\"wrap_content\"\n                    android:layout_marginTop=\"8dp\"\n                    android:text=\"@string/efgs_check\"\n                    android:textAppearance=\"@style/Erouska.Body\"\n                    app:switchPadding=\"8dp\"\n                    android:checked=\"@{vm.sharedPrefsRepository.isTraveller()}\"\n                    app:layout_constraintEnd_toEndOf=\"parent\"\n                    app:layout_constraintStart_toStartOf=\"parent\"\n                    app:layout_constraintTop_toBottomOf=\"@id/legacy_update_body_plus\"\n                    />\n\n                <TextView\n                    android:id=\"@+id/legacy_update_countries\"\n                    android:layout_width=\"wrap_content\"\n                    android:layout_height=\"wrap_content\"\n                    android:layout_marginTop=\"8dp\"\n                    android:textAlignment=\"textStart\"\n                    android:textAppearance=\"@style/Erouska.Body\"\n                    app:layout_constraintEnd_toEndOf=\"parent\"\n                    app:layout_constraintStart_toStartOf=\"parent\"\n                    app:layout_constraintTop_toBottomOf=\"@id/legacy_update_checkbox\"\n                    android:text=\"@{vm.efgsSupportedCountries()}\"\n                    tools:text=\"@tools:sample/lorem\"/>\n                \n                <Space\n                    android:id=\"@+id/legacy_update_space\"\n                    android:layout_width=\"match_parent\"\n                    android:layout_height=\"wrap_content\"\n                    android:minHeight=\"16dp\"\n                    app:layout_constraintEnd_toEndOf=\"parent\"\n                    app:layout_constraintStart_toStartOf=\"parent\"\n                    app:layout_constraintTop_toBottomOf=\"@id/legacy_update_countries\"\n                    app:layout_constraintBottom_toTopOf=\"@id/legacy_update_button\"\n                    />\n\n                <com.google.android.material.button.MaterialButton\n                    android:id=\"@+id/legacy_update_button\"\n                    android:layout_width=\"wrap_content\"\n                    android:layout_height=\"wrap_content\"\n                    android:layout_marginBottom=\"16dp\"\n                    android:text=\"@string/legacy_update_button_continue\"\n                    app:layout_constraintBottom_toBottomOf=\"parent\"\n                    app:layout_constraintEnd_toEndOf=\"parent\"\n                    app:layout_constraintStart_toStartOf=\"parent\" />\n\n            </androidx.constraintlayout.widget.ConstraintLayout>\n        </ScrollView>\n\n    </androidx.constraintlayout.widget.ConstraintLayout>\n</layout>"
  },
  {
    "path": "app/src/main/res/layout/fragment_error.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<layout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    xmlns:tools=\"http://schemas.android.com/tools\">\n\n    <data>\n\n        <variable\n            name=\"vm\"\n            type=\"cz.covid19cz.erouska.ui.error.ErrorVM\" />\n    </data>\n\n    <ScrollView\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\"\n        android:fillViewport=\"true\">\n\n        <androidx.constraintlayout.widget.ConstraintLayout\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"wrap_content\"\n            android:padding=\"16dp\">\n\n            <ImageView\n                android:id=\"@+id/ic_error\"\n                android:layout_width=\"wrap_content\"\n                android:layout_height=\"wrap_content\"\n                android:src=\"@drawable/ic_error\"\n                app:layout_constraintEnd_toEndOf=\"parent\"\n                app:layout_constraintStart_toStartOf=\"parent\"\n                app:layout_constraintTop_toTopOf=\"parent\" />\n\n            <TextView\n                android:id=\"@+id/error_header\"\n                android:layout_width=\"wrap_content\"\n                android:layout_height=\"wrap_content\"\n                android:layout_marginTop=\"16dp\"\n                android:textAlignment=\"center\"\n                android:textAppearance=\"@style/Erouska.Title.Error\"\n                app:layout_constraintEnd_toEndOf=\"parent\"\n                app:layout_constraintStart_toStartOf=\"parent\"\n                app:layout_constraintTop_toBottomOf=\"@id/ic_error\"\n                tools:text=\"@tools:sample/lorem\" />\n\n            <TextView\n                android:id=\"@+id/error_body\"\n                android:layout_width=\"wrap_content\"\n                android:layout_height=\"wrap_content\"\n                android:layout_marginTop=\"16dp\"\n                android:textAlignment=\"center\"\n                android:textAppearance=\"@style/Erouska.Body\"\n                app:layout_constraintEnd_toEndOf=\"parent\"\n                app:layout_constraintStart_toStartOf=\"parent\"\n                app:layout_constraintTop_toBottomOf=\"@id/error_header\"\n                tools:text=\"@tools:sample/lorem\" />\n\n            <TextView\n                android:id=\"@+id/error_desc\"\n                android:layout_width=\"wrap_content\"\n                android:layout_height=\"wrap_content\"\n                android:layout_marginTop=\"16dp\"\n                android:visibility=\"gone\"\n                tools:visibility=\"visible\"\n                android:textAlignment=\"center\"\n                android:textAppearance=\"@style/Erouska.Caption\"\n                app:layout_constraintEnd_toEndOf=\"parent\"\n                app:layout_constraintStart_toStartOf=\"parent\"\n                app:layout_constraintTop_toBottomOf=\"@id/error_body\"\n                tools:text=\"@tools:sample/lorem\" />\n\n\n            <com.google.android.material.button.MaterialButton\n                android:id=\"@+id/try_again_button\"\n                android:layout_width=\"wrap_content\"\n                android:layout_height=\"wrap_content\"\n                android:layout_marginTop=\"16dp\"\n                android:text=\"@string/send_data_try_again\"\n                app:layout_constraintEnd_toEndOf=\"parent\"\n                app:layout_constraintStart_toStartOf=\"parent\"\n                app:layout_constraintTop_toBottomOf=\"@+id/error_desc\" />\n\n            <com.google.android.material.button.MaterialButton\n                android:id=\"@+id/email_button\"\n                android:layout_width=\"wrap_content\"\n                android:layout_height=\"wrap_content\"\n                android:layout_marginTop=\"16dp\"\n                android:text=\"@string/email_button\"\n                app:layout_constraintEnd_toEndOf=\"parent\"\n                app:layout_constraintStart_toStartOf=\"parent\"\n                app:layout_constraintTop_toBottomOf=\"@+id/try_again_button\" />\n\n            <com.google.android.material.button.MaterialButton\n                android:id=\"@+id/close_button\"\n                style=\"@style/OutlinedButton\"\n                android:layout_width=\"wrap_content\"\n                android:layout_height=\"wrap_content\"\n                android:layout_marginTop=\"16dp\"\n                android:text=\"@string/send_data_close\"\n                app:layout_constraintEnd_toEndOf=\"parent\"\n                app:layout_constraintStart_toStartOf=\"parent\"\n                app:layout_constraintTop_toBottomOf=\"@+id/email_button\" />\n        </androidx.constraintlayout.widget.ConstraintLayout>\n    </ScrollView>\n</layout>"
  },
  {
    "path": "app/src/main/res/layout/fragment_exposure.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<layout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    xmlns:tools=\"http://schemas.android.com/tools\">\n\n    <data>\n\n        <import type=\"cz.covid19cz.erouska.AppConfig\" />\n\n        <variable\n            name=\"vm\"\n            type=\"cz.covid19cz.erouska.ui.exposure.ExposureVM\" />\n    </data>\n\n\n    <androidx.constraintlayout.widget.ConstraintLayout\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\">\n\n        <ScrollView\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"0dp\"\n            android:fillViewport=\"true\"\n            app:layout_constraintBottom_toBottomOf=\"parent\"\n            app:layout_constraintTop_toTopOf=\"parent\">\n\n            <androidx.constraintlayout.widget.ConstraintLayout\n                android:layout_width=\"match_parent\"\n                android:layout_height=\"wrap_content\">\n\n                <ImageView\n                    android:id=\"@+id/no_exposures_img\"\n                    android:layout_width=\"wrap_content\"\n                    android:layout_height=\"wrap_content\"\n                    android:layout_gravity=\"center\"\n                    android:layout_marginTop=\"24dp\"\n                    android:src=\"@drawable/ic_shortcut_resume\"\n                    app:layout_constraintEnd_toEndOf=\"parent\"\n                    app:layout_constraintStart_toStartOf=\"parent\"\n                    app:layout_constraintTop_toTopOf=\"parent\" />\n\n                <TextView\n                    android:id=\"@+id/no_exposures_header\"\n                    android:layout_width=\"match_parent\"\n                    android:layout_height=\"wrap_content\"\n                    android:layout_gravity=\"center\"\n                    android:layout_marginStart=\"16dp\"\n                    android:layout_marginTop=\"16dp\"\n                    android:layout_marginEnd=\"16dp\"\n                    android:textAlignment=\"center\"\n                    android:textAppearance=\"@style/Erouska.Title.Active\"\n                    app:layout_constraintEnd_toEndOf=\"parent\"\n                    app:layout_constraintStart_toStartOf=\"parent\"\n                    app:layout_constraintTop_toBottomOf=\"@id/no_exposures_img\"\n                    tools:text=\"@tools:sample/lorem\" />\n\n                <TextView\n                    android:id=\"@+id/no_exposures_body\"\n                    android:layout_width=\"match_parent\"\n                    android:layout_height=\"wrap_content\"\n                    android:layout_gravity=\"center\"\n                    android:layout_marginStart=\"16dp\"\n                    android:layout_marginTop=\"16dp\"\n                    android:layout_marginEnd=\"16dp\"\n                    android:textAlignment=\"center\"\n                    android:textAppearance=\"@style/Erouska.Body\"\n                    app:layout_constraintEnd_toEndOf=\"parent\"\n                    app:layout_constraintStart_toStartOf=\"parent\"\n                    app:layout_constraintTop_toBottomOf=\"@id/no_exposures_header\"\n                    tools:text=\"@tools:sample/lorem\" />\n\n                <TextView\n                    android:id=\"@+id/last_exposure\"\n                    android:layout_width=\"match_parent\"\n                    android:layout_height=\"wrap_content\"\n                    android:layout_marginStart=\"16dp\"\n                    android:layout_marginTop=\"16dp\"\n                    android:layout_marginEnd=\"16dp\"\n                    android:text=\"@{String.format(AppConfig.INSTANCE.riskyEncountersTitle, vm.lastExposureDate)}\"\n                    android:textAppearance=\"@style/Erouska.Body\"\n                    app:layout_constraintEnd_toEndOf=\"parent\"\n                    app:layout_constraintStart_toStartOf=\"parent\"\n                    app:layout_constraintTop_toTopOf=\"parent\"\n                    tools:text=\"@tools:sample/lorem\" />\n\n                <androidx.constraintlayout.widget.ConstraintLayout\n                    android:id=\"@+id/earlier_exposures_container\"\n                    android:layout_width=\"match_parent\"\n                    android:layout_height=\"wrap_content\"\n                    android:background=\"?selectableItemBackground\"\n                    android:clickable=\"true\"\n                    android:focusable=\"true\"\n                    android:paddingStart=\"16dp\"\n                    android:layout_marginTop=\"8dp\"\n                    app:layout_constraintEnd_toEndOf=\"parent\"\n                    app:layout_constraintStart_toStartOf=\"parent\"\n                    app:layout_constraintTop_toBottomOf=\"@id/last_exposure\">\n\n                    <ImageView\n                        android:id=\"@+id/calendar_img\"\n                        android:layout_width=\"wrap_content\"\n                        android:layout_height=\"wrap_content\"\n                        android:src=\"@drawable/ic_calendar\"\n                        app:layout_constraintBottom_toBottomOf=\"parent\"\n                        app:layout_constraintStart_toStartOf=\"parent\"\n                        app:layout_constraintTop_toTopOf=\"parent\" />\n\n                    <TextView\n                        android:id=\"@+id/earlier_exposures_text\"\n                        android:layout_width=\"0dp\"\n                        android:layout_height=\"wrap_content\"\n                        android:layout_marginStart=\"16dp\"\n                        android:layout_marginTop=\"16dp\"\n                        android:layout_marginEnd=\"16dp\"\n                        android:layout_marginBottom=\"16dp\"\n                        android:textAppearance=\"@style/Erouska.Item\"\n                        app:layout_constraintBottom_toBottomOf=\"parent\"\n                        app:layout_constraintEnd_toEndOf=\"parent\"\n                        app:layout_constraintStart_toEndOf=\"@id/calendar_img\"\n                        app:layout_constraintTop_toTopOf=\"parent\"\n                        tools:text=\"@tools:sample/lorem\" />\n                </androidx.constraintlayout.widget.ConstraintLayout>\n\n                <View\n                    android:id=\"@+id/divider_1\"\n                    android:layout_width=\"match_parent\"\n                    android:layout_height=\"1dp\"\n                    android:layout_marginTop=\"16dp\"\n                    android:layout_marginBottom=\"8dp\"\n                    android:background=\"@color/separator\"\n                    app:layout_constraintEnd_toEndOf=\"parent\"\n                    app:layout_constraintStart_toStartOf=\"parent\"\n                    app:layout_constraintTop_toBottomOf=\"@id/earlier_exposures_container\" />\n\n                <TextView\n                    android:id=\"@+id/symptoms_header\"\n                    android:layout_width=\"match_parent\"\n                    android:layout_height=\"wrap_content\"\n                    android:layout_marginStart=\"16dp\"\n                    android:layout_marginTop=\"16dp\"\n                    android:layout_marginEnd=\"16dp\"\n                    android:textAppearance=\"@style/Erouska.Caption\"\n                    android:text=\"@string/exposures_symptoms_header\"\n                    app:layout_constraintEnd_toEndOf=\"parent\"\n                    app:layout_constraintStart_toStartOf=\"parent\"\n                    app:layout_constraintTop_toBottomOf=\"@id/divider_1\"\n                    tools:text=\"@tools:sample/lorem\" />\n\n                <TextView\n                    android:id=\"@+id/symptoms_content\"\n                    android:layout_width=\"match_parent\"\n                    android:layout_height=\"wrap_content\"\n                    android:layout_marginStart=\"16dp\"\n                    android:layout_marginTop=\"4dp\"\n                    android:layout_marginEnd=\"16dp\"\n                    android:textAppearance=\"@style/Erouska.Body\"\n                    app:layout_constraintEnd_toEndOf=\"parent\"\n                    app:layout_constraintStart_toStartOf=\"parent\"\n                    app:layout_constraintTop_toBottomOf=\"@id/symptoms_header\"\n                    tools:text=\"@tools:sample/lorem\" />\n\n                <androidx.constraintlayout.widget.ConstraintLayout\n                    android:id=\"@+id/symptoms_container\"\n                    android:layout_width=\"match_parent\"\n                    android:layout_height=\"wrap_content\"\n                    android:layout_marginTop=\"8dp\"\n                    android:background=\"?selectableItemBackground\"\n                    android:clickable=\"true\"\n                    android:focusable=\"true\"\n                    android:paddingStart=\"16dp\"\n                    android:textAppearance=\"@style/Erouska.Item\"\n                    app:layout_constraintEnd_toEndOf=\"parent\"\n                    app:layout_constraintStart_toStartOf=\"parent\"\n                    app:layout_constraintTop_toBottomOf=\"@id/symptoms_content\">\n\n                    <ImageView\n                        android:id=\"@+id/symptoms_img\"\n                        android:layout_width=\"wrap_content\"\n                        android:layout_height=\"wrap_content\"\n                        android:src=\"@drawable/ic_symptoms\"\n                        app:layout_constraintBottom_toBottomOf=\"parent\"\n                        app:layout_constraintStart_toStartOf=\"parent\"\n                        app:layout_constraintTop_toTopOf=\"parent\" />\n\n                    <TextView\n                        android:id=\"@+id/symptoms_text\"\n                        android:layout_width=\"0dp\"\n                        android:layout_height=\"wrap_content\"\n                        android:layout_marginStart=\"16dp\"\n                        android:layout_marginTop=\"16dp\"\n                        android:layout_marginEnd=\"16dp\"\n                        android:layout_marginBottom=\"16dp\"\n                        android:textAppearance=\"@style/Erouska.Item\"\n                        app:layout_constraintBottom_toBottomOf=\"parent\"\n                        app:layout_constraintEnd_toEndOf=\"parent\"\n                        app:layout_constraintStart_toEndOf=\"@id/symptoms_img\"\n                        app:layout_constraintTop_toTopOf=\"parent\"\n                        tools:text=\"@tools:sample/lorem\" />\n\n                </androidx.constraintlayout.widget.ConstraintLayout>\n\n                <View\n                    android:id=\"@+id/divider_2\"\n                    android:layout_width=\"match_parent\"\n                    android:layout_height=\"1dp\"\n                    android:layout_marginTop=\"16dp\"\n                    android:layout_marginBottom=\"8dp\"\n                    android:background=\"@color/separator\"\n                    app:layout_constraintEnd_toEndOf=\"parent\"\n                    app:layout_constraintStart_toStartOf=\"parent\"\n                    app:layout_constraintTop_toBottomOf=\"@id/symptoms_container\" />\n\n                <TextView\n                    android:id=\"@+id/no_symptoms_header\"\n                    android:layout_width=\"match_parent\"\n                    android:layout_height=\"wrap_content\"\n                    android:layout_marginStart=\"16dp\"\n                    android:layout_marginTop=\"16dp\"\n                    android:layout_marginEnd=\"16dp\"\n                    android:textAppearance=\"@style/Erouska.Caption\"\n                    android:text=\"@string/exposures_no_symptoms_header\"\n                    app:layout_constraintEnd_toEndOf=\"parent\"\n                    app:layout_constraintStart_toStartOf=\"parent\"\n                    app:layout_constraintTop_toBottomOf=\"@id/divider_2\" />\n\n                <TextView\n                    android:id=\"@+id/no_symptoms_content\"\n                    android:layout_width=\"match_parent\"\n                    android:layout_height=\"wrap_content\"\n                    android:layout_marginStart=\"16dp\"\n                    android:layout_marginTop=\"4dp\"\n                    android:layout_marginEnd=\"16dp\"\n                    android:textAppearance=\"@style/Erouska.Body\"\n                    app:layout_constraintEnd_toEndOf=\"parent\"\n                    app:layout_constraintStart_toStartOf=\"parent\"\n                    app:layout_constraintTop_toBottomOf=\"@id/no_symptoms_header\"\n                    tools:text=\"@tools:sample/lorem\" />\n\n                <androidx.constraintlayout.widget.ConstraintLayout\n                    android:id=\"@+id/spread_prevention_container\"\n                    android:layout_width=\"match_parent\"\n                    android:layout_height=\"wrap_content\"\n                    android:background=\"?selectableItemBackground\"\n                    android:clickable=\"true\"\n                    android:focusable=\"true\"\n                    android:paddingStart=\"16dp\"\n                    android:layout_marginTop=\"8dp\"\n                    app:layout_constraintEnd_toEndOf=\"parent\"\n                    app:layout_constraintStart_toStartOf=\"parent\"\n                    app:layout_constraintTop_toBottomOf=\"@id/no_symptoms_content\">\n\n                    <ImageView\n                        android:id=\"@+id/spread_img\"\n                        android:layout_width=\"wrap_content\"\n                        android:layout_height=\"wrap_content\"\n                        android:layout_marginEnd=\"16dp\"\n                        android:src=\"@drawable/ic_prevention\"\n                        app:layout_constraintBottom_toBottomOf=\"parent\"\n                        app:layout_constraintStart_toStartOf=\"parent\"\n                        app:layout_constraintTop_toTopOf=\"parent\" />\n\n                    <TextView\n                        android:id=\"@+id/spread_text\"\n                        android:layout_width=\"0dp\"\n                        android:layout_height=\"wrap_content\"\n                        android:layout_marginStart=\"16dp\"\n                        android:layout_marginTop=\"16dp\"\n                        android:layout_marginEnd=\"16dp\"\n                        android:layout_marginBottom=\"16dp\"\n                        android:textAppearance=\"@style/Erouska.Item\"\n                        app:layout_constraintBottom_toBottomOf=\"parent\"\n                        app:layout_constraintEnd_toEndOf=\"parent\"\n                        app:layout_constraintStart_toEndOf=\"@id/spread_img\"\n                        app:layout_constraintTop_toTopOf=\"parent\"\n                        tools:text=\"@tools:sample/lorem\" />\n\n                </androidx.constraintlayout.widget.ConstraintLayout>\n\n                <androidx.constraintlayout.widget.Group\n                    android:id=\"@+id/no_exposures_group\"\n                    android:layout_width=\"wrap_content\"\n                    android:layout_height=\"wrap_content\"\n                    android:visibility=\"gone\"\n                    app:constraint_referenced_ids=\"no_exposures_img,no_exposures_header,no_exposures_body\"\n                    tools:visibility=\"visible\" />\n\n                <androidx.constraintlayout.widget.Group\n                    android:id=\"@+id/exposures_group\"\n                    android:layout_width=\"wrap_content\"\n                    android:layout_height=\"wrap_content\"\n                    android:visibility=\"gone\"\n                    app:constraint_referenced_ids=\"last_exposure,divider_1,divider_2,symptoms_header,symptoms_content,no_symptoms_header,no_symptoms_content,earlier_exposures_container,symptoms_container,spread_prevention_container\"\n                    tools:visibility=\"visible\" />\n            </androidx.constraintlayout.widget.ConstraintLayout>\n        </ScrollView>\n    </androidx.constraintlayout.widget.ConstraintLayout>\n</layout>"
  },
  {
    "path": "app/src/main/res/layout/fragment_exposure_help.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<layout xmlns:app=\"http://schemas.android.com/apk/res-auto\">\n    <data>\n        <variable\n            name=\"vm\"\n            type=\"cz.covid19cz.erouska.ui.exposurehelp.ExposureHelpVM\" />\n    </data>\n<androidx.constraintlayout.widget.ConstraintLayout\n    xmlns:android=\"http://schemas.android.com/apk/res/android\" android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\">\n\n    <androidx.recyclerview.widget.RecyclerView\n        android:id=\"@+id/symptoms_list\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\"\n        android:paddingTop=\"16dp\"\n        android:clipToPadding=\"false\"\n        app:items=\"@{ vm.items }\"\n        app:layoutStrategy=\"@{vm.layoutStrategy}\"\n        app:layoutManager=\"androidx.recyclerview.widget.LinearLayoutManager\"\n        app:layout_constraintStart_toStartOf=\"parent\"\n        android:paddingBottom=\"@dimen/fragment_padding_bottom_larger\"\n        app:viewModel=\"@{ vm }\" />\n\n</androidx.constraintlayout.widget.ConstraintLayout>\n</layout>"
  },
  {
    "path": "app/src/main/res/layout/fragment_exposure_info.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<layout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    xmlns:tools=\"http://schemas.android.com/tools\">\n\n    <data>\n        <variable\n            name=\"vm\"\n            type=\"cz.covid19cz.erouska.ui.exposureinfo.ExposureInfoVM\" />\n    </data>\n\n    <androidx.constraintlayout.widget.ConstraintLayout\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\">\n    <ScrollView\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\">\n\n        <androidx.constraintlayout.widget.ConstraintLayout\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"wrap_content\"\n            android:padding=\"@dimen/fragment_padding\">\n\n            <androidx.appcompat.widget.AppCompatImageView\n                android:id=\"@+id/imageIcon\"\n                android:layout_width=\"wrap_content\"\n                android:layout_height=\"wrap_content\"\n                app:srcCompat=\"@drawable/ic_exposure_info\"\n                app:layout_constraintEnd_toEndOf=\"parent\"\n                app:layout_constraintStart_toStartOf=\"parent\"\n                app:layout_constraintTop_toTopOf=\"parent\" />\n\n            <TextView\n                android:id=\"@+id/textDate\"\n                android:layout_width=\"match_parent\"\n                android:layout_height=\"wrap_content\"\n                android:layout_marginTop=\"16dp\"\n                android:textAppearance=\"@style/Erouska.Title\"\n                tools:text=\"@string/exposure_info_date\"\n                android:text=\"@{@string/exposure_info_date(vm.date)}\"\n                app:layout_constraintTop_toBottomOf=\"@id/imageIcon\"/>\n\n            <TextView\n                android:id=\"@+id/textInfo\"\n                android:layout_width=\"match_parent\"\n                android:layout_height=\"wrap_content\"\n                android:layout_marginTop=\"8dp\"\n                android:textAppearance=\"@style/Erouska.Body\"\n                android:text=\"@string/exposure_info_text\"\n                android:paddingBottom=\"68dp\"\n                app:layout_constraintTop_toBottomOf=\"@id/textDate\"/>\n        </androidx.constraintlayout.widget.ConstraintLayout>\n    </ScrollView>\n\n    <com.google.android.material.button.MaterialButton\n        android:id=\"@+id/activate_btn\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:layout_marginTop=\"16dp\"\n        android:layout_marginBottom=\"16dp\"\n        android:text=\"@string/exposure_info_button\"\n        android:onClick=\"@{() -> vm.dismiss()}\"\n        app:layout_constraintBottom_toBottomOf=\"parent\"\n        app:layout_constraintEnd_toEndOf=\"parent\"\n        app:layout_constraintStart_toStartOf=\"parent\" />\n    </androidx.constraintlayout.widget.ConstraintLayout>\n</layout>"
  },
  {
    "path": "app/src/main/res/layout/fragment_help.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<layout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\">\n\n    <data>\n\n        <variable\n            name=\"item\"\n            type=\"cz.covid19cz.erouska.ui.help.data.FaqCategory\" />\n\n        <variable\n            name=\"vm\"\n            type=\"cz.covid19cz.erouska.ui.help.HelpVM\" />\n    </data>\n\n    <androidx.constraintlayout.widget.ConstraintLayout\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\">\n\n        <androidx.recyclerview.widget.RecyclerView\n            android:id=\"@+id/help_categories\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"0dp\"\n            app:items=\"@{ vm.items }\"\n            app:layoutManager=\"androidx.recyclerview.widget.LinearLayoutManager\"\n            app:layoutStrategy=\"@{vm.layoutStrategy}\"\n            app:layout_constraintStart_toStartOf=\"parent\"\n            app:layout_constraintTop_toTopOf=\"parent\"\n            app:layout_constraintBottom_toTopOf=\"@id/support_button\"\n            app:viewModel=\"@{ vm }\" />\n\n        <com.google.android.material.button.MaterialButton\n            android:id=\"@+id/support_button\"\n            style=\"@style/Widget.MaterialComponents.Button.TextButton\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:text=\"@string/support_request_button\"\n            app:layout_constraintBottom_toBottomOf=\"parent\"\n            app:layout_constraintEnd_toEndOf=\"parent\"\n            app:layout_constraintStart_toStartOf=\"parent\" />\n\n    </androidx.constraintlayout.widget.ConstraintLayout>\n</layout>"
  },
  {
    "path": "app/src/main/res/layout/fragment_help_category.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<layout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    xmlns:tools=\"http://schemas.android.com/tools\">\n\n    <data>\n\n        <variable\n            name=\"item\"\n            type=\"cz.covid19cz.erouska.ui.help.data.Question\" />\n\n        <variable\n            name=\"vm\"\n            type=\"cz.covid19cz.erouska.ui.helpcategory.HelpCategoryVM\" />\n    </data>\n\n    <androidx.constraintlayout.widget.ConstraintLayout\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\">\n\n        <androidx.recyclerview.widget.RecyclerView\n            android:id=\"@+id/help_questions\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"match_parent\"\n            android:onClick=\"@{ () -> vm.onItemClicked(item)}\"\n            app:items=\"@{ vm.items }\"\n            app:layoutManager=\"androidx.recyclerview.widget.LinearLayoutManager\"\n            app:layoutStrategy=\"@{vm.layoutStrategy}\"\n            app:layout_constraintStart_toStartOf=\"parent\"\n            app:viewModel=\"@{ vm }\"\n            tools:listitem=\"@layout/item_help_question\" />\n\n        <View\n            android:id=\"@+id/divider_top\"\n            style=\"@style/Divider\"\n            app:layout_constraintBottom_toBottomOf=\"parent\"\n            app:layout_constraintEnd_toEndOf=\"parent\" />\n\n    </androidx.constraintlayout.widget.ConstraintLayout>\n</layout>"
  },
  {
    "path": "app/src/main/res/layout/fragment_help_question.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<layout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:tools=\"http://schemas.android.com/tools\">\n\n    <ScrollView\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\"\n        android:fillViewport=\"true\">\n\n        <LinearLayout\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"wrap_content\"\n            android:orientation=\"vertical\"\n            android:paddingStart=\"@dimen/fragment_padding\"\n            android:paddingEnd=\"@dimen/fragment_padding\"\n            android:paddingBottom=\"@dimen/fragment_padding_bottom_larger\">\n\n            <TextView\n                android:id=\"@+id/question\"\n                android:layout_width=\"match_parent\"\n                android:layout_height=\"wrap_content\"\n                android:textAppearance=\"@style/Erouska.Body\"\n                tools:text=\"Jak eRouška zaznamenává a zpracovává data o setkáních uživatelů?\" />\n\n            <TextView\n                android:id=\"@+id/answer\"\n                android:layout_width=\"match_parent\"\n                android:layout_height=\"wrap_content\"\n                android:textAppearance=\"@style/Erouska.Caption\"\n                tools:text=\"Chytrý telefon s aplikací eRouška zaznamená přes Bluetooth LE anonymní identifikátory (ID) z jiných zařízení s touto aplikací. Informaci o „setkání“ a jeho délce ukládá do své vnitřní paměti.\" />\n\n        </LinearLayout>\n\n    </ScrollView>\n</layout>"
  },
  {
    "path": "app/src/main/res/layout/fragment_help_search.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<layout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\">\n\n    <data>\n\n        <variable\n            name=\"vm\"\n            type=\"cz.covid19cz.erouska.ui.helpsearch.HelpSearchVM\" />\n\n    </data>\n\n    <androidx.constraintlayout.widget.ConstraintLayout\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\">\n\n        <androidx.recyclerview.widget.RecyclerView\n            android:id=\"@+id/help_categories\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"match_parent\"\n            android:clipToPadding=\"false\"\n            android:paddingTop=\"16dp\"\n            app:items=\"@{ vm.searchResult }\"\n            app:layoutManager=\"androidx.recyclerview.widget.LinearLayoutManager\"\n            app:layoutStrategy=\"@{vm.layoutStrategy}\"\n            app:layout_constraintStart_toStartOf=\"parent\"\n            app:viewModel=\"@{ vm }\"\n            android:visibility=\"gone\" />\n\n        <ImageView\n            android:id=\"@+id/empty_image_view\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:layout_marginTop=\"@dimen/fragment_padding\"\n            android:src=\"@drawable/ic_balloon\"\n            app:layout_constraintEnd_toEndOf=\"parent\"\n            app:layout_constraintHorizontal_bias=\"0.5\"\n            app:layout_constraintStart_toStartOf=\"parent\"\n            app:layout_constraintTop_toTopOf=\"parent\"\n            android:visibility=\"visible\" />\n\n        <TextView\n            android:id=\"@+id/empty_text_view\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:gravity=\"center\"\n            android:text=\"@string/help_no_results\"\n            android:textAppearance=\"@style/Erouska.Body\"\n            app:layout_constraintEnd_toEndOf=\"parent\"\n            app:layout_constraintStart_toStartOf=\"parent\"\n            app:layout_constraintTop_toBottomOf=\"@id/empty_image_view\"\n            android:visibility=\"gone\" />\n\n    </androidx.constraintlayout.widget.ConstraintLayout>\n</layout>"
  },
  {
    "path": "app/src/main/res/layout/fragment_how_it_works.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<layout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\">\n\n    <data>\n\n        <import type=\"cz.covid19cz.erouska.AppConfig\" />\n\n        <variable\n            name=\"vm\"\n            type=\"cz.covid19cz.erouska.ui.how.HowItWorksVM\" />\n    </data>\n\n    <androidx.constraintlayout.widget.ConstraintLayout\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\">\n\n        <ScrollView\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"0dp\"\n            android:fillViewport=\"true\"\n            app:layout_constraintBottom_toBottomOf=\"parent\"\n            app:layout_constraintTop_toTopOf=\"parent\">\n\n            <androidx.constraintlayout.widget.ConstraintLayout\n                android:layout_width=\"match_parent\"\n                android:layout_height=\"wrap_content\"\n                android:padding=\"@dimen/fragment_padding\">\n\n                <TextView\n                    android:id=\"@+id/how_it_works_info_content\"\n                    android:layout_width=\"match_parent\"\n                    android:layout_height=\"wrap_content\"\n                    android:text=\"@string/how_it_works_info_content\"\n                    android:textAppearance=\"@style/Erouska.Body\"\n                    app:layout_constraintEnd_toEndOf=\"parent\"\n                    app:layout_constraintStart_toStartOf=\"parent\"\n                    app:layout_constraintTop_toTopOf=\"parent\" />\n\n                <ImageView\n                    android:id=\"@+id/how_it_works_encounter_img\"\n                    android:layout_width=\"match_parent\"\n                    android:layout_height=\"wrap_content\"\n                    android:layout_marginTop=\"8dp\"\n                    android:src=\"@drawable/ic_encounter\"\n                    app:layout_constraintEnd_toEndOf=\"parent\"\n                    app:layout_constraintStart_toStartOf=\"parent\"\n                    app:layout_constraintTop_toBottomOf=\"@id/how_it_works_info_content\" />\n\n                <TextView\n                    android:id=\"@+id/how_it_works_encounter_title\"\n                    android:layout_width=\"match_parent\"\n                    android:layout_height=\"wrap_content\"\n                    android:layout_marginTop=\"8dp\"\n                    android:text=\"@string/how_it_works_encounter_title\"\n                    android:textAppearance=\"@style/Erouska.Title\"\n                    app:layout_constraintEnd_toEndOf=\"parent\"\n                    app:layout_constraintStart_toStartOf=\"parent\"\n                    app:layout_constraintTop_toBottomOf=\"@id/how_it_works_encounter_img\" />\n\n                <TextView\n                    android:id=\"@+id/how_it_works_encounter_content\"\n                    android:layout_width=\"match_parent\"\n                    android:layout_height=\"wrap_content\"\n                    android:layout_marginTop=\"8dp\"\n                    android:text=\"@string/how_it_works_encounter_content\"\n                    android:textAppearance=\"@style/Erouska.Body\"\n                    app:layout_constraintEnd_toEndOf=\"parent\"\n                    app:layout_constraintStart_toStartOf=\"parent\"\n                    app:layout_constraintTop_toBottomOf=\"@id/how_it_works_encounter_title\" />\n\n                <ImageView\n                    android:id=\"@+id/how_it_works_confirm_img\"\n                    android:layout_width=\"match_parent\"\n                    android:layout_height=\"wrap_content\"\n                    android:layout_marginTop=\"8dp\"\n                    android:src=\"@drawable/ic_confirm\"\n                    app:layout_constraintEnd_toEndOf=\"parent\"\n                    app:layout_constraintStart_toStartOf=\"parent\"\n                    app:layout_constraintTop_toBottomOf=\"@id/how_it_works_encounter_content\" />\n\n                <TextView\n                    android:id=\"@+id/how_it_works_confirm_title\"\n                    android:layout_width=\"match_parent\"\n                    android:layout_height=\"wrap_content\"\n                    android:layout_marginTop=\"8dp\"\n                    android:text=\"@string/how_it_works_confirm_title\"\n                    android:textAppearance=\"@style/Erouska.Title\"\n                    app:layout_constraintEnd_toEndOf=\"parent\"\n                    app:layout_constraintStart_toStartOf=\"parent\"\n                    app:layout_constraintTop_toBottomOf=\"@id/how_it_works_confirm_img\" />\n\n                <TextView\n                    android:id=\"@+id/how_it_works_confirm_content\"\n                    android:layout_width=\"match_parent\"\n                    android:layout_height=\"wrap_content\"\n                    android:layout_marginTop=\"8dp\"\n                    android:text=\"@string/how_it_works_confirm_content\"\n                    android:textAppearance=\"@style/Erouska.Body\"\n                    app:layout_constraintEnd_toEndOf=\"parent\"\n                    app:layout_constraintStart_toStartOf=\"parent\"\n                    app:layout_constraintTop_toBottomOf=\"@id/how_it_works_confirm_title\" />\n\n                <ImageView\n                    android:id=\"@+id/how_it_works_warn_img\"\n                    android:layout_width=\"match_parent\"\n                    android:layout_height=\"wrap_content\"\n                    android:layout_marginTop=\"8dp\"\n                    android:src=\"@drawable/ic_warn\"\n                    app:layout_constraintEnd_toEndOf=\"parent\"\n                    app:layout_constraintStart_toStartOf=\"parent\"\n                    app:layout_constraintTop_toBottomOf=\"@id/how_it_works_confirm_content\" />\n\n                <TextView\n                    android:id=\"@+id/how_it_works_warn_title\"\n                    android:layout_width=\"match_parent\"\n                    android:layout_height=\"wrap_content\"\n                    android:layout_marginTop=\"8dp\"\n                    android:text=\"@string/how_it_works_warn_title\"\n                    android:textAppearance=\"@style/Erouska.Title\"\n                    app:layout_constraintEnd_toEndOf=\"parent\"\n                    app:layout_constraintStart_toStartOf=\"parent\"\n                    app:layout_constraintTop_toBottomOf=\"@id/how_it_works_warn_img\" />\n\n                <TextView\n                    android:id=\"@+id/how_it_works_warn_content\"\n                    android:layout_width=\"match_parent\"\n                    android:layout_height=\"wrap_content\"\n                    android:layout_marginTop=\"8dp\"\n                    android:text=\"@string/how_it_works_warn_content\"\n                    android:textAppearance=\"@style/Erouska.Body\"\n                    app:layout_constraintEnd_toEndOf=\"parent\"\n                    app:layout_constraintStart_toStartOf=\"parent\"\n                    app:layout_constraintTop_toBottomOf=\"@id/how_it_works_warn_title\" />\n\n                <ImageView\n                    android:id=\"@+id/how_it_works_control_img\"\n                    android:layout_width=\"match_parent\"\n                    android:layout_height=\"wrap_content\"\n                    android:layout_marginTop=\"8dp\"\n                    android:src=\"@drawable/ic_control\"\n                    app:layout_constraintEnd_toEndOf=\"parent\"\n                    app:layout_constraintStart_toStartOf=\"parent\"\n                    app:layout_constraintTop_toBottomOf=\"@id/how_it_works_warn_content\" />\n\n                <TextView\n                    android:id=\"@+id/how_it_works_control_title\"\n                    android:layout_width=\"match_parent\"\n                    android:layout_height=\"wrap_content\"\n                    android:layout_marginTop=\"8dp\"\n                    android:text=\"@string/how_it_works_control_title\"\n                    android:textAppearance=\"@style/Erouska.Title\"\n                    app:layout_constraintEnd_toEndOf=\"parent\"\n                    app:layout_constraintStart_toStartOf=\"parent\"\n                    app:layout_constraintTop_toBottomOf=\"@id/how_it_works_control_img\" />\n\n                <TextView\n                    android:id=\"@+id/how_it_works_control_content\"\n                    android:layout_width=\"match_parent\"\n                    android:layout_height=\"wrap_content\"\n                    android:layout_marginTop=\"8dp\"\n                    android:text=\"@string/how_it_works_control_content\"\n                    android:textAppearance=\"@style/Erouska.Body\"\n                    app:layout_constraintEnd_toEndOf=\"parent\"\n                    app:layout_constraintStart_toStartOf=\"parent\"\n                    app:layout_constraintTop_toBottomOf=\"@id/how_it_works_control_title\" />\n\n                <ImageView\n                    android:id=\"@+id/how_it_works_eval_img\"\n                    android:layout_width=\"match_parent\"\n                    android:layout_height=\"wrap_content\"\n                    android:layout_marginTop=\"8dp\"\n                    android:src=\"@drawable/ic_eval\"\n                    app:layout_constraintEnd_toEndOf=\"parent\"\n                    app:layout_constraintStart_toStartOf=\"parent\"\n                    app:layout_constraintTop_toBottomOf=\"@id/how_it_works_control_content\" />\n\n                <TextView\n                    android:id=\"@+id/how_it_works_eval_title\"\n                    android:layout_width=\"match_parent\"\n                    android:layout_height=\"wrap_content\"\n                    android:layout_marginTop=\"8dp\"\n                    android:text=\"@string/how_it_works_eval_title\"\n                    android:textAppearance=\"@style/Erouska.Title\"\n                    app:layout_constraintEnd_toEndOf=\"parent\"\n                    app:layout_constraintStart_toStartOf=\"parent\"\n                    app:layout_constraintTop_toBottomOf=\"@id/how_it_works_eval_img\" />\n\n                <TextView\n                    android:id=\"@+id/how_it_works_eval_content\"\n                    android:layout_width=\"match_parent\"\n                    android:layout_height=\"wrap_content\"\n                    android:layout_marginTop=\"8dp\"\n                    android:textAppearance=\"@style/Erouska.Body\"\n                    app:layout_constraintEnd_toEndOf=\"parent\"\n                    app:layout_constraintStart_toStartOf=\"parent\"\n                    app:layout_constraintTop_toBottomOf=\"@id/how_it_works_eval_title\" />\n\n                <ImageView\n                    android:id=\"@+id/how_it_works_notif_img\"\n                    android:layout_width=\"match_parent\"\n                    android:layout_height=\"wrap_content\"\n                    android:layout_marginTop=\"8dp\"\n                    android:src=\"@drawable/ic_notif\"\n                    app:layout_constraintEnd_toEndOf=\"parent\"\n                    app:layout_constraintStart_toStartOf=\"parent\"\n                    app:layout_constraintTop_toBottomOf=\"@id/how_it_works_eval_content\" />\n\n                <TextView\n                    android:id=\"@+id/how_it_works_notif_title\"\n                    android:layout_width=\"match_parent\"\n                    android:layout_height=\"wrap_content\"\n                    android:layout_marginTop=\"8dp\"\n                    android:text=\"@string/how_it_works_notif_title\"\n                    android:textAppearance=\"@style/Erouska.Title\"\n                    app:layout_constraintEnd_toEndOf=\"parent\"\n                    app:layout_constraintStart_toStartOf=\"parent\"\n                    app:layout_constraintTop_toBottomOf=\"@id/how_it_works_notif_img\" />\n\n                <TextView\n                    android:id=\"@+id/how_it_works_notif_content\"\n                    android:layout_width=\"match_parent\"\n                    android:layout_height=\"wrap_content\"\n                    android:layout_marginTop=\"8dp\"\n                    android:text=\"@string/how_it_works_notif_content\"\n                    android:textAppearance=\"@style/Erouska.Body\"\n                    app:layout_constraintEnd_toEndOf=\"parent\"\n                    app:layout_constraintStart_toStartOf=\"parent\"\n                    app:layout_constraintTop_toBottomOf=\"@id/how_it_works_notif_title\" />\n\n                <TextView\n                    android:id=\"@+id/how_it_works_support_content\"\n                    android:layout_width=\"match_parent\"\n                    android:layout_height=\"wrap_content\"\n                    android:layout_marginTop=\"8dp\"\n                    android:text=\"@string/how_it_works_support_content\"\n                    android:textAppearance=\"@style/Erouska.Body\"\n                    app:layout_constraintEnd_toEndOf=\"parent\"\n                    app:layout_constraintStart_toStartOf=\"parent\"\n                    app:layout_constraintTop_toBottomOf=\"@id/how_it_works_notif_content\" />\n\n                <android.widget.Space\n                    android:id=\"@+id/how_it_works_space\"\n                    android:layout_width=\"match_parent\"\n                    android:layout_height=\"wrap_content\"\n                    android:minHeight=\"8dp\"\n                    app:layout_constraintBottom_toTopOf=\"@id/how_it_works_write_email\"\n                    app:layout_constraintTop_toBottomOf=\"@id/how_it_works_support_content\"\n                    />\n\n                <com.google.android.material.button.MaterialButton\n                    android:id=\"@+id/how_it_works_write_email\"\n                    android:layout_width=\"wrap_content\"\n                    android:layout_height=\"wrap_content\"\n                    android:layout_marginTop=\"16dp\"\n                    android:layout_marginBottom=\"8dp\"\n                    android:onClick=\"@{() -> vm.writeEmail()}\"\n                    android:text=\"@string/how_it_works_write_email\"\n                    app:layout_constraintBottom_toTopOf=\"@id/how_it_works_close\"\n                    app:layout_constraintEnd_toEndOf=\"parent\"\n                    app:layout_constraintStart_toStartOf=\"parent\" />\n\n                <com.google.android.material.button.MaterialButton\n                    android:id=\"@+id/how_it_works_close\"\n                    style=\"?materialButtonOutlinedStyle\"\n                    android:layout_width=\"wrap_content\"\n                    android:layout_height=\"wrap_content\"\n                    android:layout_marginBottom=\"16dp\"\n                    android:onClick=\"@{() -> vm.close()}\"\n                    android:text=\"@string/how_it_works_close\"\n                    app:layout_constraintBottom_toBottomOf=\"parent\"\n                    app:layout_constraintEnd_toEndOf=\"parent\"\n                    app:layout_constraintStart_toStartOf=\"parent\" />\n\n            </androidx.constraintlayout.widget.ConstraintLayout>\n        </ScrollView>\n\n\n    </androidx.constraintlayout.widget.ConstraintLayout>\n</layout>"
  },
  {
    "path": "app/src/main/res/layout/fragment_my_data.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<layout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    xmlns:tools=\"http://schemas.android.com/tools\">\n\n    <data>\n\n        <variable\n            name=\"vm\"\n            type=\"cz.covid19cz.erouska.ui.mydata.MyDataVM\" />\n\n        <import type=\"java.text.NumberFormat\" />\n\n        <import type=\"cz.covid19cz.erouska.utils.SignNumberFormat\" />\n    </data>\n\n    <androidx.swiperefreshlayout.widget.SwipeRefreshLayout\n        android:id=\"@+id/refresh_container\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\"\n        app:refreshing=\"@{vm.isLoading}\"\n        app:onRefreshListener=\"@{() -> vm.onRefresh()}\">\n\n        <ScrollView\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"match_parent\"\n            android:fillViewport=\"true\">\n\n            <androidx.constraintlayout.widget.ConstraintLayout\n                android:layout_width=\"match_parent\"\n                android:layout_height=\"wrap_content\">\n\n                <TextView\n                    android:id=\"@+id/measures_info_text\"\n                    android:layout_width=\"0dp\"\n                    android:layout_height=\"wrap_content\"\n                    android:background=\"?selectableItemBackground\"\n                    android:gravity=\"center_vertical|start\"\n                    android:paddingStart=\"16dp\"\n                    android:paddingTop=\"8dp\"\n                    android:paddingEnd=\"16dp\"\n                    android:paddingBottom=\"8dp\"\n                    android:text=\"@string/my_data_current_measures_title\"\n                    android:textAppearance=\"@style/Erouska.Caption\"\n                    app:layout_constraintEnd_toEndOf=\"parent\"\n                    app:layout_constraintStart_toStartOf=\"parent\"\n                    app:layout_constraintTop_toTopOf=\"parent\"\n                    tools:text=\"@string/my_data_current_measures_title\"\n                    />\n\n                <TextView\n                    android:id=\"@+id/measures_text\"\n                    android:layout_width=\"0dp\"\n                    android:layout_height=\"wrap_content\"\n                    android:background=\"?selectableItemBackground\"\n                    android:clickable=\"true\"\n                    android:drawablePadding=\"16dp\"\n                    android:focusable=\"true\"\n                    android:gravity=\"center_vertical|start\"\n                    android:paddingStart=\"16dp\"\n                    android:paddingTop=\"24dp\"\n                    android:paddingEnd=\"16dp\"\n                    android:paddingBottom=\"24dp\"\n                    android:text=\"@string/my_data_current_measures\"\n                    android:textAppearance=\"@style/Erouska.Item\"\n                    app:layout_constraintEnd_toEndOf=\"parent\"\n                    app:layout_constraintStart_toStartOf=\"parent\"\n                    app:layout_constraintTop_toBottomOf=\"@+id/measures_info_text\"\n                    app:drawableStartCompat=\"@drawable/ic_restriction\" />\n\n                <View\n                    android:id=\"@+id/divider_top\"\n                    style=\"@style/Divider\"\n                    app:layout_constraintStart_toStartOf=\"parent\"\n                    app:layout_constraintTop_toBottomOf=\"@id/measures_text\" />\n\n                <TextView\n                    android:id=\"@+id/vaccinations_text\"\n                    android:layout_width=\"0dp\"\n                    android:layout_height=\"wrap_content\"\n                    android:background=\"?selectableItemBackground\"\n                    android:gravity=\"center_vertical|start\"\n                    android:paddingStart=\"16dp\"\n                    android:paddingTop=\"8dp\"\n                    android:paddingEnd=\"16dp\"\n                    android:paddingBottom=\"8dp\"\n                    android:text=\"@string/my_data_vaccination\"\n                    android:textAppearance=\"@style/Erouska.Caption\"\n                    app:layout_constraintEnd_toEndOf=\"parent\"\n                    app:layout_constraintStart_toStartOf=\"parent\"\n                    app:layout_constraintTop_toBottomOf=\"@id/divider_top\" />\n\n                <cz.covid19cz.erouska.ui.mydata.CaseItemView\n                    android:id=\"@+id/vaccinations\"\n                    android:layout_width=\"0dp\"\n                    android:layout_height=\"wrap_content\"\n                    android:padding=\"16dp\"\n                    app:case_icon=\"@{@drawable/ic_vacc}\"\n                    app:case_subtitle=\"@{String.format(@string/my_data_for_day, SignNumberFormat.format(vm.vaccinationsIncrease), vm.vaccinationsIncreaseDate)}\"\n                    app:case_title=\"@{String.format(@string/my_data_vaccinations, NumberFormat.getInstance().format(vm.vaccinationsTotal))}\"\n                    app:layout_constraintEnd_toEndOf=\"parent\"\n                    app:layout_constraintStart_toStartOf=\"parent\"\n                    app:layout_constraintTop_toBottomOf=\"@id/vaccinations_text\" />\n\n                <View\n                    style=\"@style/Divider\"\n                    android:layout_marginStart=\"60dp\"\n                    app:layout_constraintStart_toStartOf=\"parent\"\n                    app:layout_constraintTop_toBottomOf=\"@id/tests\" />\n\n                <cz.covid19cz.erouska.ui.mydata.CaseItemView\n                    android:id=\"@+id/vaccination_first_dose\"\n                    android:layout_width=\"0dp\"\n                    android:layout_height=\"wrap_content\"\n                    android:padding=\"16dp\"\n                    app:case_icon=\"@{@drawable/ic_injection_first}\"\n                    app:case_subtitle=\"@{String.format(@string/my_data_for_day, SignNumberFormat.format(vm.firstDoseIncrease), vm.dailyDosesDate)}\"\n                    app:case_title=\"@{String.format(@string/my_data_first_dose, NumberFormat.getInstance().format(vm.firstDoseTotal))}\"\n                    app:layout_constraintEnd_toEndOf=\"parent\"\n                    app:layout_constraintStart_toStartOf=\"parent\"\n                    app:layout_constraintTop_toBottomOf=\"@id/vaccinations\" />\n\n                <View\n                    style=\"@style/Divider\"\n                    android:layout_marginStart=\"60dp\"\n                    app:layout_constraintStart_toStartOf=\"parent\"\n                    app:layout_constraintTop_toBottomOf=\"@id/tests\" />\n\n                <cz.covid19cz.erouska.ui.mydata.CaseItemView\n                    android:id=\"@+id/vaccination_second_dose\"\n                    android:layout_width=\"0dp\"\n                    android:layout_height=\"wrap_content\"\n                    android:padding=\"16dp\"\n                    app:case_icon=\"@{@drawable/ic_injection_complete}\"\n                    app:case_subtitle=\"@{String.format(@string/my_data_for_day, SignNumberFormat.format(vm.secondDoseIncrease), vm.dailyDosesDate)}\"\n                    app:case_title=\"@{String.format(@string/my_data_second_dose, NumberFormat.getInstance().format(vm.secondDoseTotal))}\"\n                    app:layout_constraintEnd_toEndOf=\"parent\"\n                    app:layout_constraintStart_toStartOf=\"parent\"\n                    app:layout_constraintTop_toBottomOf=\"@id/vaccination_first_dose\" />\n\n                <View\n                    style=\"@style/Divider\"\n                    app:layout_constraintStart_toStartOf=\"parent\"\n                    app:layout_constraintTop_toBottomOf=\"@id/vaccination_second_dose\" />\n\n                <TextView\n                    android:id=\"@+id/situation_text\"\n                    android:layout_width=\"0dp\"\n                    android:layout_height=\"wrap_content\"\n                    android:background=\"?selectableItemBackground\"\n                    android:gravity=\"center_vertical|start\"\n                    android:paddingStart=\"16dp\"\n                    android:paddingTop=\"8dp\"\n                    android:paddingEnd=\"16dp\"\n                    android:paddingBottom=\"8dp\"\n                    android:text=\"@string/my_data_current_situation\"\n                    android:textAppearance=\"@style/Erouska.Caption\"\n                    app:layout_constraintEnd_toEndOf=\"parent\"\n                    app:layout_constraintStart_toStartOf=\"parent\"\n                    app:layout_constraintTop_toBottomOf=\"@id/vaccination_second_dose\" />\n\n                <cz.covid19cz.erouska.ui.mydata.CaseItemView\n                    android:id=\"@+id/tests\"\n                    android:layout_width=\"0dp\"\n                    android:layout_height=\"wrap_content\"\n                    android:padding=\"16dp\"\n                    app:case_icon=\"@{@drawable/ic_test}\"\n                    app:case_subtitle=\"@{String.format(@string/my_data_for_day, SignNumberFormat.format(vm.testsIncrease), vm.testsIncreaseDate)}\"\n                    app:case_title=\"@{String.format(@string/my_data_tests, NumberFormat.getInstance().format(vm.testsTotal))}\"\n                    app:layout_constraintEnd_toEndOf=\"parent\"\n                    app:layout_constraintStart_toStartOf=\"parent\"\n                    app:layout_constraintTop_toBottomOf=\"@id/situation_text\" />\n\n                <View\n                    style=\"@style/Divider\"\n                    android:layout_marginStart=\"60dp\"\n                    app:layout_constraintStart_toStartOf=\"parent\"\n                    app:layout_constraintTop_toBottomOf=\"@id/tests\" />\n\n                <cz.covid19cz.erouska.ui.mydata.CaseItemView\n                    android:id=\"@+id/antigen_tests\"\n                    android:layout_width=\"0dp\"\n                    android:layout_height=\"wrap_content\"\n                    android:padding=\"16dp\"\n                    app:case_icon=\"@{@drawable/ic_antigen}\"\n                    app:case_subtitle=\"@{String.format(@string/my_data_for_day, SignNumberFormat.format(vm.antigenTestsIncrease), vm.antigenTestsIncreaseDate)}\"\n                    app:case_title=\"@{String.format(@string/my_data_antigen_tests, NumberFormat.getInstance().format(vm.antigenTestsTotal))}\"\n                    app:layout_constraintEnd_toEndOf=\"parent\"\n                    app:layout_constraintStart_toStartOf=\"parent\"\n                    app:layout_constraintTop_toBottomOf=\"@id/tests\" />\n\n                <View\n                    style=\"@style/Divider\"\n                    android:layout_marginStart=\"60dp\"\n                    app:layout_constraintStart_toStartOf=\"parent\"\n                    app:layout_constraintTop_toBottomOf=\"@id/antigen_tests\" />\n\n                <cz.covid19cz.erouska.ui.mydata.CaseItemView\n                    android:id=\"@+id/ack_cases\"\n                    android:layout_width=\"0dp\"\n                    android:layout_height=\"wrap_content\"\n                    android:padding=\"16dp\"\n                    app:case_icon=\"@{@drawable/ic_ack_case}\"\n                    app:case_subtitle=\"@{String.format(@string/my_data_for_day, SignNumberFormat.format(vm.confirmedCasesIncrease), vm.confirmedCasesIncreaseDate)}\"\n                    app:case_title=\"@{String.format(@string/my_data_ack_cases, NumberFormat.getInstance().format(vm.confirmedCasesTotal))}\"\n                    app:layout_constraintEnd_toEndOf=\"parent\"\n                    app:layout_constraintStart_toStartOf=\"parent\"\n                    app:layout_constraintTop_toBottomOf=\"@id/antigen_tests\" />\n\n                <View\n                    style=\"@style/Divider\"\n                    android:layout_marginStart=\"60dp\"\n                    app:layout_constraintStart_toStartOf=\"parent\"\n                    app:layout_constraintTop_toBottomOf=\"@id/ack_cases\" />\n\n                <cz.covid19cz.erouska.ui.mydata.CaseItemView\n                    android:id=\"@+id/act_cases\"\n                    android:layout_width=\"0dp\"\n                    android:layout_height=\"wrap_content\"\n                    android:padding=\"16dp\"\n                    app:case_icon=\"@{@drawable/ic_act_case}\"\n                    app:case_title=\"@{String.format(@string/my_data_act_cases, NumberFormat.getInstance().format(vm.activeCasesTotal))}\"\n                    app:layout_constraintEnd_toEndOf=\"parent\"\n                    app:layout_constraintStart_toStartOf=\"parent\"\n                    app:layout_constraintTop_toBottomOf=\"@id/ack_cases\" />\n\n                <View\n                    style=\"@style/Divider\"\n                    android:layout_marginStart=\"60dp\"\n                    app:layout_constraintStart_toStartOf=\"parent\"\n                    app:layout_constraintTop_toBottomOf=\"@id/act_cases\" />\n\n\n                <cz.covid19cz.erouska.ui.mydata.CaseItemView\n                    android:id=\"@+id/cured\"\n                    android:layout_width=\"0dp\"\n                    android:layout_height=\"wrap_content\"\n                    android:padding=\"16dp\"\n                    app:case_icon=\"@{@drawable/ic_cured}\"\n                    app:case_title=\"@{String.format(@string/my_data_cured, NumberFormat.getInstance().format(vm.curedTotal))}\"\n                    app:layout_constraintEnd_toEndOf=\"parent\"\n                    app:layout_constraintStart_toStartOf=\"parent\"\n                    app:layout_constraintTop_toBottomOf=\"@id/act_cases\" />\n\n                <View\n                    style=\"@style/Divider\"\n                    android:layout_marginStart=\"60dp\"\n                    app:layout_constraintStart_toStartOf=\"parent\"\n                    app:layout_constraintTop_toBottomOf=\"@id/cured\" />\n\n                <cz.covid19cz.erouska.ui.mydata.CaseItemView\n                    android:id=\"@+id/death_toll\"\n                    android:layout_width=\"0dp\"\n                    android:layout_height=\"wrap_content\"\n                    android:padding=\"16dp\"\n                    app:case_icon=\"@{@drawable/ic_death_toll}\"\n                    app:case_title=\"@{String.format(@string/my_data_death_toll, NumberFormat.getInstance().format(vm.deceasedTotal))}\"\n                    app:layout_constraintEnd_toEndOf=\"parent\"\n                    app:layout_constraintStart_toStartOf=\"parent\"\n                    app:layout_constraintTop_toBottomOf=\"@id/cured\" />\n\n                <View\n                    style=\"@style/Divider\"\n                    android:layout_marginStart=\"60dp\"\n                    app:layout_constraintStart_toStartOf=\"parent\"\n                    app:layout_constraintTop_toBottomOf=\"@id/death_toll\" />\n\n                <cz.covid19cz.erouska.ui.mydata.CaseItemView\n                    android:id=\"@+id/hospitalized\"\n                    android:layout_width=\"0dp\"\n                    android:layout_height=\"wrap_content\"\n                    android:padding=\"16dp\"\n                    app:case_icon=\"@{@drawable/ic_hospitalized}\"\n                    app:case_title=\"@{String.format(@string/my_data_hospitalized, NumberFormat.getInstance().format(vm.currentlyHospitalizedTotal))}\"\n                    app:layout_constraintEnd_toEndOf=\"parent\"\n                    app:layout_constraintStart_toStartOf=\"parent\"\n                    app:layout_constraintTop_toBottomOf=\"@id/death_toll\" />\n\n                <View\n                    style=\"@style/Divider\"\n                    android:layout_marginStart=\"60dp\"\n                    app:layout_constraintStart_toStartOf=\"parent\"\n                    app:layout_constraintTop_toBottomOf=\"@id/hospitalized\" />\n\n                <TextView\n                    android:id=\"@+id/stats_text\"\n                    android:layout_width=\"0dp\"\n                    android:layout_height=\"wrap_content\"\n                    android:gravity=\"center_vertical|start\"\n                    android:paddingStart=\"16dp\"\n                    android:paddingTop=\"8dp\"\n                    android:paddingEnd=\"16dp\"\n                    android:paddingBottom=\"8dp\"\n                    android:text=\"@string/my_data_stats\"\n                    android:textAppearance=\"@style/TextAppearance.MaterialComponents.Caption\"\n                    android:textColor=\"@color/textColorSecondary\"\n                    android:textSize=\"14sp\"\n                    app:layout_constraintEnd_toEndOf=\"parent\"\n                    app:layout_constraintStart_toStartOf=\"parent\"\n                    app:layout_constraintTop_toBottomOf=\"@id/hospitalized\" />\n\n                <cz.covid19cz.erouska.ui.mydata.CaseItemView\n                    android:id=\"@+id/activated_apps\"\n                    android:layout_width=\"0dp\"\n                    android:layout_height=\"wrap_content\"\n                    android:padding=\"16dp\"\n                    app:case_icon=\"@{@drawable/ic_face_mask}\"\n                    app:case_subtitle=\"@{String.format(@string/my_data_for_day, SignNumberFormat.format(vm.activationsYesterday), vm.lastMetricsIncreaseDate)}\"\n                    app:case_title=\"@{String.format(@string/my_data_activated_apps, NumberFormat.getInstance().format(vm.activationsTotal))}\"\n                    app:layout_constraintEnd_toEndOf=\"parent\"\n                    app:layout_constraintStart_toStartOf=\"parent\"\n                    app:layout_constraintTop_toBottomOf=\"@id/stats_text\" />\n\n                <View\n                    style=\"@style/Divider\"\n                    android:layout_marginStart=\"60dp\"\n                    app:layout_constraintStart_toStartOf=\"parent\"\n                    app:layout_constraintTop_toBottomOf=\"@id/activated_apps\" />\n\n                <cz.covid19cz.erouska.ui.mydata.CaseItemView\n                    android:id=\"@+id/notifications_sent\"\n                    android:layout_width=\"0dp\"\n                    android:layout_height=\"wrap_content\"\n                    android:padding=\"16dp\"\n                    app:case_icon=\"@{@drawable/ic_notifications_sent}\"\n                    app:case_subtitle=\"@{String.format(@string/my_data_for_day, SignNumberFormat.format(vm.keyPublishersYesterday), vm.lastMetricsIncreaseDate)}\"\n                    app:case_title=\"@{String.format(@string/my_data_notifications_sent, NumberFormat.getInstance().format(vm.keyPublishersTotal))}\"\n                    app:layout_constraintEnd_toEndOf=\"parent\"\n                    app:layout_constraintStart_toStartOf=\"parent\"\n                    app:layout_constraintTop_toBottomOf=\"@id/activated_apps\" />\n\n                <View\n                    style=\"@style/Divider\"\n                    android:layout_marginStart=\"60dp\"\n                    app:layout_constraintStart_toStartOf=\"parent\"\n                    app:layout_constraintTop_toBottomOf=\"@id/notifications_sent\" />\n\n                <cz.covid19cz.erouska.ui.mydata.CaseItemView\n                    android:id=\"@+id/notifications_shown\"\n                    android:layout_width=\"0dp\"\n                    android:layout_height=\"wrap_content\"\n                    android:padding=\"16dp\"\n                    app:case_icon=\"@{@drawable/ic_notifications_shown}\"\n                    app:case_subtitle=\"@{String.format(@string/my_data_for_day, SignNumberFormat.format(vm.notificationsYesterday), vm.lastMetricsIncreaseDate)}\"\n                    app:case_title=\"@{String.format(@string/my_data_notifications_shown, NumberFormat.getInstance().format(vm.notificationsTotal))}\"\n                    app:layout_constraintEnd_toEndOf=\"parent\"\n                    app:layout_constraintStart_toStartOf=\"parent\"\n                    app:layout_constraintTop_toBottomOf=\"@id/notifications_sent\" />\n\n            </androidx.constraintlayout.widget.ConstraintLayout>\n        </ScrollView>\n    </androidx.swiperefreshlayout.widget.SwipeRefreshLayout>\n</layout>"
  },
  {
    "path": "app/src/main/res/layout/fragment_no_verification_code.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<layout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    xmlns:tools=\"http://schemas.android.com/tools\">\n\n    <data>\n\n        <variable\n            name=\"vm\"\n            type=\"cz.covid19cz.erouska.ui.noverificationcode.NoVerificationCodeVM\" />\n\n    </data>\n\n    <ScrollView\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\"\n        android:fillViewport=\"true\">\n\n        <androidx.constraintlayout.widget.ConstraintLayout\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"wrap_content\">\n\n            <TextView\n                android:id=\"@+id/no_verification_code_body\"\n                android:layout_width=\"match_parent\"\n                android:layout_height=\"wrap_content\"\n                android:paddingStart=\"16dp\"\n                android:paddingTop=\"16dp\"\n                android:paddingEnd=\"16dp\"\n                android:paddingBottom=\"8dp\"\n                tools:text=\"@string/no_verification_body\"\n                android:textAlignment=\"textStart\"\n                android:textAppearance=\"@style/Erouska.Body\"\n                app:layout_constraintEnd_toEndOf=\"parent\"\n                app:layout_constraintStart_toStartOf=\"parent\"\n                app:layout_constraintTop_toTopOf=\"parent\" />\n\n            <com.google.android.material.button.MaterialButton\n                android:id=\"@+id/email_button\"\n                android:layout_width=\"wrap_content\"\n                android:layout_height=\"wrap_content\"\n                android:layout_marginStart=\"16dp\"\n                android:layout_marginTop=\"8dp\"\n                android:layout_marginEnd=\"16dp\"\n                android:onClick=\"@{() -> vm.writeEmail()}\"\n                android:text=\"@string/email_button\"\n                app:layout_constraintEnd_toEndOf=\"parent\"\n                app:layout_constraintStart_toStartOf=\"parent\"\n                app:layout_constraintTop_toBottomOf=\"@+id/no_verification_code_body\" />\n\n            <View\n                android:id=\"@+id/divider\"\n                style=\"@style/Divider\"\n                android:layout_marginTop=\"16dp\"\n                app:layout_constraintStart_toStartOf=\"parent\"\n                app:layout_constraintTop_toBottomOf=\"@id/email_button\" />\n\n            <TextView\n                android:id=\"@+id/no_verification_code_caption\"\n                android:layout_width=\"match_parent\"\n                android:layout_height=\"wrap_content\"\n                android:paddingStart=\"16dp\"\n                android:paddingTop=\"16dp\"\n                android:paddingEnd=\"16dp\"\n                android:paddingBottom=\"16dp\"\n                tools:text=\"@string/no_verification_caption\"\n                android:textAlignment=\"textStart\"\n                android:textAppearance=\"@style/Erouska.Caption\"\n                app:layout_constraintEnd_toEndOf=\"parent\"\n                app:layout_constraintStart_toStartOf=\"parent\"\n                app:layout_constraintTop_toBottomOf=\"@id/divider\" />\n\n\n        </androidx.constraintlayout.widget.ConstraintLayout>\n    </ScrollView>\n</layout>"
  },
  {
    "path": "app/src/main/res/layout/fragment_play_services_update.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<layout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\">\n\n    <data>\n\n        <variable\n            name=\"vm\"\n            type=\"cz.covid19cz.erouska.ui.update.playservices.UpdatePlayServicesVM\" />\n    </data>\n\n    <androidx.constraintlayout.widget.ConstraintLayout\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\">\n\n        <ScrollView\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"match_parent\"\n            android:fillViewport=\"true\"\n            app:layout_constraintBottom_toBottomOf=\"parent\"\n            app:layout_constraintTop_toTopOf=\"parent\">\n\n            <androidx.constraintlayout.widget.ConstraintLayout\n                android:layout_width=\"match_parent\"\n                android:layout_height=\"wrap_content\"\n                android:padding=\"@dimen/fragment_padding\">\n\n                <ImageView\n                    android:id=\"@+id/services_img\"\n                    android:layout_width=\"wrap_content\"\n                    android:layout_height=\"wrap_content\"\n                    android:src=\"@drawable/ic_google_play_services\"\n                    app:layout_constraintEnd_toEndOf=\"parent\"\n                    app:layout_constraintStart_toStartOf=\"parent\"\n                    app:layout_constraintTop_toTopOf=\"parent\" />\n\n                <TextView\n                    android:id=\"@+id/services_title\"\n                    android:layout_width=\"wrap_content\"\n                    android:layout_height=\"wrap_content\"\n                    android:layout_marginTop=\"16dp\"\n                    android:text=\"@string/play_services_title\"\n                    android:textAlignment=\"center\"\n                    android:textAppearance=\"@style/Erouska.Title\"\n                    app:layout_constraintEnd_toEndOf=\"parent\"\n                    app:layout_constraintStart_toStartOf=\"parent\"\n                    app:layout_constraintTop_toBottomOf=\"@id/services_img\" />\n\n                <TextView\n                    android:id=\"@+id/services_content\"\n                    android:layout_width=\"wrap_content\"\n                    android:layout_height=\"wrap_content\"\n                    android:layout_marginTop=\"8dp\"\n                    android:paddingBottom=\"68dp\"\n                    android:gravity=\"center_horizontal\"\n                    android:text=\"@string/play_services_content\"\n                    android:textAppearance=\"@style/Erouska.Body\"\n                    app:layout_constraintEnd_toEndOf=\"parent\"\n                    app:layout_constraintStart_toStartOf=\"parent\"\n                    app:layout_constraintTop_toBottomOf=\"@id/services_title\" />\n\n            </androidx.constraintlayout.widget.ConstraintLayout>\n        </ScrollView>\n\n        <com.google.android.material.button.MaterialButton\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:layout_marginTop=\"16dp\"\n            android:layout_marginBottom=\"16dp\"\n            android:onClick=\"@{ () -> vm.openPlayStore() }\"\n            android:text=\"@string/play_services_update_button\"\n            app:layout_constraintBottom_toBottomOf=\"parent\"\n            app:layout_constraintEnd_toEndOf=\"parent\"\n            app:layout_constraintStart_toStartOf=\"parent\" />\n\n    </androidx.constraintlayout.widget.ConstraintLayout>\n</layout>"
  },
  {
    "path": "app/src/main/res/layout/fragment_publish_success.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<layout xmlns:tools=\"http://schemas.android.com/tools\"\n    xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\">\n    <data>\n        <variable\n            name=\"vm\"\n            type=\"cz.covid19cz.erouska.ui.publishsuccess.PublishSuccessVM\" />\n    </data>\n\n<androidx.constraintlayout.widget.ConstraintLayout\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\"\n    android:padding=\"@dimen/fragment_padding\">\n\n    \n    <ImageView\n        android:id=\"@+id/ic_success\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:src=\"@drawable/ic_shortcut_resume\"\n        app:layout_constraintEnd_toEndOf=\"parent\"\n        app:layout_constraintStart_toStartOf=\"parent\"\n        app:layout_constraintTop_toTopOf=\"parent\" />\n\n    <TextView\n        android:id=\"@+id/success_header\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:layout_marginTop=\"16dp\"\n        android:text=\"@{vm.enoughKeys ? @string/send_data_success_header : @string/send_data_success_body_1}\"\n        tools:text=\"@string/send_data_success_header\"\n        android:textAlignment=\"center\"\n        android:textAppearance=\"@style/Erouska.Title.Active\"\n        app:layout_constraintEnd_toEndOf=\"parent\"\n        app:layout_constraintStart_toStartOf=\"parent\"\n        app:layout_constraintTop_toBottomOf=\"@id/ic_success\" />\n\n    <TextView\n        android:id=\"@+id/success_body_1\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:layout_marginTop=\"16dp\"\n        android:text=\"@{vm.enoughKeys ? @string/send_data_success_body_1 : @string/send_data_success_body_1_not_enough_keys}\"\n        tools:text=\"@string/send_data_success_body_1\"\n        android:textAppearance=\"@style/Erouska.Body\"\n        app:layout_constraintEnd_toEndOf=\"parent\"\n        app:layout_constraintStart_toStartOf=\"parent\"\n        app:layout_constraintTop_toBottomOf=\"@id/success_header\" />\n\n    <TextView\n        android:id=\"@+id/success_body_2\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:layout_marginTop=\"8dp\"\n        android:text=\"@string/send_data_success_body_2\"\n        android:textAppearance=\"@style/Erouska.Body\"\n        app:layout_constraintEnd_toEndOf=\"parent\"\n        app:layout_constraintStart_toStartOf=\"parent\"\n        app:layout_constraintTop_toBottomOf=\"@id/success_body_1\" />\n\n    <TextView\n        android:id=\"@+id/success_body_3\"\n        android:layout_width=\"0dp\"\n        android:layout_height=\"wrap_content\"\n        android:layout_marginTop=\"8dp\"\n        android:text=\"@string/send_data_success_body_3\"\n        android:textAppearance=\"@style/Erouska.Body\"\n        app:layout_constraintEnd_toEndOf=\"parent\"\n        app:layout_constraintStart_toStartOf=\"parent\"\n        app:layout_constraintTop_toBottomOf=\"@id/success_body_2\" />\n\n    <com.google.android.material.button.MaterialButton\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:text=\"@string/send_data_close\"\n        android:onClick=\"@{() -> vm.close()}\"\n        android:layout_marginTop=\"16dp\"\n        app:layout_constraintEnd_toEndOf=\"parent\"\n        app:layout_constraintStart_toStartOf=\"parent\"\n        app:layout_constraintTop_toBottomOf=\"@+id/success_body_3\" />\n\n</androidx.constraintlayout.widget.ConstraintLayout>\n</layout>"
  },
  {
    "path": "app/src/main/res/layout/fragment_recent_exposures.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<layout\n    xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    xmlns:tools=\"http://schemas.android.com/tools\">\n\n    <data>\n        <variable\n            name=\"vm\"\n            type=\"cz.covid19cz.erouska.ui.recentexposures.RecentExposuresVM\" />\n    </data>\n\n    <androidx.constraintlayout.widget.ConstraintLayout\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\">\n\n        <androidx.recyclerview.widget.RecyclerView\n            android:id=\"@+id/exposures_list\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"match_parent\"\n            app:layoutManager=\"androidx.recyclerview.widget.LinearLayoutManager\"\n            app:layout_constraintEnd_toEndOf=\"parent\"\n            app:layout_constraintStart_toStartOf=\"parent\"\n            app:layout_constraintTop_toTopOf=\"parent\"\n            tools:listitem=\"@layout/item_recent_exposure\"\n            app:items=\"@{vm.items}\"\n            app:layoutStrategy=\"@{vm.layoutStrategy}\"\n            app:viewModel=\"@{vm}\"\n            app:visibleOrGone=\"@{!vm.items.empty}\" />\n\n        <TextView\n            android:id=\"@+id/empty_view\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:gravity=\"center\"\n            android:textAppearance=\"@style/Erouska.Body\"\n            android:text=\"@string/no_recent_exposures\"\n            tools:visibility=\"visible\"\n            app:visibleOrGone=\"@{vm.items.empty}\"\n            app:layout_constraintBottom_toBottomOf=\"parent\"\n            app:layout_constraintEnd_toEndOf=\"parent\"\n            app:layout_constraintStart_toStartOf=\"parent\"\n            app:layout_constraintTop_toTopOf=\"parent\"/>\n\n    </androidx.constraintlayout.widget.ConstraintLayout>\n</layout>"
  },
  {
    "path": "app/src/main/res/layout/fragment_sandbox.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<layout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\">\n\n    <data>\n\n        <variable\n            name=\"vm\"\n            type=\"cz.covid19cz.erouska.ui.sandbox.SandboxVM\" />\n\n        <variable\n            name=\"lifecycle\"\n            type=\"androidx.lifecycle.LifecycleOwner\" />\n    </data>\n\n    <ScrollView\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\">\n\n        <LinearLayout\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"wrap_content\"\n            android:orientation=\"vertical\">\n\n            <LinearLayout\n                android:layout_width=\"match_parent\"\n                android:layout_height=\"wrap_content\"\n                android:padding=\"16dp\"\n                android:orientation=\"horizontal\">\n\n                <com.google.android.material.button.MaterialButton\n                    android:layout_width=\"wrap_content\"\n                    android:layout_height=\"wrap_content\"\n                    android:onClick=\"@{ () -> vm.navigateToConfig() }\"\n                    android:text=\"Config\" />\n\n                <com.google.android.material.button.MaterialButton\n                    android:layout_width=\"wrap_content\"\n                    android:layout_height=\"wrap_content\"\n                    android:layout_marginStart=\"8dp\"\n                    android:onClick=\"@{() -> vm.navigateToData()}\"\n                    android:text=\"Data\" />\n            </LinearLayout>\n\n            <androidx.cardview.widget.CardView\n                android:layout_width=\"match_parent\"\n                android:layout_height=\"wrap_content\"\n                android:layout_margin=\"8dp\"\n                app:cardElevation=\"4dp\"\n                app:contentPadding=\"16dp\">\n\n                <LinearLayout\n                    android:layout_width=\"match_parent\"\n                    android:layout_height=\"wrap_content\"\n                    android:orientation=\"vertical\">\n\n                    <TextView\n                        android:id=\"@+id/sandbox_new_files_title\"\n                        android:layout_width=\"wrap_content\"\n                        android:layout_height=\"wrap_content\"\n                        android:layout_marginTop=\"8dp\"\n                        android:text=\"NEW FILES\"\n                        android:textAppearance=\"@style/TextAppearance.MaterialComponents.Body1\"\n                        android:textStyle=\"bold\"\n                        app:visibleOrGone=\"@{vm.filesString != null}\" />\n\n                    <TextView\n                        android:id=\"@+id/sandbox_new_files\"\n                        android:layout_width=\"wrap_content\"\n                        android:layout_height=\"wrap_content\"\n                        android:text=\"@{vm.filesString}\"\n                        android:textAppearance=\"@style/TextAppearance.MaterialComponents.Body2\"\n                        app:visibleOrGone=\"@{vm.filesString != null}\" />\n\n                    <LinearLayout\n                        android:layout_width=\"match_parent\"\n                        android:layout_height=\"wrap_content\"\n                        android:orientation=\"horizontal\">\n\n                        <com.google.android.material.button.MaterialButton\n                            android:layout_width=\"wrap_content\"\n                            android:layout_height=\"wrap_content\"\n                            android:onClick=\"@{() -> vm.downloadKeyExport()}\"\n                            android:text=\"Download keys\" />\n\n                        <com.google.android.material.button.MaterialButton\n                            android:layout_width=\"wrap_content\"\n                            android:layout_height=\"wrap_content\"\n                            android:layout_marginStart=\"8dp\"\n                            android:onClick=\"@{() -> vm.provideDiagnosisKeys()}\"\n                            android:text=\"Import keys\" />\n\n                    </LinearLayout>\n\n                    <LinearLayout\n                        android:layout_width=\"match_parent\"\n                        android:layout_height=\"wrap_content\"\n                        android:orientation=\"horizontal\">\n\n                        <com.google.android.material.button.MaterialButton\n                            android:layout_width=\"wrap_content\"\n                            android:layout_height=\"wrap_content\"\n                            android:onClick=\"@{() -> vm.deleteKeys()}\"\n                            android:text=\"Delete all files\" />\n                    </LinearLayout>\n\n                </LinearLayout>\n            </androidx.cardview.widget.CardView>\n\n\n            <androidx.cardview.widget.CardView\n                android:layout_width=\"match_parent\"\n                android:layout_height=\"wrap_content\"\n                android:layout_margin=\"8dp\"\n                app:cardElevation=\"4dp\"\n                app:contentPadding=\"16dp\">\n\n                <LinearLayout\n                    android:layout_width=\"match_parent\"\n                    android:layout_height=\"wrap_content\"\n                    android:orientation=\"vertical\">\n\n                    <TextView\n                        android:layout_width=\"match_parent\"\n                        android:layout_height=\"wrap_content\"\n                        android:text=\"LOCAL KEYS\"\n                        android:textAppearance=\"@style/TextAppearance.MaterialComponents.Body1\"\n                        android:textStyle=\"bold\" />\n\n                    <androidx.recyclerview.widget.RecyclerView\n                        android:layout_width=\"match_parent\"\n                        android:layout_height=\"150dp\"\n                        app:items=\"@{vm.teks}\"\n                        app:layoutId=\"@{@layout/item_tek}\"\n                        app:layoutManager=\"androidx.recyclerview.widget.LinearLayoutManager\"\n                        app:lifecycle=\"@{lifecycle}\"\n                        app:viewModel=\"@{vm}\" />\n\n                    <com.google.android.material.textfield.TextInputLayout\n                        android:layout_width=\"match_parent\"\n                        android:layout_height=\"wrap_content\">\n\n                        <com.google.android.material.textfield.TextInputEditText\n                            android:layout_width=\"match_parent\"\n                            android:layout_height=\"wrap_content\"\n                            android:hint=\"Verification Code\"\n                            android:inputType=\"number\"\n                            android:lines=\"1\"\n                            android:maxLength=\"8\"\n                            android:text=\"@={vm.code}\" />\n\n                    </com.google.android.material.textfield.TextInputLayout>\n\n                    <com.google.android.material.button.MaterialButton\n                        android:layout_width=\"wrap_content\"\n                        android:layout_height=\"wrap_content\"\n                        android:onClick=\"@{() -> vm.reportExposureWithVerification(vm.code)}\"\n                        android:text=\"Upload keys (with verification)\" />\n\n                </LinearLayout>\n            </androidx.cardview.widget.CardView>\n\n        </LinearLayout>\n    </ScrollView>\n</layout>"
  },
  {
    "path": "app/src/main/res/layout/fragment_sandbox_config.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<layout xmlns:app=\"http://schemas.android.com/apk/res-auto\">\n\n    <data>\n\n        <variable\n            name=\"vm\"\n            type=\"cz.covid19cz.erouska.ui.sandbox.SandboxConfigVM\" />\n    </data>\n\n    <ScrollView xmlns:android=\"http://schemas.android.com/apk/res/android\"\n        xmlns:tools=\"http://schemas.android.com/tools\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\">\n\n        <LinearLayout\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"wrap_content\"\n            android:orientation=\"vertical\"\n            android:padding=\"16dp\"\n            tools:context=\"cz.covid19cz.erouska.ui.sandbox.SandboxConfigFragment\">\n\n            <include\n                layout=\"@layout/layout_sandbox_config_values\"\n                android:layout_width=\"match_parent\"\n                android:layout_height=\"wrap_content\"\n                app:item=\"@{vm.attenuationBucketThresholdDb}\" />\n\n            <include\n                layout=\"@layout/layout_sandbox_config_values\"\n                android:layout_width=\"match_parent\"\n                android:layout_height=\"wrap_content\"\n                app:item=\"@{vm.attenuationBucketWeights}\" />\n\n            <include\n                layout=\"@layout/layout_sandbox_config_values\"\n                android:layout_width=\"match_parent\"\n                android:layout_height=\"wrap_content\"\n                app:item=\"@{vm.reportTypeWeights}\" />\n\n            <include\n                layout=\"@layout/layout_sandbox_config_values\"\n                android:layout_width=\"match_parent\"\n                android:layout_height=\"wrap_content\"\n                app:item=\"@{vm.infectiousnessWeights}\" />\n\n            <include\n                layout=\"@layout/layout_sandbox_config_values\"\n                android:layout_width=\"match_parent\"\n                android:layout_height=\"wrap_content\"\n                app:item=\"@{vm.minimumWindowScore}\" />\n\n            <LinearLayout\n                android:layout_width=\"match_parent\"\n                android:layout_height=\"wrap_content\"\n                android:orientation=\"horizontal\">\n\n                <com.google.android.material.button.MaterialButton\n                    android:layout_width=\"wrap_content\"\n                    android:layout_height=\"wrap_content\"\n                    android:onClick=\"@{() -> vm.save()}\"\n                    android:text=\"Save\" />\n\n                <com.google.android.material.button.MaterialButton\n                    android:layout_width=\"wrap_content\"\n                    android:layout_height=\"wrap_content\"\n                    android:layout_marginStart=\"8dp\"\n                    android:onClick=\"@{() -> vm.useDefaults()}\"\n                    android:text=\"Use remote config\" />\n\n            </LinearLayout>\n\n        </LinearLayout>\n    </ScrollView>\n</layout>\n"
  },
  {
    "path": "app/src/main/res/layout/fragment_sandbox_data.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<layout xmlns:app=\"http://schemas.android.com/apk/res-auto\">\n\n    <data>\n\n        <variable\n            name=\"vm\"\n            type=\"cz.covid19cz.erouska.ui.sandbox.SandboxDataVM\" />\n\n        <variable\n            name=\"exposureWindowsLayoutStrategy\"\n            type=\"arch.adapter.RecyclerLayoutStrategy\" />\n    </data>\n\n    <LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n        xmlns:tools=\"http://schemas.android.com/tools\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\"\n        android:orientation=\"vertical\"\n        tools:context=\"cz.covid19cz.erouska.ui.sandbox.SandboxDataFragment\">\n\n        <TextView\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:textSize=\"16sp\"\n            android:textStyle=\"bold\"\n            android:textColor=\"#000\"\n            android:padding=\"16dp\"\n            style=\"Title\"\n            android:text=\"Daily summaries\"/>\n\n        <LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n            xmlns:tools=\"http://schemas.android.com/tools\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"wrap_content\"\n            android:orientation=\"horizontal\"\n            android:padding=\"8dp\">\n\n            <TextView\n                android:layout_width=\"0dp\"\n                android:layout_height=\"wrap_content\"\n                android:layout_weight=\"1\"\n                android:gravity=\"center\"\n                android:text=\"Date\"/>\n\n            <TextView\n                android:layout_width=\"0dp\"\n                android:layout_height=\"wrap_content\"\n                android:layout_weight=\"1\"\n                android:layout_marginStart=\"8dp\"\n                android:gravity=\"center\"\n                android:text=\"Max Score\"/>\n\n            <TextView\n                android:layout_width=\"0dp\"\n                android:layout_height=\"wrap_content\"\n                android:layout_weight=\"1\"\n                android:layout_marginStart=\"8dp\"\n                android:gravity=\"center\"\n                android:text=\"Score Sum\"/>\n\n            <TextView\n                android:layout_width=\"0dp\"\n                android:layout_height=\"wrap_content\"\n                android:layout_weight=\"1\"\n                android:layout_marginStart=\"8dp\"\n                android:gravity=\"center\"\n                android:text=\"Weighted Duration Sum\"/>\n\n        </LinearLayout>\n\n        <androidx.recyclerview.widget.RecyclerView\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"0dp\"\n            android:layout_weight=\"1\"\n            app:items=\"@{vm.dailySummaries}\"\n            app:layoutId=\"@{@layout/item_daily_summary}\"\n            app:viewModel=\"@{vm}\"\n            app:layoutManager=\"androidx.recyclerview.widget.LinearLayoutManager\"/>\n\n        <TextView\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:textSize=\"16sp\"\n            android:textStyle=\"bold\"\n            android:textColor=\"#000\"\n            android:padding=\"16dp\"\n            style=\"Title\"\n            android:text=\"Exposure Windows\"/>\n\n        <LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n            xmlns:tools=\"http://schemas.android.com/tools\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"wrap_content\"\n            android:orientation=\"horizontal\"\n            android:padding=\"8dp\">\n\n            <TextView\n                android:layout_width=\"0dp\"\n                android:layout_height=\"wrap_content\"\n                android:layout_weight=\"1\"\n                android:gravity=\"center\"\n                android:text=\"Date\"/>\n\n            <TextView\n                android:layout_width=\"0dp\"\n                android:layout_height=\"wrap_content\"\n                android:layout_weight=\"1\"\n                android:layout_marginStart=\"8dp\"\n                android:gravity=\"center\"\n                android:text=\"Report Type\"/>\n\n            <TextView\n                android:layout_width=\"0dp\"\n                android:layout_height=\"wrap_content\"\n                android:layout_weight=\"1\"\n                android:gravity=\"center\"\n                android:layout_marginStart=\"8dp\"\n                android:text=\"Infectiousness\"/>\n\n            <TextView\n                android:layout_width=\"0dp\"\n                android:layout_height=\"wrap_content\"\n                android:layout_weight=\"1\"\n                android:gravity=\"center\"\n                android:layout_marginStart=\"8dp\"\n                android:text=\"Calibration Confidence\"/>\n\n        </LinearLayout>\n\n        <androidx.recyclerview.widget.RecyclerView\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"0dp\"\n            android:layout_weight=\"1\"\n            app:items=\"@{vm.exposureWindows}\"\n            app:layoutStrategy=\"@{exposureWindowsLayoutStrategy}\"\n            app:viewModel=\"@{vm}\"\n            app:layoutManager=\"androidx.recyclerview.widget.LinearLayoutManager\"/>\n\n    </LinearLayout>\n</layout>\n"
  },
  {
    "path": "app/src/main/res/layout/fragment_symptom_date.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<layout xmlns:app=\"http://schemas.android.com/apk/res-auto\">\n\n    <data>\n        <variable\n            name=\"vm\"\n            type=\"cz.covid19cz.erouska.ui.symptomdate.SymptomDateVM\" />\n    </data>\n\n<androidx.constraintlayout.widget.ConstraintLayout xmlns:android=\"http://schemas.android.com/apk/res/android\" android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\"\n    android:padding=\"@dimen/fragment_padding\">\n\n    <TextView\n        android:id=\"@+id/text_symptom_date_body\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:text=\"@string/symptom_date_body\"\n        android:textAppearance=\"@style/Erouska.Body\"\n        app:layout_constraintEnd_toEndOf=\"parent\"\n        app:layout_constraintStart_toStartOf=\"parent\"\n        app:layout_constraintTop_toTopOf=\"parent\" />\n\n    <com.google.android.material.switchmaterial.SwitchMaterial\n        android:id=\"@+id/switch_symptom_date\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:textAppearance=\"@style/Erouska.Body\"\n        android:checked=\"@={vm.hasSymptoms}\"\n        app:layout_constraintTop_toBottomOf=\"@id/text_symptom_date_body\"\n        android:text=\"@string/symptom_date_switch_text\"/>\n\n    <TextView\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:id=\"@+id/text_symptoms\"\n        android:layout_marginEnd=\"56dp\"\n        android:textAppearance=\"@style/Erouska.Description\"\n        android:text=\"@string/symptom_date_symptoms\"\n        app:layout_constraintTop_toBottomOf=\"@id/switch_symptom_date\"/>\n\n    <com.google.android.material.textfield.TextInputLayout\n        android:id=\"@+id/text_input_date\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:hint=\"@string/symptom_date_hint\"\n        app:visibleOrGone=\"@{vm.hasSymptoms}\"\n        style=\"@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox\"\n        app:layout_constraintTop_toBottomOf=\"@id/text_symptoms\"\n        android:layout_marginTop=\"24dp\">\n\n        <com.google.android.material.textfield.TextInputEditText\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"wrap_content\"\n            android:text=\"@{vm.symptomDateString}\"\n            android:enabled=\"false\"/>\n    </com.google.android.material.textfield.TextInputLayout>\n\n    <androidx.appcompat.widget.AppCompatImageButton\n        android:layout_width=\"48dp\"\n        android:layout_height=\"48dp\"\n        android:src=\"@drawable/ic_calendar\"\n        android:background=\"@drawable/highlight_selector\"\n        app:visibleOrGone=\"@{vm.hasSymptoms}\"\n        app:layout_constraintEnd_toEndOf=\"@id/text_input_date\"\n        app:layout_constraintTop_toTopOf=\"@id/text_input_date\"\n        app:layout_constraintBottom_toBottomOf=\"@id/text_input_date\"\n        android:onClick=\"@{() -> vm.showDatePicker()}\"\n        android:tint=\"@color/colorPrimary\"\n        android:layout_marginTop=\"4dp\"\n        android:layout_marginEnd=\"4dp\"/>\n\n    <com.google.android.material.button.MaterialButton\n        android:id=\"@+id/confirm_button\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:layout_marginTop=\"24dp\"\n        android:onClick=\"@{() -> vm.next()}\"\n        android:text=\"@string/button_continue\"\n        app:layout_constraintEnd_toEndOf=\"parent\"\n        app:layout_constraintStart_toStartOf=\"parent\"\n        app:layout_constraintTop_toBottomOf=\"@id/text_input_date\" />\n\n</androidx.constraintlayout.widget.ConstraintLayout>\n</layout>"
  },
  {
    "path": "app/src/main/res/layout/fragment_traveller.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<layout xmlns:app=\"http://schemas.android.com/apk/res-auto\">\n\n    <data>\n        <variable\n            name=\"vm\"\n            type=\"cz.covid19cz.erouska.ui.traveller.TravellerVM\" />\n    </data>\n\n<androidx.constraintlayout.widget.ConstraintLayout xmlns:android=\"http://schemas.android.com/apk/res/android\" android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\"\n    android:padding=\"@dimen/fragment_padding\">\n\n    <TextView\n        android:id=\"@+id/text_traveller_body\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:text=\"@string/traveller_body\"\n        android:textAppearance=\"@style/Erouska.Body\"\n        app:layout_constraintEnd_toEndOf=\"parent\"\n        app:layout_constraintStart_toStartOf=\"parent\"\n        app:layout_constraintTop_toTopOf=\"parent\" />\n\n    <TextView\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:id=\"@+id/text_description\"\n        android:layout_marginTop=\"16dp\"\n        android:textAppearance=\"@style/Erouska.Description\"\n        android:text=\"@string/traveller_description\"\n        app:layout_constraintTop_toBottomOf=\"@id/text_traveller_body\"/>\n\n    <com.google.android.material.button.MaterialButton\n        android:id=\"@+id/button_yes\"\n        android:layout_width=\"0dp\"\n        android:layout_height=\"wrap_content\"\n        android:layout_marginTop=\"16dp\"\n        android:onClick=\"@{() -> vm.next(true)}\"\n        android:text=\"@string/traveller_button_yes\"\n        app:layout_constraintEnd_toEndOf=\"parent\"\n        app:layout_constraintStart_toStartOf=\"parent\"\n        app:layout_constraintTop_toBottomOf=\"@id/text_description\" />\n\n    <com.google.android.material.button.MaterialButton\n        android:id=\"@+id/button_no\"\n        android:layout_width=\"0dp\"\n        android:layout_height=\"wrap_content\"\n        style=\"@style/OutlinedButton\"\n        android:onClick=\"@{() -> vm.next(false)}\"\n        android:text=\"@string/traveller_button_no\"\n        app:layout_constraintEnd_toEndOf=\"parent\"\n        app:layout_constraintStart_toStartOf=\"parent\"\n        app:layout_constraintTop_toBottomOf=\"@id/button_yes\" />\n\n</androidx.constraintlayout.widget.ConstraintLayout>\n</layout>"
  },
  {
    "path": "app/src/main/res/layout/fragment_verification.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<layout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    xmlns:tools=\"http://schemas.android.com/tools\">\n\n    <data>\n\n        <variable\n            name=\"vm\"\n            type=\"cz.covid19cz.erouska.ui.verification.VerificationVM\" />\n    </data>\n\n    <ScrollView\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\"\n        android:fillViewport=\"true\">\n\n        <androidx.constraintlayout.widget.ConstraintLayout\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"wrap_content\"\n            android:padding=\"16dp\">\n\n            <TextView\n                android:id=\"@+id/send_data_body\"\n                android:layout_width=\"wrap_content\"\n                android:layout_height=\"wrap_content\"\n                android:text=\"@string/send_data_body\"\n                android:textAppearance=\"@style/Erouska.Body\"\n                app:layout_constraintEnd_toEndOf=\"parent\"\n                app:layout_constraintStart_toStartOf=\"parent\"\n                app:layout_constraintTop_toTopOf=\"parent\" />\n\n            <TextView\n                android:id=\"@+id/last_data_sent\"\n                android:layout_width=\"0dp\"\n                android:layout_height=\"wrap_content\"\n                android:text=\"@{@string/send_data_last_sent_date(vm.lastDataSentDate)}\"\n                android:layout_marginTop=\"16dp\"\n                tools:text=\"@string/send_data_last_sent_date\"\n                app:visibleOrGone=\"@{vm.lastDataSentDate != null}\"\n                app:layout_constraintTop_toBottomOf=\"@id/send_data_body\"\n                app:layout_constraintStart_toStartOf=\"parent\"\n                app:layout_constraintEnd_toEndOf=\"parent\"\n                android:textAppearance=\"@style/Erouska.Description\" />\n\n            <com.google.android.material.textfield.TextInputLayout\n                android:id=\"@+id/code_input_layout\"\n                style=\"@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox\"\n                android:layout_width=\"match_parent\"\n                android:layout_height=\"wrap_content\"\n                android:layout_marginTop=\"16dp\"\n                android:hint=\"@string/send_data_verification_hint\"\n                android:textColorHint=\"@color/textColorPrimary\"\n                app:boxStrokeColor=\"@color/boxStrokeColor\"\n                app:boxStrokeWidthFocused=\"1dp\"\n                app:errorResource=\"@{vm.error}\"\n                app:hintTextColor=\"@color/textColorPrimary\"\n                app:layout_constraintEnd_toEndOf=\"parent\"\n                app:layout_constraintStart_toStartOf=\"parent\"\n                app:layout_constraintTop_toBottomOf=\"@id/last_data_sent\">\n\n                <com.google.android.material.textfield.TextInputEditText\n                    android:id=\"@+id/code_input\"\n                    android:layout_width=\"match_parent\"\n                    android:layout_height=\"wrap_content\"\n                    android:inputType=\"numberDecimal\"\n                    android:maxLength=\"8\"\n                    android:text=\"@={vm.code}\" />\n\n            </com.google.android.material.textfield.TextInputLayout>\n\n            <com.google.android.material.button.MaterialButton\n                android:id=\"@+id/confirm_button\"\n                android:layout_width=\"wrap_content\"\n                android:layout_height=\"wrap_content\"\n                android:layout_marginTop=\"24dp\"\n                app:visibleOrInvisible=\"@{!vm.loading}\"\n                android:onClick=\"@{() -> vm.verifyAndConfirm()}\"\n                android:text=\"@string/send_data_button_text\"\n                app:layout_constraintEnd_toEndOf=\"parent\"\n                app:layout_constraintStart_toStartOf=\"parent\"\n                app:layout_constraintTop_toBottomOf=\"@id/code_input_layout\" />\n\n            <com.google.android.material.button.MaterialButton\n                android:id=\"@+id/no_verification_code_button\"\n                android:layout_width=\"wrap_content\"\n                android:layout_height=\"wrap_content\"\n                style=\"@style/Widget.MaterialComponents.Button.TextButton\"\n                android:layout_marginTop=\"8dp\"\n                android:onClick=\"@{() -> vm.navigateToVerificationCode()}\"\n                android:text=\"@string/no_verification_code\"\n                app:layout_constraintEnd_toEndOf=\"parent\"\n                app:layout_constraintStart_toStartOf=\"parent\"\n                app:layout_constraintTop_toBottomOf=\"@id/confirm_button\" />\n\n            <ProgressBar\n                android:id=\"@+id/progress\"\n                android:layout_width=\"wrap_content\"\n                android:layout_height=\"wrap_content\"\n                app:visibleOrGone=\"@{vm.loading}\"\n                tools:visibility=\"invisible\"\n                app:layout_constraintBottom_toBottomOf=\"@+id/confirm_button\"\n                app:layout_constraintEnd_toEndOf=\"@+id/confirm_button\"\n                app:layout_constraintStart_toStartOf=\"@+id/confirm_button\"\n                app:layout_constraintTop_toTopOf=\"@id/confirm_button\" />\n\n\n        </androidx.constraintlayout.widget.ConstraintLayout>\n\n    </ScrollView>\n\n</layout>"
  },
  {
    "path": "app/src/main/res/layout/fragment_welcome.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<layout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    xmlns:tools=\"http://schemas.android.com/tools\">\n\n    <data>\n\n        <variable\n            name=\"vm\"\n            type=\"cz.covid19cz.erouska.ui.welcome.WelcomeVM\" />\n    </data>\n\n    <androidx.constraintlayout.widget.ConstraintLayout\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\"\n        >\n\n        <ScrollView\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"0dp\"\n            android:fillViewport=\"true\"\n            app:layout_constraintBottom_toBottomOf=\"parent\"\n            app:layout_constraintTop_toTopOf=\"parent\">\n\n            <androidx.constraintlayout.widget.ConstraintLayout\n                android:layout_width=\"match_parent\"\n                android:layout_height=\"wrap_content\"\n                android:padding=\"@dimen/fragment_padding\"\n                >\n\n                <ImageView\n                    android:id=\"@+id/mzcr_icon\"\n                    android:layout_width=\"wrap_content\"\n                    android:layout_height=\"wrap_content\"\n                    android:scaleType=\"center\"\n                    android:src=\"@drawable/ic_mzcr\"\n                    app:layout_constraintEnd_toEndOf=\"parent\"\n                    app:layout_constraintHorizontal_bias=\"0.0\"\n                    app:layout_constraintStart_toStartOf=\"parent\"\n                    app:layout_constraintTop_toTopOf=\"parent\" />\n\n                <TextView\n                    android:id=\"@+id/welcome_title\"\n                    android:layout_width=\"match_parent\"\n                    android:layout_height=\"wrap_content\"\n                    android:layout_marginTop=\"16dp\"\n                    android:layout_marginBottom=\"8dp\"\n                    android:text=\"@string/welcome_title\"\n                    android:textAppearance=\"@style/Erouska.Title\"\n                    app:layout_constraintEnd_toEndOf=\"parent\"\n                    app:layout_constraintStart_toStartOf=\"parent\"\n                    app:layout_constraintTop_toBottomOf=\"@id/mzcr_icon\" />\n\n                <TextView\n                    android:id=\"@+id/welcome_desc\"\n                    android:layout_width=\"match_parent\"\n                    android:layout_height=\"wrap_content\"\n                    android:layout_marginTop=\"8dp\"\n                    android:layout_marginBottom=\"8dp\"\n                    android:paddingBottom=\"136dp\"\n                    android:textAppearance=\"@style/Erouska.Body\"\n                    app:layout_constraintTop_toBottomOf=\"@id/welcome_title\"\n                    tools:text=\"@string/welcome_description\" />\n            </androidx.constraintlayout.widget.ConstraintLayout>\n        </ScrollView>\n\n        <com.google.android.material.button.MaterialButton\n            android:id=\"@+id/welcome_continue_btn\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:layout_marginBottom=\"8dp\"\n            android:onClick=\"@{() -> vm.nextStep()}\"\n            android:text=\"@string/welcome_activation\"\n            app:cornerRadius=\"24dp\"\n            app:layout_constraintBottom_toTopOf=\"@id/welcome_help_btn\"\n            app:layout_constraintEnd_toEndOf=\"parent\"\n            app:layout_constraintStart_toStartOf=\"parent\"\n            app:layout_constraintTop_toTopOf=\"@id/welcome_help_btn\"\n            />\n\n        <com.google.android.material.button.MaterialButton\n            android:id=\"@+id/welcome_help_btn\"\n            style=\"?materialButtonOutlinedStyle\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:layout_marginBottom=\"16dp\"\n            android:onClick=\"@{() -> vm.help()}\"\n            android:text=\"@string/welcome_help\"\n            app:layout_constraintBottom_toBottomOf=\"parent\"\n            app:layout_constraintEnd_toEndOf=\"parent\"\n            app:layout_constraintStart_toStartOf=\"parent\"\n            app:layout_constraintTop_toBottomOf=\"@id/welcome_continue_btn\" />\n    </androidx.constraintlayout.widget.ConstraintLayout>\n</layout>\n"
  },
  {
    "path": "app/src/main/res/layout/item_contacts.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<layout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    xmlns:tools=\"http://schemas.android.com/tools\">\n\n    <data>\n\n        <variable\n            name=\"item\"\n            type=\"cz.covid19cz.erouska.ui.contacts.Contact\" />\n\n        <variable\n            name=\"vm\"\n            type=\"cz.covid19cz.erouska.ui.contacts.ContactsVM\" />\n    </data>\n\n    <androidx.constraintlayout.widget.ConstraintLayout\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:paddingEnd=\"16dp\">\n\n        <TextView\n            android:id=\"@+id/contact_title\"\n            android:layout_width=\"0dp\"\n            android:layout_height=\"wrap_content\"\n            android:layout_marginStart=\"16dp\"\n            android:layout_marginTop=\"16dp\"\n            android:text=\"@{ item.title }\"\n            android:textAppearance=\"@style/Erouska.Title\"\n            app:layout_constraintEnd_toEndOf=\"parent\"\n            app:layout_constraintStart_toStartOf=\"parent\"\n            app:layout_constraintTop_toTopOf=\"parent\"\n            tools:text=\"Title\" />\n\n        <TextView\n            android:id=\"@+id/contact_desc\"\n            android:layout_width=\"0dp\"\n            android:layout_height=\"wrap_content\"\n            android:layout_marginStart=\"16dp\"\n            android:layout_marginTop=\"8dp\"\n            android:textAppearance=\"@style/Erouska.Caption\"\n            android:text=\"@{ item.text }\"\n            app:layout_constraintEnd_toEndOf=\"parent\"\n            app:layout_constraintStart_toStartOf=\"parent\"\n            app:layout_constraintTop_toBottomOf=\"@id/contact_title\"\n            tools:text=\"Content\" />\n\n        <com.google.android.material.button.MaterialButton\n            android:id=\"@+id/contact_link\"\n            style=\"@style/Widget.MaterialComponents.Button.TextButton\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:layout_marginStart=\"10dp\"\n            android:text=\"@{ item.linkTitle }\"\n            android:onClick=\"@{ () -> vm.onLinkClick(item.link) }\"\n            app:layout_constraintStart_toStartOf=\"parent\"\n            app:layout_constraintTop_toBottomOf=\"@id/contact_desc\"\n            tools:text=\"Link\" />\n\n    </androidx.constraintlayout.widget.ConstraintLayout>\n</layout>"
  },
  {
    "path": "app/src/main/res/layout/item_daily_summary.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<layout>\n\n    <data>\n\n        <variable\n            name=\"item\"\n            type=\"com.google.android.gms.nearby.exposurenotification.DailySummary\" />\n\n        <variable\n            name=\"vm\"\n            type=\"cz.covid19cz.erouska.ui.sandbox.SandboxDataVM\" />\n    </data>\n\n    <LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:orientation=\"horizontal\"\n        android:padding=\"8dp\">\n\n        <TextView\n            android:layout_width=\"0dp\"\n            android:layout_height=\"wrap_content\"\n            android:layout_weight=\"1\"\n            android:gravity=\"center\"\n            android:text=\"@{vm.daysToString(item.daysSinceEpoch)}\"/>\n\n        <TextView\n            android:layout_width=\"0dp\"\n            android:layout_height=\"wrap_content\"\n            android:layout_weight=\"1\"\n            android:gravity=\"center\"\n            android:layout_marginStart=\"8dp\"\n            android:text=\"@{String.valueOf(item.summaryData.maximumScore)}\"/>\n\n        <TextView\n            android:layout_width=\"0dp\"\n            android:layout_height=\"wrap_content\"\n            android:layout_weight=\"1\"\n            android:gravity=\"center\"\n            android:layout_marginStart=\"8dp\"\n            android:text=\"@{String.valueOf(item.summaryData.scoreSum)}\"/>\n\n        <TextView\n            android:layout_width=\"0dp\"\n            android:layout_height=\"wrap_content\"\n            android:layout_weight=\"1\"\n            android:gravity=\"center\"\n            android:layout_marginStart=\"8dp\"\n            android:text=\"@{String.valueOf(item.summaryData.weightedDurationSum)}\"/>\n\n    </LinearLayout>\n</layout>\n"
  },
  {
    "path": "app/src/main/res/layout/item_exposure_help.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<layout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    xmlns:tools=\"http://schemas.android.com/tools\">\n\n    <data>\n\n        <variable\n            name=\"item\"\n            type=\"cz.covid19cz.erouska.ui.exposurehelp.entity.ExposureHelpItem\" />\n\n        <variable\n            name=\"vm\"\n            type=\"cz.covid19cz.erouska.ui.exposurehelp.ExposureHelpVM\" />\n    </data>\n\n    <androidx.constraintlayout.widget.ConstraintLayout\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:padding=\"8dp\">\n\n        <ImageView\n            android:id=\"@+id/symptom_img\"\n            android:layout_width=\"60dp\"\n            android:layout_height=\"60dp\"\n            app:layout_constraintBottom_toBottomOf=\"parent\"\n            app:layout_constraintStart_toStartOf=\"parent\"\n            app:layout_constraintTop_toTopOf=\"parent\"\n            android:layout_marginStart=\"8dp\"\n            app:placeholder=\"@{@drawable/ic_item_empty}\"\n            app:url=\"@{item.iconUrl}\"\n            tools:src=\"@drawable/ic_item_empty\"/>\n\n        <TextView\n            android:id=\"@+id/symptom_label\"\n            android:layout_width=\"0dp\"\n            android:layout_height=\"wrap_content\"\n            android:layout_marginStart=\"24dp\"\n            android:text=\"@{item.label}\"\n            tools:text=\"@tools:sample/lorem\"\n            android:textAppearance=\"@style/Erouska.Body\"\n            app:layout_constraintBottom_toBottomOf=\"@id/symptom_img\"\n            app:layout_constraintEnd_toEndOf=\"parent\"\n            app:layout_constraintStart_toEndOf=\"@id/symptom_img\"\n            app:layout_constraintTop_toTopOf=\"@id/symptom_img\" />\n\n    </androidx.constraintlayout.widget.ConstraintLayout>\n</layout>"
  },
  {
    "path": "app/src/main/res/layout/item_exposure_help_title.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<layout xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <data>\n\n        <variable\n            name=\"item\"\n            type=\"cz.covid19cz.erouska.ui.exposurehelp.entity.ExposureHelpTitle\" />\n    </data>\n\n    <TextView\n        android:id=\"@+id/prevention_text\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:paddingStart=\"@dimen/fragment_padding\"\n        android:paddingEnd=\"@dimen/fragment_padding\"\n        android:text=\"@{ item.title }\"\n        android:textAppearance=\"@style/Erouska.Body\" />\n</layout>"
  },
  {
    "path": "app/src/main/res/layout/item_exposure_window.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<layout>\n\n    <data>\n\n        <import type=\"cz.covid19cz.erouska.ext.LongKt\" />\n\n        <variable\n            name=\"item\"\n            type=\"com.google.android.gms.nearby.exposurenotification.ExposureWindow\" />\n\n        <variable\n            name=\"vm\"\n            type=\"cz.covid19cz.erouska.ui.sandbox.SandboxDataVM\" />\n    </data>\n\n    <LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:orientation=\"horizontal\"\n        android:padding=\"8dp\">\n\n        <TextView\n            android:layout_width=\"0dp\"\n            android:layout_height=\"wrap_content\"\n            android:layout_weight=\"1\"\n            android:gravity=\"center\"\n            android:text=\"@{LongKt.timestampToDate(item.dateMillisSinceEpoch)}\"/>\n\n        <TextView\n            android:layout_width=\"0dp\"\n            android:layout_height=\"wrap_content\"\n            android:layout_weight=\"1\"\n            android:gravity=\"center\"\n            android:layout_marginStart=\"8dp\"\n            android:text=\"@{String.valueOf(item.reportType)}\"/>\n\n        <TextView\n            android:layout_width=\"0dp\"\n            android:layout_height=\"wrap_content\"\n            android:layout_weight=\"1\"\n            android:gravity=\"center\"\n            android:layout_marginStart=\"8dp\"\n            android:text=\"@{String.valueOf(item.infectiousness)}\"/>\n\n        <TextView\n            android:layout_width=\"0dp\"\n            android:layout_height=\"wrap_content\"\n            android:layout_weight=\"1\"\n            android:gravity=\"center\"\n            android:layout_marginStart=\"8dp\"\n            android:text=\"@{String.valueOf(item.calibrationConfidence)}\"/>\n\n    </LinearLayout>\n</layout>\n"
  },
  {
    "path": "app/src/main/res/layout/item_help_about_category.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<layout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    xmlns:tools=\"http://schemas.android.com/tools\">\n\n    <data>\n\n        <import type=\"cz.covid19cz.erouska.R\" />\n\n        <variable\n            name=\"item\"\n            type=\"cz.covid19cz.erouska.ui.help.data.Category\" />\n\n        <variable\n            name=\"vm\"\n            type=\"cz.covid19cz.erouska.ui.help.HelpVM\" />\n    </data>\n\n    <androidx.constraintlayout.widget.ConstraintLayout\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:onClick=\"@{ () -> vm.onItemClicked(item)}\"\n        android:background=\"?selectableItemBackground\"\n        android:paddingVertical=\"6dp\">\n\n        <ImageView\n            android:id=\"@+id/category_icon\"\n            android:layout_width=\"22dp\"\n            android:layout_height=\"22dp\"\n            android:layout_marginStart=\"18dp\"\n            android:src=\"@drawable/ic_about\"\n            app:layout_constraintBottom_toBottomOf=\"parent\"\n            app:layout_constraintStart_toStartOf=\"parent\"\n            app:layout_constraintTop_toTopOf=\"parent\"\n            />\n\n        <TextView\n            android:id=\"@+id/category_title\"\n            android:layout_width=\"0dp\"\n            android:layout_height=\"wrap_content\"\n            android:maxLines=\"2\"\n            android:paddingHorizontal=\"17dp\"\n            android:text=\"@string/about\"\n            android:textAppearance=\"@style/Erouska.Item\"\n            app:layout_constraintEnd_toEndOf=\"parent\"\n            app:layout_constraintStart_toEndOf=\"@id/category_icon\"\n            app:layout_constraintTop_toBottomOf=\"parent\"\n            app:layout_constraintTop_toTopOf=\"parent\"\n            tools:text=\"@tools:sample/lorem\" />\n\n    </androidx.constraintlayout.widget.ConstraintLayout>\n</layout>"
  },
  {
    "path": "app/src/main/res/layout/item_help_faq_category.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<layout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    xmlns:tools=\"http://schemas.android.com/tools\">\n\n    <data>\n\n        <variable\n            name=\"item\"\n            type=\"cz.covid19cz.erouska.ui.help.data.FaqCategory\" />\n\n        <variable\n            name=\"vm\"\n            type=\"cz.covid19cz.erouska.ui.help.HelpVM\" />\n    </data>\n\n    <androidx.constraintlayout.widget.ConstraintLayout\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:onClick=\"@{ () -> vm.onItemClicked(item)}\"\n        android:background=\"?selectableItemBackground\"\n        android:paddingVertical=\"6dp\">\n\n        <ImageView\n            android:id=\"@+id/category_icon\"\n            android:layout_width=\"22dp\"\n            android:layout_height=\"22dp\"\n            android:layout_marginStart=\"18dp\"\n            app:layout_constraintBottom_toBottomOf=\"parent\"\n            app:layout_constraintStart_toStartOf=\"parent\"\n            app:layout_constraintTop_toTopOf=\"parent\"\n            app:placeholder=\"@{@drawable/ic_item_empty}\"\n            app:url=\"@{item.icon}\"\n            tools:src=\"@drawable/ic_item_empty\" />\n\n            <TextView\n                android:id=\"@+id/category_title\"\n                android:layout_width=\"0dp\"\n                android:layout_height=\"wrap_content\"\n                android:maxLines=\"2\"\n                android:text=\"@{item.title}\"\n                android:textAppearance=\"@style/Erouska.Item\"\n                android:paddingHorizontal=\"17dp\"\n                app:layout_constraintEnd_toEndOf=\"parent\"\n                app:layout_constraintStart_toEndOf=\"@id/category_icon\"\n                app:layout_constraintTop_toTopOf=\"parent\"\n                tools:text=\"@tools:sample/lorem\" />\n\n            <TextView\n                android:id=\"@+id/category_subtitle\"\n                android:layout_width=\"0dp\"\n                android:layout_height=\"wrap_content\"\n                android:text=\"@{item.subtitle}\"\n                android:textAppearance=\"@style/Erouska.Caption\"\n                android:paddingHorizontal=\"17dp\"\n                app:layout_constraintBottom_toBottomOf=\"parent\"\n                app:layout_constraintEnd_toEndOf=\"parent\"\n                app:layout_constraintStart_toStartOf=\"@id/category_title\"\n                app:layout_constraintTop_toBottomOf=\"@id/category_title\"\n                tools:text=\"@tools:sample/lorem\" />\n\n    </androidx.constraintlayout.widget.ConstraintLayout>\n</layout>"
  },
  {
    "path": "app/src/main/res/layout/item_help_how_category.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<layout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    xmlns:tools=\"http://schemas.android.com/tools\">\n\n    <data>\n\n        <import type=\"cz.covid19cz.erouska.R\" />\n\n        <variable\n            name=\"item\"\n            type=\"cz.covid19cz.erouska.ui.help.data.Category\" />\n\n        <variable\n            name=\"vm\"\n            type=\"cz.covid19cz.erouska.ui.help.HelpVM\" />\n    </data>\n\n    <androidx.constraintlayout.widget.ConstraintLayout\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:onClick=\"@{ () -> vm.onItemClicked(item)}\"\n        android:background=\"?selectableItemBackground\"\n        android:paddingVertical=\"6dp\">\n\n        <ImageView\n            android:id=\"@+id/category_icon\"\n            android:layout_width=\"22dp\"\n            android:layout_height=\"22dp\"\n            android:layout_marginStart=\"17dp\"\n            android:src=\"@drawable/ic_mask\"\n            app:layout_constraintBottom_toBottomOf=\"parent\"\n            app:layout_constraintStart_toStartOf=\"parent\"\n            app:layout_constraintTop_toTopOf=\"parent\"\n            tools:src=\"@drawable/ic_mask\" />\n\n        <TextView\n            android:id=\"@+id/category_title\"\n            android:layout_width=\"0dp\"\n            android:layout_height=\"wrap_content\"\n            android:maxLines=\"2\"\n            android:paddingHorizontal=\"17dp\"\n            android:text=\"@string/help_how_title\"\n            android:textAppearance=\"@style/Erouska.Item\"\n            app:layout_constraintEnd_toEndOf=\"parent\"\n            app:layout_constraintStart_toEndOf=\"@id/category_icon\"\n            app:layout_constraintTop_toTopOf=\"parent\"\n            tools:text=\"@tools:sample/lorem\" />\n\n        <TextView\n            android:id=\"@+id/category_subtitle\"\n            android:layout_width=\"0dp\"\n            android:layout_height=\"wrap_content\"\n            android:paddingHorizontal=\"18dp\"\n            android:text=\"@string/help_how_subtitle\"\n            android:textAppearance=\"@style/Erouska.Caption\"\n            app:layout_constraintBottom_toBottomOf=\"parent\"\n            app:layout_constraintEnd_toEndOf=\"parent\"\n            app:layout_constraintStart_toStartOf=\"@id/category_title\"\n            app:layout_constraintTop_toBottomOf=\"@id/category_title\"\n            tools:text=\"@tools:sample/lorem\" />\n\n    </androidx.constraintlayout.widget.ConstraintLayout>\n</layout>"
  },
  {
    "path": "app/src/main/res/layout/item_help_question.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<layout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    xmlns:tools=\"http://schemas.android.com/tools\">\n\n    <data>\n\n        <variable\n            name=\"item\"\n            type=\"cz.covid19cz.erouska.ui.help.data.Question\" />\n\n        <variable\n            name=\"vm\"\n            type=\"cz.covid19cz.erouska.ui.helpcategory.HelpCategoryVM\" />\n    </data>\n\n    <androidx.constraintlayout.widget.ConstraintLayout\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:onClick=\"@{ () -> vm.onItemClicked(item)}\"\n        android:background=\"?selectableItemBackground\"\n        android:paddingHorizontal=\"@dimen/fragment_padding\">\n\n        <TextView\n            android:id=\"@+id/category_title\"\n            android:layout_width=\"0dp\"\n            android:layout_height=\"wrap_content\"\n            android:text=\"@{item.question}\"\n            android:textAppearance=\"@style/Erouska.Item\"\n            app:layout_constraintEnd_toEndOf=\"parent\"\n            app:layout_constraintStart_toStartOf=\"parent\"\n            app:layout_constraintTop_toTopOf=\"parent\"\n            android:paddingVertical=\"11dp\"\n            tools:text=\"Jak eRouška zaznamenává a zpracovává data o setkáních uživatelů?\" />\n\n        <View\n            android:id=\"@+id/divider_top\"\n            style=\"@style/Divider\"\n            app:layout_constraintStart_toStartOf=\"parent\"\n            app:layout_constraintTop_toBottomOf=\"@id/category_title\" />\n\n    </androidx.constraintlayout.widget.ConstraintLayout>\n</layout>"
  },
  {
    "path": "app/src/main/res/layout/item_recent_exposure.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<layout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    xmlns:tools=\"http://schemas.android.com/tools\">\n\n    <data>\n\n        <variable\n            name=\"item\"\n            type=\"cz.covid19cz.erouska.db.DailySummaryEntity\" />\n    </data>\n\n    <androidx.constraintlayout.widget.ConstraintLayout\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:paddingStart=\"16dp\">\n\n        <TextView\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:layout_marginTop=\"16dp\"\n            android:layout_marginBottom=\"16dp\"\n            android:text=\"@{item.getLongDateString()}\"\n            tools:text=\"@tools:sample/lorem\"\n            android:textAppearance=\"@style/Erouska.Body\"\n            app:layout_constraintBottom_toBottomOf=\"parent\"\n            app:layout_constraintStart_toStartOf=\"parent\"\n            app:layout_constraintTop_toTopOf=\"parent\" />\n\n        <View\n            android:layout_width=\"0dp\"\n            android:layout_height=\"1dp\"\n            android:background=\"@color/separator\"\n            app:layout_constraintBottom_toBottomOf=\"parent\"\n            app:layout_constraintEnd_toEndOf=\"parent\" />\n\n    </androidx.constraintlayout.widget.ConstraintLayout>\n</layout>"
  },
  {
    "path": "app/src/main/res/layout/item_recent_exposure_group_header.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<layout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    xmlns:tools=\"http://schemas.android.com/tools\">\n\n    <data>\n\n        <variable\n            name=\"item\"\n            type=\"cz.covid19cz.erouska.ui.recentexposures.entity.RecentExposureGroupHeaderItem\" />\n    </data>\n\n    <androidx.constraintlayout.widget.ConstraintLayout\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\">\n\n        <TextView\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:layout_marginTop=\"32dp\"\n            android:layout_marginBottom=\"8dp\"\n            android:layout_marginStart=\"@dimen/fragment_padding\"\n            android:layout_marginEnd=\"@dimen/fragment_padding\"\n            android:text=\"@{item.timestamp != 0 ? @string/recent_exposures_discovered(item.getDateString(), item.getTimeString()) : @string/recent_exposures_discovered_earlier}\"\n            tools:text=\"@string/recent_exposures_discovered\"\n            android:textAppearance=\"@style/Erouska.Caption\"\n            app:layout_constraintBottom_toBottomOf=\"parent\"\n            app:layout_constraintStart_toStartOf=\"parent\"\n            app:layout_constraintTop_toTopOf=\"parent\" />\n\n    </androidx.constraintlayout.widget.ConstraintLayout>\n</layout>"
  },
  {
    "path": "app/src/main/res/layout/item_scan_instance.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<layout>\n\n    <data>\n        <variable\n            name=\"item\"\n            type=\"com.google.android.gms.nearby.exposurenotification.ScanInstance\" />\n\n        <variable\n            name=\"vm\"\n            type=\"cz.covid19cz.erouska.ui.sandbox.SandboxDataVM\" />\n    </data>\n\n    <LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:orientation=\"horizontal\"\n        android:background=\"#eee\"\n        android:padding=\"8dp\">\n\n        <TextView\n            android:layout_width=\"0dp\"\n            android:layout_height=\"wrap_content\"\n            android:layout_weight=\"1\"\n            android:gravity=\"center\"\n            android:text=\"@{String.valueOf(item.secondsSinceLastScan)}\"/>\n\n        <TextView\n            android:layout_width=\"0dp\"\n            android:layout_height=\"wrap_content\"\n            android:layout_weight=\"1\"\n            android:gravity=\"center\"\n            android:layout_marginStart=\"8dp\"\n            android:text=\"@{String.valueOf(item.typicalAttenuationDb)}\"/>\n\n        <TextView\n            android:layout_width=\"0dp\"\n            android:layout_height=\"wrap_content\"\n            android:layout_weight=\"1\"\n            android:gravity=\"center\"\n            android:layout_marginStart=\"8dp\"\n            android:text=\"@{String.valueOf(item.minAttenuationDb)}\"/>\n\n    </LinearLayout>\n</layout>\n"
  },
  {
    "path": "app/src/main/res/layout/item_scan_instance_header.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<layout>\n\n    <data>\n        <variable\n            name=\"item\"\n            type=\"String\" />\n\n        <variable\n            name=\"vm\"\n            type=\"cz.covid19cz.erouska.ui.sandbox.SandboxDataVM\" />\n    </data>\n\n    <LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:orientation=\"horizontal\"\n        android:background=\"#eee\"\n        android:padding=\"8dp\">\n\n        <TextView\n            android:layout_width=\"0dp\"\n            android:layout_height=\"wrap_content\"\n            android:layout_weight=\"1\"\n            android:gravity=\"center\"\n            android:text=\"Secs Since Last Scan\"/>\n\n        <TextView\n            android:layout_width=\"0dp\"\n            android:layout_height=\"wrap_content\"\n            android:layout_weight=\"1\"\n            android:gravity=\"center\"\n            android:layout_marginStart=\"8dp\"\n            android:text=\"Typical Attenuation\"/>\n\n        <TextView\n            android:layout_width=\"0dp\"\n            android:layout_height=\"wrap_content\"\n            android:layout_weight=\"1\"\n            android:gravity=\"center\"\n            android:layout_marginStart=\"8dp\"\n            android:text=\"Min. Attenuation\"/>\n\n    </LinearLayout>\n</layout>\n"
  },
  {
    "path": "app/src/main/res/layout/item_search.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<layout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\">\n\n    <data>\n\n        <variable\n            name=\"item\"\n            type=\"cz.covid19cz.erouska.ui.helpsearch.data.SearchableQuestion\" />\n\n        <variable\n            name=\"vm\"\n            type=\"cz.covid19cz.erouska.ui.helpsearch.HelpSearchVM\" />\n    </data>\n\n    <cz.covid19cz.erouska.ui.helpsearch.ui.SearchableItem\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:paddingStart=\"@dimen/fragment_padding\"\n        android:paddingEnd=\"@dimen/fragment_padding\"\n        android:focusable=\"true\"\n        app:markdown=\"@{vm.markdown}\"\n        app:search_answer=\"@{item.answer}\"\n        app:search_category=\"@{item.category}\"\n        app:search_question=\"@{item.question}\" />\n\n</layout>"
  },
  {
    "path": "app/src/main/res/layout/item_search_layout.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<layout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:tools=\"http://schemas.android.com/tools\">\n\n    <LinearLayout\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:orientation=\"vertical\">\n\n        <View\n            android:id=\"@+id/divider_top\"\n            style=\"@style/Divider\"/>\n\n        <TextView\n            android:id=\"@+id/category\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"wrap_content\"\n            android:paddingTop=\"8dp\"\n            android:paddingBottom=\"5dp\"\n            android:textAppearance=\"@style/Erouska.Caption\"\n            tools:text=\"Chytrý telefon s aplikací eRouška zaznamená přes Bluetooth LE anonymní identifikátory (ID) z jiných zařízení s touto aplikací. Informaci o „setkání“ a jeho délce ukládá do své vnitřní paměti.\" />\n\n        <TextView\n            android:id=\"@+id/question\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"wrap_content\"\n            android:textAppearance=\"@style/Erouska.Body\"\n            tools:text=\"Jak eRouška zaznamenává a zpracovává data o setkáních uživatelů?\" />\n\n        <TextView\n            android:id=\"@+id/answer\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"wrap_content\"\n            android:textAppearance=\"@style/Erouska.Caption\"\n            android:paddingBottom=\"22dp\"\n            tools:text=\"Chytrý telefon s aplikací eRouška zaznamená přes Bluetooth LE anonymní identifikátory (ID) z jiných zařízení s touto aplikací. Informaci o „setkání“ a jeho délce ukládá do své vnitřní paměti.\" />\n\n    </LinearLayout>\n\n</layout>"
  },
  {
    "path": "app/src/main/res/layout/item_tek.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<layout\n    xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:tools=\"http://schemas.android.com/tools\">\n\n    <data>\n        <import type=\"java.nio.charset.Charset\"/>\n        <variable\n            name=\"item\"\n            type=\"com.google.android.gms.nearby.exposurenotification.TemporaryExposureKey\" />\n\n        <variable\n            name=\"vm\"\n            type=\"cz.covid19cz.erouska.ui.sandbox.SandboxVM\" />\n    </data>\n\n    <LinearLayout\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:padding=\"4dp\"\n        android:orientation=\"vertical\">\n\n        <TextView\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"wrap_content\"\n            android:text=\"@{vm.tekToString(item)}\"\n            android:textAppearance=\"@style/Erouska.Title\"\n            tools:text=\"Title\" />\n\n        <TextView\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"wrap_content\"\n            android:text=\"@{@string/sandbox_tek_rolling(vm.rollingStartToString(item.rollingStartIntervalNumber), vm.rollingIntervalToString(item.rollingPeriod))}\"\n            android:textAppearance=\"@style/Erouska.Caption\"\n            tools:text=\"Rolling start: XX, refresh XX\" />\n\n        <TextView\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"wrap_content\"\n            android:text=\"@{@string/sandbox_tek_report_type(vm.reportTypeToString(item.reportType))}\"\n            android:textAppearance=\"@style/Erouska.Caption\"\n            tools:text=\"Report type: XX\" />\n\n        <TextView\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"wrap_content\"\n            android:text=\"@{@string/sandbox_tek_days_since_symptoms(item.daysSinceOnsetOfSymptoms)}\"\n            android:textAppearance=\"@style/Erouska.Caption\"\n            tools:text=\"Days since onset symptoms: XX\" />\n    </LinearLayout>\n</layout>\n"
  },
  {
    "path": "app/src/main/res/layout/layout_sandbox_config_values.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<layout xmlns:tools=\"http://schemas.android.com/tools\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\">\n\n    <data>\n\n        <variable\n            name=\"item\"\n            type=\"cz.covid19cz.erouska.ui.sandbox.SandboxConfigValues\" />\n    </data>\n\n\n    <LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:paddingTop=\"8dp\"\n        android:paddingBottom=\"8dp\"\n        android:orientation=\"vertical\">\n\n        <TextView\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            tools:text=\"Title\"\n            android:textSize=\"18sp\"\n            android:text=\"@{item.title}\"/>\n\n        <LinearLayout\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"wrap_content\"\n            android:layout_marginTop=\"8dp\"\n            android:orientation=\"horizontal\">\n\n            <EditText\n                android:layout_width=\"0dp\"\n                android:layout_height=\"wrap_content\"\n                android:layout_weight=\"1\"\n                android:text=\"@={item.stringValues[0]}\"\n                app:visibleOrInvisible=\"@{item.size > 0}\"\n                android:inputType=\"numberDecimal\"\n                android:maxLength=\"4\"\n                android:maxLines=\"1\" />\n\n            <EditText\n                android:layout_width=\"0dp\"\n                android:layout_height=\"wrap_content\"\n                android:layout_weight=\"1\"\n                android:text=\"@={item.stringValues[1]}\"\n                app:visibleOrInvisible=\"@{item.size > 1}\"\n                android:inputType=\"numberDecimal\"\n                android:maxLength=\"4\"\n                android:maxLines=\"1\"/>\n\n            <EditText\n                android:layout_width=\"0dp\"\n                android:layout_height=\"wrap_content\"\n                android:layout_weight=\"1\"\n                android:text=\"@={item.stringValues[2]}\"\n                app:visibleOrInvisible=\"@{item.size > 2}\"\n                android:inputType=\"numberDecimal\"\n                android:maxLength=\"4\"\n                android:maxLines=\"1\"/>\n\n            <EditText\n                android:layout_width=\"0dp\"\n                android:layout_height=\"wrap_content\"\n                android:layout_weight=\"1\"\n                android:text=\"@={item.stringValues[3]}\"\n                app:visibleOrInvisible=\"@{item.size > 3}\"\n                android:inputType=\"numberDecimal\"\n                android:maxLength=\"4\"\n                android:maxLines=\"1\"/>\n\n            <EditText\n                android:layout_width=\"0dp\"\n                android:layout_height=\"wrap_content\"\n                android:layout_weight=\"1\"\n                android:text=\"@={item.stringValues[4]}\"\n                app:visibleOrInvisible=\"@{item.size > 4}\"\n                android:inputType=\"numberDecimal\"\n                android:maxLength=\"4\"\n                android:maxLines=\"1\"/>\n\n            <EditText\n                android:layout_width=\"0dp\"\n                android:layout_height=\"wrap_content\"\n                android:layout_weight=\"1\"\n                android:text=\"@={item.stringValues[5]}\"\n                app:visibleOrInvisible=\"@{item.size > 5}\"\n                android:inputType=\"numberDecimal\"\n                android:maxLength=\"4\"\n                android:maxLines=\"1\"/>\n\n            <EditText\n                android:layout_width=\"0dp\"\n                android:layout_height=\"wrap_content\"\n                android:layout_weight=\"1\"\n                android:text=\"@={item.stringValues[6]}\"\n                app:visibleOrInvisible=\"@{item.size > 6}\"\n                android:inputType=\"numberDecimal\"\n                android:maxLength=\"4\"\n                android:maxLines=\"1\"/>\n\n            <EditText\n                android:layout_width=\"0dp\"\n                android:layout_height=\"wrap_content\"\n                android:layout_weight=\"1\"\n                android:text=\"@={item.stringValues[7]}\"\n                app:visibleOrInvisible=\"@{item.size > 7}\"\n                android:inputType=\"numberDecimal\"\n                android:maxLength=\"4\"\n                android:maxLines=\"1\"/>\n\n        </LinearLayout>\n\n\n    </LinearLayout>\n</layout>"
  },
  {
    "path": "app/src/main/res/layout/search_toolbar.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<layout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\">\n\n    <android.widget.SearchView\n        android:id=\"@+id/toolbar_search_view\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"?attr/actionBarSize\"\n        android:layout_gravity=\"end\"\n        android:visibility=\"gone\"\n        android:queryBackground=\"@color/search_background\"\n        android:contentDescription=\"@string/search_hint\"\n        android:queryHint=\"@string/search_hint\"\n        app:layout_constraintBottom_toBottomOf=\"parent\"\n        app:layout_constraintEnd_toEndOf=\"parent\"\n        app:layout_constraintTop_toTopOf=\"parent\" />\n\n</layout>"
  },
  {
    "path": "app/src/main/res/layout/traveller_dashboard_card_view.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<layout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    xmlns:tools=\"http://schemas.android.com/tools\">\n\n    <androidx.constraintlayout.widget.ConstraintLayout\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        >\n\n        <com.google.android.material.card.MaterialCardView\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"wrap_content\"\n            android:layout_margin=\"8dp\"\n            app:cardElevation=\"4dp\"\n            app:layout_constraintBottom_toBottomOf=\"parent\"\n            app:layout_constraintEnd_toEndOf=\"parent\"\n            app:layout_constraintStart_toStartOf=\"parent\"\n            app:layout_constraintTop_toTopOf=\"parent\"\n            >\n\n            <androidx.constraintlayout.widget.ConstraintLayout\n                android:id=\"@+id/content_container\"\n                android:layout_width=\"match_parent\"\n                android:layout_height=\"wrap_content\"\n                android:background=\"?selectableItemBackground\"\n                android:clickable=\"false\"\n                android:focusable=\"false\"\n                android:padding=\"@dimen/fragment_padding\">\n\n                <ImageView\n                    android:id=\"@+id/icon\"\n                    android:layout_width=\"wrap_content\"\n                    android:layout_height=\"wrap_content\"\n                    tools:src=\"@drawable/ic_travel\"\n                    app:layout_constraintStart_toStartOf=\"parent\"\n                    app:layout_constraintTop_toTopOf=\"parent\" />\n\n                <TextView\n                    android:id=\"@+id/title_text\"\n                    android:layout_width=\"0dp\"\n                    android:layout_height=\"wrap_content\"\n                    android:drawablePadding=\"16dp\"\n                    android:layout_marginStart=\"16dp\"\n                    android:gravity=\"center_vertical|start\"\n                    tools:text=\"Spoluprace se zahranicim\"\n                    android:textAppearance=\"@style/Erouska.Title\"\n                    app:layout_constraintEnd_toEndOf=\"parent\"\n                    app:layout_constraintStart_toEndOf=\"@id/icon\"\n                    app:layout_constraintTop_toTopOf=\"@id/icon\"\n                    app:drawableEndCompat=\"@drawable/ic_arrow_right\" />\n\n                <TextView\n                    android:id=\"@+id/subtitle_text\"\n                    android:layout_width=\"0dp\"\n                    android:layout_height=\"wrap_content\"\n                    android:layout_marginTop=\"1dp\"\n                    android:gravity=\"center_vertical|start\"\n                    android:textAppearance=\"@style/Erouska.Caption\"\n                    app:layout_constraintEnd_toEndOf=\"parent\"\n                    app:layout_constraintStart_toStartOf=\"@id/title_text\"\n                    app:layout_constraintTop_toBottomOf=\"@id/title_text\"\n                    tools:text=\"Zapnuto\" />\n\n                <com.google.android.material.button.MaterialButton\n                    android:id=\"@+id/button\"\n                    style=\"@style/Widget.MaterialComponents.Button.TextButton\"\n                    android:layout_width=\"wrap_content\"\n                    android:layout_height=\"wrap_content\"\n                    android:layout_marginTop=\"8dp\"\n                    android:background=\"@null\"\n                    android:clickable=\"false\"\n                    android:focusable=\"false\"\n                    android:minWidth=\"44dp\"\n                    android:minHeight=\"40dp\"\n                    android:paddingStart=\"0dp\"\n                    android:paddingEnd=\"0dp\"\n                    android:visibility=\"gone\"\n                    app:layout_constraintStart_toStartOf=\"parent\"\n                    app:layout_constraintTop_toBottomOf=\"@id/subtitle_text\"\n                    app:rippleColor=\"@android:color/transparent\"\n                    tools:text=\"Pozastavit\"\n                    tools:visibility=\"gone\" />\n\n            </androidx.constraintlayout.widget.ConstraintLayout>\n        </com.google.android.material.card.MaterialCardView>\n    </androidx.constraintlayout.widget.ConstraintLayout>\n</layout>"
  },
  {
    "path": "app/src/main/res/layout/view_data_item.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<layout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    xmlns:tools=\"http://schemas.android.com/tools\">\n\n    <merge\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:minHeight=\"60dp\"\n        tools:parentTag=\"androidx.constraintlayout.widget.ConstraintLayout\">\n\n        <ImageView\n            android:id=\"@+id/icon\"\n            android:layout_width=\"28dp\"\n            android:layout_height=\"28dp\"\n            android:src=\"@drawable/ic_help\"\n            app:layout_constraintBottom_toBottomOf=\"parent\"\n            app:layout_constraintStart_toStartOf=\"parent\"\n            app:layout_constraintTop_toTopOf=\"parent\" />\n\n        <TextView\n            android:id=\"@+id/title_text\"\n            android:layout_width=\"0dp\"\n            android:layout_height=\"wrap_content\"\n            android:layout_marginStart=\"16dp\"\n            android:gravity=\"center_vertical|start\"\n            android:paddingTop=\"4dp\"\n            android:paddingBottom=\"4dp\"\n            android:textAppearance=\"@style/Erouska.Description\"\n            app:layout_constraintEnd_toEndOf=\"parent\"\n            app:layout_constraintStart_toEndOf=\"@id/icon\"\n            app:layout_constraintTop_toTopOf=\"parent\"\n            tools:text=\"@tools:sample/lorem\" />\n\n        <TextView\n            android:id=\"@+id/subtitle_text\"\n            android:layout_width=\"0dp\"\n            android:layout_height=\"wrap_content\"\n            android:layout_marginStart=\"16dp\"\n            android:gravity=\"center_vertical|start\"\n            android:paddingTop=\"4dp\"\n            android:paddingBottom=\"4dp\"\n            android:textAppearance=\"@style/Erouska.Caption\"\n            android:visibility=\"gone\"\n            app:layout_constraintEnd_toEndOf=\"parent\"\n            app:layout_constraintStart_toEndOf=\"@id/icon\"\n            app:layout_constraintTop_toBottomOf=\"@id/title_text\"\n            tools:text=\"@tools:sample/lorem\"\n            tools:visibility=\"visible\" />\n    </merge>\n</layout>"
  },
  {
    "path": "app/src/main/res/menu/bottom_nav.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<menu xmlns:android=\"http://schemas.android.com/apk/res/android\">\n\n    <item\n        android:id=\"@+id/nav_dashboard\"\n        android:icon=\"@drawable/ic_home\"\n        android:title=\"@string/app_name\" />\n    <item\n        android:id=\"@+id/nav_my_data\"\n        android:icon=\"@drawable/ic_data\"\n        android:title=\"@string/my_data_title\" />\n    <item\n        android:id=\"@+id/nav_contacts\"\n        android:icon=\"@drawable/ic_contacts\"\n        android:title=\"@string/contacts_title\" />\n    <item\n        android:id=\"@+id/nav_help\"\n        android:icon=\"@drawable/ic_help\"\n        android:title=\"@string/help_toolbar_title\" />\n</menu>"
  },
  {
    "path": "app/src/main/res/menu/dashboard.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<menu xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\">\n\n    <item\n        android:id=\"@+id/menu_share\"\n        android:title=\"@string/menu_share_app\"\n        app:showAsAction=\"ifRoom\" />\n\n</menu>"
  },
  {
    "path": "app/src/main/res/menu/exposure.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<menu xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    xmlns:android=\"http://schemas.android.com/apk/res/android\">\n\n    <item\n        android:id=\"@+id/nav_exposure_help\"\n        android:title=\"@string/menu_help\"\n        android:icon=\"@drawable/ic_help\"\n        app:iconTint=\"@color/colorPrimary\"\n        app:showAsAction=\"always\" />\n\n</menu>"
  },
  {
    "path": "app/src/main/res/menu/onboarding.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<menu xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    xmlns:android=\"http://schemas.android.com/apk/res/android\">\n\n    <item\n        android:id=\"@+id/nav_help\"\n        android:title=\"@string/menu_help\"\n        android:visible=\"true\"\n        app:showAsAction=\"always\" />\n\n</menu>"
  },
  {
    "path": "app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<adaptive-icon xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <background android:drawable=\"@drawable/ic_launcher_background\"/>\n    <foreground android:drawable=\"@drawable/ic_launcher_foreground\"/>\n</adaptive-icon>"
  },
  {
    "path": "app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<adaptive-icon xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <background android:drawable=\"@drawable/ic_launcher_background\"/>\n    <foreground android:drawable=\"@drawable/ic_launcher_foreground\"/>\n</adaptive-icon>"
  },
  {
    "path": "app/src/main/res/navigation/nav_graph.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<navigation xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    xmlns:tools=\"http://schemas.android.com/tools\"\n    android:id=\"@+id/nav_graph\">\n\n    <fragment\n        android:id=\"@+id/nav_efgs_update_fragment\"\n        android:name=\"cz.covid19cz.erouska.ui.update.efgs.EfgsUpdateFragment\"\n        android:label=\"@string/efgs_title\"\n        tools:layout=\"@layout/fragment_efgs_update\">\n        <argument\n            android:name=\"fullscreen\"\n            android:defaultValue=\"false\"\n            app:argType=\"boolean\" />\n        <argument\n            android:name=\"onboarding\"\n            android:defaultValue=\"false\"\n            app:argType=\"boolean\" />\n\n        <action\n            android:id=\"@+id/action_nav_efgs_update_fragment_to_activation_fragment\"\n            app:destination=\"@+id/nav_activation\"\n            app:enterAnim=\"@anim/nav_default_enter_anim\"\n            app:exitAnim=\"@anim/nav_default_exit_anim\"\n            app:popEnterAnim=\"@anim/nav_default_pop_enter_anim\"\n            app:popExitAnim=\"@anim/nav_default_pop_exit_anim\" />\n    </fragment>\n\n    <fragment\n        android:id=\"@+id/nav_activation_notifications_fragment\"\n        android:name=\"cz.covid19cz.erouska.ui.activation.ActivationNotificationsFragment\"\n        android:label=\"@string/activation_notifications_title\"\n        tools:layout=\"@layout/fragment_activation_notifications\">\n\n        <action\n            android:id=\"@+id/action_nav_activation_notifications_to_activation_fragment\"\n            app:destination=\"@+id/nav_activation\"\n            app:enterAnim=\"@anim/nav_default_enter_anim\"\n            app:exitAnim=\"@anim/nav_default_exit_anim\"\n            app:popEnterAnim=\"@anim/nav_default_pop_enter_anim\"\n            app:popExitAnim=\"@anim/nav_default_pop_exit_anim\" />\n\n        <action\n            android:id=\"@+id/action_nav_activation_notifications_to_efgs_update\"\n            app:destination=\"@+id/nav_efgs_update_fragment\"\n            app:enterAnim=\"@anim/nav_default_enter_anim\"\n            app:exitAnim=\"@anim/nav_default_exit_anim\"\n            app:popEnterAnim=\"@anim/nav_default_pop_enter_anim\"\n            app:popExitAnim=\"@anim/nav_default_pop_exit_anim\" />\n\n        <argument\n            android:name=\"fullscreen\"\n            android:defaultValue=\"true\"\n            app:argType=\"boolean\" />\n\n    </fragment>\n\n    <fragment\n        android:id=\"@+id/nav_welcome_fragment\"\n        android:name=\"cz.covid19cz.erouska.ui.welcome.WelcomeFragment\"\n        android:label=\"@string/app_name\"\n        tools:layout=\"@layout/fragment_welcome\">\n        <action\n            android:id=\"@+id/action_nav_welcome_to_nav_play_services_update\"\n            app:destination=\"@id/nav_play_services_update\"\n            app:enterAnim=\"@anim/nav_default_enter_anim\"\n            app:exitAnim=\"@anim/nav_default_exit_anim\"\n            app:popEnterAnim=\"@anim/nav_default_pop_enter_anim\"\n            app:popExitAnim=\"@anim/nav_default_pop_exit_anim\" />\n        <action\n            android:id=\"@+id/action_nav_welcome_fragment_to_nav_efgs_update\"\n            app:destination=\"@+id/nav_efgs_update_fragment\"\n            app:enterAnim=\"@anim/nav_default_enter_anim\"\n            app:exitAnim=\"@anim/nav_default_exit_anim\"\n            app:popEnterAnim=\"@anim/nav_default_pop_enter_anim\"\n            app:popExitAnim=\"@anim/nav_default_pop_exit_anim\" />\n        <action\n            android:id=\"@+id/action_nav_welcome_fragment_to_nav_dashboard\"\n            app:destination=\"@id/nav_dashboard\"\n            app:enterAnim=\"@anim/nav_default_enter_anim\"\n            app:exitAnim=\"@anim/nav_default_exit_anim\"\n            app:popEnterAnim=\"@anim/nav_default_pop_enter_anim\"\n            app:popExitAnim=\"@anim/nav_default_pop_exit_anim\" />\n        <action\n            android:id=\"@+id/action_nav_welcome_fragment_to_nav_help\"\n            app:destination=\"@id/nav_help\"\n            app:enterAnim=\"@anim/nav_default_enter_anim\"\n            app:exitAnim=\"@anim/nav_default_exit_anim\"\n            app:popEnterAnim=\"@anim/nav_default_pop_enter_anim\"\n            app:popExitAnim=\"@anim/nav_default_pop_exit_anim\" />\n        <action\n            android:id=\"@+id/action_nav_welcome_fragment_to_nav_how_it_works\"\n            app:destination=\"@id/nav_how_it_works\"\n            app:enterAnim=\"@anim/nav_default_enter_anim\"\n            app:exitAnim=\"@anim/nav_default_exit_anim\"\n            app:popEnterAnim=\"@anim/nav_default_pop_enter_anim\"\n            app:popExitAnim=\"@anim/nav_default_pop_exit_anim\" />\n        <action\n            android:id=\"@+id/action_nav_welcome_fragment_to_nav_activation_notifications\"\n            app:destination=\"@+id/nav_activation_notifications_fragment\"\n            app:enterAnim=\"@anim/nav_default_enter_anim\"\n            app:exitAnim=\"@anim/nav_default_exit_anim\"\n            app:popEnterAnim=\"@anim/nav_default_pop_enter_anim\"\n            app:popExitAnim=\"@anim/nav_default_pop_exit_anim\" />\n        <argument\n            android:name=\"fullscreen\"\n            android:defaultValue=\"true\"\n            app:argType=\"boolean\" />\n    </fragment>\n\n    <fragment\n        android:id=\"@+id/nav_sandbox\"\n        android:name=\"cz.covid19cz.erouska.ui.sandbox.SandboxFragment\"\n        android:label=\"Test\"\n        tools:layout=\"@layout/fragment_sandbox\">\n        <action\n            android:id=\"@+id/action_nav_sandbox_to_nav_my_data\"\n            app:destination=\"@id/nav_my_data\"\n            app:enterAnim=\"@anim/nav_default_enter_anim\"\n            app:exitAnim=\"@anim/nav_default_exit_anim\"\n            app:popEnterAnim=\"@anim/nav_default_pop_enter_anim\"\n            app:popExitAnim=\"@anim/nav_default_pop_exit_anim\" />\n        <action\n            android:id=\"@+id/action_nav_sandbox_to_nav_welcome_fragment\"\n            app:destination=\"@id/nav_welcome_fragment\"\n            app:enterAnim=\"@anim/nav_default_enter_anim\"\n            app:exitAnim=\"@anim/nav_default_exit_anim\"\n            app:popEnterAnim=\"@anim/nav_default_pop_enter_anim\"\n            app:popExitAnim=\"@anim/nav_default_pop_exit_anim\"\n            app:popUpTo=\"@id/nav_welcome_fragment\" />\n    </fragment>\n\n    <fragment\n        android:id=\"@+id/nav_help\"\n        android:name=\"cz.covid19cz.erouska.ui.help.HelpFragment\"\n        android:label=\"@string/help_toolbar_title\"\n        tools:layout=\"@layout/fragment_help\">\n\n        <action\n            android:id=\"@+id/action_nav_help_to_nav_about\"\n            app:destination=\"@id/nav_about\"\n            app:enterAnim=\"@anim/nav_default_enter_anim\"\n            app:exitAnim=\"@anim/nav_default_exit_anim\"\n            app:popEnterAnim=\"@anim/nav_default_pop_enter_anim\"\n            app:popExitAnim=\"@anim/nav_default_pop_exit_anim\" />\n\n        <action\n            android:id=\"@+id/action_nav_help_to_nav_help_category\"\n            app:destination=\"@id/nav_help_category\"\n            app:enterAnim=\"@anim/nav_default_enter_anim\"\n            app:exitAnim=\"@anim/nav_default_exit_anim\"\n            app:popEnterAnim=\"@anim/nav_default_pop_enter_anim\"\n            app:popExitAnim=\"@anim/nav_default_pop_exit_anim\" />\n\n        <action\n            android:id=\"@+id/action_nav_help_to_nav_help_search\"\n            app:destination=\"@id/nav_help_search\"\n            app:enterAnim=\"@anim/nav_default_enter_anim\"\n            app:exitAnim=\"@anim/nav_default_exit_anim\"\n            app:popEnterAnim=\"@anim/nav_default_pop_enter_anim\"\n            app:popExitAnim=\"@anim/nav_default_pop_exit_anim\" />\n\n        <argument\n            android:name=\"fullscreen\"\n            android:defaultValue=\"false\"\n            app:argType=\"boolean\" />\n\n    </fragment>\n\n    <fragment\n        android:id=\"@+id/nav_help_category\"\n        android:name=\"cz.covid19cz.erouska.ui.helpcategory.HelpCategoryFragment\"\n        tools:layout=\"@layout/fragment_help_category\">\n\n        <argument\n            android:name=\"fullscreen\"\n            android:defaultValue=\"true\"\n            app:argType=\"boolean\" />\n\n        <argument\n            android:name=\"category\"\n            app:argType=\"cz.covid19cz.erouska.ui.help.data.FaqCategory\"/>\n\n        <action\n            android:id=\"@+id/action_nav_help_category_to_nav_help_question\"\n            app:destination=\"@id/nav_help_question\"\n            app:enterAnim=\"@anim/nav_default_enter_anim\"\n            app:exitAnim=\"@anim/nav_default_exit_anim\"\n            app:popEnterAnim=\"@anim/nav_default_pop_enter_anim\"\n            app:popExitAnim=\"@anim/nav_default_pop_exit_anim\" />\n\n        <action\n            android:id=\"@+id/action_nav_help_to_nav_help_search\"\n            app:destination=\"@id/nav_help_search\"\n            app:enterAnim=\"@anim/nav_default_enter_anim\"\n            app:exitAnim=\"@anim/nav_default_exit_anim\"\n            app:popEnterAnim=\"@anim/nav_default_pop_enter_anim\"\n            app:popExitAnim=\"@anim/nav_default_pop_exit_anim\" />\n\n    </fragment>\n\n    <fragment\n        android:id=\"@+id/nav_help_question\"\n        android:name=\"cz.covid19cz.erouska.ui.helpquestion.HelpQuestionFragment\"\n        tools:layout=\"@layout/fragment_help_question\">\n\n        <argument\n            android:name=\"fullscreen\"\n            android:defaultValue=\"true\"\n            app:argType=\"boolean\" />\n\n        <argument\n            android:name=\"question\"\n            app:argType=\"cz.covid19cz.erouska.ui.help.data.Question\"/>\n\n        <argument\n            android:name=\"category\"\n            app:argType=\"string\"\n            />\n\n    </fragment>\n\n    <fragment\n        android:id=\"@+id/nav_help_search\"\n        android:name=\"cz.covid19cz.erouska.ui.helpsearch.HelpSearchFragment\"\n        tools:layout=\"@layout/fragment_help_search\">\n\n        <argument\n            android:name=\"fullscreen\"\n            android:defaultValue=\"true\"\n            app:argType=\"boolean\" />\n\n    </fragment>\n\n    <fragment\n        android:id=\"@+id/nav_verification\"\n        android:name=\"cz.covid19cz.erouska.ui.verification.VerificationFragment\"\n        android:label=\"@string/send_data\"\n        tools:layout=\"@layout/fragment_verification\">\n        <argument\n            android:name=\"fullscreen\"\n            android:defaultValue=\"true\"\n            app:argType=\"boolean\" />\n        <action\n            android:id=\"@+id/action_nav_verification_to_nav_symptom_date\"\n            app:destination=\"@id/nav_symptom_date\" />\n        <action\n            android:id=\"@+id/action_nav_verification_to_nav_error\"\n            app:destination=\"@id/nav_error\" />\n        <action\n            android:id=\"@+id/action_nav_error_to_nav_no_verification_code\"\n            app:destination=\"@id/nav_no_verification_code\"\n            />\n    </fragment>\n\n    <fragment\n        android:id=\"@+id/nav_error\"\n        android:name=\"cz.covid19cz.erouska.ui.error.ErrorFragment\"\n        android:label=\"@string/send_data\"\n        tools:layout=\"@layout/fragment_error\">\n\n        <argument\n            android:name=\"type\"\n            app:argType=\"cz.covid19cz.erouska.ui.error.entity.ErrorType\"\n            android:defaultValue=\"NO_INTERNET\" />\n\n        <argument\n            android:name=\"fullscreen\"\n            android:defaultValue=\"true\"\n            app:argType=\"boolean\" />\n\n        <argument\n            android:name=\"error_code\"\n            android:defaultValue=\"\"\n            app:argType=\"string\" />\n\n        <action\n            android:id=\"@+id/action_nav_error_to_nav_dashboard\"\n            app:popUpTo=\"@+id/nav_dashboard\"\n            />\n    </fragment>\n\n    <fragment\n        android:id=\"@+id/nav_no_verification_code\"\n        android:name=\"cz.covid19cz.erouska.ui.noverificationcode.NoVerificationCodeFragment\"\n        android:label=\"@string/no_verification_code\"\n        tools:layout=\"@layout/fragment_no_verification_code\">\n\n        <argument\n            android:name=\"fullscreen\"\n            android:defaultValue=\"true\"\n            app:argType=\"boolean\" />\n    </fragment>\n\n    <fragment\n        android:id=\"@+id/nav_dashboard\"\n        android:name=\"cz.covid19cz.erouska.ui.dashboard.DashboardFragment\"\n        android:label=\"@string/app_name\"\n        tools:layout=\"@layout/fragment_dashboard_cards\">\n        <action\n            android:id=\"@+id/action_nav_dashboard_to_nav_efgs_update\"\n            app:destination=\"@id/nav_efgs_update_fragment\"\n            app:enterAnim=\"@anim/nav_default_enter_anim\"\n            app:exitAnim=\"@anim/nav_default_exit_anim\"\n            app:popEnterAnim=\"@anim/nav_default_pop_enter_anim\"\n            app:popExitAnim=\"@anim/nav_default_pop_exit_anim\" />\n        <action\n            android:id=\"@+id/action_nav_dashboard_to_nav_play_services_update\"\n            app:destination=\"@id/nav_play_services_update\"\n            app:enterAnim=\"@anim/nav_default_enter_anim\"\n            app:exitAnim=\"@anim/nav_default_exit_anim\"\n            app:popEnterAnim=\"@anim/nav_default_pop_enter_anim\"\n            app:popExitAnim=\"@anim/nav_default_pop_exit_anim\" />\n        <action\n            android:id=\"@+id/action_nav_dashboard_to_nav_verification\"\n            app:destination=\"@+id/nav_verification\"\n            app:enterAnim=\"@anim/nav_default_enter_anim\"\n            app:exitAnim=\"@anim/nav_default_exit_anim\"\n            app:popEnterAnim=\"@anim/nav_default_pop_enter_anim\"\n            app:popExitAnim=\"@anim/nav_default_pop_exit_anim\" />\n        <action\n            android:id=\"@+id/action_nav_dashboard_to_nav_welcome_fragment\"\n            app:destination=\"@id/nav_welcome_fragment\"\n            app:enterAnim=\"@anim/nav_default_enter_anim\"\n            app:exitAnim=\"@anim/nav_default_exit_anim\"\n            app:launchSingleTop=\"true\"\n            app:popEnterAnim=\"@anim/nav_default_pop_enter_anim\"\n            app:popExitAnim=\"@anim/nav_default_pop_exit_anim\"\n            app:popUpTo=\"@id/nav_graph\"\n            app:popUpToInclusive=\"true\" />\n        <action\n            android:id=\"@+id/action_nav_dashboard_to_nav_activation\"\n            app:destination=\"@id/nav_activation\"\n            app:enterAnim=\"@anim/nav_default_enter_anim\"\n            app:exitAnim=\"@anim/nav_default_exit_anim\"\n            app:popEnterAnim=\"@anim/nav_default_pop_enter_anim\"\n            app:popExitAnim=\"@anim/nav_default_pop_exit_anim\" />\n        <action\n            android:id=\"@+id/action_nav_dashboard_to_nav_exposure\"\n            app:destination=\"@id/nav_exposure\"\n            app:enterAnim=\"@anim/nav_default_enter_anim\"\n            app:exitAnim=\"@anim/nav_default_exit_anim\"\n            app:popEnterAnim=\"@anim/nav_default_pop_enter_anim\"\n            app:popExitAnim=\"@anim/nav_default_pop_exit_anim\" />\n        <action\n            android:id=\"@+id/action_nav_dashboard_to_nav_how_it_works\"\n            app:destination=\"@id/nav_how_it_works\"\n            app:enterAnim=\"@anim/nav_default_enter_anim\"\n            app:exitAnim=\"@anim/nav_default_exit_anim\"\n            app:popEnterAnim=\"@anim/nav_default_pop_enter_anim\"\n            app:popExitAnim=\"@anim/nav_default_pop_exit_anim\" />\n        <action\n            android:id=\"@+id/action_nav_dashboard_to_nav_exposure_info\"\n            app:destination=\"@id/nav_exposure_info\" />\n        <action\n            android:id=\"@+id/action_nav_dashboard_to_nav_efgs\"\n            app:destination=\"@id/nav_efgs\"\n            app:enterAnim=\"@anim/nav_default_enter_anim\"\n            app:exitAnim=\"@anim/nav_default_exit_anim\"\n            app:popEnterAnim=\"@anim/nav_default_pop_enter_anim\"\n            app:popExitAnim=\"@anim/nav_default_pop_exit_anim\" />\n    </fragment>\n    <fragment\n        android:id=\"@+id/nav_exposure\"\n        android:name=\"cz.covid19cz.erouska.ui.exposure.ExposureFragment\"\n        tools:layout=\"@layout/fragment_exposure\">\n        <action\n            android:id=\"@+id/action_nav_dashboard_to_nav_recent_exposures\"\n            app:destination=\"@id/nav_recent_exposures\"\n            app:enterAnim=\"@anim/nav_default_enter_anim\"\n            app:exitAnim=\"@anim/nav_default_exit_anim\"\n            app:popEnterAnim=\"@anim/nav_default_pop_enter_anim\"\n            app:popExitAnim=\"@anim/nav_default_pop_exit_anim\" />\n\n        <argument\n            android:name=\"fullscreen\"\n            android:defaultValue=\"true\"\n            app:argType=\"boolean\" />\n\n        <argument\n            android:name=\"demo\"\n            android:defaultValue=\"false\"\n            app:argType=\"boolean\" />\n        <action\n            android:id=\"@+id/action_nav_exposure_to_nav_exposure_help\"\n            app:destination=\"@id/nav_exposure_help\" />\n\n    </fragment>\n    <fragment\n        android:id=\"@+id/nav_recent_exposures\"\n        android:name=\"cz.covid19cz.erouska.ui.recentexposures.RecentExposuresFragment\"\n        tools:layout=\"@layout/fragment_recent_exposures\">\n\n        <argument\n            android:name=\"fullscreen\"\n            android:defaultValue=\"true\"\n            app:argType=\"boolean\" />\n    </fragment>\n    <fragment\n        android:id=\"@+id/nav_activation\"\n        android:name=\"cz.covid19cz.erouska.ui.activation.ActivationFragment\"\n        android:label=\"@string/privacy_toolbar_title\"\n        tools:layout=\"@layout/fragment_activation\">\n        <action\n            android:id=\"@+id/action_nav_activation_to_nav_dashboard\"\n            app:destination=\"@id/nav_dashboard\"\n            app:enterAnim=\"@anim/nav_default_enter_anim\"\n            app:exitAnim=\"@anim/nav_default_exit_anim\"\n            app:popEnterAnim=\"@anim/nav_default_pop_enter_anim\"\n            app:popExitAnim=\"@anim/nav_default_pop_exit_anim\" />\n        <argument\n            android:name=\"fullscreen\"\n            android:defaultValue=\"true\"\n            app:argType=\"boolean\" />\n    </fragment>\n    <fragment\n        android:id=\"@+id/nav_my_data\"\n        android:name=\"cz.covid19cz.erouska.ui.mydata.MyDataFragment\"\n        android:label=\"@string/my_data_title\">\n        <action\n            android:id=\"@+id/action_nav_my_data_to_nav_help\"\n            app:destination=\"@id/nav_help\"\n            app:enterAnim=\"@anim/nav_default_enter_anim\"\n            app:exitAnim=\"@anim/nav_default_exit_anim\"\n            app:popEnterAnim=\"@anim/nav_default_pop_enter_anim\"\n            app:popExitAnim=\"@anim/nav_default_pop_exit_anim\" />\n    </fragment>\n    <fragment\n        android:id=\"@+id/nav_contacts\"\n        android:name=\"cz.covid19cz.erouska.ui.contacts.ContactsFragment\"\n        android:label=\"@string/contacts_title\"\n        tools:layout=\"@layout/fragment_contacts\" />\n    <fragment\n        android:id=\"@+id/nav_about\"\n        android:name=\"cz.covid19cz.erouska.ui.about.AboutFragment\"\n        android:label=\"@string/about_title\"\n        tools:layout=\"@layout/fragment_about\">\n        <action\n            android:id=\"@+id/action_nav_about_to_nav_sandbox\"\n            app:destination=\"@id/nav_sandbox\"\n            app:enterAnim=\"@anim/nav_default_enter_anim\"\n            app:exitAnim=\"@anim/nav_default_exit_anim\"\n            app:popEnterAnim=\"@anim/nav_default_pop_enter_anim\"\n            app:popExitAnim=\"@anim/nav_default_pop_exit_anim\" />\n\n        <argument\n            android:name=\"fullscreen\"\n            android:defaultValue=\"false\"\n            app:argType=\"boolean\" />\n    </fragment>\n    <fragment\n        android:id=\"@+id/nav_play_services_update\"\n        android:name=\"cz.covid19cz.erouska.ui.update.playservices.UpdatePlayServicesFragment\">\n        <argument\n            android:name=\"fullscreen\"\n            android:defaultValue=\"true\"\n            app:argType=\"boolean\" />\n        <argument\n            android:name=\"demo\"\n            android:defaultValue=\"false\"\n            app:argType=\"boolean\" />\n    </fragment>\n    <fragment\n        android:id=\"@+id/nav_efgs\"\n        android:name=\"cz.covid19cz.erouska.ui.efgs.EfgsFragment\"\n        android:label=\"@string/efgs_title\"\n        tools:layout=\"@layout/fragment_efgs\"\n        >\n        <argument\n            android:name=\"fullscreen\"\n            android:defaultValue=\"true\"\n            app:argType=\"boolean\" />\n    </fragment>\n    <fragment\n        android:id=\"@+id/nav_sandbox_config\"\n        android:name=\"cz.covid19cz.erouska.ui.sandbox.SandboxConfigFragment\"\n        android:label=\"SandboxConfigFragment\"\n        tools:layout=\"@layout/fragment_sandbox_config\" />\n    <fragment\n        android:id=\"@+id/nav_sandbox_data\"\n        android:name=\"cz.covid19cz.erouska.ui.sandbox.SandboxDataFragment\"\n        android:label=\"SandboxDataFragment\"\n        tools:layout=\"@layout/fragment_sandbox_data\" />\n    <fragment\n        android:id=\"@+id/nav_exposure_info\"\n        android:name=\"cz.covid19cz.erouska.ui.exposureinfo.ExposureInfoFragment\"\n        tools:layout=\"@layout/fragment_exposure_info\">\n        <argument\n            android:name=\"fullscreen\"\n            android:defaultValue=\"true\"\n            app:argType=\"boolean\" />\n        <argument\n            android:name=\"demo\"\n            android:defaultValue=\"false\"\n            app:argType=\"boolean\" />\n        <action\n            android:id=\"@+id/action_nav_exposure_info_to_nav_exposure\"\n            app:destination=\"@id/nav_exposure\" />\n    </fragment>\n    <fragment\n        android:id=\"@+id/nav_exposure_help\"\n        android:name=\"cz.covid19cz.erouska.ui.exposurehelp.ExposureHelpFragment\"\n        tools:layout=\"@layout/fragment_exposure_help\"\n        android:label=\"@string/help_toolbar_title\" >\n        <argument\n            android:name=\"type\"\n            app:argType=\"cz.covid19cz.erouska.ui.exposurehelp.entity.ExposureHelpType\"\n            android:defaultValue=\"EXPOSURE\" />\n        <argument\n            android:name=\"fullscreen\"\n            android:defaultValue=\"true\"\n            app:argType=\"boolean\" />\n    </fragment>\n    <fragment\n        android:id=\"@+id/nav_how_it_works\"\n        android:name=\"cz.covid19cz.erouska.ui.how.HowItWorksFragment\"\n        tools:layout=\"@layout/fragment_how_it_works\"\n        android:label=\"@string/how_it_works_toolbar_title\">\n        <argument\n            android:name=\"fullscreen\"\n            android:defaultValue=\"true\"\n            app:argType=\"boolean\" />\n    </fragment>\n    <fragment\n        android:id=\"@+id/nav_symptom_date\"\n        android:name=\"cz.covid19cz.erouska.ui.symptomdate.SymptomDateFragment\"\n        tools:layout=\"@layout/fragment_symptom_date\"\n        android:label=\"@string/symptom_date_title\" >\n        <action\n            android:id=\"@+id/action_nav_symptom_date_to_nav_traveller\"\n            app:destination=\"@id/nav_traveller\" />\n        <action\n            android:id=\"@+id/action_nav_symptom_date_to_efgsAgreementFragment\"\n            app:destination=\"@id/nav_efgs_agreement\" />\n    </fragment>\n    <fragment\n        android:id=\"@+id/nav_traveller\"\n        android:name=\"cz.covid19cz.erouska.ui.traveller.TravellerFragment\"\n        tools:layout=\"@layout/fragment_traveller\"\n        android:label=\"@string/traveller_title\" >\n        <action\n            android:id=\"@+id/action_nav_traveller_to_efgsAgreementFragment\"\n            app:destination=\"@id/nav_efgs_agreement\" />\n    </fragment>\n    <fragment\n        android:id=\"@+id/nav_efgs_agreement\"\n        android:name=\"cz.covid19cz.erouska.ui.efgsagreement.EfgsAgreementFragment\"\n        tools:layout=\"@layout/fragment_efgs_agreement\"\n        android:label=\"@string/efgs_agreement_title\" >\n        <action\n            android:id=\"@+id/action_nav_efgs_agreement_to_nav_publish_success\"\n            app:destination=\"@id/nav_publish_success\"\n            app:popUpTo=\"@id/nav_dashboard\" />\n        <action\n            android:id=\"@+id/action_nav_efgs_agreement_to_nav_error\"\n            app:destination=\"@id/nav_error\" />\n    </fragment>\n    <fragment\n        android:id=\"@+id/nav_publish_success\"\n        android:name=\"cz.covid19cz.erouska.ui.publishsuccess.PublishSuccessFragment\"\n        tools:layout=\"@layout/fragment_publish_success\"\n        android:label=\"@string/sent\" >\n        <argument\n            android:name=\"enoughKeys\"\n            app:argType=\"boolean\" />\n        <action\n            android:id=\"@+id/action_nav_publish_success_to_nav_dashboard\"\n            app:popUpTo=\"@id/nav_dashboard\" />\n    </fragment>\n\n</navigation>\n"
  },
  {
    "path": "app/src/main/res/values/colors.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <color name=\"colorPrimary\">#2f80ed</color>\n    <color name=\"colorPrimaryVariant\">#2874ed</color>\n    <color name=\"colorSecondary\">#EE225B</color>\n\n    <color name=\"textColorPrimary\">#000</color>\n    <color name=\"textColorSecondary\">#444</color>\n\n    <color name=\"white\">#fff</color>\n    <color name=\"gray_light\">#e8e8e8</color>\n    <color name=\"red\">#ff0000</color>\n    <color name=\"redDark\">#d81d49</color>\n    <color name=\"green\">#8cc23f</color>\n    <color name=\"orange\">#DB7627</color>\n\n    <color name=\"text_color_error_header\">#DF6061</color>\n\n    <color name=\"exposure_notification_red\">#DE1A1A</color>\n\n    <color name=\"separator\">#CCCCCC</color>\n\n    <color name=\"toolbarColor\">@color/white</color>\n    <color name=\"toolbarActiveColor\">@android:color/black</color>\n    <color name=\"launch_screen_background\">#C9E2F4</color>\n    <color name=\"boxStrokeColor\">#BBBBBB</color>\n\n    <color name=\"statusbarColor\">#e8e8e8</color>\n    <bool name=\"lightStatusBar\">true</bool>\n\n    <color name=\"highlight\">#FFF500</color>\n    <color name=\"search_background\">#fff</color>\n\n    <color name=\"background\">@color/white</color>\n    <color name=\"ic_help\">#717171</color>\n\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values/controls.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n</resources>"
  },
  {
    "path": "app/src/main/res/values/dimens.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n\n    <!-- Basics -->\n    <dimen name=\"fragment_padding\">16dp</dimen>\n    <dimen name=\"fragment_padding_bottom_larger\">32dp</dimen>\n\n    <!-- Material Button -->\n    <dimen name=\"button_height\">56dp</dimen>\n    <dimen name=\"button_radius\">24dp</dimen>\n\n</resources>"
  },
  {
    "path": "app/src/main/res/values/ids.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <item name=\"action_sandbox\" type=\"id\"/>\n    <item name=\"action_efgs\" type=\"id\"/>\n    <item name=\"action_news\" type=\"id\"/>\n    <item name=\"action_play_services\" type=\"id\"/>\n    <item name=\"action_exposure_demo\" type=\"id\"/>\n    <item name=\"action_activation\" type=\"id\"/>\n    <item name=\"action_dashboard_cards\" type=\"id\"/>\n    <item name=\"action_exposure_screen\" type=\"id\"/>\n    <item name=\"action_exposure_info\" type=\"id\"/>\n    <item name=\"action_efgs_control\" type=\"id\"/>\n</resources>"
  },
  {
    "path": "app/src/main/res/values/strings-notranslate.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"sandbox_tek_days_since_symptoms\" translatable=\"false\">Days since onset symptoms: %d</string>\n    <string name=\"sandbox_tek_report_type\" translatable=\"false\">Report type: %s</string>\n    <string name=\"sandbox_tek_rolling\" translatable=\"false\">Rolling start: %s, refresh %s</string>\n    <string name=\"sandbox_last_download\" translatable=\"false\">Last download: %s</string>\n</resources>"
  },
  {
    "path": "app/src/main/res/values/strings.xml",
    "content": "<?xml version=\"1.0\"?>\n<resources>\n    <string name=\"app_name\">eRouška</string>\n    <string name=\"help_toolbar_title\">Help</string>\n    <string name=\"go_back_button\">Back to app</string>\n    <string name=\"enable_bluetooth_button\">Enable Bluetooth</string>\n    <string name=\"enable\">Enable</string>\n    <string name=\"bt_disabled_title\">Enable Bluetooth</string>\n    <string name=\"bt_disabled_desc\">Enabling Bluetooth is necessary to log encounters with other eRouška users near you.</string>\n    <string name=\"dashboard_title_running\">eRouška is active</string>\n    <string name=\"dashboard_title_paused\">eRouška is paused</string>\n    <string name=\"dashboard_body\">Application is running in the background and monitoring your surroundings. Keep Bluetooth enabled and use your phone as usual.</string>\n    <string name=\"dashboard_body_secondary\">We will notify you if you encountered someone with COVID-19, and show you all important information.</string>\n    <string name=\"dashboard_body_no_contact\">Last update on %1$s at %2$s.</string>\n    <string name=\"dashboard_body_paused\">Application is now paused and is not collecting any data about other eRouška applications nearby. Resume the app and keep yourself and others safe. Don\\'t forget to do that especially when leaving your home.</string>\n    <string name=\"dashboard_loading_data\">Loading data...</string>\n    <string name=\"pause_app\">Pause</string>\n    <string name=\"start_app\">Start</string>\n    <string name=\"privacy_header_text\">We value your privacy. You are always in control of your data.</string>\n    <string name=\"privacy_body_text_1\">eRouška does not have any personal information about you and collects only anonymous data about other eRouška applications that you have encountered.</string>\n    <string name=\"privacy_body_text_2\"><![CDATA[You can find more information about personal data processing and other conditions in <a href=\"%1$s\">Terms and conditions</a>.]]></string>\n    <string name=\"privacy_finish\">Finish activation</string>\n    <string name=\"privacy_toolbar_title\">Privacy</string>\n    <string name=\"error_title\">Error</string>\n    <string name=\"activation_error_header\">Activation could not be finished</string>\n    <string name=\"activation_try_again\">Try again</string>\n    <string name=\"menu_help\">Help</string>\n    <string name=\"my_data_title\">News</string>\n    <string name=\"about_content\">Starting with version 2.0, eRouška is being developed by the Ministry of Health in collaboration with the National agency for communication and information technologies (NAKIT). Earlier versions of eRouška were developed by a team of volunteers from the COVID19CZ community. Most of the original eRouška developers continue to work on newer versions in the NAKIT team.</string>\n    <string name=\"about_tos_content\"><![CDATA[You can find more information about personal data processing and other terms and conditions in <a href=\"%1$s\">Terms and conditions</a>.]]></string>\n    <string name=\"about_tos_link\">Terms and conditions</string>\n    <string name=\"about_title\">About application</string>\n    <string name=\"permission_rationale_title\">The permission to access location needs to be granted to make the application work properly.</string>\n    <string name=\"permission_rationale_body\">You can find more information about why that is in Help.</string>\n    <string name=\"permission_rationale_settings\">Settings</string>\n    <string name=\"permission_rationale_dismiss\">Dismiss</string>\n    <string name=\"welcome_help\">How does it work?</string>\n    <string name=\"welcome_activation\">Continue to activation</string>\n    <string name=\"welcome_description\"><![CDATA[The application will monitor your surroundings continuously and record identifiers of phones with eRouška you encounter.<br/><br/>If any of the users test positive for COVID-19, the app will notify you that there was a risky encounter.<br/><br/>If you test positive, the app will notify all application users that you encountered.]]></string>\n    <string name=\"welcome_title\">eRou\\u0161ka will help you protect yourself and others too</string>\n    <string name=\"contacts_title\">Contacts</string>\n    <string name=\"send_data\">Anonymously notify others</string>\n    <string name=\"sent\">Sent</string>\n    <string name=\"share_app_title\">Share eRouška</string>\n    <string name=\"menu_share_app\">Share application</string>\n    <string name=\"share_app_text\">Hi, I\\'m using eRouška. Install it so we can help stop the spread of COVID-19 together. The application can anonymously notify you about a risky encounter and recommend further steps. The application can be found at %s</string>\n    <string name=\"delete_registration\">Delete registration</string>\n    <string name=\"about\">About application</string>\n    <string name=\"no_internet\">Your device seems to be offline.</string>\n    <string name=\"battery_opt_label\">Application on the background</string>\n    <string name=\"help_write_chabot\">Chat with Anežka – eRouška support</string>\n    <string name=\"my_data_current_measures\">Current measures</string>\n    <string name=\"my_data_current_measures_title\">Information on current measures</string>\n    <string name=\"my_data_current_situation\">Current situation and case numbers</string>\n    <string name=\"my_data_stats\">eRouška in numbers</string>\n    <string name=\"my_data_yesterday\">%1$s yesterday</string>\n    <string name=\"my_data_for_day\">%1$s on %2$s</string>\n    <string name=\"my_data_activated_apps\">%1$s applications activated</string>\n    <string name=\"my_data_notifications_sent\">%1$s people who tested positive anonymously notified others</string>\n    <string name=\"my_data_notifications_shown\">%1$s notifications about risky encounters sent</string>\n    <string name=\"my_data_tests\">%1$s PCR tests performed</string>\n    <string name=\"my_data_antigen_tests\">%1$s antigen tests performed</string>\n    <string name=\"my_data_ack_cases\">%1$s confirmed cases in total</string>\n    <string name=\"my_data_act_cases\">%1$s active cases</string>\n    <string name=\"my_data_cured\">%1$s cured individuals</string>\n    <string name=\"my_data_death_toll\">%1$s deceased</string>\n    <string name=\"my_data_hospitalized\">%1$s currently hospitalized</string>\n    <string name=\"my_data_vaccinations\">%1$s vaccine doses administered</string>\n    <string name=\"send_data_body\">If you test positive for COVID-19 you will receive an SMS message with the verification code to notify other eRouška users.</string>\n    <string name=\"send_data_last_sent_date\">You last notified others on %s.</string>\n    <string name=\"send_data_verification_hint\">Verification code</string>\n    <string name=\"send_data_button_text\">Verify data</string>\n    <string name=\"send_data_code_invalid\">Verification code was not entered correctly</string>\n    <string name=\"send_data_code_expired_header\">Verification code has expired</string>\n    <string name=\"send_data_code_expired_body\">Request a new SMS message with a verification code from the public health officer.</string>\n    <string name=\"send_data_failure_header\">We couldn\\'t send your data</string>\n    <string name=\"send_data_failure_body\">Please contact support at %1$s and mention this error code in the email: \\'%2$s\\'.</string>\n    <string name=\"send_data_back\">Back</string>\n    <string name=\"send_data_close\">Close</string>\n    <string name=\"send_data_try_again\">Try again</string>\n    <string name=\"send_data_success_header\">Data were successfully sent</string>\n    <string name=\"send_data_success_body_1\">Thank you for fighting against the spread of COVID-19.</string>\n    <string name=\"send_data_success_body_1_not_enough_keys\">You have activated eRouška only recently, so it has not logged any other eRouška users. Therefore, the app will not notify anyone about a risky encounter.</string>\n    <string name=\"send_data_success_body_2\">Please cooperate with public health officers on tracing everyone that you encountered.</string>\n    <string name=\"send_data_success_body_3\">Follow the instructions of public health officers and medical workers.</string>\n    <string name=\"symptom_date_title\">Date of first symptoms</string>\n    <string name=\"symptom_date_body\">Please enter the date of first symptoms. We will notify other eRouška apps that you met during this period.</string>\n    <string name=\"symptom_date_switch_text\">I am experiencing symptoms of COVID-19</string>\n    <string name=\"symptom_date_symptoms\">Cough, high temperature, laboured breathing, sore throat, headache, loss of smell and taste.</string>\n    <string name=\"symptom_date_hint\">Date of first symptoms</string>\n    <string name=\"button_continue\">Continue</string>\n    <string name=\"traveller_title\">Cross-border travel</string>\n    <string name=\"traveller_body\">Have you travelled to an EU country in the past 14 days?</string>\n    <string name=\"traveller_description\">Thanks to cross-border cooperation, you can notify users of foreign apps that you have met during your travel abroad about the risk of infection.</string>\n    <string name=\"traveller_button_yes\">Yes, I have been abroad</string>\n    <string name=\"traveller_button_no\">I have not been abroad</string>\n    <string name=\"efgs_agreement_title\">Cross-border cooperation</string>\n    <string name=\"efgs_agreement_traveller_body\">Do you consent to notifying users of foreign apps who you have met in the Czech Republic or abroad?</string>\n    <string name=\"efgs_agreement_non_traveller_body\">Do you consent to notifying users of foreign apps that you have met in the Czech Republic?</string>\n    <string name=\"efgs_agreement_description\"><![CDATA[Sharing data with EU countries is anonymous. By sending data abroad you agree they will be processed by EU countries according to <a href=\"%1$s\">the personal data processing agreement</a>.]]></string>\n    <string name=\"efgs_agreement_agree\">I agree</string>\n    <string name=\"efgs_agreement_disagree\">I do not agree</string>\n    <string name=\"notification_data_outdated_title\">Risky encounters update</string>\n    <string name=\"data_notification_close\">Close</string>\n    <string name=\"notification_exposure_title\">Risky encounter</string>\n    <string name=\"notification_exposure_text\">You have recently encountered someone who tested positive for COVID-19. Watch your health status closely. Find more info in the app.</string>\n    <string name=\"notification_exposure_notifications_off_text\">Don\\'t forget to resume it</string>\n    <string name=\"notification_channel_exposure\">Risky encounter</string>\n    <string name=\"notification_channel_outdated_data\">Risky encounters update</string>\n    <string name=\"notification_channel_exposure_notifications_off\">eRouška is paused</string>\n    <string name=\"exposure_notifications_off_title\">Enable COVID-19 Exposure Notifications</string>\n    <string name=\"exposure_notifications_off_body\">eRouška cannot communicate with other eRouška applications nearby.\\n\\nEnable COVID-19 Exposure Notifications by pressing \\\"Enable\\\".</string>\n    <string name=\"exposures_title\">Risky encounters</string>\n    <string name=\"exposure_notification_close\">Close</string>\n    <string name=\"exposure_notification_more_info\">More information</string>\n    <string name=\"exposures_symptoms_header\">I have symptoms</string>\n    <string name=\"exposures_no_symptoms_header\">I don\\'t have symptoms</string>\n    <string name=\"play_services_title\">Update Google Play Services</string>\n    <string name=\"play_services_content\">The latest version of Google Play Services is needed to enable Exposure Notifications about risky encounters.</string>\n    <string name=\"play_services_update_button\">Update</string>\n    <string name=\"activation_notifications_title\">Notifications</string>\n    <string name=\"activation_notifications_header\">To work properly, eRouška requires COVID-19 Exposure Notifications to be enabled</string>\n    <string name=\"activation_notifications_body_1\">These notifications will indicate that you have encountered a user with eRouška who tested positive for COVID-19.</string>\n    <string name=\"activation_notifications_body_2\">The app can only work correctly if it collects and shares random identifiers which change automatically. We cannot identify an eRouška user based on these identifiers.</string>\n    <string name=\"legacy_update_button_continue\">Continue</string>\n    <string name=\"legacy_update_button_close\">Close</string>\n    <string name=\"location_off_header\">Enable Location Services</string>\n    <string name=\"location_off_body\">Although we do not use your location data, please enable Location Services so that Bluetooth and eRouška work correctly.</string>\n    <string name=\"location_off_turn_on\">Enable Location Services</string>\n    <string name=\"location_bt_off_header\">Enable Bluetooth and Location Services</string>\n    <string name=\"location_bt_off_body_1\">With Bluetooth and Location Services disabled, eRouška cannot log other devices near you.</string>\n    <string name=\"location_bt_off_body_2\">Although we do not use your location data, the app needs your permission to access Bluetooth and Location Services. Please enable them by pressing \\\"Enable Location Services\\\".</string>\n    <string name=\"location_bt_off_turn_on\">Enable Bluetooth and Location Services</string>\n    <string name=\"no_recent_exposures\">No risky encounters</string>\n    <string name=\"recent_exposures_discovered\">Risky encounters discovered on %s at %s</string>\n    <string name=\"recent_exposures_discovered_earlier\">Previously discovered risky encounters</string>\n    <string name=\"activation_error\">Failed to activate eRouška</string>\n    <string name=\"activation_error_reason\">Reason: %s</string>\n    <string name=\"activation_error_reason_bluetooth_le\">Your device does not support Bluetooth Low Energy.</string>\n    <string name=\"activation_error_reason_admin\">Only the primary account on this device can activate eRouška.</string>\n    <string name=\"activation_error_reason_bluetooth_ad\">Your device does not support Bluetooth Multiple Advertisement.</string>\n    <string name=\"activation_error_reason_en_api\">Your device does not support Exposure Notifications by Google.</string>\n    <string name=\"activation_error_reason_unauthorized\">Unauthorised API usage.</string>\n    <string name=\"ok\">OK</string>\n    <string name=\"search\">Search</string>\n    <string name=\"search_hint\">What are you looking for?</string>\n    <string name=\"previous_search_result\">Previous result</string>\n    <string name=\"next_search_result\">Next result</string>\n    <string name=\"help_no_results\">No search results</string>\n    <string name=\"help_type_more\">We haven\\'t found anything yet, so keep typing</string>\n    <string name=\"help_how_title\">How eRouška works</string>\n    <string name=\"help_how_subtitle\">Find out more about how the application works</string>\n    <string name=\"exposure_info_date\">On %s, you last encountered someone who tested positive for COVID-19.</string>\n    <string name=\"exposure_info_text\">You received the notification at least 24 hours after the infected individual tested positive for COVID-19 and entered their verification code in eRouška.\\n\\nThe encounter will be evaluated as risky if it was longer than 15 minutes and closer than 2 meters apart.\\n\\nTo keep identities anonymous, we do not know the time or place of the encounter.</string>\n    <string name=\"exposure_info_button\">Next steps</string>\n    <plurals name=\"dashboard_risky_encounter_title_bad\">\n        <item quantity=\"one\">%1$d risky encounter in the past 14 days</item>\n        <item quantity=\"other\">%1$d risky encounters in the past 14 days</item>\n    </plurals>\n    <string name=\"dashboard_risky_encounter_subtitle_bad\">On %1$s, you last encountered someone who tested positive for COVID-19.</string>\n    <string name=\"dashboard_positive_test_title\">Have you been tested for COVID-19?</string>\n    <string name=\"dashboard_positive_test_subtitle\">Notify others if your test is positive.</string>\n    <string name=\"dashboard_positive_test_button\">Anonymously notify others</string>\n    <string name=\"dashboard_travel_title\">Cross-border cooperation</string>\n    <string name=\"enabled\">Enabled</string>\n    <string name=\"disable\">Disabled</string>\n    <string name=\"support_request_button\">Email support</string>\n    <string name=\"support_description\">When you press \\\"Email support\\\" we will create an email attachment with anonymous information about your device\\'s settings (such as enabled Bluetooth, phone type etc.) and the error. This information will help us troubleshoot.</string>\n    <string name=\"support_request\">Do you wish to attach a file with anonymous information about your device\\'s settings? This information will help us troubleshoot.</string>\n    <string name=\"support_request_allowed\">Yes, attach the file</string>\n    <string name=\"support_request_denied\">No, do not attach the file</string>\n    <string name=\"support_email_chooser\">Select email application:</string>\n    <string name=\"support_email_subject\">Feedback from eRouška</string>\n    <string name=\"support_error_code\">Error code</string>\n    <string name=\"support_app_version\">Application version</string>\n    <string name=\"support_system_version\">System version</string>\n    <string name=\"support_device\">Device</string>\n    <string name=\"support_localization\">Localization</string>\n    <string name=\"support_bluetooth\">Bluetooth</string>\n    <string name=\"support_bluetooth_supports\">supports</string>\n    <string name=\"support_bluetooth_doesnt_support\">does NOT support</string>\n    <string name=\"support_location_services\">Location Services</string>\n    <string name=\"support_primary_account\">Primary account</string>\n    <string name=\"support_battery_optimization_exception\">Battery optimization exception</string>\n    <string name=\"support_installation\">Installation</string>\n    <string name=\"support_last_key_download\">Keys last downloaded</string>\n    <string name=\"support_last_notified_risky_encounter\">Last notification of a risky encounter</string>\n    <string name=\"support_last_risky_encounter_from\">Last risky encounter on</string>\n    <string name=\"support_file_name\">diagnostic_information.txt</string>\n    <string name=\"support_email_body_contact\">Tell us what we can help you with:\\n\\n</string>\n    <string name=\"support_email_body_error\">Tell us what happened before the error:\\n\\n</string>\n    <string name=\"support_screen_origin\">Screen</string>\n    <string name=\"notification_downloading_title\">Checking for risky encounters</string>\n    <string name=\"notification_downloading_description\">eRouška is checking for risky encounters with COVID-19.</string>\n    <string name=\"notification_channel_downloading\">Checking for risky encounters</string>\n    <string name=\"how_it_works_toolbar_title\">How does eRouška work?</string>\n    <string name=\"how_it_works_write_email\">Email support</string>\n    <string name=\"how_it_works_content\">Are you curious how eRouška works?</string>\n    <string name=\"how_it_works_more\">Find out more</string>\n    <string name=\"how_it_works_close\">Close</string>\n    <string name=\"how_it_works_info_content\">eRouška will notify you about risky encounters with other eRouška users that you have encountered in the past 14 days and that have tested positive for COVID-19.\\nWhen using eRouška, nobody can collect your location information or other data about you or your phone.</string>\n    <string name=\"how_it_works_encounter_title\">Phones with eRouška are waiting for encounters</string>\n    <string name=\"how_it_works_encounter_content\">When two phones with eRouška meet, they exchange some basic data about the encounter. They log the date, distance between each other, and an anonymous phone identifier. They will remember this encounter for 14 days.</string>\n    <string name=\"how_it_works_confirm_title\">If COVID-19 infection is confirmed</string>\n    <string name=\"how_it_works_confirm_content\">If a person is tested positive for COVID-19, they will automatically receive an SMS with a verification code for eRouška. By entering the code in the application, the person can anonymously notify other eRouška users.</string>\n    <string name=\"how_it_works_warn_title\">Warnings by other eRouška apps</string>\n    <string name=\"how_it_works_warn_content\">\"After you enter and confirm the code, eRouška sends out notifications about possible risky encounters to other eRouška users. \"</string>\n    <string name=\"how_it_works_control_title\">Processing encounters with infected individuals</string>\n    <string name=\"how_it_works_control_content\">The following day at the latest, other eRouška apps will check the information about newly infected individuals and compare it to those they have met.</string>\n    <string name=\"how_it_works_eval_title\">Risky encounters evaluation</string>\n    <string name=\"how_it_works_notif_title\">Displaying notifications</string>\n    <string name=\"how_it_works_notif_content\">Those who may have encountered an infected person will receive a warning in the app. It will explain the user what further steps and health measures to take.</string>\n    <string name=\"how_it_works_support_content\">Do you still have more questions or eRouška does not work properly? Contact us.</string>\n    <string name=\"no_internet_error\">Check your internet connection and try again.</string>\n    <string name=\"general_error\">Please contact support at %1$s and mention this error code in the email: %2$s.</string>\n    <string name=\"general_desc\">When you press \\\"Email support\\\" we will create an email attachment with anonymous information about your device\\'s settings (such as enabled Bluetooth, phone type etc.) and the error. This information will help us troubleshoot.</string>\n    <string name=\"send_data_code_expired_or_used\">You have already used this code or it has expired. Request a new code at %1$s.</string>\n    <string name=\"email_button\">Email support</string>\n    <string name=\"verification_email_subject\">I have not received the SMS with a verification code</string>\n    <string name=\"verification_email_body_error\">\"Dear eRouška team,\\n\\nmy COVID-19 test is positive and I have not received the SMS with a verification code.\\n\\n\\nFull name on the test request form: \\n\\n\\nPhone number on the test request form: \\n\\n\\nDate of test results: \\n\\n\\nTesting location or laboratory which handled my test results: \\n\\n\\nTest type (PCR/antigen): \"</string>\n    <string name=\"no_verification_code\">I don\\'t have the code</string>\n    <string name=\"no_verification_body\">Have you tested positive but have not received your eRouška code in an SMS? Request your code at %1$s.</string>\n    <string name=\"no_verification_caption\">Are you interested in learning how sending the code works? \\n\\n\\nIf you are tested positive for COVID-19, you will receive test results in an SMS from the laboratory. The lab also sends the results to the central information system of the Ministry of Health. \\n\\n\\nAfter the results are copied from the information system to the public health office\\'s system, automatic eRouška SMS messages with verification codes are sent. \\n\\n\\nIf the lab results are not copied in the public health office\\'s system by 10 pm, you might not receive the SMS with the verification code until the next day. \\n\\n\\nIf you did not receive eRouška SMS within one day after you received your results from the lab, please contact us at %1$s.</string>\n    <string name=\"efgs_title\">Cross-border cooperation</string>\n    <string name=\"efgs_header\">Help to fight against COVID-19 when abroad</string>\n    <string name=\"efgs_boundaries\">COVID-19 does not respect borders. Thanks to cooperation of EU countries, eRouška can warn you against risk of infection if you encountered foreigners who use similar applications of other countries.</string>\n    <string name=\"efgs_visit\">Please enable notifications about foreign risky encounters if you have been abroad in the past %1$s days or you travel regularly.</string>\n    <string name=\"efgs_visit_plus\">You can change the settings anytime.</string>\n    <string name=\"efgs_check\">Notify me about risky encounters abroad</string>\n    <string name=\"efgs_usage\">This feature may increase the volume of downloaded data. Disable it %1$d days after you return from abroad.</string>\n    <string name=\"efgs_disable_confirmation\"><![CDATA[You may not experience COVID-19 symptoms until %1$d days after you met an infected individual. Please do not disable Cross-border cooperation until <b>%1$d days</b> after you return from abroad.]]></string>\n    <string name=\"efgs_disable_confirmation_on\">Keep enabled</string>\n    <string name=\"efgs_disable_confirmation_off\">Disable</string>\n    <string name=\"send_data_code_invalid_header\">Verification code is not valid</string>\n    <string name=\"send_data_code_invalid_body\">Check the code and try entering it again. If a valid code fails repeatedly, contact us at %1$s.</string>\n    <string name=\"no_code_email_body_error\">\"Dear eRouška team,\\n\\nmy COVID-19 test is positive and my verification code for eRouška has failed. What shall I do next?\\n\\n\\nFull name on the test request form:  \\n\\n\\nPhone number on the test request form:  \\n\\n\\nDate of test results:  \\n\\n\\nTesting location or laboratory which handled my test results:  \\n\\n\\nTest type (PCR/antigen): \"</string>\n    <string name=\"my_data_vaccination\">Vaccinations</string>\n    <string name=\"my_data_first_dose\">%1$s people vaccinated with 1 dose</string>\n    <string name=\"my_data_second_dose\">%1$s people fully vaccinated</string>\n\n    <string name=\"ragnarok_more_info\">More info</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values/styles.xml",
    "content": "<resources>\n\n    <style name=\"Button\" parent=\"Widget.MaterialComponents.Button\">\n        <item name=\"cornerRadius\">@dimen/button_radius</item>\n        <item name=\"rippleColor\">@color/colorPrimaryVariant</item>\n        <item name=\"android:minHeight\">@dimen/button_height</item>\n        <item name=\"android:textColor\">@color/white</item>\n    </style>\n\n    <style name=\"OutlinedButton\" parent=\"Widget.MaterialComponents.Button.OutlinedButton\">\n        <item name=\"cornerRadius\">@dimen/button_radius</item>\n        <item name=\"rippleColor\">@color/colorPrimaryVariant</item>\n        <item name=\"android:minHeight\">@dimen/button_height</item>\n        <item name=\"android:textColor\">@color/colorPrimary</item>\n        <item name=\"android:backgroundTint\">?colorSurface</item>\n    </style>\n\n    <style name=\"DashButton\" parent=\"Widget.MaterialComponents.Button.TextButton\">\n        <item name=\"rippleColor\">@color/colorPrimaryVariant</item>\n        <item name=\"android:minHeight\">@dimen/button_height</item>\n        <item name=\"android:textColor\">@color/colorPrimary</item>\n        <item name=\"android:backgroundTint\">?colorSurface</item>\n    </style>\n\n    <style name=\"Toolbar\" parent=\"Widget.MaterialComponents.Toolbar\">\n        <item name=\"titleTextColor\">@color/toolbarActiveColor</item>\n        <item name=\"android:minHeight\">?attr/actionBarSize</item>\n        <item name=\"android:theme\">@style/ToolbarTheme</item>\n    </style>\n\n    <style name=\"Widget.App.Switch\" parent=\"Widget.MaterialComponents.CompoundButton.Switch\">\n        <item name=\"materialThemeOverlay\">@style/ThemeOverlay.App.Switch</item>\n    </style>\n\n    <style name=\"ThemeOverlay.App.Switch\" parent=\"\">\n        <item name=\"colorOnSurface\">@color/colorPrimaryVariant</item>\n        <item name=\"colorSurface\">@color/gray_light</item>\n        <item name=\"colorSecondary\">@color/colorPrimary</item>\n    </style>\n\n    <style name=\"Divider\">\n        <item name=\"android:layout_width\">match_parent</item>\n        <item name=\"android:layout_height\">0.5dp</item>\n        <item name=\"android:background\">?android:attr/listDivider</item>\n    </style>\n    \n    <style name=\"Erouska.Title\" parent=\"TextAppearance.MaterialComponents.Body1\">\n        <item name=\"android:textStyle\">bold</item>\n    </style>\n\n    <style name=\"Erouska.Title.Active\" parent=\"Erouska.Title\">\n        <item name=\"android:textColor\">@color/green</item>\n    </style>\n\n    <style name=\"Erouska.Title.Paused\" parent=\"Erouska.Title\">\n        <item name=\"android:textColor\">@color/orange</item>\n    </style>\n\n    <style name=\"Erouska.Title.Error\" parent=\"Erouska.Title\">\n        <item name=\"android:textColor\">@color/text_color_error_header</item>\n    </style>\n\n    <style name=\"Erouska.Body\" parent=\"TextAppearance.MaterialComponents.Body1\"/>\n    <style name=\"Erouska.Item\" parent=\"TextAppearance.MaterialComponents.Body1\"/>\n\n    <style name=\"Erouska.Description\" parent=\"TextAppearance.MaterialComponents.Body1\">\n        <item name=\"android:textColor\">@color/textColorSecondary</item>\n    </style>\n\n    <style name=\"Erouska.Caption\" parent=\"TextAppearance.MaterialComponents.Body2\">\n        <item name=\"android:textColor\">@color/textColorSecondary</item>\n    </style>\n\n\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values/themes.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n\n    <!-- Base application theme. -->\n    <style name=\"AppTheme\" parent=\"Theme.MaterialComponents.DayNight.NoActionBar\">\n        <!-- Customize your theme here. -->\n        <item name=\"colorPrimary\">@color/colorPrimary</item>\n        <item name=\"colorPrimaryVariant\">@color/colorPrimaryVariant</item>\n        <item name=\"colorSecondary\">@color/colorPrimary</item>\n        <item name=\"colorSecondaryVariant\">@color/colorPrimaryVariant</item>\n        <item name=\"colorControlNormal\">@color/colorPrimary</item>\n        <item name=\"android:textColorPrimary\">@color/textColorPrimary</item>\n        <item name=\"android:textColorSecondary\">@color/textColorSecondary</item>\n        <item name=\"android:statusBarColor\">@color/statusbarColor</item>\n        <item name=\"android:windowLightStatusBar\">@bool/lightStatusBar</item>\n        <item name=\"android:background\">@null</item>\n        <item name=\"switchStyle\">@style/Widget.App.Switch</item>\n        <item name=\"toolbarStyle\">@style/Toolbar</item>\n        <item name=\"bottomNavigationStyle\">@style/Widget.MaterialComponents.BottomNavigationView</item>\n        <item name=\"materialButtonStyle\">@style/Button</item>\n        <item name=\"materialButtonOutlinedStyle\">@style/OutlinedButton</item>\n        <item name=\"android:actionMenuTextColor\">@color/colorPrimary</item>\n    </style>\n\n    <style name=\"AppTheme.Launchscreen\">\n        <item name=\"android:background\">@drawable/launchscreen</item>\n    </style>\n\n    <style name=\"ToolbarTheme\" parent=\"Widget.MaterialComponents.Toolbar\">\n        <item name=\"colorControlNormal\">@color/colorPrimary</item>\n    </style>\n</resources>"
  },
  {
    "path": "app/src/main/res/values-cs/strings.xml",
    "content": "<?xml version=\"1.0\"?>\n<resources>\n    <string name=\"app_name\">eRouška</string>\n    <string name=\"help_toolbar_title\">Nápověda</string>\n    <string name=\"go_back_button\">Zpět do aplikace</string>\n    <string name=\"enable_bluetooth_button\">Zapnout Bluetooth</string>\n    <string name=\"enable\">Zapnout</string>\n    <string name=\"bt_disabled_title\">Zapněte Bluetooth</string>\n    <string name=\"bt_disabled_desc\">Zapnuté Bluetooth je důležité pro sbírání kontaktů s ostatními eRouškami ve vašem okolí.</string>\n    <string name=\"dashboard_title_running\">eRouška je aktivní</string>\n    <string name=\"dashboard_title_paused\">eRouška je pozastavená</string>\n    <string name=\"dashboard_body\">Aplikace aktuálně pracuje na pozadí a monitoruje okolí. Nechte zapnuté Bluetooth a s telefonem pracujte jako obvykle.</string>\n    <string name=\"dashboard_body_secondary\">Upozorníme vás v případě možného podezření na setkání s COVID-19 a zobrazíme vám všechny potřebné informace.</string>\n    <string name=\"dashboard_body_no_contact\">Poslední aktualizace %1$s v %2$s.</string>\n    <string name=\"dashboard_body_paused\">Aplikace je aktuálně pozastavená a nesbírá žádná data o ostatních eRouškách ve vašem okolí. Spusťte znovu eRoušku a chraňte sebe i své okolí. Nezapomínejte na to zejména ve chvíli, kdy opouštíte svůj domov.</string>\n    <string name=\"dashboard_loading_data\">Probíhá aktualizace dat…</string>\n    <string name=\"pause_app\">Pozastavit</string>\n    <string name=\"start_app\">Spustit</string>\n    <string name=\"privacy_header_text\">Myslíme na vaše soukromí, odesílání dat máte vždy pod kontrolou</string>\n    <string name=\"privacy_body_text_1\">eRouška neobsahuje žádné vaše osobní údaje a sbírá pouze anonymní data o ostatních eRouškách, se kterými se setkáte.</string>\n    <string name=\"privacy_body_text_2\"><![CDATA[Detailní informace o zpracování osobních údajů a další podmínky používání aplikace najdete v <a href=\"%1$s\">podmínkách používání</a>.]]></string>\n    <string name=\"privacy_finish\">Dokončit aktivaci</string>\n    <string name=\"privacy_toolbar_title\">Soukromí</string>\n    <string name=\"error_title\">Chyba</string>\n    <string name=\"activation_error_header\">Aktivaci aplikace nelze dokončit</string>\n    <string name=\"activation_try_again\">Zkusit znovu</string>\n    <string name=\"menu_help\">Nápověda</string>\n    <string name=\"my_data_title\">Aktuálně</string>\n    <string name=\"about_content\">Aplikaci eRouška od verze 2.0 vyvíjí Ministerstvo zdravotnictví ve spolupráci s Národní agenturou pro komunikační a informační technologie (NAKIT). Předchozí verzi aplikace eRouška vytvořil tým dobrovolníků v rámci komunitní aktivity COVID19CZ. Většina z původních autorů eRoušky pokračuje na vývoji nových verzí v týmu NAKIT.</string>\n    <string name=\"about_tos_content\"><![CDATA[Detailní informace o zpracování osobních údajů a další podmínky používání aplikace najdete v <a href=\"%1$s\">podmínkách používání</a>.]]></string>\n    <string name=\"about_tos_link\">Podmínky použití</string>\n    <string name=\"about_title\">O aplikaci</string>\n    <string name=\"permission_rationale_title\">Pro spr\\u00e1vnou funkci aplikace je nutn\\u00e9 opr\\u00e1vn\\u011bn\\u00ed k\\u00a0p\\u0159\\u00edstupu k\\u00a0poloze.</string>\n    <string name=\"permission_rationale_body\">V\\u00edce o\\u00a0tom, pro\\u010d tomu tak je, najdete v\\u00a0n\\u00e1pov\\u011bd\\u011b.</string>\n    <string name=\"permission_rationale_settings\">Nastavení</string>\n    <string name=\"permission_rationale_dismiss\">Zrušit</string>\n    <string name=\"welcome_help\">Jak to funguje</string>\n    <string name=\"welcome_activation\">Pokra\\u010dovat k\\u00a0aktivaci</string>\n    <string name=\"welcome_description\"><![CDATA[Aplikace bude nepřetržitě monitorovat vaše okolí a&nbsp;zaznamenávat všechny ostatní telefony s aplikací eRouška, ke kterým se přiblížíte.<br/><br/>Pokud se u majitele kteréhokoliv z nich potvrdí onemocnění COVID-19, eRouška vyhodnotí, zda se jedná o rizikový kontakt a upozorní vás.<br/><br/>Když se potvrdí nákaza u&nbsp;vás, eRouška upozorní všechny ostatní uživatele aplikace, se s&nbsp;kterými jste se potkali.]]></string>\n    <string name=\"welcome_title\">D\\u00edky eRou\\u0161ce ochr\\u00e1n\\u00edte sebe i\\u00a0ostatn\\u00ed ve sv\\u00e9m okol\\u00ed</string>\n    <string name=\"contacts_title\">Kontakty</string>\n    <string name=\"send_data\">Anonymně upozornit ostatní</string>\n    <string name=\"sent\">Odesláno</string>\n    <string name=\"share_app_title\">Sdílet aplikaci eRouška</string>\n    <string name=\"menu_share_app\">Sdílet aplikaci</string>\n    <string name=\"share_app_text\">Ahoj, používám aplikaci eRouška. Nainstaluj si ji taky a společně pomožme zastavit šíření onemocnění COVID-19. Aplikace dokáže anonymně a včas upozornit na rizikové setkání s nakaženým uživatelem a doporučit další postup. Najdeš ji na %s</string>\n    <string name=\"delete_registration\">Zrušit registraci</string>\n    <string name=\"about\">O\\u00a0aplikaci</string>\n    <string name=\"no_internet\">Vaše zařízení nemá aktivní přístup k internetu.</string>\n    <string name=\"battery_opt_label\">Aplikace na pozadí</string>\n    <string name=\"help_write_chabot\">Napište Anežce – podpoře eRoušky</string>\n    <string name=\"my_data_current_measures\">Aktuální opatření</string>\n    <string name=\"my_data_current_measures_title\">Informace o aktuálních opatřeních</string>\n    <string name=\"my_data_current_situation\">Aktuální situace v číslech</string>\n    <string name=\"my_data_stats\">eRouška v číslech</string>\n    <string name=\"my_data_yesterday\">Za včerejší den %1$s</string>\n    <string name=\"my_data_for_day\">%1$s za %2$s</string>\n    <string name=\"my_data_activated_apps\">%1$s aktivovaných aplikací</string>\n    <string name=\"my_data_notifications_sent\">%1$s pozitivně testovaných anonymně varovalo ostatní</string>\n    <string name=\"my_data_notifications_shown\">%1$s upozornění na riziková setkání</string>\n    <string name=\"my_data_tests\">%1$s provedených PCR testů</string>\n    <string name=\"my_data_antigen_tests\">%1$s provedených antigenních testů</string>\n    <string name=\"my_data_ack_cases\">%1$s celkem potvrzených případů</string>\n    <string name=\"my_data_act_cases\">%1$s aktivních případů</string>\n    <string name=\"my_data_cured\">%1$s vyléčených</string>\n    <string name=\"my_data_death_toll\">%1$s úmrtí</string>\n    <string name=\"my_data_hospitalized\">%1$s aktuálně hospitalizovaných</string>\n    <string name=\"my_data_vaccinations\">%1$s vykázaných očkování</string>\n    <string name=\"send_data_body\">V případě potvrzené nákazy onemocněním COVID-19 obdržíte SMS zprávu obsahující ověřovací kód pro povolení upozornění ostatních uživatelů eRoušky.</string>\n    <string name=\"send_data_last_sent_date\">Naposledy jste upozornili ostatní %s.</string>\n    <string name=\"send_data_verification_hint\">Ověřovací kód</string>\n    <string name=\"send_data_button_text\">Ověřit</string>\n    <string name=\"send_data_code_invalid\">Ověřovací kód není správně zadaný</string>\n    <string name=\"send_data_code_expired_header\">Vypršela platnost ověřovacího kódu</string>\n    <string name=\"send_data_code_expired_body\">Požádejte pracovníka hygienické stanice o zaslání nové SMS zprávy s ověřovacím kódem.</string>\n    <string name=\"send_data_failure_header\">Nepodařilo se nám odeslat data</string>\n    <string name=\"send_data_failure_body\">Kontaktujte prosím podporu na emailu %1$s a uveďte následující kód chyby: \\'%2$s\\'.</string>\n    <string name=\"send_data_back\">Zpět</string>\n    <string name=\"send_data_close\">Zavřít</string>\n    <string name=\"send_data_try_again\">Zkusit znovu</string>\n    <string name=\"send_data_success_header\">Data jste úspěšně odeslali</string>\n    <string name=\"send_data_success_body_1\">Děkujeme, že pomáháte bojovat proti šíření onemocnění COVID-19.</string>\n    <string name=\"send_data_success_body_1_not_enough_keys\">eRoušku zatím používáte jen chvíli a nemá zaznamenané žádné jiné eRoušky, proto nikoho ve vašem okolí neupozorní na rizikové setkání.</string>\n    <string name=\"send_data_success_body_2\">Spolupracujte prosím s pracovníky hygienické stanice na dohledání všech osob, se kterými jste byli v kontaktu.</string>\n    <string name=\"send_data_success_body_3\">Řiďte se pokyny hygieniků a lékařů.</string>\n    <string name=\"symptom_date_title\">Datum prvních příznaků</string>\n    <string name=\"symptom_date_body\">Vyplňte prosím datum prvních příznaků. Upozorníme všechny uživatele eRoušky, které jste potkali ve dnech, kdy se u vás objevily první příznaky.</string>\n    <string name=\"symptom_date_switch_text\">Mám příznaky onemocnění COVID-19</string>\n    <string name=\"symptom_date_symptoms\">Kašel, teplota, dušnost, bolest v krku, bolest hlavy, ztráta čichu a chuti.</string>\n    <string name=\"symptom_date_hint\">Datum prvních příznaků</string>\n    <string name=\"button_continue\">Pokračovat</string>\n    <string name=\"traveller_title\">Cesty do zahraničí</string>\n    <string name=\"traveller_body\">Cestovali jste v posledních 14 dnech do některé ze zemí Evropské unie?</string>\n    <string name=\"traveller_description\">Díky spolupráci mezi zeměmi Evropské unie můžete upozornit o riziku možné nákazy i uživatele zahraničních aplikací, které jste potkali při svých cestách do zahraničí.</string>\n    <string name=\"traveller_button_yes\">Ano, byl(a) jsem v zahraničí</string>\n    <string name=\"traveller_button_no\">Nebyl(a) jsem v zahraničí</string>\n\n    <string name=\"efgs_agreement_title\">Spolupráce se zahraničím</string>\n    <string name=\"efgs_agreement_traveller_body\">Souhlasíte s upozorněním uživatelů zahraničních aplikací, které jste potkali v České republice i v zahraničí?</string>\n    <string name=\"efgs_agreement_non_traveller_body\">Souhlasíte s upozorněním uživatelů zahraničních aplikací, které jste potkali v České republice?</string>\n    <string name=\"efgs_agreement_description\"><![CDATA[Sdílení dat se zeměmi EU je anonymní a odesláním dat do zahraničí souhlasíte s jejich zpracováním zeměmi Evropské unie podle <a href=\"%1$s\">souhlasu se zpracováním osobních údajů</a>.]]></string>\n    <string name=\"efgs_agreement_agree\">Souhlasím</string>\n    <string name=\"efgs_agreement_disagree\">Nesouhlasím</string>\n\n    <string name=\"notification_data_outdated_title\">Aktualizace rizikových setkání</string>\n    <string name=\"data_notification_close\">Zavřít</string>\n    <string name=\"notification_exposure_title\">Rizikové setkání</string>\n    <string name=\"notification_exposure_text\">Setkali jste se s osobou, u které bylo potvrzeno onemocnění COVID-19. Sledujte svůj zdravotní stav. Více informací naleznete v aplikaci.</string>\n    <string name=\"notification_exposure_notifications_off_text\">Nezapomeňte ji spustit</string>\n    <string name=\"notification_channel_exposure\">Rizikové setkání</string>\n    <string name=\"notification_channel_outdated_data\">Aktualizace rizikových setkání</string>\n    <string name=\"notification_channel_exposure_notifications_off\">Pozastavená eRouška</string>\n    <string name=\"exposure_notifications_off_title\">Zapněte Oznámení o kontaktu s COVID-19</string>\n    <string name=\"exposure_notifications_off_body\">eRouška nyní nemůže komunikovat s jinými eRouškami ve vašem okolí.\\n\\nZapněte Oznámení o kontaktu s COVID-19 pomocí tlačítka \\\"Zapnout\\\".</string>\n    <string name=\"exposures_title\">Riziková setkání</string>\n    <string name=\"exposure_notification_close\">Zavřít</string>\n    <string name=\"exposure_notification_more_info\">Více informací</string>\n    <string name=\"exposures_symptoms_header\">Mám příznaky</string>\n    <string name=\"exposures_no_symptoms_header\">Nemám příznaky</string>\n    <string name=\"play_services_title\">Aktualizujte aplikaci Služby Google Play</string>\n    <string name=\"play_services_content\">Nejnovější verze aplikace Služby Google Play je nezbytná pro aktivaci oznámení o setkání s osobou, u které bylo potvrzeno onemocnění COVID-19.</string>\n    <string name=\"play_services_update_button\">Aktualizovat</string>\n    <string name=\"activation_notifications_title\">Oznámení</string>\n    <string name=\"activation_notifications_header\">eRouška potřebuje pro správné fungování zapnutá oznámení o kontaktu s COVID-19</string>\n    <string name=\"activation_notifications_body_1\">Tato oznámení vás upozorní, pokud jste byli v blízkosti uživatele eRoušky s pozitivním testem na onemocnění COVID-19.</string>\n    <string name=\"activation_notifications_body_2\">Podstatou správného fungování je sdílení a shromažďování náhodných identifikačních čísel, která se automaticky mění. Uživatele eRoušky není možno podle těchto identifikátorů rozpoznat.</string>\n    <string name=\"legacy_update_button_continue\">Pokračovat</string>\n    <string name=\"legacy_update_button_close\">Zavřít</string>\n    <string name=\"location_off_header\">Zapněte Polohové služby</string>\n    <string name=\"location_off_body\">I když polohová data nijak nevyužíváme, zapněte Polohové služby pro správné fungování Bluetooth a aplikace eRouška.</string>\n    <string name=\"location_off_turn_on\">Zapnout Polohové služby</string>\n    <string name=\"location_bt_off_header\">Zapněte Bluetooth a Polohové služby</string>\n    <string name=\"location_bt_off_body_1\">Bez zapnutého Bluetooth a Polohových služeb nemůže eRouška vytvářet seznam ostatních eRoušek ve vašem okolí.</string>\n    <string name=\"location_bt_off_body_2\">I když polohová data nijak nevyužíváme, zapněte obě funkce pro správné fungování Bluetooth pomocí tlačítka \\\"Zapnout BT a Polohové služby\\\".</string>\n    <string name=\"location_bt_off_turn_on\">Zapnout BT a Polohové služby</string>\n    <string name=\"no_recent_exposures\">Žádná riziková setkání</string>\n    <string name=\"recent_exposures_discovered\">Riziková setkání zjištěná %s v %s</string>\n    <string name=\"recent_exposures_discovered_earlier\">Starší riziková setkání</string>\n    <string name=\"activation_error\">eRoušku nelze aktivovat</string>\n    <string name=\"activation_error_reason\">Důvod: %s</string>\n    <string name=\"activation_error_reason_bluetooth_le\">Toto zařízení nepodporuje Bluetooth Low Energy.</string>\n    <string name=\"activation_error_reason_admin\">eRoušku lze aktivovat jenom na primárním účtu tohoto zařízení.</string>\n    <string name=\"activation_error_reason_bluetooth_ad\">Toto zařízení nepodporuje Bluetooth Multiple Advertisement.</string>\n    <string name=\"activation_error_reason_en_api\">Toto zařízení nepodporuje Oznámení o možném kontaktu od Google.</string>\n    <string name=\"activation_error_reason_unauthorized\">Nepovolený přístup k API.</string>\n    <string name=\"ok\">OK</string>\n    <string name=\"search\">Hledat</string>\n    <string name=\"search_hint\">Napište, co hledáte</string>\n    <string name=\"previous_search_result\">Předešlý výsledek</string>\n    <string name=\"next_search_result\">Následující výsledek</string>\n    <string name=\"help_no_results\">Žádné výsledky vyhledávání</string>\n    <string name=\"help_type_more\">Zatím jsme nic nenašli, pokračujte ve psaní</string>\n    <string name=\"help_how_title\">Jak eRouška funguje</string>\n    <string name=\"help_how_subtitle\">Zjistěte více o tom, jak aplikace funguje</string>\n    <string name=\"exposure_info_date\">Naposledy %s jste se setkali s osobou, u které bylo potvrzeno onemocnění COVID-19</string>\n    <string name=\"exposure_info_text\">Upozornění se vám zobrazilo nejdříve 24 hodin poté, co se nakažený dozvěděl pozitivní výsledek testu na COVID-19 a zadal ověřovací kód do eRoušky.\\n\\nRizikový kontakt vyhodnotíme v případě, že jste s nakaženým byli v kontaktu na vzdálenost kratší než 2 metry po dobu alespoň 15 minut.\\n\\nKvůli zachování anonymity nakaženého neznáme čas ani místo setkání.</string>\n    <string name=\"exposure_info_button\">Jak postupovat dál</string>\n\n    <plurals name=\"dashboard_risky_encounter_title_bad\">\n        <item quantity=\"one\">Za posledních 14\\u00A0dní %1$d\\u00A0rizikové setkání</item>\n        <item quantity=\"few\">Za posledních 14\\u00A0dní %1$d\\u00A0riziková setkání</item>\n        <item quantity=\"other\">Za posledních 14\\u00A0dní %1$d\\u00A0rizikových setkání</item>\n    </plurals>\n\n    <string name=\"dashboard_risky_encounter_subtitle_bad\">Naposledy %1$s jste se setkali s osobou, u které bylo potvrzeno onemocnění COVID-19.</string>\n    <string name=\"dashboard_positive_test_title\">Byli jste na testu COVID-19?</string>\n    <string name=\"dashboard_positive_test_subtitle\">Pokud je výsledek pozitivní, upozorněte ostatní.</string>\n    <string name=\"dashboard_positive_test_button\">Anonymně upozornit ostatní</string>\n\n    <string name=\"dashboard_travel_title\">Spolupráce se zahraničím</string>\n    <string name=\"enabled\">Zapnuto</string>\n    <string name=\"disable\">Vypnuto</string>\n    <string name=\"support_request_button\">Napsat e-mail na podporu</string>\n    <string name=\"support_description\">Po stisknutí tlačítka “Napsat e-mail na podporu” vytvoříme přílohu e-mailu s anonymními informacemi o nastavení telefonu (například zapnuté Bluetooth, typ telefonu) a chybě. Tyto informace nám pomohou s řešením chyby.</string>\n    <string name=\"support_request\">Chcete do e-mailu přidat přílohu s anonymními informacemi o nastavení telefonu? Tyto informace nám pomohou s řešením případné chyby.</string>\n    <string name=\"support_request_allowed\">Chci přidat přílohu</string>\n    <string name=\"support_request_denied\">Nechci přidat přílohu</string>\n    <string name=\"support_email_chooser\">Vyberte e-mailovou aplikaci:</string>\n    <string name=\"support_email_subject\">Zpětná vazba z aplikace eRouška</string>\n    <string name=\"support_error_code\">Kód chyby</string>\n    <string name=\"support_app_version\">Verze aplikace</string>\n    <string name=\"support_system_version\">Verze systému</string>\n    <string name=\"support_device\">Zařízení</string>\n    <string name=\"support_localization\">Lokalizace</string>\n    <string name=\"support_bluetooth\">Bluetooth</string>\n    <string name=\"support_bluetooth_supports\">podporuje</string>\n    <string name=\"support_bluetooth_doesnt_support\">NEpodporuje</string>\n    <string name=\"support_location_services\">Polohové služby</string>\n    <string name=\"support_primary_account\">Primární účet</string>\n    <string name=\"support_battery_optimization_exception\">Výjimka z optimalizace baterie</string>\n    <string name=\"support_installation\">Instalace</string>\n    <string name=\"support_last_key_download\">Poslední stažení klíčů</string>\n    <string name=\"support_last_notified_risky_encounter\">Poslední notifikace rizikového setkání</string>\n    <string name=\"support_last_risky_encounter_from\">Poslední rizikové setkání z</string>\n    <string name=\"support_file_name\">diagnosticke_informace.txt</string>\n    <string name=\"support_email_body_contact\">Napište nám, s čím vám můžeme poradit:\\n\\n</string>\n    <string name=\"support_email_body_error\">Napište nám, jak k chybě došlo:\\n\\n</string>\n    <string name=\"support_screen_origin\">Obrazovka</string>\n    <string name=\"notification_downloading_title\">Probíhá kontrola rizikových kontaktů</string>\n    <string name=\"notification_downloading_description\">eRouška zjišťuje, zda jste byli v rizikovém kontaktu s onemocněním COVID-19.</string>\n    <string name=\"notification_channel_downloading\">Kontrola rizikových kontaktů</string>\n    <string name=\"how_it_works_toolbar_title\">Jak eRouška funguje?</string>\n    <string name=\"how_it_works_write_email\">Napsat e-mail na podporu</string>\n    <string name=\"how_it_works_content\">Zajímá vás, jak eRouška funguje?</string>\n    <string name=\"how_it_works_more\">Zjistit více</string>\n    <string name=\"how_it_works_close\">Zavřít</string>\n    <string name=\"how_it_works_info_content\">eRouška vás upozorní na riziková setkání s ostatními uživateli eRoušky, které jste potkali v posledních 14 dnech a potvrdilo se u nich onemocnění COVID-19.\\n\\nPři používání aplikace eRouška nikdo nezná vaši polohu a žádné jiné údaje o vás nebo telefonu.</string>\n    <string name=\"how_it_works_encounter_title\">Telefony s eRouškou čekají na setkání</string>\n    <string name=\"how_it_works_encounter_content\">Když se potkají telefony s aplikací eRouška, vymění si několik základních informací o setkání. Zaznamenají si den setkání, vzdálenost mezi sebou a anonymní označení telefonu. Tato setkání si pamatují 14 dní.</string>\n    <string name=\"how_it_works_confirm_title\">Když se potvrdí COVID-19</string>\n    <string name=\"how_it_works_confirm_content\">Pokud se u někoho prokáže onemocnění COVID-19, dostane automaticky SMS s ověřovacím kódem pro eRoušku. Zadáním kódu v aplikaci odemkne možnost anonymně varovat ostatní uživatele.</string>\n    <string name=\"how_it_works_warn_title\">Varování ostatních eRoušek</string>\n    <string name=\"how_it_works_warn_content\">Po zadání a potvrzení kódu dojde k informování ostatních eRoušek o možném rizikovém setkání.</string>\n    <string name=\"how_it_works_control_title\">Zpracování setkání s nakaženými</string>\n    <string name=\"how_it_works_control_content\">Ostatní eRoušky nejpozději následující den zkontrolují informace o nově nakažených a porovnají je s těmi, které potkaly.</string>\n    <string name=\"how_it_works_eval_title\">Vyhodnocení rizikových setkání</string>\n    <string name=\"how_it_works_notif_title\">Zobrazení varování</string>\n    <string name=\"how_it_works_notif_content\">Těm, kteří mohli přijít do rizikového kontaktu s nakaženým, se v aplikaci eRouška zobrazí upozornění. To navede uživatele, jak má dále postupovat a jaká hygienická opatření má dodržovat.</string>\n    <string name=\"how_it_works_support_content\">Máte další dotazy nebo vám eRouška nefunguje správně? Napište nám.</string>\n    <string name=\"no_internet_error\">Zkontrolujte připojení k internetu a zkuste to znovu.</string>\n    <string name=\"general_error\">Kontaktujte prosím podporu na e-mailu %1$s a uveďte následující kód chyby: %2$s.</string>\n    <string name=\"general_desc\">Po stisknutí tlačítka “Napsat e-mail na podporu” vytvoříme přílohu e-mailu s anonymními informacemi o nastavení telefonu (například zapnuté Bluetooth, typ telefonu) a chybě. Tyto informace nám pomohou s řešením chyby.</string>\n    <string name=\"send_data_code_expired_or_used\">Platnost kódu vypršela nebo jste ho už jednou použili. Pro nový kód napište na %1$s.</string>\n    <string name=\"email_button\">Napsat e-mail</string>\n    <string name=\"verification_email_subject\">Nepřišla mi SMS s ověřovacím kódem</string>\n    <string name=\"verification_email_body_error\">Milý týme eRoušky,\\nmám pozitivní test na COVID-19 a nepřišla mi SMS s ověřovacím kódem pro eRoušku.\\n\\nCelé jméno uvedené na žádance o test: \\n\\nTelefonní číslo uvedené na žádance o test: \\n\\nDatum výsledku testů: \\n\\nOdběrové místo / laboratoř, ze které mi přišly výsledky testu: \\n\\nTyp testu (PCR/antigen): </string>\n\n    <string name=\"no_verification_code\">Nemám ověřovací kód</string>\n    <string name=\"no_verification_body\">Máte pozitivní test a nepřišla vám SMS pro eRoušku? Napište si o náhradní kód na %1$s.</string>\n    <string name=\"no_verification_caption\">Zajímá vás, jak odesílání kódu funguje?\\n\\nV případě, že máte pozitivní výsledek testu na COVID-19, měl by vám přijít výsledek testu v SMS od testovací laboratoře. Ta výsledky současně odesílá do centrálního informačního systému Ministerstva zdravotnictví.\\n\\nPoté, co se informace z informačního systému propíšou do systému hygieny, se odesílají automatické SMS eRoušky s ověřovacími kódy.\\n\\nPokud se výsledky z laboratoře nestihnou propsat do systému hygieny do 22:00, může vám SMS s ověřovacím kódem přijít až následující den.\\n\\nPokud vám SMS eRoušky nepřišla ani následující den poté, co vám přišla SMS s pozitivními výsledky z laboratoře, napište nám na %1$s.</string>\n    <string name=\"efgs_title\">Spolupráce se zahraničím</string>\n    <string name=\"efgs_header\">Pomozte v boji s COVID-19 i při cestách do zahraničí</string>\n    <string name=\"efgs_boundaries\">COVID-19 nezná hranice a díky spolupráci mezi evropskými státy vás eRouška může upozornit na riziková setkání i v případě, že jste se potkali s cizinci, kteří používají podobné aplikace jiných států.</string>\n    <string name=\"efgs_visit\">Povolte upozornění na zahraniční riziková setkání, pokud jste byli v posledních %1$s dnech v zahraničí nebo tam jezdíte pravidelně.</string>\n    <string name=\"efgs_visit_plus\">Nastavení můžete kdykoliv změnit v aplikaci.</string>\n    <string name=\"efgs_check\">Upozorňovat na zahraniční riziková setkání</string>\n    <string name=\"efgs_usage\">Využívání této funkce může způsobit vyšší objem stahovaných dat. Vypněte ji %1$d dní po návratu ze zahraničí.</string>\n\n    <string name=\"efgs_disable_confirmation\"><![CDATA[Onemocnění COVID-19 se může projevit až %1$d dní po setkání s nakaženou osobou. Spolupráci se zahraničím prosím vypněte nejdříve <b>%1$d dní</b> po návratu.]]></string>\n    <string name=\"efgs_disable_confirmation_on\">Ponechat zapnuté</string>\n    <string name=\"efgs_disable_confirmation_off\">Vypnout</string>\n    <string name=\"send_data_code_invalid_header\">Zadaný kód není platný</string>\n    <string name=\"send_data_code_invalid_body\">Zkontrolujte kód a zkuste ho zadat znovu. V případě, že se vám opakovaně nedaří zadat platný kód, kontaktujte nás na %1$s.</string>\n\n    <string name=\"no_code_email_body_error\">Milý týme eRoušky,\\nmám pozitivní test na COVID-19 a nedaří se mi zadat správně ověřovací kód pro eRoušku. Jak mám dále postupovat?\\n\\nCelé jméno uvedené na žádance o test: \\n\\nTelefonní číslo uvedené na žádance o test: \\n\\nDatum výsledku testů: \\n\\nOdběrové místo / laboratoř, ze které mi přišly výsledky testu: \\n\\nTyp testu (PCR/antigen): </string>\n\n    <string name=\"my_data_vaccination\">Očkování</string>\n    <string name=\"my_data_first_dose\">%1$s očkovaných první dávkou</string>\n    <string name=\"my_data_second_dose\">%1$s osob s ukončeným očkováním</string>\n\n    <string name=\"ragnarok_more_info\">Více informací</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-night/colors.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <color name=\"colorPrimary\">#2f80ed</color>\n    <color name=\"colorPrimaryVariant\">#2874ed</color>\n    <color name=\"colorSecondary\">#6200FF</color>\n\n    <color name=\"textColorPrimary\">@color/white</color>\n    <color name=\"textColorSecondary\">#eee</color>\n\n    <color name=\"toolbarColor\">@android:color/black</color>\n    <color name=\"toolbarActiveColor\">@android:color/white</color>\n    <color name=\"launch_screen_background\">#001829</color>\n\n    <color name=\"statusbarColor\">@android:color/black</color>\n    <bool name=\"lightStatusBar\">false</bool>\n\n    <color name=\"highlight\">#8D2F80ED</color>\n    <color name=\"search_background\">#000</color>\n\n    <color name=\"background\">#000</color>\n    <color name=\"ic_help\">@color/white</color>\n\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-sk/strings.xml",
    "content": "<?xml version=\"1.0\"?>\n<resources>\n    <string name=\"app_name\">eRouška</string>\n    <string name=\"help_toolbar_title\">Nápoveda</string>\n    <string name=\"go_back_button\">Späť do aplikácie</string>\n    <string name=\"enable_bluetooth_button\">Zapnúť Bluetooth</string>\n    <string name=\"enable\">Zapnúť</string>\n    <string name=\"bt_disabled_title\">Zapnite Bluetooth</string>\n    <string name=\"bt_disabled_desc\">Zapnutý Bluetooth je dôležitý na zbieranie kontaktov s ostatnými eRouškami vo vašom okolí.</string>\n    <string name=\"dashboard_title_running\">eRouška je aktívna</string>\n    <string name=\"dashboard_title_paused\">eRouška je pozastavená</string>\n    <string name=\"dashboard_body\">Aplikácia aktuálne pracuje na pozadí a monitoruje okolie. Nechajte zapnuté Bluetooth a s telefónom pracujte ako obvykle.</string>\n    <string name=\"dashboard_body_secondary\">Upozorníme vás v prípade možného podozrenia na stretnutie s COVID-19 a zobrazíme vám všetky potrebné informácie.</string>\n    <string name=\"dashboard_body_no_contact\">Posledná aktualizácia %1$s o %2$s.</string>\n    <string name=\"dashboard_body_paused\">Aplikácia je aktuálne pozastavená a nezbiera žiadne údaje o ostatných eRouškach vo vašom okolí.\n\nSpustite znovu zber dát a chráňte seba aj svoje okolie. Nezabúdajte na to hlavne v situácii, keď opúšťate svoj domov.</string>\n    <string name=\"dashboard_loading_data\">Prebieha aktualizácia dát...</string>\n    <string name=\"pause_app\">Pozastaviť</string>\n    <string name=\"start_app\">Spustiť</string>\n    <string name=\"privacy_header_text\">Myslíme na vaše súkromie, odosielanie údajov máte vždy pod kontrolou</string>\n    <string name=\"privacy_body_text_1\">eRouška neobsahuje žiadne vaše osobné údaje a zbiera iba anonymné dáta o ostatných eRouškach, s ktorými se stretnete.</string>\n    <string name=\"privacy_body_text_2\"><![CDATA[Detailné informácie o spracovaní osobných údajov a ďalšie podmienky používania aplikácie nájdete v <a href=\"%1$s\">podmienkach používania</a>.]]></string>\n    <string name=\"privacy_finish\">Dokončiť aktiváciu</string>\n    <string name=\"privacy_toolbar_title\">Súkromie</string>\n    <string name=\"error_title\">Chyba</string>\n    <string name=\"activation_error_header\">Aktiváciu aplikácie nie je možné dokončiť</string>\n    <string name=\"activation_try_again\">Skúsiť znova</string>\n    <string name=\"menu_help\">Nápoveda</string>\n    <string name=\"my_data_title\">Aktuálne</string>\n    <string name=\"about_content\">Aplikáciu eRouška od verzie 2.0 vyvíja Ministerstvo zdravotníctva ČR v spolupráci s Národnou agentúrou pre komunikačné a informačné technológie (NAKIT). Predošlú verziu aplikácie eRouška vytvoril tím dobrovoľníkov v rámci komunitnej aktivity COVID19CZ. Väčšina z pôvodných autorov eRoušky pokračuje na vývoji nových verzií v tíme NAKIT.</string>\n    <string name=\"about_tos_content\"><![CDATA[Detailné informácie o spracovaní osobných údajov a ďalšie podmienky používania aplikácie nájdete v <a href=\"%1$s\">podmienkach používania</a>.]]></string>\n    <string name=\"about_tos_link\">Podmienky používania</string>\n    <string name=\"about_title\">O aplikácii</string>\n    <string name=\"permission_rationale_title\">Pre spr\\u00e1vnu funkciu aplik\\u00e1cie je nutn\\u00e9 opr\\u00e1vnenie k pr\\u00edstupu k polohe.</string>\n    <string name=\"permission_rationale_body\">Viac o tom, pre\\u010do to tak je, n\\u00e1jdete v n\\u00e1povede.</string>\n    <string name=\"permission_rationale_settings\">Nastavenia</string>\n    <string name=\"permission_rationale_dismiss\">Zrušiť</string>\n    <string name=\"welcome_help\">Ako to funguje</string>\n    <string name=\"welcome_activation\">Pokra\\u010dova\\u0165 na aktiv\\u00e1ciu</string>\n    <string name=\"welcome_description\"><![CDATA[Aplikácia bude nepretržite monitorovať vaše okolie a&nbsp;zaznamenávať všetky ostatné telefóny s aplikáciou eRouška, ku ktorým sa priblížite.<br/><br/>Pokiaľ sa u majiteľa ktoréhokoľvek z nich potvrdí ochorenie COVID-19, eRouška vyhodnotí, či ide o rizikový kontakt a upozorní vás.<br/><br/>Keď sa potvrdí nákaza u&nbsp;vás, eRouška upozorní všetkých ostatných užívateľov aplikácie, s s&nbsp;ktorými ste sa stretli.]]></string>\n    <string name=\"welcome_title\">V\\u010faka eRou\\u0161ke ochr\\u00e1nite seba aj ostatn\\u00fdch vo svojom okol\\u00ed</string>\n    <string name=\"contacts_title\">Kontakty</string>\n    <string name=\"send_data\">Anonymne upozorniť ostatných</string>\n    <string name=\"sent\">Odoslané</string>\n    <string name=\"share_app_title\">Zdieľať aplikáciu eRouška</string>\n    <string name=\"menu_share_app\">Zdieľať aplikáciu</string>\n    <string name=\"share_app_text\">Ahoj, používam aplikáciu eRouška. Nainštaluj si ju tiež a spoločne pomôžme zastaviť šírenie ochorenia COVID-19. Aplikácia dokáže anonymne a včas upozorniť na rizikové stretnutie s nakazeným užívateľom a odporučiť ďalší postup. Nájdeš ju na %s</string>\n    <string name=\"delete_registration\">Zrušiť registráciu</string>\n    <string name=\"about\">O aplik\\u00e1cii</string>\n    <string name=\"no_internet\">Vaše zariadenie nemá aktívny prístup k internetu.</string>\n    <string name=\"battery_opt_label\">Aplikácia na pozadí</string>\n    <string name=\"help_write_chabot\">Napíšte Anežke - podpore eRoušky</string>\n    <string name=\"my_data_current_measures\">Aktuálne opatrenia</string>\n    <string name=\"my_data_current_measures_title\">Informácie o aktuálnych opatreniach</string>\n    <string name=\"my_data_current_situation\">Aktuálna situácia v číslach</string>\n    <string name=\"my_data_stats\">eRouška v číslach</string>\n    <string name=\"my_data_yesterday\">Za včerajší deň %1$s</string>\n    <string name=\"my_data_for_day\">%1$s za %2$s</string>\n    <string name=\"my_data_activated_apps\">%1$s aktivovaných aplikácií</string>\n    <string name=\"my_data_notifications_sent\">%1$s pozitívne testovaných anonymne upozornilo ostatných</string>\n    <string name=\"my_data_notifications_shown\">%1$s upozornení na rizikové stretnutia</string>\n    <string name=\"my_data_tests\">%1$s vykonaných testov</string>\n    <string name=\"my_data_antigen_tests\">%1$s vykonaných antigénnych testov</string>\n    <string name=\"my_data_ack_cases\">%1$s celkom potvrdených prípadov</string>\n    <string name=\"my_data_act_cases\">%1$s aktívnych prípadov</string>\n    <string name=\"my_data_cured\">%1$s vyliečených</string>\n    <string name=\"my_data_death_toll\">%1$s úmrtí</string>\n    <string name=\"my_data_hospitalized\">%1$s aktuálne hospitalizovaných</string>\n    <string name=\"my_data_vaccinations\">%1$s vykázaných očkovaní</string>\n    <string name=\"send_data_body\">V prípade potvrdenej nákazy ochorením COVID-19 obdržíte SMS správu obsahujúcu overovací kód pre povolenie upozornenia ostatných užívateľov eRoušky.</string>\n    <string name=\"send_data_last_sent_date\">Naposledy ste upozornili ostatných %s.</string>\n    <string name=\"send_data_verification_hint\">Overovací kód</string>\n    <string name=\"send_data_button_text\">Overiť</string>\n    <string name=\"send_data_code_invalid\">Overovací kód nie je správne zadaný</string>\n    <string name=\"send_data_code_expired_header\">Vypršala platnosť overovacieho kódu</string>\n    <string name=\"send_data_code_expired_body\">Požiadajte pracovníka hygienickej stanice o zaslanie novej SMS správy s overovacím kódom</string>\n    <string name=\"send_data_failure_header\">Nepodarilo sa nám odoslať dáta</string>\n    <string name=\"send_data_failure_body\">Kontaktujte, prosím, podporu na emaili %1$s a uveďte nasledujúci kód chyby: \\'%2$s\\'.</string>\n    <string name=\"send_data_back\">Späť</string>\n    <string name=\"send_data_close\">Zatvoriť</string>\n    <string name=\"send_data_try_again\">Skúsiť znovu</string>\n    <string name=\"send_data_success_header\">Údaje ste úspešne odoslali</string>\n    <string name=\"send_data_success_body_1\">Ďakujeme, že pomáhate bojovať proti šíreniu ochorenia COVID-19</string>\n    <string name=\"send_data_success_body_1_not_enough_keys\">eRoušku zatiaľ používate len chvíľu a nemá zaznamenané žiadne iné eRoušky, preto nikoho vo vašom okolí neupozorní na rizikové stretnutie.</string>\n    <string name=\"send_data_success_body_2\">Spolupracujte, prosím, s pracovníkmi hygienickej stanice na dohľadaní všetkých osôb, s ktorými ste boli v kontakte.</string>\n    <string name=\"send_data_success_body_3\">Riaďte sa pokynmi hygienikov a lekárov.</string>\n    <string name=\"symptom_date_title\">Dátum prvých príznakov</string>\n    <string name=\"symptom_date_body\">Vyplňte, prosím, dátum prvých príznakov. Upozorníme všetkých užívateľov eRoušky, ktorých ste stretli v dňoch, kedy sa u vás objavili prvé príznaky.</string>\n    <string name=\"symptom_date_switch_text\">Mám príznaky ochorenia COVID-19</string>\n    <string name=\"symptom_date_symptoms\">Kašeľ, teplota, dýchavičnosť, bolesť hrdla, bolesť hlavy, strata čuchu a chuti.</string>\n    <string name=\"symptom_date_hint\">Dátum prvých príznakov</string>\n    <string name=\"button_continue\">Pokračovať</string>\n    <string name=\"traveller_title\">Cesty do zahraničia</string>\n    <string name=\"traveller_body\">Cestovali ste v posledných 14 dňoch do niektorej z krajín Európskej únie?</string>\n    <string name=\"traveller_description\">Vďaka spolupráci medzi krajinami Európskej únie môžete upozorniť o riziku možnej nákazy aj užívateľov zahraničných aplikácií, ktorých ste stretli pri svojich cestách do zahraničia.</string>\n    <string name=\"traveller_button_yes\">Áno, bol(a) som v zahraničí</string>\n    <string name=\"traveller_button_no\">Nebol(a) som v zahraničí</string>\n    <string name=\"efgs_agreement_title\">Spolupráca so zahraničím</string>\n    <string name=\"efgs_agreement_traveller_body\">Súhlasíte s upozornením užívateľov zahraničných aplikácií, ktorých ste stretli v Českej republike i v zahraničí?</string>\n    <string name=\"efgs_agreement_non_traveller_body\">Súhlasíte s upozornením užívateľov zahraničných aplikácií, ktorých ste stretli v Českej republike?</string>\n    <string name=\"efgs_agreement_description\"><![CDATA[Zdieľanie dát s krajinami EÚ je anonymné a odoslaním dát do zahraničia súhlasíte s ich spracovaním krajinami Európskej únie podľa <a href=\"%1$s\"> súhlasu so spracovaním osobných údajov</a>.]]></string>\n    <string name=\"efgs_agreement_agree\">Súhlasím</string>\n    <string name=\"efgs_agreement_disagree\">Nesúhlasím</string>\n    <string name=\"notification_data_outdated_title\">Aktualizácia rizikových stretnutí</string>\n    <string name=\"data_notification_close\">Zatvoriť</string>\n    <string name=\"notification_exposure_title\">Rizikové stretnutie</string>\n    <string name=\"notification_exposure_text\">Stretli ste sa s osobou, u ktorej bolo potvrdené ochorenie COVID-19.\nSledujte svoj zdravotný stav. Viac informácií nájdete v aplikácii.</string>\n    <string name=\"notification_exposure_notifications_off_text\">Nezabudnite ju spustiť</string>\n    <string name=\"notification_channel_exposure\">Rizikové stretnutie</string>\n    <string name=\"notification_channel_outdated_data\">Aktualizácia rizikových stretnutí</string>\n    <string name=\"notification_channel_exposure_notifications_off\">Pozastavená eRouška</string>\n    <string name=\"exposure_notifications_off_title\">Zapnite oznámenia o kontakte s COVID-19</string>\n    <string name=\"exposure_notifications_off_body\">eRouška momentálne nemôže komunikovať s inými eRouškami vo vašom okolí.\\n\\nZapnite Oznámenia o kontakte s COVID-19 pomocou tlačidla \\\"Zapnúť\\\".</string>\n    <string name=\"exposures_title\">Rizikové stretnutia</string>\n    <string name=\"exposure_notification_close\">Zatvoriť</string>\n    <string name=\"exposure_notification_more_info\">Viac informácií</string>\n    <string name=\"exposures_symptoms_header\">Mám príznaky</string>\n    <string name=\"exposures_no_symptoms_header\">Nemám príznaky</string>\n    <string name=\"play_services_title\">Aktualizujte aplikáciu Služby Google Play</string>\n    <string name=\"play_services_content\">Najnovšia verzia Google Play Services je potrebná na aktiváciu Oznámení o stretnutí s osobou, u ktorej bolo potvrdené ochorenie COVID-19.</string>\n    <string name=\"play_services_update_button\">Aktualizovať</string>\n    <string name=\"activation_notifications_title\">Upozornenia</string>\n    <string name=\"activation_notifications_header\">eRouška potrebuje na správne fungovanie zapnuté Oznámenia o kontakte s COVID-19</string>\n    <string name=\"activation_notifications_body_1\">Tieto oznámenia vás upozornia, ak ste boli v blízkosti užívateľa eRoušky s pozitívnym testom na ochorenie COVID-19</string>\n    <string name=\"activation_notifications_body_2\">Podstatou správneho fungovania je zdieľanie a zhromažďovanie náhodných identifikačných čísel, ktoré se automaticky menia. Uživateľov eRoušky nie je možné podľa týchto identifikátorov rozpoznať.</string>\n    <string name=\"legacy_update_button_continue\">Pokračovať</string>\n    <string name=\"legacy_update_button_close\">Zatvoriť</string>\n    <string name=\"location_off_header\">Zapnite Polohové služby</string>\n    <string name=\"location_off_body\">Aj keď dáta o polohe nijako nevyužívame, zapnite Polohové služby pre správne fungovanie Bluetooth a aplikácie eRouška.</string>\n    <string name=\"location_off_turn_on\">Zapnúť Polohové služby</string>\n    <string name=\"location_bt_off_header\">Zapnite Bluetooth a Polohové služby</string>\n    <string name=\"location_bt_off_body_1\">Bez zapnutého Bluetooth a Polohových služieb nemôže eRouška vytvárať zoznam ostatných eRoušok vo vašom okolí.</string>\n    <string name=\"location_bt_off_body_2\">Aj keď údaje o polohe nijak nevyužívame, zapnite, prosím, obe funkcie pre správne fungovanie Bluetooth pomocou tlačidla \\\"Zapnúť BT a Polohové služby\\\".</string>\n    <string name=\"location_bt_off_turn_on\">Zapnúť BT a Polohové služby</string>\n    <string name=\"no_recent_exposures\">Žiadne rizikové stretnutia</string>\n    <string name=\"recent_exposures_discovered\">Rizikové stretnutia zistené %s o %s</string>\n    <string name=\"recent_exposures_discovered_earlier\">Staršie rizikové stretnutia</string>\n    <string name=\"activation_error\">eRoušku nie je možné aktivovať</string>\n    <string name=\"activation_error_reason\">Dôvod: %s</string>\n    <string name=\"activation_error_reason_bluetooth_le\">Toto zariadenie nepodporuje Bluetooth Low Energy.</string>\n    <string name=\"activation_error_reason_admin\">eRoušku je možné aktivovať iba na primárnom účte tohto zariadenia.</string>\n    <string name=\"activation_error_reason_bluetooth_ad\">Toto zariadenie nepodporuje Bluetooth Multiple Advertisement.</string>\n    <string name=\"activation_error_reason_en_api\">Toto zariadenie nepodporuje Oznámenia o možnom kontakte od Google.</string>\n    <string name=\"activation_error_reason_unauthorized\">Nepovolený prístup k API.</string>\n    <string name=\"ok\">OK</string>\n    <string name=\"search\">Hľadať</string>\n    <string name=\"search_hint\">Napíšte, čo hľadáte</string>\n    <string name=\"previous_search_result\">Predošlý výsledok</string>\n    <string name=\"next_search_result\">Nasledujúci výsledok</string>\n    <string name=\"help_no_results\">Žiadne výsledky vyhľadávania</string>\n    <string name=\"help_type_more\">Zatiaľ sme nič nenašli, pokračujte v písaní</string>\n    <string name=\"help_how_title\">Ako eRouška funguje</string>\n    <string name=\"help_how_subtitle\">Zistite viac o tom, ako aplikácia funguje</string>\n    <string name=\"exposure_info_date\">Naposledy %s ste sa stretli s osobou, ktorej bolo potvrdené ochorenie COVID-19</string>\n    <string name=\"exposure_info_text\">Upozornenie sa vám zobrazilo najskôr 24 hodín po tom, čo sa nakazený dozvedel pozitívny výsledok testu na COVID-19 a zadal overovací kód do eRoušky.\\n\\nRizikový kontakt vyhodnotíme v prípade, že ste s nakazeným boli v kontakte na vzdialenosť kratšiu ako 2 metre po dobu aspoň 15 minút.\\n\\nKvôli zachovaniu anonymity nakazeného nepoznáme čas ani miesto stretnutia.</string>\n    <string name=\"exposure_info_button\">Ako postupovať ďalej</string>\n    <plurals name=\"dashboard_risky_encounter_title_bad\">\n        <item quantity=\"few\">Za posledn\\u00fdch 14 dn\\u00ed %1$d rizikov\\u00e9 stretnutia</item>\n        <item quantity=\"one\">Za posledn\\u00fdch 14 dn\\u00ed %1$d rizikov\\u00e9 stretnutie</item>\n        <item quantity=\"other\">Za posledn\\u00fdch 14 dn\\u00ed %1$d rizikov\\u00fdch stretnut\\u00ed</item>\n        <item quantity=\"many\">Za posledn\\u00fdch 14 dn\\u00ed %1$d rizikov\\u00e9 stretnutia</item>\n    </plurals>\n    <string name=\"dashboard_risky_encounter_subtitle_bad\">Dňa %1$s ste sa stretli s osobou, u ktorej bolo potvrdené ochorenie COVID-19.</string>\n    <string name=\"dashboard_positive_test_title\">Máte pozitívny výsledok COVID-19 testu?</string>\n    <string name=\"dashboard_positive_test_subtitle\">Ak je výsledok pozitívny, upozornite ostatných.</string>\n    <string name=\"dashboard_positive_test_button\">Anonymne upozorniť ostatných</string>\n    <string name=\"dashboard_travel_title\">Spolupráca so zahraničím</string>\n    <string name=\"enabled\">Zapnuté</string>\n    <string name=\"disable\">Vypnuté</string>\n    <string name=\"support_request_button\">Napísať e-mail podpore</string>\n    <string name=\"support_description\">Po stlačení tlačidla \\\"Napísať e-mail na podporu\\\" vytvoríme prílohu e-mailu s anonymnými informáciami o nastavení telefónu (napríklad zapnuté Bluetooth, typ telefónu) a chybe. Tieto informácie nám pomôžu s riešením chyby.</string>\n    <string name=\"support_request\">Chcete do e-mailu pridať prílohu s anonymnými informáciami o nastavení telefónu? Tieto informácie nám pomôžu s riešením prípadnej chyby.</string>\n    <string name=\"support_request_allowed\">Chcem pridať prílohu</string>\n    <string name=\"support_request_denied\">Nechcem pridať prílohu</string>\n    <string name=\"support_email_chooser\">Vyberte e-mailovú aplikáciu:</string>\n    <string name=\"support_email_subject\">Spätná väzba z aplikácie eRouška</string>\n    <string name=\"support_error_code\">Kód chyby</string>\n    <string name=\"support_app_version\">Verzia aplikácie</string>\n    <string name=\"support_system_version\">Verzia systému</string>\n    <string name=\"support_device\">Zariadenie</string>\n    <string name=\"support_localization\">Lokalizácia</string>\n    <string name=\"support_bluetooth\">Bluetooth</string>\n    <string name=\"support_bluetooth_supports\">podporuje</string>\n    <string name=\"support_bluetooth_doesnt_support\">NEpodporuje</string>\n    <string name=\"support_location_services\">Polohové služby</string>\n    <string name=\"support_primary_account\">Primárny účet</string>\n    <string name=\"support_battery_optimization_exception\">Výnimka z optimalizácie batérie</string>\n    <string name=\"support_installation\">Inštalácia</string>\n    <string name=\"support_last_key_download\">Posledné stiahnutie kľúčov</string>\n    <string name=\"support_last_notified_risky_encounter\">Posledná notifikácia rizikového stretnutia</string>\n    <string name=\"support_last_risky_encounter_from\">Posledné rizikové stretnutie z</string>\n    <string name=\"support_file_name\">diagnosticke_informacie.txt</string>\n    <string name=\"support_email_body_contact\">Napíšte nám, s čím vám môžeme poradiť:\\n\\n</string>\n    <string name=\"support_email_body_error\">Napíšte nám, ako k chybe došlo:\\n\\n</string>\n    <string name=\"support_screen_origin\">Obrazovka</string>\n    <string name=\"notification_downloading_title\">Prebieha kontrola rizikových kontaktov</string>\n    <string name=\"notification_downloading_description\">eRouška zisťuje, či ste boli v rizikovom kontakte s ochorením COVID-19.</string>\n    <string name=\"notification_channel_downloading\">Kontrola rizikových kontaktov</string>\n    <string name=\"how_it_works_toolbar_title\">Ako eRouška funguje?</string>\n    <string name=\"how_it_works_write_email\">Napísať e-mail na podporu</string>\n    <string name=\"how_it_works_content\">Zaujíma vás, ako eRouška funguje?</string>\n    <string name=\"how_it_works_more\">Zistiť viac</string>\n    <string name=\"how_it_works_close\">Zavrieť</string>\n    <string name=\"how_it_works_info_content\">eRouška vás upozorní na rizikové stretnutie s ostatnými užívateľmi eRoušky, ktorých ste stretli v posledných 14 dňoch a potvrdilo sa u nich ochorenie COVID-19.\\n\\nPri používaní aplikácie eRouška nikto nepozná vašu polohu a žiadne iné údaje o vás alebo telefóne.</string>\n    <string name=\"how_it_works_encounter_title\">Telefóny s eRouškou čakajú na stretnutie</string>\n    <string name=\"how_it_works_encounter_content\">Keď sa stretnú telefóny s aplikáciou eRouška, vymenia si niekoľko základných informácií o stretnutí. Zaznamenajú si deň stretnutia, vzdialenosť medzi sebou a anonymné označenie telefónu. Tieto stretnutia si pamätajú 14 dní.</string>\n    <string name=\"how_it_works_confirm_title\">Keď sa potvrdí COVID-19</string>\n    <string name=\"how_it_works_confirm_content\">Ak sa u niekoho preukáže ochorenie COVID-19, dostane automaticky SMS s overovacím kódom pre eRoušku. Zadaním kódu v aplikácii odomkne možnosť anonymne varovať ostatných užívateľov.</string>\n    <string name=\"how_it_works_warn_title\">Varovanie ostatných eRoušiek</string>\n    <string name=\"how_it_works_warn_content\">Po zadaní a potvrdení kódu dôjde k informovaniu ostatných eRoušiek o možnom rizikovom stretnutí.</string>\n    <string name=\"how_it_works_control_title\">Spracovanie stretnutí s nakazenými</string>\n    <string name=\"how_it_works_control_content\">Ostatné eRoušky najneskôr nasledujúci deň skontrolujú informácie o novo nakazených a porovnajú ich s tými, ktoré stretli.</string>\n    <string name=\"how_it_works_eval_title\">Vyhodnotenia rizikových stretnutí</string>\n    <string name=\"how_it_works_notif_title\">Zobrazenie varovania</string>\n    <string name=\"how_it_works_notif_content\">Tým, ktorí mohli prísť do rizikového kontaktu s nakazeným, sa v aplikácii eRouška zobrazí upozornenie. To navedie používateľa, ako má ďalej postupovať a aké hygienické opatrenia má dodržiavať.</string>\n    <string name=\"how_it_works_support_content\">Máte ďalšie otázky alebo vám eRouška nefunguje správne? Napíšte nám.</string>\n    <string name=\"no_internet_error\">Skontrolujte pripojenie k internetu a skúste to znova.</string>\n    <string name=\"general_error\">Kontaktujte, prosím, podporu na emaili %1$s a uveďte nasledujúci kód chyby: %2$s.</string>\n    <string name=\"general_desc\">Po stlačení tlačidla \\\"Napísať e-mail na podporu\\\" vytvoríme prílohu e-mailu s anonymnými informáciami o nastavení telefónu (napríklad zapnuté Bluetooth, typ telefónu) a chybe. Tieto informácie nám pomôžu s riešením chyby.</string>\n    <string name=\"send_data_code_expired_or_used\">Platnosť kódu vypršala alebo ste ho už raz použili. Pre nový kód napíšte na %1$s.</string>\n    <string name=\"email_button\">Napísať e-mail</string>\n    <string name=\"verification_email_subject\">Neprišla mi SMS s overovacím kódom</string>\n    <string name=\"verification_email_body_error\">Milý tím eRoušky, &lt;br&gt;mám pozitívny test na COVID-19 a neprišla mi SMS s overovacím kódom pre eRoušku. &lt;br&gt;&lt;br&gt;Celé meno uvedené na žiadanke o test: &lt;br&gt;Telefónne číslo uvedené na žiadanke o test: &lt;br&gt;Dátum výsledku testov: &lt;br&gt;Odberové miesto/laboratórium, z ktorého mi prišli výsledky testu: &lt;br&gt;Typ testu (PCR/antigén): &lt;br&gt;&lt;br&gt;&lt;br&gt;</string>\n    <string name=\"no_verification_code\">Nemám overovací kód</string>\n    <string name=\"no_verification_body\">Máte pozitívny test a neprišla vám SMS pre eRoušku? Napíšte si o náhradný kód na %1$s.</string>\n    <string name=\"no_verification_caption\">Zaujíma vás, ako odosielanie kódu funguje? \\n\\nV prípade, že máte pozitívny výsledok testu na COVID-19, mal by vám prísť výsledok testu v SMS od testovacieho laboratória. To výsledky súčasne odosiela do centrálneho informačného systému Ministerstva zdravotníctva. \\n\\nPo tom, čo sa informácie z informačného systému prepíšu do systému hygieny, sa odosielajú automatické SMS eRoušky s overovacími kódmi. \\n\\nAk sa výsledky z laboratória nestihnú prepísať do systému hygieny do 22:00, môže vám SMS s overovacím kódom prísť až nasledujúci deň. Ak vám SMS eRoušky neprišla ani nasledujúci deň po tom, čo vám prišla SMS s pozitívnymi výsledkami z laboratória, napíšte nám na %1$s.</string>\n    <string name=\"efgs_title\">Spolupráca so zahraničím</string>\n    <string name=\"efgs_header\">Pomôžte v boji s COVID-19 aj pri cestách do zahraničia</string>\n    <string name=\"efgs_boundaries\">COVID-19 nepozná hranice a vďaka spolupráci medzi európskymi štátmi vás eRouška môže upozorniť na rizikové stretnutie aj v prípade, že ste sa stretli s cudzincami, ktorí používajú podobné aplikácie iných štátov.</string>\n    <string name=\"efgs_visit\">Povoľte upozornenia na zahraničné rizikové stretnutia, ak ste boli v posledných %1$s dňoch v zahraničí alebo tam jazdíte pravidelne.</string>\n    <string name=\"efgs_visit_plus\">Nastavenie môžete kedykoľvek zmeniť v aplikácii.</string>\n    <string name=\"efgs_check\">Upozorňovať na zahraničné rizikové stretnutia</string>\n    <string name=\"efgs_usage\">Využívanie tejto funkcie môže spôsobiť vyšší objem sťahovaných dát. Vypnite ju %1$d dní po návrate zo zahraničia.</string>\n    <string name=\"efgs_disable_confirmation\"><![CDATA[Ochorenie COVID-19 sa môže prejaviť až %1$d dní po stretnutí s nakazenou osobou. Spoluprácu so zahraničím, prosím, vypnite najskôr <b>%1$d dní</b> po návrate.]]></string>\n    <string name=\"efgs_disable_confirmation_on\">Ponechať zapnuté</string>\n    <string name=\"efgs_disable_confirmation_off\">Vypnúť</string>\n    <string name=\"send_data_code_invalid_header\">Zadaný kód nie je platný</string>\n    <string name=\"send_data_code_invalid_body\">Skontrolujte kód a skúste ho zadať znova. V prípade, že sa vám opakovane nedarí zadať platný kód, kontaktujte nás na %1$s.</string>\n    <string name=\"no_code_email_body_error\">Milý tím eRoušky,\\nmám pozitívny test na COVID-19 a nedarí sa mi zadať správne overovací kód pre eRoušku. Ako mám ďalej postupovať?\\n\\nCelé meno uvedené na žiadanke o test:\\n\\nTelefónne číslo uvedené na žiadanke o test:\\n\\nDátum výsledku testov:\\n\\nOdberové miesto/laboratórium, z ktorej mi prišli výsledky testu:\\n\\nTyp testu (PCR/antigén):</string>\n    <string name=\"my_data_vaccination\">Očkovanie</string>\n    <string name=\"my_data_first_dose\">%1$s očkovaných prvou dávkou</string>\n    <string name=\"my_data_second_dose\">%1$s osob s ukončeným očkovaním</string>\n    \n    <string name=\"ragnarok_more_info\">Viac informácií</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/xml/file_paths.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<paths>\n    <cache-path name=\"cache\" path=\".\" />\n</paths>"
  },
  {
    "path": "app/src/main/res/xml/remote_config_defaults.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<defaultsMap>\n    <entry>\n        <key>v2_reportTypeWeights</key>\n        <value>1;1;1;1;1;1</value>\n    </entry>\n    <entry>\n        <key>v2_infectiousnessWeights</key>\n        <value>0;0.6;2.0</value>\n    </entry>\n    <entry>\n        <key>v2_attenuationBucketThresholdDb</key>\n        <value>55;70;80</value>\n    </entry>\n    <entry>\n        <key>v2_attenuationBucketWeights</key>\n        <value>2.0;1;0.25;0</value>\n    </entry>\n    <entry>\n        <key>v2_minimumWindowScore</key>\n        <value>420</value>\n    </entry>\n    <entry>\n        <key>v2_covidDataServerUrl</key>\n        <value>https://europe-west1-erouska-key-server-dev.cloudfunctions.net</value>\n    </entry>\n    <entry>\n        <key>v2_minGmsVersionCode</key>\n        <value>203019000</value>\n    </entry>\n    <entry>\n        <key>v2_keyImportDataOutdatedHours</key>\n        <value>99999999</value>\n    </entry>\n    <entry>\n        <key>v2_riskyEncountersTitleAn</key>\n        <value>On %1$s, you last encountered someone who tested positive for COVID-19.</value>\n    </entry>\n    <entry>\n        <key>v2_keyImportPeriodHours</key>\n        <value>6</value>\n    </entry>\n    <entry>\n        <key>v2_keyExportUrl</key>\n        <value>https://cdn.erouska.cz/</value>\n    </entry>\n    <entry>\n        <key>v2_recentExposuresUITitle</key>\n        <value>Previous risky encounters</value>\n    </entry>\n    <entry>\n        <key>v2_spreadPreventionUITitle</key>\n        <value>Principles of responsible behaviour</value>\n    </entry>\n    <entry>\n        <key>v2_symptomsUITitle</key>\n        <value>Main symptoms</value>\n    </entry>\n    <entry>\n        <key>v2_exposureUITitle</key>\n        <value>Risky encounters</value>\n    </entry>\n    <entry>\n        <key>v2_chatBotLink</key>\n        <value>https://erouska.cz/caste-dotazy</value>\n    </entry>\n    <entry>\n        <key>v2_noEncounterBody</key>\n        <value>We will notify you about a risky encounter in a notification</value>\n    </entry>\n    <entry>\n        <key>v2_noEncounterHeader</key>\n        <value>You have not encountered anyone known to have COVID-19 in the past 14 days.</value>\n    </entry>\n    <entry>\n        <key>v2_conditionsOfUseUrl</key>\n        <value>https://erouska.cz/podminky-pouzivani</value>\n    </entry>\n    <entry>\n        <key>v2_riskyEncountersWithoutSymptoms</key>\n        <value>You don't have to stay at home if you are not experiencing any symptoms of COVID-19 infection. Behave responsibly and watch your health status.</value>\n    </entry>\n    <entry>\n        <key>v2_riskyEncountersWithSymptoms</key>\n        <value>If you experienced respiratory symptoms within 14 days after encountering an infected person, call your general practitioner and follow their instructions. If you experience serious health problems call 155.</value>\n    </entry>\n    <entry>\n        <key>v2_riskyEncountersTitle</key>\n        <value>You encountered a person infected with COVID-19 on %@.</value>\n    </entry>\n    <entry>\n        <key>v2_contactsContentJson</key>\n        <value>[{\"title\":\"Thinking you are infected?\",\"text\":\"Stay at home and call your general practitioner.\",\"linkTitle\":\"Important contacts\",\"link\":\"https://koronavirus.mzcr.cz/en/important-phone-numbers/\"},{\"title\":\"Need help?\",\"text\":\"You can find questions and answers about COVID-19 on the Ministry of Health's website.\",\"linkTitle\":\"Frequently asked questions\",\"link\":\"https://koronavirus.mzcr.cz/\"},{\"title\":\"eRouška support\",\"text\":\"Do you need help with the app? Send us e-mail.\",\"linkTitle\":\"Send e-mail\",\"link\":\"mailto:info@erouska.cz\"},{\"title\":\"About eRouška\",\"text\":\"Are you curious how the app works?\",\"linkTitle\":\"Visit erouska.cz\",\"link\":\"https://erouska.cz/en\"}]</value>\n    </entry>\n    <entry>\n        <key>v2_preventionContentJson</key>\n        <value>{\"title\":\"COVID-19 infection is spread mainly via airborne droplets. It can also be transmitted via contaminated objects.\",\"items\":[{\"iconUrl\":\"https://erouska.cz/img/prevention/ic_clean_hands.png\",\"label\":\"Wash your hands with soap thoroughly and frequently, and use disinfection.\"},{\"iconUrl\":\"https://erouska.cz/img/prevention/ic_disinfenction.png\",\"label\":\"Disinfect your personal belongings (e.g. mobile phone) on a regular basis.\"},{\"iconUrl\":\"https://erouska.cz/img/prevention/ic_tissue.png\",\"label\":\"When coughing or sneezing, cover your mouth with a paper tissue or your sleeve.\"},{\"iconUrl\":\"https://erouska.cz/img/prevention/ic_social_distance.png\",\"label\":\"Avoid crowds and keep a safe 2-metre distance.\"},{\"iconUrl\":\"https://erouska.cz/img/prevention/ic_mask.png\",\"label\":\"In shops and on public transport, always wear respiratory protection as stated by currently valid regulations.\"},{\"iconUrl\":\"https://erouska.cz/img/prevention/ic_stay_home.png\",\"label\":\"If you experience respiratory symptoms, stay at home and call your general practitioner.\"}]}</value>\n    </entry>\n    <entry>\n        <key>v2_symptomsContentJson</key>\n        <value>{\"title\":\"Symptoms may appear 2–14 days after a risky encounter.\",\"items\":[{\"iconUrl\":\"https://erouska.cz/img/symptoms/ic_temperature.png\",\"label\":\"High temperature\"},{\"iconUrl\":\"https://erouska.cz/img/symptoms/ic_cough.png\",\"label\":\"Cough\"},{\"iconUrl\":\"https://erouska.cz/img/symptoms/ic_stuffiness.png\",\"label\":\"Stuffiness\"},{\"iconUrl\":\"https://erouska.cz/img/symptoms/ic_throatache.png\",\"label\":\"Sore throat\"},{\"iconUrl\":\"https://erouska.cz/img/symptoms/ic_headache.png\",\"label\":\"Headache, muscle and joint pain\"},{\"iconUrl\":\"https://erouska.cz/img/symptoms/ic_smelltaste.png\",\"label\":\"Loss of smell and taste\"}]}</value>\n    </entry>\n    <entry>\n        <key>v2_encounterWarning</key>\n        <value>You have encountered a person infected with COVID-19. Watch your health status.</value>\n    </entry>\n    <entry>\n        <key>v2_verificationServerApiKey</key>\n        <value>4AP6RHk5VlNi7WIhj4ZupI9JZODdUyrPGb1C2mDYKo4cuaGIHdYtOhjyoqhg4vB5r7FDijxnySLb_1CUH6XdDA.1.oZLaUuVOPbvEaiWnzkQxasWlD_71iSTeM9aAIOKrfqhg5QO68t004CKxWutYmfISc7vqJe6uY2dRrt34OFkliw</value>\n    </entry>\n    <entry>\n        <key>v2_helpMarkdown</key>\n        <value># Frequent problems\\n## Android: Basic recommendations for troubleshooting\\nIf the app displays an error message please check that your operating system is updated ([how to update Android](https://support.google.com/android/answer/7680439)) and that you are not using its beta version.\\n\\nThen, please check whether there are new updates of eRouška in your store ([Google Play (Android)](https://play.google.com/store/apps/details?id=cz.covid19cz.erouska)).\\n\\nWe also recommend to enable automatic eRouška app updates. [Steps for Android are:](https://support.google.com/googleplay/answer/113412#autoone) Open Google Play Store app, press My apps &amp; games → choose the app to update → press three dots and select Enable auto update.\\n\\n## Android: Cannot activate eRouška. Activation error 17 (Exposure Notification API is not available).\\nOn Android devices, please follow these steps:\\n\\n1.  Check if you are the _primary user_ of the device, that Play Services are installed, and that _Settings → Google → COVID-19 Exposure Notifications_ is available.\\n2.  Uninstall eRouška.\\n3.  Clear cache and data for Google Play Services and Play Store ([see steps 2 and 3](https://support.google.com/googleplay/answer/9037938)).\\n4.  Install eRouška and enable _COVID-19 Exposure Notifications_.\\n\\nIf you still experience issues with app activation, it is possible that your device does not support Bluetooth LE (Low Energy Advertising) or Bluetooth Multiple Advertisement, is not authorized for Exposure Notifications by Google, or does not have Exposure Notifications API.\\n\\n# Connection and data transmission\\n## Do I need to keep Bluetooth turned on all the time?\\nYes, you do. Without Bluetooth turned on, it is not possible to detect nearby devices with eRouška. You may have already enabled Bluetooth if you use wireless headphones, a smart watch or a connection with your car. We recommend you to set Bluetooth to be _visible for all devices_.\\n\\n## Does eRouška need internet connection?\\nInternet connection is necessary to download (install) and activate eRouška. It also needs internet connection to download anonymous identifiers of infected users every day and display notifications about risky encounters.\\n\\nIf you are tested positive for COVID-19 and would like to anonymously notify others of a risky encounter, you would have to connect eRouška to the internet. Until then, your data is saved only in your phone's memory and is deleted every 14 days. The application also uses internet connection to download information about the epidemic's current development in the Czech Republic which is displayed on the _News_ page.\\n\\n## How often does the app update online data?\\neRouška downloads keys (identifiers) of infected users several times a day. Statistics on the News page are updated once a day.\\n\\n## How much data does eRouška consume daily?\\nIf _Notifications about foreign risky encounters_ is enabled, eRouška will also download keys of all infected individuals from other EU countries. The volume of downloaded data may be up to 2 MB daily.\\n\\nEven if _Notifications about foreign risky encounters_ are disabled, eRouška downloads about 1 MB of data every day. The new app version downloads keys not only from eRouška users, but also from infected users from other EU countries who indicated that they were travelling abroad and whom an eRouška user might have encountered.\\n\\nKeys of infected individuals are downloaded 2–3 times a day. To compare, an average web page requires about 1–5 MB of data. **The application does not necessarily need mobile internet.** It can download data when connected to WiFi.\\n\\n## Android: Why do I need to allow the application to access GPS/location data?\\n**Update for Android 11 users:** You do not need to enable location services for the newest Android operating system versions for eRouška to work.\\n\\neRouška does not collect or store GPS data, but the operating system **Android 10 and older** also includes some Bluetooth LE (LE = low energy) services, which eRouška components need in order to function properly – specifically, Google Play Services. Therefore, the user's consent to the application's access to location data is required. This consent is not required on iOS. [Google explains](https://support.google.com/android/answer/9930236) why location services must be enabled in the phone.\\n\\nOther applications in your phone might use information on your location. If you want to check which apps use your location, go to your phone's settings → Location → App permission (or follow [these steps by Google](https://support.google.com/accounts/answer/6179507?hl=en)). You can deny location permission to other apps if you think they do not need it. eRouška does not need it so it will not be listed.\\n\\n## How much battery do Bluetooth and eRouška app drain?\\nIf you already use a phone with Bluetooth enabled, power consumption should not increase significantly. If you do not actively use Bluetooth, the results of our testing where Bluetooth was turned on all the time showed that energy consumption increased by units of percent per day. In most cases, it is less than 20% of battery capacity per day. It depends on the specific smartphone, your style of use and battery condition.\\n\\nPower consumption related to eRouška use is affected by 2 factors. First, it's the application itself, and second, it's the use of the system's Exposure Notification which regularly logs encounters with other eRouška users. The system function is provided by operating system Android or iOS so its optimization depends on updates from Apple and Google.\\n\\nWhen interpreting power consumption, please consider that this percentage depends on your phone's full use during the past 24 hours (proportion of use by other apps). That means that the percentage of eRouška use might be high in low-use phones, while it might be low in highly used phones. So it does not show the percentage of battery use.\\n\\n**Android: Note for location services:** It is only possible to detect a Bluetooth device near you if you enable \"Use location\" in the settings. (Read more in [Why your phone’s location setting needs to be on? on Google's help page](https://support.google.com/android/answer/9930236?hl=cs).) It means that other applications in your phone might use information on your location, which might be the reason for a higher power consumption. Please check which apps use your location. Go to your phone's settings → Location → App permission (or follow [these steps by Google](https://support.google.com/accounts/answer/6179507?hl=cs)). You can deny location permission to other apps if you think they do not need it. eRouška does not need it so it will not be listed.\\n\\n## Is it possible that after turning on eRouška, my Wi-Fi or internet connection slowed down?\\nUnfortunately, some Android mobile phones' Bluetooth negatively affects Wi-Fi signal and vice versa.\\n\\n## Can eRouška cause problems with other apps or devices that use Bluetooth (headphones, watches, wristbands)?\\nVery rarely, users might experience strange behaviour of their Bluetooth devices after they install eRouška, such as connection interruptions, typically in smart watches or wristbands, wireless headphones or handsfree sets. Most probably, it is an operating system issue which we are not able to affect.\\n\\nPlease try to apply the following steps:\\n\\n1.  Restart your phone.\\n2.  Unpair your Bluetooth device and pair it again.\\n\\nIf these steps do not help please contact your device's manufacturer:\\n\\n*   Android: [Get help from your device manufacturer](https://support.google.com/android/answer/3094742?ref_topic=7313011&amp;hl=en)\\n\\n## Why does the app use Bluetooth? Are there no better alternatives such as GPS or triangulation from phone network operators?\\nUser privacy comes first, and Bluetooth technology offers the best balance between logging accuracy and maximal privacy. Neither GPS technology nor operator triangulation can provide necessary data with the required accuracy. Among other things, it is because their functionality inside buildings or metro is very limited. eRouška needs to know that an encounter has occurred, at what distance and its duration. It does not matter where the encounter took place.\\n\\n## Is Bluetooth a secure enough technology?\\nBluetooth is a widely spread standard for connecting mobile devices with other devices such as wireless headphones, speakers, smart wristbands or smart watches. Since Apple and Google have developed the common protocol only for national Bluetooth LE-based contact tracing mobile applications, we are convinced that it was the right choice for eRouška as well. However, it has to be said that each and every technology has vulnerabilities. That is why we recommend our users to regularly update their apps as well as the operating system. The OS updates often contain important security patches.\\n\\n# General information\\n## What should I do when the application notified me about a risky encounter with an infected user?\\nIf you have symptoms of infection (e.g. high temperature, cough, stuffiness, sore throat, headache, or a sudden loss of smell or taste), call your general practitioner. In case of an emergency, call 155 for an ambulance or 112 for the integrated rescue system. The mentioned symptoms may appear between 2 and 14 days after the risky encounter.\\n\\nIf you have no symptoms please act responsibly:\\n\\n*   Wear a mask or respirator over your mouth and nose.\\n*   Wash your hands with soap thoroughly and use hand sanitizer regularly.\\n*   Sanitize your personal belongings (e.g. your mobile phone) regularly.\\n*   Cough or sneeze into a tissue or your sleeve.\\n*   Use disposable tissues and throw them away after use.\\n*   Avoid unnecessary large group gatherings and keep a safe distance (approximately 2 meters).\\n\\nIf you receive a notification in eRouška and suspect that you encountered an infected person, call your general practitioner and follow their instructions. It is also possible that a public health officer will contact you after epidemiological investigation with the infected person. In that case, follow the officer's instructions.\\n\\nIf your health deteriorates within 14 days after the risky encounter and you experience COVID-19 symptoms, contact your general practitioner.\\n\\n## What shall I do when I am positive for COVID-19 or I received an SMS with a verification code for eRouška?\\nIf you received and SMS from the laboratory saying you are positive for COVID-19, you should also receive another SMS with the eRouška verification code within a few hours. eRouška messages are sent automatically after your results are saved in the information system. Automated processes of the Smart quarantine cannot influence the moment when the laboratory sends the results to the information system.\\n\\nIf you receive an eRouška SMS message with a verification code, please [follow these instructions](https://erouska.cz/en/sms). This will allow you to anonymously notify other users about the risky encounter. Thank you!\\n\\nHave you tested positive but have not received the eRouška SMS? Request your code at [info@erouska.cz](mailto:info@erouska.cz?subject=).\\n\\n## So every time the app says that I was in contact with and infected person, I will have to stay in quarantine or get tested?\\nNo, eRouška is fully anonymous, using it is voluntary and a risky encounter is not a reason to enforce quarantine. If a person is tested positive, they will be contacted by the public health office to find out who they encountered in the previous days. If that person uses eRouška they can contact even those who they do not know, such as fellow passengers on a bus. By entering the verification code, they can send out notifications to all other eRouška users who they encountered in a risky manner.\\n\\nWhen the app notifies you that you have encountered a person tested positive for COVID-19, you should follow the recommendations. If you experience health problems contact your general practitioner immediately.\\n\\n## Will eRouška find out if I break my quarantine for example by going to my cottage?\\nThe application doesn't track your location – it's not its purpose – and it's not designed for it either. It will not find out if you have broken your quarantine or where you have gone. On the contrary, it should help to quarantine only people with a confirmed infection or suspect cases.\\n\\n## Can eRouška issue a sick leave note for me? Is the exposure notification a reason for incapacity for work?\\nNo, it cannot and it is not. If eRouška displayed the notification, follow the recommendations. Exposure notification does not substitute a report from your general practitioner or a laboratory which handles your COVID-19 test results. Only a doctor can issue valid documents that you can send to your employer.\\n\\n## Why is eRouška needed? Can it effectively protect me from the virus?\\nOne of eRouška's goals is to stop further spread of the infection by isolating potentially infected individuals from the rest. It also helps prevent implementing country-wide measures that have a negative impact on the society and economy of the Czech Republic. Similar applications were also introduced in other countries and are an effective tool to fight against COVID-19.\\n\\neRouška 2.0 is a complementary application of the Smart quarantine – Ministry of Health's system. Using Bluetooth technology, eRouška connects to other eRouška apps nearby and saves their anonymous identifiers. If a user is tested positive for COVID-19, they will receive an SMS with a verification code which allows the user to send their anonymous identifiers to other eRouška apps. According to the epidemiological model\\*, other users' apps will then evaluate whether they were in close enough contact to send out notifications and guide users to further investigation. Thus eRouška 2.0 helps to inform other potential transmitters of the infection and to speed up their testing. This decreases the number of infected individuals in the society and the risk of further infections.\\n\\n_\\* Closer than 2 metres apart and longer than 7 minutes._\\n\\n## What if someone does not admit they are infected?\\nThis can also happen. However, we believe that eRouška users want to actively help stop further spread of the virus, and use the application in order to alert people with whom they've come into risky contact. **Intentional spread of COVID-19 is a criminal offence in the Czech Republic.**\\n\\n## Is it worth installing eRouška if there are not enough people using it?\\nThis is the reason why you should not hesitate. The more of us use eRouška, the better network to protect us and warn against risk we will create. Help us. You can actively join the fight against COVID-19 by installing the app. You can also tell people around you about it and help them install it.\\n\\n## How does eRouška differ from other similar apps?\\neRouška uses Bluetooth technology which is used by most smart mobile devices in the Czech Republic. It works inside buildings, underground parking lots and the Metro. The application is designed not to collect your location information (e.g. via GPS). It only collects anonymous information on which other eRouška users you encountered closely. It is the only application in the Czech Republic that can officially use the Apple/Google protocol which guarantees the app's security on Android and iOD platforms and lowers battery use.\\n\\n## What is the Smart Quarantine? What is the role of eRouška in it?\\nIt is a set of clever measures that protect people from contagion and the economy from collapsing. Instead of keeping the whole nation in quarantine, the Smart Quarantine enables finding, testing and isolating only infected individuals and people with suspected infection.\\n\\nMore specifically, it is a system of management in forecasting, decision support, active contact tracing, testing including sampling point capacity management, laboratories, managing quarantines and related material and IT delivery to contain the pandemic of COVID-19. Smart Quarantine 2.0 is the name for transition of the project under the Ministry of Health which will be able to quickly react to any epidemics in the future thanks to new tools that are being developed.\\n\\neRouška application is one of the tools that were developed to support Smart Quarantine. Using technology, we can actively notify risky individuals who encountered an infected person to implement more protective measures, consider voluntary quarantine, and contact their GP in case they experience COVID-19 symptoms. We believe that thanks to these steps, we can contain the spread of the infection and save the health care system from a fatal overload.\\n\\n# More information about eRouška\\n## How does eRouška collect and process data about users' encounters?\\nYour smartphone with eRouška will record anonymous identifiers (ID) from other devices with this application via Bluetooth LE. It stores information about the “encounter” and its length in its internal memory.\\n\\nIf your COVID-19 test is positive you will receive a verification code in an SMS. You will enter it in eRouška ([follow these steps](https://erouska.cz/en/sms)) which will send your anonymous identifiers to the server. Other eRouška apps will download them for evaluation. The algorithm in each eRouška will automatically evaluate the data within the epidemiological model: it will compare the identifiers with all logged encounters. For each risky encounter, the app will display a notification, warn the user that they might be potentially infected, and recommend further steps.\\n\\nYou can find detailed information about data collection and processing in [Information about personal data processing in eRouška 2.0](https://erouska.cz/en/podminky-pouzivani).\\n\\n## How does eRouška evaluate risky encounters?\\nOriginally, epidemiologists established that a risky encounter is one that takes place closer than 2 meters apart for more than 15 minutes. However, aggressive transmission of new coronavirus mutations shows that even a shorter encounter might be risky.\\n\\nWe consulted Apple/Google and other countries on next steps regarding more aggressive mutations and we are gradually changing the parameters of risky encounter evaluation, beginning in March 2021. We periodically evaluate their effect on the number of risky encounters. These days, we are adjusting the time parameter, which is currently set to about 7 minutes.\\n\\neRouška strives to evaluate the parameters of distance and length of encounters as precisely as possible with the current technology. The distance between app users' phones is estimated by Bluetooth signal strength. The length of an encounter is considered periodically: every few minutes, the phones search for other phones with eRouška nearby.\\n\\nThe precision of these parameters is technologically limited. The bigger the distance and the shorter the encounter is, the more difficult it is to evaluate it. Loosening the parameters of evaluation thus increases the probability of false positive and false negative results.\\n\\nA higher precision requires more frequent logging of other devices with eRouška nearby. Unfortunately, that results in a higher energy consumption. Measurement algorithms are set up by Google and Apple in their Exposure Notification protocol on which eRouška is built. eRouška developers can only partially change these parameters and filter on the results. You can find more explanation in [Risk evaluation](https://erouska.cz/en/vyhodnoceni-rizika).\\n\\n## How does eRouška react to new variants or mutations of the virus?\\nNew virus variants that have appeared since the pandemic started are examined regarding their infectiousness and health impact. eRouška developers are in close contact with both Czech administration and Apple and Google that provide the exposure protocol. Therefore, they are able to alter the evaluation algorithm when the risk of infection changes due to research advances.\\n\\n## What if eRouška misinterprets a contact with another person who is, for example, in a car at a crossroads, behind a door or a thin wall?\\neRouška works by measuring the signal strength between two devices. Technically, it cannot be ruled out that a false detection occurs. You can read more about technical limitations, risks of app use and the process of encounter evaluation on [Reliability of risky encounter evaluation](https://erouska.cz/en/vyhodnoceni-rizika) and on [Technical requirements in Terms and conditions](https://erouska.cz/en/podminky-pouzivani#technicke).\\n\\nIn order to evaluate the contact as risky, it is important to measure the distance (under 2 m) and length of contact (several minutes) – therefore stopping at traffic lights is insignificant.\\n\\n## I received an exposure notification, but eRouška shows that it has not logged any risky encounter near me.\\nIf the notification with red virus icon and text Exposure notification (Android) or Exposure log (iOS) surprised you, no need to worry. It is only a system notification on Android and iOS which eRouška cannot influence. View [this picture](https://www.facebook.com/eRouska/posts/180938253548928) which shows what eRouška notification looks like.\\n\\nYou can find out whether you encountered an infected individual on the main page of eRouška.\\n\\nIf you saw a risky encounter in eRouška which then disappeared, it is possible that the evaluation parameters have changed in the Android app update so eRouška does not consider that encounter to be risky anymore.\\n\\n## So everyone will know I have COVID-19?\\nNo, they won't. If you are tested positive, your identity is only known to the public health officer. People that received a notification about a risky encounter will never know who, where or when they could have been infected. The application only displays the general information about risky encounters and recommends further steps. Your identity is safe.\\n\\n## I was tested for COVID-19, but I still have not received the SMS with the verification code for eRouška. When can I expect it?\\nFirst, you will receive test results in an SMS from the laboratory. The lab also sends the results to the central information system of the Ministry of Health. After the results are copied to the public health office's system, automatic eRouška SMS messages with verification codes are sent. If the lab does not send the results to the information system on the same day, you might not receive the SMS with the verification code until the next day.\\n\\n**Please check that the eRouška SMS was not blocked by the system as spam by mistake**\\n\\n*   **Android:** In your Messages app press the options icon (three dots) and Spam and blocked conversations (or three dots → Settings → SIM → Spam). If eRouška SMS is there, click on Not spam.\\n\\n**If you do not receive eRouška SMS even the day after** you received an SMS confirming your infection from the laboratory, send us a message to [info@erouska.cz](mailto:info@erouska.cz?subject=) asking for a new SMS code. Please state the following information:\\n\\n*   full name on your test request form,\\n*   phone number on your test request form,\\n*   date of test results,\\n*   sampling address / laboratory which handled your test results,\\n*   test type (PCR/antigen).\\n\\n## Will I receive the code in an SMS if I tested positive in an antigen test?\\nIf [your antigen test results positive and you experience COVID-19 symptoms](https://drive.google.com/file/d/1HPwtltNRuzmowjZgE_c1u-a8m3W89T-p/view) (stated in the request form), you will receive the eRouška code in an SMS same as in a positive PCR test.\\n\\nIf [your antigen test is positive but you do not experience COVID-19 symptoms](https://covid.gov.cz/situace/antigenni-testovani/interpretace-vysledku-antigenniho-testu-jak-se-zachovat-po-obdrzeni), you will undergo a PCR test. If that results positive, you will receive the code in an SMS. If your PCR test is negative, you will not send your data from eRouška.\\n\\n## In which countries can I use eRouška? How does cooperation with foreign apps work?\\nEuropean Commission developed a central gateway service for a secure information exchange (EFGS). This gateway allows eRouška to exchange warnings with other tracing applications used in various European countries. You can find more information about the gateway in [Coronavirus: EU interoperability gateway for contact tracing and warning apps – Questions and Answers](https://ec.europa.eu/commission/presscorner/detail/cs/qanda_20_1905#gateway).\\n\\nIf you want to view more information on joined countries and settings, tap Cross-border cooperation on the home page in the app. You can enable or disable the feature and view the list of countries. You can find the official list of EU countries at [European Commission's website](https://ec.europa.eu/health/sites/health/files/ehealth/docs/gateway_jointcontrollers_en.pdf).\\n\\n## Does eRouška use Apple/Google API?\\nThe new version eRouška 2.0 for Android and iOS uses Apple/Google Exposure Notification API. Remember to update your eRouška app in [Google Play (Android)](https://play.google.com/store/apps/details?id=cz.covid19cz.erouska) or [App Store (iOS)](https://apps.apple.com/cz/app/erou%C5%A1ka/id1509210215) and activate it again.\\n\\n## What is Apple/Google Exposure Notification API (protocol)?\\nTogether, Apple and Google develop technologies which can be used by public health institutions (Ministry of Health) to develop national applications for tracing risky encounters with individuals with COVID-19.\\n\\nIt is an interface which allows specific apps (eRouška in the Czech Republic) to reliably access system tools of Android and Apple devices and log encounters – mainly to use Bluetooth LE to verify the contact and run in the background without any more settings of the app or the operation system. Encrypted communication protocol then ensures a safe transmission of current lists of identifiers of infected individuals between tracing applications in order to evaluate risky encounters and send notifications.\\n\\nFind more information directly on [Apple](https://www.apple.com/covid19/contacttracing) and [Google](https://www.google.com/covid19/exposurenotifications/) websites.\\n\\n## Where in eRouška can I find information on stored encounters?\\neRouška 2.0 is built on Apple/Google Exposure Notification protocol which manages a secure storage and evaluation of encounters. Due to security reasons, it does not let the app directly access the data of encounters.\\n\\nOn the main screen, you can see whether the app is working correctly. Information about stored encounters is saved in the system. However, these encounters might not be the risky ones. You can find them in Settings:\\n\\n*   Android: Settings → Google → COVID-19 Exposure Notifications → press three dots in the upper right corner → Exposure Check\\n\\n## What are the records in Settings → Exposure Check?\\nRecording contacts with the infection show how many keys from infected users were downloaded on your phone from the server and how many of those match those that your phone logged.\\n\\n**Exposure Check:** Date and time when keys were downloaded from the server in the past 2 weeks. To view more you need to open individual records.\\n\\n**Android: Number of keys:** Number of keys from users who tested positive. Your phone downloaded these keys on that day to check for possible encounters with infected individuals.\\n\\n**Android: Number of matches:** Number of downloaded keys paired with keys found near you. If this number is higher than 0, you have encountered an infected individual. That does not necessarily indicate that it was a risky encounter.\\n\\n**Timestamp:** Date and time of the check. It is not the time of a risky encounter (the time is missing to protect the users' privacy).\\n\\n**Data source:** Application that checks and evaluates risky encounters.\\n\\n**Hashing code:** Check sum of the file that contains keys from infected users. Until the file contents change, the check sum will not change during the 2-week period.\\n\\n## How will I know that eRouška works on the background? Why don't I see the app icon in the status bar?\\nWe removed notification icon because storing and evaluation of encounters is done by Apple/Google protocol in the system. The app is responsible for downloading keys (identifiers) of infected users once or twice a day and does not need to run permanently.\\n\\nYou can view the app status on its main page. You can then check that the keys were downloaded in the Settings:\\n\\n*   **Android:** Settings → Google → COVID-19 Exposure Notifications → press three dots in the upper right corner → Exposure Check\\n*   **iOS**: Settings → Exposure Notifications → Exposure Logging Status → Exposure Checks\\n\\n## Why does the date and time of \"Last data update\" on the main page of eRouška differ from date and time of \"Exposure Checks\" that I can see in Settings?\\neRouška shows the date and time of the last successful attempt to check new keys (identifiers) of infected individuals on the server. Phone Settings show date and time when the keys were last found and evaluated.\\n\\nKeys of infected users download once or twice a day.\\n\\n## Why can't I view the exact time of a risky encounter in eRouška?\\neRouška is built on Apple/Google Exposure Notification protocol which manages logging and evaluation of encounters in the operating system. Apple/Google protocol allows eRouška to access only the date of a risky encounter so that the privacy of users is ensured.\\n\\n## Why do I see \"Found keys: 0\" in Exposure Checks in the phone Settings?\\nIt means that Apple/Google API in your phone has not evaluated any encounter with an infected individual. In other words, downloaded keys of infected users on a given day do not match keys stored in your device.\\n\\n## Why do I see keys for specific dates in the phone's Settings > Exposure Checks but eRouška does not display any risky encounters?\\nThe number of keys indicates the number of logged encounters with infected individuals. However, they might not be risky encounters. If an encounter is not risky, eRouška will not notify you about it. That's why you cannot see it in the app.\\n\\n## I received a notification about a risky encounter that took place several days ago. Why did eRouška only notify me now?\\neRouška cannot evaluate risky encounters and display notifications before the user with a positive test sends data from their eRouška. If today you receive a notification that you have encountered an infected individual several days ago, it means that the person only sent their data today or yesterday. Your eRouška downloaded and evaluated the data today.\\n\\n## I received a notification about a risky encounter, but I can see several logs with various dates on the Risky encounter page.\\neRouška evaluated risky encounters after a user who tested positive for COVID-19 sends data from their eRouška. If you received one notification but there are more logs on the Risky encounter page, it means that you have met that person more than once or that more than one user sent their data on the same day.\\n\\n## Bude eRouška fungovat jako „covid pas“ pro zobrazování výsledků testů a prokázání očkování?\\nAnonymní charakter aplikace eRouška ji neumožňuje kombinovat s tzv. digitálním zeleným certifikátem (Digital Green Certificate), který pracuje s ověřenou identitou a osobními údaji uživatele – výsledky testů nebo provedeným očkováním proti COVID-19.\\n\\n## Does eRouška publish app usage statistics?\\nWe publish statistics in JSON format at [stats.erouska.cz](https://stats.erouska.cz). The data have the following structure:\\n\\n{\\\\n  \"data\": {\\\\n    \"modified\": 1608696001,\\\\n    \"date\": \"20201223\",\\\\n    \"activations\\_yesterday\": 2042,\\\\n    \"activations\\_total\": 1475571,\\\\n    \"key\\_publishers\\_yesterday\": 718,\\\\n    \"key\\_publishers\\_total\": 39175,\\\\n    \"notifications\\_yesterday\": 631,\\\\n    \"notifications\\_total\": 197298\\\\n  }\\\\n}\\n\\n*   **modified** = Unix timestamp of generated statistics,\\n*   **date** = date of report created,\\n*   **activations\\_yesterday** = number of activations on the previous day,\\n*   **activations\\_total** = total number of eRouška activations,\\n*   **key\\_publishers\\_yesterday** = number of infected individuals who entered the code on the previous day,\\n*   **key\\_publishers\\_total** = total number of infected individuals who entered the code,\\n*   **notifications\\_yesterday** = number of individuals who received the notification about a risky encounter on the previous day,\\n*   **notifications\\_total** = total number of individuals who received the notification about a risky encounter.\\n\\nA call without a parameter will display current day's information. A call with parameter `date` will allow you to get data for any day after October 23, 2020 (we only have aggregated data before then). Using parameter `date` with value `all`, you can get all data that the interface provides.\\n\\n*   today's data: [`https://stats.erouska.cz/`](https://stats.erouska.cz/)\\n*   data from December 1, 2020: [`https://stats.erouska.cz/?date=2020-12-01`](https://stats.erouska.cz/?date=2020-12-01)\\n*   all days' data: [`https://stats.erouska.cz/?date=all`](https://stats.erouska.cz/?date=all)\\n\\n# Data security\\n## How do I know which data the application stores and sends?\\neRouška application 2.0 uses Apple/Google Exposure Notification API which allows for collecting data and transmitting identifiers among users. Thanks to that, the application does not have a direct access to logged data which could be displayed to users, as it did in the previous version 1.0.\\n\\nThe app downloads a list of identifiers from users who tested positive on a daily basis. Only the user can send data with identifiers to others, and only after they enter the SMS code that they will automatically receive when they test positive for COVID-19.\\n\\nThe app will then send anonymous aggregated statistical information that individuals in risk were notified. This information is not connected to any user or phone identifier and is only used to calculate statistics about eRouška's efficiency.\\n\\nTo make sure eRouška works correctly, we collect data such as crashes and app usage on your phone. We use standard tools (Firebase Crashlytics and Google Analytics) developed by Google. Telemetry sent into these tools does not contain any data about you or your phone.\\n\\nYou can find detailed information about data collection and processing in [Information about personal data processing in eRouška 2.0](https://erouska.cz/en/podminky-pouzivani).\\n\\n## Will eRouška data be copied after I perform phone recovery or if I get a new phone?\\nTo protect your privacy, neither Android nor iOS back up data from Exposure Notifications. If you reinstall your phone's system or get a new phone, the stored identifiers will not be recovered.\\n\\nIf you want to receive the information about a possible risky encounter, we recommend you check your old phone over the period of 14 days after you install eRouška on your new device. It is necessary to:\\n\\n*   make sure that your device is turned on and connected to the internet so that it can download evaluation data,\\n*   open eRouška on your old device at least once a day.\\n*   If you test positive during these 14 days, please enter your code in the new device. To receive the code for your older device, please contact us at [info@erouska.cz](mailto:info@erouska.cz).\\n\\nAfter 14 days, your old phone will not contain any data useful for risky encounter evaluation. You can uninstall eRouška from it and keep the app only in the new device.\\n\\n## What if my phone is stolen or I lose it?\\nOnly anonymous information about other devices detected by eRouška is stored in the app. This does not bring any risk to you or the owners of other devices. Other applications that you commonly use may store much more sensitive data on your phone. Keep your phone protected with a passcode or biometrics (fingerprint or face).\\n\\n## Is eRouška compliant with GDPR?\\nThe entire system of the application eRouška including the website is designed in full compliance with GDPR and the Personal Data Processing Act.\\n\\nYou will find more detailed information here:\\n\\n*   [Information about personal data processing in eRouška 2.0](https://erouska.cz/en/podminky-pouzivani)\\n*   [Application source code audit](https://erouska.cz/en/audit-kod)\\n\\n## How do you protect users from data abuse?\\nWe protect users primarily by minimizing the range of logged data and storing them directly in the device. User data is not sent or processed anywhere without their knowledge and consent. The app stores only anonymous identifiers (IDs) of other eRouška users and information about the time, length and Bluetooth strength. Data is automatically processed on the server only after they are sent by the user.\\n\\n## Does an independent organization oversee the security of application data?\\nThe whole system of eRouška application including the supporting website is developed in full compliance with GDPR. The application's code is open-sourced ([Android](https://github.com/covid19cz/erouska-android), [iOS](https://github.com/covid19cz/erouska-ios)) and underwent [an audit by independent education institutions](https://erouska.cz/en/audit-kod).\\n\\nYou can find more information in [Information about personal data processing in eRouška 2.0](https://erouska.cz/en/podminky-pouzivani).\\n\\n## Can someone track my location using eRouška?\\nNo. The application does not collect information about your location and only you have access to the saved data. The data that the app sends after your consent cannot be used to track your location. Moreover, for safety and privacy reasons, eRouška changes its ID regularly to prevent it from being abused.\\n\\n## Can I verify that the app is not recording my location?\\nYes. eRouška application is published as open-sourced code ([Android](https://github.com/covid19cz/erouska-android), [iOS](https://github.com/covid19cz/erouska-ios)), so an informed person can easily verify that the application indeed does not collect location data.\\n\\nThe source code of eRouška [is reviewed by independent authorities](https://erouska.cz/en/audit-kod) who confirm that the application:\\n\\n*   does not track location\\n*   does not automatically send data\\n\\n## Can a user's application identifier (ID) be paired with a specific person?\\nApplication eRouška 2.0 [does not work with personal data](https://erouska.cz/en/podminky-pouzivani). Generated anonymous eRouška identifiers are sent between the applications and the server via an encrypted communication protocol developed by Apple and Google. Neither users, nor developers or other authorities can access the identifiers.\\n\\n## Who has (could have) access to my data?\\nNeither the user not any other person can access logged data about encounters in eRouška 2.0. The reason for this is that this app version uses Apple/Google protocol which does not allow access to logged data to users, developers or other individuals. Data (anonymous identifiers of infected individuals) are sent to the server and other users' devices encrypted and are evaluated on the devices automatically if a notification about a risky encounter is needed to be displayed. They are deleted from the devices and the server automatically after 14 days.\\n\\n## How old data is available? When and how is it deleted?\\neRouška saves the data for 14 days. Older entries are automatically deleted. If you are tested positive for COVID-19, enter your verification code in eRouška and send identifiers from your phone to the server, the data will stay there for 14 days after which they will be deleted. You can delete data from your phone in Exposure Notification settings. The specific steps differ among devices and operating system versions.\\n\\n*   **Android:** On Android devices, uninstalling the app is enough to delete stored keys (identifiers).\\n\\nFor information about data controllers and processors, see the [Terms and Conditions](https://erouska.cz/en/podminky-pouzivani).\\n\\n## Can I change my mind about using the app at any time? Can I delete the data that I send out to be processed?\\nYou can uninstall the application any time you want. You can delete stored identifiers from your phone in Exposure Notification settings. The specific steps differ among devices and operating system versions. Data which were sent to the server are automatically deleted after 14 days.\\n\\n*   **Android:** On Android devices, uninstalling the app is enough to delete stored keys (identifiers).\\n\\n## What happens to the data after I delete the app from my smartphone?\\n**Android:** Uninstalling the app is enough to delete stored keys (identifiers) from phones or tablets with Android OS.\\n\\nIf you reinstall the application, it will start collecting and storing brand new data in the phone.\\n\\n## Where can I find the application's source code?\\neRouška is published with open-source code. You can find it on GitHub ([Android](https://github.com/covid19cz/erouska-android), [iOS](https://github.com/covid19cz/erouska-ios)).\\n\\n# Installation and compatibility\\n## For which phones is eRouška available? Why are the requirements stricter than in eRouška 1.0?\\nTo install eRouška, you need a mobile device with the following parameters:\\n\\n*   iPhone with iOS 13.5 and higher\\n*   OS Android 6.0 and higher with Google Play Services (only a small percentage of Huawei phones and some phones with their own ROM do not have this)\\n*   Bluetooth LE (Low Energy)\\n\\nIf your phone is not compatible with eRouška (it does not have the necessary features) Google Play Store or Apple App Store will not let you install it. The application is available only for some Android tablets. It is not available for iPads.\\n\\nApple and Google define the minimum requirements of compatibility. They are based on the Apple/Google Exposure Notification protocol which the new eRouška uses. We decided to start using the Apple/Google protocol to make sure that the app works on iPhones and to be compatible with similar applications in other European countries.\\n\\n## Where can I safely download and install eRouška?\\neRouška is only available for:\\n\\n*   Android: [in Google Play Store](https://play.google.com/store/apps/details?id=cz.covid19cz.erouska).\\n\\n## Is it possible to download the application outside official application stores? Is an apk available?\\neRouška 2.0 uses Apple/Google protocol to log encounters and transmit data. Therefore, it depends on system services, without which it would not work, so it is not possible to install it from other than official app stores. Application stores will automatically filter for compatible devices.\\n\\neRouška developers never provide users with links for installation packages (APKs) or installation files outside official application stores. We would not be able to guarantee security, updates or user support for unofficial app installs. Please, do not download eRouška from .apk files that you find online or receive by email. They might contain viruses, trojan horses or other harmful content.\\n\\n## Can I use eRouška with another tracing application of a foreign country (e.g. Corona-Warn-App)?\\nIf you spend most of your time in the Czech Republic, we recommend to use eRouška to travel abroad as well. [eRouška now cooperates with other EU countries](https://erouska.cz/en/caste-dotazy#efgs).\\n\\nIn other cases, you can install more tracing apps along eRouška, such as Corona-Warn-App, Stopp Corona App, Imunni, Stop Covid ProteGO Safe etc. However, if they also use Apple/Google Exposure Notification protocol (especially in neighbour countries), only one of them can be active at any given moment. You would need to pause the others. Only one app can access the Apple/Google protocol's logging feature at the same time.\\n\\n## Funguje eRouška, když mám na mobilu úsporný režim / režim nízké spotřeby / spořič baterie?\\n**Android:** Spořiče/šetřiče baterie na zařízeních s OS Android mohou do značné míry omezovat běh aplikací na pozadí. Ačkoliv systém oznámení o možném kontaktu s onemocněním COVID-19 nadále funguje, nemusí docházet k vyhodnocování rizikových kontaktů, a tudíž k případnému zobrazení notifikací.\\n\\n## Will I be able to use eRouška on smart watches or smart wristbands?\\nThis might be possible in the future. Right now, we are not developing this because the smart watch or wristband would need to support Bluetooth LE (Low Energy) and Apple/Google protocol. Basic Bluetooth without LE only manages data transmission but cannot measure the intensity of user encounters via signal strength.\\n\\n</value>\n    </entry>\n    <entry>\n        <key>v2_shareAppDynamicLink</key>\n        <value>https://erouska.cz/app/sdilej</value>\n    </entry>\n    <entry>\n        <key>v2_minSupportedVersionCodeAndroid</key>\n        <value>666</value>\n    </entry>\n    <entry>\n        <key>v2_shouldCheckOSVersion</key>\n        <value>1</value>\n    </entry>\n    <entry>\n        <key>v2_unsupportedDeviceLink</key>\n        <value>https://koronavirus.mzcr.cz/en/</value>\n    </entry>\n    <entry>\n        <key>v2_minSupportedVersion</key>\n        <value>2.3.3</value>\n    </entry>\n    <entry>\n        <key>v2_currentMeasuresUrl</key>\n        <value>https://covid.gov.cz/en/</value>\n    </entry>\n    <entry>\n        <key>v2_appleExposureConfiguration</key>\n        <value>{\"factorHigh\":0.25,\"factorStandard\":1,\"factorLow\":2,\"lowerThreshold\":55,\"higherThreshold\":70,\"triggerThreshold\":10}</value>\n    </entry>\n    <entry>\n        <key>v2_daysSinceOnsetToInfectiousness</key>\n        <value>0;0;0;0;0;0;0;0;0;0;0;1;2;2;2;2;2;2;2;1;1;1;1;1;1;1;1;1;1</value>\n    </entry>\n    <entry>\n        <key>v2_supportEmail</key>\n        <value>info@erouska.cz</value>\n    </entry>\n    <entry>\n        <key>v2_appleServerConfiguration</key>\n        <value>{\"minSupportedVersion\":\"13.5\",\"showExposureForDays\":14,\"healthAuthority\":\"cz.covid19cz.erouska\",\"uploadURL\":\"https://exposure-fghz64a2xa-ew.a.run.app/v1/publish\",\"downloadIndexName\":\"erouska/index.txt\",\"downloadsURL\":\"https://google.com\",\"verificationURL\":\"https://apiserver-jyvw4xgota-ew.a.run.app\",\"verificationAdminKey\":\"\",\"verificationDeviceKey\":\"4AP6RHk5VlNi7WIhj4ZupI9JZODdUyrPGb1C2mDYKo4cuaGIHdYtOhjyoqhg4vB5r7FDijxnySLb_1CUH6XdDA.1.oZLaUuVOPbvEaiWnzkQxasWlD_71iSTeM9aAIOKrfqhg5QO68t004CKxWutYmfISc7vqJe6uY2dRrt34OFkliw\",\"appCurentDataURL\":\"https://europe-west1-daring-leaf-272223.cloudfunctions.net\",\"firebaseURL\":\"https://europe-west1-daring-leaf-272223.cloudfunctions.net\"}</value>\n    </entry>\n    <entry>\n        <key>v2_handleError400AsExpiredOrUsedCode</key>\n        <value>false</value>\n    </entry>\n    <entry>\n        <key>v2_handleError500AsInvalidCode</key>\n        <value>false</value>\n    </entry>\n    <entry>\n        <key>v2_exposureHelpContentJson</key>\n        <value>{\"items\":[{\"iconUrl\":\"https://erouska.cz/img/exposure/ic_notification.png\",\"label\":\"You will receive the notification at least 24 hours after the infected individual tests positive for COVID-19 and enters their verification code in eRouška.\"},{\"iconUrl\":\"https://erouska.cz/img/exposure/ic_privacy.png\",\"label\":\"To keep identities anonymous, we do not know the time or place of the encounter.\"},{\"iconUrl\":\"https://erouska.cz/img/exposure/ic_distance.png\",\"label\":\"The encounter will be evaluated as risky if it was longer than 7 minutes and closer than 2 meters apart.\"},{\"iconUrl\":\"https://erouska.cz/img/exposure/ic_14days.png\",\"label\":\"We evaluate risky encounters in the past 14 days because you might experience COVID-19 symptoms between 2 and 14 days after a risky encounter.\"}]}</value>\n    </entry>\n    <entry>\n        <key>v2_exposureHelpUITitle</key>\n        <value>Help</value>\n    </entry>\n    <entry>\n        <key>v2_updateNewsOnRequest</key>\n        <value>true</value>\n    </entry>\n    <entry>\n        <key>v2_recentExposureNotificationTitle</key>\n        <value>It's been some time since your eRouška updated its data with risky encounters. Connect to the internet.</value>\n    </entry>\n    <entry>\n        <key>v2_efgsCountries</key>\n        <value>Austria, Belgium, Croatia, Cyprus, Denmark, Finland, Germany, Ireland, Italy, Latvia, Netherlands, Norway, Poland, Slovenia and Spain currently cooperate with eRouška.</value>\n    </entry>\n    <entry>\n        <key>v2_diagnosisKeysDataMappingLimitDays</key>\n        <value>7</value>\n    </entry>\n    <entry>\n        <key>v2_infectiousnessWhenDaysSinceOnsetMissing</key>\n        <value>1</value>\n    </entry>\n    <entry>\n        <key>v2_reportTypeWhenMissing</key>\n        <value>1</value>\n    </entry>\n    <entry>\n        <key>v2_noEncounterCardTitle</key>\n        <value>You have not encountered anyone with COVID-19 in the past 14 days</value>\n    </entry>\n    <entry>\n        <key>v2_encounterUpdateFrequency</key>\n        <value>Data update once every %d hours.</value>\n    </entry>\n    <entry>\n        <key>v2_dbCleanupDays</key>\n        <value>15</value>\n    </entry>\n    <entry>\n        <key>v2_selfCheckerPeriodHours</key>\n        <value>4</value>\n    </entry>\n    <entry>\n        <key>v2_showChatBotLink</key>\n        <value>false</value>\n    </entry>\n    <entry>\n        <key>v2_efgsVisitedCountries</key>\n        <value></value>\n    </entry>\n    <entry>\n        <key>v2_efgsReportType</key>\n        <value>ConfirmedTest</value>\n    </entry>\n    <entry>\n        <key>v2_efgsConsentToFederation</key>\n        <value>false</value>\n    </entry>\n    <entry>\n        <key>v2_efgsTravellerDefault</key>\n        <value>false</value>\n    </entry>\n    <entry>\n        <key>v2_appleExposureConfigurationV2</key>\n        <value>{\"immediateDurationWeight\":200,\"nearDurationWeight\":100,\"mediumDurationWeight\":25,\"otherDurationWeight\":0,\"infectiousnessForDaysSinceOnsetOfSymptoms\":{\"0\":2,\"1\":2,\"2\":2,\"3\":2,\"4\":2,\"5\":1,\"6\":1,\"7\":1,\"8\":1,\"9\":1,\"10\":1,\"11\":1,\"12\":1,\"13\":1,\"14\":1,\"unknown\":1,\"-14\":0,\"-13\":0,\"-12\":0,\"-11\":0,\"-10\":0,\"-9\":0,\"-8\":0,\"-7\":0,\"-6\":0,\"-5\":0,\"-4\":0,\"-3\":1,\"-2\":2,\"-1\":2},\"infectiousnessStandardWeight\":100,\"infectiousnessHighWeight\":200,\"reportTypeConfirmedTestWeight\":100,\"reportTypeConfirmedClinicalDiagnosisWeight\":100,\"reportTypeSelfReportedWeight\":100,\"reportTypeRecursiveWeight\":100,\"reportTypeNoneMap\":1,\"minimumRiskScore\":0,\"attenuationDurationThresholds\":[55,70,80],\"attenuationLevelValues\":[1,2,3,4,5,6,7,8],\"daysSinceLastExposureLevelValues\":[1,2,3,4,5,6,7,8],\"durationLevelValues\":[1,2,3,4,5,6,7,8],\"transmissionRiskLevelValues\":[1,2,3,4,5,6,7,8],\"minimumScore\":420}</value>\n    </entry>\n    <entry>\n        <key>v2_helpJson</key>\n        <value>[{\"title\":\"Frequent problems\",\"subtitle\":\"Recommended temporary measures\",\"icon\":\"https://erouska.cz/img/faq/tool.png\",\"questions\":[{\"question\":\"Android: Basic recommendations for troubleshooting\",\"answer\":\"If the app displays an error message please check that your operating system is updated ([how to update Android](https://support.google.com/android/answer/7680439)) and that you are not using its beta version.\\n\\nThen, please check whether there are new updates of eRouška in your store ([Google Play (Android)](https://play.google.com/store/apps/details?id=cz.covid19cz.erouska)).\\n\\nWe also recommend to enable automatic eRouška app updates. [Steps for Android are:](https://support.google.com/googleplay/answer/113412#autoone) Open Google Play Store app, press My apps &amp; games → choose the app to update → press three dots and select Enable auto update.\"},{\"question\":\"Android: Cannot activate eRouška. Activation error 17 (Exposure Notification API is not available).\",\"answer\":\"On Android devices, please follow these steps:\\n\\n1.  Check if you are the _primary user_ of the device, that Play Services are installed, and that _Settings → Google → COVID-19 Exposure Notifications_ is available.\\n2.  Uninstall eRouška.\\n3.  Clear cache and data for Google Play Services and Play Store ([see steps 2 and 3](https://support.google.com/googleplay/answer/9037938)).\\n4.  Install eRouška and enable _COVID-19 Exposure Notifications_.\\n\\nIf you still experience issues with app activation, it is possible that your device does not support Bluetooth LE (Low Energy Advertising) or Bluetooth Multiple Advertisement, is not authorized for Exposure Notifications by Google, or does not have Exposure Notifications API.\"}]},{\"title\":\"Connection and data transmission\",\"subtitle\":\"Bluetooth, GPS, internet\",\"icon\":\"https://erouska.cz/img/faq/connection.png\",\"questions\":[{\"question\":\"Do I need to keep Bluetooth turned on all the time?\",\"answer\":\"Yes, you do. Without Bluetooth turned on, it is not possible to detect nearby devices with eRouška. You may have already enabled Bluetooth if you use wireless headphones, a smart watch or a connection with your car. We recommend you to set Bluetooth to be _visible for all devices_.\"},{\"question\":\"Does eRouška need internet connection?\",\"answer\":\"Internet connection is necessary to download (install) and activate eRouška. It also needs internet connection to download anonymous identifiers of infected users every day and display notifications about risky encounters.\\n\\nIf you are tested positive for COVID-19 and would like to anonymously notify others of a risky encounter, you would have to connect eRouška to the internet. Until then, your data is saved only in your phone's memory and is deleted every 14 days. The application also uses internet connection to download information about the epidemic's current development in the Czech Republic which is displayed on the _News_ page.\"},{\"question\":\"How often does the app update online data?\",\"answer\":\"eRouška downloads keys (identifiers) of infected users several times a day. Statistics on the News page are updated once a day.\"},{\"question\":\"How much data does eRouška consume daily?\",\"answer\":\"If _Notifications about foreign risky encounters_ is enabled, eRouška will also download keys of all infected individuals from other EU countries. The volume of downloaded data may be up to 2 MB daily.\\n\\nEven if _Notifications about foreign risky encounters_ are disabled, eRouška downloads about 1 MB of data every day. The new app version downloads keys not only from eRouška users, but also from infected users from other EU countries who indicated that they were travelling abroad and whom an eRouška user might have encountered.\\n\\nKeys of infected individuals are downloaded 2–3 times a day. To compare, an average web page requires about 1–5 MB of data. **The application does not necessarily need mobile internet.** It can download data when connected to WiFi.\"},{\"question\":\"Android: Why do I need to allow the application to access GPS/location data?\",\"answer\":\"**Update for Android 11 users:** You do not need to enable location services for the newest Android operating system versions for eRouška to work.\\n\\neRouška does not collect or store GPS data, but the operating system **Android 10 and older** also includes some Bluetooth LE (LE = low energy) services, which eRouška components need in order to function properly – specifically, Google Play Services. Therefore, the user's consent to the application's access to location data is required. This consent is not required on iOS. [Google explains](https://support.google.com/android/answer/9930236) why location services must be enabled in the phone.\\n\\nOther applications in your phone might use information on your location. If you want to check which apps use your location, go to your phone's settings → Location → App permission (or follow [these steps by Google](https://support.google.com/accounts/answer/6179507?hl=en)). You can deny location permission to other apps if you think they do not need it. eRouška does not need it so it will not be listed.\"},{\"question\":\"How much battery do Bluetooth and eRouška app drain?\",\"answer\":\"If you already use a phone with Bluetooth enabled, power consumption should not increase significantly. If you do not actively use Bluetooth, the results of our testing where Bluetooth was turned on all the time showed that energy consumption increased by units of percent per day. In most cases, it is less than 20% of battery capacity per day. It depends on the specific smartphone, your style of use and battery condition.\\n\\nPower consumption related to eRouška use is affected by 2 factors. First, it's the application itself, and second, it's the use of the system's Exposure Notification which regularly logs encounters with other eRouška users. The system function is provided by operating system Android or iOS so its optimization depends on updates from Apple and Google.\\n\\nWhen interpreting power consumption, please consider that this percentage depends on your phone's full use during the past 24 hours (proportion of use by other apps). That means that the percentage of eRouška use might be high in low-use phones, while it might be low in highly used phones. So it does not show the percentage of battery use.\\n\\n**Android: Note for location services:** It is only possible to detect a Bluetooth device near you if you enable \\\"Use location\\\" in the settings. (Read more in [Why your phone’s location setting needs to be on? on Google's help page](https://support.google.com/android/answer/9930236?hl=cs).) It means that other applications in your phone might use information on your location, which might be the reason for a higher power consumption. Please check which apps use your location. Go to your phone's settings → Location → App permission (or follow [these steps by Google](https://support.google.com/accounts/answer/6179507?hl=cs)). You can deny location permission to other apps if you think they do not need it. eRouška does not need it so it will not be listed.\"},{\"question\":\"Is it possible that after turning on eRouška, my Wi-Fi or internet connection slowed down?\",\"answer\":\"Unfortunately, some Android mobile phones' Bluetooth negatively affects Wi-Fi signal and vice versa.\"},{\"question\":\"Can eRouška cause problems with other apps or devices that use Bluetooth (headphones, watches, wristbands)?\",\"answer\":\"Very rarely, users might experience strange behaviour of their Bluetooth devices after they install eRouška, such as connection interruptions, typically in smart watches or wristbands, wireless headphones or handsfree sets. Most probably, it is an operating system issue which we are not able to affect.\\n\\nPlease try to apply the following steps:\\n\\n1.  Restart your phone.\\n2.  Unpair your Bluetooth device and pair it again.\\n\\nIf these steps do not help please contact your device's manufacturer:\\n\\n*   Android: [Get help from your device manufacturer](https://support.google.com/android/answer/3094742?ref_topic=7313011&amp;hl=en)\"},{\"question\":\"Why does the app use Bluetooth? Are there no better alternatives such as GPS or triangulation from phone network operators?\",\"answer\":\"User privacy comes first, and Bluetooth technology offers the best balance between logging accuracy and maximal privacy. Neither GPS technology nor operator triangulation can provide necessary data with the required accuracy. Among other things, it is because their functionality inside buildings or metro is very limited. eRouška needs to know that an encounter has occurred, at what distance and its duration. It does not matter where the encounter took place.\"},{\"question\":\"Is Bluetooth a secure enough technology?\",\"answer\":\"Bluetooth is a widely spread standard for connecting mobile devices with other devices such as wireless headphones, speakers, smart wristbands or smart watches. Since Apple and Google have developed the common protocol only for national Bluetooth LE-based contact tracing mobile applications, we are convinced that it was the right choice for eRouška as well. However, it has to be said that each and every technology has vulnerabilities. That is why we recommend our users to regularly update their apps as well as the operating system. The OS updates often contain important security patches.\"}]},{\"title\":\"General information\",\"subtitle\":\"eRouška, quarantine, and procedures of the public health office\",\"icon\":\"https://erouska.cz/img/faq/general.png\",\"questions\":[{\"question\":\"What should I do when the application notified me about a risky encounter with an infected user?\",\"answer\":\"If you have symptoms of infection (e.g. high temperature, cough, stuffiness, sore throat, headache, or a sudden loss of smell or taste), call your general practitioner. In case of an emergency, call 155 for an ambulance or 112 for the integrated rescue system. The mentioned symptoms may appear between 2 and 14 days after the risky encounter.\\n\\nIf you have no symptoms please act responsibly:\\n\\n*   Wear a mask or respirator over your mouth and nose.\\n*   Wash your hands with soap thoroughly and use hand sanitizer regularly.\\n*   Sanitize your personal belongings (e.g. your mobile phone) regularly.\\n*   Cough or sneeze into a tissue or your sleeve.\\n*   Use disposable tissues and throw them away after use.\\n*   Avoid unnecessary large group gatherings and keep a safe distance (approximately 2 meters).\\n\\nIf you receive a notification in eRouška and suspect that you encountered an infected person, call your general practitioner and follow their instructions. It is also possible that a public health officer will contact you after epidemiological investigation with the infected person. In that case, follow the officer's instructions.\\n\\nIf your health deteriorates within 14 days after the risky encounter and you experience COVID-19 symptoms, contact your general practitioner.\"},{\"question\":\"What shall I do when I am positive for COVID-19 or I received an SMS with a verification code for eRouška?\",\"answer\":\"If you received and SMS from the laboratory saying you are positive for COVID-19, you should also receive another SMS with the eRouška verification code within a few hours. eRouška messages are sent automatically after your results are saved in the information system. Automated processes of the Smart quarantine cannot influence the moment when the laboratory sends the results to the information system.\\n\\nIf you receive an eRouška SMS message with a verification code, please [follow these instructions](https://erouska.cz/en/sms). This will allow you to anonymously notify other users about the risky encounter. Thank you!\\n\\nHave you tested positive but have not received the eRouška SMS? Request your code at [info@erouska.cz](mailto:info@erouska.cz?subject=).\"},{\"question\":\"So every time the app says that I was in contact with and infected person, I will have to stay in quarantine or get tested?\",\"answer\":\"No, eRouška is fully anonymous, using it is voluntary and a risky encounter is not a reason to enforce quarantine. If a person is tested positive, they will be contacted by the public health office to find out who they encountered in the previous days. If that person uses eRouška they can contact even those who they do not know, such as fellow passengers on a bus. By entering the verification code, they can send out notifications to all other eRouška users who they encountered in a risky manner.\\n\\nWhen the app notifies you that you have encountered a person tested positive for COVID-19, you should follow the recommendations. If you experience health problems contact your general practitioner immediately.\"},{\"question\":\"Will eRouška find out if I break my quarantine for example by going to my cottage?\",\"answer\":\"The application doesn't track your location – it's not its purpose – and it's not designed for it either. It will not find out if you have broken your quarantine or where you have gone. On the contrary, it should help to quarantine only people with a confirmed infection or suspect cases.\"},{\"question\":\"Can eRouška issue a sick leave note for me? Is the exposure notification a reason for incapacity for work?\",\"answer\":\"No, it cannot and it is not. If eRouška displayed the notification, follow the recommendations. Exposure notification does not substitute a report from your general practitioner or a laboratory which handles your COVID-19 test results. Only a doctor can issue valid documents that you can send to your employer.\"},{\"question\":\"Why is eRouška needed? Can it effectively protect me from the virus?\",\"answer\":\"One of eRouška's goals is to stop further spread of the infection by isolating potentially infected individuals from the rest. It also helps prevent implementing country-wide measures that have a negative impact on the society and economy of the Czech Republic. Similar applications were also introduced in other countries and are an effective tool to fight against COVID-19.\\n\\neRouška 2.0 is a complementary application of the Smart quarantine – Ministry of Health's system. Using Bluetooth technology, eRouška connects to other eRouška apps nearby and saves their anonymous identifiers. If a user is tested positive for COVID-19, they will receive an SMS with a verification code which allows the user to send their anonymous identifiers to other eRouška apps. According to the epidemiological model\\\\*, other users' apps will then evaluate whether they were in close enough contact to send out notifications and guide users to further investigation. Thus eRouška 2.0 helps to inform other potential transmitters of the infection and to speed up their testing. This decreases the number of infected individuals in the society and the risk of further infections.\\n\\n_\\\\* Closer than 2 metres apart and longer than 7 minutes._\"},{\"question\":\"What if someone does not admit they are infected?\",\"answer\":\"This can also happen. However, we believe that eRouška users want to actively help stop further spread of the virus, and use the application in order to alert people with whom they've come into risky contact. **Intentional spread of COVID-19 is a criminal offence in the Czech Republic.**\"},{\"question\":\"Is it worth installing eRouška if there are not enough people using it?\",\"answer\":\"This is the reason why you should not hesitate. The more of us use eRouška, the better network to protect us and warn against risk we will create. Help us. You can actively join the fight against COVID-19 by installing the app. You can also tell people around you about it and help them install it.\"},{\"question\":\"How does eRouška differ from other similar apps?\",\"answer\":\"eRouška uses Bluetooth technology which is used by most smart mobile devices in the Czech Republic. It works inside buildings, underground parking lots and the Metro. The application is designed not to collect your location information (e.g. via GPS). It only collects anonymous information on which other eRouška users you encountered closely. It is the only application in the Czech Republic that can officially use the Apple/Google protocol which guarantees the app's security on Android and iOD platforms and lowers battery use.\"},{\"question\":\"What is the Smart Quarantine? What is the role of eRouška in it?\",\"answer\":\"It is a set of clever measures that protect people from contagion and the economy from collapsing. Instead of keeping the whole nation in quarantine, the Smart Quarantine enables finding, testing and isolating only infected individuals and people with suspected infection.\\n\\nMore specifically, it is a system of management in forecasting, decision support, active contact tracing, testing including sampling point capacity management, laboratories, managing quarantines and related material and IT delivery to contain the pandemic of COVID-19. Smart Quarantine 2.0 is the name for transition of the project under the Ministry of Health which will be able to quickly react to any epidemics in the future thanks to new tools that are being developed.\\n\\neRouška application is one of the tools that were developed to support Smart Quarantine. Using technology, we can actively notify risky individuals who encountered an infected person to implement more protective measures, consider voluntary quarantine, and contact their GP in case they experience COVID-19 symptoms. We believe that thanks to these steps, we can contain the spread of the infection and save the health care system from a fatal overload.\"}]},{\"title\":\"More information about eRouška\",\"subtitle\":\"Data collection and evaluation, and the importance of notifications\",\"icon\":\"https://erouska.cz/img/faq/advanced.png\",\"questions\":[{\"question\":\"How does eRouška collect and process data about users' encounters?\",\"answer\":\"Your smartphone with eRouška will record anonymous identifiers (ID) from other devices with this application via Bluetooth LE. It stores information about the “encounter” and its length in its internal memory.\\n\\nIf your COVID-19 test is positive you will receive a verification code in an SMS. You will enter it in eRouška ([follow these steps](https://erouska.cz/en/sms)) which will send your anonymous identifiers to the server. Other eRouška apps will download them for evaluation. The algorithm in each eRouška will automatically evaluate the data within the epidemiological model: it will compare the identifiers with all logged encounters. For each risky encounter, the app will display a notification, warn the user that they might be potentially infected, and recommend further steps.\\n\\nYou can find detailed information about data collection and processing in [Information about personal data processing in eRouška 2.0](https://erouska.cz/en/podminky-pouzivani).\"},{\"question\":\"How does eRouška evaluate risky encounters?\",\"answer\":\"Originally, epidemiologists established that a risky encounter is one that takes place closer than 2 meters apart for more than 15 minutes. However, aggressive transmission of new coronavirus mutations shows that even a shorter encounter might be risky.\\n\\nWe consulted Apple/Google and other countries on next steps regarding more aggressive mutations and we are gradually changing the parameters of risky encounter evaluation, beginning in March 2021. We periodically evaluate their effect on the number of risky encounters. These days, we are adjusting the time parameter, which is currently set to about 7 minutes.\\n\\neRouška strives to evaluate the parameters of distance and length of encounters as precisely as possible with the current technology. The distance between app users' phones is estimated by Bluetooth signal strength. The length of an encounter is considered periodically: every few minutes, the phones search for other phones with eRouška nearby.\\n\\nThe precision of these parameters is technologically limited. The bigger the distance and the shorter the encounter is, the more difficult it is to evaluate it. Loosening the parameters of evaluation thus increases the probability of false positive and false negative results.\\n\\nA higher precision requires more frequent logging of other devices with eRouška nearby. Unfortunately, that results in a higher energy consumption. Measurement algorithms are set up by Google and Apple in their Exposure Notification protocol on which eRouška is built. eRouška developers can only partially change these parameters and filter on the results. You can find more explanation in [Risk evaluation](https://erouska.cz/en/vyhodnoceni-rizika).\"},{\"question\":\"How does eRouška react to new variants or mutations of the virus?\",\"answer\":\"New virus variants that have appeared since the pandemic started are examined regarding their infectiousness and health impact. eRouška developers are in close contact with both Czech administration and Apple and Google that provide the exposure protocol. Therefore, they are able to alter the evaluation algorithm when the risk of infection changes due to research advances.\"},{\"question\":\"What if eRouška misinterprets a contact with another person who is, for example, in a car at a crossroads, behind a door or a thin wall?\",\"answer\":\"eRouška works by measuring the signal strength between two devices. Technically, it cannot be ruled out that a false detection occurs. You can read more about technical limitations, risks of app use and the process of encounter evaluation on [Reliability of risky encounter evaluation](https://erouska.cz/en/vyhodnoceni-rizika) and on [Technical requirements in Terms and conditions](https://erouska.cz/en/podminky-pouzivani#technicke).\\n\\nIn order to evaluate the contact as risky, it is important to measure the distance (under 2 m) and length of contact (several minutes) – therefore stopping at traffic lights is insignificant.\"},{\"question\":\"I received an exposure notification, but eRouška shows that it has not logged any risky encounter near me.\",\"answer\":\"If the notification with red virus icon and text Exposure notification (Android) or Exposure log (iOS) surprised you, no need to worry. It is only a system notification on Android and iOS which eRouška cannot influence. View [this picture](https://www.facebook.com/eRouska/posts/180938253548928) which shows what eRouška notification looks like.\\n\\nYou can find out whether you encountered an infected individual on the main page of eRouška.\\n\\nIf you saw a risky encounter in eRouška which then disappeared, it is possible that the evaluation parameters have changed in the Android app update so eRouška does not consider that encounter to be risky anymore.\"},{\"question\":\"So everyone will know I have COVID-19?\",\"answer\":\"No, they won't. If you are tested positive, your identity is only known to the public health officer. People that received a notification about a risky encounter will never know who, where or when they could have been infected. The application only displays the general information about risky encounters and recommends further steps. Your identity is safe.\"},{\"question\":\"I was tested for COVID-19, but I still have not received the SMS with the verification code for eRouška. When can I expect it?\",\"answer\":\"First, you will receive test results in an SMS from the laboratory. The lab also sends the results to the central information system of the Ministry of Health. After the results are copied to the public health office's system, automatic eRouška SMS messages with verification codes are sent. If the lab does not send the results to the information system on the same day, you might not receive the SMS with the verification code until the next day.\\n\\n**Please check that the eRouška SMS was not blocked by the system as spam by mistake**\\n\\n*   **Android:** In your Messages app press the options icon (three dots) and Spam and blocked conversations (or three dots → Settings → SIM → Spam). If eRouška SMS is there, click on Not spam.\\n\\n**If you do not receive eRouška SMS even the day after** you received an SMS confirming your infection from the laboratory, send us a message to [info@erouska.cz](mailto:info@erouska.cz?subject=) asking for a new SMS code. Please state the following information:\\n\\n*   full name on your test request form,\\n*   phone number on your test request form,\\n*   date of test results,\\n*   sampling address / laboratory which handled your test results,\\n*   test type (PCR/antigen).\"},{\"question\":\"Will I receive the code in an SMS if I tested positive in an antigen test?\",\"answer\":\"If [your antigen test results positive and you experience COVID-19 symptoms](https://drive.google.com/file/d/1HPwtltNRuzmowjZgE_c1u-a8m3W89T-p/view) (stated in the request form), you will receive the eRouška code in an SMS same as in a positive PCR test.\\n\\nIf [your antigen test is positive but you do not experience COVID-19 symptoms](https://covid.gov.cz/situace/antigenni-testovani/interpretace-vysledku-antigenniho-testu-jak-se-zachovat-po-obdrzeni), you will undergo a PCR test. If that results positive, you will receive the code in an SMS. If your PCR test is negative, you will not send your data from eRouška.\"},{\"question\":\"In which countries can I use eRouška? How does cooperation with foreign apps work?\",\"answer\":\"European Commission developed a central gateway service for a secure information exchange (EFGS). This gateway allows eRouška to exchange warnings with other tracing applications used in various European countries. You can find more information about the gateway in [Coronavirus: EU interoperability gateway for contact tracing and warning apps – Questions and Answers](https://ec.europa.eu/commission/presscorner/detail/cs/qanda_20_1905#gateway).\\n\\nIf you want to view more information on joined countries and settings, tap Cross-border cooperation on the home page in the app. You can enable or disable the feature and view the list of countries. You can find the official list of EU countries at [European Commission's website](https://ec.europa.eu/health/sites/health/files/ehealth/docs/gateway_jointcontrollers_en.pdf).\"},{\"question\":\"Does eRouška use Apple/Google API?\",\"answer\":\"The new version eRouška 2.0 for Android and iOS uses Apple/Google Exposure Notification API. Remember to update your eRouška app in [Google Play (Android)](https://play.google.com/store/apps/details?id=cz.covid19cz.erouska) or [App Store (iOS)](https://apps.apple.com/cz/app/erou%C5%A1ka/id1509210215) and activate it again.\"},{\"question\":\"What is Apple/Google Exposure Notification API (protocol)?\",\"answer\":\"Together, Apple and Google develop technologies which can be used by public health institutions (Ministry of Health) to develop national applications for tracing risky encounters with individuals with COVID-19.\\n\\nIt is an interface which allows specific apps (eRouška in the Czech Republic) to reliably access system tools of Android and Apple devices and log encounters – mainly to use Bluetooth LE to verify the contact and run in the background without any more settings of the app or the operation system. Encrypted communication protocol then ensures a safe transmission of current lists of identifiers of infected individuals between tracing applications in order to evaluate risky encounters and send notifications.\\n\\nFind more information directly on [Apple](https://www.apple.com/covid19/contacttracing) and [Google](https://www.google.com/covid19/exposurenotifications/) websites.\"},{\"question\":\"Where in eRouška can I find information on stored encounters?\",\"answer\":\"eRouška 2.0 is built on Apple/Google Exposure Notification protocol which manages a secure storage and evaluation of encounters. Due to security reasons, it does not let the app directly access the data of encounters.\\n\\nOn the main screen, you can see whether the app is working correctly. Information about stored encounters is saved in the system. However, these encounters might not be the risky ones. You can find them in Settings:\\n\\n*   Android: Settings → Google → COVID-19 Exposure Notifications → press three dots in the upper right corner → Exposure Check\"},{\"question\":\"What are the records in Settings → Exposure Check?\",\"answer\":\"Recording contacts with the infection show how many keys from infected users were downloaded on your phone from the server and how many of those match those that your phone logged.\\n\\n**Exposure Check:** Date and time when keys were downloaded from the server in the past 2 weeks. To view more you need to open individual records.\\n\\n**Android: Number of keys:** Number of keys from users who tested positive. Your phone downloaded these keys on that day to check for possible encounters with infected individuals.\\n\\n**Android: Number of matches:** Number of downloaded keys paired with keys found near you. If this number is higher than 0, you have encountered an infected individual. That does not necessarily indicate that it was a risky encounter.\\n\\n**Timestamp:** Date and time of the check. It is not the time of a risky encounter (the time is missing to protect the users' privacy).\\n\\n**Data source:** Application that checks and evaluates risky encounters.\\n\\n**Hashing code:** Check sum of the file that contains keys from infected users. Until the file contents change, the check sum will not change during the 2-week period.\"},{\"question\":\"How will I know that eRouška works on the background? Why don't I see the app icon in the status bar?\",\"answer\":\"We removed notification icon because storing and evaluation of encounters is done by Apple/Google protocol in the system. The app is responsible for downloading keys (identifiers) of infected users once or twice a day and does not need to run permanently.\\n\\nYou can view the app status on its main page. You can then check that the keys were downloaded in the Settings:\\n\\n*   **Android:** Settings → Google → COVID-19 Exposure Notifications → press three dots in the upper right corner → Exposure Check\\n*   **iOS**: Settings → Exposure Notifications → Exposure Logging Status → Exposure Checks\"},{\"question\":\"Why does the date and time of \\\"Last data update\\\" on the main page of eRouška differ from date and time of \\\"Exposure Checks\\\" that I can see in Settings?\",\"answer\":\"eRouška shows the date and time of the last successful attempt to check new keys (identifiers) of infected individuals on the server. Phone Settings show date and time when the keys were last found and evaluated.\\n\\nKeys of infected users download once or twice a day.\"},{\"question\":\"Why can't I view the exact time of a risky encounter in eRouška?\",\"answer\":\"eRouška is built on Apple/Google Exposure Notification protocol which manages logging and evaluation of encounters in the operating system. Apple/Google protocol allows eRouška to access only the date of a risky encounter so that the privacy of users is ensured.\"},{\"question\":\"Why do I see \\\"Found keys: 0\\\" in Exposure Checks in the phone Settings?\",\"answer\":\"It means that Apple/Google API in your phone has not evaluated any encounter with an infected individual. In other words, downloaded keys of infected users on a given day do not match keys stored in your device.\"},{\"question\":\"Why do I see keys for specific dates in the phone's Settings > Exposure Checks but eRouška does not display any risky encounters?\",\"answer\":\"The number of keys indicates the number of logged encounters with infected individuals. However, they might not be risky encounters. If an encounter is not risky, eRouška will not notify you about it. That's why you cannot see it in the app.\"},{\"question\":\"I received a notification about a risky encounter that took place several days ago. Why did eRouška only notify me now?\",\"answer\":\"eRouška cannot evaluate risky encounters and display notifications before the user with a positive test sends data from their eRouška. If today you receive a notification that you have encountered an infected individual several days ago, it means that the person only sent their data today or yesterday. Your eRouška downloaded and evaluated the data today.\"},{\"question\":\"I received a notification about a risky encounter, but I can see several logs with various dates on the Risky encounter page.\",\"answer\":\"eRouška evaluated risky encounters after a user who tested positive for COVID-19 sends data from their eRouška. If you received one notification but there are more logs on the Risky encounter page, it means that you have met that person more than once or that more than one user sent their data on the same day.\"},{\"question\":\"Bude eRouška fungovat jako „covid pas“ pro zobrazování výsledků testů a prokázání očkování?\",\"answer\":\"Anonymní charakter aplikace eRouška ji neumožňuje kombinovat s tzv. digitálním zeleným certifikátem (Digital Green Certificate), který pracuje s ověřenou identitou a osobními údaji uživatele – výsledky testů nebo provedeným očkováním proti COVID-19.\"},{\"question\":\"Does eRouška publish app usage statistics?\",\"answer\":\"We publish statistics in JSON format at [stats.erouska.cz](https://stats.erouska.cz). The data have the following structure:\\n\\n{\\\\\\\\n  \\\"data\\\": {\\\\\\\\n    \\\"modified\\\": 1608696001,\\\\\\\\n    \\\"date\\\": \\\"20201223\\\",\\\\\\\\n    \\\"activations\\\\_yesterday\\\": 2042,\\\\\\\\n    \\\"activations\\\\_total\\\": 1475571,\\\\\\\\n    \\\"key\\\\_publishers\\\\_yesterday\\\": 718,\\\\\\\\n    \\\"key\\\\_publishers\\\\_total\\\": 39175,\\\\\\\\n    \\\"notifications\\\\_yesterday\\\": 631,\\\\\\\\n    \\\"notifications\\\\_total\\\": 197298\\\\\\\\n  }\\\\\\\\n}\\n\\n*   **modified** = Unix timestamp of generated statistics,\\n*   **date** = date of report created,\\n*   **activations\\\\_yesterday** = number of activations on the previous day,\\n*   **activations\\\\_total** = total number of eRouška activations,\\n*   **key\\\\_publishers\\\\_yesterday** = number of infected individuals who entered the code on the previous day,\\n*   **key\\\\_publishers\\\\_total** = total number of infected individuals who entered the code,\\n*   **notifications\\\\_yesterday** = number of individuals who received the notification about a risky encounter on the previous day,\\n*   **notifications\\\\_total** = total number of individuals who received the notification about a risky encounter.\\n\\nA call without a parameter will display current day's information. A call with parameter `date` will allow you to get data for any day after October 23, 2020 (we only have aggregated data before then). Using parameter `date` with value `all`, you can get all data that the interface provides.\\n\\n*   today's data: [`https://stats.erouska.cz/`](https://stats.erouska.cz/)\\n*   data from December 1, 2020: [`https://stats.erouska.cz/?date=2020-12-01`](https://stats.erouska.cz/?date=2020-12-01)\\n*   all days' data: [`https://stats.erouska.cz/?date=all`](https://stats.erouska.cz/?date=all)\"}]},{\"title\":\"Data security\",\"subtitle\":\"Personal data and privacy protection\",\"icon\":\"https://erouska.cz/img/faq/security.png\",\"questions\":[{\"question\":\"How do I know which data the application stores and sends?\",\"answer\":\"eRouška application 2.0 uses Apple/Google Exposure Notification API which allows for collecting data and transmitting identifiers among users. Thanks to that, the application does not have a direct access to logged data which could be displayed to users, as it did in the previous version 1.0.\\n\\nThe app downloads a list of identifiers from users who tested positive on a daily basis. Only the user can send data with identifiers to others, and only after they enter the SMS code that they will automatically receive when they test positive for COVID-19.\\n\\nThe app will then send anonymous aggregated statistical information that individuals in risk were notified. This information is not connected to any user or phone identifier and is only used to calculate statistics about eRouška's efficiency.\\n\\nTo make sure eRouška works correctly, we collect data such as crashes and app usage on your phone. We use standard tools (Firebase Crashlytics and Google Analytics) developed by Google. Telemetry sent into these tools does not contain any data about you or your phone.\\n\\nYou can find detailed information about data collection and processing in [Information about personal data processing in eRouška 2.0](https://erouska.cz/en/podminky-pouzivani).\"},{\"question\":\"Will eRouška data be copied after I perform phone recovery or if I get a new phone?\",\"answer\":\"To protect your privacy, neither Android nor iOS back up data from Exposure Notifications. If you reinstall your phone's system or get a new phone, the stored identifiers will not be recovered.\\n\\nIf you want to receive the information about a possible risky encounter, we recommend you check your old phone over the period of 14 days after you install eRouška on your new device. It is necessary to:\\n\\n*   make sure that your device is turned on and connected to the internet so that it can download evaluation data,\\n*   open eRouška on your old device at least once a day.\\n*   If you test positive during these 14 days, please enter your code in the new device. To receive the code for your older device, please contact us at [info@erouska.cz](mailto:info@erouska.cz).\\n\\nAfter 14 days, your old phone will not contain any data useful for risky encounter evaluation. You can uninstall eRouška from it and keep the app only in the new device.\"},{\"question\":\"What if my phone is stolen or I lose it?\",\"answer\":\"Only anonymous information about other devices detected by eRouška is stored in the app. This does not bring any risk to you or the owners of other devices. Other applications that you commonly use may store much more sensitive data on your phone. Keep your phone protected with a passcode or biometrics (fingerprint or face).\"},{\"question\":\"Is eRouška compliant with GDPR?\",\"answer\":\"The entire system of the application eRouška including the website is designed in full compliance with GDPR and the Personal Data Processing Act.\\n\\nYou will find more detailed information here:\\n\\n*   [Information about personal data processing in eRouška 2.0](https://erouska.cz/en/podminky-pouzivani)\\n*   [Application source code audit](https://erouska.cz/en/audit-kod)\"},{\"question\":\"How do you protect users from data abuse?\",\"answer\":\"We protect users primarily by minimizing the range of logged data and storing them directly in the device. User data is not sent or processed anywhere without their knowledge and consent. The app stores only anonymous identifiers (IDs) of other eRouška users and information about the time, length and Bluetooth strength. Data is automatically processed on the server only after they are sent by the user.\"},{\"question\":\"Does an independent organization oversee the security of application data?\",\"answer\":\"The whole system of eRouška application including the supporting website is developed in full compliance with GDPR. The application's code is open-sourced ([Android](https://github.com/covid19cz/erouska-android), [iOS](https://github.com/covid19cz/erouska-ios)) and underwent [an audit by independent education institutions](https://erouska.cz/en/audit-kod).\\n\\nYou can find more information in [Information about personal data processing in eRouška 2.0](https://erouska.cz/en/podminky-pouzivani).\"},{\"question\":\"Can someone track my location using eRouška?\",\"answer\":\"No. The application does not collect information about your location and only you have access to the saved data. The data that the app sends after your consent cannot be used to track your location. Moreover, for safety and privacy reasons, eRouška changes its ID regularly to prevent it from being abused.\"},{\"question\":\"Can I verify that the app is not recording my location?\",\"answer\":\"Yes. eRouška application is published as open-sourced code ([Android](https://github.com/covid19cz/erouska-android), [iOS](https://github.com/covid19cz/erouska-ios)), so an informed person can easily verify that the application indeed does not collect location data.\\n\\nThe source code of eRouška [is reviewed by independent authorities](https://erouska.cz/en/audit-kod) who confirm that the application:\\n\\n*   does not track location\\n*   does not automatically send data\"},{\"question\":\"Can a user's application identifier (ID) be paired with a specific person?\",\"answer\":\"Application eRouška 2.0 [does not work with personal data](https://erouska.cz/en/podminky-pouzivani). Generated anonymous eRouška identifiers are sent between the applications and the server via an encrypted communication protocol developed by Apple and Google. Neither users, nor developers or other authorities can access the identifiers.\"},{\"question\":\"Who has (could have) access to my data?\",\"answer\":\"Neither the user not any other person can access logged data about encounters in eRouška 2.0. The reason for this is that this app version uses Apple/Google protocol which does not allow access to logged data to users, developers or other individuals. Data (anonymous identifiers of infected individuals) are sent to the server and other users' devices encrypted and are evaluated on the devices automatically if a notification about a risky encounter is needed to be displayed. They are deleted from the devices and the server automatically after 14 days.\"},{\"question\":\"How old data is available? When and how is it deleted?\",\"answer\":\"eRouška saves the data for 14 days. Older entries are automatically deleted. If you are tested positive for COVID-19, enter your verification code in eRouška and send identifiers from your phone to the server, the data will stay there for 14 days after which they will be deleted. You can delete data from your phone in Exposure Notification settings. The specific steps differ among devices and operating system versions.\\n\\n*   **Android:** On Android devices, uninstalling the app is enough to delete stored keys (identifiers).\\n\\nFor information about data controllers and processors, see the [Terms and Conditions](https://erouska.cz/en/podminky-pouzivani).\"},{\"question\":\"Can I change my mind about using the app at any time? Can I delete the data that I send out to be processed?\",\"answer\":\"You can uninstall the application any time you want. You can delete stored identifiers from your phone in Exposure Notification settings. The specific steps differ among devices and operating system versions. Data which were sent to the server are automatically deleted after 14 days.\\n\\n*   **Android:** On Android devices, uninstalling the app is enough to delete stored keys (identifiers).\"},{\"question\":\"What happens to the data after I delete the app from my smartphone?\",\"answer\":\"**Android:** Uninstalling the app is enough to delete stored keys (identifiers) from phones or tablets with Android OS.\\n\\nIf you reinstall the application, it will start collecting and storing brand new data in the phone.\"},{\"question\":\"Where can I find the application's source code?\",\"answer\":\"eRouška is published with open-source code. You can find it on GitHub ([Android](https://github.com/covid19cz/erouska-android), [iOS](https://github.com/covid19cz/erouska-ios)).\"}]},{\"title\":\"Installation and compatibility\",\"subtitle\":\"Supported devices and installation options\",\"icon\":\"https://erouska.cz/img/faq/compatibility.png\",\"questions\":[{\"question\":\"For which phones is eRouška available? Why are the requirements stricter than in eRouška 1.0?\",\"answer\":\"To install eRouška, you need a mobile device with the following parameters:\\n\\n*   iPhone with iOS 13.5 and higher\\n*   OS Android 6.0 and higher with Google Play Services (only a small percentage of Huawei phones and some phones with their own ROM do not have this)\\n*   Bluetooth LE (Low Energy)\\n\\nIf your phone is not compatible with eRouška (it does not have the necessary features) Google Play Store or Apple App Store will not let you install it. The application is available only for some Android tablets. It is not available for iPads.\\n\\nApple and Google define the minimum requirements of compatibility. They are based on the Apple/Google Exposure Notification protocol which the new eRouška uses. We decided to start using the Apple/Google protocol to make sure that the app works on iPhones and to be compatible with similar applications in other European countries.\"},{\"question\":\"Where can I safely download and install eRouška?\",\"answer\":\"eRouška is only available for:\\n\\n*   Android: [in Google Play Store](https://play.google.com/store/apps/details?id=cz.covid19cz.erouska).\"},{\"question\":\"Is it possible to download the application outside official application stores? Is an apk available?\",\"answer\":\"eRouška 2.0 uses Apple/Google protocol to log encounters and transmit data. Therefore, it depends on system services, without which it would not work, so it is not possible to install it from other than official app stores. Application stores will automatically filter for compatible devices.\\n\\neRouška developers never provide users with links for installation packages (APKs) or installation files outside official application stores. We would not be able to guarantee security, updates or user support for unofficial app installs. Please, do not download eRouška from .apk files that you find online or receive by email. They might contain viruses, trojan horses or other harmful content.\"},{\"question\":\"Can I use eRouška with another tracing application of a foreign country (e.g. Corona-Warn-App)?\",\"answer\":\"If you spend most of your time in the Czech Republic, we recommend to use eRouška to travel abroad as well. [eRouška now cooperates with other EU countries](https://erouska.cz/en/caste-dotazy#efgs).\\n\\nIn other cases, you can install more tracing apps along eRouška, such as Corona-Warn-App, Stopp Corona App, Imunni, Stop Covid ProteGO Safe etc. However, if they also use Apple/Google Exposure Notification protocol (especially in neighbour countries), only one of them can be active at any given moment. You would need to pause the others. Only one app can access the Apple/Google protocol's logging feature at the same time.\"},{\"question\":\"Funguje eRouška, když mám na mobilu úsporný režim / režim nízké spotřeby / spořič baterie?\",\"answer\":\"**Android:** Spořiče/šetřiče baterie na zařízeních s OS Android mohou do značné míry omezovat běh aplikací na pozadí. Ačkoliv systém oznámení o možném kontaktu s onemocněním COVID-19 nadále funguje, nemusí docházet k vyhodnocování rizikových kontaktů, a tudíž k případnému zobrazení notifikací.\"},{\"question\":\"Will I be able to use eRouška on smart watches or smart wristbands?\",\"answer\":\"This might be possible in the future. Right now, we are not developing this because the smart watch or wristband would need to support Bluetooth LE (Low Energy) and Apple/Google protocol. Basic Bluetooth without LE only manages data transmission but cannot measure the intensity of user encounters via signal strength.\"}]}]</value>\n    </entry>\n    <entry>\n        <key>v2_appleIgnoreAndroid</key>\n        <value>true</value>\n    </entry>\n    <entry>\n        <key>v2_howItWorksUITitle</key>\n        <value>How eRouška works</value>\n    </entry>\n    <entry>\n        <key>v2_validationTokenExpirationLeewayMinutes</key>\n        <value>15</value>\n    </entry>\n    <entry>\n        <key>v2_efgsDays</key>\n        <value>14</value>\n    </entry>\n    <entry>\n        <key>v2_keyExportNonTravellerUrls</key>\n        <value>[{\"country\":\"CZ\",\"url\":\"https://cdn.erouska.cz/erouska/index.txt\"}]</value>\n    </entry>\n    <entry>\n        <key>v2_keyExportEuTravellerUrls</key>\n        <value>[{\"country\":\"CZ\",\"url\":\"https://cdn.erouska.cz/erouska/index.txt\"},{\"country\":\"IT\",\"url\":\"https://cdn.erouska.cz/efgs/it/index.txt\"},{\"country\":\"LV\",\"url\":\"https://cdn.erouska.cz/efgs/lv/index.txt\"}]</value>\n    </entry>\n    <entry>\n        <key>v2_howItWorksEvalContent</key>\n        <value>eRouška apps will evaluate a risky encounter if it was longer than 7 minutes and closer than 2 meters apart, starting with the moment when the individual was supposedly infectious.</value>\n    </entry>\n    <entry>\n        <key>v2_ragnarokHeadline</key>\n        <value>eRouška's contribution to the fight against the pandemic is over</value>\n    </entry>\n    <entry>\n        <key>v2_ragnarokMoreInfo</key>\n        <value>https://erouska.cz/en</value>\n    </entry>\n    <entry>\n        <key>v2_ragnarokBody</key>\n        <value>Thank you for joining more than 1.7 million people. You helped to protect other people by sending out more than 400,000 notifications about possible risk contacts with infected individuals. Exposure notifications will be switched off and your phone will not continue to search for contacts. eRouška is now inactive and will only send you a notification if it is reactivated.</value>\n    </entry>\n    <entry>\n        <key>v2_ragnarok</key>\n        <value>true</value>\n    </entry>\n</defaultsMap>\n"
  },
  {
    "path": "app/src/main/res/xml-cs/remote_config_defaults.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<defaultsMap>\n    <entry>\n        <key>v2_reportTypeWeights</key>\n        <value>1;1;1;1;1;1</value>\n    </entry>\n    <entry>\n        <key>v2_infectiousnessWeights</key>\n        <value>0;0.6;2.0</value>\n    </entry>\n    <entry>\n        <key>v2_attenuationBucketThresholdDb</key>\n        <value>55;70;80</value>\n    </entry>\n    <entry>\n        <key>v2_attenuationBucketWeights</key>\n        <value>2.0;1;0.25;0</value>\n    </entry>\n    <entry>\n        <key>v2_minimumWindowScore</key>\n        <value>420</value>\n    </entry>\n    <entry>\n        <key>v2_covidDataServerUrl</key>\n        <value>https://europe-west1-erouska-key-server-dev.cloudfunctions.net</value>\n    </entry>\n    <entry>\n        <key>v2_minGmsVersionCode</key>\n        <value>203019000</value>\n    </entry>\n    <entry>\n        <key>v2_keyImportDataOutdatedHours</key>\n        <value>99999999</value>\n    </entry>\n    <entry>\n        <key>v2_riskyEncountersTitleAn</key>\n        <value>Naposledy %1$s jste se setkali s osobou, u které bylo potvrzeno onemocnění COVID-19.</value>\n    </entry>\n    <entry>\n        <key>v2_keyImportPeriodHours</key>\n        <value>6</value>\n    </entry>\n    <entry>\n        <key>v2_keyExportUrl</key>\n        <value>https://cdn.erouska.cz/</value>\n    </entry>\n    <entry>\n        <key>v2_recentExposuresUITitle</key>\n        <value>Předchozí riziková setkání</value>\n    </entry>\n    <entry>\n        <key>v2_spreadPreventionUITitle</key>\n        <value>Zásady zodpovědného chování</value>\n    </entry>\n    <entry>\n        <key>v2_symptomsUITitle</key>\n        <value>Hlavní příznaky</value>\n    </entry>\n    <entry>\n        <key>v2_exposureUITitle</key>\n        <value>Rizikové setkání</value>\n    </entry>\n    <entry>\n        <key>v2_chatBotLink</key>\n        <value>https://erouska.cz/caste-dotazy</value>\n    </entry>\n    <entry>\n        <key>v2_noEncounterBody</key>\n        <value>Na rizikové setkání vás upozorníme pomocí oznámení.</value>\n    </entry>\n    <entry>\n        <key>v2_noEncounterHeader</key>\n        <value>V posledních 14 dnech nebyla ve vaší blízkosti žádná osoba s potvrzeným onemocněním COVID-19</value>\n    </entry>\n    <entry>\n        <key>v2_conditionsOfUseUrl</key>\n        <value>https://erouska.cz/podminky-pouzivani</value>\n    </entry>\n    <entry>\n        <key>v2_riskyEncountersWithoutSymptoms</key>\n        <value>Jestliže se u vás neprojevují hlavní příznaky onemocnění COVID-19, nemusíte zůstávat doma. Dodržujte zásady zodpovědného chování a sledujte svůj zdravotní stav.</value>\n    </entry>\n    <entry>\n        <key>v2_riskyEncountersWithSymptoms</key>\n        <value>Pokud se u vás v průběhu 14 dnů od kontaktu s nakaženým objevily příznaky respiračního onemocnění, kontaktujte telefonicky svého praktického lékaře a řiďte se jeho pokyny. V případě závažných zdravotních obtíží volejte 155.</value>\n    </entry>\n    <entry>\n        <key>v2_riskyEncountersTitle</key>\n        <value>Dne %@ jste se setkali s osobou, u které bylo potvrzeno onemocnění COVID-19.</value>\n    </entry>\n    <entry>\n        <key>v2_contactsContentJson</key>\n        <value>[{\"title\":\"Máte podezření na onemocnění COVID-19?\",\"text\":\"Zůstaňte doma a telefonicky kontaktuje svého praktického lékaře.\",\"linkTitle\":\"Důležité kontakty\",\"link\":\"https://koronavirus.mzcr.cz/dulezite-kontakty-odkazy/\"},{\"title\":\"Potřebujete poradit?\",\"text\":\"Odpovědi na veškeré otázky a nejasnosti týkající se onemocnění COVID-19 najdete na webu MZČR.\",\"linkTitle\":\"Často kladené otázky\",\"link\":\"https://koronavirus.mzcr.cz/\"},{\"title\":\"Podpora aplikace\",\"text\":\"Potřebujete poradit s aplikací? Napište nám e-mail.\",\"linkTitle\":\"Napsat e-mail\",\"link\":\"mailto:info@erouska.cz\"},{\"title\":\"O aplikaci eRouška\",\"text\":\"Zajímá vás, jak aplikace funguje? Podívejte se na web erouska.cz.\",\"linkTitle\":\"Přejít na web erouska.cz\",\"link\":\"https://erouska.cz\"}]</value>\n    </entry>\n    <entry>\n        <key>v2_preventionContentJson</key>\n        <value>{\"title\":\"COVID-19 se přenáší hlavně kapénkami, která se šíří vzduchem. Přenášet se může také kontaminovanými předměty.\",\"items\":[{\"iconUrl\":\"https://erouska.cz/img/prevention/ic_clean_hands.png\",\"label\":\"Často a důkladně si myjte ruce mýdlem a používejte dezinfekci.\"},{\"iconUrl\":\"https://erouska.cz/img/prevention/ic_disinfenction.png\",\"label\":\"Pravidelně dezinfikujte také osobní předměty (např. mobilní telefon).\"},{\"iconUrl\":\"https://erouska.cz/img/prevention/ic_tissue.png\",\"label\":\"Kašlejte a kýchejte do jednorázového kapesníku či rukávu.\"},{\"iconUrl\":\"https://erouska.cz/img/prevention/ic_social_distance.png\",\"label\":\"Vyhýbejte se velkým skupinám osob a udržujte bezpečný odstup (cca 2 metry).\"},{\"iconUrl\":\"https://erouska.cz/img/prevention/ic_mask.png\",\"label\":\"Do obchodů a hromadných dopravních prostředků vždy noste ochranu dýchacích cest dle aktuálních opatření.\"},{\"iconUrl\":\"https://erouska.cz/img/prevention/ic_stay_home.png\",\"label\":\"Pokud cítíte příznaky respiračního onemocnění, zůstaňte doma a kontaktujte lékaře.\"}]}</value>\n    </entry>\n    <entry>\n        <key>v2_symptomsContentJson</key>\n        <value>{\"title\":\"Příznaky se mohou objevit 2–14 dní po rizikovém setkání.\",\"items\":[{\"iconUrl\":\"https://erouska.cz/img/symptoms/ic_temperature.png\",\"label\":\"Zvýšená teplota\"},{\"iconUrl\":\"https://erouska.cz/img/symptoms/ic_cough.png\",\"label\":\"Kašel\"},{\"iconUrl\":\"https://erouska.cz/img/symptoms/ic_stuffiness.png\",\"label\":\"Dušnost\"},{\"iconUrl\":\"https://erouska.cz/img/symptoms/ic_throatache.png\",\"label\":\"Bolest v krku\"},{\"iconUrl\":\"https://erouska.cz/img/symptoms/ic_headache.png\",\"label\":\"Bolest hlavy, svalů a kloubů\"},{\"iconUrl\":\"https://erouska.cz/img/symptoms/ic_smelltaste.png\",\"label\":\"Ztráta čichu a chuti\"}]}</value>\n    </entry>\n    <entry>\n        <key>v2_encounterWarning</key>\n        <value>Setkali jste se s osobou, u které bylo potvrzeno onemocnění COVID-19. Sledujte svůj zdravotní stav.</value>\n    </entry>\n    <entry>\n        <key>v2_verificationServerApiKey</key>\n        <value>4AP6RHk5VlNi7WIhj4ZupI9JZODdUyrPGb1C2mDYKo4cuaGIHdYtOhjyoqhg4vB5r7FDijxnySLb_1CUH6XdDA.1.oZLaUuVOPbvEaiWnzkQxasWlD_71iSTeM9aAIOKrfqhg5QO68t004CKxWutYmfISc7vqJe6uY2dRrt34OFkliw</value>\n    </entry>\n    <entry>\n        <key>v2_helpMarkdown</key>\n        <value># Nejčastější problémy\\n## Android: Základní doporučení při řešení problémů s aplikací\\nPokud vám aplikace zobrazuje chybovou hlášku, zkontrolujte prosím nejprve, zda máte nainstalované aktualizace operačního systému ([postup aktualizace Androidu](https://support.google.com/android/answer/7680439)) a nepoužíváte jejich beta verzi.\\n\\nDále prosím zkontrolujte v obchodu [Google Play (Android)](https://play.google.com/store/apps/details?id=cz.covid19cz.erouska), zda není pro eRoušku dostupná nová aktualizace.\\n\\nDoporučujeme rovněž povolit automatické aktualizace aplikace eRouška. [Postup pro Android zde:](https://support.google.com/googleplay/answer/113412#autoone) Spusťte aplikaci Obchod Google Play, klepněte na nabídku Moje aplikace a hry → Vyberte aplikaci, kterou chcete aktualizovat → Klepněte na ikonu možností a klepněte na Aktivovat automatické aktualizace.\\n\\n## Android: Nejde aktivovat eRouška. Chyba aktivace 17 (Exposure Notification API není k dispozici).\\nPro vyřešení chyby na Android zařízení, zkuste prosím postupovat takto:\\n\\n1.  Zkontrolujte, zda jste _hlavní uživatel_ zařízení, zda máte v telefonu služby Play a zda je k dispozici _Nastavení → Google → Oznámení o možném kontaktu (COVID-19 Exposure Notifications)_.\\n2.  Odinstalujte eRoušku.\\n3.  Smažte mezipaměť a data u Google Play Services a Obchodu Play ([postup zde, viz kroky 2 a 3](https://support.google.com/googleplay/answer/9037938)).\\n4.  Nainstalujte eRoušku a zapněte opět _Oznámení o možném kontaktu COVID-19_.\\n\\nPokud se vám i přes aktualizaci systému, aplikace a uvedené kroky nadále objevuje chyba aktivace, je bohužel možné, že vaše zařízení ještě nepodporuje Bluetooth LE (Low Energy Advertising), nepodporuje Bluetooth Multiple Advertisement, není autorizované Googlem pro Exposure Notifications nebo vůbec nemá Exposure Notifications API.\\n\\n# Připojení a přenos dat\\n## Musím mít Bluetooth zapnutý neustále?\\nAno. Bez zapnutého Bluetooth není možné zjišťovat blízkost dalších zařízení s nainstalovanou aplikací eRouška. Tuto funkci máte zapnutou možná i nyní, například v případě, že používáte bezdrátová sluchátka, připojení v autě, chytrý náramek nebo hodinky. V nastavení Bluetooth vašeho telefonu/tabletu navíc doporučujeme povolit, aby byl _viditelný pro všechna zařízení_.\\n\\n## Potřebuje aplikace připojení k internetu?\\nPřipojení k internetu je nutné ke stažení (instalaci) a aktivaci eRoušky. Dále je potřeba, aby si eRouška mohla každý den stahovat aktuální seznam anonymních identifikátorů nakažených uživatelů, a zobrazit tak včas případnou notifikací o rizikovém setkání.\\n\\nPokud by u vás test potvrdil nákazu COVID-19 a vy byste chtěli anonymně upozornit ostatní na možný rizikový kontakt, bylo by opět potřeba eRoušku připojit k internetu. Do té doby jsou vaše data uložena pouze ve vašem telefonu, odkud se sama odmazávají po 14 dnech. Aplikace využívá připojení k internetu rovněž ke stažení informací o aktuálním vývoji epidemie COVID-19 v ČR, které zobrazuje na stránce _Aktuálně_.\\n\\n## Jak často si aplikace aktualizuje data z internetu?\\nKlíče (identifikátory) nakažených uživatelů si eRouška stahuje několikrát denně. Statistiky nakažených osob na obrazovce Aktuálně se aktualizují jednou denně.\\n\\n## Jak velký objem mobilních dat eRouška denně spotřebuje?\\nV případě zapnutého _Upozornění na zahraniční riziková setkání_ eRouška stahuje také klíče všech nakažených uživatelů z ostatních států EU. Objem stažených dat se v takovém případě může pohybovat až kolem 2 MB denně.\\n\\nI v případě vypnutého _Upozornění na zahraniční riziková setkání_ eRouška stahuje přibližně 1 MB denně. Nová verze aplikace stahuje nejen klíče nakažených uživatelů eRoušky, ale i klíče nakažených uživatelů z ostatních států EU, kteří ve svých aplikacích uvedli, že cestují do zahraničí, takže je uživatel eRoušky potenciálně mohl potkat i v České republice\\n\\nSoubory klíčů nakažených uživatelů se stahují postupně, 2–3× denně. Pro porovnání, načtení průměrné stránky zpravodajství vyžaduje 1–5 MB dat. **Aplikace nepotřebuje nutně mobilní datové připojení.** Data si stáhne sama i na Wi-Fi.\\n\\n## Android: Proč je potřeba mít povolený přístup k GPS/polohovým/lokačním údajům?\\n**Aktualizace pro uživatele Android 11:** U nejnovější verze operačního systému Android již nemusíte pro fungování eRoušky povolovat služby určování polohy.\\n\\nAplikace eRouška nesbírá a neukládá data z GPS, avšak operační systém **Android 10 a starší** zahrnuje pod určování polohy také některé služby Bluetooth LE (LE = low energy), který komponenty eRoušky – konkrétně Google Play Services – pro své fungování vyžadují. Proto je nutný souhlas uživatele s přístupem aplikace k polohovým údajům. V iOS tento souhlas nutný není. Proč v telefonu musí být zapnuté určování polohy, [vysvětluje Google zde](https://support.google.com/android/answer/9930236).\\n\\nInformaci o vaší poloze mohou využívat i jiné aplikace ve vašem zařízení. Pokud chcete zkontrolovat, které aplikace k nim mají přístup, přejděte do nastavení zařízení a vyberte položky Zabezpečení a poloha → Umístění → Oprávnění na úrovni aplikace (případně následujte [postup od společnosti Google](https://support.google.com/accounts/answer/6179507?hl=cs)). Zde můžete jiným aplikacím odepřít oprávnění používat vaši polohu, pokud si nemyslíte, že to potřebují. Protože eRouška toto oprávnění nepotřebuje, nezobrazí se v seznamu.\\n\\n## Kolik zapnutý Bluetooth a aplikace eRouška spotřebují baterie?\\nJestliže již nyní používáte telefon se stále zapnutým Bluetooth, spotřeba energie by se neměla výrazněji zvýšit. Pokud Bluetooth nyní běžně nepoužíváte, tak podle výsledků našeho testování s neustále zapnutým Bluetooth a ukládáním dat do aplikace bylo navýšení denní spotřeby energie v řádu jednotek procent. Ve většině případů to je méně než 20 % kapacity baterie za den. Záleží přitom na konkrétním chytrém telefonu, jeho stáří, stylu jeho používání a stavu baterie.\\n\\nSpotřebu baterie spojenou s použitím aplikace eRouška je ovlivňují dva faktory. Zaprvé samotným během aplikace a zadruhé využitím systémové funkce Oznámení o kontaktech s nákazou, která průběžně zaznamenává setkání s uživateli v okolí. Systémovou funkci zajišťuje OS Android nebo iOS, proto její optimalizace záleží na aktualizacích ze strany společností Apple a Google.\\n\\nPři interpretaci spotřeby baterie ze statistik v nastavení telefonu berte prosím v potaz, že toto procento odpovídá plnému využití vašeho telefonu za posledních 24 hodin (procentuální podíl běhu mezi ostatními aplikacemi). To znamená, že u málo využívaného telefonu může být procento u Kontaktů s nákazou/aplikace eRouška vysoké, u intenzivně využívaných telefonů naopak nízké. Nejde tedy přímo o procento spotřeby baterie.\\n\\n**Android: Poznámka k povolení polohových služeb:** Bluetooth zařízení ve vaší blízkosti lze detekovat, pouze pokud je v telefonu aktivována možnost „Použít polohu“. (Podrobnosti najdete v odstavci [Proč v telefonu musí být zapnuté určování polohy? na webu Googlu](https://support.google.com/android/answer/9930236?hl=cs).) To znamená, že informaci o vaší poloze mohou využívat i jiné aplikace ve vašem zařízení, což může být důvodem vyšší spotřeby baterie. Proto prosím zkontrolujte, které aplikace používají vaši polohu. Přejděte do nastavení zařízení a vyberte položky Zabezpečení a poloha → Umístění → Oprávnění na úrovni aplikace (případně následujte [postup od společnosti Google](https://support.google.com/accounts/answer/6179507?hl=cs)). Zde můžete jiným aplikacím odepřít oprávnění používat vaši polohu, pokud si nemyslíte, že to potřebují. Protože eRouška toto oprávnění nepotřebuje, nezobrazí se v seznamu.\\n\\n## Je možné, že se mi po zapnutí eRoušky zpomalilo Wi-Fi / připojení k internetu?\\nU některých modelů mobilů s OS Android je bohužel známé, že vysílání Bluetooth může částečně negativně ovlivňovat signál Wi-Fi a naopak.\\n\\n## Může eRouška způsobovat problémy s dalšími aplikacemi nebo zařízeními/periferiemi (sluchátka, hodinky, náramek), které používají Bluetooth?\\nVe výjimečných případech nám někteří uživatelé hlásí nestandardní chování jejich Bluetooth periferií poté, co nainstalovali aplikaci eRouška. Např. může docházet k přerušování spojení – typicky u chytrých hodinek či náramků, bezdrátových sluchátek nebo handsfree sad. S největší pravděpodobností jde o problém funkcí operačního systému, na které bohužel nemáme vliv.\\n\\nZkuste prosím následný postup:\\n\\n1.  Restartujte telefon.\\n2.  Zrušte spárování s Bluetooth zařízením a znovu jej připojte.\\n\\nPokud kroky výše nepomohou, kontaktujte prosím výrobce zařízení:\\n\\n*   Android: [Podpora výrobců zařízení](https://support.google.com/android/answer/3094742?hl=cs&amp;ref_topic=7313011)\\n\\n## Proč aplikace používá zrovna Bluetooth? Neexistují lepší řešení jako GPS nebo triangulace od operátorů?\\nSoukromí uživatelů je pro nás na prvním místě, a právě technologie Bluetooth nabízí nejvyváženější poměr přesnosti záznamu a minimálního zásahu do soukromí. Technologie GPS ani triangulace vysílačů od operátorů nemohou poskytnout potřebné údaje s požadovanou přesností. Mimo jiné i proto, že jejich funkčnost je ve vnitřních prostorách či metru velmi omezená. Aplikace eRouška potřebuje pro svoji funkci informace o tom, že došlo k setkání, na jakou vzdálenost a po jakou dobu. Není důležité, kde k setkání došlo.\\n\\n## Je Bluetooth dostatečně bezpečná technologie?\\nBluetooth je dnes běžně rozšířená a podporovaná komunikační technologie pro propojení zařízení s dalšími periferiemi, jako jsou bezdrátová sluchátka, reproduktory, chytré náramky nebo hodinky. Vzhledem k tomu, že společnosti Apple a Google vytvořily společný protokol určený výhradně pro národní aplikace, které trasují riziková setkání s nakaženými COVID-19 na základě Bluetooth LE, jsme přesvědčení, že jsme pro eRoušku zvolili správně. Je však potřeba říct, že úplně každá technologie je zranitelná. I proto všem uživatelům doporučujeme, aby operační systém a aplikace ve svém telefonu pravidelně aktualizovali. Aktualizace totiž mohou obsahovat důležité bezpečnostní záplaty.\\n\\n# Obecné informace\\n## Jak mám postupovat, když mi aplikace zobrazila upozornění na rizikové setkání s nakaženým uživatelem?\\nPokud máte příznaky nákazy (například zvýšenou teplotu, kašel, dušnost, bolest v krku, bolest hlavy, náhlou ztrátu čichu a chuti), telefonicky kontaktujte svého praktického lékaře. V případě, že je váš stav opravdu akutní, volejte rychlou záchrannou službu 155, případě linku integrovaného záchranného systému 112. Uvedené příznaky se mohou objevit 2 až 14 dní po rizikovém setkání.\\n\\nPokud nemáte žádné příznaky, chovejte se prosím zodpovědně:\\n\\n*   Noste roušku či respirátor přes ústa a nos.\\n*   Často a důkladně si myjte ruce vodou a mýdlem či používejte dezinfekci.\\n*   Pravidelně dezinfikujte vlastní předměty (např. mobilní telefon).\\n*   Kašlejte a kýchejte do kapesníku či rukávu.\\n*   Používejte jednorázové kapesníky a poté je vyhoďte.\\n*   Vyhýbejte se zbytečnému shromažďování a dodržujte bezpečný odstup od ostatních (přibližně 2 metry).\\n\\nPokud po notifikaci eRoušky máte vážné podezření na rizikové setkání, kontaktujte svého praktického lékaře a řiďte se jeho pokyny. Je také možné, že vás bude v blízké době kontaktovat pracovník hygienické služby na základě epidemiologického šetření s konkrétním nakaženým. V takovém případě postupujte podle pokynů hygienické služby.\\n\\nPokud by se v průběhu 14 dní od rizikového setkání váš zdravotní stav zhoršil a objevily se u vás příznaky onemocnění COVID-19, kontaktujte svého praktického lékaře.\\n\\n## Jak mám postupovat, když mám pozitivní výsledek testu na COVID-19 nebo mi přišla SMS eRoušky s ověřovacím kódem?\\nJestliže vám přišla SMS z laboratoře s pozitivním výsledkem testu na COVID-19, měla by vám do několika hodin přijít také SMS eRoušky s ověřovacím kódem pro odeslání dat. SMS eRoušky se odesílají automatizovaně po zapsání výsledku testů do informačního systému. Okamžik, kdy laboratoř předá výsledky do informačního systému, nedokážou automatizované procesy Chytré karantény ovlivnit.\\n\\nJakmile vám přijde SMS eRoušky s ověřovacím kódem, [postupujte prosím podle tohoto návodu](https://erouska.cz/sms). Uvedený postup vám umožní anonymně informovat ostatní uživatele o případném rizikovém setkání. Děkujeme.\\n\\nMáte pozitivní test a nepřišla vám SMS eRoušky? Napište si o nový kód na [info@erouska.cz](mailto:info@erouska.cz?subject=).\\n\\n## To budu muset pokaždé automaticky do karantény nebo na testy, když aplikace zahlásí, že jsem byl v kontaktu s někým nakaženým?\\nNe, aplikace eRouška je plně anonymní, její použití je zcela dobrovolné a upozornění na možný rizikový kontakt s nakaženým není důvod pro nařízení karantény. Pokud u někoho test potvrdí nákazu, kontaktuje ho hygienická stanice, aby zjistila, s kým byl v posledních dnech v rizikovém kontaktu, a mohla tak omezit další šíření. Když tento člověk používá aplikaci eRouška, může kontaktovat i ty, které nezná, protože s nimi třeba cestoval v autobuse. Zadáním unikátního kódu může poslat upozornění všem ostatním uživatelům aplikace eRouška, se kterým byl v epidemiologicky rizikovém kontaktu.\\n\\nV okamžiku, kdy vás aplikace upozorní, že jste se setkali s osobou, u které bylo prokázané onemocnění COVID-19, byste měli postupovat podle zobrazených doporučení a v případě zdravotních potíží bez prodlení kontaktovat svého praktického lékaře.\\n\\n## Pozná eRouška, když poruším lékařem nařízenou karanténu nebo třeba pojedu na chatu?\\nAplikace nesleduje vaši polohu, není to její účel a ani pro to není navržena. Nepozná tedy, zda jste porušili karanténní opatření nebo kam jste odjeli. Má naopak pomoci k tomu, aby v karanténě byly pouze osoby s diagnostikovaným onemocněním nebo s vážným podezřením nákazy.\\n\\n## Může mi eRouška místo lékaře vystavit neschopenku? Je upozornění na možné rizikové setkání důvod pro pracovní neschopnost?\\nNemůže, není. Pokud vám eRouška zobrazila varování, postupujte podle zobrazených doporučení. Upozornění na možný rizikový kontakt nijak nenahrazuje zprávu od vašeho lékaře nebo laboratoře, která vyhodnotí váš test na COVID-19. Pouze lékař vám může vystavit platné dokumenty, které předložíte svému zaměstnavateli.\\n\\n## Proč je eRouška potřeba? Dokáže mě vůbec efektivně chránit před nákazou?\\nJedním z úkolů eRoušky je zastavit další šíření nákazy tím, že pomáhá co nejdříve izolovat potenciálně nakažené osoby od ostatních. To také pomáhá předcházet nutnosti zavádět plošná opatření, která mají negativní dopad na společnost a ekonomiku ČR. Aplikace na podobném principu fungují i v dalších státech a jsou účinným prostředkem v boji proti šíření nemoci COVID-19.\\n\\nAplikace eRouška 2.0 je doplňkovou aplikací Chytré karantény – systému ministerstva zdravotnictví. Prostřednictvím technologie Bluetooth se eRouška spojuje s dalšími eRouškami v nejbližším okolí a ukládá jejich anonymní identifikátory. Pokud test u člověka prokáže nákazu COVID-19, přijde mu automaticky ověřovací SMS kód, který mu umožní z aplikace odeslat své anonymní identifikátory do ostatních eRoušek. Aplikace ostatních uživatelů pak podle epidemiologického modelu\\* co nejpřesněji vyhodnotí, jestli tito uživatelé přišli s nakaženým do kontaktu dost blízko a na dostatečně dlouhou dobu, aby bylo nutné je prostřednictvím notifikace v mobilu varovat a směřovat k dalšímu vyšetření. eRouška 2.0 tedy pomáhá co nejefektivněji informovat další potenciální přenašeče viru a urychlit jejich testování. Tím se sníží počet infikovaných ve společnosti i riziko další infekce.\\n\\n_\\* Blíže než 2 metry po dobu delší než 7 minut._\\n\\n## Co když někdo nepřizná, že je nemocný?\\nI to se může stát. Věříme však, že uživatelé eRoušky chtějí aktivně pomáhat se zastavením dalšího šíření nákazy a aplikaci využijí, aby mohli co nejdříve varovat osoby, se kterými přišli do rizikového kontaktu. **Záměrné šíření COVID-19 je v ČR považováno za trestný čin.**\\n\\n## Má smysl si eRoušku instalovat, když ji nebude používat dost lidí?\\nPrávě proto byste neměli váhat. Čím více nás bude eRoušku používat, tím lepší vytvoříme síť, která nás bude vzájemně chránit a varovat před rizikem. Pomozte nám i vy. Instalací aplikace se můžete aktivně zapojit do boje proti COVID-19. O aplikaci můžete říct i lidem ve svém okolí, případně jim s jejich souhlasem pomoci s instalací.\\n\\n## Jak se eRouška liší od jiných podobných aplikací?\\neRouška používá technologii Bluetooth, kterou je vybavená většina chytrých mobilních zařízení v Česku. Díky tomu funguje i v budovách, podzemních parkovištích nebo v metru. Aplikace je navržená tak, aby nesbírala informace o vaší poloze (např. přes GPS). Pouze anonymně zjišťuje, se kterými dalšími uživateli aplikace jste přišli do bližšího kontaktu. Jako jediná v ČR může oficiálně používat Apple/Google protokol, který garantuje bezpečnost aplikace na platformách Android a iOS a snižuje spotřebu baterie.\\n\\n## Co je to chytrá karanténa? Jakou v ní hraje roli eRouška?\\nJde o soubor chytrých opatření, která chrání lidi před nákazou a ekonomiku před kolapsem. Místo toho, aby byla v karanténě celá země, chytrá karanténa usnadňuje dohledávání, testování a izolaci pouze nemocných a z nemoci důvodně podezřelých lidí.\\n\\nKonkrétně jde o systém řízení v oblastech předpovědi vývoje, podpory rozhodování, aktivního vyhledávání kontaktů, testování vč. řízení kapacit odběrových míst, laboratoří, řízení karantén a souvisejícího materiálního a IT zabezpečení ke zvládnutí pandemie onemocnění COVID-19. Chytrá karanténa 2.0 je označením pro přechod projektu pod Ministerstvo zdravotnictví, které bude díky novým nástrojům umět do budoucna kdykoliv velmi rychle reagovat na jakékoliv epidemie.\\n\\nAplikace eRouška je jeden z nástrojů, které vznikly na podporu chytré karantény. Pomocí technologií – eRoušky – můžeme aktivně upozornit rizikové jedince, kteří se setkali s nakaženým, aby zvýšili hygienická opatření, zvážili dobrovolnou karanténu, případně při pociťování příznaků kontaktovali obvodního lékaře. Díky těmto krokům věříme, že se podaří zmírnit šíření nákazy a ušetřit zdravotnictví fatálního přetížení.\\n\\n# Pokročilé informace o eRoušce\\n## Jak eRouška zaznamenává a zpracovává data o setkáních uživatelů?\\nChytrý telefon s aplikací eRouška zaznamenává přes Bluetooth LE anonymní identifikátory (ID) z jiných zařízení s touto aplikací. Informaci o „setkání“ a jeho délce ukládá do své vnitřní paměti.\\n\\nV případě, že budete mít pozitivní výsledek testu na COVID-19, přijde vám jednorázový SMS kód. Zadáte jej do aplikace ([postup zde](https://erouska.cz/sms)), a tím umožníte odeslání svých anonymních identifikátorů na server, odkud si je stáhnou ostatní eRoušky k vyhodnocení. Algoritmus v aplikaci každého uživatele na základě epidemiologického modelu automatizovaně vyhodnotí sesbíraná data – porovná identifikátory se všemi zaznamenanými setkáními. V případě rizikového kontaktu zobrazí upozornění, že hrozí nákaza kvůli setkání s pozitivně testovanou osobou, a doporučí další postup.\\n\\nPodrobné informace o sběru a zpracování dat naleznete v [Informacích o zpracování osobních údajů v aplikaci eRouška 2.0](https://erouska.cz/podminky-pouzivani).\\n\\n## Jak eRouška vyhodnocuje rizikové setkání?\\nPůvodně epidemiologové stanovili jako rizikový kontakt jako setkání, které je ve vzdálenosti bližší než 2 metry po dobu alespoň 15 minut. Agresivnější šíření nových mutací koronaviru však ukazuje, že k nákaze stačí i kratší kontakt.\\n\\nNa vyšší agresivitu šíření mutací reagujeme po konzultacích postupu s Apple/Google a ostatními zeměmi EU postupným uvolňováním parametrů vyhodnocení rizikového kontaktu. Změny parametrů probíhají už od začátku března, průběžně vyhodnocujeme jejich vliv na počet nalezených kontaktů. Prozatím upravujeme zejména parametry odpovídající délce setkání, aktuálně jde přibližně o 7 minut.\\n\\nAplikace eRouška se snaží parametry vzdálenosti a času setkání vyhodnocovat co nejpřesněji dostupnými technologiemi. Vzdálenost mezi uživateli, respektive jejich telefony, se odhaduje na základě síly signálu Bluetooth. Doba setkání se posuzuje podle měřicích oken – telefon v několikaminutových intervalech zjišťuje, zda jsou v okolí jiné telefony s eRouškou.\\n\\nPřesnost měření výše uvedených parametrů má proto technická omezení. Čím větší vzdálenost a čím kratší kontakt, tím obtížnější je jeho přesné vyhodnocení. Uvolňování parametrů vyhodnocení tak zvyšuje pravděpodobnost falešných pozitivit a falešných negativit.\\n\\nVyšší přesnosti měření lze dosáhnout častějším vysíláním a zaznamenáváním dalších zařízení s eRouškou v okolí. To se bohužel promítne do vyšší spotřeby baterie. Algoritmy měření nastavují Apple a Google ve svém Exposure Notification protokolu, na kterém je eRouška postavená. Vývojáři eRoušky mohou pouze částečně upravovat některé parametry a provádět doplňující filtrování výsledků. Bližší vysvětlení najdete v sekci [Způsob vyhodnocení](https://erouska.cz/vyhodnoceni-rizika).\\n\\n## Jak eRouška reaguje na nové varianty/mutace viru?\\nNové varianty virů, které se objevily od počátku pandemie, průběžně zkoumají odborníci z pohledu infekčnosti a dopadů na zdraví. Proto jsou vývojáři eRoušky v úzkém kontaktu s úřady i se společnostmi Apple a Google, které poskytují protokol pro vyhodnocování kontaktů s nákazou, aby v případě změny rizika infekce na základě nových poznatků mohli upravit algoritmus pro výpočet v aplikaci.\\n\\n## Nemůže se stát, že eRouška mylně vyhodnotí kontakt s jinou osobou, která je například vedle v autě na křižovatce, za dveřmi nebo tenkou zdí?\\nAplikace eRouška funguje na principu měření síly signálu mezi dvěma zařízeními. Technicky proto nelze vyloučit nepřesný odhad vzdálenosti a mylnou detekci rizikového setkání. Technická omezení, rizika používání aplikace a postup vyhodnocování setkání popisujeme na stránce [Spolehlivost vyhodnocení rizikového kontaktu](https://erouska.cz/vyhodnoceni-rizika) a v sekci [Technické podmínky v Podmínkách zpracování](https://erouska.cz/podminky-pouzivani#technicke).\\n\\nPro vyhodnocení kontaktu jako rizikového je kromě vzdálenosti (do 2 m) relevantní též délka kontaktu (v řádu minut) – např. zastavení na semaforech na 1–2 minuty je tedy nevýznamné.\\n\\n## Zobrazilo se mi upozornění na možné setkání s nakaženým, ale eRouška po otevření ukazuje, že nezaznamenala nikoho nakaženého v mém okolí.\\nPokud vás překvapilo oznámení s červenou ikonkou viru a textem Oznámení o možném kontaktu (Android) nebo Zaznamenání kontaktů (iOS), nemusíte se obávat. Jde pouze o systémové oznámení Androidu a iOS, na které nemá eRouška vliv. Jak vypadá skutečné oznámení eRoušky najdete [na tomto obrázku](https://www.facebook.com/eRouska/posts/180938253548928).\\n\\nPokud byste měli rizikový kontakt s nakaženou osobou, zjistíte to přímo na hlavní obrazovce eRoušky.\\n\\nPokud jste předtím skutečně viděli rizikové setkání přímo v eRoušce, odkud zmizelo, je možné, že aktualizací aplikace pro Android došlo k úpravě parametrů vyhodnocení rizikového kontaktu a nyní už eRouška nepovažuje dané setkání za rizikové.\\n\\n## Takže všichni budou vědět, že mám COVID-19?\\nNebudou. Pokud onemocníte, vaše totožnost je známá jen a pouze pracovníkovi hygienické stanice. Osoby, kterým se zobrazí upozornění na možný rizikový kontakt, se nedozví, kdo ani kde je mohl nakazit. Aplikace zobrazuje pouze obecnou informaci o rizikovém setkání s nakaženým, den setkání a další doporučený postup. Vaše identita je ochráněna.\\n\\n## Byl jsem na testech na COVID-19, ale stále mi nepřišla SMS s ověřovacím kódem do eRoušky. Za jak dlouho ji mám čekat?\\nNejprve by vám měl přijít výsledek testu v SMS od testovací laboratoře. Ta výsledky současně odesílá do centrálního informačního systému Ministerstva zdravotnictví. Poté, co se informace z informačního systému propíšou do systému hygieny, se odesílají automatické SMS eRoušky s ověřovacími kódy. Pokud laboratoř nestihne předat výsledky do informačního systému ve stejný den, může vám SMS s ověřovacím kódem přijít až následující den.\\n\\n**Zkontrolujte prosím, jestli info SMS eRoušky nezablokoval omylem systém jako spam**\\n\\n*   **Android:** V aplikaci Zprávy klepněte na ikonu možností (tři tečky) a dále na Spam a zablokované konverzace (případně na tři tečky → Nastavení → SIM → Spam). Pokud je zde SMS eRoušky, klepněte na Není spam.\\n\\n**Pokud vám SMS eRoušky nepřišla ani následující den** poté, co vám přišla SMS s pozitivními výsledky z laboratoře, pošlete nám na [info@erouska.cz](mailto:info@erouska.cz?subject=) žádost o nový SMS kód. Uveďte prosím tyto informace:\\n\\n*   celé jméno, které jste uvedli na žádance o test,\\n*   tel. číslo, které jste uvedli na žádance o test,\\n*   datum výsledku testů,\\n*   odběrové místo / laboratoř, ze které vám přišly výsledky testu,\\n*   typ testu (PCR/antigen).\\n\\n## Přijde mi SMS s kódem do eRoušky, když mám pozitivní antigenní test na COVID-19?\\nPokud máte [pozitivní výsledek antigenního testu a máte příznaky COVID-19](https://drive.google.com/file/d/1HPwtltNRuzmowjZgE_c1u-a8m3W89T-p/view) (uvádíte v žádance), přijde vám SMS s kódem do eRoušky stejně jako v případě pozitivního PCR testu.\\n\\nV případě, že máte [pozitivní výsledek antigenního testu, ale nepociťujete příznaky](https://covid.gov.cz/situace/antigenni-testovani/interpretace-vysledku-antigenniho-testu-jak-se-zachovat-po-obdrzeni), půjdete na PCR test. Na základě pozitivního výsledku PCR testu by vám přišla SMS s kódem do eRoušky. V případě negativního PCR testu neodesíláte data z eRoušky.\\n\\n## Ve kterých státech EU můžu eRoušku používat? Jak funguje spolupráce se zahraničními aplikacemi?\\nEvropská komise vyvinula centrální bránu EFGS pro bezpečnou výměnu informací („brána pro zajištění interoperability“). Tato brána umožňuje aplikaci eRouška přijímat a předávat si varování se zapojenými trasovacími aplikacemi používanými v jednotlivých státech EU. Podrobné informace o bráně jsou k dispozici na webu Evropské komise v dokumentu [Koronavirus: brána EU k zajištění interoperability aplikací pro vysledování kontaktů a varování – otázky a odpovědi](https://ec.europa.eu/commission/presscorner/detail/cs/qanda_20_1905#gateway).\\n\\nChcete-li zobrazit další informace o zapojených státech a nastavení, klepněte na hlavní obrazovce aplikace na Cesty do zahraničí, kde můžete funkci zapnout/vypnout a níže vidět seznam zapojených států. Oficiální aktuální seznam zapojených států EU najdete [na webu Evropské komise.](https://ec.europa.eu/health/sites/health/files/ehealth/docs/gateway_jointcontrollers_en.pdf)\\n\\n## Používá eRouška Apple/Google API?\\nNová verze – eRouška 2.0 pro Android i iOS již používá Apple/Google Exposure Notification API. Nezapomeňte proto prosím aplikaci eRouška aktualizovat v [Google Play (Android)](https://play.google.com/store/apps/details?id=cz.covid19cz.erouska) nebo [App Store (iOS)](https://apps.apple.com/cz/app/erou%C5%A1ka/id1509210215) a znovu aktivovat.\\n\\n## Co je to Apple/Google Exposure Notification API (protokol)?\\nSpolečnosti Apple a Google společně vyvíjejí technologie, díky kterým mohou veřejné zdravotní instituce (u nás MZČR) vyvíjet národní aplikace pro trasování rizikových kontaktů s osobami s onemocněním COVID-19.\\n\\nKonkrétně jde například o rozhraní, které daným aplikacím (u nás eRouška) umožňuje spolehlivě přistupovat k systémovým prostředkům Android a Apple zařízení za účelem zaznamenání setkání – zejména využívat Bluetooth LE pro ověření kontaktu a běžet na pozadí bez potřeby dalších nastavení aplikace nebo operačního systému. Šifrovaný komunikační protokol pak zajišťuje zabezpečený přenos aktuálních seznamů identifikátorů nakažených uživatelů mezi trasovacími aplikacemi za účelem vyhodnocení rizikových setkání a včasného zobrazení notifikace.\\n\\nBližší informace naleznete přímo na webových stránkách společností [Apple (anglicky)](https://www.apple.com/covid19/contacttracing) a [Google (česky)](https://www.google.com/covid19/exposurenotifications/).\\n\\n## Kde v eRoušce najdu informace o zaznamenaných setkáních?\\nAplikace eRouška 2.0 je postavená na Apple/Google Exposure Notification protokolu, který zajišťuje zabezpečené zaznamenávání a vyhodnocení setkání. Z bezpečnostních důvodů však neposkytuje aplikaci přímý přístup k datům o zaznamenaných setkáních.\\n\\nZda aplikace funguje správně, se dozvíte na její hlavní obrazovce. Informace o všech zaznamenaných setkáních s nakaženými uživateli jsou uložená na úrovni systému. Tato setkání však nemusela být riziková. Naleznete je v Nastavení:\\n\\n*   Android: Nastavení → Google → Oznámení o možném kontaktu COVID-19 → klepnout na tři tečky vpravo nahoře → Kontrola kontaktu\\n\\n## Co znamenají jednotlivé záznamy v Nastavení → Kontrola kontaktů?\\nProtokolování kontaktů s nákazou ukazuje, kolik klíčů od nakažených uživatelů se stáhlo do vašeho telefonu ze serveru a kolik z nich odpovídá klíčům, které váš telefon zaznamenal.\\n\\n**Kontroly kontaktů:** Zde jsou data a časy jednotlivých stažení klíčů ze serveru za poslední dva týdny. Pro další kontrolu je potřeba otevřít jednotlivé záznamy.\\n\\n**Android: Počet klíčů:** Jde o počet klíčů od pozitivně testovaných uživatelů. Tyto klíče si váš v telefon v daném datu stáhl pro kontrolu možných kontaktů s nakaženými uživateli.\\n\\n**Android: Počet výsledků:** Jde o počet shod mezi staženými klíči a těmi, které zaznamenal váš telefon ve svém okolí. Pokud je číslo vyšší než 0, tak jste se setkali s nakaženým uživatelem. To však ještě neznamená, že nutně muselo jít o rizikové setkání.\\n\\n**Časová značka:** Datum a čas, kdy ke kontrole došlo. Nejde však o čas rizikového setkání (ten není k dispozici kvůli ochraně soukromí uživatelů).\\n\\n**Zdroj dat:** Aplikace, která zajišťuje kontrolu a vyhodnocení rizikových setkání.\\n\\n**Hašovací kód:** Kontrolní součet souboru obsahujícího stažení klíče nakažených uživatelů. Dokud se obsah souboru nezmění, tak se nezmění ani kontrolní součet během příslušného dvoutýdenního období.\\n\\n## Jak zjistím, že eRouška funguje na pozadí? Proč na Androidu nevidím ikonku eRoušky v záhlaví?\\nNotifikační ikonu jsme odstranili, protože zaznamenávání a vyhodnocování setkání již zajišťuje přímo Apple/Google protokol na úrovni operačního systému. Samotná aplikace eRouška se pak stará o stahování klíčů (identifikátorů) nakažených uživatelů 1–2× denně a nemusí běžet permanentně na pozadí.\\n\\nŽe je aplikace aktuální, zjistíte na její hlavní obrazovce. Stahování klíčů nakažených pak můžete ověřit v Nastavení telefonu:\\n\\n*   **Android:** Nastavení → Google → Oznámení o možném kontaktu COVID-19 → klepnout na tři tečky vpravo nahoře → Kontrola kontaktu\\n\\n## Proč se liší datum a čas „Poslední aktualizace dat“ na hlavní obrazovce eRoušky a data a časy „Kontroly kontaktů“, které vidím v Nastavení telefonu?\\nAplikace eRouška ukazuje na hlavní obrazovce datum a čas posledního úspěšného pokusu o kontrolu nových klíčů (identifikátorů) nakažených uživatelů na serveru. V Nastavení telefonu se zobrazují pouze data a časy, kdy byly naposledy nové klíče nalezeny a vyhodnoceny v telefonu.\\n\\nKlíče nakažených uživatelů se do telefonu stahují 1–2× denně.\\n\\n## Proč v eRoušce nevidím konkrétní čas rizikového setkání?\\nAplikace eRouška je postavená na Apple/Google Exposure Notification protokolu, který zajišťuje zaznamenávání a vyhodnocování setkání na úrovni operačního systému. Apple/Google protokol poskytuje eRoušce přístup pouze k datu rizikového setkání, bližší informace nejsou k dispozici z důvodu co nejvyšší ochrany soukromí uživatelů.\\n\\n## Proč v Kontrole kontaktů v Nastavení telefonu vidím „Nalezené klíče: 0“?\\nZnamená to, že Apple/Google API ve vašem telefonu nevyhodnotilo v daném datu žádné setkání s nakaženým uživatelem. Jinak řečeno stažené klíče nakažených uživatelů se v daném dni neshodují s žádným ze zaznamenaných klíčů ve vašem zařízení.\\n\\n## Proč v Nastavení telefonu v sekci Kontrola kontaktu vidím u konkrétního data nalezené klíče, ale eRouška mi nezobrazuje žádná riziková setkání?\\nPočet nalezených klíčů představuje počet zaznamenaných setkání s nakaženými uživateli. Neznamená to však nutně, že tato setkání byla riziková. Pokud setkání s nakaženým uživatelem nebylo rizikové, tak na něj eRouška neupozorňuje. Proto v aplikaci není vidět.\\n\\n## Zobrazilo se mi upozornění/notifikace na rizikové setkání, ke kterému došlo před několika dny. Proč mě eRouška upozornila až teď?\\nAplikace eRouška nemůže vyhodnotit riziková setkání a zobrazit upozornění dříve, než uživatel s pozitivním testem na COVID-19 odešle data ze své eRoušky. Pokud se vám dnes zobrazila notifikace, která upozorňuje na rizikové setkání s nakaženým před několika dny, znamená to, že nakažený odeslal data ze své eRoušky až dnes, nejpozději včera. Vaše eRouška si je dnes stáhla a vyhodnotila.\\n\\n## Zobrazilo se mi upozornění/notifikace na rizikové setkání s nakaženým, ale na obrazovce Rizikové setkání vidím více záznamů s různými daty.\\nAplikace eRouška vyhodnocuje riziková setkání až poté, co uživatel s pozitivním testem na COVID-19 odešle data ze své eRoušky. Pokud se vám zobrazila pouze jedna notifikace na rizikový kontakt, ale v Rizikových setkáních máte více záznamů, znamená to, že jste se s nakaženým setkali v předchozích dnech vícekrát nebo že v jeden den odeslalo data ze svého telefonu více nakažených uživatelů současně.\\n\\n## Bude eRouška fungovat jako „covid pas“ pro zobrazování výsledků testů a prokázání očkování?\\nAnonymní charakter aplikace eRouška ji neumožňuje kombinovat s tzv. digitálním zeleným certifikátem (Digital Green Certificate), který pracuje s ověřenou identitou a osobními údaji uživatele – výsledky testů nebo provedeným očkováním proti COVID-19.\\n\\n## Publikuje eRouška nějaké statistiky o používání aplikace?\\nStatistiky publikujeme ve formátu JSON na adrese [stats.erouska.cz](https://stats.erouska.cz). Data mají následující strukturu:\\n\\n{\\\\n  \"data\": {\\\\n    \"modified\": 1608696001,\\\\n    \"date\": \"20201223\",\\\\n    \"activations\\_yesterday\": 2042,\\\\n    \"activations\\_total\": 1475571,\\\\n    \"key\\_publishers\\_yesterday\": 718,\\\\n    \"key\\_publishers\\_total\": 39175,\\\\n    \"notifications\\_yesterday\": 631,\\\\n    \"notifications\\_total\": 197298\\\\n  }\\\\n}\\n\\n*   **modified** = Unix timestamp vygenerovaných statistik,\\n*   **date** = datum vytvoření reportu,\\n*   **activations\\_yesterday** = počet aktivací za předchozí kalendářní den,\\n*   **activations\\_total** = celkový počet aktivací eRoušky,\\n*   **key\\_publishers\\_yesterday** = počet nakažených lidí, kteří zadali v předchozím dni do eRoušky kód pro odeslání dat,\\n*   **key\\_publishers\\_total** = celkový počet nakažených lidí, kteří zadali do eRoušky kód pro odeslání dat,\\n*   **notifications\\_yesterday** = počet lidí, kterým se za předchozí den zobrazilo upozornění na rizikové setkání,\\n*   **notifications\\_total** = celkový počet lidí, kterým se zobrazilo upozornění na rizikové setkání.\\n\\nZavolání bez parametru zobrazí informace k aktuálnímu datu. Zavolání s parameterem `date` umožní získat data pro libovolný den od 23. 10. 2020 (za všechny předchozí dny máme pouze agregovaná data). Pomocí parametru `date` s hodnotou `all` lze získat všechna data, která rozhraní poskytuje.\\n\\n*   dnešní data: [`https://stats.erouska.cz/`](https://stats.erouska.cz/)\\n*   data z 1. 12. 2020: [`https://stats.erouska.cz/?date=2020-12-01`](https://stats.erouska.cz/?date=2020-12-01)\\n*   data za všechny dny: [`https://stats.erouska.cz/?date=all`](https://stats.erouska.cz/?date=all)\\n\\n# Zabezpečení dat\\n## Jak zjistím, která všechna data přesně aplikace ukládá a odesílá?\\nAplikace eRouška používá od verze 2.0 tzv. Apple/Google Exposure Notification API, které zprostředkovává sběr dat a předávání identifikátorů mezi uživateli. Aplikace kvůli tomu už nemá přímý přístup k naměřeným údajům, které by mohla uživatelům zobrazit, jako tomu bylo u verze 1.0.\\n\\nAplikace denně stahuje seznam identifikátorů od uživatelů, kterým test potvrdil nákazu. Data s identifikátory ke zpracování může ostatním odeslat pouze samotný uživatel, a to až po zadání jednorázového SMS kódu, který získá v případě pozitivního testu na nákazu nemocí COVID-19 automaticky, případně na vyžádání.\\n\\nAplikace dále odesílá na server anonymní statistickou/agregovanou informaci, že došlo k notifikaci rizikového kontaktu. Tato informace není vázána na žádný identifikátor uživatele ani jeho mobilu a slouží pouze k výpočtu statistických informací o účinnosti systému eRouška.\\n\\nAbychom zajistili funkčnost eRoušky, pracujeme také s údaji o jejím fungování (např. záznamy o pádech aplikace a používání aplikace) na vašem telefonu a používáme k tomu standardní nástroje (Firebase Crashlytics a Google Analytics) od společnosti Google. Telemetrická data odesílaná aplikací do těchto služeb neobsahují identifikátory vaší osoby nebo vašeho telefonu.\\n\\nPodrobné informace o sběru a zpracování dat naleznete v [Informacích o zpracování osobních údajů v aplikaci eRouška 2.0](https://erouska.cz/podminky-pouzivani).\\n\\n## Přenesou se data z eRoušky po obnově telefonu ze zálohy nebo při přechodu na nový telefon?\\nZ důvodů ochrany soukromí uživatelů operační systémy Android ani iOS nezálohují data z Exposure Notifications. Při reinstalaci telefonu nebo přechodu na jiné zařízení tedy nelze přenést ani obnovit zaznamenané a vygenerované identifikátory.\\n\\nPokud chcete získat informaci o možném rizikovém setkání, doporučujeme sledovat stav starého telefonu ještě po dobu 14 dní po instalaci eRoušky na nové zařízení. Přitom je potřeba:\\n\\n*   zajistit, aby vaše zařízení bylo zapnuté a připojené k internetu, aby si mohlo stahovat data k vyhodnocení,\\n*   ideálně alespoň jednou denně kontrolovat starší zařízení, tedy otevřít eRoušku.\\n*   Pokud byste během těchto 14 dní měli pozitivní test, zadejte prosím kód do nového zařízení a pro získání kódu pro starší mobil kontaktujte [info@erouska.cz](mailto:info@erouska.cz).\\n\\nPo 14 dnech už váš starý telefon nebude obsahovat žádná data pro vyhodnocení rizikového setkání. Můžete z něj proto odstranit eRoušku a ponechat jen v novém zařízení.\\n\\n## Co když mi telefon ukradnou nebo ho ztratím?\\nV aplikaci eRouška jsou lokálně uložené jen anonymní informace o dalších zařízeních, která eRouška zaznamenala ve svém okolí. Žádné riziko to nepřináší pro vás ani pro majitele takto zaznamenaných zařízení. Jiné aplikace, které běžně využíváte, mohou ve vašem telefonu pravděpodobně ukládat mnohem citlivější údaje. Mějte proto svůj telefon chráněný kódem nebo biometricky (otiskem prstu nebo obličejem).\\n\\n## Je aplikace eRouška v souladu s GDPR?\\nCelý systém aplikace eRouška, včetně webových stránek, je navržen plně v souladu s GDPR i zákonem o zpracování osobních údajů.\\n\\nZde naleznete bližší informace:\\n\\n*   [Informace o zpracování osobních údajů v aplikaci eRouška 2.0](https://erouska.cz/podminky-pouzivani)\\n*   [Audit zdrojového kódu aplikace](https://erouska.cz/audit-kod)\\n\\n## Jak uživatele chráníte před zneužitím dat?\\nUživatele chráníme především minimálním rozsahem zaznamenávaných dat a jejich ukládáním přímo do zařízení. Data uživatelů se bez jejich vědomí a souhlasu nikam neposílají ani nezpracovávají. Do telefonů se zaznamenávají anonymní identifikátory (ID) zařízení s nainstalovanou aplikací eRouška a informace o čase, délce a síle jejich Bluetooth signálu. Data se zpracovávají automatizovaně na serveru pouze po odsouhlaseném odeslání uživatelem.\\n\\n## Dohlíží na zabezpečení dat z aplikace nějaká nezávislá organizace?\\nCelý systém aplikace eRouška, včetně podpůrných webových stránek, je navržený plně v souladu s GDPR. Kód aplikace je jako open-source volně k dispozici ([Android](https://github.com/covid19cz/erouska-android), [iOS](https://github.com/covid19cz/erouska-ios)) a prošel [auditem nezávislých vzdělávacích institucí](https://erouska.cz/audit-kod).\\n\\nDalší informace naleznete v [Informacích o zpracování osobních údajů v rámci aplikace eRouška 2.0](https://erouska.cz/podminky-pouzivani).\\n\\n## Může mě někdo pomocí aplikace eRouška sledovat?\\nNe. Aplikace nesbírá údaje o vaší poloze a k uloženým datům máte přístup pouze vy. Samotné údaje, které aplikace po vašem souhlasu odesílá, nemohou být použity k vašemu sledování. Každá eRouška navíc mění z důvodu bezpečnosti a ochrany soukromí uživatelů pravidelně své vysílané ID, aby nebylo snadné jej odchytit a nějak zneužít.\\n\\n## Lze ověřit, že aplikace nezaznamenává moji polohu?\\nAno. Aplikace eRouška je publikována s otevřeným zdrojovým kódem ([Android](https://github.com/covid19cz/erouska-android), [iOS](https://github.com/covid19cz/erouska-ios)), takže znalý člověk může snadno ověřit, že údaje o poloze aplikace opravdu nesbírá.\\n\\nZdrojové kódy aplikace eRouška [prověřují nezávislé autority](https://erouska.cz/audit-kod), které kontrolují, že aplikace:\\n\\n*   nesleduje polohu\\n*   sama automaticky data s identifikátory nikam neodesílá\\n\\n## Lze identifikátor aplikace (ID) uživatele spárovat s konkrétní osobou?\\nAplikace eRouška 2.0 [nepracuje s osobními údaji](https://erouska.cz/podminky-pouzivani). Vygenerovaná anonymní ID eRoušky se mezi aplikacemi a servery přenášejí výhradně po chráněném komunikačním protokolu, který společně vyvinuly společnosti Apple a Google. K identifikátorům nemají přístup ani uživatelé, ani vývojáři, ani jiná autorita.\\n\\n## Kdo má (může mít) přístup k mým datům?\\nK zaznamenaným údajům o setkání nemá v eRoušce 2.0 přístup uživatel, ani nikdo jiný. Důvodem je, že aktuální verze aplikace používá Apple/Google protokol, který k zaznamenaným datům neposkytuje přístup ani uživatelům, ani vývojářům a správcům. Data (anonymní identifikátory nakažených) se přenášejí na server a odtud do ostatních eRoušek šifrovaná a vyhodnocují se až na koncových zařízeních automatizovaně za účelem zobrazení případných upozornění o rizikovém kontaktu. Ze serveru i ze zařízení se data mažou automaticky po 14 dnech.\\n\\n## Jak dlouho do minulosti jsou data k dispozici? Kdy a jak probíhá jejich mazání?\\nV aplikaci eRouška se uchovávají data zaznamenaná za posledních 14 dní, starší záznamy se automaticky odmazávají. Pokud po pozitivním testu na COVID-19 zadáte ověřovací kód do eRoušky a odešlete identifikátory z telefonu na server, zůstanou zde 14 dní a poté dojde k jejich smazání. Data můžete ze svého zařízení smazat v Nastavení Oznámení o kontaktech s nákazou / Kontakty s nákazou / Exposure Notification – konkrétní postup záleží na typu a verzi operačního systému.\\n\\n*   **Android:** Na zařízeních se systémem Android v současném nastavení dojde při odinstalování aplikace eRouška ke smazání zaznamenaných klíčů (identifikátorů).\\n\\nInformace o správcích a zpracovatelích dat naleznete v [Informacích o zpracování osobních údajů v rámci aplikace eRouška](https://erouska.cz/podminky-pouzivani).\\n\\n## Můžu si používání aplikace kdykoli rozmyslet? Můžu smazat data, která odešlu ke zpracování?\\nAplikaci můžete kdykoliv odinstalovat. Vygenerované a zaznamenané klíče (záznamy setkání) můžete ze svého zařízení smazat v Nastavení Oznámení o kontaktech s nákazou / Kontakty s nákazou / Exposure Notification – konkrétní postup záleží na typu a verzi operačního systému. Data odeslaná na server se smažou automaticky po 14 dnech.\\n\\n*   **Android:** Na zařízeních se systémem Android v současném nastavení dojde při odinstalování aplikace eRouška také ke smazání zaznamenaných klíčů (identifikátorů).\\n\\n## Co se děje s daty po smazání aplikace z mobilu?\\n**Android:** Když smažete aplikaci z telefonu nebo tabletu s OS Android, dojde také ke smazání zaznamenaných klíčů (identifikátorů).\\n\\nPokud aplikaci znovu nainstalujete, začnou se sbírat a do telefonu ukládat zcela nová data.\\n\\n## Kde najdu zdrojový kód aplikace?\\nAplikace eRouška je publikována s otevřeným zdrojovým kódem. Najdete jej na GitHubu ([Android](https://github.com/covid19cz/erouska-android), [iOS](https://github.com/covid19cz/erouska-ios)).\\n\\n# Instalace a kompatibilita\\n## Na jakých telefonech aplikace eRouška funguje? Proč jsou nároky vyšší než u eRoušky 1.0?\\nPro instalaci aplikace eRouška potřebujete mobilní zařízení s těmito parametry:\\n\\n*   iPhone s iOS verze 13.5 a vyšší\\n*   OS Android verze 6.0 a vyšší s Google Play Services (nemá jen malé procento telefonů Huawei a některé telefony s vlastní ROM)\\n*   Bluetooth LE (Low Energy)\\n\\nPokud vaše mobilní zařízení není s eRouškou kompatibilní (nemá potřebné technologie/funkce), Google Play ani Apple App Store vám neumožní aplikaci nainstalovat. Aplikace je dostupná pouze pro některé tablety Android. Není k dispozici pro iPad.\\n\\nMinimální požadavky na kompatibilitu stanovují společnosti Apple a Google. Vycházejí z požadavků Apple/Google Exposure Notification protokolu, který nová eRouška používá. Na Apple/Google protokol jsme se rozhodli přejít kvůli zajištění fungování eRoušky na iPhonech a kvůli umožnění přeshraniční kompatibility s podobnými aplikacemi dalších evropských států.\\n\\n## Odkud si můžu eRoušku bezpečně stáhnout a nainstalovat?\\nAplikace eRouška je dostupná pouze pro:\\n\\n*   Android: [v Obchodě Google Play](https://play.google.com/store/apps/details?id=cz.covid19cz.erouska).\\n\\n## Je možné aplikaci stáhnout i jinak než z oficiálních aplikačních obchodů? Je k dispozici balíček apk?\\nAplikace eRouška 2.0 používá Apple/Google protokol pro zaznamenávání setkání a přenos dat. Proto je také závislá na systémových službách, bez kterých nebude fungovat, a není ji tedy možné instalovat z jiných než oficiálních aplikačních obchodů. Aplikační obchody spolehlivě vyfiltrují podporovaná zařízení.\\n\\nVývojáři eRoušky nikdy neposkytují uživatelům odkazy na instalační balíčky APK nebo samotné instalační soubory mimo oficiální aplikační obchody. Pro aplikace nainstalované neoficiální cestou bychom nedokázali garantovat jejich zabezpečení, zajistit jejich aktualizace ani stejnou úroveň uživatelské podpory. Proto prosím nikdy neinstalujte eRoušku z .apk souborů, které jste našli někde na internetu nebo vám je někdo poslal e-mailem. Mohou obsahovat viry, trojské koně nebo jiný závadný obsah.\\n\\n## Můžu používat eRoušku spolu s jinou oficiální trasovací aplikací jiného státu (např. Corona-Warn-App)?\\nPokud pobýváte primárně na území ČR, doporučujeme používat eRoušku i pro cesty do zahraničí. [Aplikace nyní spolupracuje i s dalšími státy EU](https://erouska.cz/caste-dotazy#efgs).\\n\\nV ostatních případech můžete mít v telefonu nainstalováno více trasovacích aplikací typu eRoušky, jako jsou Corona-Warn-App, Stopp Corona App, Imunni, Stop Covid ProteGO Safe a další. Pokud však také používají Apple/Google Exposure Notification protokol (platí zejména pro sousední státy ČR), můžete mít v jeden okamžik aktivní pouze jednu z těchto aplikací. Ostatní je potřeba pozastavit. K zaznamenávání setkání v Apple/Google protokolu totiž může mít přístup vždy pouze jedna aplikace.\\n\\n## Funguje eRouška, když mám na mobilu úsporný režim / režim nízké spotřeby / spořič baterie?\\n**Android:** Spořiče/šetřiče baterie na zařízeních s OS Android mohou do značné míry omezovat běh aplikací na pozadí. Ačkoliv systém oznámení o možném kontaktu s onemocněním COVID-19 nadále funguje, nemusí docházet k vyhodnocování rizikových kontaktů, a tudíž k případnému zobrazení notifikací.\\n\\n## Bude možné používat eRoušku i na chytrých hodinkách či náramcích?\\nRozšíření je teoreticky do budoucna možné. Zatím jej ale nezvažujeme zejména proto, že by chytré hodinky či náramek musely podporovat Bluetooth LE (Low Energy) a zejména Apple/Google protokol. Základní Bluetooth bez LE sám o sobě pouze zajišťuje přenos dat, ale neumožňuje měření intenzity setkání uživatelů na základě síly signálu.\\n\\n</value>\n    </entry>\n    <entry>\n        <key>v2_shareAppDynamicLink</key>\n        <value>https://erouska.cz/app/sdilej</value>\n    </entry>\n    <entry>\n        <key>v2_minSupportedVersionCodeAndroid</key>\n        <value>666</value>\n    </entry>\n    <entry>\n        <key>v2_shouldCheckOSVersion</key>\n        <value>1</value>\n    </entry>\n    <entry>\n        <key>v2_unsupportedDeviceLink</key>\n        <value>https://koronavirus.mzcr.cz</value>\n    </entry>\n    <entry>\n        <key>v2_minSupportedVersion</key>\n        <value>2.3.3</value>\n    </entry>\n    <entry>\n        <key>v2_currentMeasuresUrl</key>\n        <value>https://covid.gov.cz/opatreni</value>\n    </entry>\n    <entry>\n        <key>v2_appleExposureConfiguration</key>\n        <value>{\"factorHigh\":0.25,\"factorStandard\":1,\"factorLow\":2,\"lowerThreshold\":55,\"higherThreshold\":70,\"triggerThreshold\":10}</value>\n    </entry>\n    <entry>\n        <key>v2_daysSinceOnsetToInfectiousness</key>\n        <value>0;0;0;0;0;0;0;0;0;0;0;1;2;2;2;2;2;2;2;1;1;1;1;1;1;1;1;1;1</value>\n    </entry>\n    <entry>\n        <key>v2_supportEmail</key>\n        <value>info@erouska.cz</value>\n    </entry>\n    <entry>\n        <key>v2_appleServerConfiguration</key>\n        <value>{\"minSupportedVersion\":\"13.5\",\"showExposureForDays\":14,\"healthAuthority\":\"cz.covid19cz.erouska\",\"uploadURL\":\"https://exposure-fghz64a2xa-ew.a.run.app/v1/publish\",\"downloadIndexName\":\"erouska/index.txt\",\"downloadsURL\":\"https://google.com\",\"verificationURL\":\"https://apiserver-jyvw4xgota-ew.a.run.app\",\"verificationAdminKey\":\"\",\"verificationDeviceKey\":\"4AP6RHk5VlNi7WIhj4ZupI9JZODdUyrPGb1C2mDYKo4cuaGIHdYtOhjyoqhg4vB5r7FDijxnySLb_1CUH6XdDA.1.oZLaUuVOPbvEaiWnzkQxasWlD_71iSTeM9aAIOKrfqhg5QO68t004CKxWutYmfISc7vqJe6uY2dRrt34OFkliw\",\"appCurentDataURL\":\"https://europe-west1-daring-leaf-272223.cloudfunctions.net\",\"firebaseURL\":\"https://europe-west1-daring-leaf-272223.cloudfunctions.net\"}</value>\n    </entry>\n    <entry>\n        <key>v2_handleError400AsExpiredOrUsedCode</key>\n        <value>false</value>\n    </entry>\n    <entry>\n        <key>v2_handleError500AsInvalidCode</key>\n        <value>false</value>\n    </entry>\n    <entry>\n        <key>v2_exposureHelpContentJson</key>\n        <value>{\"items\":[{\"iconUrl\":\"https://erouska.cz/img/exposure/ic_notification.png\",\"label\":\"Upozornění se vám zobrazí nejdříve 24 hodin poté, co se nakažený dozví pozitivní výsledek testu na COVID-19 a zadá ověřovací kód do eRoušky.\"},{\"iconUrl\":\"https://erouska.cz/img/exposure/ic_privacy.png\",\"label\":\"Kvůli zachování anonymity neznáme čas ani místo setkání.\"},{\"iconUrl\":\"https://erouska.cz/img/exposure/ic_distance.png\",\"label\":\"Rizikový kontakt vyhodnotíme v případě, že jste s nakaženým byli v kontaktu na vzdálenost kratší než 2 metry po dobu alespoň 7 minut.\"},{\"iconUrl\":\"https://erouska.cz/img/exposure/ic_14days.png\",\"label\":\"Riziková setkání vyhodnocujeme za posledních 14 dní, protože příznaky onemocnění COVID-19 se u vás mohou projevit až 2–14 dní po setkání s nakaženým.\"}]}</value>\n    </entry>\n    <entry>\n        <key>v2_exposureHelpUITitle</key>\n        <value>Nápověda</value>\n    </entry>\n    <entry>\n        <key>v2_updateNewsOnRequest</key>\n        <value>true</value>\n    </entry>\n    <entry>\n        <key>v2_recentExposureNotificationTitle</key>\n        <value>Vaše eRouška si dlouhou dobu neaktualizovala data, zda jste se setkali s nakaženým uživatelem eRoušky. Připojte se k internetu.</value>\n    </entry>\n    <entry>\n        <key>v2_efgsCountries</key>\n        <value>Aktuálně s eRouškou spolupracuje Belgie, Dánsko, Finsko, Chorvatsko, Irsko, Itálie, Kypr, Lotyšsko, Německo, Nizozemsko, Norsko, Polsko, Rakousko, Slovinsko a Španělsko.</value>\n    </entry>\n    <entry>\n        <key>v2_diagnosisKeysDataMappingLimitDays</key>\n        <value>7</value>\n    </entry>\n    <entry>\n        <key>v2_infectiousnessWhenDaysSinceOnsetMissing</key>\n        <value>1</value>\n    </entry>\n    <entry>\n        <key>v2_reportTypeWhenMissing</key>\n        <value>1</value>\n    </entry>\n    <entry>\n        <key>v2_noEncounterCardTitle</key>\n        <value>Za posledních 14 dní žádné rizikové setkání</value>\n    </entry>\n    <entry>\n        <key>v2_encounterUpdateFrequency</key>\n        <value>Aktualizace probíhá jednou za %d hodin.</value>\n    </entry>\n    <entry>\n        <key>v2_dbCleanupDays</key>\n        <value>15</value>\n    </entry>\n    <entry>\n        <key>v2_selfCheckerPeriodHours</key>\n        <value>4</value>\n    </entry>\n    <entry>\n        <key>v2_showChatBotLink</key>\n        <value>false</value>\n    </entry>\n    <entry>\n        <key>v2_efgsVisitedCountries</key>\n        <value></value>\n    </entry>\n    <entry>\n        <key>v2_efgsReportType</key>\n        <value>ConfirmedTest</value>\n    </entry>\n    <entry>\n        <key>v2_efgsConsentToFederation</key>\n        <value>false</value>\n    </entry>\n    <entry>\n        <key>v2_efgsTravellerDefault</key>\n        <value>false</value>\n    </entry>\n    <entry>\n        <key>v2_appleExposureConfigurationV2</key>\n        <value>{\"immediateDurationWeight\":200,\"nearDurationWeight\":100,\"mediumDurationWeight\":25,\"otherDurationWeight\":0,\"infectiousnessForDaysSinceOnsetOfSymptoms\":{\"0\":2,\"1\":2,\"2\":2,\"3\":2,\"4\":2,\"5\":1,\"6\":1,\"7\":1,\"8\":1,\"9\":1,\"10\":1,\"11\":1,\"12\":1,\"13\":1,\"14\":1,\"unknown\":1,\"-14\":0,\"-13\":0,\"-12\":0,\"-11\":0,\"-10\":0,\"-9\":0,\"-8\":0,\"-7\":0,\"-6\":0,\"-5\":0,\"-4\":0,\"-3\":1,\"-2\":2,\"-1\":2},\"infectiousnessStandardWeight\":100,\"infectiousnessHighWeight\":200,\"reportTypeConfirmedTestWeight\":100,\"reportTypeConfirmedClinicalDiagnosisWeight\":100,\"reportTypeSelfReportedWeight\":100,\"reportTypeRecursiveWeight\":100,\"reportTypeNoneMap\":1,\"minimumRiskScore\":0,\"attenuationDurationThresholds\":[55,70,80],\"attenuationLevelValues\":[1,2,3,4,5,6,7,8],\"daysSinceLastExposureLevelValues\":[1,2,3,4,5,6,7,8],\"durationLevelValues\":[1,2,3,4,5,6,7,8],\"transmissionRiskLevelValues\":[1,2,3,4,5,6,7,8],\"minimumScore\":420}</value>\n    </entry>\n    <entry>\n        <key>v2_helpJson</key>\n        <value>[{\"title\":\"Nejčastější problémy\",\"subtitle\":\"Doporučení dočasných oprav\",\"icon\":\"https://erouska.cz/img/faq/tool.png\",\"questions\":[{\"question\":\"Android: Základní doporučení při řešení problémů s aplikací\",\"answer\":\"Pokud vám aplikace zobrazuje chybovou hlášku, zkontrolujte prosím nejprve, zda máte nainstalované aktualizace operačního systému ([postup aktualizace Androidu](https://support.google.com/android/answer/7680439)) a nepoužíváte jejich beta verzi.\\n\\nDále prosím zkontrolujte v obchodu [Google Play (Android)](https://play.google.com/store/apps/details?id=cz.covid19cz.erouska), zda není pro eRoušku dostupná nová aktualizace.\\n\\nDoporučujeme rovněž povolit automatické aktualizace aplikace eRouška. [Postup pro Android zde:](https://support.google.com/googleplay/answer/113412#autoone) Spusťte aplikaci Obchod Google Play, klepněte na nabídku Moje aplikace a hry → Vyberte aplikaci, kterou chcete aktualizovat → Klepněte na ikonu možností a klepněte na Aktivovat automatické aktualizace.\"},{\"question\":\"Android: Nejde aktivovat eRouška. Chyba aktivace 17 (Exposure Notification API není k dispozici).\",\"answer\":\"Pro vyřešení chyby na Android zařízení, zkuste prosím postupovat takto:\\n\\n1.  Zkontrolujte, zda jste _hlavní uživatel_ zařízení, zda máte v telefonu služby Play a zda je k dispozici _Nastavení → Google → Oznámení o možném kontaktu (COVID-19 Exposure Notifications)_.\\n2.  Odinstalujte eRoušku.\\n3.  Smažte mezipaměť a data u Google Play Services a Obchodu Play ([postup zde, viz kroky 2 a 3](https://support.google.com/googleplay/answer/9037938)).\\n4.  Nainstalujte eRoušku a zapněte opět _Oznámení o možném kontaktu COVID-19_.\\n\\nPokud se vám i přes aktualizaci systému, aplikace a uvedené kroky nadále objevuje chyba aktivace, je bohužel možné, že vaše zařízení ještě nepodporuje Bluetooth LE (Low Energy Advertising), nepodporuje Bluetooth Multiple Advertisement, není autorizované Googlem pro Exposure Notifications nebo vůbec nemá Exposure Notifications API.\"}]},{\"title\":\"Připojení a přenos dat\",\"subtitle\":\"Bluetooth, GPS, internet\",\"icon\":\"https://erouska.cz/img/faq/connection.png\",\"questions\":[{\"question\":\"Musím mít Bluetooth zapnutý neustále?\",\"answer\":\"Ano. Bez zapnutého Bluetooth není možné zjišťovat blízkost dalších zařízení s nainstalovanou aplikací eRouška. Tuto funkci máte zapnutou možná i nyní, například v případě, že používáte bezdrátová sluchátka, připojení v autě, chytrý náramek nebo hodinky. V nastavení Bluetooth vašeho telefonu/tabletu navíc doporučujeme povolit, aby byl _viditelný pro všechna zařízení_.\"},{\"question\":\"Potřebuje aplikace připojení k internetu?\",\"answer\":\"Připojení k internetu je nutné ke stažení (instalaci) a aktivaci eRoušky. Dále je potřeba, aby si eRouška mohla každý den stahovat aktuální seznam anonymních identifikátorů nakažených uživatelů, a zobrazit tak včas případnou notifikací o rizikovém setkání.\\n\\nPokud by u vás test potvrdil nákazu COVID-19 a vy byste chtěli anonymně upozornit ostatní na možný rizikový kontakt, bylo by opět potřeba eRoušku připojit k internetu. Do té doby jsou vaše data uložena pouze ve vašem telefonu, odkud se sama odmazávají po 14 dnech. Aplikace využívá připojení k internetu rovněž ke stažení informací o aktuálním vývoji epidemie COVID-19 v ČR, které zobrazuje na stránce _Aktuálně_.\"},{\"question\":\"Jak často si aplikace aktualizuje data z internetu?\",\"answer\":\"Klíče (identifikátory) nakažených uživatelů si eRouška stahuje několikrát denně. Statistiky nakažených osob na obrazovce Aktuálně se aktualizují jednou denně.\"},{\"question\":\"Jak velký objem mobilních dat eRouška denně spotřebuje?\",\"answer\":\"V případě zapnutého _Upozornění na zahraniční riziková setkání_ eRouška stahuje také klíče všech nakažených uživatelů z ostatních států EU. Objem stažených dat se v takovém případě může pohybovat až kolem 2 MB denně.\\n\\nI v případě vypnutého _Upozornění na zahraniční riziková setkání_ eRouška stahuje přibližně 1 MB denně. Nová verze aplikace stahuje nejen klíče nakažených uživatelů eRoušky, ale i klíče nakažených uživatelů z ostatních států EU, kteří ve svých aplikacích uvedli, že cestují do zahraničí, takže je uživatel eRoušky potenciálně mohl potkat i v České republice\\n\\nSoubory klíčů nakažených uživatelů se stahují postupně, 2–3× denně. Pro porovnání, načtení průměrné stránky zpravodajství vyžaduje 1–5 MB dat. **Aplikace nepotřebuje nutně mobilní datové připojení.** Data si stáhne sama i na Wi-Fi.\"},{\"question\":\"Android: Proč je potřeba mít povolený přístup k GPS/polohovým/lokačním údajům?\",\"answer\":\"**Aktualizace pro uživatele Android 11:** U nejnovější verze operačního systému Android již nemusíte pro fungování eRoušky povolovat služby určování polohy.\\n\\nAplikace eRouška nesbírá a neukládá data z GPS, avšak operační systém **Android 10 a starší** zahrnuje pod určování polohy také některé služby Bluetooth LE (LE = low energy), který komponenty eRoušky – konkrétně Google Play Services – pro své fungování vyžadují. Proto je nutný souhlas uživatele s přístupem aplikace k polohovým údajům. V iOS tento souhlas nutný není. Proč v telefonu musí být zapnuté určování polohy, [vysvětluje Google zde](https://support.google.com/android/answer/9930236).\\n\\nInformaci o vaší poloze mohou využívat i jiné aplikace ve vašem zařízení. Pokud chcete zkontrolovat, které aplikace k nim mají přístup, přejděte do nastavení zařízení a vyberte položky Zabezpečení a poloha → Umístění → Oprávnění na úrovni aplikace (případně následujte [postup od společnosti Google](https://support.google.com/accounts/answer/6179507?hl=cs)). Zde můžete jiným aplikacím odepřít oprávnění používat vaši polohu, pokud si nemyslíte, že to potřebují. Protože eRouška toto oprávnění nepotřebuje, nezobrazí se v seznamu.\"},{\"question\":\"Kolik zapnutý Bluetooth a aplikace eRouška spotřebují baterie?\",\"answer\":\"Jestliže již nyní používáte telefon se stále zapnutým Bluetooth, spotřeba energie by se neměla výrazněji zvýšit. Pokud Bluetooth nyní běžně nepoužíváte, tak podle výsledků našeho testování s neustále zapnutým Bluetooth a ukládáním dat do aplikace bylo navýšení denní spotřeby energie v řádu jednotek procent. Ve většině případů to je méně než 20 % kapacity baterie za den. Záleží přitom na konkrétním chytrém telefonu, jeho stáří, stylu jeho používání a stavu baterie.\\n\\nSpotřebu baterie spojenou s použitím aplikace eRouška je ovlivňují dva faktory. Zaprvé samotným během aplikace a zadruhé využitím systémové funkce Oznámení o kontaktech s nákazou, která průběžně zaznamenává setkání s uživateli v okolí. Systémovou funkci zajišťuje OS Android nebo iOS, proto její optimalizace záleží na aktualizacích ze strany společností Apple a Google.\\n\\nPři interpretaci spotřeby baterie ze statistik v nastavení telefonu berte prosím v potaz, že toto procento odpovídá plnému využití vašeho telefonu za posledních 24 hodin (procentuální podíl běhu mezi ostatními aplikacemi). To znamená, že u málo využívaného telefonu může být procento u Kontaktů s nákazou/aplikace eRouška vysoké, u intenzivně využívaných telefonů naopak nízké. Nejde tedy přímo o procento spotřeby baterie.\\n\\n**Android: Poznámka k povolení polohových služeb:** Bluetooth zařízení ve vaší blízkosti lze detekovat, pouze pokud je v telefonu aktivována možnost „Použít polohu“. (Podrobnosti najdete v odstavci [Proč v telefonu musí být zapnuté určování polohy? na webu Googlu](https://support.google.com/android/answer/9930236?hl=cs).) To znamená, že informaci o vaší poloze mohou využívat i jiné aplikace ve vašem zařízení, což může být důvodem vyšší spotřeby baterie. Proto prosím zkontrolujte, které aplikace používají vaši polohu. Přejděte do nastavení zařízení a vyberte položky Zabezpečení a poloha → Umístění → Oprávnění na úrovni aplikace (případně následujte [postup od společnosti Google](https://support.google.com/accounts/answer/6179507?hl=cs)). Zde můžete jiným aplikacím odepřít oprávnění používat vaši polohu, pokud si nemyslíte, že to potřebují. Protože eRouška toto oprávnění nepotřebuje, nezobrazí se v seznamu.\"},{\"question\":\"Je možné, že se mi po zapnutí eRoušky zpomalilo Wi-Fi / připojení k internetu?\",\"answer\":\"U některých modelů mobilů s OS Android je bohužel známé, že vysílání Bluetooth může částečně negativně ovlivňovat signál Wi-Fi a naopak.\"},{\"question\":\"Může eRouška způsobovat problémy s dalšími aplikacemi nebo zařízeními/periferiemi (sluchátka, hodinky, náramek), které používají Bluetooth?\",\"answer\":\"Ve výjimečných případech nám někteří uživatelé hlásí nestandardní chování jejich Bluetooth periferií poté, co nainstalovali aplikaci eRouška. Např. může docházet k přerušování spojení – typicky u chytrých hodinek či náramků, bezdrátových sluchátek nebo handsfree sad. S největší pravděpodobností jde o problém funkcí operačního systému, na které bohužel nemáme vliv.\\n\\nZkuste prosím následný postup:\\n\\n1.  Restartujte telefon.\\n2.  Zrušte spárování s Bluetooth zařízením a znovu jej připojte.\\n\\nPokud kroky výše nepomohou, kontaktujte prosím výrobce zařízení:\\n\\n*   Android: [Podpora výrobců zařízení](https://support.google.com/android/answer/3094742?hl=cs&amp;ref_topic=7313011)\"},{\"question\":\"Proč aplikace používá zrovna Bluetooth? Neexistují lepší řešení jako GPS nebo triangulace od operátorů?\",\"answer\":\"Soukromí uživatelů je pro nás na prvním místě, a právě technologie Bluetooth nabízí nejvyváženější poměr přesnosti záznamu a minimálního zásahu do soukromí. Technologie GPS ani triangulace vysílačů od operátorů nemohou poskytnout potřebné údaje s požadovanou přesností. Mimo jiné i proto, že jejich funkčnost je ve vnitřních prostorách či metru velmi omezená. Aplikace eRouška potřebuje pro svoji funkci informace o tom, že došlo k setkání, na jakou vzdálenost a po jakou dobu. Není důležité, kde k setkání došlo.\"},{\"question\":\"Je Bluetooth dostatečně bezpečná technologie?\",\"answer\":\"Bluetooth je dnes běžně rozšířená a podporovaná komunikační technologie pro propojení zařízení s dalšími periferiemi, jako jsou bezdrátová sluchátka, reproduktory, chytré náramky nebo hodinky. Vzhledem k tomu, že společnosti Apple a Google vytvořily společný protokol určený výhradně pro národní aplikace, které trasují riziková setkání s nakaženými COVID-19 na základě Bluetooth LE, jsme přesvědčení, že jsme pro eRoušku zvolili správně. Je však potřeba říct, že úplně každá technologie je zranitelná. I proto všem uživatelům doporučujeme, aby operační systém a aplikace ve svém telefonu pravidelně aktualizovali. Aktualizace totiž mohou obsahovat důležité bezpečnostní záplaty.\"}]},{\"title\":\"Obecné informace\",\"subtitle\":\"eRouška, karanténa a postupy hygieny\",\"icon\":\"https://erouska.cz/img/faq/general.png\",\"questions\":[{\"question\":\"Jak mám postupovat, když mi aplikace zobrazila upozornění na rizikové setkání s nakaženým uživatelem?\",\"answer\":\"Pokud máte příznaky nákazy (například zvýšenou teplotu, kašel, dušnost, bolest v krku, bolest hlavy, náhlou ztrátu čichu a chuti), telefonicky kontaktujte svého praktického lékaře. V případě, že je váš stav opravdu akutní, volejte rychlou záchrannou službu 155, případě linku integrovaného záchranného systému 112. Uvedené příznaky se mohou objevit 2 až 14 dní po rizikovém setkání.\\n\\nPokud nemáte žádné příznaky, chovejte se prosím zodpovědně:\\n\\n*   Noste roušku či respirátor přes ústa a nos.\\n*   Často a důkladně si myjte ruce vodou a mýdlem či používejte dezinfekci.\\n*   Pravidelně dezinfikujte vlastní předměty (např. mobilní telefon).\\n*   Kašlejte a kýchejte do kapesníku či rukávu.\\n*   Používejte jednorázové kapesníky a poté je vyhoďte.\\n*   Vyhýbejte se zbytečnému shromažďování a dodržujte bezpečný odstup od ostatních (přibližně 2 metry).\\n\\nPokud po notifikaci eRoušky máte vážné podezření na rizikové setkání, kontaktujte svého praktického lékaře a řiďte se jeho pokyny. Je také možné, že vás bude v blízké době kontaktovat pracovník hygienické služby na základě epidemiologického šetření s konkrétním nakaženým. V takovém případě postupujte podle pokynů hygienické služby.\\n\\nPokud by se v průběhu 14 dní od rizikového setkání váš zdravotní stav zhoršil a objevily se u vás příznaky onemocnění COVID-19, kontaktujte svého praktického lékaře.\"},{\"question\":\"Jak mám postupovat, když mám pozitivní výsledek testu na COVID-19 nebo mi přišla SMS eRoušky s ověřovacím kódem?\",\"answer\":\"Jestliže vám přišla SMS z laboratoře s pozitivním výsledkem testu na COVID-19, měla by vám do několika hodin přijít také SMS eRoušky s ověřovacím kódem pro odeslání dat. SMS eRoušky se odesílají automatizovaně po zapsání výsledku testů do informačního systému. Okamžik, kdy laboratoř předá výsledky do informačního systému, nedokážou automatizované procesy Chytré karantény ovlivnit.\\n\\nJakmile vám přijde SMS eRoušky s ověřovacím kódem, [postupujte prosím podle tohoto návodu](https://erouska.cz/sms). Uvedený postup vám umožní anonymně informovat ostatní uživatele o případném rizikovém setkání. Děkujeme.\\n\\nMáte pozitivní test a nepřišla vám SMS eRoušky? Napište si o nový kód na [info@erouska.cz](mailto:info@erouska.cz?subject=).\"},{\"question\":\"To budu muset pokaždé automaticky do karantény nebo na testy, když aplikace zahlásí, že jsem byl v kontaktu s někým nakaženým?\",\"answer\":\"Ne, aplikace eRouška je plně anonymní, její použití je zcela dobrovolné a upozornění na možný rizikový kontakt s nakaženým není důvod pro nařízení karantény. Pokud u někoho test potvrdí nákazu, kontaktuje ho hygienická stanice, aby zjistila, s kým byl v posledních dnech v rizikovém kontaktu, a mohla tak omezit další šíření. Když tento člověk používá aplikaci eRouška, může kontaktovat i ty, které nezná, protože s nimi třeba cestoval v autobuse. Zadáním unikátního kódu může poslat upozornění všem ostatním uživatelům aplikace eRouška, se kterým byl v epidemiologicky rizikovém kontaktu.\\n\\nV okamžiku, kdy vás aplikace upozorní, že jste se setkali s osobou, u které bylo prokázané onemocnění COVID-19, byste měli postupovat podle zobrazených doporučení a v případě zdravotních potíží bez prodlení kontaktovat svého praktického lékaře.\"},{\"question\":\"Pozná eRouška, když poruším lékařem nařízenou karanténu nebo třeba pojedu na chatu?\",\"answer\":\"Aplikace nesleduje vaši polohu, není to její účel a ani pro to není navržena. Nepozná tedy, zda jste porušili karanténní opatření nebo kam jste odjeli. Má naopak pomoci k tomu, aby v karanténě byly pouze osoby s diagnostikovaným onemocněním nebo s vážným podezřením nákazy.\"},{\"question\":\"Může mi eRouška místo lékaře vystavit neschopenku? Je upozornění na možné rizikové setkání důvod pro pracovní neschopnost?\",\"answer\":\"Nemůže, není. Pokud vám eRouška zobrazila varování, postupujte podle zobrazených doporučení. Upozornění na možný rizikový kontakt nijak nenahrazuje zprávu od vašeho lékaře nebo laboratoře, která vyhodnotí váš test na COVID-19. Pouze lékař vám může vystavit platné dokumenty, které předložíte svému zaměstnavateli.\"},{\"question\":\"Proč je eRouška potřeba? Dokáže mě vůbec efektivně chránit před nákazou?\",\"answer\":\"Jedním z úkolů eRoušky je zastavit další šíření nákazy tím, že pomáhá co nejdříve izolovat potenciálně nakažené osoby od ostatních. To také pomáhá předcházet nutnosti zavádět plošná opatření, která mají negativní dopad na společnost a ekonomiku ČR. Aplikace na podobném principu fungují i v dalších státech a jsou účinným prostředkem v boji proti šíření nemoci COVID-19.\\n\\nAplikace eRouška 2.0 je doplňkovou aplikací Chytré karantény – systému ministerstva zdravotnictví. Prostřednictvím technologie Bluetooth se eRouška spojuje s dalšími eRouškami v nejbližším okolí a ukládá jejich anonymní identifikátory. Pokud test u člověka prokáže nákazu COVID-19, přijde mu automaticky ověřovací SMS kód, který mu umožní z aplikace odeslat své anonymní identifikátory do ostatních eRoušek. Aplikace ostatních uživatelů pak podle epidemiologického modelu\\\\* co nejpřesněji vyhodnotí, jestli tito uživatelé přišli s nakaženým do kontaktu dost blízko a na dostatečně dlouhou dobu, aby bylo nutné je prostřednictvím notifikace v mobilu varovat a směřovat k dalšímu vyšetření. eRouška 2.0 tedy pomáhá co nejefektivněji informovat další potenciální přenašeče viru a urychlit jejich testování. Tím se sníží počet infikovaných ve společnosti i riziko další infekce.\\n\\n_\\\\* Blíže než 2 metry po dobu delší než 7 minut._\"},{\"question\":\"Co když někdo nepřizná, že je nemocný?\",\"answer\":\"I to se může stát. Věříme však, že uživatelé eRoušky chtějí aktivně pomáhat se zastavením dalšího šíření nákazy a aplikaci využijí, aby mohli co nejdříve varovat osoby, se kterými přišli do rizikového kontaktu. **Záměrné šíření COVID-19 je v ČR považováno za trestný čin.**\"},{\"question\":\"Má smysl si eRoušku instalovat, když ji nebude používat dost lidí?\",\"answer\":\"Právě proto byste neměli váhat. Čím více nás bude eRoušku používat, tím lepší vytvoříme síť, která nás bude vzájemně chránit a varovat před rizikem. Pomozte nám i vy. Instalací aplikace se můžete aktivně zapojit do boje proti COVID-19. O aplikaci můžete říct i lidem ve svém okolí, případně jim s jejich souhlasem pomoci s instalací.\"},{\"question\":\"Jak se eRouška liší od jiných podobných aplikací?\",\"answer\":\"eRouška používá technologii Bluetooth, kterou je vybavená většina chytrých mobilních zařízení v Česku. Díky tomu funguje i v budovách, podzemních parkovištích nebo v metru. Aplikace je navržená tak, aby nesbírala informace o vaší poloze (např. přes GPS). Pouze anonymně zjišťuje, se kterými dalšími uživateli aplikace jste přišli do bližšího kontaktu. Jako jediná v ČR může oficiálně používat Apple/Google protokol, který garantuje bezpečnost aplikace na platformách Android a iOS a snižuje spotřebu baterie.\"},{\"question\":\"Co je to chytrá karanténa? Jakou v ní hraje roli eRouška?\",\"answer\":\"Jde o soubor chytrých opatření, která chrání lidi před nákazou a ekonomiku před kolapsem. Místo toho, aby byla v karanténě celá země, chytrá karanténa usnadňuje dohledávání, testování a izolaci pouze nemocných a z nemoci důvodně podezřelých lidí.\\n\\nKonkrétně jde o systém řízení v oblastech předpovědi vývoje, podpory rozhodování, aktivního vyhledávání kontaktů, testování vč. řízení kapacit odběrových míst, laboratoří, řízení karantén a souvisejícího materiálního a IT zabezpečení ke zvládnutí pandemie onemocnění COVID-19. Chytrá karanténa 2.0 je označením pro přechod projektu pod Ministerstvo zdravotnictví, které bude díky novým nástrojům umět do budoucna kdykoliv velmi rychle reagovat na jakékoliv epidemie.\\n\\nAplikace eRouška je jeden z nástrojů, které vznikly na podporu chytré karantény. Pomocí technologií – eRoušky – můžeme aktivně upozornit rizikové jedince, kteří se setkali s nakaženým, aby zvýšili hygienická opatření, zvážili dobrovolnou karanténu, případně při pociťování příznaků kontaktovali obvodního lékaře. Díky těmto krokům věříme, že se podaří zmírnit šíření nákazy a ušetřit zdravotnictví fatálního přetížení.\"}]},{\"title\":\"Pokročilé informace o eRoušce\",\"subtitle\":\"Sběr a vyhodnocení dat, význam upozornění\",\"icon\":\"https://erouska.cz/img/faq/advanced.png\",\"questions\":[{\"question\":\"Jak eRouška zaznamenává a zpracovává data o setkáních uživatelů?\",\"answer\":\"Chytrý telefon s aplikací eRouška zaznamenává přes Bluetooth LE anonymní identifikátory (ID) z jiných zařízení s touto aplikací. Informaci o „setkání“ a jeho délce ukládá do své vnitřní paměti.\\n\\nV případě, že budete mít pozitivní výsledek testu na COVID-19, přijde vám jednorázový SMS kód. Zadáte jej do aplikace ([postup zde](https://erouska.cz/sms)), a tím umožníte odeslání svých anonymních identifikátorů na server, odkud si je stáhnou ostatní eRoušky k vyhodnocení. Algoritmus v aplikaci každého uživatele na základě epidemiologického modelu automatizovaně vyhodnotí sesbíraná data – porovná identifikátory se všemi zaznamenanými setkáními. V případě rizikového kontaktu zobrazí upozornění, že hrozí nákaza kvůli setkání s pozitivně testovanou osobou, a doporučí další postup.\\n\\nPodrobné informace o sběru a zpracování dat naleznete v [Informacích o zpracování osobních údajů v aplikaci eRouška 2.0](https://erouska.cz/podminky-pouzivani).\"},{\"question\":\"Jak eRouška vyhodnocuje rizikové setkání?\",\"answer\":\"Původně epidemiologové stanovili jako rizikový kontakt jako setkání, které je ve vzdálenosti bližší než 2 metry po dobu alespoň 15 minut. Agresivnější šíření nových mutací koronaviru však ukazuje, že k nákaze stačí i kratší kontakt.\\n\\nNa vyšší agresivitu šíření mutací reagujeme po konzultacích postupu s Apple/Google a ostatními zeměmi EU postupným uvolňováním parametrů vyhodnocení rizikového kontaktu. Změny parametrů probíhají už od začátku března, průběžně vyhodnocujeme jejich vliv na počet nalezených kontaktů. Prozatím upravujeme zejména parametry odpovídající délce setkání, aktuálně jde přibližně o 7 minut.\\n\\nAplikace eRouška se snaží parametry vzdálenosti a času setkání vyhodnocovat co nejpřesněji dostupnými technologiemi. Vzdálenost mezi uživateli, respektive jejich telefony, se odhaduje na základě síly signálu Bluetooth. Doba setkání se posuzuje podle měřicích oken – telefon v několikaminutových intervalech zjišťuje, zda jsou v okolí jiné telefony s eRouškou.\\n\\nPřesnost měření výše uvedených parametrů má proto technická omezení. Čím větší vzdálenost a čím kratší kontakt, tím obtížnější je jeho přesné vyhodnocení. Uvolňování parametrů vyhodnocení tak zvyšuje pravděpodobnost falešných pozitivit a falešných negativit.\\n\\nVyšší přesnosti měření lze dosáhnout častějším vysíláním a zaznamenáváním dalších zařízení s eRouškou v okolí. To se bohužel promítne do vyšší spotřeby baterie. Algoritmy měření nastavují Apple a Google ve svém Exposure Notification protokolu, na kterém je eRouška postavená. Vývojáři eRoušky mohou pouze částečně upravovat některé parametry a provádět doplňující filtrování výsledků. Bližší vysvětlení najdete v sekci [Způsob vyhodnocení](https://erouska.cz/vyhodnoceni-rizika).\"},{\"question\":\"Jak eRouška reaguje na nové varianty/mutace viru?\",\"answer\":\"Nové varianty virů, které se objevily od počátku pandemie, průběžně zkoumají odborníci z pohledu infekčnosti a dopadů na zdraví. Proto jsou vývojáři eRoušky v úzkém kontaktu s úřady i se společnostmi Apple a Google, které poskytují protokol pro vyhodnocování kontaktů s nákazou, aby v případě změny rizika infekce na základě nových poznatků mohli upravit algoritmus pro výpočet v aplikaci.\"},{\"question\":\"Nemůže se stát, že eRouška mylně vyhodnotí kontakt s jinou osobou, která je například vedle v autě na křižovatce, za dveřmi nebo tenkou zdí?\",\"answer\":\"Aplikace eRouška funguje na principu měření síly signálu mezi dvěma zařízeními. Technicky proto nelze vyloučit nepřesný odhad vzdálenosti a mylnou detekci rizikového setkání. Technická omezení, rizika používání aplikace a postup vyhodnocování setkání popisujeme na stránce [Spolehlivost vyhodnocení rizikového kontaktu](https://erouska.cz/vyhodnoceni-rizika) a v sekci [Technické podmínky v Podmínkách zpracování](https://erouska.cz/podminky-pouzivani#technicke).\\n\\nPro vyhodnocení kontaktu jako rizikového je kromě vzdálenosti (do 2 m) relevantní též délka kontaktu (v řádu minut) – např. zastavení na semaforech na 1–2 minuty je tedy nevýznamné.\"},{\"question\":\"Zobrazilo se mi upozornění na možné setkání s nakaženým, ale eRouška po otevření ukazuje, že nezaznamenala nikoho nakaženého v mém okolí.\",\"answer\":\"Pokud vás překvapilo oznámení s červenou ikonkou viru a textem Oznámení o možném kontaktu (Android) nebo Zaznamenání kontaktů (iOS), nemusíte se obávat. Jde pouze o systémové oznámení Androidu a iOS, na které nemá eRouška vliv. Jak vypadá skutečné oznámení eRoušky najdete [na tomto obrázku](https://www.facebook.com/eRouska/posts/180938253548928).\\n\\nPokud byste měli rizikový kontakt s nakaženou osobou, zjistíte to přímo na hlavní obrazovce eRoušky.\\n\\nPokud jste předtím skutečně viděli rizikové setkání přímo v eRoušce, odkud zmizelo, je možné, že aktualizací aplikace pro Android došlo k úpravě parametrů vyhodnocení rizikového kontaktu a nyní už eRouška nepovažuje dané setkání za rizikové.\"},{\"question\":\"Takže všichni budou vědět, že mám COVID-19?\",\"answer\":\"Nebudou. Pokud onemocníte, vaše totožnost je známá jen a pouze pracovníkovi hygienické stanice. Osoby, kterým se zobrazí upozornění na možný rizikový kontakt, se nedozví, kdo ani kde je mohl nakazit. Aplikace zobrazuje pouze obecnou informaci o rizikovém setkání s nakaženým, den setkání a další doporučený postup. Vaše identita je ochráněna.\"},{\"question\":\"Byl jsem na testech na COVID-19, ale stále mi nepřišla SMS s ověřovacím kódem do eRoušky. Za jak dlouho ji mám čekat?\",\"answer\":\"Nejprve by vám měl přijít výsledek testu v SMS od testovací laboratoře. Ta výsledky současně odesílá do centrálního informačního systému Ministerstva zdravotnictví. Poté, co se informace z informačního systému propíšou do systému hygieny, se odesílají automatické SMS eRoušky s ověřovacími kódy. Pokud laboratoř nestihne předat výsledky do informačního systému ve stejný den, může vám SMS s ověřovacím kódem přijít až následující den.\\n\\n**Zkontrolujte prosím, jestli info SMS eRoušky nezablokoval omylem systém jako spam**\\n\\n*   **Android:** V aplikaci Zprávy klepněte na ikonu možností (tři tečky) a dále na Spam a zablokované konverzace (případně na tři tečky → Nastavení → SIM → Spam). Pokud je zde SMS eRoušky, klepněte na Není spam.\\n\\n**Pokud vám SMS eRoušky nepřišla ani následující den** poté, co vám přišla SMS s pozitivními výsledky z laboratoře, pošlete nám na [info@erouska.cz](mailto:info@erouska.cz?subject=) žádost o nový SMS kód. Uveďte prosím tyto informace:\\n\\n*   celé jméno, které jste uvedli na žádance o test,\\n*   tel. číslo, které jste uvedli na žádance o test,\\n*   datum výsledku testů,\\n*   odběrové místo / laboratoř, ze které vám přišly výsledky testu,\\n*   typ testu (PCR/antigen).\"},{\"question\":\"Přijde mi SMS s kódem do eRoušky, když mám pozitivní antigenní test na COVID-19?\",\"answer\":\"Pokud máte [pozitivní výsledek antigenního testu a máte příznaky COVID-19](https://drive.google.com/file/d/1HPwtltNRuzmowjZgE_c1u-a8m3W89T-p/view) (uvádíte v žádance), přijde vám SMS s kódem do eRoušky stejně jako v případě pozitivního PCR testu.\\n\\nV případě, že máte [pozitivní výsledek antigenního testu, ale nepociťujete příznaky](https://covid.gov.cz/situace/antigenni-testovani/interpretace-vysledku-antigenniho-testu-jak-se-zachovat-po-obdrzeni), půjdete na PCR test. Na základě pozitivního výsledku PCR testu by vám přišla SMS s kódem do eRoušky. V případě negativního PCR testu neodesíláte data z eRoušky.\"},{\"question\":\"Ve kterých státech EU můžu eRoušku používat? Jak funguje spolupráce se zahraničními aplikacemi?\",\"answer\":\"Evropská komise vyvinula centrální bránu EFGS pro bezpečnou výměnu informací („brána pro zajištění interoperability“). Tato brána umožňuje aplikaci eRouška přijímat a předávat si varování se zapojenými trasovacími aplikacemi používanými v jednotlivých státech EU. Podrobné informace o bráně jsou k dispozici na webu Evropské komise v dokumentu [Koronavirus: brána EU k zajištění interoperability aplikací pro vysledování kontaktů a varování – otázky a odpovědi](https://ec.europa.eu/commission/presscorner/detail/cs/qanda_20_1905#gateway).\\n\\nChcete-li zobrazit další informace o zapojených státech a nastavení, klepněte na hlavní obrazovce aplikace na Cesty do zahraničí, kde můžete funkci zapnout/vypnout a níže vidět seznam zapojených států. Oficiální aktuální seznam zapojených států EU najdete [na webu Evropské komise.](https://ec.europa.eu/health/sites/health/files/ehealth/docs/gateway_jointcontrollers_en.pdf)\"},{\"question\":\"Používá eRouška Apple/Google API?\",\"answer\":\"Nová verze – eRouška 2.0 pro Android i iOS již používá Apple/Google Exposure Notification API. Nezapomeňte proto prosím aplikaci eRouška aktualizovat v [Google Play (Android)](https://play.google.com/store/apps/details?id=cz.covid19cz.erouska) nebo [App Store (iOS)](https://apps.apple.com/cz/app/erou%C5%A1ka/id1509210215) a znovu aktivovat.\"},{\"question\":\"Co je to Apple/Google Exposure Notification API (protokol)?\",\"answer\":\"Společnosti Apple a Google společně vyvíjejí technologie, díky kterým mohou veřejné zdravotní instituce (u nás MZČR) vyvíjet národní aplikace pro trasování rizikových kontaktů s osobami s onemocněním COVID-19.\\n\\nKonkrétně jde například o rozhraní, které daným aplikacím (u nás eRouška) umožňuje spolehlivě přistupovat k systémovým prostředkům Android a Apple zařízení za účelem zaznamenání setkání – zejména využívat Bluetooth LE pro ověření kontaktu a běžet na pozadí bez potřeby dalších nastavení aplikace nebo operačního systému. Šifrovaný komunikační protokol pak zajišťuje zabezpečený přenos aktuálních seznamů identifikátorů nakažených uživatelů mezi trasovacími aplikacemi za účelem vyhodnocení rizikových setkání a včasného zobrazení notifikace.\\n\\nBližší informace naleznete přímo na webových stránkách společností [Apple (anglicky)](https://www.apple.com/covid19/contacttracing) a [Google (česky)](https://www.google.com/covid19/exposurenotifications/).\"},{\"question\":\"Kde v eRoušce najdu informace o zaznamenaných setkáních?\",\"answer\":\"Aplikace eRouška 2.0 je postavená na Apple/Google Exposure Notification protokolu, který zajišťuje zabezpečené zaznamenávání a vyhodnocení setkání. Z bezpečnostních důvodů však neposkytuje aplikaci přímý přístup k datům o zaznamenaných setkáních.\\n\\nZda aplikace funguje správně, se dozvíte na její hlavní obrazovce. Informace o všech zaznamenaných setkáních s nakaženými uživateli jsou uložená na úrovni systému. Tato setkání však nemusela být riziková. Naleznete je v Nastavení:\\n\\n*   Android: Nastavení → Google → Oznámení o možném kontaktu COVID-19 → klepnout na tři tečky vpravo nahoře → Kontrola kontaktu\"},{\"question\":\"Co znamenají jednotlivé záznamy v Nastavení → Kontrola kontaktů?\",\"answer\":\"Protokolování kontaktů s nákazou ukazuje, kolik klíčů od nakažených uživatelů se stáhlo do vašeho telefonu ze serveru a kolik z nich odpovídá klíčům, které váš telefon zaznamenal.\\n\\n**Kontroly kontaktů:** Zde jsou data a časy jednotlivých stažení klíčů ze serveru za poslední dva týdny. Pro další kontrolu je potřeba otevřít jednotlivé záznamy.\\n\\n**Android: Počet klíčů:** Jde o počet klíčů od pozitivně testovaných uživatelů. Tyto klíče si váš v telefon v daném datu stáhl pro kontrolu možných kontaktů s nakaženými uživateli.\\n\\n**Android: Počet výsledků:** Jde o počet shod mezi staženými klíči a těmi, které zaznamenal váš telefon ve svém okolí. Pokud je číslo vyšší než 0, tak jste se setkali s nakaženým uživatelem. To však ještě neznamená, že nutně muselo jít o rizikové setkání.\\n\\n**Časová značka:** Datum a čas, kdy ke kontrole došlo. Nejde však o čas rizikového setkání (ten není k dispozici kvůli ochraně soukromí uživatelů).\\n\\n**Zdroj dat:** Aplikace, která zajišťuje kontrolu a vyhodnocení rizikových setkání.\\n\\n**Hašovací kód:** Kontrolní součet souboru obsahujícího stažení klíče nakažených uživatelů. Dokud se obsah souboru nezmění, tak se nezmění ani kontrolní součet během příslušného dvoutýdenního období.\"},{\"question\":\"Jak zjistím, že eRouška funguje na pozadí? Proč na Androidu nevidím ikonku eRoušky v záhlaví?\",\"answer\":\"Notifikační ikonu jsme odstranili, protože zaznamenávání a vyhodnocování setkání již zajišťuje přímo Apple/Google protokol na úrovni operačního systému. Samotná aplikace eRouška se pak stará o stahování klíčů (identifikátorů) nakažených uživatelů 1–2× denně a nemusí běžet permanentně na pozadí.\\n\\nŽe je aplikace aktuální, zjistíte na její hlavní obrazovce. Stahování klíčů nakažených pak můžete ověřit v Nastavení telefonu:\\n\\n*   **Android:** Nastavení → Google → Oznámení o možném kontaktu COVID-19 → klepnout na tři tečky vpravo nahoře → Kontrola kontaktu\"},{\"question\":\"Proč se liší datum a čas „Poslední aktualizace dat“ na hlavní obrazovce eRoušky a data a časy „Kontroly kontaktů“, které vidím v Nastavení telefonu?\",\"answer\":\"Aplikace eRouška ukazuje na hlavní obrazovce datum a čas posledního úspěšného pokusu o kontrolu nových klíčů (identifikátorů) nakažených uživatelů na serveru. V Nastavení telefonu se zobrazují pouze data a časy, kdy byly naposledy nové klíče nalezeny a vyhodnoceny v telefonu.\\n\\nKlíče nakažených uživatelů se do telefonu stahují 1–2× denně.\"},{\"question\":\"Proč v eRoušce nevidím konkrétní čas rizikového setkání?\",\"answer\":\"Aplikace eRouška je postavená na Apple/Google Exposure Notification protokolu, který zajišťuje zaznamenávání a vyhodnocování setkání na úrovni operačního systému. Apple/Google protokol poskytuje eRoušce přístup pouze k datu rizikového setkání, bližší informace nejsou k dispozici z důvodu co nejvyšší ochrany soukromí uživatelů.\"},{\"question\":\"Proč v Kontrole kontaktů v Nastavení telefonu vidím „Nalezené klíče: 0“?\",\"answer\":\"Znamená to, že Apple/Google API ve vašem telefonu nevyhodnotilo v daném datu žádné setkání s nakaženým uživatelem. Jinak řečeno stažené klíče nakažených uživatelů se v daném dni neshodují s žádným ze zaznamenaných klíčů ve vašem zařízení.\"},{\"question\":\"Proč v Nastavení telefonu v sekci Kontrola kontaktu vidím u konkrétního data nalezené klíče, ale eRouška mi nezobrazuje žádná riziková setkání?\",\"answer\":\"Počet nalezených klíčů představuje počet zaznamenaných setkání s nakaženými uživateli. Neznamená to však nutně, že tato setkání byla riziková. Pokud setkání s nakaženým uživatelem nebylo rizikové, tak na něj eRouška neupozorňuje. Proto v aplikaci není vidět.\"},{\"question\":\"Zobrazilo se mi upozornění/notifikace na rizikové setkání, ke kterému došlo před několika dny. Proč mě eRouška upozornila až teď?\",\"answer\":\"Aplikace eRouška nemůže vyhodnotit riziková setkání a zobrazit upozornění dříve, než uživatel s pozitivním testem na COVID-19 odešle data ze své eRoušky. Pokud se vám dnes zobrazila notifikace, která upozorňuje na rizikové setkání s nakaženým před několika dny, znamená to, že nakažený odeslal data ze své eRoušky až dnes, nejpozději včera. Vaše eRouška si je dnes stáhla a vyhodnotila.\"},{\"question\":\"Zobrazilo se mi upozornění/notifikace na rizikové setkání s nakaženým, ale na obrazovce Rizikové setkání vidím více záznamů s různými daty.\",\"answer\":\"Aplikace eRouška vyhodnocuje riziková setkání až poté, co uživatel s pozitivním testem na COVID-19 odešle data ze své eRoušky. Pokud se vám zobrazila pouze jedna notifikace na rizikový kontakt, ale v Rizikových setkáních máte více záznamů, znamená to, že jste se s nakaženým setkali v předchozích dnech vícekrát nebo že v jeden den odeslalo data ze svého telefonu více nakažených uživatelů současně.\"},{\"question\":\"Bude eRouška fungovat jako „covid pas“ pro zobrazování výsledků testů a prokázání očkování?\",\"answer\":\"Anonymní charakter aplikace eRouška ji neumožňuje kombinovat s tzv. digitálním zeleným certifikátem (Digital Green Certificate), který pracuje s ověřenou identitou a osobními údaji uživatele – výsledky testů nebo provedeným očkováním proti COVID-19.\"},{\"question\":\"Publikuje eRouška nějaké statistiky o používání aplikace?\",\"answer\":\"Statistiky publikujeme ve formátu JSON na adrese [stats.erouska.cz](https://stats.erouska.cz). Data mají následující strukturu:\\n\\n{\\\\\\\\n  \\\"data\\\": {\\\\\\\\n    \\\"modified\\\": 1608696001,\\\\\\\\n    \\\"date\\\": \\\"20201223\\\",\\\\\\\\n    \\\"activations\\\\_yesterday\\\": 2042,\\\\\\\\n    \\\"activations\\\\_total\\\": 1475571,\\\\\\\\n    \\\"key\\\\_publishers\\\\_yesterday\\\": 718,\\\\\\\\n    \\\"key\\\\_publishers\\\\_total\\\": 39175,\\\\\\\\n    \\\"notifications\\\\_yesterday\\\": 631,\\\\\\\\n    \\\"notifications\\\\_total\\\": 197298\\\\\\\\n  }\\\\\\\\n}\\n\\n*   **modified** = Unix timestamp vygenerovaných statistik,\\n*   **date** = datum vytvoření reportu,\\n*   **activations\\\\_yesterday** = počet aktivací za předchozí kalendářní den,\\n*   **activations\\\\_total** = celkový počet aktivací eRoušky,\\n*   **key\\\\_publishers\\\\_yesterday** = počet nakažených lidí, kteří zadali v předchozím dni do eRoušky kód pro odeslání dat,\\n*   **key\\\\_publishers\\\\_total** = celkový počet nakažených lidí, kteří zadali do eRoušky kód pro odeslání dat,\\n*   **notifications\\\\_yesterday** = počet lidí, kterým se za předchozí den zobrazilo upozornění na rizikové setkání,\\n*   **notifications\\\\_total** = celkový počet lidí, kterým se zobrazilo upozornění na rizikové setkání.\\n\\nZavolání bez parametru zobrazí informace k aktuálnímu datu. Zavolání s parameterem `date` umožní získat data pro libovolný den od 23. 10. 2020 (za všechny předchozí dny máme pouze agregovaná data). Pomocí parametru `date` s hodnotou `all` lze získat všechna data, která rozhraní poskytuje.\\n\\n*   dnešní data: [`https://stats.erouska.cz/`](https://stats.erouska.cz/)\\n*   data z 1. 12. 2020: [`https://stats.erouska.cz/?date=2020-12-01`](https://stats.erouska.cz/?date=2020-12-01)\\n*   data za všechny dny: [`https://stats.erouska.cz/?date=all`](https://stats.erouska.cz/?date=all)\"}]},{\"title\":\"Zabezpečení dat\",\"subtitle\":\"Osobní údaje a ochrana soukromí\",\"icon\":\"https://erouska.cz/img/faq/security.png\",\"questions\":[{\"question\":\"Jak zjistím, která všechna data přesně aplikace ukládá a odesílá?\",\"answer\":\"Aplikace eRouška používá od verze 2.0 tzv. Apple/Google Exposure Notification API, které zprostředkovává sběr dat a předávání identifikátorů mezi uživateli. Aplikace kvůli tomu už nemá přímý přístup k naměřeným údajům, které by mohla uživatelům zobrazit, jako tomu bylo u verze 1.0.\\n\\nAplikace denně stahuje seznam identifikátorů od uživatelů, kterým test potvrdil nákazu. Data s identifikátory ke zpracování může ostatním odeslat pouze samotný uživatel, a to až po zadání jednorázového SMS kódu, který získá v případě pozitivního testu na nákazu nemocí COVID-19 automaticky, případně na vyžádání.\\n\\nAplikace dále odesílá na server anonymní statistickou/agregovanou informaci, že došlo k notifikaci rizikového kontaktu. Tato informace není vázána na žádný identifikátor uživatele ani jeho mobilu a slouží pouze k výpočtu statistických informací o účinnosti systému eRouška.\\n\\nAbychom zajistili funkčnost eRoušky, pracujeme také s údaji o jejím fungování (např. záznamy o pádech aplikace a používání aplikace) na vašem telefonu a používáme k tomu standardní nástroje (Firebase Crashlytics a Google Analytics) od společnosti Google. Telemetrická data odesílaná aplikací do těchto služeb neobsahují identifikátory vaší osoby nebo vašeho telefonu.\\n\\nPodrobné informace o sběru a zpracování dat naleznete v [Informacích o zpracování osobních údajů v aplikaci eRouška 2.0](https://erouska.cz/podminky-pouzivani).\"},{\"question\":\"Přenesou se data z eRoušky po obnově telefonu ze zálohy nebo při přechodu na nový telefon?\",\"answer\":\"Z důvodů ochrany soukromí uživatelů operační systémy Android ani iOS nezálohují data z Exposure Notifications. Při reinstalaci telefonu nebo přechodu na jiné zařízení tedy nelze přenést ani obnovit zaznamenané a vygenerované identifikátory.\\n\\nPokud chcete získat informaci o možném rizikovém setkání, doporučujeme sledovat stav starého telefonu ještě po dobu 14 dní po instalaci eRoušky na nové zařízení. Přitom je potřeba:\\n\\n*   zajistit, aby vaše zařízení bylo zapnuté a připojené k internetu, aby si mohlo stahovat data k vyhodnocení,\\n*   ideálně alespoň jednou denně kontrolovat starší zařízení, tedy otevřít eRoušku.\\n*   Pokud byste během těchto 14 dní měli pozitivní test, zadejte prosím kód do nového zařízení a pro získání kódu pro starší mobil kontaktujte [info@erouska.cz](mailto:info@erouska.cz).\\n\\nPo 14 dnech už váš starý telefon nebude obsahovat žádná data pro vyhodnocení rizikového setkání. Můžete z něj proto odstranit eRoušku a ponechat jen v novém zařízení.\"},{\"question\":\"Co když mi telefon ukradnou nebo ho ztratím?\",\"answer\":\"V aplikaci eRouška jsou lokálně uložené jen anonymní informace o dalších zařízeních, která eRouška zaznamenala ve svém okolí. Žádné riziko to nepřináší pro vás ani pro majitele takto zaznamenaných zařízení. Jiné aplikace, které běžně využíváte, mohou ve vašem telefonu pravděpodobně ukládat mnohem citlivější údaje. Mějte proto svůj telefon chráněný kódem nebo biometricky (otiskem prstu nebo obličejem).\"},{\"question\":\"Je aplikace eRouška v souladu s GDPR?\",\"answer\":\"Celý systém aplikace eRouška, včetně webových stránek, je navržen plně v souladu s GDPR i zákonem o zpracování osobních údajů.\\n\\nZde naleznete bližší informace:\\n\\n*   [Informace o zpracování osobních údajů v aplikaci eRouška 2.0](https://erouska.cz/podminky-pouzivani)\\n*   [Audit zdrojového kódu aplikace](https://erouska.cz/audit-kod)\"},{\"question\":\"Jak uživatele chráníte před zneužitím dat?\",\"answer\":\"Uživatele chráníme především minimálním rozsahem zaznamenávaných dat a jejich ukládáním přímo do zařízení. Data uživatelů se bez jejich vědomí a souhlasu nikam neposílají ani nezpracovávají. Do telefonů se zaznamenávají anonymní identifikátory (ID) zařízení s nainstalovanou aplikací eRouška a informace o čase, délce a síle jejich Bluetooth signálu. Data se zpracovávají automatizovaně na serveru pouze po odsouhlaseném odeslání uživatelem.\"},{\"question\":\"Dohlíží na zabezpečení dat z aplikace nějaká nezávislá organizace?\",\"answer\":\"Celý systém aplikace eRouška, včetně podpůrných webových stránek, je navržený plně v souladu s GDPR. Kód aplikace je jako open-source volně k dispozici ([Android](https://github.com/covid19cz/erouska-android), [iOS](https://github.com/covid19cz/erouska-ios)) a prošel [auditem nezávislých vzdělávacích institucí](https://erouska.cz/audit-kod).\\n\\nDalší informace naleznete v [Informacích o zpracování osobních údajů v rámci aplikace eRouška 2.0](https://erouska.cz/podminky-pouzivani).\"},{\"question\":\"Může mě někdo pomocí aplikace eRouška sledovat?\",\"answer\":\"Ne. Aplikace nesbírá údaje o vaší poloze a k uloženým datům máte přístup pouze vy. Samotné údaje, které aplikace po vašem souhlasu odesílá, nemohou být použity k vašemu sledování. Každá eRouška navíc mění z důvodu bezpečnosti a ochrany soukromí uživatelů pravidelně své vysílané ID, aby nebylo snadné jej odchytit a nějak zneužít.\"},{\"question\":\"Lze ověřit, že aplikace nezaznamenává moji polohu?\",\"answer\":\"Ano. Aplikace eRouška je publikována s otevřeným zdrojovým kódem ([Android](https://github.com/covid19cz/erouska-android), [iOS](https://github.com/covid19cz/erouska-ios)), takže znalý člověk může snadno ověřit, že údaje o poloze aplikace opravdu nesbírá.\\n\\nZdrojové kódy aplikace eRouška [prověřují nezávislé autority](https://erouska.cz/audit-kod), které kontrolují, že aplikace:\\n\\n*   nesleduje polohu\\n*   sama automaticky data s identifikátory nikam neodesílá\"},{\"question\":\"Lze identifikátor aplikace (ID) uživatele spárovat s konkrétní osobou?\",\"answer\":\"Aplikace eRouška 2.0 [nepracuje s osobními údaji](https://erouska.cz/podminky-pouzivani). Vygenerovaná anonymní ID eRoušky se mezi aplikacemi a servery přenášejí výhradně po chráněném komunikačním protokolu, který společně vyvinuly společnosti Apple a Google. K identifikátorům nemají přístup ani uživatelé, ani vývojáři, ani jiná autorita.\"},{\"question\":\"Kdo má (může mít) přístup k mým datům?\",\"answer\":\"K zaznamenaným údajům o setkání nemá v eRoušce 2.0 přístup uživatel, ani nikdo jiný. Důvodem je, že aktuální verze aplikace používá Apple/Google protokol, který k zaznamenaným datům neposkytuje přístup ani uživatelům, ani vývojářům a správcům. Data (anonymní identifikátory nakažených) se přenášejí na server a odtud do ostatních eRoušek šifrovaná a vyhodnocují se až na koncových zařízeních automatizovaně za účelem zobrazení případných upozornění o rizikovém kontaktu. Ze serveru i ze zařízení se data mažou automaticky po 14 dnech.\"},{\"question\":\"Jak dlouho do minulosti jsou data k dispozici? Kdy a jak probíhá jejich mazání?\",\"answer\":\"V aplikaci eRouška se uchovávají data zaznamenaná za posledních 14 dní, starší záznamy se automaticky odmazávají. Pokud po pozitivním testu na COVID-19 zadáte ověřovací kód do eRoušky a odešlete identifikátory z telefonu na server, zůstanou zde 14 dní a poté dojde k jejich smazání. Data můžete ze svého zařízení smazat v Nastavení Oznámení o kontaktech s nákazou / Kontakty s nákazou / Exposure Notification – konkrétní postup záleží na typu a verzi operačního systému.\\n\\n*   **Android:** Na zařízeních se systémem Android v současném nastavení dojde při odinstalování aplikace eRouška ke smazání zaznamenaných klíčů (identifikátorů).\\n\\nInformace o správcích a zpracovatelích dat naleznete v [Informacích o zpracování osobních údajů v rámci aplikace eRouška](https://erouska.cz/podminky-pouzivani).\"},{\"question\":\"Můžu si používání aplikace kdykoli rozmyslet? Můžu smazat data, která odešlu ke zpracování?\",\"answer\":\"Aplikaci můžete kdykoliv odinstalovat. Vygenerované a zaznamenané klíče (záznamy setkání) můžete ze svého zařízení smazat v Nastavení Oznámení o kontaktech s nákazou / Kontakty s nákazou / Exposure Notification – konkrétní postup záleží na typu a verzi operačního systému. Data odeslaná na server se smažou automaticky po 14 dnech.\\n\\n*   **Android:** Na zařízeních se systémem Android v současném nastavení dojde při odinstalování aplikace eRouška také ke smazání zaznamenaných klíčů (identifikátorů).\"},{\"question\":\"Co se děje s daty po smazání aplikace z mobilu?\",\"answer\":\"**Android:** Když smažete aplikaci z telefonu nebo tabletu s OS Android, dojde také ke smazání zaznamenaných klíčů (identifikátorů).\\n\\nPokud aplikaci znovu nainstalujete, začnou se sbírat a do telefonu ukládat zcela nová data.\"},{\"question\":\"Kde najdu zdrojový kód aplikace?\",\"answer\":\"Aplikace eRouška je publikována s otevřeným zdrojovým kódem. Najdete jej na GitHubu ([Android](https://github.com/covid19cz/erouska-android), [iOS](https://github.com/covid19cz/erouska-ios)).\"}]},{\"title\":\"Instalace a kompatibilita\",\"subtitle\":\"Podporované mobily a možnosti instalace\",\"icon\":\"https://erouska.cz/img/faq/compatibility.png\",\"questions\":[{\"question\":\"Na jakých telefonech aplikace eRouška funguje? Proč jsou nároky vyšší než u eRoušky 1.0?\",\"answer\":\"Pro instalaci aplikace eRouška potřebujete mobilní zařízení s těmito parametry:\\n\\n*   iPhone s iOS verze 13.5 a vyšší\\n*   OS Android verze 6.0 a vyšší s Google Play Services (nemá jen malé procento telefonů Huawei a některé telefony s vlastní ROM)\\n*   Bluetooth LE (Low Energy)\\n\\nPokud vaše mobilní zařízení není s eRouškou kompatibilní (nemá potřebné technologie/funkce), Google Play ani Apple App Store vám neumožní aplikaci nainstalovat. Aplikace je dostupná pouze pro některé tablety Android. Není k dispozici pro iPad.\\n\\nMinimální požadavky na kompatibilitu stanovují společnosti Apple a Google. Vycházejí z požadavků Apple/Google Exposure Notification protokolu, který nová eRouška používá. Na Apple/Google protokol jsme se rozhodli přejít kvůli zajištění fungování eRoušky na iPhonech a kvůli umožnění přeshraniční kompatibility s podobnými aplikacemi dalších evropských států.\"},{\"question\":\"Odkud si můžu eRoušku bezpečně stáhnout a nainstalovat?\",\"answer\":\"Aplikace eRouška je dostupná pouze pro:\\n\\n*   Android: [v Obchodě Google Play](https://play.google.com/store/apps/details?id=cz.covid19cz.erouska).\"},{\"question\":\"Je možné aplikaci stáhnout i jinak než z oficiálních aplikačních obchodů? Je k dispozici balíček apk?\",\"answer\":\"Aplikace eRouška 2.0 používá Apple/Google protokol pro zaznamenávání setkání a přenos dat. Proto je také závislá na systémových službách, bez kterých nebude fungovat, a není ji tedy možné instalovat z jiných než oficiálních aplikačních obchodů. Aplikační obchody spolehlivě vyfiltrují podporovaná zařízení.\\n\\nVývojáři eRoušky nikdy neposkytují uživatelům odkazy na instalační balíčky APK nebo samotné instalační soubory mimo oficiální aplikační obchody. Pro aplikace nainstalované neoficiální cestou bychom nedokázali garantovat jejich zabezpečení, zajistit jejich aktualizace ani stejnou úroveň uživatelské podpory. Proto prosím nikdy neinstalujte eRoušku z .apk souborů, které jste našli někde na internetu nebo vám je někdo poslal e-mailem. Mohou obsahovat viry, trojské koně nebo jiný závadný obsah.\"},{\"question\":\"Můžu používat eRoušku spolu s jinou oficiální trasovací aplikací jiného státu (např. Corona-Warn-App)?\",\"answer\":\"Pokud pobýváte primárně na území ČR, doporučujeme používat eRoušku i pro cesty do zahraničí. [Aplikace nyní spolupracuje i s dalšími státy EU](https://erouska.cz/caste-dotazy#efgs).\\n\\nV ostatních případech můžete mít v telefonu nainstalováno více trasovacích aplikací typu eRoušky, jako jsou Corona-Warn-App, Stopp Corona App, Imunni, Stop Covid ProteGO Safe a další. Pokud však také používají Apple/Google Exposure Notification protokol (platí zejména pro sousední státy ČR), můžete mít v jeden okamžik aktivní pouze jednu z těchto aplikací. Ostatní je potřeba pozastavit. K zaznamenávání setkání v Apple/Google protokolu totiž může mít přístup vždy pouze jedna aplikace.\"},{\"question\":\"Funguje eRouška, když mám na mobilu úsporný režim / režim nízké spotřeby / spořič baterie?\",\"answer\":\"**Android:** Spořiče/šetřiče baterie na zařízeních s OS Android mohou do značné míry omezovat běh aplikací na pozadí. Ačkoliv systém oznámení o možném kontaktu s onemocněním COVID-19 nadále funguje, nemusí docházet k vyhodnocování rizikových kontaktů, a tudíž k případnému zobrazení notifikací.\"},{\"question\":\"Bude možné používat eRoušku i na chytrých hodinkách či náramcích?\",\"answer\":\"Rozšíření je teoreticky do budoucna možné. Zatím jej ale nezvažujeme zejména proto, že by chytré hodinky či náramek musely podporovat Bluetooth LE (Low Energy) a zejména Apple/Google protokol. Základní Bluetooth bez LE sám o sobě pouze zajišťuje přenos dat, ale neumožňuje měření intenzity setkání uživatelů na základě síly signálu.\"}]}]</value>\n    </entry>\n    <entry>\n        <key>v2_appleIgnoreAndroid</key>\n        <value>true</value>\n    </entry>\n    <entry>\n        <key>v2_howItWorksUITitle</key>\n        <value>Jak eRouška funguje</value>\n    </entry>\n    <entry>\n        <key>v2_validationTokenExpirationLeewayMinutes</key>\n        <value>15</value>\n    </entry>\n    <entry>\n        <key>v2_efgsDays</key>\n        <value>14</value>\n    </entry>\n    <entry>\n        <key>v2_keyExportNonTravellerUrls</key>\n        <value>[{\"country\":\"CZ\",\"url\":\"https://cdn.erouska.cz/erouska/index.txt\"}]</value>\n    </entry>\n    <entry>\n        <key>v2_keyExportEuTravellerUrls</key>\n        <value>[{\"country\":\"CZ\",\"url\":\"https://cdn.erouska.cz/erouska/index.txt\"},{\"country\":\"IT\",\"url\":\"https://cdn.erouska.cz/efgs/it/index.txt\"},{\"country\":\"LV\",\"url\":\"https://cdn.erouska.cz/efgs/lv/index.txt\"}]</value>\n    </entry>\n    <entry>\n        <key>v2_howItWorksEvalContent</key>\n        <value>eRoušky riziková setkání vyhodnotí v případě, že byly s nakaženým v kontaktu na vzdálenost bližší než 2 metry a po dobu alespoň 7 minut od okamžiku, kdy byl podle dostupných informací nakažlivým.</value>\n    </entry>\n    <entry>\n        <key>v2_ragnarokHeadline</key>\n        <value>Pomoc eRoušky v boji s pandemií je u konce</value>\n    </entry>\n    <entry>\n        <key>v2_ragnarokMoreInfo</key>\n        <value>https://erouska.cz</value>\n    </entry>\n    <entry>\n        <key>v2_ragnarokBody</key>\n        <value>Děkujeme, že jste se stali součástí sítě 1,7 miliónu lidí. Pomohli jste ochránit své okolí rozesláním více než 400 tisíc upozornění na riziková setkání s nakaženými. Oznámení o rizikovém kontaktu vypneme a váš telefon již nebude hledat rizikové kontakty. eRouška je neaktivní a v případě jejího obnovení vám pošle oznámení.</value>\n    </entry>\n    <entry>\n        <key>v2_ragnarok</key>\n        <value>true</value>\n    </entry>\n</defaultsMap>\n"
  },
  {
    "path": "app/src/main/res/xml-sk/remote_config_defaults.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<defaultsMap>\n    <entry>\n        <key>v2_reportTypeWeights</key>\n        <value>1;1;1;1;1;1</value>\n    </entry>\n    <entry>\n        <key>v2_infectiousnessWeights</key>\n        <value>0;0.6;2.0</value>\n    </entry>\n    <entry>\n        <key>v2_attenuationBucketThresholdDb</key>\n        <value>55;70;80</value>\n    </entry>\n    <entry>\n        <key>v2_attenuationBucketWeights</key>\n        <value>2.0;1;0.25;0</value>\n    </entry>\n    <entry>\n        <key>v2_minimumWindowScore</key>\n        <value>420</value>\n    </entry>\n    <entry>\n        <key>v2_covidDataServerUrl</key>\n        <value>https://europe-west1-erouska-key-server-dev.cloudfunctions.net</value>\n    </entry>\n    <entry>\n        <key>v2_minGmsVersionCode</key>\n        <value>203019000</value>\n    </entry>\n    <entry>\n        <key>v2_keyImportDataOutdatedHours</key>\n        <value>99999999</value>\n    </entry>\n    <entry>\n        <key>v2_riskyEncountersTitleAn</key>\n        <value>Naposledy %1$s ste sa stretli s osobou, u ktorej bolo potvrdené ochorenie COVID-19.</value>\n    </entry>\n    <entry>\n        <key>v2_keyImportPeriodHours</key>\n        <value>6</value>\n    </entry>\n    <entry>\n        <key>v2_keyExportUrl</key>\n        <value>https://cdn.erouska.cz/</value>\n    </entry>\n    <entry>\n        <key>v2_recentExposuresUITitle</key>\n        <value>Predchádzajúce rizikové stretnutia</value>\n    </entry>\n    <entry>\n        <key>v2_spreadPreventionUITitle</key>\n        <value>Zásady zodpovedného správania</value>\n    </entry>\n    <entry>\n        <key>v2_symptomsUITitle</key>\n        <value>Hlavné príznaky</value>\n    </entry>\n    <entry>\n        <key>v2_exposureUITitle</key>\n        <value>Rizikové stretnutie</value>\n    </entry>\n    <entry>\n        <key>v2_chatBotLink</key>\n        <value>https://erouska.cz/caste-dotazy</value>\n    </entry>\n    <entry>\n        <key>v2_noEncounterBody</key>\n        <value>Na rizikové stretnutie vás upozorníme pomocou oznámenia.</value>\n    </entry>\n    <entry>\n        <key>v2_noEncounterHeader</key>\n        <value>V posledných 14 dňoch nebola vo vašej blízkosti žiadna osoba s potvrdeným ochorením COVID-19</value>\n    </entry>\n    <entry>\n        <key>v2_conditionsOfUseUrl</key>\n        <value>https://erouska.cz/podminky-pouzivani</value>\n    </entry>\n    <entry>\n        <key>v2_riskyEncountersWithoutSymptoms</key>\n        <value>Ak sa u vás neprejavujú hlavné príznaky ochorenia COVID-19, nemusíte zostávať doma. Dodržiavajte zásady zodpovedného správania a sledujte svoj zdravotný stav.</value>\n    </entry>\n    <entry>\n        <key>v2_riskyEncountersWithSymptoms</key>\n        <value>Ak sa u vás v priebehu 14 dní od kontaktu s nakazeným objavili príznaky respiračného ochorenia, kontaktujte telefonicky svojho praktického lekára a riaďte sa jeho pokynmi. V prípade závažných zdravotných ťažkostí volajte 155.</value>\n    </entry>\n    <entry>\n        <key>v2_riskyEncountersTitle</key>\n        <value>Dňa %@ ste sa stretli s osobou, u ktorej bolo potvrdené ochorenie COVID-19.</value>\n    </entry>\n    <entry>\n        <key>v2_contactsContentJson</key>\n        <value>[{\"title\":\"Máte podozrenie na ochorenie COVID-19?\",\"text\":\"Zostaňte doma a telefonicky kontaktuje svojho praktického lekára.\",\"linkTitle\":\"Dôležité kontakty\",\"link\":\"https://koronavirus.mzcr.cz/dulezite-kontakty-odkazy/\"},{\"title\":\"Potrebujete poradiť?\",\"text\":\"Odpovede na všetky otázky a nejasnosti týkajúce sa ochorenia COVID-19 nájdete na webe MZČR.\",\"linkTitle\":\"Často kladené otázky\",\"link\":\"https://koronavirus.mzcr.cz/\"},{\"title\":\"Podpora aplikácie\",\"text\":\"Potrebujete poradiť s aplikáciou? Napíšte nám e-mail.\",\"linkTitle\":\"Napísať e-mail\",\"link\":\"mailto:info@erouska.cz\"},{\"title\":\"O aplikácii eRouška\",\"text\":\"Zaujíma vás, ako aplikácia funguje? Pozrite sa na web erouska.cz.\",\"linkTitle\":\"Prejsť na web erouska.cz\",\"link\":\"https://erouska.cz\"}]</value>\n    </entry>\n    <entry>\n        <key>v2_preventionContentJson</key>\n        <value>{\"title\":\"COVID-19 sa prenáša hlavne kvapôčkami, ktoré sa šíria vzduchom. Prenášať sa môže tiež kontaminovanými predmetmi.\",\"items\":[{\"iconUrl\":\"https://erouska.cz/img/prevention/ic_clean_hands.png\",\"label\":\"Často a dôkladne si umývajte ruky mydlom a používajte dezinfekciu.\"},{\"iconUrl\":\"https://erouska.cz/img/prevention/ic_disinfenction.png\",\"label\":\"Pravidelne dezinfikujte tiež osobné predmety (napr. mobilný telefón).\"},{\"iconUrl\":\"https://erouska.cz/img/prevention/ic_tissue.png\",\"label\":\"Kašľajte a kýchajte do jednorázovej vreckovky či rukáva.\"},{\"iconUrl\":\"https://erouska.cz/img/prevention/ic_social_distance.png\",\"label\":\"Vyhýbajte sa veľkým skupinám osôb a udržujte bezpečný odstup (cca 2 metre).\"},{\"iconUrl\":\"https://erouska.cz/img/prevention/ic_mask.png\",\"label\":\"Do obchodov a hromadných dopravných prostriedkov vždy noste ochranu dýchacích ciest podľa aktuálnych opatrení.\"},{\"iconUrl\":\"https://erouska.cz/img/prevention/ic_stay_home.png\",\"label\":\"Ak cítite príznaky respiračného ochorenia, zostaňte doma a kontaktujte lekára.\"}]}</value>\n    </entry>\n    <entry>\n        <key>v2_symptomsContentJson</key>\n        <value>{\"title\":\"Príznaky sa môžu objaviť 2-14 dní po rizikovom stretnutí.\",\"items\":[{\"iconUrl\":\"https://erouska.cz/img/symptoms/ic_temperature.png\",\"label\":\"Zvýšená teplota\"},{\"iconUrl\":\"https://erouska.cz/img/symptoms/ic_cough.png\",\"label\":\"Kašeľ\"},{\"iconUrl\":\"https://erouska.cz/img/symptoms/ic_stuffiness.png\",\"label\":\"Dušnosť\"},{\"iconUrl\":\"https://erouska.cz/img/symptoms/ic_throatache.png\",\"label\":\"Bolesť v krku\"},{\"iconUrl\":\"https://erouska.cz/img/symptoms/ic_headache.png\",\"label\":\"Bolesť hlavy, svalov a kĺbov\"},{\"iconUrl\":\"https://erouska.cz/img/symptoms/ic_smelltaste.png\",\"label\":\"Strata čuchu a chuti\"}]}</value>\n    </entry>\n    <entry>\n        <key>v2_encounterWarning</key>\n        <value>Stretli ste sa s osobou, u ktorej bolo potvrdené ochorenie COVID-19. Sledujte svoj zdravotný stav.</value>\n    </entry>\n    <entry>\n        <key>v2_verificationServerApiKey</key>\n        <value>4AP6RHk5VlNi7WIhj4ZupI9JZODdUyrPGb1C2mDYKo4cuaGIHdYtOhjyoqhg4vB5r7FDijxnySLb_1CUH6XdDA.1.oZLaUuVOPbvEaiWnzkQxasWlD_71iSTeM9aAIOKrfqhg5QO68t004CKxWutYmfISc7vqJe6uY2dRrt34OFkliw</value>\n    </entry>\n    <entry>\n        <key>v2_helpMarkdown</key>\n        <value># Najčastejšie problémy\\n## Android: Základné odporúčania pri riešení problémov s aplikáciou\\nAk vám aplikácia zobrazuje chybovú hlášku, skontrolujte prosím najskôr, či máte nainštalované aktualizácie operačného systému ( [postup aktualizácie Androidu](https://support.google.com/android/answer/7680439) ) a nepoužívate ich beta verziu.\\n\\nĎalej prosím skontrolujte v obchode [Google Play (Android)](https://play.google.com/store/apps/details?id=cz.covid19cz.erouska), či nie je pre eRoušku dostupná nová aktualizácia.\\n\\nOdporúčame tiež povoliť automatické aktualizácie aplikácie eRouška. [Postup pre Android tu:](https://support.google.com/googleplay/answer/113412#autoone) Spustite aplikáciu Obchod Google Play, kliknite na ponuku Moje aplikácie a hry → Vyberte aplikáciu, ktorú chcete aktualizovať → kliknite na ikonu možností a kliknite na Aktivovať automatické aktualizácie.\\n\\n## Android: Nejde aktivovať eRouška. Chyba aktivácie 17 (Exposure Notification API nie je k dispozícii).\\nPre vyriešenie chyby na Android zariadeniach, skúste, prosím, postupovať takto:\\n\\n1.  Skontrolujte, či ste _hlavný užívateľ_ zariadenia, či máte v telefóne služby Play a či je k dispozícii _Nastavenia → Google → Oznámenie o možnom kontakte (COVID-19 Exposure Notifications)_ .\\n2.  Odinštalujte eRoušku.\\n3.  Vymažte vyrovnávaciu pamäť a dáta u Google Play Services a Obchodu Play ([postup tu, viď kroky 2 a 3](https://support.google.com/googleplay/answer/9037938) ).\\n4.  Nainštalujte eRoušku a zapnite opäť _Oznámenia o možnom kontakte COVID-19_ .\\n\\nAk sa vám aj napriek aktualizácii systému, aplikácie a uvedených krokov naďalej objavuje chyba aktivácie, je bohužiaľ možné, že vaše zariadenie ešte nepodporuje Bluetooth LE (Low Energy Advertising), nepodporuje Bluetooth Multiple Advertisement, nie je autorizované Googlom pre Exposure Notifications alebo vôbec nemá Exposure Notifications API.\\n\\n# Pripojenie a prenos dát\\n## Musím mať Bluetooth zapnutý neustále?\\nÁno. Bez zapnutého Bluetooth nie je možné zisťovať blízkosť ďalších zariadení s nainštalovanou aplikáciou eRouška. Túto funkciu máte zapnutú možno aj teraz, napríklad v prípade, že používate bezdrôtové slúchadlá, pripojenie v aute, smart náramok alebo hodinky. V nastavení Bluetooth vášho telefónu / tabletu navyše odporúčame povoliť, aby bol _viditeľný pre všetky zariadenia_ .\\n\\n## Potrebuje aplikácia pripojenie k internetu?\\nPripojenie k internetu je nutné pre stiahnutie (inštaláciu) a aktiváciu eRoušky. Ďalej je potrebné, aby si eRouška mohla každý deň sťahovať aktuálny zoznam anonymných identifikátorov nakazených užívateľov, a zobraziť tak včas prípadnú notifikáciu o rizikovom stretnutí.\\n\\nAk by u vás test potvrdil nákazu COVID-19 a vy by ste chceli anonymne upozorniť ostatných na možný rizikový kontakt, bolo by opäť potreba eRoušku pripojiť k internetu. Dovtedy sú vaše dáta uložené iba vo vašom telefóne, odkiaľ sa samy odmazávajú po 14 dňoch. Aplikácia využíva pripojenie k internetu aj na stiahnutie informácií o aktuálnom vývoji epidémie COVID-19 v ČR, ktoré zobrazuje na stránke _Aktuálne_ .\\n\\n## Ako často si aplikácia aktualizuje dáta z internetu?\\nKľúče (identifikátory) nakazených užívateľov si eRouška sťahuje niekoľkokrát denne. Štatistiky nakazených osôb na obrazovke Aktuálne sa aktualizujú raz denne.\\n\\n## Ako veľký objem mobilných dát eRouška denne spotrebuje?\\nV prípade zapnutého _Upozornenia na zahraničné riziková stretnutí_ eRouška sťahuje tiež kľúče všetkých nakazených užívateľov z ostatných štátov EÚ. Objem stiahnutých dát sa v takom prípade môže pohybovať až okolo 2 MB denne.\\n\\nAj v prípade vypnutého _Upozornenia na zahraničné rizikové stretnutia_ eRouška sťahuje približne 1 MB denne. Nová verzia aplikácie sťahuje nielen kľúče nakazených užívateľov eRoušky, ale aj kľúče nakazených užívateľov z ostatných štátov EÚ, ktorí vo svojich aplikáciách uviedli, že cestujú do zahraničia, takže ich užívateľ eRoušky potenciálne mohol stretnúť aj v Českej republike\\n\\nSúbory kľúčov nakazených užívateľov sa sťahujú postupne, 2-3× denne. Pre porovnanie, načítanie priemernej stránky spravodajstva vyžaduje 1-5 MB dát. **Aplikácia nepotrebuje nutne mobilné dátové pripojenie.** Dáta si stiahne sama aj na Wi-Fi.\\n\\n## Android: Prečo je potrebné mať povolený prístup k GPS/lokalizačným/lokačným údajom?\\n**Aktualizácia pre užívateľov Android 11:** V najnovšej verzii operačného systému Android už nemusíte pre fungovanie eRoušky povoľovať služby určovania polohy.\\n\\nAplikácia eRouška nezbiera a neukladá dáta z GPS, avšak operačný systém **Android 10 a staršie** zahŕňa pod určovanie polohy aj niektoré služby Bluetooth LE (LE = low energy), ktorý komponenty eRoušky - konkrétne Google Play Services - pre svoje fungovanie vyžadujú. Preto je nutný súhlas užívateľov s prístupom aplikácie k lokalizačným údajom. V iOS tento súhlas potrebný nie je. Prečo v telefóne musí byť zapnuté určovanie polohy, [vysvetľuje Google tu](https://support.google.com/android/answer/9930236) .\\n\\nInformáciu o vašej polohe môžu využívať aj iné aplikácie vo vašom zariadení. Ak chcete skontrolovať, ktoré aplikácie majú k nim prístup, prejdite do nastavení zariadenia a vyberte položky Zabezpečenie a poloha → Umiestnenie → Oprávnenie na úrovni aplikácie (prípadne nasledujte [postup od spoločnosti Google](https://support.google.com/accounts/answer/6179507?hl=cs)). Tu môžete iným aplikáciám odoprieť oprávnenie používať vašu polohu, keď si nemyslíte, že to potrebujú. Pretože eRouška toto oprávnenie nepotrebuje, nezobrazí sa v zozname.\\n\\n## Koľko zapnutý Bluetooth a aplikácia eRouška spotrebujú batérie?\\nAk už teraz používate telefón so stále zapnutým Bluetooth, spotreba energie by sa nemala výraznejšie zvýšiť. Ak Bluetooth teraz bežne nepoužívate, tak podľa výsledkov nášho testovania s neustále zapnutým Bluetooth a ukladaním dát do aplikácie bolo navýšenie dennej spotreby energie v ráde jednotiek percent. Vo väčšine prípadov to je menej ako 20% kapacity batérie za deň. Záleží pritom na konkrétnom smartfóne, jeho veku, štýlu jeho používania a stavu batérie.\\n\\nSpotrebu batérie spojenú s použitím aplikácie eRouška ovplyvňujú dva faktory. Po prvé samotný beh aplikácie a po druhé využitie systémovej funkcie Oznámenie o kontaktoch s nákazou, ktorá priebežne zaznamenáva stretnutia s používateľmi v okolí. Systémovú funkciu zabezpečuje OS Android alebo iOS, preto jej optimalizácia záleží na aktualizáciách zo strany spoločností Apple a Google.\\n\\nPri interpretácii spotreby batérie zo štatistík v nastaveniach telefónu berte prosím do úvahy, že toto percento zodpovedá plnému využitiu vášho telefónu za posledných 24 hodín (percentuálny podiel behu medzi ostatnými aplikáciami). To znamená, že u málo využívaného telefónu môže byť percento pri Kontaktoch s nákazou / aplikácii eRouška vysoké, u intenzívne využívaných telefónov naopak nízke. Nejde teda priamo o percento spotreby batérie.\\n\\n**Android: Poznámka k povoleniu lokalizačných služieb:** Bluetooth zariadenia vo vašej blízkosti sa dá detekovať, len ak je v telefóne aktivovaná možnosť \"Použiť polohu\". (Podrobnosti nájdete v odseku [Prečo v telefóne musí byť zapnuté určovanie polohy? Na webe Googlu](https://support.google.com/android/answer/9930236?hl=cs) .) To znamená, že informáciu o vašej polohe môžu využívať aj iné aplikácie vo vašom zariadení, čo môže byť dôvodom vyššej spotreby batérie. Preto, prosím, skontrolujte, ktoré aplikácie používajú vašu polohu. Prejdite do nastavení [zariadenia a vyberte položky Zabezpečenie a poloha → Umiestnenie → Oprávnenie na úrovni aplikácie (prípadne nasledujte](https://support.google.com/android/answer/9930236?hl=cs) [postup od spoločnosti Google](https://support.google.com/accounts/answer/6179507?hl=cs) ). Tu môžete iným aplikáciám odoprieť oprávnenie používať vašu polohu, keď si nemyslíte, že to potrebujú. Pretože eRouška toto oprávnenie nepotrebuje, nezobrazí sa v zozname.\\n\\n## Je možné, že sa mi po zapnutí eRoušky spomalilo Wi-Fi / pripojenie k internetu?\\nPri niektorých modeloch mobilov s OS Android je bohužiaľ známe, že vysielanie Bluetooth môže čiastočne negatívne ovplyvňovať signál Wi-Fi a naopak.\\n\\n## Môže eRouška spôsobovať problémy s ďalšími aplikáciami alebo zariadeniami / perifériami (slúchadlá, hodinky, náramok), ktoré používajú Bluetooth?\\nVo výnimočných prípadoch nám niektorí užívatelia hlásia neštandardné správanie ich Bluetooth periférií po tom, čo nainštalovali aplikáciu eRouška. Napr. môže dochádzať k prerušovaniu spojenia - typicky u smart hodiniek či náramkov, bezdrôtových slúchadiel alebo handsfree sád. S najväčšou pravdepodobnosťou ide o problém funkcií operačného systému, na ktoré bohužiaľ nemáme vplyv.\\n\\nSkúste prosím nsledujúci postup:\\n\\n1.  Reštartujte telefón.\\n2.  Zrušte spárovanie s Bluetooth zariadením a znovu ho pripojte.\\n\\nAk kroky vyššie nepomôžu, kontaktujte prosím výrobcu zariadenia:\\n\\n*   Android: [Podpora výrobcov zariadení](https://support.google.com/android/answer/3094742?hl=cs&amp;ref_topic=7313011)\\n\\n## Prečo aplikácia používa zrovna Bluetooth? Neexistujú lepšie riešenia ako GPS alebo triangulácia od operátorov?\\nSúkromie užívateľov je pre nás na prvom mieste, a práve technológia Bluetooth ponúka najvyváženejší pomer presnosti záznamu a minimálneho zásahu do súkromia. Technológia GPS ani triangulácie vysielačov od operátorov nemôžu poskytnúť potrebné údaje s požadovanou presnosťou. Okrem iného aj preto, že ich funkčnosť je vo vnútorných priestoroch či metra veľmi obmedzená. Aplikácia eRouška potrebuje pre svoju funkciu informácie o tom, že došlo k stretnutiu, na akú vzdialenosť a po akú dobu. Nie je dôležité, kde k stretnutiu došlo.\\n\\n## Je Bluetooth dostatočne bezpečná technológia?\\nBluetooth je dnes bežne rozšírená a podporovaná komunikačná technológia na prepojenie zariadení s ďalšími perifériami, ako sú bezdrôtové slúchadlá, reproduktory, smart náramky alebo hodinky. Vzhľadom k tomu, že spoločnosti Apple a Google vytvorili spoločný protokol určený výhradne pre národné aplikácie, ktoré trasujú rizikové stretnutia s nakazenými COVID-19 na základe Bluetooth LE, sme presvedčení, že sme pre eRoušku zvolili správne. Je však potrebné povedať, že úplne každá technológia je zraniteľná. Aj preto všetkým užívateľom odporúčame, aby operačný systém a aplikácie vo svojom telefóne pravidelne aktualizovali. Aktualizácie totiž môžu obsahovať dôležité bezpečnostné záplaty.\\n\\n# Všeobecné informácie\\n## Ako mám postupovať, ak mi aplikácia zobrazila upozornenie na rizikové stretnute s nakazeným užívateľom?\\nAk máte príznaky choroby (napríklad zvýšenú teplotu, kašeľ, dýchavičnosť, bolesť hrdla, bolesť hlavy, náhlu stratu čuchu a chuti), telefonicky kontaktujte svojho praktického lekára. V prípade, že je váš stav naozaj akútny, volajte rýchlu záchrannú službu 155, prípadne linku integrovaného záchranného systému 112. Uvedené príznaky sa môžu objaviť 2 až 14 dní po rizikovom stretnutí.\\n\\nAk nemáte žiadne príznaky, správajte sa, prosím, zodpovedne:\\n\\n*   Noste rúško či respirátor cez ústa a nos.\\n*   Často a dôkladne si umývajte ruky vodou a mydlom alebo používajte dezinfekciu.\\n*   Pravidelne dezinfikujte vlastné predmety (napr. mobilný telefón).\\n*   Kašlite a kýchajte do vreckovky či rukávu.\\n*   Používajte jednorázové vreckovky a potom ich vyhoďte.\\n*   Vyhýbajte sa zbytočnému zhromažďovaniu a dodržujte bezpečný odstup od ostatných (približne 2 metre).\\n\\nPokiaľ po notifikácii eRoušky máte vážne podozrenie na rizikové stretnutie, kontaktujte svojho praktického lekára a riaďte sa jeho pokynmi. Je tiež možné, že vás bude v blízkej dobe kontaktovať pracovník hygienickej služby na základe epidemiologického vyšetrenia s konkrétnym nakazeným. V takom prípade postupujte podľa pokynov hygienickej služby.\\n\\nAk by sa v priebehu 14 dní od rizikového stretnutia váš zdravotný stav zhoršil a objavili sa u vás príznaky ochorenia COVID-19, kontaktujte svojho praktického lekára.\\n\\n## Ako mám postupovať, keď mám pozitívny výsledok testu na COVID-19 alebo mi prišla SMS eRoušky s overovacím kódom?\\nAk vám prišla SMS z laboratória s pozitívnym výsledkom testu na COVID-19, mala by vám do niekoľkých hodín prísť tiež SMS eRoušky s overovacím kódom pre odoslanie dát. SMS eRoušky sa odosielajú automatizovane po zapísaní výsledku testov do informačného systému. Okamih, kedy laboratórium odovzdá výsledky do informačného systému, nedokážu automatizované procesy Chytrej karantény ovplyvniť.\\n\\nAkonáhle vám príde SMS eRoušky s overovacím kódom, [postupujte, prosím, podľa tohto návodu](https://erouska.cz/sk/sms) . Uvedený postup vám umožní anonymne informovať ostatných užívateľov o prípadnom rizikovom stretnutí. Ďakujeme.\\n\\nMáte pozitívny test a neprišla vám SMS eRoušky? Napíšte si o nový kód na [info@erouska.cz](mailto:info@erouska.cz?subject=).\\n\\n## To budem musieť zakaždým automaticky do karantény alebo na testy, keď aplikácia zahlási, že som bol v kontakte s niekým nakazeným?\\nNie, aplikácia eRouška je plne anonymná, jej použitie je úplne dobrovoľné a upozornenie na možný rizikový kontakt s nakazeným nie je dôvod pre nariadenie karantény. Ak u niekoho test potvrdí nákazu, kontaktuje ho hygienická stanica, aby zistila, s kým bol v posledných dňoch v rizikovom kontakte, a mohla tak obmedziť ďalšie šírenie. Keď tento človek používa aplikáciu eRouška, môže kontaktovať aj tých, ktorých nepozná, pretože s nimi napríklad cestoval v autobuse. Zadaním unikátneho kódu môže poslať upozornenie všetkým ostatným používateľom aplikácie eRouška, s ktorým bol v epidemiologicky rizikovom kontakte.\\n\\nV okamihu, keď vás aplikácia upozorní, že ste sa stretli s osobou, u ktorej bolo preukázané ochorenie COVID-19, by ste mali postupovať podľa zobrazených odporúčaní a v prípade zdravotných ťažkostí bez odkladu kontaktovať svojho praktického lekára.\\n\\n## Spozná eRouška, keď poruším lekárom nariadenú karanténu alebo keď napríklad pôjdem na chatu?\\nAplikácia nesleduje vašu polohu, nie je to jej účel a ani pre to nie je navrhnutá. Nespozná teda, či ste porušili karanténne opatrenie alebo kam ste odišli. Má naopak pomôcť k tomu, aby v karanténe boli iba osoby s diagnostikovaným ochorením alebo s vážnym podozrením nákazy.\\n\\n## Môže mi eRouška miesto lekára vystaviť práceneschopnosť? Je upozornenie na možné rizikové stretnutie dôvod pre pracovnú neschopnosť?\\nNemôže, nie je. Ak vám eRouška zobrazila varovanie, postupujte podľa zobrazených odporúčaní. Upozornenie na možný rizikový kontakt nijako nenahrádza správu od vášho lekára alebo laboratória, ktorá vyhodnotí váš test na COVID-19. Iba lekár vám vystaví platné dokumenty, ktoré predložíte svojmu zamestnávateľovi.\\n\\n## Prečo je eRouška potrebná? Dokáže ma vôbec efektívne chrániť pred nákazou?\\nJednou z úloh eRoušky je zastaviť ďalšie šírenie nákazy tým, že pomáha čo najskôr izolovať potenciálne nakazené osoby od ostatných. Vďaka tomu potom nie je nutné zavádzať plošnú karanténu a obmedzenia, čo umožňuje znižovať dopady pandémie na spoločnosť a ekonomiku ČR. Aplikácie na podobnom princípe fungujú aj v ďalších štátoch a sú účinným prostriedkom v boji proti šíreniu choroby COVID-19.\\n\\nAplikácia eRouška 2.0 je doplnkovou aplikáciou Chytrej karantény - systému ministerstva zdravotníctva. Prostredníctvom technológie Bluetooth sa eRouška spája s ďalšími eRouškami v najbližšom okolí a ukladá ich anonymné identifikátory. Ak sa u človeka preukáže nákaza COVID-19, spojí sa s ním pracovník hygienickej stanice a overí, či osoba používa aplikáciu eRouška. Ak áno, pošle jej overovací SMS kód, ktorý užívateľovi umožní odoslať svoje anonymné identifikátory do ostatných eRoušek. Aplikácia ostatných užívateľov potom podľa epidemiologického modelu \\* čo najpresnejšie vyhodnotí, či títo používatelia prišli s nakazeným do kontaktu dosť blízko a na dostatočne dlhú dobu, aby bolo nutné ich prostredníctvom notifikácie v smartfóne varovať a smerovať k ďalšiemu vyšetreniu. eRouška 2.0 teda pomáha čo najefektívnejšie informovať ďalších potenciálnych prenášačov vírusu a urýchliť ich testovanie. Tým sa zníži počet infikovaných v spoločnosti aj riziko vašej infekcie.\\n\\n_\\*Bližšie ako 2 metre po dobu dlhšiu ako 7 min._\\n\\n## Čo ak niekto neprizná, že je chorý?\\nAj to sa môže stať. Veríme však, že používatelia eRoušky chcú aktívne pomáhať so zastavením ďalšieho šírenia nákazy a aplikáciu využijú, aby mohli čo najskôr varovať osoby, s ktorými prišli do rizikového kontaktu. **Zámerné šírenie COVID-19 je v ČR považované za trestný čin.**\\n\\n## Má zmysel si eRoušku inštalovať, keď ju nebude používať dosť ľudí?\\nPráve preto by ste nemali váhať. Čím viac nás bude eRoušku používať, tým lepšie vytvoríme sieť, ktorá nás bude vzájomne chrániť a varovať pred rizikom. Pomôžte nám aj vy. Inštaláciou aplikácie sa môžete aktívne zapojiť do boja proti COVID-19. O aplikácii môžete povedať aj ľuďom vo svojom okolí, prípadne im s ich súhlasom pomôcť s inštaláciou.\\n\\n## Ako sa eRouška líši od iných podobných aplikácií?\\neRouška používa technológiu Bluetooth, ktorou je vybavená väčšina chytrých mobilných zariadení v Česku. Vďaka tomu funguje aj v budovách, podzemných parkoviskách alebo v metre. Aplikácia je navrhnutá tak, aby nezbierala informácie o vašej polohe (napr. cez GPS). Iba anonymne zisťuje, s ktorými ďalšími používateľmi aplikácie ste prišli do bližšieho kontaktu. Ako jediná v ČR môže oficiálne používať Apple / Google protokol, ktorý garantuje bezpečnosť aplikácie na platformách Android a iOS a znižuje spotrebu batérie.\\n\\n## Čo je to chytrá karanténa? Akú v nej hrá úlohu eRouška?\\nIde o súbor chytrých opatrení, ktoré chránia ľudí pred nákazou a ekonomiku pred kolapsom. Namiesto toho, aby bola v karanténe celá krajina, chytrá karanténa uľahčuje dohľadávanie, testovanie a izoláciu len chorých a z choroby dôvodne podozrivých ľudí.\\n\\nKonkrétne ide o systém riadenia v oblastiach predpovedi vývoja, podpory rozhodovania, aktívneho vyhľadávania kontaktov, testovania vr. riadenia kapacít odberových miest, laboratórií, riadenia karantén a súvisiaceho materiálneho a IT zabezpečenia na zvládnutie pandémie ochorenia COVID-19. Chytrá karanténa 2.0 je označením pre prechod projektu pod Ministerstvo zdravotníctva, ktoré bude vďaka novým nástrojom vedieť do budúcna kedykoľvek veľmi rýchlo reagovať na akékoľvek epidémie.\\n\\nAplikácia eRouška je jeden z nástrojov, ktoré vznikli na podporu chytrej karantény. Pomocou technológií - eRoušky - môžeme aktívne upozorniť rizikových jedincov, ktorí sa stretli s nakazeným, aby zvýšili hygienické opatrenia, zvážili dobrovoľnú karanténu, prípadne pri pociťovaní príznakov kontaktovali obvodného lekára. Vďaka týmto krokom veríme, že sa podarí zmierniť šírenie nákazy a ušetriť zdravotníctvo fatálneho preťaženia.\\n\\n# Pokročilé informácie o eRouške\\n## Ako eRouška zaznamenáva a spracováva dáta o stretnutiach užívateľov?\\nChytrý telefón s aplikáciou eRouška zaznamená cez Bluetooth LE anonymné identifikátory (ID) z iných zariadení s touto aplikáciou. Informáciu o \"stretnutí\" a jeho dĺžke ukladá do svojej vnútornej pamäte.\\n\\nV prípade, že budete mať pozitívny výsledok testu na COVID-19, príde vám jednorázový SMS kód. Zadáte ho do aplikácie ( [postup tu](https://erouska.cz/sk/sms) ), a tým umožníte odoslanie svojich anonymných identifikátorov na server, odkiaľ si ich stiahnu ostatné eRoušky na vyhodnotenie. Algoritmus v aplikácii každého užívateľa na základe epidemiologického modelu automatizovane vyhodnotí zozbierané dáta - porovná identifikátory so všetkými zaznamenanými stretnutiami. V prípade rizikového kontaktu zobrazí upozornenie, že hrozí nákaza kvôli stretnutiu s pozitívne testovanou osobou, a odporučí ďalší postup.\\n\\nPodrobné informácie o zbere a spracovaní dát, nájdete v [Informáciách o spracování osobných údajov v aplikácii eRouška 2.0](https://erouska.cz/sk/podminky-pouzivani).\\n\\n## Ako eRouška vyhodnocuje rizikové stretnutia?\\nPôvodne epidemiológovia stanovili rizikový kontakt ako stretnutie, ktoré je vo vzdialenosti bližšie ako 2 metre po dobu aspoň 15 minút. Agresívnejšie šírenie nových mutácií koronavírusu však ukazuje, že k nákaze stačí aj kratší kontakt.\\n\\nNa vyššiu agresivitu šírenia mutácií reagujeme po konzultáciách postupu s Apple/Google a ostatnými krajinami EÚ postupným uvoľňovaním parametrov vyhodnotenia rizikového kontaktu. Zmeny parametrov prebiehajú už od začiatku marca, priebežne vyhodnocujeme ich vplyv na počet nájdených kontaktov. Zatiaľ upravujeme predovšetkým parametre zodpovedajúce dĺžke stretnutia, aktuálne ide približne o 7 minút.\\n\\nAplikácia eRouška sa snaží parametre vzdialenosti a času stretnutia vyhodnocovať čo najpresnejšie dostupnými technológiami. Vzdialenosť medzi používateľmi, respektíve ich telefónmi, sa odhaduje na základe sily signálu Bluetooth. Doba stretnutia sa posudzuje podľa meracích okien - telefón v niekoľkominútových intervaloch zisťuje, či sú v okolí iné telefóny s eRouškou.\\n\\nPresnosť merania vyššie uvedených parametrov má preto technické obmedzenia. Čím väčšia vzdialenosť a čím kratší kontakt, tým ťažšie je jeho presné vyhodnotenie. Uvoľňovanie parametrov vyhodnotenia tak zvyšuje pravdepodobnosť falošnej pozitivity a falošnej negativity.\\n\\nVyššiu presnosť merania možno dosiahnuť častejším vysielaním a zaznamenávaním ďalších zariadení s eRouškou v okolí. To sa bohužiaľ premietne do vyššej spotreby batérie. Algoritmy merania nastavujú Apple a Google vo svojom Exposure Notification protokole, na ktorom je eRouška postavená. Vývojári eRoušky môžu iba čiastočne upravovať niektoré parametre a vykonávať doplňujúce filtrovanie výsledkov. Bližšie vysvetlenie nájdete v sekcii [Spôsob vyhodnotenia](https://erouska.cz/sk/vyhodnoceni-rizika) .\\n\\n## Ako eRouška reaguje na nové varianty / mutácie vírusu?\\nNové varianty vírusov, ktoré sa objavili od začiatku pandémie, priebežne skúmajú odborníci z pohľadu infekčnosti a vplyvov na zdravie. Preto sú vývojári eRoušky v úzkom kontakte s úradmi aj so spoločnosťami Apple a Google, ktoré poskytujú protokol pre vyhodnocovanie kontaktov s nákazou, aby v prípade zmeny rizika infekcie na základe nových poznatkov mohli upraviť algoritmus pre výpočet v aplikácii.\\n\\n## Nemôže sa stať, že eRouška mylne vyhodnotí kontakt s inou osobou, ktorá je napríklad vedľa v aute na križovatke, za dverami alebo tenkou stenou?\\nAplikácia eRouška funguje na princípe merania sily signálu medzi dvoma zariadeniami. Technicky preto nemožno vylúčiť nepresný odhad vzdialenosti a mylnú detekciu rizikového stretnutia. Technické obmedzenia, riziká používania aplikácie a postup vyhodnocovania stretnutia popisujeme na stránke [Spoľahlivosť vyhodnotenia rizikového kontaktu](https://erouska.cz/sk/vyhodnoceni-rizika) a v sekcii [Technické podmienky v Podmienkach spracovania](https://erouska.cz/sk/podminky-pouzivani#technicke) .\\n\\nNa vyhodnotenie kontaktu ako rizikového je okrem vzdialenosti (do 2 m) relevantná tiež dĺžka kontaktu (aspoň 15 minút) - napr. zastavenie na semaforoch na 1-2 minúty je teda nevýznamné.\\n\\n## Zobrazilo sa mi upozornenie na možné stretnutie s nakazeným, ale eRouška po otvorení ukazuje, že nezaznamenala nikoho nakazeného v mojom okolí.\\nAk vás prekvapilo oznámenie s červenou ikonkou vírusu a textom Oznámenie o možnom kontakte (Android) alebo Zaznamenanie kontaktov (iOS), nemusíte sa obávať. Ide len o systémové oznámenia Androidu a iOS, na ktoré nemá eRouška vplyv. Ako vyzerá skutočné oznámenie eRoušky nájdete [na tomto obrázku](https://www.facebook.com/eRouska/posts/180938253548928).\\n\\nAk by ste mali rizikový kontakt s nakazenou osobou, zistíte to priamo na hlavnej obrazovke eRoušky.\\n\\nAk ste predtým skutočne videli rizikové stretnutie priamo v eRouške, odkiaľ zmizlo, je možné, že aktualizáciou aplikácie pre Android došlo k úprave parametrov vyhodnotenia rizikového kontaktu a teraz už eRouška nepovažuje dané stretnutie za rizikové.\\n\\n## Takže všetci budú vedieť, že mám COVID-19?\\nNebudú. Ak ochoriete, vaša totožnosť je známa len a len pracovníkovi hygienickej stanice. Osoby, ktorým sa zobrazí upozornenie na možný rizikový kontakt, sa nedozvadia, kto ani kde ich mohol nakaziť. Aplikácia zobrazuje len všeobecnú informáciu o rizikovom stretnutí s nakazeným, deň stretnutia a ďalší odporúčaný postup. Vaša identita je ochránená.\\n\\n## Bol som na testoch na COVID-19, ale stále mi neprišla SMS s overovacím kódom do eRoušky. Za ako dlho ju mám čakať?\\nNajprv by vám mal prísť výsledok testu v SMS od testovacieho laboratória. To výsledky súčasne odosiela do centrálneho informačného systému Ministerstva zdravotníctva. Po tom, čo sa informácie z informačného systému prepíšu do systému hygieny, sa odosielajú automatické SMS eRoušky s overovacími kódmi. Ak laboratórium nestihne odovzdať výsledky do informačného systému v rovnaký deň, môže vám SMS s overovacím kódom prísť až nasledujúci deň.\\n\\n**Skontrolujte, prosím, či info SMS eRoušky nezablokoval omylom systém ako spam**\\n\\n*   **Android:** V aplikácii Správy kliknite na ikonu možností (tri bodky) a ďalej na Spam a zablokované konverzácie (prípadne na tri bodky → Nastavenia → SIM → Spam). Ak je tu SMS eRoušky, kliknite na Nie je spam.\\n\\n**Ak vám SMS eRoušky neprišla ani nasledujúci deň** potom, čo vám prišla SMS s pozitívnymi výsledkami z laboratória, pošlite nám na [info@erouska.cz](mailto:info@erouska.cz?subject=) žiadosť o nový SMS kód. Uveďte prosím tieto informácie:\\n\\n*   celé meno, ktoré ste uviedli na žiadanke o test,\\n*   tel. číslo, ktoré ste uviedli na žiadanke o test,\\n*   dátum výsledku testov,\\n*   odberové miesto / laboratórium, z ktorého vám prišli výsledky testu,\\n*   typ testu (PCR / antigén).\\n\\n## Príde mi SMS s kódom do eRoušky, keď mám pozitívny antigénny test na COVID-19?\\nPokiaľ máte [pozitívny výsledok antigénneho testu a máte príznaky COVID-19](https://drive.google.com/file/d/1HPwtltNRuzmowjZgE_c1u-a8m3W89T-p/view) (uvádzate v žiadanke), príde vám SMS s kódom do eRoušky rovnako ako v prípade pozitívneho PCR testu.\\n\\nV prípade, že máte [pozitívny výsledok antigénneho testu, ale nepociťujete príznaky](https://covid.gov.cz/situace/antigenni-testovani/interpretace-vysledku-antigenniho-testu-jak-se-zachovat-po-obdrzeni) , pôjdete na PCR test. Na základe pozitívneho výsledku PCR testu by vám prišla SMS s kódom do eRoušky. V prípade negatívneho PCR testu neodosielate dáta z eRoušky.\\n\\n## V ktorých štátoch EÚ môžem eRoušku používať? Ako funguje spolupráca so zahraničnými aplikáciami?\\nEurópska komisia vyvinula centrálnu bránu EFGS pre bezpečnú výmenu informácií (\"brána pre zabezpečenie interoperability\"). Táto brána umožňuje aplikácii eRouška prijímať a odovzdávať si varovania so zapojenými trasovacím aplikáciami používanými v jednotlivých štátoch EÚ. Podrobné informácie o bráne sú k dispozícii na webe Európskej komisie v dokumente [Koronavírus: brána EÚ na zabezpečenie interoperability aplikácií pre vysledovanie kontaktov a varovaní - otázky a odpovede](https://ec.europa.eu/commission/presscorner/detail/cs/qanda_20_1905#gateway) .\\n\\nAk chcete zobraziť ďalšie informácie o zapojených štátoch a nastaveniach, kliknite na hlavnej obrazovke aplikácie na Cesty do zahraničia, kde môžete funkciu zapnúť/vypnúť a nižšie vidieť zoznam zapojených štátov. Oficiálny aktuálny zoznam zapojených štátov EÚ nájdete [na webe Európskej komisie.](https://ec.europa.eu/health/sites/health/files/ehealth/docs/gateway_jointcontrollers_en.pdf)\\n\\n## Používa eRouška Apple/Google API?\\nNová verzia - eRouška 2.0 pre Android aj iOS už používa Apple / Google Exposure Notification API. Nezabudnite preto prosím aplikáciu eRouška aktualizovať v [Google Play (Android)](https://play.google.com/store/apps/details?id=cz.covid19cz.erouska) alebo [App Store (iOS)](https://apps.apple.com/cz/app/erou%C5%A1ka/id1509210215) a znovu aktivovať.\\n\\n## Čo je to Apple/Google Exposure Notification API (protokol)?\\nSpoločnosti Apple a Google spoločne vyvíjajú technológie, vďaka ktorým môžu verejné zdravotné inštitúcie (u nás MZČR) vyvíjať národné aplikácie na trasovanie rizikových kontaktov s osobami s ochorením COVID-19.\\n\\nKonkrétne ide napríklad o rozhranie, ktoré daným aplikáciám (u nás eRouška) umožňuje spoľahlivo pristupovať k systémovým prostriedkom Android a Apple zariadení za účelom zaznamenanie stretnutia - najmä využívať Bluetooth LE na overenie kontaktu a bežať na pozadí bez potreby ďalších nastavení aplikácie alebo operačného systému. Šifrovaný komunikačný protokol potom zaisťuje zabezpečený prenos aktuálnych zoznamov identifikátorov nakazených užívateľov medzi trasovacími aplikáciami za účelom vyhodnotenia rizikového stretnutia a včasného zobrazenie notifikácie.\\n\\nBližšie informácie nájdete priamo na webových stránkach spoločností [Apple (anglicky)](https://www.apple.com/covid19/contacttracing) a [Google (česky)](https://www.google.com/covid19/exposurenotifications/).\\n\\n## Kde v eRouške nájdem informácie o zaznamenaných stretnutiach?\\nAplikácia eRouška 2.0 je postavená na Apple / Google Exposure Notification protokole, ktorý zaisťuje zabezpečené zaznamenávanie a vyhodnotenie stretnutí. Z bezpečnostných dôvodov však neposkytuje aplikácii priamy prístup k dátam o zaznamenaných stretnutiach.\\n\\nČi aplikácia funguje správne, sa dozviete na jej hlavnej obrazovke. Informácie o všetkých zaznamenaných stretnutiach s nakazenými užívateľmi sú uložené na úrovni systému. Tieto stretnutia však nemusela byť rizikové. Nájdete ich v Nastaveniach:\\n\\n*   Android: Nastavenia → Google → Oznámenia o možnom kontakte COVID-19\\n\\n## Čo znamenajú jednotlivé záznamy v Nastavenia → Kontrola kontaktov?\\nProtokolovanie kontaktov s nákazou ukazuje, koľko kľúčov od nakazených užívateľov sa stiahlo do vášho telefónu zo servera a koľko z nich zodpovedá kľúčom, ktoré váš telefón zaznamenal.\\n\\n**Kontroly kontaktov:** Tu sú dáta a časy jednotlivých stiahnutí kľúčov zo servera za posledné dva týždne. Pre ďalšiu kontrolu je potreba otvoriť jednotlivé záznamy.\\n\\n**Android: Počet kľúčov:** Ide o počet kľúčov od pozitívne testovaných používateľov. Tieto kľúče si váš telefón v danom dátume stiahol pre kontrolu možných kontaktov s nakazenými užívateľmi.\\n\\n**Android: Počet výsledkov** Ide o počet zhôd medzi stiahnutými kľúčmi a tými, ktoré zaznamenal váš telefón vo svojom okolí. Ak je číslo vyššie ako 0, tak ste sa stretli s nakazeným užívateľom. To však ešte neznamená, že nutne muselo ísť o rizikové stretnutie.\\n\\n**Časová značka:** Dátum a čas, kedy ku kontrole došlo. Nejde však o čas rizikového stretnutie (ten nie je k dispozícii kvôli ochrane súkromia užívateľov).\\n\\n**Zdroj údajov:** Aplikácia, ktorá zaisťuje kontrolu a vyhodnotenie rizikových stretnutí.\\n\\n**Hašovací kód:** Kontrolný súčet súboru obsahujúceho stiahnutie kľúčov nakazených užívateľov. Kým sa obsah súboru nezmení, tak sa nezmení ani kontrolný súčet počas príslušného dvojtýždňového obdobia.\\n\\n## Ako zistím, že eRouška funguje na pozadí? Prečo na Androide nevidím ikonku eRoušky v záhlaví?\\nNotifikačnú ikonu sme odstránili, pretože zaznamenávanie a vyhodnocovanie stretnutia už zabezpečuje priamo Apple / Google protokol na úrovni operačného systému. Samotná aplikácia eRouška sa potom stará o sťahovanie kľúčov (identifikátory) nakazených užívateľov 1-2× denne a nemusí bežať permanentne na pozadí.\\n\\nŽe je aplikácia aktuálna, zistíte na hlavnej obrazovke. Stiahnutie kľúčov nakazených potom môžete overiť v Nastaveniach telefónu:\\n\\n*   **Android:** Nastavenia → Google → Oznámenia o možnom kontakte COVID-19 → kliknúť na tri bodky vpravo hore → Kontrola kontaktu\\n\\n## Prečo sa líši dátum a čas \"Poslednej aktualizácie dát\" na hlavnej obrazovke eRoušky a údaje a časy \"Kontroly kontaktov\", ktoré vidím v Nastaveniach telefónu?\\nAplikácia eRouška ukazuje na hlavnej obrazovke dátum a čas posledného úspešného pokusu o kontrolu nových kľúčov (identifikátory) nakazených používateľov na serveri. V Nastaveniach telefónu sa zobrazujú iba dátumy a časy, kedy boli naposledy nové kľúče nájdené a vyhodnotené v telefóne.\\n\\nKľúče nakazených užívateľov sa do telefónu sťahujú 1-2× denne.\\n\\n## Prečo v eRouške nevidím konkrétny čas rizikového stretnutia?\\nAplikácia eRouška je postavená na Apple / Google Exposure Notification protokolu, ktorý zaisťuje zaznamenávanie a vyhodnocovanie stretnutia na úrovni operačného systému. Apple / Google protokol poskytuje eRouške prístup len k dátumu rizikového stretnutia, bližšie informácie nie sú k dispozícii z dôvodu čo najvyššej ochrany súkromia používateľov.\\n\\n## Prečo v Kontrole kontaktov v Nastaveniach telefónu vidím \"Nájdené kľúče: 0\"?\\nZnamená to, že Apple / Google API vo vašom telefóne nevyhodnotilo v danom dátume žiadne stretnutie s nakazeným užívateľom. Inak povedané, stiahnuté kľúče nakazených užívateľov sa v danom dni nezhodujú so žiadnym zo zaznamenaných kľúčov vo vašom zariadení.\\n\\n## Prečo v Nastaveniach telefónu v sekcii Kontrola kontaktu vidím u konkrétneho dátumu nájdené kľúče, ale eRouška mi nezobrazuje žiadne rizikové stretnutia?\\nPočet nájdených kľúčov predstavuje počet zaznamenaných stretnutí s nakazenými užívateľmi. Neznamená to však nutne, že tieto stretnutia bola rizikové. Ak stretnutie s nakazeným užívateľom nebolo rizikové, tak na neho eRouška neupozorňuje. Preto v aplikácii nie je vidieť.\\n\\n## Zobrazilo sa mi upozornenie / notifikácia na rizikové stretnutie, ku ktorému došlo pred niekoľkými dňami. Prečo ma eRouška upozornila až teraz?\\nAplikácia eRouška nemôže vyhodnotiť riziko stretnutia a zobraziť upozornenie skôr, než užívateľ s pozitívnym testom na COVID-19 odošle dáta zo svojej eRoušky. Ak sa vám dnes zobrazila notifikácia, ktorá upozorňuje na rizikové stretnutie s nakazeným pred niekoľkými dňami, znamená to, že nakazený odoslal dáta zo svojej eRoušky len včera. Vaša eRouška si ich dnes stiahla a vyhodnotila.\\n\\n## Zobrazilo sa mi upozornenie / notifikácia na rizikové stretnutie s nakazeným, ale na obrazovke Rizikové stretnutia vidím viac záznamov s rôznymi dátami.\\nAplikácia eRouška vyhodnocuje rizikové stretnutia až po tom, čo používateľ s pozitívnym testom na COVID-19 odošle dáta zo svojej eRoušky. Ak sa vám zobrazila iba jedna notifikácia na rizikový kontakt, ale v Rizikových stretnutiach máte viac záznamov, znamená to, že ste sa s nakazeným stretli v predchádzajúcich dňoch viackrát alebo že v jeden deň odoslalo dáta zo svojho telefónu viac nakazených užívateľov súčasne.\\n\\n## Bude eRouška fungovať ako \"covid pas\" pre zobrazovanie výsledkov testov a preukázanie očkovania?\\nAnonymný charakter aplikácie eRouška ju neumožňuje kombinovať s tzv. Digitálnym zeleným certifikátom (Digital Green Certificate), ktorý pracuje s overenou identitou a osobnými údajmi užívateľa - výsledkami testov alebo vykonaným očkovaním proti COVID-19.\\n\\n## Publikuje eRouška nejaké štatistiky o používaní aplikácie?\\nŠtatistiky publikujeme vo formáte JSON na adrese [stats.erouska.cz](https://stats.erouska.cz) . Dáta majú nasledujúcu štruktúru:\\n\\n{\\\\n  \"data\": {\\\\n    \"modified\": 1608696001,\\\\n    \"date\": \"20201223\",\\\\n    \"activations\\_yesterday\": 2042,\\\\n    \"activations\\_total\": 1475571,\\\\n    \"key\\_publishers\\_yesterday\": 718,\\\\n    \"key\\_publishers\\_total\": 39175,\\\\n    \"notifications\\_yesterday\": 631,\\\\n    \"notifications\\_total\": 197298\\\\n  }\\\\n}\\n\\n*   **modified** = Unix timestamp vygenerovaných štatistík,\\n*   **date** = dátum vytvorenia reportu,\\n*   **activations\\_yesterday** \\= počet aktivácií za predchádzajúci kalendárny deň,\\n*   **activations\\_total** = celkový počet aktivácií eRoušky,\\n*   **key\\_publishers\\_yesterday** \\= počet nakazených ľudí, ktorí zadali v predchádzajúcom dni do eRoušky kód pre odoslanie dát,\\n*   **key\\_publishers\\_total** \\= celkový počet nakazených ľudí, ktorí zadali do eRoušky kód pre odoslanie dát,\\n*   **notifications\\_yesterday** \\= počet ľudí, ktorým sa za predchádzajúci deň zobrazilo upozornenie na rizikové stretnutie,\\n*   **notifications\\_total** = celkový počet ľudí, ktorým sa zobrazilo upozornenie na rizikové stretnutie.\\n\\nZavolanie bez parametra zobrazí informácie k aktuálnemu dátumu. Zavolanie s parametrom `date` umožní získať dáta pre ľubovoľný deň od 23. 10. 2020 (za všetky predchádzajúce dni máme iba agregované dáta). Pomocou parametra `date` s hodnotou `all` možno získať všetky dáta, ktoré rozhranie poskytuje.\\n\\n*   dnešné dáta: [`https://stats.erouska.cz/`](https://stats.erouska.cz/)\\n*   dáta z 1. 12. 2020: [`https://stats.erouska.cz/?date=2020-12-01`](https://stats.erouska.cz/?date=2020-12-01)\\n*   dáta za všetky dni: [`https://stats.erouska.cz/?date=all`](https://stats.erouska.cz/?date=all)\\n\\n# Zabezpečenie dát\\n## Ako zistím, ktorá všetky dáta presne aplikácie ukladá a odosiela?\\nAplikácia eRouška používa od verzie 2.0 tzv. Apple / Google Exposure Notification API, ktoré sprostredkúva zber dát a odovzdávanie identifikátorov medzi užívateľmi. Aplikácia kvôli tomu už nemá priamy prístup k nameraným údajom, ktoré by mohla používateľom zobraziť, ako to bolo vo verzii 1.0.\\n\\nAplikácia každý deň sťahuje zoznam identifikátorov od používateľov, ktorým test potvrdil nákazu. Údaje s identifikátormi na spracovanie môže ostatným odoslať iba jediný užívateľ, a to až po zadaní jednorázového SMS kódu, ktorý získa v prípade pozitívneho testu na nákazu ochorením COVID-19 automaticky, prípadne na vyžiadanie.\\n\\nAplikácia ďalej odosiela na server anonymnú štatistickú / agregovanú informáciu, že došlo k notifikácii rizikového kontaktu. Táto informácia nie je viazaná na žiadny identifikátor užívateľa ani jeho mobilu a slúži iba na výpočet štatistických informácií o účinnosti systému eRouška.\\n\\nAby sme zaistili funkčnosť eRoušky, pracujeme tiež s údajmi o fungovaní (napr. záznamy o pádoch aplikácie a používaní aplikácie) na telefóne a používame k tomu štandardné nástroje (Firebase Crashlytics a Google Analytics) od spoločnosti Google. Telemetrické údaje odosielané aplikáciou do týchto služieb používajú identifikátory vašej osoby alebo telefónu.\\n\\nPodrobné informácie o zhromažďovaní a spracovaní údajov nájdete v  [Informáciách o spracovaní osobných údajov v aplikácii eRouška 2.0](https://erouska.cz/sk/podminky-pouzivani) .\\n\\n## Prenesú sa dáta z eRoušky po obnove telefónu zo zálohy alebo pri prechode na nový telefón?\\nZ dôvodu ochrany súkromia užívateľov operačné systémy Android ani iOS nezálohujú dáta z Exposure Notification. Pri preinštalácii telefónu alebo prechode na iné zariadenie teda nemožno preniesť ani obnoviť zaznamenané a vygenerované identifikátory.\\n\\nAk chcete získať informáciu o možnom rizikovom stretnutí, odporúčame sledovať stav starého telefónu ešte po dobu 14 dní po inštalácii eRoušky na nové zariadenie. Pritom je potrebné:\\n\\n*   zabezpečiť, aby vaše zariadenie bolo zapnuté a pripojené k internetu, aby si mohlo sťahovať dáta na vyhodnotenie,\\n*   ideálne aspoň raz denne kontrolovať staršie zariadenia, teda otvoriť eRoušku.\\n*   Ak by ste počas týchto 14 dní mali pozitívny test, zadajte prosím kód do nového zariadenia a na získanie kódu pre staršie telefóny kontaktujte [info@erouska.cz](mailto:info@erouska.cz) .\\n\\nPo 14 dňoch už váš starý telefón nebude obsahovať žiadne dáta pre vyhodnotenie rizikového stretnutia. Môžete z neho preto odstrániť eRoušku a ponechať len v novom zariadení.\\n\\n## Čo keď mi telefón ukradnú alebo ho stratím?\\nV aplikácii eRouška sú lokálne uložené len anonymné informácie o ďalších zariadeniach, ktoré eRouška zaznamenala vo svojom okolí. Žiadne riziko to neprináša pre vás ani pre majiteľov takto zaznamenaných zariadení. Iné aplikácie, ktoré bežne využívate, môžu vo vašom telefóne pravdepodobne ukladať oveľa citlivejšie údaje. Majte preto svoj telefón chránený kódom alebo biometricky (odtlačkom prsta alebo tvárou).\\n\\n## Je aplikácia eRouška v súlade s GDPR?\\nCelý systém aplikácie eRouška, vrátane webových stránok, je navrhnutý plne v súlade s GDPR aj zákonom o spracovaní osobných údajov.\\n\\nTu nájdete bližšie informácie:\\n\\n*   [Informácie o spracovaní osobných údajov v aplikácii eRouška 2.0](https://erouska.cz/sk/podminky-pouzivani)\\n*   [Audit zdrojového kódu aplikácie](https://erouska.cz/sk/audit-kod)\\n\\n## Ako užívateľa chránite pred zneužitím dát?\\nUžívateľa chránime predovšetkým minimálnym rozsahom zaznamenávaných dát a ich ukladaním priamo do zariadenia. Dáta používateľov sa bez ich vedomia a súhlasu nikam neposielajú ani nespracovávajú. Do telefónov sa zaznamenávajú anonymné identifikátory (ID) zariadenia s nainštalovanou aplikáciou eRouška a informácie o čase, dĺžke a sile ich Bluetooth signálu. Dáta sa spracovávajú automatizovane na serveri iba po odsúhlasenom odoslaní užívateľom.\\n\\n## Dohliada na zabezpečenie dát z aplikácie nejaká nezávislá organizácia?\\nCelý systém aplikácie eRouška, vrátane podporných webových stránok, je navrhnutý plne v súlade s GDPR. Kód aplikácie je ako open-source voľne k dispozícii ([Android](https://github.com/covid19cz/erouska-android), [iOS](https://github.com/covid19cz/erouska-ios)) a prešiel [auditom nezávislých vzdelávacích inštitúcií](https://erouska.cz/sk/audit-kod).\\n\\nĎalšie informácie nájdete v  [Informáciách o spracovaní osobných údajov v rámci aplikácie eRouška 2.0](https://erouska.cz/sk/podminky-pouzivani) .\\n\\n## Môže ma niekto pomocou aplikácie eRouška sledovať?\\nNie. Aplikácia nezbiera údaje o vašej polohe a k uloženým dátam máte prístup iba vy. Samotné údaje, ktoré aplikácia po vašom súhlase odosiela, nemôžu byť použité k vášmu sledovaniu. Každá eRouška navyše mení z dôvodu bezpečnosti a ochrany súkromia užívateľov pravidelne svoje vysielané ID, aby nebolo ľahké ho odchytiť a nejako zneužiť.\\n\\n## Je možné overiť, že aplikácia nezaznamenáva moju polohu?\\nÁno. Aplikácia eRouška je publikovaná s otvoreným zdrojovým kódom ([Android](https://github.com/covid19cz/erouska-android), [iOS](https://github.com/covid19cz/erouska-ios)), takže znalý človek môže ľahko overiť, že údaje o polohe aplikácie naozaj nezbiera.\\n\\nZdrojové kódy aplikácie eRouška [preverujú nezávislé autority](https://erouska.cz/sk/audit-kod) , ktoré kontrolujú, že aplikácia:\\n\\n*   nesleduje polohu\\n*   sama automaticky dáta s identifikátormi nikam neposiela\\n\\n## Je možné identifikátor aplikácie (ID) používateľa spárovať s konkrétnou osobou?\\nAplikácia eRouška 2.0 [nepracuje s osobnými údajmi](https://erouska.cz/sk/podminky-pouzivani) . Vygenerované anonymné ID eRoušky sa medzi aplikáciami a servermi prenášajú výlučne po chránenom komunikačným protokolom, ktorý spoločne vyvinuli spoločnosti Apple a Google. K identifikátorom nemajú prístup ani používatelia, ani vývojári, ani iná autorita.\\n\\n## Kto má (môže mať) prístup k mojim údajom?\\nK zaznamenaným údajom o stretnutí nemá v eRouške 2.0 prístup užívateľ, ani nikto iný. Dôvodom je, že aktuálna verzia aplikácie používa Apple / Google protokol, ktorý k zaznamenaným dátam neposkytuje prístup ani užívateľom, ani vývojárom a správcom. Dáta (anonymné identifikátory nakazených) sa prenášajú na server a odtiaľ do ostatných eRoušiek šifrovane a vyhodnocujú sa až na koncových zariadeniach automatizovane za účelom zobrazenia prípadných upozornení o rizikovom kontakte. Zo servera aj zo zariadení sa dáta mažú automaticky po 14 dňoch.\\n\\n## Ako dlho do minulosti sú dáta k dispozícii? Kedy a ako prebieha ich mazanie?\\nV aplikácii eRouška sa uchovávajú dáta zaznamenané za posledných 14 dní, staršie záznamy sa automaticky odmazávajú. Pokiaľ po pozitívnom teste na COVID-19 zadáte overovací kód do eRoušky a odošlete identifikátory z telefónu na server, zostanú tu 14 dní a potom dôjde k ich zmazaniu. Dáta môžete zo svojho zariadenia zmazať v Nastaveniach Oznámenie o kontaktoch s nákazou/Kontakty s nákazou/Exposure Notification - konkrétny postup záleží na type a verzii operačného systému.\\n\\n*   **Android:** Na zariadeniach so systémom Android v súčasnom nastavení dôjde pri odinštalovaní aplikácie eRouška k zmazaniu zaznamenaných kľúčov (identifikátorov).\\n\\nInformácie o správcoch a spracovateľoch údajov nájdete v  [Informáciách o spracovaní osobných údajov v rámci aplikácie eRouška](https://erouska.cz/sk/podminky-pouzivani) .\\n\\n## Môžem si používanie aplikácie kedykoľvek rozmyslieť? Môžem zmazať dáta, ktoré odošlem na spracovanie?\\nAplikáciu môžete kedykoľvek odinštalovať. Vygenerované a zaznamenané kľúče (záznamy stretnutí) môžete zo svojho zariadenia zmazať v Nastaveniach Oznámenie o kontaktoch s nákazou/Kontakty s nákazou/Exposure Notification - konkrétny postup záleží na type a verzii operačného systému. Údaje odoslané na server sa zmažú automaticky po 14 dňoch.\\n\\n*   **Android:** Na zariadeniach so systémom Android v súčasnom nastavení dôjde pri odinštalovaní aplikácie eRouška tiež k zmazaniu zaznamenaných kľúčov (identifikátorov).\\n\\n## Čo sa deje s dátami po vymazaní aplikácie z mobilu?\\n**Android:** Keď zmažete aplikáciu z telefónu alebo tabletu s OS Android, dôjde tiež k zmazaniu zaznamenaných kľúčov (identifikátorov).\\n\\nAk aplikáciu znova nainštalujete, začnú sa zbierať a do telefónu ukladať úplne nové dáta.\\n\\n## Kde nájdem zdrojový kód aplikácie?\\nAplikácia eRouška je publikovaná s otvoreným zdrojovým kódom. Nájdete ho na GitHube ([Android](https://github.com/covid19cz/erouska-android) , [iOS](https://github.com/covid19cz/erouska-ios)).\\n\\n# Inštalácia a kompatibilita\\n## Na akých telefónoch aplikácia eRouška funguje? Prečo sú nároky vyššie než v eRouške 2.0?\\nNa inštaláciu aplikácie eRouška potrebujete mobilné zariadenia s týmito parametrami:\\n\\n*   iPhone s iOS verzie 13.5 a vyššej\\n*   OS Android verzie 6.0 a vyššej s Google Play Services (nemá len malé percento telefónov Huawei a niektoré telefony s vlastnou ROM)\\n*   Bluetooth LE (Low Energy)\\n\\nAk vaše mobilné zariadenie nie je s eRouškou kompatibilné (nemá potrebné technológie / funkcie), Google Play ani Apple App Store vám neumožní aplikáciu nainštalovať. Aplikácia je dostupná len pre niektoré tablety Android. Nie je k dispozícii pre iPad.\\n\\nMinimálne požiadavky na kompatibilitu stanovujú spoločnosti Apple a Google. Vychádzajú z požiadaviek Apple / Google Exposure Notification protokolu, ktorý nová eRouška používa. Na Apple / Google protokol sme sa rozhodli prejsť kvôli zabezpečeniu fungovania eRoušky na iPhonoch a kvôli umožneniu cezhraničnej kompatibility s podobnými aplikáciami ďalších európskych štátov.\\n\\n## Odkiaľ si môžem eRoušku bezpečne stiahnuť a nainštalovať?\\nAplikácia eRouška je dostupná iba pre:\\n\\n*   Android: [v Obchode Google Play](https://play.google.com/store/apps/details?id=cz.covid19cz.erouska) .\\n\\n## Je možné aplikáciu stiahnuť aj inak ako z oficiálnych aplikačných obchodov? Je k dispozícii balíček apk?\\nAplikácia eRouška 2.0 používa Apple/Google protokol pre zaznamenávanie stretnutia a prenos dát. Preto je tiež závislá na systémových službách, bez ktorých nebude fungovať, a nie je ju teda možné inštalovať z iných ako oficiálnych aplikačných obchodov. Aplikačné obchody spoľahlivo vyfiltrujú podporované zariadenia.\\n\\nVývojári eRoušky nikdy neposkytujú užívateľom odkazy na inštalačné balíčky APK alebo samotné inštalačné súbory mimo oficiálne obchody s aplikáciami. V aplikáciách nainštalovaných neoficiálnou cestou by sme nedokázali garantovať ich zabezpečenie, zabezpečiť ich aktualizáciu ani rovnakú úroveň užívateľskej podpory. Preto prosím nikdy neinštalujte eRoušku z .apk súborov, ktoré ste našli niekde na internete alebo vám ich niekto poslal e-mailom. Môžu obsahovať vírusy, trójske kone alebo iný škodlivý obsah.\\n\\n## Môžem používať eRoušku spolu s inou oficiálnou trasovacou aplikáciou iného štátu (napr. Corona-Warn-App)?\\nAk sa zdržiavate primárne na území ČR, odporúčame používať eRoušku aj pre cesty do zahraničia. [Aplikácia teraz spolupracuje aj s ďalšími štátmi EÚ](https://erouska.cz/sk/caste-dotazy#efgs) .\\n\\nV ostatných prípadoch môžete mať v telefóne nainštalované viaceré trasovacie aplikácie typu eRouška, ako sú Corona-Warn-App, Stopp Corona App, Imunni, Stop Covid ProteGO Safe a ďalšie. Ak však tiež používajú Apple/Google Exposure Notification protokol (platí najmä pre susedné štáty ČR), môžete mať v jeden okamih aktívnu iba jednu z týchto aplikácií. Ostatné je potreba pozastaviť. K zaznamenávaniu stretnutí v Apple/Google protokole totiž môže mať prístup vždy len jedna aplikácia.\\n\\n## Funguje eRouška, keď mám na mobile úsporný režim/režim nízkej spotreby/šetrič batérie?\\n**Android:** Šetriče/sporiče batérie na zariadeniach s OS Android môžu do značnej miery obmedzovať beh aplikácií na pozadí. Hoci systém oznámení o možnom kontakte s ochorením COVID-19 naďalej funguje, nemusí dochádzať k vyhodnocovaniu rizikových kontaktov, a teda k prípadnému zobrazeniu notifikácií.\\n\\n## Bude možné používať eRoušku aj na smart hodinkách či náramkoch?\\nRozšírenie je teoreticky do budúcnosti možné. Zatiaľ ho ale nezvažujeme najmä preto, že by smart hodinky či náramok museli podporovať Bluetooth LE (Low Energy) a najmä Apple / Google protokol. Základný Bluetooth bez LE sám o sebe iba zaisťuje prenos dát, ale neumožňuje meranie intenzity stretnutí užívateľov na základe sily signálu.\\n\\n</value>\n    </entry>\n    <entry>\n        <key>v2_shareAppDynamicLink</key>\n        <value>https://erouska.cz/app/sdilej</value>\n    </entry>\n    <entry>\n        <key>v2_minSupportedVersionCodeAndroid</key>\n        <value>666</value>\n    </entry>\n    <entry>\n        <key>v2_shouldCheckOSVersion</key>\n        <value>1</value>\n    </entry>\n    <entry>\n        <key>v2_unsupportedDeviceLink</key>\n        <value>https://koronavirus.mzcr.cz</value>\n    </entry>\n    <entry>\n        <key>v2_minSupportedVersion</key>\n        <value>2.3.3</value>\n    </entry>\n    <entry>\n        <key>v2_currentMeasuresUrl</key>\n        <value>https://covid.gov.cz/opatreni</value>\n    </entry>\n    <entry>\n        <key>v2_appleExposureConfiguration</key>\n        <value>{\"factorHigh\":0.25,\"factorStandard\":1,\"factorLow\":2,\"lowerThreshold\":55,\"higherThreshold\":70,\"triggerThreshold\":10}</value>\n    </entry>\n    <entry>\n        <key>v2_daysSinceOnsetToInfectiousness</key>\n        <value>0;0;0;0;0;0;0;0;0;0;0;1;2;2;2;2;2;2;2;1;1;1;1;1;1;1;1;1;1</value>\n    </entry>\n    <entry>\n        <key>v2_supportEmail</key>\n        <value>info@erouska.cz</value>\n    </entry>\n    <entry>\n        <key>v2_appleServerConfiguration</key>\n        <value>{\"minSupportedVersion\":\"13.5\",\"showExposureForDays\":14,\"healthAuthority\":\"cz.covid19cz.erouska\",\"uploadURL\":\"https://exposure-fghz64a2xa-ew.a.run.app/v1/publish\",\"downloadIndexName\":\"erouska/index.txt\",\"downloadsURL\":\"https://google.com\",\"verificationURL\":\"https://apiserver-jyvw4xgota-ew.a.run.app\",\"verificationAdminKey\":\"\",\"verificationDeviceKey\":\"4AP6RHk5VlNi7WIhj4ZupI9JZODdUyrPGb1C2mDYKo4cuaGIHdYtOhjyoqhg4vB5r7FDijxnySLb_1CUH6XdDA.1.oZLaUuVOPbvEaiWnzkQxasWlD_71iSTeM9aAIOKrfqhg5QO68t004CKxWutYmfISc7vqJe6uY2dRrt34OFkliw\",\"appCurentDataURL\":\"https://europe-west1-daring-leaf-272223.cloudfunctions.net\",\"firebaseURL\":\"https://europe-west1-daring-leaf-272223.cloudfunctions.net\"}</value>\n    </entry>\n    <entry>\n        <key>v2_handleError400AsExpiredOrUsedCode</key>\n        <value>false</value>\n    </entry>\n    <entry>\n        <key>v2_handleError500AsInvalidCode</key>\n        <value>false</value>\n    </entry>\n    <entry>\n        <key>v2_exposureHelpContentJson</key>\n        <value>{\"items\":[{\"iconUrl\":\"https://erouska.cz/img/exposure/ic_notification.png\",\"label\":\"Upozornenie sa vám zobrazí najskôr 24 hodín po tom, čo sa nakazený dozvie pozitívny výsledok testu na COVID-19 a zadá overovací kód do eRoušky.\"},{\"iconUrl\":\"https://erouska.cz/img/exposure/ic_privacy.png\",\"label\":\"Kvôli zachovaniu anonymity nepoznáme čas ani miesto stretnutia.\"},{\"iconUrl\":\"https://erouska.cz/img/exposure/ic_distance.png\",\"label\":\"Rizikový kontakt vyhodnotíme v prípade, že ste s nakazeným boli v kontakte na vzdialenosť kratšiu ako 2 metre po dobu aspoň 7 minút.\"},{\"iconUrl\":\"https://erouska.cz/img/exposure/ic_14days.png\",\"label\":\"Rizikové stretnutie vyhodnocujeme za posledných 14 dní, pretože príznaky ochorenia COVID-19 sa u vás môžu prejaviť až 2-14 dní po stretnutí s nakazeným.\"}]}</value>\n    </entry>\n    <entry>\n        <key>v2_exposureHelpUITitle</key>\n        <value>Nápoveda</value>\n    </entry>\n    <entry>\n        <key>v2_updateNewsOnRequest</key>\n        <value>true</value>\n    </entry>\n    <entry>\n        <key>v2_recentExposureNotificationTitle</key>\n        <value>Vaša eRouška si dlhú dobu neaktualizovala dáta, či ste sa stretli s nakazeným užívateľom eRoušky. Pripojte sa k internetu.</value>\n    </entry>\n    <entry>\n        <key>v2_efgsCountries</key>\n        <value>Aktuálne s eRouškou spolupracuje Belgicko, Dánsko, Fínsko, Chorvátsko, Írsko, Taliansko, Cyprus, Lotyšsko, Nemecko, Holandsko, Nórsko, Poľsko, Rakúsko, Slovinsko a Španielsko.</value>\n    </entry>\n    <entry>\n        <key>v2_diagnosisKeysDataMappingLimitDays</key>\n        <value>7</value>\n    </entry>\n    <entry>\n        <key>v2_infectiousnessWhenDaysSinceOnsetMissing</key>\n        <value>1</value>\n    </entry>\n    <entry>\n        <key>v2_reportTypeWhenMissing</key>\n        <value>1</value>\n    </entry>\n    <entry>\n        <key>v2_noEncounterCardTitle</key>\n        <value>Za posledných 14 dní žiadne rizikové stretnutie</value>\n    </entry>\n    <entry>\n        <key>v2_encounterUpdateFrequency</key>\n        <value>Aktualizácia prebieha raz za %d hodín.</value>\n    </entry>\n    <entry>\n        <key>v2_dbCleanupDays</key>\n        <value>15</value>\n    </entry>\n    <entry>\n        <key>v2_selfCheckerPeriodHours</key>\n        <value>4</value>\n    </entry>\n    <entry>\n        <key>v2_showChatBotLink</key>\n        <value>false</value>\n    </entry>\n    <entry>\n        <key>v2_efgsVisitedCountries</key>\n        <value></value>\n    </entry>\n    <entry>\n        <key>v2_efgsReportType</key>\n        <value>ConfirmedTest</value>\n    </entry>\n    <entry>\n        <key>v2_efgsConsentToFederation</key>\n        <value>false</value>\n    </entry>\n    <entry>\n        <key>v2_efgsTravellerDefault</key>\n        <value>false</value>\n    </entry>\n    <entry>\n        <key>v2_appleExposureConfigurationV2</key>\n        <value>{\"immediateDurationWeight\":200,\"nearDurationWeight\":100,\"mediumDurationWeight\":25,\"otherDurationWeight\":0,\"infectiousnessForDaysSinceOnsetOfSymptoms\":{\"0\":2,\"1\":2,\"2\":2,\"3\":2,\"4\":2,\"5\":1,\"6\":1,\"7\":1,\"8\":1,\"9\":1,\"10\":1,\"11\":1,\"12\":1,\"13\":1,\"14\":1,\"unknown\":1,\"-14\":0,\"-13\":0,\"-12\":0,\"-11\":0,\"-10\":0,\"-9\":0,\"-8\":0,\"-7\":0,\"-6\":0,\"-5\":0,\"-4\":0,\"-3\":1,\"-2\":2,\"-1\":2},\"infectiousnessStandardWeight\":100,\"infectiousnessHighWeight\":200,\"reportTypeConfirmedTestWeight\":100,\"reportTypeConfirmedClinicalDiagnosisWeight\":100,\"reportTypeSelfReportedWeight\":100,\"reportTypeRecursiveWeight\":100,\"reportTypeNoneMap\":1,\"minimumRiskScore\":0,\"attenuationDurationThresholds\":[55,70,80],\"attenuationLevelValues\":[1,2,3,4,5,6,7,8],\"daysSinceLastExposureLevelValues\":[1,2,3,4,5,6,7,8],\"durationLevelValues\":[1,2,3,4,5,6,7,8],\"transmissionRiskLevelValues\":[1,2,3,4,5,6,7,8],\"minimumScore\":420}</value>\n    </entry>\n    <entry>\n        <key>v2_helpJson</key>\n        <value>[{\"title\":\"Najčastejšie problémy\",\"subtitle\":\"Odporúčania dočasných opráv\",\"icon\":\"https://erouska.cz/img/faq/tool.png\",\"questions\":[{\"question\":\"Android: Základné odporúčania pri riešení problémov s aplikáciou\",\"answer\":\"Ak vám aplikácia zobrazuje chybovú hlášku, skontrolujte prosím najskôr, či máte nainštalované aktualizácie operačného systému ( [postup aktualizácie Androidu](https://support.google.com/android/answer/7680439) ) a nepoužívate ich beta verziu.\\n\\nĎalej prosím skontrolujte v obchode [Google Play (Android)](https://play.google.com/store/apps/details?id=cz.covid19cz.erouska), či nie je pre eRoušku dostupná nová aktualizácia.\\n\\nOdporúčame tiež povoliť automatické aktualizácie aplikácie eRouška. [Postup pre Android tu:](https://support.google.com/googleplay/answer/113412#autoone) Spustite aplikáciu Obchod Google Play, kliknite na ponuku Moje aplikácie a hry → Vyberte aplikáciu, ktorú chcete aktualizovať → kliknite na ikonu možností a kliknite na Aktivovať automatické aktualizácie.\"},{\"question\":\"Android: Nejde aktivovať eRouška. Chyba aktivácie 17 (Exposure Notification API nie je k dispozícii).\",\"answer\":\"Pre vyriešenie chyby na Android zariadeniach, skúste, prosím, postupovať takto:\\n\\n1.  Skontrolujte, či ste _hlavný užívateľ_ zariadenia, či máte v telefóne služby Play a či je k dispozícii _Nastavenia → Google → Oznámenie o možnom kontakte (COVID-19 Exposure Notifications)_ .\\n2.  Odinštalujte eRoušku.\\n3.  Vymažte vyrovnávaciu pamäť a dáta u Google Play Services a Obchodu Play ([postup tu, viď kroky 2 a 3](https://support.google.com/googleplay/answer/9037938) ).\\n4.  Nainštalujte eRoušku a zapnite opäť _Oznámenia o možnom kontakte COVID-19_ .\\n\\nAk sa vám aj napriek aktualizácii systému, aplikácie a uvedených krokov naďalej objavuje chyba aktivácie, je bohužiaľ možné, že vaše zariadenie ešte nepodporuje Bluetooth LE (Low Energy Advertising), nepodporuje Bluetooth Multiple Advertisement, nie je autorizované Googlom pre Exposure Notifications alebo vôbec nemá Exposure Notifications API.\"}]},{\"title\":\"Pripojenie a prenos dát\",\"subtitle\":\"Bluetooth, GPS, internet\",\"icon\":\"https://erouska.cz/img/faq/connection.png\",\"questions\":[{\"question\":\"Musím mať Bluetooth zapnutý neustále?\",\"answer\":\"Áno. Bez zapnutého Bluetooth nie je možné zisťovať blízkosť ďalších zariadení s nainštalovanou aplikáciou eRouška. Túto funkciu máte zapnutú možno aj teraz, napríklad v prípade, že používate bezdrôtové slúchadlá, pripojenie v aute, smart náramok alebo hodinky. V nastavení Bluetooth vášho telefónu / tabletu navyše odporúčame povoliť, aby bol _viditeľný pre všetky zariadenia_ .\"},{\"question\":\"Potrebuje aplikácia pripojenie k internetu?\",\"answer\":\"Pripojenie k internetu je nutné pre stiahnutie (inštaláciu) a aktiváciu eRoušky. Ďalej je potrebné, aby si eRouška mohla každý deň sťahovať aktuálny zoznam anonymných identifikátorov nakazených užívateľov, a zobraziť tak včas prípadnú notifikáciu o rizikovom stretnutí.\\n\\nAk by u vás test potvrdil nákazu COVID-19 a vy by ste chceli anonymne upozorniť ostatných na možný rizikový kontakt, bolo by opäť potreba eRoušku pripojiť k internetu. Dovtedy sú vaše dáta uložené iba vo vašom telefóne, odkiaľ sa samy odmazávajú po 14 dňoch. Aplikácia využíva pripojenie k internetu aj na stiahnutie informácií o aktuálnom vývoji epidémie COVID-19 v ČR, ktoré zobrazuje na stránke _Aktuálne_ .\"},{\"question\":\"Ako často si aplikácia aktualizuje dáta z internetu?\",\"answer\":\"Kľúče (identifikátory) nakazených užívateľov si eRouška sťahuje niekoľkokrát denne. Štatistiky nakazených osôb na obrazovke Aktuálne sa aktualizujú raz denne.\"},{\"question\":\"Ako veľký objem mobilných dát eRouška denne spotrebuje?\",\"answer\":\"V prípade zapnutého _Upozornenia na zahraničné riziková stretnutí_ eRouška sťahuje tiež kľúče všetkých nakazených užívateľov z ostatných štátov EÚ. Objem stiahnutých dát sa v takom prípade môže pohybovať až okolo 2 MB denne.\\n\\nAj v prípade vypnutého _Upozornenia na zahraničné rizikové stretnutia_ eRouška sťahuje približne 1 MB denne. Nová verzia aplikácie sťahuje nielen kľúče nakazených užívateľov eRoušky, ale aj kľúče nakazených užívateľov z ostatných štátov EÚ, ktorí vo svojich aplikáciách uviedli, že cestujú do zahraničia, takže ich užívateľ eRoušky potenciálne mohol stretnúť aj v Českej republike\\n\\nSúbory kľúčov nakazených užívateľov sa sťahujú postupne, 2-3× denne. Pre porovnanie, načítanie priemernej stránky spravodajstva vyžaduje 1-5 MB dát. **Aplikácia nepotrebuje nutne mobilné dátové pripojenie.** Dáta si stiahne sama aj na Wi-Fi.\"},{\"question\":\"Android: Prečo je potrebné mať povolený prístup k GPS/lokalizačným/lokačným údajom?\",\"answer\":\"**Aktualizácia pre užívateľov Android 11:** V najnovšej verzii operačného systému Android už nemusíte pre fungovanie eRoušky povoľovať služby určovania polohy.\\n\\nAplikácia eRouška nezbiera a neukladá dáta z GPS, avšak operačný systém **Android 10 a staršie** zahŕňa pod určovanie polohy aj niektoré služby Bluetooth LE (LE = low energy), ktorý komponenty eRoušky - konkrétne Google Play Services - pre svoje fungovanie vyžadujú. Preto je nutný súhlas užívateľov s prístupom aplikácie k lokalizačným údajom. V iOS tento súhlas potrebný nie je. Prečo v telefóne musí byť zapnuté určovanie polohy, [vysvetľuje Google tu](https://support.google.com/android/answer/9930236) .\\n\\nInformáciu o vašej polohe môžu využívať aj iné aplikácie vo vašom zariadení. Ak chcete skontrolovať, ktoré aplikácie majú k nim prístup, prejdite do nastavení zariadenia a vyberte položky Zabezpečenie a poloha → Umiestnenie → Oprávnenie na úrovni aplikácie (prípadne nasledujte [postup od spoločnosti Google](https://support.google.com/accounts/answer/6179507?hl=cs)). Tu môžete iným aplikáciám odoprieť oprávnenie používať vašu polohu, keď si nemyslíte, že to potrebujú. Pretože eRouška toto oprávnenie nepotrebuje, nezobrazí sa v zozname.\"},{\"question\":\"Koľko zapnutý Bluetooth a aplikácia eRouška spotrebujú batérie?\",\"answer\":\"Ak už teraz používate telefón so stále zapnutým Bluetooth, spotreba energie by sa nemala výraznejšie zvýšiť. Ak Bluetooth teraz bežne nepoužívate, tak podľa výsledkov nášho testovania s neustále zapnutým Bluetooth a ukladaním dát do aplikácie bolo navýšenie dennej spotreby energie v ráde jednotiek percent. Vo väčšine prípadov to je menej ako 20% kapacity batérie za deň. Záleží pritom na konkrétnom smartfóne, jeho veku, štýlu jeho používania a stavu batérie.\\n\\nSpotrebu batérie spojenú s použitím aplikácie eRouška ovplyvňujú dva faktory. Po prvé samotný beh aplikácie a po druhé využitie systémovej funkcie Oznámenie o kontaktoch s nákazou, ktorá priebežne zaznamenáva stretnutia s používateľmi v okolí. Systémovú funkciu zabezpečuje OS Android alebo iOS, preto jej optimalizácia záleží na aktualizáciách zo strany spoločností Apple a Google.\\n\\nPri interpretácii spotreby batérie zo štatistík v nastaveniach telefónu berte prosím do úvahy, že toto percento zodpovedá plnému využitiu vášho telefónu za posledných 24 hodín (percentuálny podiel behu medzi ostatnými aplikáciami). To znamená, že u málo využívaného telefónu môže byť percento pri Kontaktoch s nákazou / aplikácii eRouška vysoké, u intenzívne využívaných telefónov naopak nízke. Nejde teda priamo o percento spotreby batérie.\\n\\n**Android: Poznámka k povoleniu lokalizačných služieb:** Bluetooth zariadenia vo vašej blízkosti sa dá detekovať, len ak je v telefóne aktivovaná možnosť \\\"Použiť polohu\\\". (Podrobnosti nájdete v odseku [Prečo v telefóne musí byť zapnuté určovanie polohy? Na webe Googlu](https://support.google.com/android/answer/9930236?hl=cs) .) To znamená, že informáciu o vašej polohe môžu využívať aj iné aplikácie vo vašom zariadení, čo môže byť dôvodom vyššej spotreby batérie. Preto, prosím, skontrolujte, ktoré aplikácie používajú vašu polohu. Prejdite do nastavení [zariadenia a vyberte položky Zabezpečenie a poloha → Umiestnenie → Oprávnenie na úrovni aplikácie (prípadne nasledujte](https://support.google.com/android/answer/9930236?hl=cs) [postup od spoločnosti Google](https://support.google.com/accounts/answer/6179507?hl=cs) ). Tu môžete iným aplikáciám odoprieť oprávnenie používať vašu polohu, keď si nemyslíte, že to potrebujú. Pretože eRouška toto oprávnenie nepotrebuje, nezobrazí sa v zozname.\"},{\"question\":\"Je možné, že sa mi po zapnutí eRoušky spomalilo Wi-Fi / pripojenie k internetu?\",\"answer\":\"Pri niektorých modeloch mobilov s OS Android je bohužiaľ známe, že vysielanie Bluetooth môže čiastočne negatívne ovplyvňovať signál Wi-Fi a naopak.\"},{\"question\":\"Môže eRouška spôsobovať problémy s ďalšími aplikáciami alebo zariadeniami / perifériami (slúchadlá, hodinky, náramok), ktoré používajú Bluetooth?\",\"answer\":\"Vo výnimočných prípadoch nám niektorí užívatelia hlásia neštandardné správanie ich Bluetooth periférií po tom, čo nainštalovali aplikáciu eRouška. Napr. môže dochádzať k prerušovaniu spojenia - typicky u smart hodiniek či náramkov, bezdrôtových slúchadiel alebo handsfree sád. S najväčšou pravdepodobnosťou ide o problém funkcií operačného systému, na ktoré bohužiaľ nemáme vplyv.\\n\\nSkúste prosím nsledujúci postup:\\n\\n1.  Reštartujte telefón.\\n2.  Zrušte spárovanie s Bluetooth zariadením a znovu ho pripojte.\\n\\nAk kroky vyššie nepomôžu, kontaktujte prosím výrobcu zariadenia:\\n\\n*   Android: [Podpora výrobcov zariadení](https://support.google.com/android/answer/3094742?hl=cs&amp;ref_topic=7313011)\"},{\"question\":\"Prečo aplikácia používa zrovna Bluetooth? Neexistujú lepšie riešenia ako GPS alebo triangulácia od operátorov?\",\"answer\":\"Súkromie užívateľov je pre nás na prvom mieste, a práve technológia Bluetooth ponúka najvyváženejší pomer presnosti záznamu a minimálneho zásahu do súkromia. Technológia GPS ani triangulácie vysielačov od operátorov nemôžu poskytnúť potrebné údaje s požadovanou presnosťou. Okrem iného aj preto, že ich funkčnosť je vo vnútorných priestoroch či metra veľmi obmedzená. Aplikácia eRouška potrebuje pre svoju funkciu informácie o tom, že došlo k stretnutiu, na akú vzdialenosť a po akú dobu. Nie je dôležité, kde k stretnutiu došlo.\"},{\"question\":\"Je Bluetooth dostatočne bezpečná technológia?\",\"answer\":\"Bluetooth je dnes bežne rozšírená a podporovaná komunikačná technológia na prepojenie zariadení s ďalšími perifériami, ako sú bezdrôtové slúchadlá, reproduktory, smart náramky alebo hodinky. Vzhľadom k tomu, že spoločnosti Apple a Google vytvorili spoločný protokol určený výhradne pre národné aplikácie, ktoré trasujú rizikové stretnutia s nakazenými COVID-19 na základe Bluetooth LE, sme presvedčení, že sme pre eRoušku zvolili správne. Je však potrebné povedať, že úplne každá technológia je zraniteľná. Aj preto všetkým užívateľom odporúčame, aby operačný systém a aplikácie vo svojom telefóne pravidelne aktualizovali. Aktualizácie totiž môžu obsahovať dôležité bezpečnostné záplaty.\"}]},{\"title\":\"Všeobecné informácie\",\"subtitle\":\"eRouška, karanténa a postupy hygieny\",\"icon\":\"https://erouska.cz/img/faq/general.png\",\"questions\":[{\"question\":\"Ako mám postupovať, ak mi aplikácia zobrazila upozornenie na rizikové stretnute s nakazeným užívateľom?\",\"answer\":\"Ak máte príznaky choroby (napríklad zvýšenú teplotu, kašeľ, dýchavičnosť, bolesť hrdla, bolesť hlavy, náhlu stratu čuchu a chuti), telefonicky kontaktujte svojho praktického lekára. V prípade, že je váš stav naozaj akútny, volajte rýchlu záchrannú službu 155, prípadne linku integrovaného záchranného systému 112. Uvedené príznaky sa môžu objaviť 2 až 14 dní po rizikovom stretnutí.\\n\\nAk nemáte žiadne príznaky, správajte sa, prosím, zodpovedne:\\n\\n*   Noste rúško či respirátor cez ústa a nos.\\n*   Často a dôkladne si umývajte ruky vodou a mydlom alebo používajte dezinfekciu.\\n*   Pravidelne dezinfikujte vlastné predmety (napr. mobilný telefón).\\n*   Kašlite a kýchajte do vreckovky či rukávu.\\n*   Používajte jednorázové vreckovky a potom ich vyhoďte.\\n*   Vyhýbajte sa zbytočnému zhromažďovaniu a dodržujte bezpečný odstup od ostatných (približne 2 metre).\\n\\nPokiaľ po notifikácii eRoušky máte vážne podozrenie na rizikové stretnutie, kontaktujte svojho praktického lekára a riaďte sa jeho pokynmi. Je tiež možné, že vás bude v blízkej dobe kontaktovať pracovník hygienickej služby na základe epidemiologického vyšetrenia s konkrétnym nakazeným. V takom prípade postupujte podľa pokynov hygienickej služby.\\n\\nAk by sa v priebehu 14 dní od rizikového stretnutia váš zdravotný stav zhoršil a objavili sa u vás príznaky ochorenia COVID-19, kontaktujte svojho praktického lekára.\"},{\"question\":\"Ako mám postupovať, keď mám pozitívny výsledok testu na COVID-19 alebo mi prišla SMS eRoušky s overovacím kódom?\",\"answer\":\"Ak vám prišla SMS z laboratória s pozitívnym výsledkom testu na COVID-19, mala by vám do niekoľkých hodín prísť tiež SMS eRoušky s overovacím kódom pre odoslanie dát. SMS eRoušky sa odosielajú automatizovane po zapísaní výsledku testov do informačného systému. Okamih, kedy laboratórium odovzdá výsledky do informačného systému, nedokážu automatizované procesy Chytrej karantény ovplyvniť.\\n\\nAkonáhle vám príde SMS eRoušky s overovacím kódom, [postupujte, prosím, podľa tohto návodu](https://erouska.cz/sk/sms) . Uvedený postup vám umožní anonymne informovať ostatných užívateľov o prípadnom rizikovom stretnutí. Ďakujeme.\\n\\nMáte pozitívny test a neprišla vám SMS eRoušky? Napíšte si o nový kód na [info@erouska.cz](mailto:info@erouska.cz?subject=).\"},{\"question\":\"To budem musieť zakaždým automaticky do karantény alebo na testy, keď aplikácia zahlási, že som bol v kontakte s niekým nakazeným?\",\"answer\":\"Nie, aplikácia eRouška je plne anonymná, jej použitie je úplne dobrovoľné a upozornenie na možný rizikový kontakt s nakazeným nie je dôvod pre nariadenie karantény. Ak u niekoho test potvrdí nákazu, kontaktuje ho hygienická stanica, aby zistila, s kým bol v posledných dňoch v rizikovom kontakte, a mohla tak obmedziť ďalšie šírenie. Keď tento človek používa aplikáciu eRouška, môže kontaktovať aj tých, ktorých nepozná, pretože s nimi napríklad cestoval v autobuse. Zadaním unikátneho kódu môže poslať upozornenie všetkým ostatným používateľom aplikácie eRouška, s ktorým bol v epidemiologicky rizikovom kontakte.\\n\\nV okamihu, keď vás aplikácia upozorní, že ste sa stretli s osobou, u ktorej bolo preukázané ochorenie COVID-19, by ste mali postupovať podľa zobrazených odporúčaní a v prípade zdravotných ťažkostí bez odkladu kontaktovať svojho praktického lekára.\"},{\"question\":\"Spozná eRouška, keď poruším lekárom nariadenú karanténu alebo keď napríklad pôjdem na chatu?\",\"answer\":\"Aplikácia nesleduje vašu polohu, nie je to jej účel a ani pre to nie je navrhnutá. Nespozná teda, či ste porušili karanténne opatrenie alebo kam ste odišli. Má naopak pomôcť k tomu, aby v karanténe boli iba osoby s diagnostikovaným ochorením alebo s vážnym podozrením nákazy.\"},{\"question\":\"Môže mi eRouška miesto lekára vystaviť práceneschopnosť? Je upozornenie na možné rizikové stretnutie dôvod pre pracovnú neschopnosť?\",\"answer\":\"Nemôže, nie je. Ak vám eRouška zobrazila varovanie, postupujte podľa zobrazených odporúčaní. Upozornenie na možný rizikový kontakt nijako nenahrádza správu od vášho lekára alebo laboratória, ktorá vyhodnotí váš test na COVID-19. Iba lekár vám vystaví platné dokumenty, ktoré predložíte svojmu zamestnávateľovi.\"},{\"question\":\"Prečo je eRouška potrebná? Dokáže ma vôbec efektívne chrániť pred nákazou?\",\"answer\":\"Jednou z úloh eRoušky je zastaviť ďalšie šírenie nákazy tým, že pomáha čo najskôr izolovať potenciálne nakazené osoby od ostatných. Vďaka tomu potom nie je nutné zavádzať plošnú karanténu a obmedzenia, čo umožňuje znižovať dopady pandémie na spoločnosť a ekonomiku ČR. Aplikácie na podobnom princípe fungujú aj v ďalších štátoch a sú účinným prostriedkom v boji proti šíreniu choroby COVID-19.\\n\\nAplikácia eRouška 2.0 je doplnkovou aplikáciou Chytrej karantény - systému ministerstva zdravotníctva. Prostredníctvom technológie Bluetooth sa eRouška spája s ďalšími eRouškami v najbližšom okolí a ukladá ich anonymné identifikátory. Ak sa u človeka preukáže nákaza COVID-19, spojí sa s ním pracovník hygienickej stanice a overí, či osoba používa aplikáciu eRouška. Ak áno, pošle jej overovací SMS kód, ktorý užívateľovi umožní odoslať svoje anonymné identifikátory do ostatných eRoušek. Aplikácia ostatných užívateľov potom podľa epidemiologického modelu \\\\* čo najpresnejšie vyhodnotí, či títo používatelia prišli s nakazeným do kontaktu dosť blízko a na dostatočne dlhú dobu, aby bolo nutné ich prostredníctvom notifikácie v smartfóne varovať a smerovať k ďalšiemu vyšetreniu. eRouška 2.0 teda pomáha čo najefektívnejšie informovať ďalších potenciálnych prenášačov vírusu a urýchliť ich testovanie. Tým sa zníži počet infikovaných v spoločnosti aj riziko vašej infekcie.\\n\\n_\\\\*Bližšie ako 2 metre po dobu dlhšiu ako 7 min._\"},{\"question\":\"Čo ak niekto neprizná, že je chorý?\",\"answer\":\"Aj to sa môže stať. Veríme však, že používatelia eRoušky chcú aktívne pomáhať so zastavením ďalšieho šírenia nákazy a aplikáciu využijú, aby mohli čo najskôr varovať osoby, s ktorými prišli do rizikového kontaktu. **Zámerné šírenie COVID-19 je v ČR považované za trestný čin.**\"},{\"question\":\"Má zmysel si eRoušku inštalovať, keď ju nebude používať dosť ľudí?\",\"answer\":\"Práve preto by ste nemali váhať. Čím viac nás bude eRoušku používať, tým lepšie vytvoríme sieť, ktorá nás bude vzájomne chrániť a varovať pred rizikom. Pomôžte nám aj vy. Inštaláciou aplikácie sa môžete aktívne zapojiť do boja proti COVID-19. O aplikácii môžete povedať aj ľuďom vo svojom okolí, prípadne im s ich súhlasom pomôcť s inštaláciou.\"},{\"question\":\"Ako sa eRouška líši od iných podobných aplikácií?\",\"answer\":\"eRouška používa technológiu Bluetooth, ktorou je vybavená väčšina chytrých mobilných zariadení v Česku. Vďaka tomu funguje aj v budovách, podzemných parkoviskách alebo v metre. Aplikácia je navrhnutá tak, aby nezbierala informácie o vašej polohe (napr. cez GPS). Iba anonymne zisťuje, s ktorými ďalšími používateľmi aplikácie ste prišli do bližšieho kontaktu. Ako jediná v ČR môže oficiálne používať Apple / Google protokol, ktorý garantuje bezpečnosť aplikácie na platformách Android a iOS a znižuje spotrebu batérie.\"},{\"question\":\"Čo je to chytrá karanténa? Akú v nej hrá úlohu eRouška?\",\"answer\":\"Ide o súbor chytrých opatrení, ktoré chránia ľudí pred nákazou a ekonomiku pred kolapsom. Namiesto toho, aby bola v karanténe celá krajina, chytrá karanténa uľahčuje dohľadávanie, testovanie a izoláciu len chorých a z choroby dôvodne podozrivých ľudí.\\n\\nKonkrétne ide o systém riadenia v oblastiach predpovedi vývoja, podpory rozhodovania, aktívneho vyhľadávania kontaktov, testovania vr. riadenia kapacít odberových miest, laboratórií, riadenia karantén a súvisiaceho materiálneho a IT zabezpečenia na zvládnutie pandémie ochorenia COVID-19. Chytrá karanténa 2.0 je označením pre prechod projektu pod Ministerstvo zdravotníctva, ktoré bude vďaka novým nástrojom vedieť do budúcna kedykoľvek veľmi rýchlo reagovať na akékoľvek epidémie.\\n\\nAplikácia eRouška je jeden z nástrojov, ktoré vznikli na podporu chytrej karantény. Pomocou technológií - eRoušky - môžeme aktívne upozorniť rizikových jedincov, ktorí sa stretli s nakazeným, aby zvýšili hygienické opatrenia, zvážili dobrovoľnú karanténu, prípadne pri pociťovaní príznakov kontaktovali obvodného lekára. Vďaka týmto krokom veríme, že sa podarí zmierniť šírenie nákazy a ušetriť zdravotníctvo fatálneho preťaženia.\"}]},{\"title\":\"Pokročilé informácie o eRouške\",\"subtitle\":\"Zber a vyhodnotenie dát, význam upozornení\",\"icon\":\"https://erouska.cz/img/faq/advanced.png\",\"questions\":[{\"question\":\"Ako eRouška zaznamenáva a spracováva dáta o stretnutiach užívateľov?\",\"answer\":\"Chytrý telefón s aplikáciou eRouška zaznamená cez Bluetooth LE anonymné identifikátory (ID) z iných zariadení s touto aplikáciou. Informáciu o \\\"stretnutí\\\" a jeho dĺžke ukladá do svojej vnútornej pamäte.\\n\\nV prípade, že budete mať pozitívny výsledok testu na COVID-19, príde vám jednorázový SMS kód. Zadáte ho do aplikácie ( [postup tu](https://erouska.cz/sk/sms) ), a tým umožníte odoslanie svojich anonymných identifikátorov na server, odkiaľ si ich stiahnu ostatné eRoušky na vyhodnotenie. Algoritmus v aplikácii každého užívateľa na základe epidemiologického modelu automatizovane vyhodnotí zozbierané dáta - porovná identifikátory so všetkými zaznamenanými stretnutiami. V prípade rizikového kontaktu zobrazí upozornenie, že hrozí nákaza kvôli stretnutiu s pozitívne testovanou osobou, a odporučí ďalší postup.\\n\\nPodrobné informácie o zbere a spracovaní dát, nájdete v [Informáciách o spracování osobných údajov v aplikácii eRouška 2.0](https://erouska.cz/sk/podminky-pouzivani).\"},{\"question\":\"Ako eRouška vyhodnocuje rizikové stretnutia?\",\"answer\":\"Pôvodne epidemiológovia stanovili rizikový kontakt ako stretnutie, ktoré je vo vzdialenosti bližšie ako 2 metre po dobu aspoň 15 minút. Agresívnejšie šírenie nových mutácií koronavírusu však ukazuje, že k nákaze stačí aj kratší kontakt.\\n\\nNa vyššiu agresivitu šírenia mutácií reagujeme po konzultáciách postupu s Apple/Google a ostatnými krajinami EÚ postupným uvoľňovaním parametrov vyhodnotenia rizikového kontaktu. Zmeny parametrov prebiehajú už od začiatku marca, priebežne vyhodnocujeme ich vplyv na počet nájdených kontaktov. Zatiaľ upravujeme predovšetkým parametre zodpovedajúce dĺžke stretnutia, aktuálne ide približne o 7 minút.\\n\\nAplikácia eRouška sa snaží parametre vzdialenosti a času stretnutia vyhodnocovať čo najpresnejšie dostupnými technológiami. Vzdialenosť medzi používateľmi, respektíve ich telefónmi, sa odhaduje na základe sily signálu Bluetooth. Doba stretnutia sa posudzuje podľa meracích okien - telefón v niekoľkominútových intervaloch zisťuje, či sú v okolí iné telefóny s eRouškou.\\n\\nPresnosť merania vyššie uvedených parametrov má preto technické obmedzenia. Čím väčšia vzdialenosť a čím kratší kontakt, tým ťažšie je jeho presné vyhodnotenie. Uvoľňovanie parametrov vyhodnotenia tak zvyšuje pravdepodobnosť falošnej pozitivity a falošnej negativity.\\n\\nVyššiu presnosť merania možno dosiahnuť častejším vysielaním a zaznamenávaním ďalších zariadení s eRouškou v okolí. To sa bohužiaľ premietne do vyššej spotreby batérie. Algoritmy merania nastavujú Apple a Google vo svojom Exposure Notification protokole, na ktorom je eRouška postavená. Vývojári eRoušky môžu iba čiastočne upravovať niektoré parametre a vykonávať doplňujúce filtrovanie výsledkov. Bližšie vysvetlenie nájdete v sekcii [Spôsob vyhodnotenia](https://erouska.cz/sk/vyhodnoceni-rizika) .\"},{\"question\":\"Ako eRouška reaguje na nové varianty / mutácie vírusu?\",\"answer\":\"Nové varianty vírusov, ktoré sa objavili od začiatku pandémie, priebežne skúmajú odborníci z pohľadu infekčnosti a vplyvov na zdravie. Preto sú vývojári eRoušky v úzkom kontakte s úradmi aj so spoločnosťami Apple a Google, ktoré poskytujú protokol pre vyhodnocovanie kontaktov s nákazou, aby v prípade zmeny rizika infekcie na základe nových poznatkov mohli upraviť algoritmus pre výpočet v aplikácii.\"},{\"question\":\"Nemôže sa stať, že eRouška mylne vyhodnotí kontakt s inou osobou, ktorá je napríklad vedľa v aute na križovatke, za dverami alebo tenkou stenou?\",\"answer\":\"Aplikácia eRouška funguje na princípe merania sily signálu medzi dvoma zariadeniami. Technicky preto nemožno vylúčiť nepresný odhad vzdialenosti a mylnú detekciu rizikového stretnutia. Technické obmedzenia, riziká používania aplikácie a postup vyhodnocovania stretnutia popisujeme na stránke [Spoľahlivosť vyhodnotenia rizikového kontaktu](https://erouska.cz/sk/vyhodnoceni-rizika) a v sekcii [Technické podmienky v Podmienkach spracovania](https://erouska.cz/sk/podminky-pouzivani#technicke) .\\n\\nNa vyhodnotenie kontaktu ako rizikového je okrem vzdialenosti (do 2 m) relevantná tiež dĺžka kontaktu (aspoň 15 minút) - napr. zastavenie na semaforoch na 1-2 minúty je teda nevýznamné.\"},{\"question\":\"Zobrazilo sa mi upozornenie na možné stretnutie s nakazeným, ale eRouška po otvorení ukazuje, že nezaznamenala nikoho nakazeného v mojom okolí.\",\"answer\":\"Ak vás prekvapilo oznámenie s červenou ikonkou vírusu a textom Oznámenie o možnom kontakte (Android) alebo Zaznamenanie kontaktov (iOS), nemusíte sa obávať. Ide len o systémové oznámenia Androidu a iOS, na ktoré nemá eRouška vplyv. Ako vyzerá skutočné oznámenie eRoušky nájdete [na tomto obrázku](https://www.facebook.com/eRouska/posts/180938253548928).\\n\\nAk by ste mali rizikový kontakt s nakazenou osobou, zistíte to priamo na hlavnej obrazovke eRoušky.\\n\\nAk ste predtým skutočne videli rizikové stretnutie priamo v eRouške, odkiaľ zmizlo, je možné, že aktualizáciou aplikácie pre Android došlo k úprave parametrov vyhodnotenia rizikového kontaktu a teraz už eRouška nepovažuje dané stretnutie za rizikové.\"},{\"question\":\"Takže všetci budú vedieť, že mám COVID-19?\",\"answer\":\"Nebudú. Ak ochoriete, vaša totožnosť je známa len a len pracovníkovi hygienickej stanice. Osoby, ktorým sa zobrazí upozornenie na možný rizikový kontakt, sa nedozvadia, kto ani kde ich mohol nakaziť. Aplikácia zobrazuje len všeobecnú informáciu o rizikovom stretnutí s nakazeným, deň stretnutia a ďalší odporúčaný postup. Vaša identita je ochránená.\"},{\"question\":\"Bol som na testoch na COVID-19, ale stále mi neprišla SMS s overovacím kódom do eRoušky. Za ako dlho ju mám čakať?\",\"answer\":\"Najprv by vám mal prísť výsledok testu v SMS od testovacieho laboratória. To výsledky súčasne odosiela do centrálneho informačného systému Ministerstva zdravotníctva. Po tom, čo sa informácie z informačného systému prepíšu do systému hygieny, sa odosielajú automatické SMS eRoušky s overovacími kódmi. Ak laboratórium nestihne odovzdať výsledky do informačného systému v rovnaký deň, môže vám SMS s overovacím kódom prísť až nasledujúci deň.\\n\\n**Skontrolujte, prosím, či info SMS eRoušky nezablokoval omylom systém ako spam**\\n\\n*   **Android:** V aplikácii Správy kliknite na ikonu možností (tri bodky) a ďalej na Spam a zablokované konverzácie (prípadne na tri bodky → Nastavenia → SIM → Spam). Ak je tu SMS eRoušky, kliknite na Nie je spam.\\n\\n**Ak vám SMS eRoušky neprišla ani nasledujúci deň** potom, čo vám prišla SMS s pozitívnymi výsledkami z laboratória, pošlite nám na [info@erouska.cz](mailto:info@erouska.cz?subject=) žiadosť o nový SMS kód. Uveďte prosím tieto informácie:\\n\\n*   celé meno, ktoré ste uviedli na žiadanke o test,\\n*   tel. číslo, ktoré ste uviedli na žiadanke o test,\\n*   dátum výsledku testov,\\n*   odberové miesto / laboratórium, z ktorého vám prišli výsledky testu,\\n*   typ testu (PCR / antigén).\"},{\"question\":\"Príde mi SMS s kódom do eRoušky, keď mám pozitívny antigénny test na COVID-19?\",\"answer\":\"Pokiaľ máte [pozitívny výsledok antigénneho testu a máte príznaky COVID-19](https://drive.google.com/file/d/1HPwtltNRuzmowjZgE_c1u-a8m3W89T-p/view) (uvádzate v žiadanke), príde vám SMS s kódom do eRoušky rovnako ako v prípade pozitívneho PCR testu.\\n\\nV prípade, že máte [pozitívny výsledok antigénneho testu, ale nepociťujete príznaky](https://covid.gov.cz/situace/antigenni-testovani/interpretace-vysledku-antigenniho-testu-jak-se-zachovat-po-obdrzeni) , pôjdete na PCR test. Na základe pozitívneho výsledku PCR testu by vám prišla SMS s kódom do eRoušky. V prípade negatívneho PCR testu neodosielate dáta z eRoušky.\"},{\"question\":\"V ktorých štátoch EÚ môžem eRoušku používať? Ako funguje spolupráca so zahraničnými aplikáciami?\",\"answer\":\"Európska komisia vyvinula centrálnu bránu EFGS pre bezpečnú výmenu informácií (\\\"brána pre zabezpečenie interoperability\\\"). Táto brána umožňuje aplikácii eRouška prijímať a odovzdávať si varovania so zapojenými trasovacím aplikáciami používanými v jednotlivých štátoch EÚ. Podrobné informácie o bráne sú k dispozícii na webe Európskej komisie v dokumente [Koronavírus: brána EÚ na zabezpečenie interoperability aplikácií pre vysledovanie kontaktov a varovaní - otázky a odpovede](https://ec.europa.eu/commission/presscorner/detail/cs/qanda_20_1905#gateway) .\\n\\nAk chcete zobraziť ďalšie informácie o zapojených štátoch a nastaveniach, kliknite na hlavnej obrazovke aplikácie na Cesty do zahraničia, kde môžete funkciu zapnúť/vypnúť a nižšie vidieť zoznam zapojených štátov. Oficiálny aktuálny zoznam zapojených štátov EÚ nájdete [na webe Európskej komisie.](https://ec.europa.eu/health/sites/health/files/ehealth/docs/gateway_jointcontrollers_en.pdf)\"},{\"question\":\"Používa eRouška Apple/Google API?\",\"answer\":\"Nová verzia - eRouška 2.0 pre Android aj iOS už používa Apple / Google Exposure Notification API. Nezabudnite preto prosím aplikáciu eRouška aktualizovať v [Google Play (Android)](https://play.google.com/store/apps/details?id=cz.covid19cz.erouska) alebo [App Store (iOS)](https://apps.apple.com/cz/app/erou%C5%A1ka/id1509210215) a znovu aktivovať.\"},{\"question\":\"Čo je to Apple/Google Exposure Notification API (protokol)?\",\"answer\":\"Spoločnosti Apple a Google spoločne vyvíjajú technológie, vďaka ktorým môžu verejné zdravotné inštitúcie (u nás MZČR) vyvíjať národné aplikácie na trasovanie rizikových kontaktov s osobami s ochorením COVID-19.\\n\\nKonkrétne ide napríklad o rozhranie, ktoré daným aplikáciám (u nás eRouška) umožňuje spoľahlivo pristupovať k systémovým prostriedkom Android a Apple zariadení za účelom zaznamenanie stretnutia - najmä využívať Bluetooth LE na overenie kontaktu a bežať na pozadí bez potreby ďalších nastavení aplikácie alebo operačného systému. Šifrovaný komunikačný protokol potom zaisťuje zabezpečený prenos aktuálnych zoznamov identifikátorov nakazených užívateľov medzi trasovacími aplikáciami za účelom vyhodnotenia rizikového stretnutia a včasného zobrazenie notifikácie.\\n\\nBližšie informácie nájdete priamo na webových stránkach spoločností [Apple (anglicky)](https://www.apple.com/covid19/contacttracing) a [Google (česky)](https://www.google.com/covid19/exposurenotifications/).\"},{\"question\":\"Kde v eRouške nájdem informácie o zaznamenaných stretnutiach?\",\"answer\":\"Aplikácia eRouška 2.0 je postavená na Apple / Google Exposure Notification protokole, ktorý zaisťuje zabezpečené zaznamenávanie a vyhodnotenie stretnutí. Z bezpečnostných dôvodov však neposkytuje aplikácii priamy prístup k dátam o zaznamenaných stretnutiach.\\n\\nČi aplikácia funguje správne, sa dozviete na jej hlavnej obrazovke. Informácie o všetkých zaznamenaných stretnutiach s nakazenými užívateľmi sú uložené na úrovni systému. Tieto stretnutia však nemusela byť rizikové. Nájdete ich v Nastaveniach:\\n\\n*   Android: Nastavenia → Google → Oznámenia o možnom kontakte COVID-19\"},{\"question\":\"Čo znamenajú jednotlivé záznamy v Nastavenia → Kontrola kontaktov?\",\"answer\":\"Protokolovanie kontaktov s nákazou ukazuje, koľko kľúčov od nakazených užívateľov sa stiahlo do vášho telefónu zo servera a koľko z nich zodpovedá kľúčom, ktoré váš telefón zaznamenal.\\n\\n**Kontroly kontaktov:** Tu sú dáta a časy jednotlivých stiahnutí kľúčov zo servera za posledné dva týždne. Pre ďalšiu kontrolu je potreba otvoriť jednotlivé záznamy.\\n\\n**Android: Počet kľúčov:** Ide o počet kľúčov od pozitívne testovaných používateľov. Tieto kľúče si váš telefón v danom dátume stiahol pre kontrolu možných kontaktov s nakazenými užívateľmi.\\n\\n**Android: Počet výsledkov** Ide o počet zhôd medzi stiahnutými kľúčmi a tými, ktoré zaznamenal váš telefón vo svojom okolí. Ak je číslo vyššie ako 0, tak ste sa stretli s nakazeným užívateľom. To však ešte neznamená, že nutne muselo ísť o rizikové stretnutie.\\n\\n**Časová značka:** Dátum a čas, kedy ku kontrole došlo. Nejde však o čas rizikového stretnutie (ten nie je k dispozícii kvôli ochrane súkromia užívateľov).\\n\\n**Zdroj údajov:** Aplikácia, ktorá zaisťuje kontrolu a vyhodnotenie rizikových stretnutí.\\n\\n**Hašovací kód:** Kontrolný súčet súboru obsahujúceho stiahnutie kľúčov nakazených užívateľov. Kým sa obsah súboru nezmení, tak sa nezmení ani kontrolný súčet počas príslušného dvojtýždňového obdobia.\"},{\"question\":\"Ako zistím, že eRouška funguje na pozadí? Prečo na Androide nevidím ikonku eRoušky v záhlaví?\",\"answer\":\"Notifikačnú ikonu sme odstránili, pretože zaznamenávanie a vyhodnocovanie stretnutia už zabezpečuje priamo Apple / Google protokol na úrovni operačného systému. Samotná aplikácia eRouška sa potom stará o sťahovanie kľúčov (identifikátory) nakazených užívateľov 1-2× denne a nemusí bežať permanentne na pozadí.\\n\\nŽe je aplikácia aktuálna, zistíte na hlavnej obrazovke. Stiahnutie kľúčov nakazených potom môžete overiť v Nastaveniach telefónu:\\n\\n*   **Android:** Nastavenia → Google → Oznámenia o možnom kontakte COVID-19 → kliknúť na tri bodky vpravo hore → Kontrola kontaktu\"},{\"question\":\"Prečo sa líši dátum a čas \\\"Poslednej aktualizácie dát\\\" na hlavnej obrazovke eRoušky a údaje a časy \\\"Kontroly kontaktov\\\", ktoré vidím v Nastaveniach telefónu?\",\"answer\":\"Aplikácia eRouška ukazuje na hlavnej obrazovke dátum a čas posledného úspešného pokusu o kontrolu nových kľúčov (identifikátory) nakazených používateľov na serveri. V Nastaveniach telefónu sa zobrazujú iba dátumy a časy, kedy boli naposledy nové kľúče nájdené a vyhodnotené v telefóne.\\n\\nKľúče nakazených užívateľov sa do telefónu sťahujú 1-2× denne.\"},{\"question\":\"Prečo v eRouške nevidím konkrétny čas rizikového stretnutia?\",\"answer\":\"Aplikácia eRouška je postavená na Apple / Google Exposure Notification protokolu, ktorý zaisťuje zaznamenávanie a vyhodnocovanie stretnutia na úrovni operačného systému. Apple / Google protokol poskytuje eRouške prístup len k dátumu rizikového stretnutia, bližšie informácie nie sú k dispozícii z dôvodu čo najvyššej ochrany súkromia používateľov.\"},{\"question\":\"Prečo v Kontrole kontaktov v Nastaveniach telefónu vidím \\\"Nájdené kľúče: 0\\\"?\",\"answer\":\"Znamená to, že Apple / Google API vo vašom telefóne nevyhodnotilo v danom dátume žiadne stretnutie s nakazeným užívateľom. Inak povedané, stiahnuté kľúče nakazených užívateľov sa v danom dni nezhodujú so žiadnym zo zaznamenaných kľúčov vo vašom zariadení.\"},{\"question\":\"Prečo v Nastaveniach telefónu v sekcii Kontrola kontaktu vidím u konkrétneho dátumu nájdené kľúče, ale eRouška mi nezobrazuje žiadne rizikové stretnutia?\",\"answer\":\"Počet nájdených kľúčov predstavuje počet zaznamenaných stretnutí s nakazenými užívateľmi. Neznamená to však nutne, že tieto stretnutia bola rizikové. Ak stretnutie s nakazeným užívateľom nebolo rizikové, tak na neho eRouška neupozorňuje. Preto v aplikácii nie je vidieť.\"},{\"question\":\"Zobrazilo sa mi upozornenie / notifikácia na rizikové stretnutie, ku ktorému došlo pred niekoľkými dňami. Prečo ma eRouška upozornila až teraz?\",\"answer\":\"Aplikácia eRouška nemôže vyhodnotiť riziko stretnutia a zobraziť upozornenie skôr, než užívateľ s pozitívnym testom na COVID-19 odošle dáta zo svojej eRoušky. Ak sa vám dnes zobrazila notifikácia, ktorá upozorňuje na rizikové stretnutie s nakazeným pred niekoľkými dňami, znamená to, že nakazený odoslal dáta zo svojej eRoušky len včera. Vaša eRouška si ich dnes stiahla a vyhodnotila.\"},{\"question\":\"Zobrazilo sa mi upozornenie / notifikácia na rizikové stretnutie s nakazeným, ale na obrazovke Rizikové stretnutia vidím viac záznamov s rôznymi dátami.\",\"answer\":\"Aplikácia eRouška vyhodnocuje rizikové stretnutia až po tom, čo používateľ s pozitívnym testom na COVID-19 odošle dáta zo svojej eRoušky. Ak sa vám zobrazila iba jedna notifikácia na rizikový kontakt, ale v Rizikových stretnutiach máte viac záznamov, znamená to, že ste sa s nakazeným stretli v predchádzajúcich dňoch viackrát alebo že v jeden deň odoslalo dáta zo svojho telefónu viac nakazených užívateľov súčasne.\"},{\"question\":\"Bude eRouška fungovať ako \\\"covid pas\\\" pre zobrazovanie výsledkov testov a preukázanie očkovania?\",\"answer\":\"Anonymný charakter aplikácie eRouška ju neumožňuje kombinovať s tzv. Digitálnym zeleným certifikátom (Digital Green Certificate), ktorý pracuje s overenou identitou a osobnými údajmi užívateľa - výsledkami testov alebo vykonaným očkovaním proti COVID-19.\"},{\"question\":\"Publikuje eRouška nejaké štatistiky o používaní aplikácie?\",\"answer\":\"Štatistiky publikujeme vo formáte JSON na adrese [stats.erouska.cz](https://stats.erouska.cz) . Dáta majú nasledujúcu štruktúru:\\n\\n{\\\\\\\\n  \\\"data\\\": {\\\\\\\\n    \\\"modified\\\": 1608696001,\\\\\\\\n    \\\"date\\\": \\\"20201223\\\",\\\\\\\\n    \\\"activations\\\\_yesterday\\\": 2042,\\\\\\\\n    \\\"activations\\\\_total\\\": 1475571,\\\\\\\\n    \\\"key\\\\_publishers\\\\_yesterday\\\": 718,\\\\\\\\n    \\\"key\\\\_publishers\\\\_total\\\": 39175,\\\\\\\\n    \\\"notifications\\\\_yesterday\\\": 631,\\\\\\\\n    \\\"notifications\\\\_total\\\": 197298\\\\\\\\n  }\\\\\\\\n}\\n\\n*   **modified** = Unix timestamp vygenerovaných štatistík,\\n*   **date** = dátum vytvorenia reportu,\\n*   **activations\\\\_yesterday** \\\\= počet aktivácií za predchádzajúci kalendárny deň,\\n*   **activations\\\\_total** = celkový počet aktivácií eRoušky,\\n*   **key\\\\_publishers\\\\_yesterday** \\\\= počet nakazených ľudí, ktorí zadali v predchádzajúcom dni do eRoušky kód pre odoslanie dát,\\n*   **key\\\\_publishers\\\\_total** \\\\= celkový počet nakazených ľudí, ktorí zadali do eRoušky kód pre odoslanie dát,\\n*   **notifications\\\\_yesterday** \\\\= počet ľudí, ktorým sa za predchádzajúci deň zobrazilo upozornenie na rizikové stretnutie,\\n*   **notifications\\\\_total** = celkový počet ľudí, ktorým sa zobrazilo upozornenie na rizikové stretnutie.\\n\\nZavolanie bez parametra zobrazí informácie k aktuálnemu dátumu. Zavolanie s parametrom `date` umožní získať dáta pre ľubovoľný deň od 23. 10. 2020 (za všetky predchádzajúce dni máme iba agregované dáta). Pomocou parametra `date` s hodnotou `all` možno získať všetky dáta, ktoré rozhranie poskytuje.\\n\\n*   dnešné dáta: [`https://stats.erouska.cz/`](https://stats.erouska.cz/)\\n*   dáta z 1. 12. 2020: [`https://stats.erouska.cz/?date=2020-12-01`](https://stats.erouska.cz/?date=2020-12-01)\\n*   dáta za všetky dni: [`https://stats.erouska.cz/?date=all`](https://stats.erouska.cz/?date=all)\"}]},{\"title\":\"Zabezpečenie dát\",\"subtitle\":\"Osobné údaje a ochrana súkromia\",\"icon\":\"https://erouska.cz/img/faq/security.png\",\"questions\":[{\"question\":\"Ako zistím, ktorá všetky dáta presne aplikácie ukladá a odosiela?\",\"answer\":\"Aplikácia eRouška používa od verzie 2.0 tzv. Apple / Google Exposure Notification API, ktoré sprostredkúva zber dát a odovzdávanie identifikátorov medzi užívateľmi. Aplikácia kvôli tomu už nemá priamy prístup k nameraným údajom, ktoré by mohla používateľom zobraziť, ako to bolo vo verzii 1.0.\\n\\nAplikácia každý deň sťahuje zoznam identifikátorov od používateľov, ktorým test potvrdil nákazu. Údaje s identifikátormi na spracovanie môže ostatným odoslať iba jediný užívateľ, a to až po zadaní jednorázového SMS kódu, ktorý získa v prípade pozitívneho testu na nákazu ochorením COVID-19 automaticky, prípadne na vyžiadanie.\\n\\nAplikácia ďalej odosiela na server anonymnú štatistickú / agregovanú informáciu, že došlo k notifikácii rizikového kontaktu. Táto informácia nie je viazaná na žiadny identifikátor užívateľa ani jeho mobilu a slúži iba na výpočet štatistických informácií o účinnosti systému eRouška.\\n\\nAby sme zaistili funkčnosť eRoušky, pracujeme tiež s údajmi o fungovaní (napr. záznamy o pádoch aplikácie a používaní aplikácie) na telefóne a používame k tomu štandardné nástroje (Firebase Crashlytics a Google Analytics) od spoločnosti Google. Telemetrické údaje odosielané aplikáciou do týchto služieb používajú identifikátory vašej osoby alebo telefónu.\\n\\nPodrobné informácie o zhromažďovaní a spracovaní údajov nájdete v  [Informáciách o spracovaní osobných údajov v aplikácii eRouška 2.0](https://erouska.cz/sk/podminky-pouzivani) .\"},{\"question\":\"Prenesú sa dáta z eRoušky po obnove telefónu zo zálohy alebo pri prechode na nový telefón?\",\"answer\":\"Z dôvodu ochrany súkromia užívateľov operačné systémy Android ani iOS nezálohujú dáta z Exposure Notification. Pri preinštalácii telefónu alebo prechode na iné zariadenie teda nemožno preniesť ani obnoviť zaznamenané a vygenerované identifikátory.\\n\\nAk chcete získať informáciu o možnom rizikovom stretnutí, odporúčame sledovať stav starého telefónu ešte po dobu 14 dní po inštalácii eRoušky na nové zariadenie. Pritom je potrebné:\\n\\n*   zabezpečiť, aby vaše zariadenie bolo zapnuté a pripojené k internetu, aby si mohlo sťahovať dáta na vyhodnotenie,\\n*   ideálne aspoň raz denne kontrolovať staršie zariadenia, teda otvoriť eRoušku.\\n*   Ak by ste počas týchto 14 dní mali pozitívny test, zadajte prosím kód do nového zariadenia a na získanie kódu pre staršie telefóny kontaktujte [info@erouska.cz](mailto:info@erouska.cz) .\\n\\nPo 14 dňoch už váš starý telefón nebude obsahovať žiadne dáta pre vyhodnotenie rizikového stretnutia. Môžete z neho preto odstrániť eRoušku a ponechať len v novom zariadení.\"},{\"question\":\"Čo keď mi telefón ukradnú alebo ho stratím?\",\"answer\":\"V aplikácii eRouška sú lokálne uložené len anonymné informácie o ďalších zariadeniach, ktoré eRouška zaznamenala vo svojom okolí. Žiadne riziko to neprináša pre vás ani pre majiteľov takto zaznamenaných zariadení. Iné aplikácie, ktoré bežne využívate, môžu vo vašom telefóne pravdepodobne ukladať oveľa citlivejšie údaje. Majte preto svoj telefón chránený kódom alebo biometricky (odtlačkom prsta alebo tvárou).\"},{\"question\":\"Je aplikácia eRouška v súlade s GDPR?\",\"answer\":\"Celý systém aplikácie eRouška, vrátane webových stránok, je navrhnutý plne v súlade s GDPR aj zákonom o spracovaní osobných údajov.\\n\\nTu nájdete bližšie informácie:\\n\\n*   [Informácie o spracovaní osobných údajov v aplikácii eRouška 2.0](https://erouska.cz/sk/podminky-pouzivani)\\n*   [Audit zdrojového kódu aplikácie](https://erouska.cz/sk/audit-kod)\"},{\"question\":\"Ako užívateľa chránite pred zneužitím dát?\",\"answer\":\"Užívateľa chránime predovšetkým minimálnym rozsahom zaznamenávaných dát a ich ukladaním priamo do zariadenia. Dáta používateľov sa bez ich vedomia a súhlasu nikam neposielajú ani nespracovávajú. Do telefónov sa zaznamenávajú anonymné identifikátory (ID) zariadenia s nainštalovanou aplikáciou eRouška a informácie o čase, dĺžke a sile ich Bluetooth signálu. Dáta sa spracovávajú automatizovane na serveri iba po odsúhlasenom odoslaní užívateľom.\"},{\"question\":\"Dohliada na zabezpečenie dát z aplikácie nejaká nezávislá organizácia?\",\"answer\":\"Celý systém aplikácie eRouška, vrátane podporných webových stránok, je navrhnutý plne v súlade s GDPR. Kód aplikácie je ako open-source voľne k dispozícii ([Android](https://github.com/covid19cz/erouska-android), [iOS](https://github.com/covid19cz/erouska-ios)) a prešiel [auditom nezávislých vzdelávacích inštitúcií](https://erouska.cz/sk/audit-kod).\\n\\nĎalšie informácie nájdete v  [Informáciách o spracovaní osobných údajov v rámci aplikácie eRouška 2.0](https://erouska.cz/sk/podminky-pouzivani) .\"},{\"question\":\"Môže ma niekto pomocou aplikácie eRouška sledovať?\",\"answer\":\"Nie. Aplikácia nezbiera údaje o vašej polohe a k uloženým dátam máte prístup iba vy. Samotné údaje, ktoré aplikácia po vašom súhlase odosiela, nemôžu byť použité k vášmu sledovaniu. Každá eRouška navyše mení z dôvodu bezpečnosti a ochrany súkromia užívateľov pravidelne svoje vysielané ID, aby nebolo ľahké ho odchytiť a nejako zneužiť.\"},{\"question\":\"Je možné overiť, že aplikácia nezaznamenáva moju polohu?\",\"answer\":\"Áno. Aplikácia eRouška je publikovaná s otvoreným zdrojovým kódom ([Android](https://github.com/covid19cz/erouska-android), [iOS](https://github.com/covid19cz/erouska-ios)), takže znalý človek môže ľahko overiť, že údaje o polohe aplikácie naozaj nezbiera.\\n\\nZdrojové kódy aplikácie eRouška [preverujú nezávislé autority](https://erouska.cz/sk/audit-kod) , ktoré kontrolujú, že aplikácia:\\n\\n*   nesleduje polohu\\n*   sama automaticky dáta s identifikátormi nikam neposiela\"},{\"question\":\"Je možné identifikátor aplikácie (ID) používateľa spárovať s konkrétnou osobou?\",\"answer\":\"Aplikácia eRouška 2.0 [nepracuje s osobnými údajmi](https://erouska.cz/sk/podminky-pouzivani) . Vygenerované anonymné ID eRoušky sa medzi aplikáciami a servermi prenášajú výlučne po chránenom komunikačným protokolom, ktorý spoločne vyvinuli spoločnosti Apple a Google. K identifikátorom nemajú prístup ani používatelia, ani vývojári, ani iná autorita.\"},{\"question\":\"Kto má (môže mať) prístup k mojim údajom?\",\"answer\":\"K zaznamenaným údajom o stretnutí nemá v eRouške 2.0 prístup užívateľ, ani nikto iný. Dôvodom je, že aktuálna verzia aplikácie používa Apple / Google protokol, ktorý k zaznamenaným dátam neposkytuje prístup ani užívateľom, ani vývojárom a správcom. Dáta (anonymné identifikátory nakazených) sa prenášajú na server a odtiaľ do ostatných eRoušiek šifrovane a vyhodnocujú sa až na koncových zariadeniach automatizovane za účelom zobrazenia prípadných upozornení o rizikovom kontakte. Zo servera aj zo zariadení sa dáta mažú automaticky po 14 dňoch.\"},{\"question\":\"Ako dlho do minulosti sú dáta k dispozícii? Kedy a ako prebieha ich mazanie?\",\"answer\":\"V aplikácii eRouška sa uchovávajú dáta zaznamenané za posledných 14 dní, staršie záznamy sa automaticky odmazávajú. Pokiaľ po pozitívnom teste na COVID-19 zadáte overovací kód do eRoušky a odošlete identifikátory z telefónu na server, zostanú tu 14 dní a potom dôjde k ich zmazaniu. Dáta môžete zo svojho zariadenia zmazať v Nastaveniach Oznámenie o kontaktoch s nákazou/Kontakty s nákazou/Exposure Notification - konkrétny postup záleží na type a verzii operačného systému.\\n\\n*   **Android:** Na zariadeniach so systémom Android v súčasnom nastavení dôjde pri odinštalovaní aplikácie eRouška k zmazaniu zaznamenaných kľúčov (identifikátorov).\\n\\nInformácie o správcoch a spracovateľoch údajov nájdete v  [Informáciách o spracovaní osobných údajov v rámci aplikácie eRouška](https://erouska.cz/sk/podminky-pouzivani) .\"},{\"question\":\"Môžem si používanie aplikácie kedykoľvek rozmyslieť? Môžem zmazať dáta, ktoré odošlem na spracovanie?\",\"answer\":\"Aplikáciu môžete kedykoľvek odinštalovať. Vygenerované a zaznamenané kľúče (záznamy stretnutí) môžete zo svojho zariadenia zmazať v Nastaveniach Oznámenie o kontaktoch s nákazou/Kontakty s nákazou/Exposure Notification - konkrétny postup záleží na type a verzii operačného systému. Údaje odoslané na server sa zmažú automaticky po 14 dňoch.\\n\\n*   **Android:** Na zariadeniach so systémom Android v súčasnom nastavení dôjde pri odinštalovaní aplikácie eRouška tiež k zmazaniu zaznamenaných kľúčov (identifikátorov).\"},{\"question\":\"Čo sa deje s dátami po vymazaní aplikácie z mobilu?\",\"answer\":\"**Android:** Keď zmažete aplikáciu z telefónu alebo tabletu s OS Android, dôjde tiež k zmazaniu zaznamenaných kľúčov (identifikátorov).\\n\\nAk aplikáciu znova nainštalujete, začnú sa zbierať a do telefónu ukladať úplne nové dáta.\"},{\"question\":\"Kde nájdem zdrojový kód aplikácie?\",\"answer\":\"Aplikácia eRouška je publikovaná s otvoreným zdrojovým kódom. Nájdete ho na GitHube ([Android](https://github.com/covid19cz/erouska-android) , [iOS](https://github.com/covid19cz/erouska-ios)).\"}]},{\"title\":\"Inštalácia a kompatibilita\",\"subtitle\":\"Podporované telefóny a možnosti inštalácie\",\"icon\":\"https://erouska.cz/img/faq/compatibility.png\",\"questions\":[{\"question\":\"Na akých telefónoch aplikácia eRouška funguje? Prečo sú nároky vyššie než v eRouške 2.0?\",\"answer\":\"Na inštaláciu aplikácie eRouška potrebujete mobilné zariadenia s týmito parametrami:\\n\\n*   iPhone s iOS verzie 13.5 a vyššej\\n*   OS Android verzie 6.0 a vyššej s Google Play Services (nemá len malé percento telefónov Huawei a niektoré telefony s vlastnou ROM)\\n*   Bluetooth LE (Low Energy)\\n\\nAk vaše mobilné zariadenie nie je s eRouškou kompatibilné (nemá potrebné technológie / funkcie), Google Play ani Apple App Store vám neumožní aplikáciu nainštalovať. Aplikácia je dostupná len pre niektoré tablety Android. Nie je k dispozícii pre iPad.\\n\\nMinimálne požiadavky na kompatibilitu stanovujú spoločnosti Apple a Google. Vychádzajú z požiadaviek Apple / Google Exposure Notification protokolu, ktorý nová eRouška používa. Na Apple / Google protokol sme sa rozhodli prejsť kvôli zabezpečeniu fungovania eRoušky na iPhonoch a kvôli umožneniu cezhraničnej kompatibility s podobnými aplikáciami ďalších európskych štátov.\"},{\"question\":\"Odkiaľ si môžem eRoušku bezpečne stiahnuť a nainštalovať?\",\"answer\":\"Aplikácia eRouška je dostupná iba pre:\\n\\n*   Android: [v Obchode Google Play](https://play.google.com/store/apps/details?id=cz.covid19cz.erouska) .\"},{\"question\":\"Je možné aplikáciu stiahnuť aj inak ako z oficiálnych aplikačných obchodov? Je k dispozícii balíček apk?\",\"answer\":\"Aplikácia eRouška 2.0 používa Apple/Google protokol pre zaznamenávanie stretnutia a prenos dát. Preto je tiež závislá na systémových službách, bez ktorých nebude fungovať, a nie je ju teda možné inštalovať z iných ako oficiálnych aplikačných obchodov. Aplikačné obchody spoľahlivo vyfiltrujú podporované zariadenia.\\n\\nVývojári eRoušky nikdy neposkytujú užívateľom odkazy na inštalačné balíčky APK alebo samotné inštalačné súbory mimo oficiálne obchody s aplikáciami. V aplikáciách nainštalovaných neoficiálnou cestou by sme nedokázali garantovať ich zabezpečenie, zabezpečiť ich aktualizáciu ani rovnakú úroveň užívateľskej podpory. Preto prosím nikdy neinštalujte eRoušku z .apk súborov, ktoré ste našli niekde na internete alebo vám ich niekto poslal e-mailom. Môžu obsahovať vírusy, trójske kone alebo iný škodlivý obsah.\"},{\"question\":\"Môžem používať eRoušku spolu s inou oficiálnou trasovacou aplikáciou iného štátu (napr. Corona-Warn-App)?\",\"answer\":\"Ak sa zdržiavate primárne na území ČR, odporúčame používať eRoušku aj pre cesty do zahraničia. [Aplikácia teraz spolupracuje aj s ďalšími štátmi EÚ](https://erouska.cz/sk/caste-dotazy#efgs) .\\n\\nV ostatných prípadoch môžete mať v telefóne nainštalované viaceré trasovacie aplikácie typu eRouška, ako sú Corona-Warn-App, Stopp Corona App, Imunni, Stop Covid ProteGO Safe a ďalšie. Ak však tiež používajú Apple/Google Exposure Notification protokol (platí najmä pre susedné štáty ČR), môžete mať v jeden okamih aktívnu iba jednu z týchto aplikácií. Ostatné je potreba pozastaviť. K zaznamenávaniu stretnutí v Apple/Google protokole totiž môže mať prístup vždy len jedna aplikácia.\"},{\"question\":\"Funguje eRouška, keď mám na mobile úsporný režim/režim nízkej spotreby/šetrič batérie?\",\"answer\":\"**Android:** Šetriče/sporiče batérie na zariadeniach s OS Android môžu do značnej miery obmedzovať beh aplikácií na pozadí. Hoci systém oznámení o možnom kontakte s ochorením COVID-19 naďalej funguje, nemusí dochádzať k vyhodnocovaniu rizikových kontaktov, a teda k prípadnému zobrazeniu notifikácií.\"},{\"question\":\"Bude možné používať eRoušku aj na smart hodinkách či náramkoch?\",\"answer\":\"Rozšírenie je teoreticky do budúcnosti možné. Zatiaľ ho ale nezvažujeme najmä preto, že by smart hodinky či náramok museli podporovať Bluetooth LE (Low Energy) a najmä Apple / Google protokol. Základný Bluetooth bez LE sám o sebe iba zaisťuje prenos dát, ale neumožňuje meranie intenzity stretnutí užívateľov na základe sily signálu.\"}]}]</value>\n    </entry>\n    <entry>\n        <key>v2_appleIgnoreAndroid</key>\n        <value>true</value>\n    </entry>\n    <entry>\n        <key>v2_howItWorksUITitle</key>\n        <value>Ako eRouška funguje</value>\n    </entry>\n    <entry>\n        <key>v2_validationTokenExpirationLeewayMinutes</key>\n        <value>15</value>\n    </entry>\n    <entry>\n        <key>v2_efgsDays</key>\n        <value>14</value>\n    </entry>\n    <entry>\n        <key>v2_keyExportNonTravellerUrls</key>\n        <value>[{\"country\":\"CZ\",\"url\":\"https://cdn.erouska.cz/erouska/index.txt\"}]</value>\n    </entry>\n    <entry>\n        <key>v2_keyExportEuTravellerUrls</key>\n        <value>[{\"country\":\"CZ\",\"url\":\"https://cdn.erouska.cz/erouska/index.txt\"},{\"country\":\"IT\",\"url\":\"https://cdn.erouska.cz/efgs/it/index.txt\"},{\"country\":\"LV\",\"url\":\"https://cdn.erouska.cz/efgs/lv/index.txt\"}]</value>\n    </entry>\n    <entry>\n        <key>v2_howItWorksEvalContent</key>\n        <value>eRoušky rizikové stretnutia vyhodnotia v prípade, že boli s nakazeným v kontakte na vzdialenosť bližšiu ako 2 metre a počas aspoň 7 minút od okamihu, keď bol podľa dostupných informácií nákazlivým.</value>\n    </entry>\n    <entry>\n        <key>v2_ragnarokHeadline</key>\n        <value>Pomoc eRoušky v boji s pandemií je u konce</value>\n    </entry>\n    <entry>\n        <key>v2_ragnarokMoreInfo</key>\n        <value>https://erouska.cz</value>\n    </entry>\n    <entry>\n        <key>v2_ragnarokBody</key>\n        <value>Děkujeme, že jste se stali součástí sítě 1,7 miliónu lidí. Pomohli jste ochránit své okolí rozesláním více než 400 tisíc upozornění na riziková setkání s nakaženými. Oznámení o rizikovém kontaktu vypneme a váš telefon již nebude hledat rizikové kontakty. eRouška je neaktivní a v případě jejího obnovení vám pošle oznámení.</value>\n    </entry>\n    <entry>\n        <key>v2_ragnarok</key>\n        <value>true</value>\n    </entry>\n</defaultsMap>\n"
  },
  {
    "path": "app/src/prod/google-services.json",
    "content": "{\n  \"project_info\": {\n    \"project_number\": \"941144972907\",\n    \"firebase_url\": \"https://daring-leaf-272223.firebaseio.com\",\n    \"project_id\": \"daring-leaf-272223\",\n    \"storage_bucket\": \"daring-leaf-272223.appspot.com\"\n  },\n  \"client\": [\n    {\n      \"client_info\": {\n        \"mobilesdk_app_id\": \"1:941144972907:android:937903c1584d72a673db2e\",\n        \"android_client_info\": {\n          \"package_name\": \"cz.covid19cz.erouska\"\n        }\n      },\n      \"oauth_client\": [\n        {\n          \"client_id\": \"941144972907-n11bsjourafod10sin5fomirse6crnfa.apps.googleusercontent.com\",\n          \"client_type\": 1,\n          \"android_info\": {\n            \"package_name\": \"cz.covid19cz.erouska\",\n            \"certificate_hash\": \"ef76fa2a3481eccda91db9777d375d91456898d2\"\n          }\n        },\n        {\n          \"client_id\": \"941144972907-r2kuhq8prsgdi48ldkhg5oqv6hiianuu.apps.googleusercontent.com\",\n          \"client_type\": 1,\n          \"android_info\": {\n            \"package_name\": \"cz.covid19cz.erouska\",\n            \"certificate_hash\": \"fc5858910faaf9e981cba216e0180a92655f6db7\"\n          }\n        },\n        {\n          \"client_id\": \"941144972907-32illceaaugnl3dhe54kuv5d75e2unk8.apps.googleusercontent.com\",\n          \"client_type\": 3\n        }\n      ],\n      \"api_key\": [\n        {\n          \"current_key\": \"AIzaSyDRe2nIq_Z0sbEp10Sh52v6TkBUdmDzHoA\"\n        }\n      ],\n      \"services\": {\n        \"appinvite_service\": {\n          \"other_platform_oauth_client\": [\n            {\n              \"client_id\": \"941144972907-32illceaaugnl3dhe54kuv5d75e2unk8.apps.googleusercontent.com\",\n              \"client_type\": 3\n            }\n          ]\n        }\n      }\n    }\n  ],\n  \"configuration_version\": \"1\"\n}"
  },
  {
    "path": "app/src/prod/res/values/controls.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"uri_scheme\">erouska</string>\n    <string name=\"key_server_base_url\">https://europe-west1-daring-leaf-272223.cloudfunctions.net/</string>\n    <string name=\"verification_server_base_url\">https://apiserver-jyvw4xgota-ew.a.run.app/</string>\n    <string name=\"covid_data_server_base_url\">https://europe-west1-daring-leaf-272223.cloudfunctions.net</string>\n    <string name=\"fileprovider_authorities\" translatable=\"false\">cz.covid19cz.erouska.fileprovider</string>\n</resources>"
  },
  {
    "path": "app/src/test/kotlin/com/covid19cz/bt_tracing/ExampleUnitTest.kt",
    "content": "package cz.covid19cz.bt_tracing\n\nimport org.junit.Test\n\nimport org.junit.Assert.*\n\n/**\n * Example local unit test, which will execute on the development machine (host).\n *\n * See [testing documentation](http://d.android.com/tools/testing).\n */\nclass ExampleUnitTest {\n\n    @Test\n    fun addition_isCorrect() {\n        assertEquals(4, 2 + 2)\n    }\n}\n"
  },
  {
    "path": "arch/build.gradle",
    "content": "apply plugin: 'com.android.library'\r\n\r\napply plugin: 'kotlin-android'\r\napply plugin: 'kotlin-android-extensions'\r\napply plugin: 'kotlin-kapt'\r\napply plugin: \"androidx.navigation.safeargs.kotlin\"\r\n\r\nandroid {\r\n    compileSdkVersion 30\r\n    defaultConfig {\r\n        minSdkVersion 21\r\n        targetSdkVersion 30\r\n        multiDexEnabled true\r\n    }\r\n    buildTypes {\r\n        release {\r\n            minifyEnabled false\r\n            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'\r\n        }\r\n    }\r\n    buildFeatures {\r\n        dataBinding = true\r\n    }\r\n}\r\n\r\ndependencies {\r\n\r\n    implementation fileTree(dir: 'libs', include: ['*.jar'])\r\n    implementation \"org.jetbrains.kotlin:kotlin-stdlib\"\r\n    implementation 'androidx.multidex:multidex:2.0.1'\r\n\r\n    implementation \"androidx.appcompat:appcompat:1.3.1\"\r\n    implementation \"androidx.lifecycle:lifecycle-viewmodel-ktx:2.3.1\"\r\n    implementation \"androidx.lifecycle:lifecycle-livedata-ktx:2.3.1\"\r\n    implementation \"androidx.lifecycle:lifecycle-common-java8:2.3.1\"\r\n\r\n    // Navigation Components\r\n    implementation \"androidx.navigation:navigation-fragment-ktx:2.3.5\"\r\n    implementation \"androidx.navigation:navigation-ui-ktx:2.3.5\"\r\n\r\n    // Material Components\r\n    implementation \"com.google.android.material:material:1.4.0\"\r\n\r\n    implementation \"androidx.recyclerview:recyclerview:1.2.1\"\r\n\r\n    implementation 'com.github.bumptech.glide:glide:4.12.0'\r\n    kapt 'com.github.bumptech.glide:compiler:4.12.0'\r\n\r\n    // Koin for Android\r\n    implementation 'org.koin:koin-android:2.0.1'\r\n    implementation 'org.koin:koin-androidx-scope:2.0.1'\r\n    implementation 'org.koin:koin-androidx-viewmodel:2.0.1'\r\n}\r\n"
  },
  {
    "path": "arch/gradle.properties",
    "content": "# Project-wide Gradle settings.\r\n# IDE (e.g. Android Studio) users:\r\n# Gradle settings configured through the IDE *will override*\r\n# any settings specified in this file.\r\n# For more details on how to configure your build environment visit\r\n# http://www.gradle.org/docs/current/userguide/build_environment.html\r\n# Specifies the JVM arguments used for the daemon process.\r\n# The setting is particularly useful for tweaking memory settings.\r\norg.gradle.jvmargs=-Xmx1536m\r\n# When configured, Gradle will run in incubating parallel type.\r\n# This option should only be used with decoupled projects. More details, visit\r\n# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects\r\n# org.gradle.parallel=true\r\nandroid.useAndroidX=true\r\nandroid.enableJetifier=true"
  },
  {
    "path": "arch/proguard-rules.pro",
    "content": "# Add project specific ProGuard rules here.\r\n# You can control the set of applied configuration files using the\r\n# proguardFiles setting in build.gradle.\r\n#\r\n# For more details, see\r\n#   http://developer.android.com/guide/developing/tools/proguard.html\r\n\r\n# If your project uses WebView with JS, uncomment the following\r\n# and specify the fully qualified class name to the JavaScript interface\r\n# class:\r\n#-keepclassmembers class fqcn.of.javascript.interface.for.webview {\r\n#   public *;\r\n#}\r\n\r\n# Uncomment this to preserve the line number information for\r\n# debugging stack traces.\r\n#-keepattributes SourceFile,LineNumberTable\r\n\r\n# If you keep the line number information, uncomment this to\r\n# hide the original source file name.\r\n#-renamesourcefileattribute SourceFile\r\n"
  },
  {
    "path": "arch/src/main/AndroidManifest.xml",
    "content": "<manifest package=\"cz.stepansonsky.mvvm\"></manifest>\r\n"
  },
  {
    "path": "arch/src/main/java/arch/BaseApp.kt",
    "content": "package arch\n\nimport androidx.multidex.MultiDexApplication\n\nopen class BaseApp : MultiDexApplication() {\n\n    companion object {\n        lateinit var instance: BaseApp private set\n    }\n\n    override fun onCreate() {\n        super.onCreate()\n        instance = this\n    }\n}"
  },
  {
    "path": "arch/src/main/java/arch/adapter/BaseRecyclerAdapter.kt",
    "content": "package arch.adapter\r\n\r\nimport android.view.LayoutInflater\r\nimport android.view.ViewGroup\r\nimport androidx.annotation.LayoutRes\r\nimport androidx.databinding.DataBindingUtil\r\nimport androidx.databinding.ObservableList\r\nimport androidx.databinding.ViewDataBinding\r\nimport androidx.lifecycle.LifecycleOwner\r\nimport androidx.recyclerview.widget.RecyclerView\r\nimport arch.viewmodel.BaseArchViewModel\r\nimport cz.stepansonsky.mvvm.BR\r\n\r\n/**\r\n * Created by Stepan on 9.11.2016.\r\n */\r\n\r\nabstract class BaseRecyclerAdapter<T> : RecyclerView.Adapter<BaseRecyclerAdapter<T>.BaseMvvmRecyclerViewHolder<T>> {\r\n\r\n    private var viewModel: BaseArchViewModel? = null\r\n    private var items: ObservableList<T>? = null\r\n    var lifecycleOwner: LifecycleOwner? = null\r\n    var parentItem: Any? = null\r\n\r\n    private var onListChangedCallback: ObservableList.OnListChangedCallback<ObservableList<T>>? = null\r\n\r\n    @LayoutRes\r\n    protected abstract fun getLayoutId(itemType: Int): Int\r\n\r\n    constructor(items: ObservableList<T>) {\r\n        this.items = items\r\n        initOnListChangedListener()\r\n    }\r\n\r\n    constructor(items: ObservableList<T>, viewModel: BaseArchViewModel?) {\r\n        this.viewModel = viewModel\r\n        this.items = items\r\n        initOnListChangedListener()\r\n    }\r\n\r\n    private fun initOnListChangedListener() {\r\n        onListChangedCallback = object : ObservableList.OnListChangedCallback<ObservableList<T>>() {\r\n            override fun onChanged(sender: ObservableList<T>) {\r\n                notifyDataSetChanged()\r\n            }\r\n\r\n            override fun onItemRangeChanged(sender: ObservableList<T>, positionStart: Int, itemCount: Int) {\r\n                notifyItemRangeChanged(positionStart, itemCount)\r\n            }\r\n\r\n            override fun onItemRangeInserted(sender: ObservableList<T>, positionStart: Int, itemCount: Int) {\r\n                notifyItemRangeInserted(positionStart, itemCount)\r\n            }\r\n\r\n            override fun onItemRangeMoved(\r\n                sender: ObservableList<T>,\r\n                fromPosition: Int,\r\n                toPosition: Int,\r\n                itemCount: Int\r\n            ) {\r\n                notifyDataSetChanged()\r\n            }\r\n\r\n            override fun onItemRangeRemoved(sender: ObservableList<T>, positionStart: Int, itemCount: Int) {\r\n                notifyItemRangeRemoved(positionStart, itemCount)\r\n            }\r\n        }\r\n        items!!.addOnListChangedCallback(onListChangedCallback)\r\n    }\r\n\r\n    private fun getViewHolderBinding(parent: ViewGroup, @LayoutRes itemLayoutId: Int): ViewDataBinding {\r\n        return DataBindingUtil.inflate(LayoutInflater.from(parent.context), itemLayoutId, parent, false)\r\n    }\r\n\r\n    override fun onBindViewHolder(holder: BaseMvvmRecyclerViewHolder<T>, position: Int) {\r\n        val item = items!![position]\r\n        holder.bind(item, holder.binder)\r\n        holder.binder!!.executePendingBindings()\r\n    }\r\n\r\n    fun getItem(position: Int): T {\r\n        return items!![position]\r\n    }\r\n\r\n    override fun getItemCount(): Int {\r\n        return if (items != null) {\r\n            items!!.size\r\n        } else 0\r\n    }\r\n\r\n    fun getItems(): List<T>? {\r\n        return items\r\n    }\r\n\r\n    fun setItems(items: ObservableList<T>?) {\r\n        if (items != null && items == this.items) {\r\n            //notifyDataSetChanged();\r\n        } else {\r\n            this.items = items\r\n            initOnListChangedListener()\r\n            notifyDataSetChanged()\r\n        }\r\n    }\r\n\r\n    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): BaseMvvmRecyclerViewHolder<T> {\r\n        return BaseMvvmRecyclerViewHolder(getViewHolderBinding(parent, getLayoutId(viewType)))\r\n    }\r\n\r\n    inner class BaseMvvmRecyclerViewHolder<T>(v: ViewDataBinding) : RecyclerView.ViewHolder(v.root) {\r\n\r\n        val binder: ViewDataBinding? = DataBindingUtil.bind(v.root)\r\n\r\n        fun bind(item: T, binder: ViewDataBinding?) {\r\n            binder!!.setVariable(BR.vm, viewModel)\r\n            binder.setVariable(BR.item, item)\r\n            if (lifecycleOwner != null) {\r\n                binder.setVariable(BR.lifecycle, lifecycleOwner)\r\n                binder.lifecycleOwner = lifecycleOwner\r\n            }\r\n            if (parentItem != null) {\r\n                binder.setVariable(BR.parentItem, parentItem)\r\n            }\r\n        }\r\n\r\n    }\r\n\r\n}\r\n"
  },
  {
    "path": "arch/src/main/java/arch/adapter/RecyclerLayoutStrategy.kt",
    "content": "package arch.adapter\n\ninterface RecyclerLayoutStrategy {\n    fun getLayoutId(item: Any): Int\n}"
  },
  {
    "path": "arch/src/main/java/arch/adapter/SingleTypeRecyclerAdapter.kt",
    "content": "package arch.adapter\n\nimport androidx.annotation.LayoutRes\nimport androidx.databinding.ObservableArrayList\n\nimport arch.viewmodel.BaseArchViewModel\n\n/**\n * Handcrafted by Štěpán Šonský on 15.01.2018.\n */\n\nclass SingleTypeRecyclerAdapter<T> : BaseRecyclerAdapter<T> {\n\n    @LayoutRes\n    private var layoutId: Int = 0\n\n    constructor(items: ObservableArrayList<T>, viewModel: BaseArchViewModel?, itemLaoyutId: Int) : super(items, viewModel) {\n        this.layoutId = itemLaoyutId\n    }\n\n    constructor(items: ObservableArrayList<T>, itemLaoyutId: Int) : super(items) {\n        this.layoutId = itemLaoyutId\n    }\n\n    override fun getLayoutId(itemType: Int): Int {\n        return layoutId\n    }\n}\n"
  },
  {
    "path": "arch/src/main/java/arch/adapter/StrategyRecyclerAdapter.kt",
    "content": "package arch.adapter\r\n\r\nimport androidx.databinding.ObservableArrayList\r\nimport arch.viewmodel.BaseArchViewModel\r\n\r\nclass StrategyRecyclerAdapter(items: ObservableArrayList<Any>, var strategy: RecyclerLayoutStrategy, vm: BaseArchViewModel?) :\r\n    BaseRecyclerAdapter<Any>(items, vm) {\r\n\r\n    override fun getLayoutId(itemType: Int): Int {\r\n        return itemType\r\n    }\r\n\r\n    override fun getItemViewType(position: Int): Int {\r\n        return strategy.getLayoutId(getItem(position))\r\n    }\r\n}\r\n"
  },
  {
    "path": "arch/src/main/java/arch/binding/EditTextBindings.kt",
    "content": "package arch.binding\n\nimport androidx.databinding.BindingAdapter\nimport com.google.android.material.textfield.TextInputLayout\n\n@BindingAdapter(\"errorResource\")\nfun TextInputLayout.setErrorResource(resId: Int?) {\n    error = resId?.let {\n        context.getString(resId)\n    }\n}"
  },
  {
    "path": "arch/src/main/java/arch/binding/ImageViewBindings.kt",
    "content": "package arch.binding\r\n\r\nimport android.graphics.drawable.Drawable\r\nimport android.net.Uri\r\nimport android.widget.ImageButton\r\nimport android.widget.ImageView\r\nimport androidx.databinding.BindingAdapter\r\nimport com.bumptech.glide.Glide\r\nimport java.io.File\r\n\r\n@BindingAdapter(value = [\"imageResource\"], requireAll = false)\r\nfun setImageResourceCircular(view: ImageButton, resId: Int) {\r\n    view.setImageResource(resId)\r\n}\r\n\r\n@BindingAdapter(value = [\"url\", \"placeholder\"], requireAll = false)\r\nfun setUrlCircular(view: ImageView, url: String?, placeholder: Drawable?) {\r\n    if (placeholder == null) {\r\n        Glide.with(view.context).load(url).into(view)\r\n    } else {\r\n        Glide.with(view.context).load(url).placeholder(placeholder).into(view)\r\n    }\r\n}\r\n\r\n@BindingAdapter(value = [\"uri\"], requireAll = false)\r\nfun setUriCircular(view: ImageView, uri: Uri?) {\r\n    Glide.with(view.context).load(uri).into(view)\r\n}\r\n\r\n@BindingAdapter(value = [\"file\"], requireAll = false)\r\nfun setFile(view: ImageView, file: File?) {\r\n    Glide.with(view.context).load(file).into(view)\r\n}\r\n\r\n\r\n"
  },
  {
    "path": "arch/src/main/java/arch/binding/ProgressbarBindings.kt",
    "content": "package arch.binding\r\n\r\nimport android.content.res.ColorStateList\r\nimport android.widget.ProgressBar\r\nimport androidx.core.content.ContextCompat\r\nimport androidx.databinding.BindingAdapter\r\n\r\n\r\n@BindingAdapter(value = [\"progressTintResource\"], requireAll = false)\r\nfun setImageResourceCircular(view: ProgressBar, resId: Int) {\r\n   view.progressTintList = ColorStateList.valueOf(ContextCompat.getColor(view.context, resId))\r\n}\r\n\r\n\r\n"
  },
  {
    "path": "arch/src/main/java/arch/binding/RecyclerViewBindings.kt",
    "content": "package arch.binding\r\n\r\nimport androidx.databinding.BindingAdapter\r\nimport androidx.databinding.ObservableArrayList\r\nimport androidx.lifecycle.LifecycleOwner\r\nimport androidx.recyclerview.widget.GridLayoutManager\r\nimport androidx.recyclerview.widget.LinearLayoutManager\r\nimport androidx.recyclerview.widget.RecyclerView\r\nimport arch.adapter.BaseRecyclerAdapter\r\nimport arch.adapter.RecyclerLayoutStrategy\r\nimport arch.adapter.SingleTypeRecyclerAdapter\r\nimport arch.adapter.StrategyRecyclerAdapter\r\nimport arch.viewmodel.BaseArchViewModel\r\n\r\n\r\n/**\r\n * Created by Stepan on 23.11.2016.\r\n */\r\n\r\n@BindingAdapter(value = [\"viewModel\", \"items\", \"layoutId\", \"layoutStrategy\", \"orientation\", \"spanCount\", \"lifecycle\", \"parentItem\"], requireAll = false)\r\nfun <T> bindItems(\r\n    view: RecyclerView,\r\n    vm: BaseArchViewModel?,\r\n    items: ObservableArrayList<T>,\r\n    layoutId: Int?,\r\n    layoutStrategy: RecyclerLayoutStrategy?,\r\n    orientation: Int?,\r\n    spanCount: Int?,\r\n    lifecycleOwner: LifecycleOwner?,\r\n    parentItem: Any?\r\n) {\r\n    if (view.adapter == null) {\r\n        if (view.layoutManager == null) {\r\n            if (spanCount == null) {\r\n                view.layoutManager = object : LinearLayoutManager(\r\n                    view.context, orientation\r\n                        ?: RecyclerView.VERTICAL, false\r\n                ) {\r\n                    override fun supportsPredictiveItemAnimations(): Boolean {\r\n                        return false\r\n                    }\r\n                }\r\n            } else {\r\n                view.layoutManager = object : GridLayoutManager(\r\n                    view.context, spanCount) {\r\n                    override fun supportsPredictiveItemAnimations(): Boolean {\r\n                        return false\r\n                    }\r\n                }\r\n            }\r\n        }\r\n        if (layoutStrategy == null) {\r\n            if (layoutId != null) {\r\n                view.adapter = SingleTypeRecyclerAdapter(items, vm, layoutId)\r\n            }\r\n        } else {\r\n            view.adapter = StrategyRecyclerAdapter(items as ObservableArrayList<Any>, layoutStrategy, vm)\r\n        }\r\n    } else {\r\n        (view.adapter as BaseRecyclerAdapter<T>).setItems(items)\r\n    }\r\n    (view.adapter as BaseRecyclerAdapter<*>).lifecycleOwner = lifecycleOwner\r\n    (view.adapter as BaseRecyclerAdapter<*>).parentItem = parentItem\r\n\r\n}\r\n"
  },
  {
    "path": "arch/src/main/java/arch/binding/TextViewBindings.kt",
    "content": "package arch.binding\r\n\r\nimport android.widget.TextView\r\nimport androidx.core.content.ContextCompat\r\nimport androidx.databinding.BindingAdapter\r\n\r\n\r\n@BindingAdapter(\"textColorResource\")\r\nfun setTextColor(editText: TextView, resId: Int?) {\r\n    if (resId != null && resId != 0) {\r\n        editText.setTextColor(ContextCompat.getColor(editText.context, resId))\r\n    }\r\n}\r\n\r\n@BindingAdapter(\"textResource\")\r\nfun setTextResource(editText: TextView, resId: Int?) {\r\n    if (resId != null) {\r\n        editText.setText(resId)\r\n    } else {\r\n        editText.text = null\r\n    }\r\n}"
  },
  {
    "path": "arch/src/main/java/arch/binding/ViewBindings.kt",
    "content": "package arch.binding\r\n\r\nimport android.view.View\r\nimport androidx.databinding.BindingAdapter\r\n\r\n\r\n@BindingAdapter(\"backgroundResource\")\r\nfun setBackgroundResource(view: View, resId: Int) {\r\n    if (resId != 0) {\r\n        view.setBackgroundResource(resId)\r\n    } else {\r\n        view.background = null\r\n    }\r\n}\r\n\r\n@BindingAdapter(\"visibleOrGone\")\r\nfun setVisibleOrGone(view: View, visible: Boolean) {\r\n    view.visibility = if (visible) View.VISIBLE else View.GONE\r\n}\r\n\r\n@BindingAdapter(\"visibleOrInvisible\")\r\nfun setVisibleOrInvisible(view: View, visible: Boolean) {\r\n    view.visibility = if (visible) View.VISIBLE else View.INVISIBLE\r\n}"
  },
  {
    "path": "arch/src/main/java/arch/binding/WebViewBindings.kt",
    "content": "package arch.binding\r\n\r\nimport android.webkit.WebView\r\nimport androidx.databinding.BindingAdapter\r\n\r\n\r\n@BindingAdapter(\"url\")\r\nfun setUrl(view: WebView, url: String?) {\r\n    url?.let {\r\n        view.loadUrl(it)\r\n    }\r\n}\r\n\r\n@BindingAdapter(\"java_script_enabled\")\r\nfun setJavScriptEnabled(view: WebView, enabled: Boolean) {\r\n    view.settings.javaScriptEnabled = enabled\r\n}"
  },
  {
    "path": "arch/src/main/java/arch/event/LiveEvent.kt",
    "content": "package arch.event\r\n\r\n/**\r\n * Handcrafted by Štěpán Šonský on 15.01.2018.\r\n */\r\nabstract class LiveEvent"
  },
  {
    "path": "arch/src/main/java/arch/event/LiveEventMap.kt",
    "content": "package arch.event\r\n\r\nimport androidx.lifecycle.LifecycleOwner\r\nimport androidx.lifecycle.Observer\r\nimport java.util.*\r\nimport kotlin.reflect.KClass\r\n\r\n/**\r\n * Handcrafted by Štěpán Šonský on 15.01.2018.\r\n */\r\n\r\nclass LiveEventMap {\r\n\r\n    private val events = HashMap<KClass<out LiveEvent>, SingleLiveEvent<out LiveEvent>>()\r\n\r\n    fun <T : LiveEvent> subscribe(lifecycleOwner: LifecycleOwner, eventClass: KClass<T>, eventObserver: Observer<T>) {\r\n        var liveEvent: SingleLiveEvent<T>? = events[eventClass] as SingleLiveEvent<T>?\r\n        if (liveEvent == null) {\r\n            liveEvent = initUiEvent(eventClass)\r\n        }\r\n        liveEvent.observe(lifecycleOwner, eventObserver)\r\n    }\r\n\r\n\r\n    fun <T : LiveEvent> publish(event: T) {\r\n        var liveEvent: SingleLiveEvent<T>? = events[event::class] as SingleLiveEvent<T>?\r\n        if (liveEvent == null) {\r\n            liveEvent = initUiEvent(event::class)\r\n        }\r\n        liveEvent.postValue(event)\r\n    }\r\n\r\n    private fun <T : LiveEvent> initUiEvent(eventClass: KClass<out T>): SingleLiveEvent<T> {\r\n        val liveEvent = SingleLiveEvent<T>()\r\n        events[eventClass] = liveEvent\r\n        return liveEvent\r\n    }\r\n\r\n}\r\n"
  },
  {
    "path": "arch/src/main/java/arch/event/NavigationEvent.kt",
    "content": "package arch.event\n\nimport android.os.Bundle\nimport androidx.navigation.NavDirections\nimport androidx.navigation.NavOptions\n\nclass NavigationEvent() : LiveEvent() {\n\n    var resId: Int? = null\n    var navArgs: Bundle? = null\n    var navDirections: NavDirections? = null\n    var navOptions: NavOptions? = null\n\n    constructor(resId: Int, navArgs: Bundle? = null, navOptions: NavOptions? = null) : this() {\n        this.resId = resId\n        this.navArgs = navArgs\n        this.navOptions = navOptions\n    }\n\n    constructor(navDirections: NavDirections, navOptions: NavOptions? = null) : this() {\n        this.navDirections = navDirections\n        this.navOptions = navOptions\n    }\n}"
  },
  {
    "path": "arch/src/main/java/arch/event/NavigationGraphEvent.kt",
    "content": "package arch.event\n\nclass NavigationGraphEvent() : LiveEvent() {\n\n    var navGraphId: Int? = null\n    var navStartDestinationId: Int? = null\n\n    constructor(navGraphId: Int, navStartDestinationId: Int) : this() {\n        this.navGraphId = navGraphId\n        this.navStartDestinationId = navStartDestinationId\n    }\n}"
  },
  {
    "path": "arch/src/main/java/arch/event/SingleLiveEvent.java",
    "content": "package arch.event;\r\n\r\nimport android.util.Log;\r\n\r\nimport androidx.annotation.MainThread;\r\nimport androidx.annotation.Nullable;\r\nimport androidx.lifecycle.LifecycleOwner;\r\nimport androidx.lifecycle.MutableLiveData;\r\nimport androidx.lifecycle.Observer;\r\n\r\nimport java.util.concurrent.atomic.AtomicBoolean;\r\n\r\n/**\r\n * A lifecycle-aware observable that sends only new updates after subscription, used for events like\r\n * navigation and Snackbar messages.\r\n * <p>\r\n * This avoids a common problem with events: on configuration change (like rotation) an update\r\n * can be emitted if the observer is active. This LiveData only calls the observable if there's an\r\n * explicit call to setValue() or call().\r\n * <p>\r\n * Note that only one observer is going to be notified of changes.\r\n */\r\npublic class SingleLiveEvent<T> extends MutableLiveData<T> {\r\n\r\n    private static final String TAG = \"SingleLiveEvent\";\r\n\r\n    private final AtomicBoolean mPending = new AtomicBoolean(false);\r\n\r\n    @MainThread\r\n    @Override\r\n    public void observe(LifecycleOwner owner, final Observer<? super T> observer) {\r\n\r\n        if (hasActiveObservers()) {\r\n            Log.w(TAG, \"Multiple observers registered but only one will be notified of changes.\");\r\n        }\r\n\r\n        // Observe the internal MutableLiveData\r\n        super.observe(owner, new Observer<T>() {\r\n            @Override\r\n            public void onChanged(@Nullable T t) {\r\n                if (mPending.compareAndSet(true, false)) {\r\n                    observer.onChanged(t);\r\n                }\r\n            }\r\n        });\r\n    }\r\n\r\n    @MainThread\r\n    public void setValue(@Nullable T t) {\r\n        mPending.set(true);\r\n        super.setValue(t);\r\n    }\r\n\r\n    /**\r\n     * Used for cases where T is Void, to make calls cleaner.\r\n     */\r\n    @MainThread\r\n    public void call() {\r\n        setValue(null);\r\n    }\r\n}"
  },
  {
    "path": "arch/src/main/java/arch/extensions/navExtensions.kt",
    "content": "package arch.extensions\n\nimport android.os.Bundle\nimport androidx.annotation.IdRes\nimport androidx.navigation.NavController\nimport androidx.navigation.NavDirections\nimport androidx.navigation.NavOptions\nimport arch.event.NavigationEvent\nimport arch.event.NavigationGraphEvent\nimport arch.utils.safeLet\nimport cz.stepansonsky.mvvm.BuildConfig\n\nfun NavController.safeNavigate(navEvent: NavigationEvent) {\n    try {\n        if (navEvent.resId != null) {\n            navigate(navEvent.resId!!, navEvent.navArgs, navEvent.navOptions)\n        } else if (navEvent.navDirections != null) {\n            navigate(navEvent.navDirections!!, navEvent.navOptions)\n        }\n    } catch (it: Throwable){\n        if (BuildConfig.DEBUG) {\n            it.printStackTrace()\n        }\n    }\n}\n\nfun NavController.safeNavigate(@IdRes resId: Int, args: Bundle? = null, navOptions: NavOptions? = null) {\n    try {\n        navigate(resId, args, navOptions)\n    } catch (it: Throwable){\n        if (BuildConfig.DEBUG) {\n            it.printStackTrace()\n        }\n    }\n}\nfun NavController.safeNavigate(directions: NavDirections, navOptions: NavOptions? = null) {\n    try {\n        navigate(directions, navOptions)\n    } catch (it: Throwable){\n        if (BuildConfig.DEBUG) {\n            it.printStackTrace()\n        }\n    }\n}\n\nfun NavController.setNavigationGraph(navEvent: NavigationGraphEvent) {\n    safeLet(navEvent.navGraphId, navEvent.navStartDestinationId) { graphId, startNavId ->\n        val graph = navInflater.inflate(graphId)\n        graph.startDestination = startNavId\n        setGraph(graph)\n    }\n}\n"
  },
  {
    "path": "arch/src/main/java/arch/livedata/SafeMutableLiveData.kt",
    "content": "package arch.livedata\n\nimport androidx.lifecycle.LifecycleOwner\nimport androidx.lifecycle.MutableLiveData\nimport androidx.lifecycle.Observer\n\nclass SafeMutableLiveData<T : Any>(initValue: T) : MutableLiveData<T>(initValue) {\n\n    override fun getValue(): T {\n        return super.getValue()!!\n    }\n\n    override fun setValue(value: T) {\n        super.setValue(value)\n    }\n\n    fun observe(owner: LifecycleOwner, body: (T) -> Unit) {\n        observe(owner, Observer<T> { t -> body(t!!) })\n    }\n\n    override fun postValue(value: T) {\n        super.postValue(value)\n    }\n}"
  },
  {
    "path": "arch/src/main/java/arch/utils/NullableUtils.kt",
    "content": "package arch.utils\n\ninline fun <T1: Any, T2: Any, R: Any> safeLet(p1: T1?, p2: T2?, block: (T1, T2)->R?): R? {\n    return if (p1 != null && p2 != null) block(p1, p2) else null\n}\n\ninline fun <T1: Any, T2: Any, T3: Any, R: Any> safeLet(p1: T1?, p2: T2?, p3: T3?,block: (T1, T2, T3)->R?): R? {\n    return if (p1 != null && p2 != null && p3 != null) block(p1, p2, p3) else null\n}\n"
  },
  {
    "path": "arch/src/main/java/arch/view/BaseArchActivity.kt",
    "content": "package arch.view\r\n\r\nimport android.content.Intent\r\nimport android.os.Bundle\r\nimport androidx.annotation.IdRes\r\nimport androidx.annotation.LayoutRes\r\nimport androidx.appcompat.app.AppCompatActivity\r\nimport androidx.databinding.DataBindingUtil\r\nimport androidx.databinding.ViewDataBinding\r\nimport androidx.lifecycle.Observer\r\nimport androidx.lifecycle.ViewModelProvider\r\nimport androidx.navigation.NavController\r\nimport androidx.navigation.NavDirections\r\nimport androidx.navigation.NavOptions\r\nimport androidx.navigation.findNavController\r\nimport arch.event.LiveEvent\r\nimport arch.event.NavigationEvent\r\nimport arch.event.NavigationGraphEvent\r\nimport arch.extensions.safeNavigate\r\nimport arch.extensions.setNavigationGraph\r\nimport arch.viewmodel.BaseArchViewModel\r\nimport cz.stepansonsky.mvvm.BR\r\nimport cz.stepansonsky.mvvm.R\r\nimport kotlin.reflect.KClass\r\n\r\n/**\r\n * Created by Stepan on 06.10.2016.\r\n */\r\n\r\nabstract class BaseArchActivity<B : ViewDataBinding, out VM : BaseArchViewModel>(@LayoutRes var layoutId: Int, viewModelClass: KClass<VM>) :\r\n    AppCompatActivity() {\r\n\r\n    protected val viewModel: VM by lazy { ViewModelProvider(this).get(viewModelClass.java) }\r\n    protected lateinit var binding: B\r\n\r\n    override fun onCreate(savedInstanceState: Bundle?) {\r\n        super.onCreate(savedInstanceState)\r\n        lifecycle.addObserver(viewModel)\r\n        binding = DataBindingUtil.setContentView(this, layoutId)\r\n        binding.lifecycleOwner = this\r\n        binding.setVariable(BR.lifecycle, this)\r\n\r\n        binding.setVariable(BR.vm, viewModel)\r\n\r\n        subscribe(NavigationGraphEvent::class, Observer { event ->\r\n            navController().setNavigationGraph(event)\r\n        })\r\n\r\n        subscribe(NavigationEvent::class, Observer { event ->\r\n            navController().safeNavigate(event)\r\n        })\r\n    }\r\n\r\n    protected fun <T : LiveEvent> subscribe(eventClass: KClass<T>, eventObserver: Observer<T>) {\r\n        viewModel.subscribe(this, eventClass, eventObserver)\r\n    }\r\n\r\n    override fun onDestroy() {\r\n        lifecycle.removeObserver(viewModel)\r\n        super.onDestroy()\r\n    }\r\n\r\n    public override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {\r\n        super.onActivityResult(requestCode, resultCode, data)\r\n    }\r\n\r\n    protected fun navigate(@IdRes resId: Int, args: Bundle? = null, navOptions: NavOptions? = null) {\r\n        navController().safeNavigate(resId, args, navOptions)\r\n    }\r\n\r\n    protected fun navigate(directions: NavDirections, navOptions: NavOptions? = null) {\r\n        navController().safeNavigate(directions, navOptions)\r\n    }\r\n\r\n    protected fun navController(): NavController {\r\n        return findNavController(R.id.nav_host_fragment)\r\n    }\r\n}\r\n"
  },
  {
    "path": "arch/src/main/java/arch/view/BaseArchDialogFragment.kt",
    "content": "package arch.view\r\n\r\nimport android.os.Bundle\r\nimport android.view.LayoutInflater\r\nimport android.view.View\r\nimport android.view.ViewGroup\r\nimport androidx.annotation.LayoutRes\r\nimport androidx.databinding.DataBindingUtil\r\nimport androidx.databinding.ViewDataBinding\r\nimport androidx.fragment.app.DialogFragment\r\nimport androidx.lifecycle.Observer\r\nimport arch.event.LiveEvent\r\nimport arch.viewmodel.BaseArchViewModel\r\nimport cz.stepansonsky.mvvm.BR\r\nimport org.koin.androidx.viewmodel.ext.android.sharedViewModel\r\nimport kotlin.reflect.KClass\r\n\r\nabstract class BaseArchDialogFragment<B : ViewDataBinding, VM : BaseArchViewModel>(@LayoutRes val layoutId: Int, viewModelClass: KClass<VM>) :\r\n    DialogFragment() {\r\n\r\n    protected lateinit var binding: B\r\n    protected val viewModel: VM by sharedViewModel(viewModelClass)\r\n\r\n    override fun onCreate(savedInstanceState: Bundle?) {\r\n        super.onCreate(savedInstanceState)\r\n        lifecycle.addObserver(viewModel)\r\n    }\r\n\r\n    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {\r\n        binding = DataBindingUtil.inflate(inflater, layoutId, container, false)\r\n        binding.lifecycleOwner = this\r\n        binding.setVariable(BR.vm, viewModel)\r\n        return binding.root\r\n    }\r\n\r\n    override fun onDestroy() {\r\n        lifecycle.removeObserver(viewModel)\r\n        super.onDestroy()\r\n    }\r\n\r\n    protected fun <T : LiveEvent> subscribe(eventClass: KClass<T>, eventObserver: Observer<T>) {\r\n        viewModel.subscribe(this, eventClass, eventObserver)\r\n    }\r\n}"
  },
  {
    "path": "arch/src/main/java/arch/view/BaseArchFragment.kt",
    "content": "package arch.view\r\n\r\nimport android.os.Bundle\r\nimport android.view.LayoutInflater\r\nimport android.view.View\r\nimport android.view.ViewGroup\r\nimport androidx.annotation.IdRes\r\nimport androidx.annotation.LayoutRes\r\nimport androidx.databinding.DataBindingUtil\r\nimport androidx.databinding.ViewDataBinding\r\nimport androidx.fragment.app.Fragment\r\nimport androidx.lifecycle.Observer\r\nimport androidx.lifecycle.ViewModelProvider\r\nimport androidx.navigation.NavController\r\nimport androidx.navigation.NavDirections\r\nimport androidx.navigation.NavOptions\r\nimport androidx.navigation.fragment.NavHostFragment\r\nimport arch.event.LiveEvent\r\nimport arch.event.NavigationEvent\r\nimport arch.extensions.safeNavigate\r\nimport arch.viewmodel.BaseArchViewModel\r\nimport cz.stepansonsky.mvvm.BR\r\nimport kotlin.reflect.KClass\r\n\r\n/**\r\n * Created by Stepan on 11.10.2016.\r\n */\r\n\r\nabstract class BaseArchFragment<B : ViewDataBinding, VM : BaseArchViewModel>(\r\n    @LayoutRes val layoutId: Int, viewModelClass: KClass<VM>\r\n) : Fragment() {\r\n\r\n    protected lateinit var binding: B\r\n    protected val viewModel: VM by lazy { ViewModelProvider(this).get(viewModelClass.java) }\r\n\r\n    override fun onCreate(savedInstanceState: Bundle?) {\r\n        super.onCreate(savedInstanceState)\r\n        lifecycle.addObserver(viewModel)\r\n        subscribe(NavigationEvent::class) {\r\n            navController().safeNavigate(it)\r\n        }\r\n    }\r\n\r\n    override fun onCreateView(\r\n        inflater: LayoutInflater,\r\n        container: ViewGroup?,\r\n        savedInstanceState: Bundle?\r\n    ): View? {\r\n        binding = DataBindingUtil.inflate(inflater, layoutId, container, false)\r\n        binding.lifecycleOwner = this\r\n        binding.setVariable(BR.lifecycle, this)\r\n        binding.setVariable(BR.vm, viewModel)\r\n        return binding.root\r\n    }\r\n\r\n    override fun onDestroy() {\r\n        lifecycle.removeObserver(viewModel)\r\n        super.onDestroy()\r\n    }\r\n\r\n    protected fun <T : LiveEvent> subscribe(eventClass: KClass<T>, eventObserver: (T) -> Unit) {\r\n        viewModel.subscribe(this, eventClass, Observer(eventObserver))\r\n    }\r\n\r\n    protected fun navController(): NavController {\r\n        return NavHostFragment.findNavController(this)\r\n    }\r\n\r\n    protected fun navigate(@IdRes resId: Int, args: Bundle? = null, navOptions: NavOptions? = null) {\r\n        navController().safeNavigate(resId, args, navOptions)\r\n    }\r\n\r\n    protected fun navigate(directions: NavDirections, navOptions: NavOptions? = null) {\r\n        navController().safeNavigate(directions, navOptions)\r\n    }\r\n}\r\n"
  },
  {
    "path": "arch/src/main/java/arch/view/BaseDialogFragment.kt",
    "content": "package arch.view\r\n\r\nimport android.app.Activity\r\nimport android.content.DialogInterface\r\nimport android.os.Bundle\r\nimport android.view.LayoutInflater\r\nimport android.view.View\r\nimport android.view.ViewGroup\r\nimport android.widget.Button\r\nimport androidx.annotation.LayoutRes\r\nimport androidx.annotation.StringRes\r\nimport androidx.appcompat.app.AlertDialog\r\nimport androidx.appcompat.app.AppCompatActivity\r\nimport androidx.databinding.ViewDataBinding\r\nimport androidx.fragment.app.Fragment\r\nimport arch.viewmodel.BaseDialogViewModel\r\nimport cz.stepansonsky.mvvm.R\r\nimport kotlin.reflect.KClass\r\n\r\n\r\nabstract class BaseDialogFragment<B : ViewDataBinding, VM : BaseDialogViewModel>(@LayoutRes layoutId: Int, viewModelClass: KClass<VM>) :\r\n        BaseArchDialogFragment<B, VM>(layoutId, viewModelClass) {\r\n\r\n    companion object {\r\n        const val CANCELED = Activity.RESULT_CANCELED\r\n        const val BUTTON_POSITIVE = AlertDialog.BUTTON_POSITIVE\r\n        const val BUTTON_NEGATIVE = AlertDialog.BUTTON_NEGATIVE\r\n        const val BUTTON_NEUTRAL = AlertDialog.BUTTON_NEUTRAL\r\n\r\n        const val ARG_TITLE_RES = \"ARG_TITLE_RES\"\r\n        const val ARG_MESSAGE_RES = \"ARG_MESSAGE_RES\"\r\n        const val ARG_POSITIVE_BUTTON_RES = \"ARG_POSITIVE_BUTTON_RES\"\r\n        const val ARG_NEGATIVE_BUTTON_RES = \"ARG_NEGATIVE_BUTTON_RES\"\r\n        const val ARG_NEUTRAL_BUTTON_RES = \"ARG_NEUTRAL_BUTTON_RES\"\r\n\r\n        const val ARG_TITLE = \"ARG_TITLE\"\r\n        const val ARG_MESSAGE = \"ARG_MESSAGE\"\r\n        const val ARG_POSITIVE_BUTTON = \"ARG_POSITIVE_BUTTON\"\r\n        const val ARG_NEGATIVE_BUTTON = \"ARG_NEGATIVE_BUTTON\"\r\n        const val ARG_NEUTRAL_BUTTON = \"ARG_NEUTRAL_BUTTON\"\r\n\r\n        const val ARG_REQUEST_CODE = \"ARG_REQUEST_CODE\"\r\n    }\r\n\r\n    override fun onCreate(savedInstanceState: Bundle?) {\r\n        super.onCreate(savedInstanceState)\r\n\r\n        if (arguments?.containsKey(ARG_TITLE_RES) == true) {\r\n            viewModel.title = getString(arguments?.getInt(ARG_TITLE_RES)!!)\r\n        } else if (arguments?.containsKey(ARG_TITLE) == true) {\r\n            viewModel.title = arguments?.getString(ARG_TITLE)\r\n        }\r\n\r\n        if (arguments?.containsKey(ARG_MESSAGE_RES) == true) {\r\n            viewModel.message = getString(arguments?.getInt(ARG_MESSAGE_RES)!!)\r\n        } else if (arguments?.containsKey(ARG_MESSAGE) == true) {\r\n            viewModel.message = arguments?.getString(ARG_MESSAGE)\r\n        }\r\n\r\n        if (arguments?.containsKey(ARG_POSITIVE_BUTTON_RES) == true) {\r\n            viewModel.positiveButton = getString(arguments?.getInt(ARG_POSITIVE_BUTTON_RES)!!)\r\n        } else if (arguments?.containsKey(ARG_POSITIVE_BUTTON) == true) {\r\n            viewModel.positiveButton = arguments?.getString(ARG_POSITIVE_BUTTON)\r\n        }\r\n\r\n        if (arguments?.containsKey(ARG_NEGATIVE_BUTTON_RES) == true) {\r\n            viewModel.negativeButton = getString(arguments?.getInt(ARG_NEGATIVE_BUTTON_RES)!!)\r\n        } else if (arguments?.containsKey(ARG_NEGATIVE_BUTTON) == true) {\r\n            viewModel.negativeButton = arguments?.getString(ARG_NEGATIVE_BUTTON)\r\n        }\r\n\r\n        if (arguments?.containsKey(ARG_NEUTRAL_BUTTON_RES) == true) {\r\n            viewModel.negativeButton = getString(arguments?.getInt(ARG_NEUTRAL_BUTTON_RES)!!)\r\n        } else if (arguments?.containsKey(ARG_NEUTRAL_BUTTON) == true) {\r\n            viewModel.negativeButton = arguments?.getString(ARG_NEUTRAL_BUTTON)\r\n        }\r\n    }\r\n\r\n    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {\r\n        binding.root.findViewById<Button>(R.id.button_positive)?.setOnClickListener { dispatchResult(BUTTON_POSITIVE) }\r\n        binding.root.findViewById<Button>(R.id.button_negative)?.setOnClickListener { dispatchResult(BUTTON_NEGATIVE) }\r\n        binding.root.findViewById<Button>(R.id.button_neutral)?.setOnClickListener { dispatchResult(BUTTON_NEUTRAL) }\r\n        return super.onCreateView(inflater, container, savedInstanceState)\r\n    }\r\n\r\n    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {\r\n        super.onViewCreated(view, savedInstanceState)\r\n    }\r\n\r\n    protected fun dispatchResult(result: Int) {\r\n        if (targetFragment != null) {\r\n            targetFragment?.onActivityResult(arguments!!.getInt(ARG_REQUEST_CODE), result, null)\r\n        } else {\r\n            (activity as BaseArchActivity<*, *>).onActivityResult(arguments!!.getInt(ARG_REQUEST_CODE), result, null)\r\n        }\r\n        dismiss()\r\n    }\r\n\r\n    override fun onCancel(dialog: DialogInterface) {\r\n        dispatchResult(CANCELED)\r\n    }\r\n\r\n    open class Builder {\r\n        private var title: String? = null\r\n        private var titleRes: Int? = null\r\n        private var message: String? = null\r\n        private var messageRes: Int? = null\r\n        private var positiveButton: String? = null\r\n        private var positiveButtonRes: Int? = null\r\n        private var negativeButton: String? = null\r\n        private var negativeButtonRes: Int? = null\r\n        private var neutralButton: String? = null\r\n        private var neutralButtonRes: Int? = null\r\n\r\n        fun show(targetFragment: Fragment?, requestCode: Int) {\r\n            val fragment = buildDialog(requestCode)\r\n            fragment.setTargetFragment(targetFragment, requestCode)\r\n            fragment.show(targetFragment?.fragmentManager!!, \"dialog_$requestCode\")\r\n        }\r\n\r\n        fun show(activity: AppCompatActivity?, requestCode: Int) {\r\n            buildDialog(requestCode).show(activity?.supportFragmentManager!!, \"dialog_$requestCode\")\r\n        }\r\n\r\n        protected open fun createArgs(requestCode: Int): Bundle {\r\n            val args = Bundle()\r\n\r\n            if (titleRes != null) {\r\n                args.putInt(ARG_TITLE_RES, titleRes!!)\r\n            } else if (title != null) {\r\n                args.putString(ARG_TITLE, title)\r\n            }\r\n\r\n            if (messageRes != null) {\r\n                args.putInt(ARG_MESSAGE_RES, messageRes!!)\r\n            } else if (message != null) {\r\n                args.putString(ARG_MESSAGE, message)\r\n            }\r\n\r\n            if (positiveButtonRes != null) {\r\n                args.putInt(ARG_POSITIVE_BUTTON_RES, positiveButtonRes!!)\r\n            } else if (positiveButton != null) {\r\n                args.putString(ARG_POSITIVE_BUTTON, positiveButton)\r\n            }\r\n\r\n            if (negativeButtonRes != null) {\r\n                args.putInt(ARG_NEGATIVE_BUTTON_RES, negativeButtonRes!!)\r\n            } else if (negativeButton != null) {\r\n                args.putString(ARG_NEGATIVE_BUTTON, negativeButton)\r\n            }\r\n\r\n            if (neutralButtonRes != null) {\r\n                args.putInt(ARG_NEUTRAL_BUTTON_RES, neutralButtonRes!!)\r\n            } else if (neutralButton != null) {\r\n                args.putString(ARG_NEUTRAL_BUTTON, neutralButton)\r\n            }\r\n\r\n            args.putInt(ARG_REQUEST_CODE, requestCode)\r\n            return args\r\n        }\r\n\r\n        open fun newInstance(): BaseDialogFragment<*, *> {\r\n            throw NotImplementedError()\r\n        }\r\n\r\n        private fun buildDialog(requestCode: Int): BaseDialogFragment<*, *> {\r\n            val dialog = newInstance()\r\n            dialog.arguments = createArgs(requestCode)\r\n            return dialog\r\n        }\r\n\r\n        fun setTitle(title: String): Builder {\r\n            this.title = title\r\n            return this\r\n        }\r\n\r\n        fun setTitle(@StringRes title: Int): Builder {\r\n            this.titleRes = title\r\n            return this\r\n        }\r\n\r\n        fun setMessage(message: String): Builder {\r\n            this.message = message\r\n            return this\r\n        }\r\n\r\n        fun setMessage(@StringRes message: Int): Builder {\r\n            this.messageRes = message\r\n            return this\r\n        }\r\n\r\n        fun setPositiveButton(positiveButton: String): Builder {\r\n            this.positiveButton = positiveButton\r\n            return this\r\n        }\r\n\r\n        fun setPositiveButton(@StringRes positiveButton: Int): Builder {\r\n            this.positiveButtonRes = positiveButton\r\n            return this\r\n        }\r\n\r\n        fun setNegativeButton(negativeButton: String): Builder {\r\n            this.negativeButton = negativeButton\r\n            return this\r\n        }\r\n\r\n        fun setNegativeButton(@StringRes negativeButton: Int): Builder {\r\n            this.negativeButtonRes = negativeButton\r\n            return this\r\n        }\r\n\r\n        fun setNeutralButton(negativeButton: String): Builder {\r\n            this.neutralButton = negativeButton\r\n            return this\r\n        }\r\n\r\n        fun setNeutralButton(@StringRes negativeButton: Int): Builder {\r\n            this.neutralButtonRes = negativeButton\r\n            return this\r\n        }\r\n    }\r\n\r\n\r\n}"
  },
  {
    "path": "arch/src/main/java/arch/viewmodel/BaseArchViewModel.kt",
    "content": "package arch.viewmodel\r\n\r\nimport android.os.Bundle\r\nimport androidx.annotation.IdRes\r\nimport androidx.lifecycle.LifecycleObserver\r\nimport androidx.lifecycle.LifecycleOwner\r\nimport androidx.lifecycle.Observer\r\nimport androidx.lifecycle.ViewModel\r\nimport androidx.navigation.NavDirections\r\nimport androidx.navigation.NavOptions\r\nimport arch.event.LiveEvent\r\nimport arch.event.LiveEventMap\r\nimport arch.event.NavigationEvent\r\nimport arch.event.NavigationGraphEvent\r\nimport kotlin.reflect.KClass\r\n\r\n/**\r\n * Created by Stepan on 11.10.2016.\r\n */\r\n\r\nabstract class BaseArchViewModel : ViewModel(), LifecycleObserver {\r\n\r\n    private val liveEventMap = LiveEventMap()\r\n\r\n    fun <T : LiveEvent> subscribe(\r\n        lifecycleOwner: LifecycleOwner,\r\n        eventClass: KClass<T>,\r\n        eventObserver: Observer<T>\r\n    ) {\r\n        liveEventMap.subscribe(lifecycleOwner, eventClass, eventObserver)\r\n    }\r\n\r\n    fun <T : LiveEvent> publish(event: T) {\r\n        liveEventMap.publish(event)\r\n    }\r\n\r\n    protected fun navigate(@IdRes resId: Int, args: Bundle? = null, navOptions: NavOptions? = null) {\r\n        publish(NavigationEvent(resId, args, navOptions))\r\n    }\r\n\r\n    protected fun navigate(directions: NavDirections, navOptions: NavOptions? = null) {\r\n        publish(NavigationEvent(directions, navOptions))\r\n    }\r\n\r\n    protected fun setNavigationGraph(navigationGraph: Int, navStartDestinationId: Int) {\r\n        publish(NavigationGraphEvent(navigationGraph, navStartDestinationId))\r\n    }\r\n}\r\n"
  },
  {
    "path": "arch/src/main/java/arch/viewmodel/BaseDialogViewModel.kt",
    "content": "package arch.viewmodel\r\n\r\nopen class BaseDialogViewModel : BaseArchViewModel() {\r\n\r\n    var title: String? = null\r\n    var message: String? = null\r\n    var positiveButton: String? = null\r\n    var negativeButton: String? = null\r\n    var neutralButton: String? = null\r\n\r\n}\r\n"
  },
  {
    "path": "arch/src/main/res/layout/base_dialog.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<layout xmlns:android=\"http://schemas.android.com/apk/res/android\"\r\n    xmlns:tools=\"http://schemas.android.com/tools\"\r\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\">\r\n\r\n    <data>\r\n\r\n        <import type=\"android.view.View\" />\r\n\r\n        <variable\r\n            name=\"vm\"\r\n            type=\"arch.viewmodel.BaseDialogViewModel\" />\r\n\r\n    </data>\r\n\r\n    <RelativeLayout\r\n        android:id=\"@+id/layout_container\"\r\n        android:layout_width=\"match_parent\"\r\n        android:layout_height=\"match_parent\">\r\n\r\n        <LinearLayout\r\n            android:id=\"@+id/layout_main\"\r\n            android:layout_width=\"match_parent\"\r\n            android:layout_height=\"wrap_content\"\r\n            android:gravity=\"center_horizontal\"\r\n            android:orientation=\"vertical\">\r\n\r\n            <LinearLayout\r\n                android:id=\"@+id/layout_inner\"\r\n                android:layout_width=\"match_parent\"\r\n                android:layout_height=\"wrap_content\"\r\n                android:orientation=\"vertical\">\r\n\r\n                <!-- TITLE -->\r\n                <TextView\r\n                    android:id=\"@+id/txt_title\"\r\n                    android:layout_width=\"match_parent\"\r\n                    android:layout_height=\"wrap_content\"\r\n                    android:gravity=\"center_horizontal\"\r\n                    tools:text=\"Title\" />\r\n\r\n                <!-- MESSAGE -->\r\n                <TextView\r\n                    android:id=\"@+id/text_messaege\"\r\n                    android:layout_width=\"match_parent\"\r\n                    android:layout_height=\"wrap_content\"\r\n                    android:gravity=\"center_horizontal\"\r\n                    tools:text=\"Message\"\r\n                    app:visibleOrGone=\"@{vm.message != null}\"\r\n                    android:text=\"@{vm.message}\" />\r\n\r\n                <!-- MESSAGE IN GRAY -->\r\n                <TextView\r\n                    android:id=\"@+id/txt_message_gray\"\r\n                    android:layout_width=\"match_parent\"\r\n                    android:layout_height=\"wrap_content\"\r\n                    android:gravity=\"center_horizontal\"\r\n                    android:visibility=\"gone\" />\r\n\r\n\r\n                <!-- One button layout -->\r\n                <LinearLayout\r\n                    android:layout_width=\"match_parent\"\r\n                    android:layout_height=\"wrap_content\"\r\n                    android:orientation=\"horizontal\"\r\n                    android:gravity=\"center\">\r\n\r\n                    <Space\r\n                        android:layout_width=\"0dp\"\r\n                        android:layout_height=\"0dp\"\r\n                        android:layout_weight=\"1\" />\r\n\r\n                    <Button\r\n                        android:id=\"@+id/button_positive\"\r\n                        android:layout_width=\"wrap_content\"\r\n                        android:layout_height=\"40dp\"\r\n                        android:layout_weight=\"3\"\r\n                        android:gravity=\"center\"\r\n                        tools:text=\"Positive\"\r\n                        app:visibleOrGone=\"@{vm.positiveButton != null}\"\r\n                        android:text=\"@{vm.positiveButton}\" />\r\n\r\n                    <Button\r\n                        android:id=\"@+id/button_negative\"\r\n                        android:layout_width=\"wrap_content\"\r\n                        android:layout_height=\"match_parent\"\r\n                        android:layout_weight=\"3\"\r\n                        android:gravity=\"center\"\r\n                        tools:text=\"Negative\"\r\n                        app:visibleOrInvisible=\"@{vm.negativeButton != null}\"\r\n                        android:text=\"@{vm.negativeButton}\" />\r\n\r\n                    <Button\r\n                        android:id=\"@+id/button_neutral\"\r\n                        android:layout_width=\"wrap_content\"\r\n                        android:layout_height=\"40dp\"\r\n                        android:layout_weight=\"3\"\r\n                        tools:text=\"Neutral\"\r\n                        app:visibleOrGone=\"@{vm.neutralButton != null}\"\r\n                        android:text=\"@{vm.neutralButton}\"\r\n                        android:gravity=\"center\" />\r\n\r\n                    <Space\r\n                        android:layout_width=\"0dp\"\r\n                        android:layout_height=\"0dp\"\r\n                        android:layout_weight=\"1\" />\r\n\r\n                </LinearLayout>\r\n\r\n            </LinearLayout>\r\n        </LinearLayout>\r\n    </RelativeLayout>\r\n\r\n</layout>"
  },
  {
    "path": "arch/src/main/res/layout/base_view.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<layout xmlns:android=\"http://schemas.android.com/apk/res/android\">\r\n\r\n    <data>\r\n\r\n        <variable\r\n            name=\"lifecycle\"\r\n            type=\"androidx.lifecycle.LifecycleOwner\" />\r\n\r\n        <variable\r\n            name=\"vm\"\r\n            type=\"arch.viewmodel.BaseArchViewModel\" />\r\n    </data>\r\n\r\n    <LinearLayout\r\n        android:layout_width=\"match_parent\"\r\n        android:layout_height=\"match_parent\">\r\n\r\n    </LinearLayout>\r\n</layout>\r\n\r\n"
  },
  {
    "path": "arch/src/main/res/layout/item_recycler.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<layout xmlns:android=\"http://schemas.android.com/apk/res/android\">\r\n\r\n    <data>\r\n\r\n        <variable\r\n            name=\"item\"\r\n            type=\"java.lang.Object\" />\r\n\r\n        <variable\r\n            name=\"parentItem\"\r\n            type=\"Object\" />\r\n\r\n        <variable\r\n            name=\"vm\"\r\n            type=\"arch.viewmodel.BaseArchViewModel\" />\r\n\r\n        <variable\r\n            name=\"lifecycle\"\r\n            type=\"androidx.lifecycle.LifecycleOwner\" />\r\n    </data>\r\n\r\n    <LinearLayout\r\n        android:layout_width=\"match_parent\"\r\n        android:layout_height=\"wrap_content\"></LinearLayout>\r\n</layout>"
  },
  {
    "path": "arch/src/main/res/values/ids.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <item type=\"id\" name=\"nav_host_fragment\" />\n\n</resources>"
  },
  {
    "path": "arch/src/main/res/values/strings.xml",
    "content": "<resources>\r\n    <string name=\"app_name\">MVVM Framework</string>\r\n</resources>\r\n"
  },
  {
    "path": "build.gradle",
    "content": "// Top-level build file where you can add configuration options common to all sub-projects/modules.\n\nbuildscript {\n    ext.commitCount = {\n        def stdOut = new ByteArrayOutputStream()\n        exec {\n            commandLine \"git\", \"rev-list\", \"--count\", \"HEAD\"\n            standardOutput = stdOut\n        }\n        return Integer.valueOf(stdOut.toString().trim())\n    }\n\n    ext {\n        compileSdkVersion = 31\n        minSdkVersion = 23\n        targetSdkVersion = 31\n\n        final VERSION_MAJOR = 2\n        final VERSION_MINOR = 3\n\n        versionName = \"${VERSION_MAJOR}.${VERSION_MINOR}.${commitCount()}\"\n    }\n\n    repositories {\n        google()\n        jcenter()\n        maven { url 'https://dl.bintray.com/kotlin/kotlin-dev' }\n        maven { url 'https://dl.bintray.com/kotlin/kotlin-eap' }\n    }\n\n\n    dependencies {\n        classpath 'com.android.tools.build:gradle:7.0.3'\n        classpath \"org.jetbrains.kotlin:kotlin-gradle-plugin:1.5.31\"\n        classpath 'com.google.gms:google-services:4.3.10'\n        classpath \"androidx.navigation:navigation-safe-args-gradle-plugin:2.3.5\"\n        classpath \"com.google.protobuf:protobuf-gradle-plugin:0.8.12\"\n        classpath \"com.google.dagger:hilt-android-gradle-plugin:2.37\"\n        classpath 'com.google.firebase:firebase-crashlytics-gradle:2.7.1'\n    }\n}\n\nallprojects {\n    repositories {\n        google()\n        jcenter()\n        mavenCentral()\n        maven { url 'https://dl.bintray.com/amulyakhare/maven' }\n        maven { url 'https://jitpack.io' }\n    }\n}\n\ntask clean(type: Delete) {\n    delete rootProject.buildDir\n}\n"
  },
  {
    "path": "gradle/wrapper/gradle-wrapper.properties",
    "content": "#Sun Nov 08 16:48:27 CET 2020\ndistributionBase=GRADLE_USER_HOME\ndistributionPath=wrapper/dists\nzipStoreBase=GRADLE_USER_HOME\nzipStorePath=wrapper/dists\ndistributionUrl=https\\://services.gradle.org/distributions/gradle-7.0.2-all.zip\n"
  },
  {
    "path": "gradle.properties",
    "content": "# Project-wide Gradle settings.\n# IDE (e.g. Android Studio) users:\n# Gradle settings configured through the IDE *will override*\n# any settings specified in this file.\n# For more details on how to configure your build environment visit\n# http://www.gradle.org/docs/current/userguide/build_environment.html\n# Specifies the JVM arguments used for the daemon process.\n# The setting is particularly useful for tweaking memory settings.\norg.gradle.jvmargs=-Xmx1536m\n# When configured, Gradle will run in incubating parallel mode.\n# This option should only be used with decoupled projects. More details, visit\n# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects\n# org.gradle.parallel=true\n# AndroidX package structure to make it clearer which packages are bundled with the\n# Android operating system, and which are packaged with your app's APK\n# https://developer.android.com/topic/libraries/support-library/androidx-rn\nandroid.useAndroidX=true\n# Automatically convert third-party libraries to use AndroidX\nandroid.enableJetifier=true\n# Kotlin code style for this project: \"official\" or \"obsolete\":\nkotlin.code.style=official\n"
  },
  {
    "path": "gradlew",
    "content": "#!/usr/bin/env sh\n\n##############################################################################\n##\n##  Gradle start up script for UN*X\n##\n##############################################################################\n\n# Attempt to set APP_HOME\n# Resolve links: $0 may be a link\nPRG=\"$0\"\n# Need this for relative symlinks.\nwhile [ -h \"$PRG\" ] ; do\n    ls=`ls -ld \"$PRG\"`\n    link=`expr \"$ls\" : '.*-> \\(.*\\)$'`\n    if expr \"$link\" : '/.*' > /dev/null; then\n        PRG=\"$link\"\n    else\n        PRG=`dirname \"$PRG\"`\"/$link\"\n    fi\ndone\nSAVED=\"`pwd`\"\ncd \"`dirname \\\"$PRG\\\"`/\" >/dev/null\nAPP_HOME=\"`pwd -P`\"\ncd \"$SAVED\" >/dev/null\n\nAPP_NAME=\"Gradle\"\nAPP_BASE_NAME=`basename \"$0\"`\n\n# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.\nDEFAULT_JVM_OPTS=\"\"\n\n# Use the maximum available, or set MAX_FD != -1 to use that value.\nMAX_FD=\"maximum\"\n\nwarn () {\n    echo \"$*\"\n}\n\ndie () {\n    echo\n    echo \"$*\"\n    echo\n    exit 1\n}\n\n# OS specific support (must be 'true' or 'false').\ncygwin=false\nmsys=false\ndarwin=false\nnonstop=false\ncase \"`uname`\" in\n  CYGWIN* )\n    cygwin=true\n    ;;\n  Darwin* )\n    darwin=true\n    ;;\n  MINGW* )\n    msys=true\n    ;;\n  NONSTOP* )\n    nonstop=true\n    ;;\nesac\n\nCLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar\n\n# Determine the Java command to use to start the JVM.\nif [ -n \"$JAVA_HOME\" ] ; then\n    if [ -x \"$JAVA_HOME/jre/sh/java\" ] ; then\n        # IBM's JDK on AIX uses strange locations for the executables\n        JAVACMD=\"$JAVA_HOME/jre/sh/java\"\n    else\n        JAVACMD=\"$JAVA_HOME/bin/java\"\n    fi\n    if [ ! -x \"$JAVACMD\" ] ; then\n        die \"ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME\n\nPlease set the JAVA_HOME variable in your environment to match the\nlocation of your Java installation.\"\n    fi\nelse\n    JAVACMD=\"java\"\n    which java >/dev/null 2>&1 || die \"ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.\n\nPlease set the JAVA_HOME variable in your environment to match the\nlocation of your Java installation.\"\nfi\n\n# Increase the maximum file descriptors if we can.\nif [ \"$cygwin\" = \"false\" -a \"$darwin\" = \"false\" -a \"$nonstop\" = \"false\" ] ; then\n    MAX_FD_LIMIT=`ulimit -H -n`\n    if [ $? -eq 0 ] ; then\n        if [ \"$MAX_FD\" = \"maximum\" -o \"$MAX_FD\" = \"max\" ] ; then\n            MAX_FD=\"$MAX_FD_LIMIT\"\n        fi\n        ulimit -n $MAX_FD\n        if [ $? -ne 0 ] ; then\n            warn \"Could not set maximum file descriptor limit: $MAX_FD\"\n        fi\n    else\n        warn \"Could not query maximum file descriptor limit: $MAX_FD_LIMIT\"\n    fi\nfi\n\n# For Darwin, add options to specify how the application appears in the dock\nif $darwin; then\n    GRADLE_OPTS=\"$GRADLE_OPTS \\\"-Xdock:name=$APP_NAME\\\" \\\"-Xdock:icon=$APP_HOME/media/gradle.icns\\\"\"\nfi\n\n# For Cygwin, switch paths to Windows format before running java\nif $cygwin ; then\n    APP_HOME=`cygpath --path --mixed \"$APP_HOME\"`\n    CLASSPATH=`cygpath --path --mixed \"$CLASSPATH\"`\n    JAVACMD=`cygpath --unix \"$JAVACMD\"`\n\n    # We build the pattern for arguments to be converted via cygpath\n    ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`\n    SEP=\"\"\n    for dir in $ROOTDIRSRAW ; do\n        ROOTDIRS=\"$ROOTDIRS$SEP$dir\"\n        SEP=\"|\"\n    done\n    OURCYGPATTERN=\"(^($ROOTDIRS))\"\n    # Add a user-defined pattern to the cygpath arguments\n    if [ \"$GRADLE_CYGPATTERN\" != \"\" ] ; then\n        OURCYGPATTERN=\"$OURCYGPATTERN|($GRADLE_CYGPATTERN)\"\n    fi\n    # Now convert the arguments - kludge to limit ourselves to /bin/sh\n    i=0\n    for arg in \"$@\" ; do\n        CHECK=`echo \"$arg\"|egrep -c \"$OURCYGPATTERN\" -`\n        CHECK2=`echo \"$arg\"|egrep -c \"^-\"`                                 ### Determine if an option\n\n        if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then                    ### Added a condition\n            eval `echo args$i`=`cygpath --path --ignore --mixed \"$arg\"`\n        else\n            eval `echo args$i`=\"\\\"$arg\\\"\"\n        fi\n        i=$((i+1))\n    done\n    case $i in\n        (0) set -- ;;\n        (1) set -- \"$args0\" ;;\n        (2) set -- \"$args0\" \"$args1\" ;;\n        (3) set -- \"$args0\" \"$args1\" \"$args2\" ;;\n        (4) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" ;;\n        (5) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" ;;\n        (6) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" ;;\n        (7) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" \"$args6\" ;;\n        (8) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" \"$args6\" \"$args7\" ;;\n        (9) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" \"$args6\" \"$args7\" \"$args8\" ;;\n    esac\nfi\n\n# Escape application args\nsave () {\n    for i do printf %s\\\\n \"$i\" | sed \"s/'/'\\\\\\\\''/g;1s/^/'/;\\$s/\\$/' \\\\\\\\/\" ; done\n    echo \" \"\n}\nAPP_ARGS=$(save \"$@\")\n\n# Collect all arguments for the java command, following the shell quoting and substitution rules\neval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS \"\\\"-Dorg.gradle.appname=$APP_BASE_NAME\\\"\" -classpath \"\\\"$CLASSPATH\\\"\" org.gradle.wrapper.GradleWrapperMain \"$APP_ARGS\"\n\n# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong\nif [ \"$(uname)\" = \"Darwin\" ] && [ \"$HOME\" = \"$PWD\" ]; then\n  cd \"$(dirname \"$0\")\"\nfi\n\nexec \"$JAVACMD\" \"$@\"\n"
  },
  {
    "path": "gradlew.bat",
    "content": "@if \"%DEBUG%\" == \"\" @echo off\r\n@rem ##########################################################################\r\n@rem\r\n@rem  Gradle startup script for Windows\r\n@rem\r\n@rem ##########################################################################\r\n\r\n@rem Set local scope for the variables with windows NT shell\r\nif \"%OS%\"==\"Windows_NT\" setlocal\r\n\r\nset DIRNAME=%~dp0\r\nif \"%DIRNAME%\" == \"\" set DIRNAME=.\r\nset APP_BASE_NAME=%~n0\r\nset APP_HOME=%DIRNAME%\r\n\r\n@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.\r\nset DEFAULT_JVM_OPTS=\r\n\r\n@rem Find java.exe\r\nif defined JAVA_HOME goto findJavaFromJavaHome\r\n\r\nset JAVA_EXE=java.exe\r\n%JAVA_EXE% -version >NUL 2>&1\r\nif \"%ERRORLEVEL%\" == \"0\" goto init\r\n\r\necho.\r\necho ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.\r\necho.\r\necho Please set the JAVA_HOME variable in your environment to match the\r\necho location of your Java installation.\r\n\r\ngoto fail\r\n\r\n:findJavaFromJavaHome\r\nset JAVA_HOME=%JAVA_HOME:\"=%\r\nset JAVA_EXE=%JAVA_HOME%/bin/java.exe\r\n\r\nif exist \"%JAVA_EXE%\" goto init\r\n\r\necho.\r\necho ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%\r\necho.\r\necho Please set the JAVA_HOME variable in your environment to match the\r\necho location of your Java installation.\r\n\r\ngoto fail\r\n\r\n:init\r\n@rem Get command-line arguments, handling Windows variants\r\n\r\nif not \"%OS%\" == \"Windows_NT\" goto win9xME_args\r\n\r\n:win9xME_args\r\n@rem Slurp the command line arguments.\r\nset CMD_LINE_ARGS=\r\nset _SKIP=2\r\n\r\n:win9xME_args_slurp\r\nif \"x%~1\" == \"x\" goto execute\r\n\r\nset CMD_LINE_ARGS=%*\r\n\r\n:execute\r\n@rem Setup the command line\r\n\r\nset CLASSPATH=%APP_HOME%\\gradle\\wrapper\\gradle-wrapper.jar\r\n\r\n@rem Execute Gradle\r\n\"%JAVA_EXE%\" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% \"-Dorg.gradle.appname=%APP_BASE_NAME%\" -classpath \"%CLASSPATH%\" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%\r\n\r\n:end\r\n@rem End local scope for the variables with windows NT shell\r\nif \"%ERRORLEVEL%\"==\"0\" goto mainEnd\r\n\r\n:fail\r\nrem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of\r\nrem the _cmd.exe /c_ return code!\r\nif  not \"\" == \"%GRADLE_EXIT_CONSOLE%\" exit 1\r\nexit /b 1\r\n\r\n:mainEnd\r\nif \"%OS%\"==\"Windows_NT\" endlocal\r\n\r\n:omega\r\n"
  },
  {
    "path": "release.sh",
    "content": "#!/bin/bash\n\n# save current branch into variable to be able to return to it later\ncurrentBranch=$(git symbolic-ref --short HEAD)\ngit stash\ngit checkout master\ngit pull\ngit rebase origin/develop\n\ncommitCount=$(git rev-list HEAD --count)\n\ngit tag -a \"$commitCount\" HEAD -m \"Android Release $commitCount\"\ngit push origin master:master --tags\ngit checkout \"$currentBranch\"\ngit stash apply"
  },
  {
    "path": "settings.gradle",
    "content": "include ':app', ':arch'\nrootProject.name='erouska-android'\n"
  }
]