[
  {
    "path": ".github/FUNDING.yml",
    "content": "buy_me_a_coffee: beemdevelopment\ncustom:\n  - \"https://www.blockchain.com/btc/address/bc1q26kyxqjkc6tu477pzy0whagwhs4ypv93qls22n\"\n  - \"https://nanocrawler.cc/explorer/account/nano_1aegisc559b1x4p3839egnu579jkd4htpidy14eo9e31gzqmwuafypnj4q94\"\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/bug.yml",
    "content": "name: Bug Report\ndescription: Create a report to help us fix a bug\nlabels: [\"bug\"]\nbody:\n  - type: markdown\n    attributes:\n      value: |\n        Please read the [bug reports section of the contribution guidelines](https://github.com/beemdevelopment/Aegis/blob/master/CONTRIBUTING.md#bug-reports) before submitting an issue.\n  - type: input\n    id: version\n    attributes:\n      label: Version\n      description: Which version of Aegis are you using?\n      placeholder: \"Example: v2.1\"\n    validations:\n      required: true\n  - type: dropdown\n    id: source\n    attributes:\n      label: Source\n      description: Where did you get Aegis from?\n      options:\n        - Google Play\n        - F-Droid\n        - GitHub\n        - Other\n    validations:\n      required: true\n  - type: dropdown\n    id: encryption\n    attributes:\n      label: Vault encryption\n      description: Do you have encryption enabled for your Aegis vault?\n      options:\n        - \"Yes (with biometric unlock)\"\n        - \"Yes\"\n        - \"No\"\n    validations:\n      required: true\n  - type: input\n    id: device\n    attributes:\n      label: Device\n      description: Which device are you using Aegis on?\n      placeholder: \"Example: Pixel 5\"\n    validations:\n      required: true\n  - type: input\n    id: android_version\n    attributes:\n      label: Android version\n      description: Which Android version is running on your device?\n      placeholder: \"Example: Android 13\"\n    validations:\n      required: true\n  - type: input\n    id: rom\n    attributes:\n      label: ROM\n      description: Are you using a custom ROM? If so, which one and which version? If you're using the stock OS that came with your device, you can leave this field empty.\n      placeholder: \"Example: GrapheneOS\"\n    validations:\n      required: false\n  - type: textarea\n    id: reproduction_steps\n    attributes:\n      label: Steps to reproduce\n      description: A detailed list of reproduction steps.\n    validations:\n      required: true\n  - type: textarea\n    id: expectations\n    attributes:\n      label: What do you expect to happen?\n    validations:\n      required: true\n  - type: textarea\n    id: reality\n    attributes:\n      label: What happens instead?\n    validations:\n      required: true\n  - type: textarea\n    id: log\n    attributes:\n      label: Log\n      description: If applicable, paste the debug log that you captured using ADB here.\n    validations:\n      required: false\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/feature.md",
    "content": "---\nname: \"Feature request\"\nabout: \"Suggest a new feature for this project\"\nlabels: proposal\n---\n\n"
  },
  {
    "path": ".github/workflows/build-app-workflow.yaml",
    "content": "name: build\non: [pull_request, push]\njobs:\n  build:\n    runs-on: ubuntu-latest\n    steps:\n      - name: Checkout the code\n        uses: actions/checkout@v4\n      - name: Validate Gradle wrapper\n        uses: gradle/wrapper-validation-action@699bb18358f12c5b78b37bb0111d3a0e2276e0e2\n      - uses: actions/setup-java@v4\n        with:\n          java-version: '17'\n          distribution: 'temurin'\n          cache: 'gradle'\n      - name: Build the app\n        run: ./gradlew build\n      - uses: actions/upload-artifact@v4\n        with:\n          name: apk\n          path: app/build/outputs/apk/debug/app-debug.apk\n  test:\n    runs-on: ubuntu-latest\n    steps:\n      - name: Checkout\n        uses: actions/checkout@v4\n      - uses: actions/setup-java@v4\n        with:\n          java-version: '17'\n          distribution: 'temurin'\n          cache: 'gradle'\n      - name: Enable KVM group perms\n        run: |\n          echo 'KERNEL==\"kvm\", GROUP=\"kvm\", MODE=\"0666\", OPTIONS+=\"static_node=kvm\"' | sudo tee /etc/udev/rules.d/99-kvm4all.rules\n          sudo udevadm control --reload-rules\n          sudo udevadm trigger --name-match=kvm\n      - name: Tests\n        uses: reactivecircus/android-emulator-runner@62dbb605bba737720e10b196cb4220d374026a6d\n        with:\n          api-level: 31\n          arch: x86_64\n          profile: pixel_3a\n          heap-size: 512M\n          ram-size: 4096M\n          emulator-options: -memory 4096 -no-window -gpu swiftshader_indirect -noaudio -no-boot-anim -camera-back none\n          disable-animations: true\n          disk-size: 8G\n          script: |\n            mkdir -p artifacts/report\n            adb logcat -c\n            adb logcat -G 16M && adb logcat -g\n            ./gradlew connectedCheck || touch tests_failing\n            adb logcat -d > artifacts/logcat.txt\n            cp -r app/build/reports/androidTests/connected/* artifacts/report/\n            if adb shell '[ -e /sdcard/Pictures/screenshots ]'; then adb pull /sdcard/Pictures/screenshots artifacts/; fi\n            test ! -f tests_failing\n      - uses: actions/upload-artifact@v4\n        if: always()\n        with:\n          name: instrumented-test-report\n          path: |\n            artifacts/*\n          if-no-files-found: ignore\n"
  },
  {
    "path": ".github/workflows/codeql-analysis.yml",
    "content": "name: codeql\non:\n  push:\n    branches: [ \"master\" ]\n  pull_request:\n    branches: [ \"master\" ]\n  schedule:\n    - cron: '25 16 * * 2'\njobs:\n  analyze:\n    name: analyze\n    runs-on: ubuntu-latest\n    permissions:\n      actions: read\n      contents: read\n      security-events: write\n    if: github.event_name != 'schedule' || github.repository == 'beemdevelopment/Aegis'\n    steps:\n    - name: Checkout\n      uses: actions/checkout@v4\n    - name: Exclude paths\n      # The importers are excluded from analysis, because some of the apps Aegis\n      # can import from don't have such great crypto, which will cause false\n      # positive security alerts.\n      run: |\n        find app/src/main/java/com/beemdevelopment/aegis/importers ! \\( -name AegisImporter.java -o -name \"DatabaseImporter*\" \\) -type f -exec rm -f {} +\n        sed -i '/Importer.class/d' app/src/main/java/com/beemdevelopment/aegis/importers/DatabaseImporter.java\n    - uses: actions/setup-java@v4\n      with:\n        java-version: '17'\n        distribution: 'temurin'\n        cache: 'gradle'\n    - name: Initialize CodeQL\n      uses: github/codeql-action/init@v3\n      with:\n        languages: java\n    - name: Build\n      run: ./gradlew assembleDebug\n    - name: Perform CodeQL Analysis\n      uses: github/codeql-action/analyze@v3\n      with:\n        category: \"/language:${{matrix.language}}\"\n"
  },
  {
    "path": ".github/workflows/crowdin.yml",
    "content": "name: crowdin\non:\n  push:\n    branches:\n      - master\n# run sequentially (per branch)\nconcurrency: \"crowdin-upload-${{ github.ref }}\"\njobs:\n  upload-sources:\n    runs-on: ubuntu-latest\n    if: github.repository == 'beemdevelopment/Aegis'\n    steps:\n      - uses: actions/checkout@v4\n      - name: Install crowdin-cli\n        run: |\n          wget https://github.com/crowdin/crowdin-cli/releases/download/4.6.1/crowdin-cli.zip\n          echo \"7afd70de3a747ac631a5bad7866008163ae1d50c4606b5773f0b90a5481ffde2  crowdin-cli.zip\" | sha256sum -c\n          unzip crowdin-cli.zip -d crowdin-cli\n      - name: Upload to Crowdin\n        env:\n          CROWDIN_PERSONAL_TOKEN: \"${{ secrets.CROWDIN_TOKEN }}\"\n        run: |\n          java -jar ./crowdin-cli/4.6.1/crowdin-cli.jar upload sources \\\n            --no-progress \\\n            --branch master\n"
  },
  {
    "path": ".gitignore",
    "content": "# Built application files\n*.apk\n*.ap_\n\n# Files for the ART/Dalvik VM\n*.dex\n\n# Java class files\n*.class\n\n# Generated files\nbin/\ngen/\nout/\n\n# Gradle files\n.gradle/\nbuild/\nrelease/\n\n# Local configuration file (sdk path, etc)\nlocal.properties\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 Studio captures folder\ncaptures/\n\n# Intellij\n*.iml\n.idea/\n\n# Keystore files\n*.jks\ncrowdin.properties\n.crowdin/config.yml\n"
  },
  {
    "path": "CONTRIBUTING.md",
    "content": "# Contributing\n\nLooking to contribute to Aegis? That's great! There are a couple of ways to help\nout. This document contains some general guidelines for each type of\ncontribution.\n\nPlease review [the FAQ](FAQ.md) before reporting a bug, asking a question or\nrequesting a feature.\n\n## Translations\n\nWe use [Crowdin](https://crowdin.com/project/aegis-authenticator) to crowdsource\ntranslations of Aegis for lots of different languages. __Pull requests that\nadd/update a translation are no longer accepted.__ Crowdin is our single source\nof truth for translations, to keep things easy to maintain.\n\nThe top 30 languages are available for translation. It's possible that yours is\nnot in that list. If that's the case, feel free to send us an email and we'll\nadd it.\n\n## Pull requests\n\nIf you're planning on adding a new feature or making other large changes, please\ndiscuss it with us first through [a\nproposal](https://github.com/beemdevelopment/Aegis/issues/new?labels=proposal&template=feature.md)\non GitHub. Discussing your idea with us first ensures that everyone is on the\nsame page before you start working on your change. We don't like rejecting pull\nrequests.\n\n## Bug reports\n\nWe use GitHub's issue tracker to track bugs. To make bug reports easier to\nfollow up on for us, please fill out the form as accurately as possible. If a\nbug report does not contain enough information, it will be closed. Duplicate bug\nreports receive the same treatment.\n\nPlease consider trying to find the root cause yourself first and include your\nanalysis of the issue in your report. Perhaps even send us a patch that fixes\nit! We're happy to help you if you get stuck along the way.\n\n### Capturing a log with ADB\n\nIn some cases, we ask our users to obtain a debug log from their device. This is\ntypically only necessary if Aegis:\n- Is unable to recover from an error and crashes.\n- Only shows a generic error to the user, but writes a more detailed one to the\n  log.\n\nCapturing a log with the Android Debug Bridge (ADB) allows us to see the stack\ntrace and the exception that occurred.\n\n#### Preparation\n\nBefore you can capture a log, you first need to go through a one-time setup\nprocess on your Android device and computer.\n\n##### Prerequisites\n\n- Your Android device.\n- A computer with Windows, Mac or Linux.\n- A USB cable to connect your Android device to your computer.\n\n##### Setup\n\n__On your Android device__:\n\n1. Navigate to ``Settings -> About``, scroll down and start tapping on the build\n   number until developer options are enabled.\n2. Navigate to ``Settings -> System -> Developer options`` and enable ``USB\n   debugging``.\n\nThese navigation steps may differ slightly across Android versions and ROMs.\n\n__On your computer__:\n\n3. Download and extract the SDK platform tools for Android:\n   https://developer.android.com/studio/releases/platform-tools.\n4. Start your terminal emulator (If you're on Windows, start PowerShell) and\n   navigate to the folder where platform-tools was extracted.\n5. Execute ``adb devices``.\n\n__On your Android device__:\n\n6. A prompt will appear. Select \"Always allow from this computer\" and accept the\n   connection.\n\n#### Capturing a log\n\n__On your Android device__:\n\n1. Start Aegis.\n\n__On your PC__:\n\n2. Start your terminal emulator (If you're on Windows, start PowerShell) and\n   navigate to the folder where platform-tools was extracted.\n3. Start a log capture by executing the following commands.\n\n    ```\n    adb logcat -c\n    adb logcat > debug.log\n    ```\n\n    The logcat command captures the full system log by default, which may expose\n    some sensitive information. While this information can sometimes help with\n    finding the root cause of the issue, it is not always necessary. To only\n    capture the log output of Aegis, replace the last logcat command with the\n    one below:\n\n    ```sh\n    adb logcat --pid=$(adb shell pidof -s com.beemdevelopment.aegis) > debug.log\n    ```\n\n    _If you are using a debug APK, replace ``com.beemdevelopment.aegis`` with\n   ``com.beemdevelopment.aegis.debug``._\n\n__On your Android device__:\n\n4. Reproduce the issue.\n\n__On your PC__:\n\n5. Stop the log capture with Ctrl+C.\n6. Attach the ``debug.log`` file to your issue on GitHub.\n"
  },
  {
    "path": "FAQ.md",
    "content": "# FAQ\n\n## General\n\n### How can I contribute?\n\nThere are lots of ways! Please refer to our [contributing\nguide](https://github.com/beemdevelopment/Aegis/blob/master/CONTRIBUTING.md).\n\n### Why is the latest version not on F-Droid yet?\n\nWe don't release new versions of Aegis on F-Droid ourselves. Once we've released\na new version on GitHub, F-Droid will usually kick off their automatic build\nprocess a day later and publish the app to their repository a couple of days\nafterwards. It can sometimes take up to a week for a new version to appear on\nF-Droid.\n\n### Can you port Aegis to iOS/Windows/MacOS/Browser Extension?\n\nWe don't have plans to port Aegis to other platforms.\n\n### Can you add support for Autofill?\n\nOn Android, only one app can be active in the Autofill slot at a time, and since\nthis is typically occupied by the password manager, we don't see much value in\nadding support for this feature in Aegis.\n\n### What is the difference between exporting and backing up?\n\nExporting is done manually and backups are done automatically. The format of the\nvault file is exactly the same for both.\n\n## Security\n\n### I can no longer use biometrics to unlock the app. What should I do?\n\nIf you could previously unlock Aegis with biometrics, but suddenly can't do so\nanymore, this is probably caused by a change made to the security settings of\nyour device. The app will tell you when this happened in most cases. To resolve\nthis, unlock the app with your password, disable biometric unlock in the\nsettings of Aegis and re-enable it.\n\n### Why does Aegis keep prompting me for my password, even though I have enabled biometric authentication?\n\nYou're probably encountering the password reminder. Try entering your password\nto unlock the vault once. After that, Aegis will prompt for biometrics by\ndefault again until it's time for another password reminder.\n\nSince forgetting your password will result in loss of access to the contents of\nthe vault, __we do NOT recommend disabling the password reminder__.\n\n### Aegis uses SHA1 for most/all of my tokens. Isn't that insecure?\n\nThe hash algorithm is imposed by the service you're setting up 2FA for (e.g.\nGoogle, Facebook, GitHub, etc). There is nothing we can do about that. If we\nwere to change this on Aegis' end, the tokens would stop working. Furthermore,\nwhen using SHA1 in an HMAC calculation, the currently known issues in SHA1 are\nnot of concern.\n\n### Why doesn't Aegis support biometric unlock for my device, even though it works with other apps?\n\nThe reason for this is pretty technical. In short, since you're not entering\nyour password when using biometric unlock, Aegis needs some other way to decrypt\nthe vault. For this purpose, we generate and use a key in the Android Keystore,\ntelling it to only allow us to use that key if the user authenticates using\ntheir biometrics first. Some devices have buggy implementations of this feature,\nresulting in the error displayed to you by Aegis in an error dialog.\n\nIf biometrics works with other apps, but not with Aegis, that means those other\napps probably perform a weaker form of biometric authentication.\n\n## Backups\n\n### How can I back up my Aegis vault to the cloud automatically?\n\nAegis can only automatically back up to the cloud if the app of your cloud\nprovider is installed on your device and fully participates in the Android\nStorage Access Framework. Aegis doesn't have access to the internet and we don't\nhave plans to change this, so adding support for specific cloud providers in the\napp is not possible.\n\nCloud providers currently known to be supported:\n- Nextcloud\n\nAnother common setup is to configure Aegis to back up to a folder on local\nstorage of your device and then have a separate app (like\n[Syncthing](https://syncthing.net/)) sync that folder anywhere you want.\n\n## Encrypted Backups\n\n### Why do I not get prompted to enter an encryption password when exporting?\n\nAegis uses the same password you have configured to encrypt your vault as the\npassword which is used when exporting and importing your vault; so when prompted, \nyou will enter that when importing your vault.\n\n## Importing\n\n### When importing from Authenticator Plus, an error is shown claiming that Accounts.txt is missing\n\nMake sure you supply an Authenticator Plus export file obtained through\n__Settings -> Backup & Restore -> Export as Text and HTML__. The ``.db`` format\nis not supported.\n\nIf it still doesn't work, please report the issue to us. As a temporary\nworkaround, you can try extracting the ZIP archive on a computer, recreating it\nwithout a password and then importing that into Aegis. Another option is\nextracting the ZIP archive on a computer and importing the resulting\nAccounts.txt file into Aegis with the \"Plain text\" import option.\n"
  },
  {
    "path": "LICENSE",
    "content": "                    GNU GENERAL PUBLIC LICENSE\n                       Version 3, 29 June 2007\n\n Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>\n Everyone is permitted to copy and distribute verbatim copies\n of this license document, but changing it is not allowed.\n\n                            Preamble\n\n  The GNU General Public License is a free, copyleft license for\nsoftware and other kinds of works.\n\n  The licenses for most software and other practical works are designed\nto take away your freedom to share and change the works.  By contrast,\nthe GNU General Public License is intended to guarantee your freedom to\nshare and change all versions of a program--to make sure it remains free\nsoftware for all its users.  We, the Free Software Foundation, use the\nGNU General Public License for most of our software; it applies also to\nany other work released this way by its authors.  You can apply it to\nyour programs, too.\n\n  When we speak of free software, we are referring to freedom, not\nprice.  Our General Public Licenses are designed to make sure that you\nhave the freedom to distribute copies of free software (and charge for\nthem if you wish), that you receive source code or can get it if you\nwant it, that you can change the software or use pieces of it in new\nfree programs, and that you know you can do these things.\n\n  To protect your rights, we need to prevent others from denying you\nthese rights or asking you to surrender the rights.  Therefore, you have\ncertain responsibilities if you distribute copies of the software, or if\nyou modify it: responsibilities to respect the freedom of others.\n\n  For example, if you distribute copies of such a program, whether\ngratis or for a fee, you must pass on to the recipients the same\nfreedoms that you received.  You must make sure that they, too, receive\nor can get the source code.  And you must show them these terms so they\nknow their rights.\n\n  Developers that use the GNU GPL protect your rights with two steps:\n(1) assert copyright on the software, and (2) offer you this License\ngiving you legal permission to copy, distribute and/or modify it.\n\n  For the developers' and authors' protection, the GPL clearly explains\nthat there is no warranty for this free software.  For both users' and\nauthors' sake, the GPL requires that modified versions be marked as\nchanged, so that their problems will not be attributed erroneously to\nauthors of previous versions.\n\n  Some devices are designed to deny users access to install or run\nmodified versions of the software inside them, although the manufacturer\ncan do so.  This is fundamentally incompatible with the aim of\nprotecting users' freedom to change the software.  The systematic\npattern of such abuse occurs in the area of products for individuals to\nuse, which is precisely where it is most unacceptable.  Therefore, we\nhave designed this version of the GPL to prohibit the practice for those\nproducts.  If such problems arise substantially in other domains, we\nstand ready to extend this provision to those domains in future versions\nof the GPL, as needed to protect the freedom of users.\n\n  Finally, every program is threatened constantly by software patents.\nStates should not allow patents to restrict development and use of\nsoftware on general-purpose computers, but in those that do, we wish to\navoid the special danger that patents applied to a free program could\nmake it effectively proprietary.  To prevent this, the GPL assures that\npatents cannot be used to render the program non-free.\n\n  The precise terms and conditions for copying, distribution and\nmodification follow.\n\n                       TERMS AND CONDITIONS\n\n  0. Definitions.\n\n  \"This License\" refers to version 3 of the GNU General Public License.\n\n  \"Copyright\" also means copyright-like laws that apply to other kinds of\nworks, such as semiconductor masks.\n\n  \"The Program\" refers to any copyrightable work licensed under this\nLicense.  Each licensee is addressed as \"you\".  \"Licensees\" and\n\"recipients\" may be individuals or organizations.\n\n  To \"modify\" a work means to copy from or adapt all or part of the work\nin a fashion requiring copyright permission, other than the making of an\nexact copy.  The resulting work is called a \"modified version\" of the\nearlier work or a work \"based on\" the earlier work.\n\n  A \"covered work\" means either the unmodified Program or a work based\non the Program.\n\n  To \"propagate\" a work means to do anything with it that, without\npermission, would make you directly or secondarily liable for\ninfringement under applicable copyright law, except executing it on a\ncomputer or modifying a private copy.  Propagation includes copying,\ndistribution (with or without modification), making available to the\npublic, and in some countries other activities as well.\n\n  To \"convey\" a work means any kind of propagation that enables other\nparties to make or receive copies.  Mere interaction with a user through\na computer network, with no transfer of a copy, is not conveying.\n\n  An interactive user interface displays \"Appropriate Legal Notices\"\nto the extent that it includes a convenient and prominently visible\nfeature that (1) displays an appropriate copyright notice, and (2)\ntells the user that there is no warranty for the work (except to the\nextent that warranties are provided), that licensees may convey the\nwork under this License, and how to view a copy of this License.  If\nthe interface presents a list of user commands or options, such as a\nmenu, a prominent item in the list meets this criterion.\n\n  1. Source Code.\n\n  The \"source code\" for a work means the preferred form of the work\nfor making modifications to it.  \"Object code\" means any non-source\nform of a work.\n\n  A \"Standard Interface\" means an interface that either is an official\nstandard defined by a recognized standards body, or, in the case of\ninterfaces specified for a particular programming language, one that\nis widely used among developers working in that language.\n\n  The \"System Libraries\" of an executable work include anything, other\nthan the work as a whole, that (a) is included in the normal form of\npackaging a Major Component, but which is not part of that Major\nComponent, and (b) serves only to enable use of the work with that\nMajor Component, or to implement a Standard Interface for which an\nimplementation is available to the public in source code form.  A\n\"Major Component\", in this context, means a major essential component\n(kernel, window system, and so on) of the specific operating system\n(if any) on which the executable work runs, or a compiler used to\nproduce the work, or an object code interpreter used to run it.\n\n  The \"Corresponding Source\" for a work in object code form means all\nthe source code needed to generate, install, and (for an executable\nwork) run the object code and to modify the work, including scripts to\ncontrol those activities.  However, it does not include the work's\nSystem Libraries, or general-purpose tools or generally available free\nprograms which are used unmodified in performing those activities but\nwhich are not part of the work.  For example, Corresponding Source\nincludes interface definition files associated with source files for\nthe work, and the source code for shared libraries and dynamically\nlinked subprograms that the work is specifically designed to require,\nsuch as by intimate data communication or control flow between those\nsubprograms and other parts of the work.\n\n  The Corresponding Source need not include anything that users\ncan regenerate automatically from other parts of the Corresponding\nSource.\n\n  The Corresponding Source for a work in source code form is that\nsame work.\n\n  2. Basic Permissions.\n\n  All rights granted under this License are granted for the term of\ncopyright on the Program, and are irrevocable provided the stated\nconditions are met.  This License explicitly affirms your unlimited\npermission to run the unmodified Program.  The output from running a\ncovered work is covered by this License only if the output, given its\ncontent, constitutes a covered work.  This License acknowledges your\nrights of fair use or other equivalent, as provided by copyright law.\n\n  You may make, run and propagate covered works that you do not\nconvey, without conditions so long as your license otherwise remains\nin force.  You may convey covered works to others for the sole purpose\nof having them make modifications exclusively for you, or provide you\nwith facilities for running those works, provided that you comply with\nthe terms of this License in conveying all material for which you do\nnot control copyright.  Those thus making or running the covered works\nfor you must do so exclusively on your behalf, under your direction\nand control, on terms that prohibit them from making any copies of\nyour copyrighted material outside their relationship with you.\n\n  Conveying under any other circumstances is permitted solely under\nthe conditions stated below.  Sublicensing is not allowed; section 10\nmakes it unnecessary.\n\n  3. Protecting Users' Legal Rights From Anti-Circumvention Law.\n\n  No covered work shall be deemed part of an effective technological\nmeasure under any applicable law fulfilling obligations under article\n11 of the WIPO copyright treaty adopted on 20 December 1996, or\nsimilar laws prohibiting or restricting circumvention of such\nmeasures.\n\n  When you convey a covered work, you waive any legal power to forbid\ncircumvention of technological measures to the extent such circumvention\nis effected by exercising rights under this License with respect to\nthe covered work, and you disclaim any intention to limit operation or\nmodification of the work as a means of enforcing, against the work's\nusers, your or third parties' legal rights to forbid circumvention of\ntechnological measures.\n\n  4. Conveying Verbatim Copies.\n\n  You may convey verbatim copies of the Program's source code as you\nreceive it, in any medium, provided that you conspicuously and\nappropriately publish on each copy an appropriate copyright notice;\nkeep intact all notices stating that this License and any\nnon-permissive terms added in accord with section 7 apply to the code;\nkeep intact all notices of the absence of any warranty; and give all\nrecipients a copy of this License along with the Program.\n\n  You may charge any price or no price for each copy that you convey,\nand you may offer support or warranty protection for a fee.\n\n  5. Conveying Modified Source Versions.\n\n  You may convey a work based on the Program, or the modifications to\nproduce it from the Program, in the form of source code under the\nterms of section 4, provided that you also meet all of these conditions:\n\n    a) The work must carry prominent notices stating that you modified\n    it, and giving a relevant date.\n\n    b) The work must carry prominent notices stating that it is\n    released under this License and any conditions added under section\n    7.  This requirement modifies the requirement in section 4 to\n    \"keep intact all notices\".\n\n    c) You must license the entire work, as a whole, under this\n    License to anyone who comes into possession of a copy.  This\n    License will therefore apply, along with any applicable section 7\n    additional terms, to the whole of the work, and all its parts,\n    regardless of how they are packaged.  This License gives no\n    permission to license the work in any other way, but it does not\n    invalidate such permission if you have separately received it.\n\n    d) If the work has interactive user interfaces, each must display\n    Appropriate Legal Notices; however, if the Program has interactive\n    interfaces that do not display Appropriate Legal Notices, your\n    work need not make them do so.\n\n  A compilation of a covered work with other separate and independent\nworks, which are not by their nature extensions of the covered work,\nand which are not combined with it such as to form a larger program,\nin or on a volume of a storage or distribution medium, is called an\n\"aggregate\" if the compilation and its resulting copyright are not\nused to limit the access or legal rights of the compilation's users\nbeyond what the individual works permit.  Inclusion of a covered work\nin an aggregate does not cause this License to apply to the other\nparts of the aggregate.\n\n  6. Conveying Non-Source Forms.\n\n  You may convey a covered work in object code form under the terms\nof sections 4 and 5, provided that you also convey the\nmachine-readable Corresponding Source under the terms of this License,\nin one of these ways:\n\n    a) Convey the object code in, or embodied in, a physical product\n    (including a physical distribution medium), accompanied by the\n    Corresponding Source fixed on a durable physical medium\n    customarily used for software interchange.\n\n    b) Convey the object code in, or embodied in, a physical product\n    (including a physical distribution medium), accompanied by a\n    written offer, valid for at least three years and valid for as\n    long as you offer spare parts or customer support for that product\n    model, to give anyone who possesses the object code either (1) a\n    copy of the Corresponding Source for all the software in the\n    product that is covered by this License, on a durable physical\n    medium customarily used for software interchange, for a price no\n    more than your reasonable cost of physically performing this\n    conveying of source, or (2) access to copy the\n    Corresponding Source from a network server at no charge.\n\n    c) Convey individual copies of the object code with a copy of the\n    written offer to provide the Corresponding Source.  This\n    alternative is allowed only occasionally and noncommercially, and\n    only if you received the object code with such an offer, in accord\n    with subsection 6b.\n\n    d) Convey the object code by offering access from a designated\n    place (gratis or for a charge), and offer equivalent access to the\n    Corresponding Source in the same way through the same place at no\n    further charge.  You need not require recipients to copy the\n    Corresponding Source along with the object code.  If the place to\n    copy the object code is a network server, the Corresponding Source\n    may be on a different server (operated by you or a third party)\n    that supports equivalent copying facilities, provided you maintain\n    clear directions next to the object code saying where to find the\n    Corresponding Source.  Regardless of what server hosts the\n    Corresponding Source, you remain obligated to ensure that it is\n    available for as long as needed to satisfy these requirements.\n\n    e) Convey the object code using peer-to-peer transmission, provided\n    you inform other peers where the object code and Corresponding\n    Source of the work are being offered to the general public at no\n    charge under subsection 6d.\n\n  A separable portion of the object code, whose source code is excluded\nfrom the Corresponding Source as a System Library, need not be\nincluded in conveying the object code work.\n\n  A \"User Product\" is either (1) a \"consumer product\", which means any\ntangible personal property which is normally used for personal, family,\nor household purposes, or (2) anything designed or sold for incorporation\ninto a dwelling.  In determining whether a product is a consumer product,\ndoubtful cases shall be resolved in favor of coverage.  For a particular\nproduct received by a particular user, \"normally used\" refers to a\ntypical or common use of that class of product, regardless of the status\nof the particular user or of the way in which the particular user\nactually uses, or expects or is expected to use, the product.  A product\nis a consumer product regardless of whether the product has substantial\ncommercial, industrial or non-consumer uses, unless such uses represent\nthe only significant mode of use of the product.\n\n  \"Installation Information\" for a User Product means any methods,\nprocedures, authorization keys, or other information required to install\nand execute modified versions of a covered work in that User Product from\na modified version of its Corresponding Source.  The information must\nsuffice to ensure that the continued functioning of the modified object\ncode is in no case prevented or interfered with solely because\nmodification has been made.\n\n  If you convey an object code work under this section in, or with, or\nspecifically for use in, a User Product, and the conveying occurs as\npart of a transaction in which the right of possession and use of the\nUser Product is transferred to the recipient in perpetuity or for a\nfixed term (regardless of how the transaction is characterized), the\nCorresponding Source conveyed under this section must be accompanied\nby the Installation Information.  But this requirement does not apply\nif neither you nor any third party retains the ability to install\nmodified object code on the User Product (for example, the work has\nbeen installed in ROM).\n\n  The requirement to provide Installation Information does not include a\nrequirement to continue to provide support service, warranty, or updates\nfor a work that has been modified or installed by the recipient, or for\nthe User Product in which it has been modified or installed.  Access to a\nnetwork may be denied when the modification itself materially and\nadversely affects the operation of the network or violates the rules and\nprotocols for communication across the network.\n\n  Corresponding Source conveyed, and Installation Information provided,\nin accord with this section must be in a format that is publicly\ndocumented (and with an implementation available to the public in\nsource code form), and must require no special password or key for\nunpacking, reading or copying.\n\n  7. Additional Terms.\n\n  \"Additional permissions\" are terms that supplement the terms of this\nLicense by making exceptions from one or more of its conditions.\nAdditional permissions that are applicable to the entire Program shall\nbe treated as though they were included in this License, to the extent\nthat they are valid under applicable law.  If additional permissions\napply only to part of the Program, that part may be used separately\nunder those permissions, but the entire Program remains governed by\nthis License without regard to the additional permissions.\n\n  When you convey a copy of a covered work, you may at your option\nremove any additional permissions from that copy, or from any part of\nit.  (Additional permissions may be written to require their own\nremoval in certain cases when you modify the work.)  You may place\nadditional permissions on material, added by you to a covered work,\nfor which you have or can give appropriate copyright permission.\n\n  Notwithstanding any other provision of this License, for material you\nadd to a covered work, you may (if authorized by the copyright holders of\nthat material) supplement the terms of this License with terms:\n\n    a) Disclaiming warranty or limiting liability differently from the\n    terms of sections 15 and 16 of this License; or\n\n    b) Requiring preservation of specified reasonable legal notices or\n    author attributions in that material or in the Appropriate Legal\n    Notices displayed by works containing it; or\n\n    c) Prohibiting misrepresentation of the origin of that material, or\n    requiring that modified versions of such material be marked in\n    reasonable ways as different from the original version; or\n\n    d) Limiting the use for publicity purposes of names of licensors or\n    authors of the material; or\n\n    e) Declining to grant rights under trademark law for use of some\n    trade names, trademarks, or service marks; or\n\n    f) Requiring indemnification of licensors and authors of that\n    material by anyone who conveys the material (or modified versions of\n    it) with contractual assumptions of liability to the recipient, for\n    any liability that these contractual assumptions directly impose on\n    those licensors and authors.\n\n  All other non-permissive additional terms are considered \"further\nrestrictions\" within the meaning of section 10.  If the Program as you\nreceived it, or any part of it, contains a notice stating that it is\ngoverned by this License along with a term that is a further\nrestriction, you may remove that term.  If a license document contains\na further restriction but permits relicensing or conveying under this\nLicense, you may add to a covered work material governed by the terms\nof that license document, provided that the further restriction does\nnot survive such relicensing or conveying.\n\n  If you add terms to a covered work in accord with this section, you\nmust place, in the relevant source files, a statement of the\nadditional terms that apply to those files, or a notice indicating\nwhere to find the applicable terms.\n\n  Additional terms, permissive or non-permissive, may be stated in the\nform of a separately written license, or stated as exceptions;\nthe above requirements apply either way.\n\n  8. Termination.\n\n  You may not propagate or modify a covered work except as expressly\nprovided under this License.  Any attempt otherwise to propagate or\nmodify it is void, and will automatically terminate your rights under\nthis License (including any patent licenses granted under the third\nparagraph of section 11).\n\n  However, if you cease all violation of this License, then your\nlicense from a particular copyright holder is reinstated (a)\nprovisionally, unless and until the copyright holder explicitly and\nfinally terminates your license, and (b) permanently, if the copyright\nholder fails to notify you of the violation by some reasonable means\nprior to 60 days after the cessation.\n\n  Moreover, your license from a particular copyright holder is\nreinstated permanently if the copyright holder notifies you of the\nviolation by some reasonable means, this is the first time you have\nreceived notice of violation of this License (for any work) from that\ncopyright holder, and you cure the violation prior to 30 days after\nyour receipt of the notice.\n\n  Termination of your rights under this section does not terminate the\nlicenses of parties who have received copies or rights from you under\nthis License.  If your rights have been terminated and not permanently\nreinstated, you do not qualify to receive new licenses for the same\nmaterial under section 10.\n\n  9. Acceptance Not Required for Having Copies.\n\n  You are not required to accept this License in order to receive or\nrun a copy of the Program.  Ancillary propagation of a covered work\noccurring solely as a consequence of using peer-to-peer transmission\nto receive a copy likewise does not require acceptance.  However,\nnothing other than this License grants you permission to propagate or\nmodify any covered work.  These actions infringe copyright if you do\nnot accept this License.  Therefore, by modifying or propagating a\ncovered work, you indicate your acceptance of this License to do so.\n\n  10. Automatic Licensing of Downstream Recipients.\n\n  Each time you convey a covered work, the recipient automatically\nreceives a license from the original licensors, to run, modify and\npropagate that work, subject to this License.  You are not responsible\nfor enforcing compliance by third parties with this License.\n\n  An \"entity transaction\" is a transaction transferring control of an\norganization, or substantially all assets of one, or subdividing an\norganization, or merging organizations.  If propagation of a covered\nwork results from an entity transaction, each party to that\ntransaction who receives a copy of the work also receives whatever\nlicenses to the work the party's predecessor in interest had or could\ngive under the previous paragraph, plus a right to possession of the\nCorresponding Source of the work from the predecessor in interest, if\nthe predecessor has it or can get it with reasonable efforts.\n\n  You may not impose any further restrictions on the exercise of the\nrights granted or affirmed under this License.  For example, you may\nnot impose a license fee, royalty, or other charge for exercise of\nrights granted under this License, and you may not initiate litigation\n(including a cross-claim or counterclaim in a lawsuit) alleging that\nany patent claim is infringed by making, using, selling, offering for\nsale, or importing the Program or any portion of it.\n\n  11. Patents.\n\n  A \"contributor\" is a copyright holder who authorizes use under this\nLicense of the Program or a work on which the Program is based.  The\nwork thus licensed is called the contributor's \"contributor version\".\n\n  A contributor's \"essential patent claims\" are all patent claims\nowned or controlled by the contributor, whether already acquired or\nhereafter acquired, that would be infringed by some manner, permitted\nby this License, of making, using, or selling its contributor version,\nbut do not include claims that would be infringed only as a\nconsequence of further modification of the contributor version.  For\npurposes of this definition, \"control\" includes the right to grant\npatent sublicenses in a manner consistent with the requirements of\nthis License.\n\n  Each contributor grants you a non-exclusive, worldwide, royalty-free\npatent license under the contributor's essential patent claims, to\nmake, use, sell, offer for sale, import and otherwise run, modify and\npropagate the contents of its contributor version.\n\n  In the following three paragraphs, a \"patent license\" is any express\nagreement or commitment, however denominated, not to enforce a patent\n(such as an express permission to practice a patent or covenant not to\nsue for patent infringement).  To \"grant\" such a patent license to a\nparty means to make such an agreement or commitment not to enforce a\npatent against the party.\n\n  If you convey a covered work, knowingly relying on a patent license,\nand the Corresponding Source of the work is not available for anyone\nto copy, free of charge and under the terms of this License, through a\npublicly available network server or other readily accessible means,\nthen you must either (1) cause the Corresponding Source to be so\navailable, or (2) arrange to deprive yourself of the benefit of the\npatent license for this particular work, or (3) arrange, in a manner\nconsistent with the requirements of this License, to extend the patent\nlicense to downstream recipients.  \"Knowingly relying\" means you have\nactual knowledge that, but for the patent license, your conveying the\ncovered work in a country, or your recipient's use of the covered work\nin a country, would infringe one or more identifiable patents in that\ncountry that you have reason to believe are valid.\n\n  If, pursuant to or in connection with a single transaction or\narrangement, you convey, or propagate by procuring conveyance of, a\ncovered work, and grant a patent license to some of the parties\nreceiving the covered work authorizing them to use, propagate, modify\nor convey a specific copy of the covered work, then the patent license\nyou grant is automatically extended to all recipients of the covered\nwork and works based on it.\n\n  A patent license is \"discriminatory\" if it does not include within\nthe scope of its coverage, prohibits the exercise of, or is\nconditioned on the non-exercise of one or more of the rights that are\nspecifically granted under this License.  You may not convey a covered\nwork if you are a party to an arrangement with a third party that is\nin the business of distributing software, under which you make payment\nto the third party based on the extent of your activity of conveying\nthe work, and under which the third party grants, to any of the\nparties who would receive the covered work from you, a discriminatory\npatent license (a) in connection with copies of the covered work\nconveyed by you (or copies made from those copies), or (b) primarily\nfor and in connection with specific products or compilations that\ncontain the covered work, unless you entered into that arrangement,\nor that patent license was granted, prior to 28 March 2007.\n\n  Nothing in this License shall be construed as excluding or limiting\nany implied license or other defenses to infringement that may\notherwise be available to you under applicable patent law.\n\n  12. No Surrender of Others' Freedom.\n\n  If conditions are imposed on you (whether by court order, agreement or\notherwise) that contradict the conditions of this License, they do not\nexcuse you from the conditions of this License.  If you cannot convey a\ncovered work so as to satisfy simultaneously your obligations under this\nLicense and any other pertinent obligations, then as a consequence you may\nnot convey it at all.  For example, if you agree to terms that obligate you\nto collect a royalty for further conveying from those to whom you convey\nthe Program, the only way you could satisfy both those terms and this\nLicense would be to refrain entirely from conveying the Program.\n\n  13. Use with the GNU Affero General Public License.\n\n  Notwithstanding any other provision of this License, you have\npermission to link or combine any covered work with a work licensed\nunder version 3 of the GNU Affero General Public License into a single\ncombined work, and to convey the resulting work.  The terms of this\nLicense will continue to apply to the part which is the covered work,\nbut the special requirements of the GNU Affero General Public License,\nsection 13, concerning interaction through a network will apply to the\ncombination as such.\n\n  14. Revised Versions of this License.\n\n  The Free Software Foundation may publish revised and/or new versions of\nthe GNU General Public License from time to time.  Such new versions will\nbe similar in spirit to the present version, but may differ in detail to\naddress new problems or concerns.\n\n  Each version is given a distinguishing version number.  If the\nProgram specifies that a certain numbered version of the GNU General\nPublic License \"or any later version\" applies to it, you have the\noption of following the terms and conditions either of that numbered\nversion or of any later version published by the Free Software\nFoundation.  If the Program does not specify a version number of the\nGNU General Public License, you may choose any version ever published\nby the Free Software Foundation.\n\n  If the Program specifies that a proxy can decide which future\nversions of the GNU General Public License can be used, that proxy's\npublic statement of acceptance of a version permanently authorizes you\nto choose that version for the Program.\n\n  Later license versions may give you additional or different\npermissions.  However, no additional obligations are imposed on any\nauthor or copyright holder as a result of your choosing to follow a\nlater version.\n\n  15. Disclaimer of Warranty.\n\n  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY\nAPPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT\nHOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM \"AS IS\" WITHOUT WARRANTY\nOF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,\nTHE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\nPURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM\nIS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF\nALL NECESSARY SERVICING, REPAIR OR CORRECTION.\n\n  16. Limitation of Liability.\n\n  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING\nWILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS\nTHE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY\nGENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE\nUSE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF\nDATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD\nPARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),\nEVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF\nSUCH DAMAGES.\n\n  17. Interpretation of Sections 15 and 16.\n\n  If the disclaimer of warranty and limitation of liability provided\nabove cannot be given local legal effect according to their terms,\nreviewing courts shall apply local law that most closely approximates\nan absolute waiver of all civil liability in connection with the\nProgram, unless a warranty or assumption of liability accompanies a\ncopy of the Program in return for a fee.\n\n                     END OF TERMS AND CONDITIONS\n\n            How to Apply These Terms to Your New Programs\n\n  If you develop a new program, and you want it to be of the greatest\npossible use to the public, the best way to achieve this is to make it\nfree software which everyone can redistribute and change under these terms.\n\n  To do so, attach the following notices to the program.  It is safest\nto attach them to the start of each source file to most effectively\nstate the exclusion of warranty; and each file should have at least\nthe \"copyright\" line and a pointer to where the full notice is found.\n\n    <one line to give the program's name and a brief idea of what it does.>\n    Copyright (C) <year>  <name of author>\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <http://www.gnu.org/licenses/>.\n\nAlso add information on how to contact you by electronic and paper mail.\n\n  If the program does terminal interaction, make it output a short\nnotice like this when it starts in an interactive mode:\n\n    <program>  Copyright (C) <year>  <name of author>\n    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.\n    This is free software, and you are welcome to redistribute it\n    under certain conditions; type `show c' for details.\n\nThe hypothetical commands `show w' and `show c' should show the appropriate\nparts of the General Public License.  Of course, your program's commands\nmight be different; for a GUI interface, you would use an \"about box\".\n\n  You should also get your employer (if you work as a programmer) or school,\nif any, to sign a \"copyright disclaimer\" for the program, if necessary.\nFor more information on this, and how to apply and follow the GNU GPL, see\n<http://www.gnu.org/licenses/>.\n\n  The GNU General Public License does not permit incorporating your program\ninto proprietary programs.  If your program is a subroutine library, you\nmay consider it more useful to permit linking proprietary applications with\nthe library.  If this is what you want to do, use the GNU Lesser General\nPublic License instead of this License.  But first, please read\n<http://www.gnu.org/philosophy/why-not-lgpl.html>.\n"
  },
  {
    "path": "README.md",
    "content": "<img align=\"left\" width=\"80\" height=\"80\" src=\"metadata/en-US/images/icon.png\"\nalt=\"App icon\">\n\n# Aegis Authenticator\n\n<br>\n\n[![Build](https://github.com/beemdevelopment/Aegis/actions/workflows/build-app-workflow.yaml/badge.svg)](https://github.com/beemdevelopment/Aegis/actions/workflows/build-app-workflow.yaml?query=branch%3Amaster) [![Crowdin](https://badges.crowdin.net/aegis-authenticator/localized.svg)](https://crowdin.com/project/aegis-authenticator) [![Donate](https://img.shields.io/badge/donate-buy%20us%20a%20beer-%23FF813F)](https://www.buymeacoffee.com/beemdevelopment) [![Matrix](https://img.shields.io/matrix/aegis:matrix.org?color=blue)](https://matrix.to/#/#aegis:matrix.org)\n\n**Aegis Authenticator** is a free, secure and open source 2FA app for Android.\nIt aims to provide a secure authenticator for your online services, while also\nincluding some features missing in existing authenticator apps, like proper\nencryption and backups. Aegis supports HOTP and TOTP, making it compatible with\nthousands of services.\n\nFor a list of frequently asked questions, please check out [the FAQ](FAQ.md).\n\nThe security design of the app and the vault format is described in detail in\n[this document](docs/vault.md).\n\n## Features\n\n- Free and open source\n- Secure\n  - The vault is encrypted (AES-256-GCM), and can be unlocked with:\n    - Password (scrypt)\n    - Biometrics (Android Keystore)\n  - Screen capture prevention\n  - Tap to reveal\n- Compatible with Google Authenticator\n- Supports industry standard algorithms:\n  [HOTP](https://tools.ietf.org/html/rfc4226) and\n  [TOTP](https://tools.ietf.org/html/rfc6238)\n- Lots of ways to add new entries\n  - Scan a QR code or an image of one\n  - Enter details manually\n  - Import from other authenticator apps: 2FAS Authenticator, Authenticator\n    Plus, Authy, andOTP, FreeOTP, FreeOTP+, Google Authenticator, Microsoft\n    Authenticator, Plain text, Steam, TOTP Authenticator and WinAuth (root\n    access is required for some of these)\n- Organization\n  - Alphabetic/custom sorting\n  - Custom or automatically generated icons\n  - Group entries together\n  - Advanced entry editing\n  - Search by name/issuer\n- Material design with multiple themes: Light, Dark, AMOLED\n- Export (plaintext or encrypted)\n- Automatic backups of the vault to a location of your choosing\n\n## Screenshots\n\n[<img width=200 alt=\"Screenshot 1\"\nsrc=\"metadata/en-US/images/phoneScreenshots/screenshot1.png?raw=true\">](metadata/en-US/images/phoneScreenshots/screenshot1.png?raw=true)\n[<img width=200 alt=\"Screenshot 2\"\nsrc=\"metadata/en-US/images/phoneScreenshots/screenshot2.png?raw=true\">](metadata/en-US/images/phoneScreenshots/screenshot2.png?raw=true)\n[<img width=200 alt=\"Screenshot 3\"\nsrc=\"metadata/en-US/images/phoneScreenshots/screenshot3.png?raw=true\">](metadata/en-US/images/phoneScreenshots/screenshot3.png?raw=true)\n[<img width=200 alt=\"Screenshot 4\"\nsrc=\"metadata/en-US/images/phoneScreenshots/screenshot4.png?raw=true\">](metadata/en-US/images/phoneScreenshots/screenshot4.png?raw=true)\n\n[<img width=200 alt=\"Screenshot 5\"\nsrc=\"metadata/en-US/images/phoneScreenshots/screenshot5.png?raw=true\">](metadata/en-US/images/phoneScreenshots/screenshot5.png?raw=true)\n[<img width=200 alt=\"Screenshot 6\"\nsrc=\"metadata/en-US/images/phoneScreenshots/screenshot6.png?raw=true\">](metadata/en-US/images/phoneScreenshots/screenshot6.png?raw=true)\n[<img width=200 alt=\"Screenshot 7\"\nsrc=\"metadata/en-US/images/phoneScreenshots/screenshot7.png?raw=true\">](metadata/en-US/images/phoneScreenshots/screenshot7.png?raw=true)\n[<img width=200 alt=\"Screenshot 8\"\nsrc=\"metadata/en-US/images/phoneScreenshots/screenshot8.png?raw=true\">](metadata/en-US/images/phoneScreenshots/screenshot8.png?raw=true)\n\n## Downloads\n\nAegis is available on the Google Play Store and on F-Droid.\n\n[<img height=80 alt=\"Get it on Google Play\"\nsrc=\"https://play.google.com/intl/en_us/badges/images/generic/en-play-badge.png\"\n/>](http://play.google.com/store/apps/details?id=com.beemdevelopment.aegis)\n[<img height=\"80\" alt=\"Get it on F-Droid\"\nsrc=\"https://fdroid.gitlab.io/artwork/badge/get-it-on.png\"\n/>](https://f-droid.org/app/com.beemdevelopment.aegis)\n\n### Verification\n\nAPK releases on Google Play and GitHub are signed using the same key. They can\nbe verified using\n[apksigner](https://developer.android.com/studio/command-line/apksigner.html#options-verify):\n\n```\napksigner verify --print-certs --verbose aegis.apk\n```\n\nThe output should look like:\n\n```\nVerifies\nVerified using v1 scheme (JAR signing): true\nVerified using v2 scheme (APK Signature Scheme v2): true\n```\n\nThe certificate fingerprints should correspond to the ones listed below:\n\n```\nOwner: CN=Beem Development\nIssuer: CN=Beem Development\nSerial number: 172380c\nValid from: Sat Feb 09 14:05:49 CET 2019 until: Wed Feb 03 14:05:49 CET 2044\nCertificate fingerprints:\n   MD5:  AA:EE:86:DB:C7:B8:88:9F:1F:C9:D0:7A:EC:37:36:32\n   SHA1: 59:FB:63:B7:1F:CE:95:74:6C:EB:1E:1A:CB:2C:2E:45:E5:FF:13:50\n   SHA256: C6:DB:80:A8:E1:4E:52:30:C1:DE:84:15:EF:82:0D:13:DC:90:1D:8F:E3:3C:F3:AC:B5:7B:68:62:D8:58:A8:23\n```\n\n### Icon packs\n\nAegis supports icon packs to make it easier to assign icons to the entries in\nyour vault. There are no official icon packs, but the community maintains a\nnumber of third-party icon packs you may want to check out. To learn how to\ncreate your own Aegis-compatible icon pack, see [the\ndocumentation](docs/iconpacks.md).\n\n- [aegis-icons](https://github.com/aegis-icons/aegis-icons)\n\n  Unofficial monochrome-styled 2FA icons.\n\n  [<img width=500 alt=\"aegis-icons preview\"\n  src=\"metadata/en-US/images/iconPacks/aegis-icons.png\">](https://github.com/aegis-icons/aegis-icons)\n\n- [delta-aegis-icons](https://github.com/Delta-Icons/aegis-icons)\n\n  Delta version of the unofficial monochrome-styled 2FA icon pack aegis-icons.\n\n  [<img width=500 alt=\"delta-icons preview\"\n  src=\"metadata/en-US/images/iconPacks/delta-icons.png\">](https://github.com/Delta-Icons/aegis-icons)\n\n- [aegis-simple-icons](https://github.com/alexbakker/aegis-simple-icons) \\*\n\n  This project periodically generates an icon pack for Aegis based on [Simple\n  Icons](https://simpleicons.org/).\n\n  [<img width=500 alt=\"aegis-simple-icons preview\"\n  src=\"metadata/en-US/images/iconPacks/aegis-simple-icons.png\">](https://github.com/alexbakker/aegis-simple-icons)\n\n- [aegis-simple-icons-outlined](https://github.com/michaelschattgen/aegis-simple-icons-outlined) \\*\n\n  This is a variant on the aegis-simple-icons pack where the icons contain no solid background and just the outlines are being used.\n\n  [<img width=500 alt=\"aegis-simple-icons-outlined preview\"\n  src=\"metadata/en-US/images/iconPacks/aegis-simple-icons-outlined.png\">](https://github.com/michaelschattgen/aegis-simple-icons-outlined)\n\n\\* The icons are automatically generated, so\nnot all of them are as high quality as the ones you'll find in\n[aegis-icons](https://github.com/aegis-icons/aegis-icons).\n\n## Contributing\n\nLooking to contribute to Aegis? That's great! There are a couple of ways to help\nout. Translations, bug reports and pull requests are all greatly appreciated.\nPlease refer to our [contributing guidelines](CONTRIBUTING.md) to get started.\n\nSwing by our Matrix room to interact with other contributors:\n[#aegis:matrix.org](https://matrix.to/#/#aegis:matrix.org).\n\n## License\n\nThis project is licensed under the GNU General Public License v3.0. See the\n[LICENSE](LICENSE) file for details.\n\nA couple of libraries vendored in Aegis' repository are licensed under a\ndifferent license:\n\n- [TextDrawable](app/src/main/java/com/amulyakhare/textdrawable)\n- [TrustedIntents](app/src/main/java/info/guardianproject/trustedintents)\n"
  },
  {
    "path": "app/.gitignore",
    "content": "/build\n"
  },
  {
    "path": "app/build.gradle",
    "content": "apply plugin: 'com.android.application'\napply plugin: 'com.google.protobuf'\napply plugin: 'dagger.hilt.android.plugin'\napply plugin: 'com.mikepenz.aboutlibraries.plugin'\n\ndef getCmdOutput = { cmd ->\n    def stdout = new ByteArrayOutputStream()\n    exec {\n        commandLine cmd\n        standardOutput = stdout\n    }\n    return stdout.toString().trim()\n}\n\ndef getGitHash = { -> return getCmdOutput([\"git\", \"rev-parse\", \"--short\", \"HEAD\"]) }\ndef getGitBranch = { -> return getCmdOutput([\"git\", \"rev-parse\", \"--abbrev-ref\", \"HEAD\"]) }\n\ndef packageName = \"com.beemdevelopment.aegis\"\ndef fileProviderAuthority = \"${packageName}.fileprovider\"\ndef fileProviderAuthorityDebug = \"${packageName}.debug.fileprovider\"\n\nandroid {\n    compileSdk 35\n\n    namespace packageName\n\n    defaultConfig {\n        applicationId \"${packageName}\"\n        minSdkVersion 23\n        targetSdkVersion 35\n        versionCode 81\n        versionName \"3.4.2\"\n        multiDexEnabled true\n        buildConfigField \"String\", \"GIT_HASH\", \"\\\"${getGitHash()}\\\"\"\n        buildConfigField \"String\", \"GIT_BRANCH\", \"\\\"${getGitBranch()}\\\"\"\n        buildConfigField \"java.util.concurrent.atomic.AtomicBoolean\", \"TEST\", \"new java.util.concurrent.atomic.AtomicBoolean(false)\"\n\n        javaCompileOptions {\n            annotationProcessorOptions {\n                arguments = [\"room.schemaLocation\": \"$projectDir/schemas\"]\n            }\n        }\n\n        testInstrumentationRunner \"com.beemdevelopment.aegis.AegisTestRunner\"\n        testInstrumentationRunnerArguments clearPackageData: 'true'\n    }\n\n    testOptions {\n        execution 'ANDROIDX_TEST_ORCHESTRATOR'\n\n        unitTests {\n            all {\n                maxHeapSize \"3g\"\n\n                ignoreFailures false\n                testLogging {\n                    events \"passed\", \"skipped\", \"failed\", \"standardOut\", \"standardError\"\n\n                    showExceptions true\n                    exceptionFormat \"full\"\n                    showCauses true\n                    showStackTraces true\n                }\n            }\n\n            includeAndroidResources true\n        }\n    }\n\n    buildTypes {\n        debug {\n            applicationIdSuffix \".debug\"\n            manifestPlaceholders = [\n                title: \"AegisDev\",\n                iconName: \"ic_launcher_debug\",\n                fileProviderAuthority: \"${fileProviderAuthorityDebug}\"\n            ]\n            buildConfigField(\"String\", \"FILE_PROVIDER_AUTHORITY\", \"\\\"${fileProviderAuthorityDebug}\\\"\")\n            resValue \"bool\", \"pref_secure_screen_default\", \"false\"\n        }\n        release {\n            manifestPlaceholders = [\n                title: \"Aegis\",\n                iconName: \"ic_launcher\",\n                fileProviderAuthority: \"${fileProviderAuthority}\"\n            ]\n            buildConfigField(\"String\", \"FILE_PROVIDER_AUTHORITY\", \"\\\"${fileProviderAuthority}\\\"\")\n            resValue \"bool\", \"pref_secure_screen_default\", \"true\"\n\n            minifyEnabled true\n            shrinkResources true\n            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'\n        }\n    }\n\n    // Required to make the APK reproducible\n    aaptOptions {\n        cruncherEnabled = false\n    }\n    defaultConfig {\n        vectorDrawables.generatedDensities = []\n    }\n\n    packagingOptions {\n        // R8 doesn't remove these resources, so exclude them manually. This reduces APK size by 4MB.\n        resources {\n            excludes += [\n                    '/org/bouncycastle/pqc/**/*.properties',\n                    'META-INF/versions/9/OSGI-INF/MANIFEST.MF'\n            ]\n        }\n    }\n\n    compileOptions {\n        targetCompatibility JavaVersion.VERSION_17\n        sourceCompatibility JavaVersion.VERSION_17\n        coreLibraryDesugaringEnabled true\n    }\n    lint {\n        abortOnError true\n        checkDependencies true\n    }\n    buildFeatures {\n        buildConfig true\n    }\n}\n\nprotobuf {\n    protoc {\n        artifact = 'com.google.protobuf:protoc:3.25.1'\n    }\n    generateProtoTasks {\n        all().each { task ->\n            task.builtins {\n                java {\n                    option \"lite\"\n                }\n            }\n        }\n    }\n}\n\naboutLibraries {\n    // Tasks for aboutLibraries are not run automatically to keep the build reproducible\n    // To update manually: ./gradlew app:exportLibraryDefinitions -PaboutLibraries.exportPath=src/main/res/raw\n    prettyPrint = true\n    configPath = \"app/config\"\n    fetchRemoteFunding = false\n    registerAndroidTasks = false\n    exclusionPatterns = [~\"javax.annotation.*\"]\n    duplicationMode = com.mikepenz.aboutlibraries.plugin.DuplicateMode.MERGE\n}\n\ndependencies {\n    def cameraxVersion = '1.4.2'\n    def glideVersion = '4.16.0'\n    def guavaVersion = '33.4.8'\n    def hiltVersion = '2.56.2'\n    def junitVersion = '4.13.2'\n    def libsuVersion = '6.0.0'\n    def roomVersion = '2.7.1'\n\n    annotationProcessor 'androidx.annotation:annotation:1.9.1'\n    annotationProcessor \"androidx.room:room-compiler:$roomVersion\"\n    annotationProcessor \"com.google.dagger:hilt-compiler:$hiltVersion\"\n    annotationProcessor \"com.github.bumptech.glide:compiler:${glideVersion}\"\n\n    implementation fileTree(dir: 'libs', include: ['*.jar'])\n    implementation 'androidx.activity:activity:1.10.1'\n    implementation 'androidx.appcompat:appcompat:1.7.0'\n    implementation \"androidx.biometric:biometric:1.1.0\"\n    implementation \"androidx.camera:camera-camera2:$cameraxVersion\"\n    implementation \"androidx.camera:camera-lifecycle:$cameraxVersion\"\n    implementation \"androidx.camera:camera-view:$cameraxVersion\"\n    implementation 'androidx.core:core:1.16.0'\n    implementation 'androidx.constraintlayout:constraintlayout:2.2.1'\n    implementation 'androidx.documentfile:documentfile:1.1.0'\n    implementation 'androidx.lifecycle:lifecycle-process:2.9.0'\n    implementation \"androidx.preference:preference:1.2.1\"\n    implementation 'androidx.recyclerview:recyclerview:1.4.0'\n    implementation \"androidx.room:room-runtime:$roomVersion\"\n    implementation 'androidx.viewpager2:viewpager2:1.1.0'\n    implementation 'com.caverock:androidsvg-aar:1.4'\n    implementation \"com.google.dagger:hilt-android:$hiltVersion\"\n    implementation 'com.github.avito-tech:krop:0.52'\n    implementation \"com.github.bumptech.glide:annotations:${glideVersion}\"\n    implementation \"com.github.bumptech.glide:glide:${glideVersion}\"\n    implementation(\"com.github.bumptech.glide:recyclerview-integration:${glideVersion}\") {\n        transitive = false\n    }\n    implementation \"com.github.topjohnwu.libsu:core:${libsuVersion}\"\n    implementation \"com.github.topjohnwu.libsu:io:${libsuVersion}\"\n    implementation \"com.google.guava:guava:${guavaVersion}-android\"\n    implementation 'com.google.android.material:material:1.12.0'\n    implementation 'com.google.protobuf:protobuf-javalite:4.31.0'\n    implementation 'com.google.zxing:core:3.5.3'\n    implementation('com.mikepenz:aboutlibraries:11.2.3') {\n        exclude group: 'com.mikepenz', module: 'aboutlibraries-core'\n    }\n    implementation 'com.mikepenz:aboutlibraries-core-android:11.2.3'\n    implementation 'com.nulab-inc:zxcvbn:1.9.0'\n    implementation 'net.lingala.zip4j:zip4j:2.11.5'\n    implementation 'org.bouncycastle:bcprov-jdk18on:1.80'\n    implementation 'org.simpleflatmapper:sfm-csv:8.2.3'\n\n    androidTestAnnotationProcessor \"com.google.dagger:hilt-android-compiler:$hiltVersion\"\n    androidTestImplementation \"com.google.dagger:hilt-android-testing:$hiltVersion\"\n    androidTestImplementation 'androidx.test:core:1.6.1'\n    androidTestImplementation 'androidx.test:runner:1.6.2'\n    androidTestImplementation 'androidx.test:rules:1.6.1'\n    androidTestImplementation 'androidx.test.ext:junit:1.2.1'\n    androidTestImplementation 'androidx.test.espresso:espresso-core:3.6.1'\n    androidTestImplementation 'androidx.test.espresso:espresso-contrib:3.6.1'\n    androidTestImplementation 'androidx.test.espresso:espresso-intents:3.6.1'\n    androidTestImplementation \"junit:junit:${junitVersion}\"\n    androidTestUtil 'androidx.test:orchestrator:1.5.1'\n\n    testImplementation 'androidx.test:core:1.6.1'\n    testImplementation \"com.google.guava:guava:${guavaVersion}-jre\"\n    testImplementation \"junit:junit:${junitVersion}\"\n    testImplementation 'org.json:json:20250517'\n    testImplementation 'org.robolectric:robolectric:4.14.1'\n\n    coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:2.1.5'\n}\n"
  },
  {
    "path": "app/config/libraries/krop.json",
    "content": "{\n    \"uniqueId\": \"com.github.avito-tech:krop\",\n    \"licenses\": [\n        \"MIT\"\n    ]\n}"
  },
  {
    "path": "app/config/libraries/libsu.json",
    "content": "{\n    \"uniqueId\": \"com.github.topjohnwu.libsu:.*::regex\",\n    \"licenses\": [\n        \"Apache-2.0\"\n    ]\n}"
  },
  {
    "path": "app/config/libraries/textdrawable.json",
    "content": "{\n    \"uniqueId\": \"com.amulyakhare:com.amulyakhare.textdrawable\",\n    \"funding\": [\n        \n    ],\n    \"developers\": [\n        \n    ],\n    \"artifactVersion\": \"1.0.1\",\n    \"description\": \"This light-weight library provides images with letter/text like the Gmail app. It extends the Drawable class thus can be used with existing/custom/network ImageView classes. Also included is a fluent interface for creating drawables and a customizable ColorGenerator.\",\n    \"name\": \"textdrawable\",\n    \"licenses\": [\n        \"MIT\"\n    ]\n}"
  },
  {
    "path": "app/config/libraries/trustedintents.json",
    "content": "{\n    \"uniqueId\": \"info.guardianproject.trustedintents:trustedintents\",\n    \"funding\": [\n        \n    ],\n    \"developers\": [\n        {\n            \"name\": \"Guardian Project\"\n        }\n    ],\n    \"artifactVersion\": \"0.2\",\n    \"description\": \"TrustedIntents is a library for flexible trusted interactions between Android apps.  It is modeled after Android's `signature` protection level for permissions.  The key difference is that the framework allows the trusted signature to be set, rather than requiring to match the current app's signature.\",\n    \"scm\": {\n        \"connection\": \"scm:https://github.com/guardianproject/TrustedIntents.git\",\n        \"url\": \"scm:https://github.com/guardianproject/TrustedIntents\",\n        \"developerConnection\": \"scm:git@github.com:guardianproject/TrustedIntents.git\"\n    },\n    \"name\": \"TrustedIntents\",\n    \"website\": \"https://guardianproject.info/code/trustedintents\",\n    \"licenses\": [\n        \"3ca920d1875f7ad7ab04a2a331958577\"\n    ]\n}"
  },
  {
    "path": "app/config/licenses/3ca920d1875f7ad7ab04a2a331958577.json",
    "content": "{\n    \"hash\": \"3ca920d1875f7ad7ab04a2a331958577\",\n    \"url\": \"https://github.com/guardianproject/TrustedIntents/blob/master/LICENSE.txt\",\n    \"name\": \"LGPLv2.1\"\n}"
  },
  {
    "path": "app/lint.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<lint>\n    <issue id=\"MissingTranslation\" severity=\"ignore\" />\n    <issue id=\"MissingQuantity\" severity=\"ignore\" />\n    <issue id=\"InvalidPackage\">\n        <ignore regexp=\"X509LDAPCertStoreSpi\" />\n    </issue>\n    <issue id=\"NotificationPermission\">\n        <ignore regexp=\"com.bumptech.glide.request.target.NotificationTarget\" />\n    </issue>\n    <issue id=\"UnusedResources\" severity=\"error\">\n        <ignore path=\"res/raw/aboutlibraries.json\" />\n        <ignore regexp=\"res/mipmap.*/ic_launcher_debug.*.png\" />\n    </issue>\n</lint>\n"
  },
  {
    "path": "app/proguard-rules.pro",
    "content": "-keepattributes LineNumberTable,SourceFile\n-renamesourcefileattribute SourceFile\n-dontobfuscate\n\n-keepclasseswithmembers public class androidx.recyclerview.widget.RecyclerView { *; }\n-keep class com.beemdevelopment.aegis.ui.fragments.preferences.*\n-keep class com.beemdevelopment.aegis.importers.** { *; }\n-keep class * extends com.google.protobuf.GeneratedMessageLite { *; }\n\n-dontwarn javax.naming.**\n"
  },
  {
    "path": "app/schemas/com.beemdevelopment.aegis.database.AppDatabase/1.json",
    "content": "{\n  \"formatVersion\": 1,\n  \"database\": {\n    \"version\": 1,\n    \"identityHash\": \"392278bdb797d013cb2ada67a3b1cc60\",\n    \"entities\": [\n      {\n        \"tableName\": \"audit_logs\",\n        \"createSql\": \"CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `event_type` TEXT NOT NULL, `reference` TEXT, `timestamp` INTEGER NOT NULL)\",\n        \"fields\": [\n          {\n            \"fieldPath\": \"id\",\n            \"columnName\": \"id\",\n            \"affinity\": \"INTEGER\",\n            \"notNull\": true\n          },\n          {\n            \"fieldPath\": \"_eventType\",\n            \"columnName\": \"event_type\",\n            \"affinity\": \"TEXT\",\n            \"notNull\": true\n          },\n          {\n            \"fieldPath\": \"_reference\",\n            \"columnName\": \"reference\",\n            \"affinity\": \"TEXT\",\n            \"notNull\": false\n          },\n          {\n            \"fieldPath\": \"_timestamp\",\n            \"columnName\": \"timestamp\",\n            \"affinity\": \"INTEGER\",\n            \"notNull\": true\n          }\n        ],\n        \"primaryKey\": {\n          \"autoGenerate\": true,\n          \"columnNames\": [\n            \"id\"\n          ]\n        },\n        \"indices\": [],\n        \"foreignKeys\": []\n      }\n    ],\n    \"views\": [],\n    \"setupQueries\": [\n      \"CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)\",\n      \"INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, '392278bdb797d013cb2ada67a3b1cc60')\"\n    ]\n  }\n}"
  },
  {
    "path": "app/src/androidTest/java/com/beemdevelopment/aegis/AegisTest.java",
    "content": "package com.beemdevelopment.aegis;\n\nimport android.view.View;\n\nimport androidx.annotation.NonNull;\nimport androidx.annotation.Nullable;\nimport androidx.recyclerview.widget.RecyclerView;\nimport androidx.test.espresso.UiController;\nimport androidx.test.espresso.ViewAction;\nimport androidx.test.espresso.matcher.BoundedMatcher;\nimport androidx.test.platform.app.InstrumentationRegistry;\nimport androidx.test.rule.GrantPermissionRule;\n\nimport com.beemdevelopment.aegis.crypto.CryptoUtils;\nimport com.beemdevelopment.aegis.crypto.SCryptParameters;\nimport com.beemdevelopment.aegis.otp.OtpInfo;\nimport com.beemdevelopment.aegis.ui.views.EntryHolder;\nimport com.beemdevelopment.aegis.vault.VaultEntry;\nimport com.beemdevelopment.aegis.vault.VaultFileCredentials;\nimport com.beemdevelopment.aegis.vault.VaultManager;\nimport com.beemdevelopment.aegis.vault.VaultRepository;\nimport com.beemdevelopment.aegis.vault.VaultRepositoryException;\nimport com.beemdevelopment.aegis.vault.slots.PasswordSlot;\nimport com.beemdevelopment.aegis.vault.slots.SlotException;\nimport com.beemdevelopment.aegis.vectors.VaultEntries;\n\nimport org.hamcrest.Description;\nimport org.hamcrest.Matcher;\nimport org.junit.Before;\nimport org.junit.Rule;\n\nimport java.lang.reflect.InvocationTargetException;\nimport java.security.InvalidAlgorithmParameterException;\nimport java.security.InvalidKeyException;\nimport java.security.NoSuchAlgorithmException;\nimport java.util.ArrayList;\nimport java.util.List;\n\nimport javax.crypto.NoSuchPaddingException;\nimport javax.crypto.SecretKey;\nimport javax.inject.Inject;\n\nimport dagger.hilt.android.testing.HiltAndroidRule;\n\npublic abstract class AegisTest {\n    public static final String VAULT_PASSWORD = \"test\";\n    public static final String VAULT_PASSWORD_CHANGED = \"test2\";\n    public static final String VAULT_BACKUP_PASSWORD = \"something\";\n    public static final String VAULT_BACKUP_PASSWORD_CHANGED = \"something2\";\n\n    @Rule\n    public HiltAndroidRule hiltRule = new HiltAndroidRule(this);\n\n    @Rule\n    public final GrantPermissionRule permRule = getGrantPermissionRule();\n\n    @Inject\n    protected VaultManager _vaultManager;\n\n    @Inject\n    protected Preferences _prefs;\n\n    @Before\n    public void init() {\n        hiltRule.inject();\n    }\n\n    private static GrantPermissionRule getGrantPermissionRule() {\n        List<String> perms = new ArrayList<>();\n        // NOTE: Disabled for now. See issue: #1047\n        /*if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {\n            perms.add(Manifest.permission.POST_NOTIFICATIONS);\n        }*/\n        return GrantPermissionRule.grant(perms.toArray(new String[0]));\n    }\n\n    protected AegisApplicationBase getApp() {\n        return (AegisApplicationBase) InstrumentationRegistry.getInstrumentation().getTargetContext().getApplicationContext();\n    }\n\n    protected VaultRepository initEncryptedVault() {\n        VaultFileCredentials creds = generateCredentials();\n        return initVault(creds, VaultEntries.get());\n    }\n\n    protected VaultRepository initEmptyEncryptedVault() {\n        VaultFileCredentials creds = generateCredentials();\n        return initVault(creds, null);\n    }\n\n    protected VaultRepository initPlainVault() {\n        return initVault(null, VaultEntries.get());\n    }\n\n    protected VaultRepository initEmptyPlainVault() {\n        return initVault(null, null);\n    }\n\n    private VaultRepository initVault(@Nullable VaultFileCredentials creds, @Nullable List<VaultEntry> entries) {\n        VaultRepository vault;\n        try {\n            vault = _vaultManager.initNew(creds);\n        } catch (VaultRepositoryException e) {\n            throw new RuntimeException(e);\n        }\n\n        if (entries != null) {\n            for (VaultEntry entry : entries) {\n                _vaultManager.getVault().addEntry(entry);\n            }\n        }\n\n        try {\n            _vaultManager.save();\n        } catch (VaultRepositoryException e) {\n            throw new RuntimeException(e);\n        }\n\n        _prefs.setIntroDone(true);\n        return vault;\n    }\n\n    protected VaultFileCredentials generateCredentials() {\n        PasswordSlot slot = new PasswordSlot();\n        byte[] salt = CryptoUtils.generateSalt();\n        SCryptParameters scryptParams = new SCryptParameters(\n                CryptoUtils.CRYPTO_SCRYPT_N,\n                CryptoUtils.CRYPTO_SCRYPT_r,\n                CryptoUtils.CRYPTO_SCRYPT_p,\n                salt\n        );\n\n        VaultFileCredentials creds = new VaultFileCredentials();\n        try {\n            SecretKey key = slot.deriveKey(VAULT_PASSWORD.toCharArray(), scryptParams);\n            slot.setKey(creds.getKey(), CryptoUtils.createEncryptCipher(key));\n        } catch (NoSuchAlgorithmException\n                | InvalidKeyException\n                | InvalidAlgorithmParameterException\n                | NoSuchPaddingException\n                | SlotException e) {\n            throw new RuntimeException(e);\n        }\n\n        creds.getSlots().add(slot);\n        return creds;\n    }\n\n    protected static <T extends OtpInfo> VaultEntry generateEntry(Class<T> type, String name, String issuer) {\n        return generateEntry(type, name, issuer, 20);\n    }\n\n    protected static <T extends OtpInfo> VaultEntry generateEntry(Class<T> type, String name, String issuer, int secretLength) {\n        byte[] secret = CryptoUtils.generateRandomBytes(secretLength);\n\n        OtpInfo info;\n        try {\n            info = type.getConstructor(byte[].class).newInstance(secret);\n        } catch (IllegalAccessException | InstantiationException | InvocationTargetException | NoSuchMethodException e) {\n            throw new RuntimeException(e);\n        }\n\n        return new VaultEntry(info, name, issuer);\n    }\n\n    // source: https://stackoverflow.com/a/30338665\n    protected static ViewAction clickChildViewWithId(final int id) {\n        return new ViewAction() {\n            @Override\n            public Matcher<View> getConstraints() {\n                return null;\n            }\n\n            @Override\n            public String getDescription() {\n                return \"Click on a child view with specified id.\";\n            }\n\n            @Override\n            public void perform(UiController uiController, View view) {\n                View v = view.findViewById(id);\n                v.performClick();\n            }\n        };\n    }\n\n    @NonNull\n    protected static Matcher<RecyclerView.ViewHolder> withOtpType(Class<? extends OtpInfo> otpClass) {\n        return new BoundedMatcher<RecyclerView.ViewHolder, EntryHolder>(EntryHolder.class) {\n            @Override\n            public boolean matchesSafely(EntryHolder holder) {\n                return holder != null\n                        && holder.getEntry() != null\n                        && holder.getEntry().getInfo().getClass().equals(otpClass);\n            }\n\n            @Override\n            public void describeTo(Description description) {\n                description.appendText(String.format(\"with otp type '%s'\", otpClass.getSimpleName()));\n            }\n        };\n    }\n}\n"
  },
  {
    "path": "app/src/androidTest/java/com/beemdevelopment/aegis/AegisTestApplication.java",
    "content": "package com.beemdevelopment.aegis;\n\nimport dagger.hilt.android.testing.CustomTestApplication;\n\n@CustomTestApplication(AegisApplicationBase.class)\npublic interface AegisTestApplication {\n}\n"
  },
  {
    "path": "app/src/androidTest/java/com/beemdevelopment/aegis/AegisTestRunner.java",
    "content": "package com.beemdevelopment.aegis;\n\nimport android.app.Application;\nimport android.app.Instrumentation;\nimport android.content.Context;\n\nimport androidx.preference.PreferenceManager;\nimport androidx.test.core.app.ApplicationProvider;\nimport androidx.test.runner.AndroidJUnitRunner;\n\nimport com.beemdevelopment.aegis.util.IOUtils;\n\npublic class AegisTestRunner extends AndroidJUnitRunner {\n    static {\n        BuildConfig.TEST.set(true);\n    }\n\n    @Override\n    public Application newApplication(ClassLoader cl, String name, Context context)\n            throws ClassNotFoundException, IllegalAccessException, InstantiationException {\n        return Instrumentation.newApplication(AegisTestApplication_Application.class, context);\n    }\n\n    @Override\n    public void callApplicationOnCreate(Application app) {\n        Context context = app.getApplicationContext();\n\n        // clear internal storage so that there is no vault file\n        IOUtils.clearDirectory(context.getFilesDir(), false);\n\n        // clear preferences so that the intro is started from MainActivity\n        ApplicationProvider.getApplicationContext().getFilesDir();\n        PreferenceManager.getDefaultSharedPreferences(context)\n                .edit()\n                .clear()\n                .apply();\n\n        super.callApplicationOnCreate(app);\n    }\n}\n"
  },
  {
    "path": "app/src/androidTest/java/com/beemdevelopment/aegis/BackupExportTest.java",
    "content": "package com.beemdevelopment.aegis;\n\nimport static androidx.test.espresso.Espresso.onView;\nimport static androidx.test.espresso.action.ViewActions.click;\nimport static androidx.test.espresso.action.ViewActions.closeSoftKeyboard;\nimport static androidx.test.espresso.action.ViewActions.pressBack;\nimport static androidx.test.espresso.action.ViewActions.typeText;\nimport static androidx.test.espresso.intent.Intents.intending;\nimport static androidx.test.espresso.intent.matcher.IntentMatchers.isInternal;\nimport static androidx.test.espresso.matcher.ViewMatchers.hasDescendant;\nimport static androidx.test.espresso.matcher.ViewMatchers.isRoot;\nimport static androidx.test.espresso.matcher.ViewMatchers.withId;\nimport static androidx.test.espresso.matcher.ViewMatchers.withText;\nimport static androidx.test.platform.app.InstrumentationRegistry.getInstrumentation;\nimport static org.hamcrest.Matchers.not;\nimport static org.junit.Assert.assertArrayEquals;\nimport static org.junit.Assert.assertEquals;\nimport static org.junit.Assert.assertThrows;\nimport static org.junit.Assert.assertTrue;\n\nimport android.app.Activity;\nimport android.app.Instrumentation;\nimport android.content.Intent;\nimport android.net.Uri;\n\nimport androidx.annotation.Nullable;\nimport androidx.test.espresso.contrib.RecyclerViewActions;\nimport androidx.test.espresso.intent.Intents;\nimport androidx.test.espresso.matcher.RootMatchers;\nimport androidx.test.ext.junit.rules.ActivityScenarioRule;\nimport androidx.test.ext.junit.runners.AndroidJUnit4;\nimport androidx.test.filters.SmallTest;\n\nimport com.beemdevelopment.aegis.crypto.CryptoUtils;\nimport com.beemdevelopment.aegis.crypto.MasterKey;\nimport com.beemdevelopment.aegis.encoding.Hex;\nimport com.beemdevelopment.aegis.importers.DatabaseImporter;\nimport com.beemdevelopment.aegis.importers.DatabaseImporterException;\nimport com.beemdevelopment.aegis.importers.GoogleAuthUriImporter;\nimport com.beemdevelopment.aegis.otp.OtpInfoException;\nimport com.beemdevelopment.aegis.rules.ScreenshotTestRule;\nimport com.beemdevelopment.aegis.ui.PreferencesActivity;\nimport com.beemdevelopment.aegis.util.IOUtils;\nimport com.beemdevelopment.aegis.vault.VaultBackupManager;\nimport com.beemdevelopment.aegis.vault.VaultEntry;\nimport com.beemdevelopment.aegis.vault.VaultFile;\nimport com.beemdevelopment.aegis.vault.VaultFileCredentials;\nimport com.beemdevelopment.aegis.vault.VaultFileException;\nimport com.beemdevelopment.aegis.vault.VaultRepository;\nimport com.beemdevelopment.aegis.vault.VaultRepositoryException;\nimport com.beemdevelopment.aegis.vault.slots.PasswordSlot;\nimport com.beemdevelopment.aegis.vault.slots.SlotException;\nimport com.beemdevelopment.aegis.vault.slots.SlotIntegrityException;\nimport com.beemdevelopment.aegis.vault.slots.SlotList;\nimport com.beemdevelopment.aegis.vectors.VaultEntries;\n\nimport org.junit.After;\nimport org.junit.Before;\nimport org.junit.Rule;\nimport org.junit.Test;\nimport org.junit.rules.RuleChain;\nimport org.junit.rules.TestRule;\nimport org.junit.runner.RunWith;\nimport org.xmlpull.v1.XmlPullParser;\nimport org.xmlpull.v1.XmlPullParserException;\nimport org.xmlpull.v1.XmlPullParserFactory;\n\nimport java.io.File;\nimport java.io.FileInputStream;\nimport java.io.IOException;\nimport java.io.InputStream;\nimport java.io.InputStreamReader;\nimport java.io.Reader;\nimport java.nio.charset.StandardCharsets;\nimport java.util.Collection;\nimport java.util.List;\nimport java.util.Locale;\n\nimport javax.crypto.Cipher;\nimport javax.crypto.SecretKey;\n\nimport dagger.hilt.android.testing.HiltAndroidTest;\n\n@RunWith(AndroidJUnit4.class)\n@HiltAndroidTest\n@SmallTest\npublic class BackupExportTest extends AegisTest {\n    private final ActivityScenarioRule<PreferencesActivity> _activityRule = new ActivityScenarioRule<>(PreferencesActivity.class);\n\n    @Rule\n    public final TestRule testRule = RuleChain.outerRule(_activityRule).around(new ScreenshotTestRule());\n\n    @Before\n    public void setUp() {\n        Intents.init();\n    }\n\n    @After\n    public void tearDown() {\n        Intents.release();\n    }\n\n    @Test\n    public void testPlainVaultExportPlainJson() {\n        initPlainVault();\n\n        openExportDialog();\n        onView(withId(R.id.checkbox_export_encrypt)).perform(click());\n        onView(withId(android.R.id.button1)).perform(click());\n        onView(withId(R.id.checkbox_accept)).perform(click());\n        File file = doExport();\n\n        readVault(file, null);\n    }\n\n    @Test\n    public void testPlainVaultExportPlainTxt() {\n        initPlainVault();\n\n        openExportDialog();\n        onView(withId(R.id.checkbox_export_encrypt)).perform(click());\n        onView(withId(R.id.dropdown_export_format)).perform(click());\n        onView(withText(R.string.export_format_google_auth_uri)).inRoot(RootMatchers.isPlatformPopup()).perform(click());\n        onView(withId(android.R.id.button1)).perform(click());\n        onView(withId(R.id.checkbox_accept)).perform(click());\n        File file = doExport();\n\n        readTxtExport(file);\n    }\n\n    @Test\n    public void testPlainVaultExportEncryptedJson() {\n        initPlainVault();\n\n        openExportDialog();\n        File file = doExport();\n\n        onView(withId(R.id.text_password)).perform(typeText(VAULT_PASSWORD), closeSoftKeyboard());\n        onView(withId(R.id.text_password_confirm)).perform(typeText(VAULT_PASSWORD), closeSoftKeyboard());\n        onView(withId(android.R.id.button1)).perform(click());\n\n        readVault(file, VAULT_PASSWORD);\n    }\n\n    @Test\n    public void testEncryptedVaultExportPlainJson() {\n        initEncryptedVault();\n\n        openExportDialog();\n        onView(withId(R.id.checkbox_export_encrypt)).perform(click());\n        onView(withId(android.R.id.button1)).perform(click());\n        onView(withId(R.id.checkbox_accept)).perform(click());\n        File file = doExport();\n\n        readVault(file, null);\n    }\n\n    @Test\n    public void testEncryptedVaultExportPlainTxt() {\n        initEncryptedVault();\n\n        openExportDialog();\n        onView(withId(R.id.checkbox_export_encrypt)).perform(click());\n        onView(withId(R.id.dropdown_export_format)).perform(click());\n        onView(withText(R.string.export_format_google_auth_uri)).inRoot(RootMatchers.isPlatformPopup()).perform(click());\n        onView(withId(android.R.id.button1)).perform(click());\n        onView(withId(R.id.checkbox_accept)).perform(click());\n        File file = doExport();\n\n        readTxtExport(file);\n    }\n\n    @Test\n    public void testEncryptedVaultExportEncryptedJson() {\n        initEncryptedVault();\n\n        openExportDialog();\n        File file = doExport();\n\n        readVault(file, VAULT_PASSWORD);\n    }\n\n    @Test\n    public void testPlainVaultExportHtml() {\n        initPlainVault();\n\n        openExportDialog();\n        onView(withId(R.id.checkbox_export_encrypt)).perform(click());\n        onView(withId(R.id.dropdown_export_format)).perform(click());\n        onView(withText(R.string.export_format_html)).inRoot(RootMatchers.isPlatformPopup()).perform(click());\n        onView(withId(android.R.id.button1)).perform(click());\n        onView(withId(R.id.checkbox_accept)).perform(click());\n        File file = doExport();\n\n        checkHtmlExport(file);\n    }\n\n    @Test\n    public void testEncryptedVaultExportHtml() {\n        initEncryptedVault();\n\n        openExportDialog();\n        onView(withId(R.id.checkbox_export_encrypt)).perform(click());\n        onView(withId(R.id.dropdown_export_format)).perform(click());\n        onView(withText(R.string.export_format_html)).inRoot(RootMatchers.isPlatformPopup()).perform(click());\n        onView(withId(android.R.id.button1)).perform(click());\n        onView(withId(R.id.checkbox_accept)).perform(click());\n        File file = doExport();\n\n        checkHtmlExport(file);\n    }\n\n    @Test\n    public void testSeparateExportPassword() {\n        initEncryptedVault();\n        setSeparateBackupExportPassword();\n\n        openExportDialog();\n        File file = doExport();\n\n        readVault(file, VAULT_BACKUP_PASSWORD);\n    }\n\n    @Test\n    public void testChangeBackupPassword() throws SlotIntegrityException {\n        initEncryptedVault();\n        setSeparateBackupExportPassword();\n\n        onView(withId(androidx.preference.R.id.recycler_view)).perform(RecyclerViewActions.actionOnItem(hasDescendant(withText(R.string.pref_section_security_title)), click()));\n        onView(withId(androidx.preference.R.id.recycler_view)).perform(RecyclerViewActions.actionOnItem(hasDescendant(withText(R.string.pref_backup_password_change_title)), click()));\n        onView(withId(R.id.text_password)).perform(typeText(VAULT_BACKUP_PASSWORD_CHANGED), closeSoftKeyboard());\n        onView(withId(R.id.text_password_confirm)).perform(typeText(VAULT_BACKUP_PASSWORD_CHANGED), closeSoftKeyboard());\n        onView(withId(android.R.id.button1)).perform(click());\n        onView(isRoot()).perform(pressBack());\n\n        VaultFileCredentials creds = _vaultManager.getVault().getCredentials();\n        assertEquals(creds.getSlots().findRegularPasswordSlots().size(), 1);\n        assertEquals(creds.getSlots().findBackupPasswordSlots().size(), 1);\n\n        for (PasswordSlot slot : creds.getSlots().findBackupPasswordSlots()) {\n            verifyPasswordSlotChange(creds, slot, VAULT_BACKUP_PASSWORD, VAULT_BACKUP_PASSWORD_CHANGED);\n        }\n\n        for (PasswordSlot slot : creds.getSlots().findRegularPasswordSlots()) {\n            decryptPasswordSlot(slot, VAULT_PASSWORD);\n        }\n\n        openExportDialog();\n        File file = doExport();\n        readVault(file, VAULT_BACKUP_PASSWORD_CHANGED);\n    }\n\n    @Test\n    public void testChangePasswordHavingBackupPassword() throws SlotIntegrityException {\n        initEncryptedVault();\n        setSeparateBackupExportPassword();\n\n        onView(withId(androidx.preference.R.id.recycler_view)).perform(RecyclerViewActions.actionOnItem(hasDescendant(withText(R.string.pref_section_security_title)), click()));\n        onView(withId(androidx.preference.R.id.recycler_view)).perform(RecyclerViewActions.actionOnItem(hasDescendant(withText(R.string.pref_set_password_title)), click()));\n        onView(withId(R.id.text_password)).perform(typeText(VAULT_PASSWORD_CHANGED), closeSoftKeyboard());\n        onView(withId(R.id.text_password_confirm)).perform(typeText(VAULT_PASSWORD_CHANGED), closeSoftKeyboard());\n        onView(withId(android.R.id.button1)).perform(click());\n        onView(isRoot()).perform(pressBack());\n\n        VaultFileCredentials creds = _vaultManager.getVault().getCredentials();\n        assertEquals(creds.getSlots().findRegularPasswordSlots().size(), 1);\n        assertEquals(creds.getSlots().findBackupPasswordSlots().size(), 1);\n\n        for (PasswordSlot slot : creds.getSlots().findRegularPasswordSlots()) {\n            verifyPasswordSlotChange(creds, slot, VAULT_PASSWORD, VAULT_PASSWORD_CHANGED);\n        }\n\n        for (PasswordSlot slot : creds.getSlots().findBackupPasswordSlots()) {\n            decryptPasswordSlot(slot, VAULT_BACKUP_PASSWORD);\n        }\n\n        openExportDialog();\n        File file = doExport();\n        readVault(file, VAULT_BACKUP_PASSWORD);\n    }\n\n    private void setSeparateBackupExportPassword() {\n        VaultFileCredentials creds = _vaultManager.getVault().getCredentials();\n        assertEquals(creds.getSlots().findRegularPasswordSlots().size(), 1);\n        assertEquals(creds.getSlots().findBackupPasswordSlots().size(), 0);\n\n        onView(withId(androidx.preference.R.id.recycler_view)).perform(RecyclerViewActions.actionOnItem(hasDescendant(withText(R.string.pref_section_security_title)), click()));\n        onView(withId(androidx.preference.R.id.recycler_view)).perform(RecyclerViewActions.actionOnItem(hasDescendant(withText(R.string.pref_backup_password_title)), click()));\n        onView(withId(R.id.text_password)).perform(typeText(VAULT_BACKUP_PASSWORD), closeSoftKeyboard());\n        onView(withId(R.id.text_password_confirm)).perform(typeText(VAULT_BACKUP_PASSWORD), closeSoftKeyboard());\n        onView(withId(android.R.id.button1)).perform(click());\n        onView(isRoot()).perform(pressBack());\n\n        creds = _vaultManager.getVault().getCredentials();\n        assertEquals(creds.getSlots().findRegularPasswordSlots().size(), 1);\n        assertEquals(creds.getSlots().findBackupPasswordSlots().size(), 1);\n        for (PasswordSlot slot : creds.getSlots().findBackupPasswordSlots()) {\n            verifyPasswordSlotChange(creds, slot, VAULT_PASSWORD, VAULT_BACKUP_PASSWORD);\n        }\n    }\n\n    private void verifyPasswordSlotChange(VaultFileCredentials creds, PasswordSlot slot, String oldPassword, String newPassword) {\n        assertThrows(SlotIntegrityException.class, () -> decryptPasswordSlot(slot, oldPassword));\n        MasterKey masterKey;\n        try {\n            masterKey = decryptPasswordSlot(slot, newPassword);\n        } catch (SlotIntegrityException e) {\n            throw new RuntimeException(\"Unable to decrypt password slot\", e);\n        }\n\n        assertArrayEquals(creds.getKey().getBytes(), masterKey.getBytes());\n    }\n\n    private File doExport() {\n        File file = getExportFileUri();\n        Intent resultData = new Intent();\n        resultData.setData(Uri.fromFile(file));\n\n        Instrumentation.ActivityResult result = new Instrumentation.ActivityResult(Activity.RESULT_OK, resultData);\n        intending(not(isInternal())).respondWith(result);\n\n        onView(withId(android.R.id.button1)).perform(click());\n        return file;\n    }\n\n    private void openExportDialog() {\n        onView(withId(androidx.preference.R.id.recycler_view)).perform(RecyclerViewActions.actionOnItem(hasDescendant(withText(R.string.pref_section_import_export_title)), click()));\n        onView(withId(androidx.preference.R.id.recycler_view)).perform(RecyclerViewActions.actionOnItem(hasDescendant(withText(R.string.pref_export_title)), click()));\n    }\n\n    private MasterKey decryptPasswordSlot(PasswordSlot slot, String password) throws SlotIntegrityException {\n        SecretKey derivedKey = slot.deriveKey(password.toCharArray());\n        try {\n            Cipher cipher = slot.createDecryptCipher(derivedKey);\n            return slot.getKey(cipher);\n        } catch (SlotException e) {\n            throw new RuntimeException(\"Unable to decrypt password slot\", e);\n        }\n    }\n\n    private File getExportFileUri() {\n        String dirName = Hex.encode(CryptoUtils.generateRandomBytes(8));\n        File dir = new File(getInstrumentation().getTargetContext().getExternalCacheDir(), String.format(\"export-%s\", dirName));\n        if (!dir.mkdirs()) {\n            throw new RuntimeException(String.format(\"Unable to create export directory: %s\", dir));\n        }\n\n        VaultBackupManager.FileInfo fileInfo = new VaultBackupManager.FileInfo(VaultRepository.FILENAME_PREFIX_EXPORT);\n        return new File(dir, fileInfo.toString());\n    }\n\n    private VaultRepository readVault(File file, @Nullable String password) {\n        VaultRepository repo;\n        try (InputStream inStream = new FileInputStream(file)) {\n            byte[] bytes = IOUtils.readAll(inStream);\n            VaultFile vaultFile = VaultFile.fromBytes(bytes);\n\n            VaultFileCredentials creds = null;\n            if (password != null) {\n                SlotList slots = vaultFile.getHeader().getSlots();\n                for (PasswordSlot slot : slots.findAll(PasswordSlot.class)) {\n                    SecretKey derivedKey = slot.deriveKey(password.toCharArray());\n                    Cipher cipher = slot.createDecryptCipher(derivedKey);\n                    MasterKey masterKey = slot.getKey(cipher);\n                    creds = new VaultFileCredentials(masterKey, slots);\n                    break;\n                }\n            }\n\n            repo = VaultRepository.fromFile(getInstrumentation().getContext(), vaultFile, creds);\n        } catch (SlotException | SlotIntegrityException | VaultRepositoryException | VaultFileException | IOException e) {\n            throw new RuntimeException(\"Unable to read back vault file\", e);\n        }\n\n        checkReadEntries(repo.getEntries());\n        return repo;\n    }\n\n    private void readTxtExport(File file) {\n        GoogleAuthUriImporter importer = new GoogleAuthUriImporter(getInstrumentation().getContext());\n\n        Collection<VaultEntry> entries;\n        try (InputStream inStream = new FileInputStream(file)) {\n            DatabaseImporter.State state = importer.read(inStream);\n            DatabaseImporter.Result result = state.convert();\n            entries = result.getEntries().getValues();\n        } catch (DatabaseImporterException | IOException e) {\n            throw new RuntimeException(\"Unable to read txt export file\", e);\n        }\n\n        checkReadEntries(entries);\n    }\n\n    private void checkHtmlExport(File file) {\n        try (InputStream inStream = new FileInputStream(file)) {\n            Reader inReader = new InputStreamReader(inStream, StandardCharsets.UTF_8);\n            XmlPullParserFactory factory = XmlPullParserFactory.newInstance();\n            XmlPullParser parser = factory.newPullParser();\n            parser.setInput(inReader);\n            while (parser.getEventType() != XmlPullParser.START_TAG) {\n                parser.next();\n            }\n            if (!parser.getName().toLowerCase(Locale.ROOT).equals(\"html\")) {\n                throw new RuntimeException(\"not an html document!\");\n            }\n            while (parser.getEventType() != XmlPullParser.END_DOCUMENT) {\n                parser.next();\n            }\n        } catch (IOException | XmlPullParserException e) {\n            throw new RuntimeException(\"Unable to read html export file\", e);\n        }\n    }\n\n    private void checkReadEntries(Collection<VaultEntry> entries) {\n        List<VaultEntry> vectors = VaultEntries.get();\n        assertEquals(vectors.size(), entries.size());\n\n        int i = 0;\n        for (VaultEntry entry : entries) {\n            VaultEntry vector = vectors.get(i);\n            String message = String.format(\"Entries are not equivalent: (%s) (%s)\", vector.toJson().toString(), entry.toJson().toString());\n            assertTrue(message, vector.equivalates(entry));\n            try {\n                assertEquals(message, vector.getInfo().getOtp(), entry.getInfo().getOtp());\n            } catch (OtpInfoException e) {\n                throw new RuntimeException(\"Unable to generate OTP\", e);\n            }\n            i++;\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/androidTest/java/com/beemdevelopment/aegis/DeepLinkTest.java",
    "content": "package com.beemdevelopment.aegis;\n\nimport static androidx.test.espresso.Espresso.onView;\nimport static androidx.test.espresso.action.ViewActions.click;\nimport static androidx.test.espresso.matcher.ViewMatchers.withId;\nimport static junit.framework.TestCase.assertTrue;\n\nimport android.content.Intent;\nimport android.net.Uri;\n\nimport androidx.test.ext.junit.runners.AndroidJUnit4;\nimport androidx.test.filters.LargeTest;\nimport androidx.test.rule.ActivityTestRule;\n\nimport com.beemdevelopment.aegis.otp.GoogleAuthInfo;\nimport com.beemdevelopment.aegis.otp.TotpInfo;\nimport com.beemdevelopment.aegis.ui.MainActivity;\nimport com.beemdevelopment.aegis.vault.VaultEntry;\n\nimport org.junit.Before;\nimport org.junit.Test;\nimport org.junit.runner.RunWith;\n\nimport dagger.hilt.android.testing.HiltAndroidTest;\n\n@RunWith(AndroidJUnit4.class)\n@HiltAndroidTest\n@LargeTest\npublic class DeepLinkTest extends AegisTest {\n    @Before\n    public void before() {\n        initEmptyEncryptedVault();\n    }\n\n    @Test\n    public void testDeepLinkIntent() {\n        VaultEntry entry = generateEntry(TotpInfo.class, \"Bob\", \"Google\");\n        GoogleAuthInfo info = new GoogleAuthInfo(entry.getInfo(), entry.getName(), entry.getIssuer());\n        launch(info.getUri());\n\n        onView(withId(R.id.action_save)).perform(click());\n\n        VaultEntry createdEntry = (VaultEntry) _vaultManager.getVault().getEntries().toArray()[0];\n        assertTrue(createdEntry.equivalates(entry));\n    }\n\n    @Test\n    public void testDeepLinkIntent_Empty() {\n        launch(null);\n    }\n\n    @Test\n    public void testDeepLinkIntent_Bad() {\n        launch(Uri.parse(\"otpauth://bad\"));\n        onView(withId(android.R.id.button1)).perform(click());\n    }\n\n    @SuppressWarnings(\"deprecation\")\n    private void launch(Uri uri) {\n        Intent intent = new Intent(getApp(), MainActivity.class);\n        intent.setAction(Intent.ACTION_VIEW);\n        intent.setData(uri);\n\n        // we need to use the deprecated ActivityTestRule class because of https://github.com/android/android-test/issues/143\n        ActivityTestRule<MainActivity> rule = new ActivityTestRule<>(MainActivity.class);\n        rule.launchActivity(intent);\n    }\n}\n"
  },
  {
    "path": "app/src/androidTest/java/com/beemdevelopment/aegis/EmptySecretTest.java",
    "content": "package com.beemdevelopment.aegis;\n\nimport static androidx.test.espresso.Espresso.onView;\nimport static androidx.test.espresso.action.ViewActions.click;\nimport static androidx.test.espresso.matcher.ViewMatchers.hasDescendant;\nimport static androidx.test.espresso.matcher.ViewMatchers.withId;\nimport static androidx.test.espresso.matcher.ViewMatchers.withText;\n\nimport androidx.test.core.app.ActivityScenario;\nimport androidx.test.espresso.contrib.RecyclerViewActions;\nimport androidx.test.ext.junit.rules.ActivityScenarioRule;\nimport androidx.test.ext.junit.runners.AndroidJUnit4;\nimport androidx.test.filters.SmallTest;\n\nimport com.beemdevelopment.aegis.otp.OtpInfoException;\nimport com.beemdevelopment.aegis.otp.TotpInfo;\nimport com.beemdevelopment.aegis.rules.ScreenshotTestRule;\nimport com.beemdevelopment.aegis.ui.MainActivity;\nimport com.beemdevelopment.aegis.vault.VaultEntry;\n\nimport org.junit.After;\nimport org.junit.Before;\nimport org.junit.Rule;\nimport org.junit.Test;\nimport org.junit.rules.RuleChain;\nimport org.junit.rules.TestRule;\nimport org.junit.runner.RunWith;\n\nimport dagger.hilt.android.testing.HiltAndroidTest;\n\n@RunWith(AndroidJUnit4.class)\n@HiltAndroidTest\n@SmallTest\npublic class EmptySecretTest extends AegisTest {\n    private ActivityScenario<MainActivity> _scenario;\n\n    @Before\n    public void before() throws OtpInfoException {\n        initEmptyPlainVault();\n        _vaultManager.getVault().addEntry(new VaultEntry(new TotpInfo(new byte[0])));\n\n        _scenario = ActivityScenario.launch(MainActivity.class);\n    }\n\n    @After\n    public void after() {\n        _scenario.close();\n    }\n\n    @Test\n    public void testVaultEntryEmptySecret() {\n        onView(withId(R.id.rvKeyProfiles)).perform(RecyclerViewActions.actionOnItem(hasDescendant(withText(R.string.error_all_caps)), click()));\n    }\n}\n"
  },
  {
    "path": "app/src/androidTest/java/com/beemdevelopment/aegis/IntroTest.java",
    "content": "package com.beemdevelopment.aegis;\n\nimport static androidx.test.espresso.Espresso.onView;\nimport static androidx.test.espresso.action.ViewActions.click;\nimport static androidx.test.espresso.action.ViewActions.closeSoftKeyboard;\nimport static androidx.test.espresso.action.ViewActions.replaceText;\nimport static androidx.test.espresso.action.ViewActions.typeText;\nimport static androidx.test.espresso.assertion.ViewAssertions.matches;\nimport static androidx.test.espresso.intent.Intents.intending;\nimport static androidx.test.espresso.intent.matcher.IntentMatchers.isInternal;\nimport static androidx.test.espresso.matcher.ViewMatchers.isDisplayed;\nimport static androidx.test.espresso.matcher.ViewMatchers.withId;\nimport static androidx.test.platform.app.InstrumentationRegistry.getInstrumentation;\nimport static junit.framework.TestCase.assertFalse;\nimport static junit.framework.TestCase.assertNull;\nimport static junit.framework.TestCase.assertTrue;\nimport static org.hamcrest.Matchers.not;\n\nimport android.app.Activity;\nimport android.app.Instrumentation;\nimport android.content.Intent;\nimport android.net.Uri;\n\nimport androidx.test.espresso.IdlingRegistry;\nimport androidx.test.espresso.IdlingResource;\nimport androidx.test.espresso.ViewInteraction;\nimport androidx.test.espresso.intent.Intents;\nimport androidx.test.ext.junit.rules.ActivityScenarioRule;\nimport androidx.test.ext.junit.runners.AndroidJUnit4;\nimport androidx.test.filters.LargeTest;\nimport androidx.viewpager2.widget.ViewPager2;\n\nimport com.beemdevelopment.aegis.rules.ScreenshotTestRule;\nimport com.beemdevelopment.aegis.ui.IntroActivity;\nimport com.beemdevelopment.aegis.util.IOUtils;\nimport com.beemdevelopment.aegis.vault.VaultRepository;\nimport com.beemdevelopment.aegis.vault.slots.BiometricSlot;\nimport com.beemdevelopment.aegis.vault.slots.PasswordSlot;\nimport com.beemdevelopment.aegis.vault.slots.SlotList;\n\nimport org.junit.After;\nimport org.junit.Before;\nimport org.junit.Rule;\nimport org.junit.Test;\nimport org.junit.rules.RuleChain;\nimport org.junit.rules.TestRule;\nimport org.junit.runner.RunWith;\n\nimport java.io.File;\nimport java.io.FileOutputStream;\nimport java.io.IOException;\nimport java.io.InputStream;\n\nimport dagger.hilt.android.testing.HiltAndroidTest;\n\n@RunWith(AndroidJUnit4.class)\n@HiltAndroidTest\n@LargeTest\npublic class IntroTest extends AegisTest {\n    private final ActivityScenarioRule<IntroActivity> _activityRule = new ActivityScenarioRule<>(IntroActivity.class);\n\n    private ViewPager2IdlingResource _viewPager2IdlingResource;\n\n    @Rule\n    public final TestRule testRule = RuleChain.outerRule(_activityRule).around(new ScreenshotTestRule());\n\n    @Before\n    public void setUp() {\n        Intents.init();\n\n        _activityRule.getScenario().onActivity(activity -> {\n            _viewPager2IdlingResource = new ViewPager2IdlingResource(activity.findViewById(R.id.pager), \"viewPagerIdlingResource\");\n            IdlingRegistry.getInstance().register(_viewPager2IdlingResource);\n        });\n    }\n\n    @After\n    public void tearDown() {\n        Intents.release();\n        IdlingRegistry.getInstance().unregister(_viewPager2IdlingResource);\n    }\n\n    @Test\n    public void testIntro_None() {\n        assertFalse(_prefs.isIntroDone());\n        ViewInteraction next = onView(withId(R.id.btnNext));\n        ViewInteraction prev = onView(withId(R.id.btnPrevious));\n\n        prev.check(matches(not(isDisplayed())));\n        next.perform(click());\n        onView(withId(R.id.rb_none)).perform(click());\n        prev.perform(click());\n        prev.check(matches(not(isDisplayed())));\n        next.perform(click());\n        next.perform(click());\n        prev.check(matches(not(isDisplayed())));\n        next.perform(click());\n\n        VaultRepository vault = _vaultManager.getVault();\n        assertFalse(vault.isEncryptionEnabled());\n        assertNull(vault.getCredentials());\n        assertTrue(_prefs.isIntroDone());\n    }\n\n    @Test\n    public void testIntro_Password() {\n        assertFalse(_prefs.isIntroDone());\n        ViewInteraction next = onView(withId(R.id.btnNext));\n        ViewInteraction prev = onView(withId(R.id.btnPrevious));\n\n        prev.check(matches(not(isDisplayed())));\n        next.perform(click());\n        onView(withId(R.id.rb_password)).perform(click());\n        prev.perform(click());\n        prev.check(matches(not(isDisplayed())));\n        next.perform(click());\n        next.perform(click());\n        onView(withId(R.id.text_password)).perform(typeText(VAULT_PASSWORD), closeSoftKeyboard());\n        onView(withId(R.id.text_password_confirm)).perform(typeText(VAULT_PASSWORD + \"1\"), closeSoftKeyboard());\n        next.perform(click());\n        onView(withId(R.id.text_password_confirm)).perform(replaceText(VAULT_PASSWORD), closeSoftKeyboard());\n        prev.perform(click());\n        prev.perform(click());\n        prev.check(matches(not(isDisplayed())));\n        next.perform(click());\n        next.perform(click());\n        next.perform(click());\n        next.perform(click());\n\n        VaultRepository vault = _vaultManager.getVault();\n        SlotList slots = vault.getCredentials().getSlots();\n        assertTrue(vault.isEncryptionEnabled());\n        assertTrue(slots.has(PasswordSlot.class));\n        assertFalse(slots.has(BiometricSlot.class));\n        assertTrue(_prefs.isIntroDone());\n    }\n\n    @Test\n    public void testIntro_Import_Plain() {\n        assertFalse(_prefs.isIntroDone());\n        Uri uri = getResourceUri(\"aegis_plain.json\");\n        Intent resultData = new Intent();\n        resultData.setData(uri);\n\n        Instrumentation.ActivityResult result = new Instrumentation.ActivityResult(Activity.RESULT_OK, resultData);\n        intending(not(isInternal())).respondWith(result);\n\n        ViewInteraction next = onView(withId(R.id.btnNext));\n        onView(withId(R.id.btnImport)).perform(click());\n        next.perform(click());\n\n        VaultRepository vault = _vaultManager.getVault();\n        assertFalse(vault.isEncryptionEnabled());\n        assertNull(vault.getCredentials());\n        assertTrue(_prefs.isIntroDone());\n    }\n\n    @Test\n    public void testIntro_Import_Encrypted() {\n        assertFalse(_prefs.isIntroDone());\n        Uri uri = getResourceUri(\"aegis_encrypted.json\");\n        Intent resultData = new Intent();\n        resultData.setData(uri);\n\n        Instrumentation.ActivityResult result = new Instrumentation.ActivityResult(Activity.RESULT_OK, resultData);\n        intending(not(isInternal())).respondWith(result);\n\n        ViewInteraction next = onView(withId(R.id.btnNext));\n        onView(withId(R.id.btnImport)).perform(click());\n        onView(withId(R.id.text_input)).perform(typeText(VAULT_PASSWORD), closeSoftKeyboard());\n        onView(withId(android.R.id.button1)).perform(click());\n        next.perform(click());\n\n        VaultRepository vault = _vaultManager.getVault();\n        SlotList slots = vault.getCredentials().getSlots();\n        assertTrue(vault.isEncryptionEnabled());\n        assertTrue(slots.has(PasswordSlot.class));\n        assertFalse(slots.has(BiometricSlot.class));\n        assertTrue(_prefs.isIntroDone());\n    }\n\n    private Uri getResourceUri(String resourceName) {\n        File targetFile = new File(getInstrumentation().getTargetContext().getExternalCacheDir(), resourceName);\n        try (InputStream inStream = getClass().getResourceAsStream(resourceName);\n             FileOutputStream outStream = new FileOutputStream(targetFile)) {\n            IOUtils.copy(inStream, outStream);\n        } catch (IOException e) {\n            throw new RuntimeException(e);\n        }\n\n        return Uri.fromFile(targetFile);\n    }\n\n    // Source: https://stackoverflow.com/a/32763454/12972657\n    private static class ViewPager2IdlingResource implements IdlingResource {\n        private final String _resName;\n        private boolean _isIdle = true;\n        private IdlingResource.ResourceCallback _resourceCallback = null;\n\n        public ViewPager2IdlingResource(ViewPager2 viewPager, String resName) {\n            viewPager.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() {\n                @Override\n                public void onPageScrollStateChanged(int state) {\n                    _isIdle = (state == ViewPager2.SCROLL_STATE_IDLE || state == ViewPager2.SCROLL_STATE_DRAGGING);\n                    if (_isIdle && _resourceCallback != null) {\n                        _resourceCallback.onTransitionToIdle();\n                    }\n                }\n            });\n            _resName = resName;\n        }\n\n        @Override\n        public String getName() {\n            return _resName;\n        }\n\n        @Override\n        public boolean isIdleNow() {\n            return _isIdle;\n        }\n\n        @Override\n        public void registerIdleTransitionCallback(IdlingResource.ResourceCallback resourceCallback) {\n            _resourceCallback = resourceCallback;\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/androidTest/java/com/beemdevelopment/aegis/OverallTest.java",
    "content": "package com.beemdevelopment.aegis;\n\nimport static androidx.test.espresso.Espresso.onView;\nimport static androidx.test.espresso.Espresso.openContextualActionModeOverflowMenu;\nimport static androidx.test.espresso.action.ViewActions.clearText;\nimport static androidx.test.espresso.action.ViewActions.click;\nimport static androidx.test.espresso.action.ViewActions.closeSoftKeyboard;\nimport static androidx.test.espresso.action.ViewActions.longClick;\nimport static androidx.test.espresso.action.ViewActions.pressBack;\nimport static androidx.test.espresso.action.ViewActions.scrollTo;\nimport static androidx.test.espresso.action.ViewActions.typeText;\nimport static androidx.test.espresso.matcher.ViewMatchers.hasDescendant;\nimport static androidx.test.espresso.matcher.ViewMatchers.isDescendantOfA;\nimport static androidx.test.espresso.matcher.ViewMatchers.isRoot;\nimport static androidx.test.espresso.matcher.ViewMatchers.withClassName;\nimport static androidx.test.espresso.matcher.ViewMatchers.withId;\nimport static androidx.test.espresso.matcher.ViewMatchers.withText;\nimport static junit.framework.TestCase.assertFalse;\nimport static junit.framework.TestCase.assertNull;\nimport static junit.framework.TestCase.assertTrue;\nimport static org.hamcrest.Matchers.allOf;\nimport static org.hamcrest.Matchers.containsString;\n\nimport androidx.annotation.IdRes;\nimport androidx.recyclerview.widget.RecyclerView;\nimport androidx.test.espresso.ViewInteraction;\nimport androidx.test.espresso.contrib.RecyclerViewActions;\nimport androidx.test.espresso.matcher.RootMatchers;\nimport androidx.test.ext.junit.rules.ActivityScenarioRule;\nimport androidx.test.ext.junit.runners.AndroidJUnit4;\nimport androidx.test.filters.LargeTest;\n\nimport com.beemdevelopment.aegis.encoding.Base32;\nimport com.beemdevelopment.aegis.encoding.Hex;\nimport com.beemdevelopment.aegis.otp.HotpInfo;\nimport com.beemdevelopment.aegis.otp.MotpInfo;\nimport com.beemdevelopment.aegis.otp.SteamInfo;\nimport com.beemdevelopment.aegis.otp.TotpInfo;\nimport com.beemdevelopment.aegis.otp.YandexInfo;\nimport com.beemdevelopment.aegis.rules.ScreenshotTestRule;\nimport com.beemdevelopment.aegis.ui.MainActivity;\nimport com.beemdevelopment.aegis.ui.views.EntryAdapter;\nimport com.beemdevelopment.aegis.vault.VaultEntry;\nimport com.beemdevelopment.aegis.vault.VaultRepository;\nimport com.beemdevelopment.aegis.vault.slots.PasswordSlot;\n\nimport org.junit.Rule;\nimport org.junit.Test;\nimport org.junit.rules.RuleChain;\nimport org.junit.rules.TestRule;\nimport org.junit.runner.RunWith;\n\nimport java.util.ArrayList;\nimport java.util.Arrays;\nimport java.util.List;\nimport java.util.Objects;\nimport java.util.concurrent.atomic.AtomicBoolean;\n\nimport dagger.hilt.android.testing.HiltAndroidTest;\n\n@RunWith(AndroidJUnit4.class)\n@HiltAndroidTest\n@LargeTest\npublic class OverallTest extends AegisTest {\n    private static final String _groupName = \"Test\";\n\n    private final ActivityScenarioRule<MainActivity> _activityRule = new ActivityScenarioRule<>(MainActivity.class);\n\n    @Rule\n    public final TestRule testRule = RuleChain.outerRule(_activityRule).around(new ScreenshotTestRule());\n\n    @Test\n    public void testOverall() {\n        ViewInteraction next = onView(withId(R.id.btnNext));\n        next.perform(click());\n        onView(withId(R.id.rb_password)).perform(click());\n        next.perform(click());\n        onView(withId(R.id.text_password)).perform(click()).perform(typeText(VAULT_PASSWORD), closeSoftKeyboard());\n        onView(withId(R.id.text_password_confirm)).perform(typeText(VAULT_PASSWORD), closeSoftKeyboard());\n        next.perform(click());\n        onView(withId(R.id.btnNext)).perform(click());\n\n        VaultRepository vault = _vaultManager.getVault();\n        assertTrue(vault.isEncryptionEnabled());\n        assertTrue(vault.getCredentials().getSlots().has(PasswordSlot.class));\n        assertTrue(_prefs.isIntroDone());\n\n        List<VaultEntry> entries = Arrays.asList(\n                generateEntry(TotpInfo.class, \"Frank\", \"Google\"),\n                generateEntry(HotpInfo.class, \"John\", \"GitHub\"),\n                generateEntry(TotpInfo.class, \"Alice\", \"Office 365\"),\n                generateEntry(SteamInfo.class, \"Gaben\", \"Steam\"),\n                generateEntry(YandexInfo.class, \"Ivan\", \"Yandex\", 16),\n                generateEntry(MotpInfo.class, \"Jimmy McGill\", \"PfSense\", 16)\n        );\n        for (VaultEntry entry : entries) {\n            addEntry(entry);\n        }\n\n        List<VaultEntry> realEntries = new ArrayList<>(vault.getEntries());\n        for (int i = 0; i < realEntries.size(); i++) {\n            String message = String.format(\"%s != %s\", realEntries.get(i).toJson().toString(), entries.get(i).toJson().toString());\n            assertTrue(message, realEntries.get(i).equivalates(entries.get(i)));\n        }\n\n        for (int i = 0; i < 10; i++) {\n            onView(withId(R.id.rvKeyProfiles)).perform(RecyclerViewActions.actionOnHolderItem(withOtpType(HotpInfo.class), clickChildViewWithId(R.id.buttonRefresh)));\n        }\n\n        AtomicBoolean isErrorCardShown = new AtomicBoolean(false);\n        _activityRule.getScenario().onActivity(activity -> {\n            isErrorCardShown.set(((EntryAdapter)((RecyclerView) activity.findViewById(R.id.rvKeyProfiles)).getAdapter()).isErrorCardShown());\n        });\n\n        int entryPosOffset = isErrorCardShown.get() ? 1 : 0;\n        onView(withId(R.id.rvKeyProfiles)).perform(RecyclerViewActions.actionOnItemAtPosition(entryPosOffset + 0, longClick()));\n        onView(withId(R.id.action_copy)).perform(click());\n\n        onView(withId(R.id.rvKeyProfiles)).perform(RecyclerViewActions.actionOnItemAtPosition(entryPosOffset + 1, longClick()));\n        onView(withId(R.id.action_edit)).perform(click());\n        onView(withId(R.id.text_name)).perform(clearText(), typeText(\"Bob\"), closeSoftKeyboard());\n        onView(withId(R.id.text_group)).perform(click());\n        onView(withId(R.id.addGroup)).inRoot(RootMatchers.isDialog()).perform(click());\n        onView(withId(R.id.text_input)).perform(typeText(_groupName), closeSoftKeyboard());\n        onView(withId(android.R.id.button1)).perform(click());\n        onView(withText(R.string.save)).perform(click());\n        onView(isRoot()).perform(pressBack());\n        onView(withId(android.R.id.button1)).perform(click());\n\n        changeSort(R.string.sort_alphabetically_name);\n        changeSort(R.string.sort_alphabetically_name_reverse);\n        changeSort(R.string.sort_alphabetically);\n        changeSort(R.string.sort_alphabetically_reverse);\n        changeSort(R.string.sort_custom);\n\n        changeGroupFilter(_groupName);\n        changeGroupFilter(null);\n\n        onView(withId(R.id.rvKeyProfiles)).perform(RecyclerViewActions.actionOnItemAtPosition(entryPosOffset + 2, longClick()));\n        onView(withId(R.id.rvKeyProfiles)).perform(RecyclerViewActions.actionOnItemAtPosition(entryPosOffset + 3, click()));\n        onView(withId(R.id.rvKeyProfiles)).perform(RecyclerViewActions.actionOnItemAtPosition(entryPosOffset + 4, click()));\n        onView(withId(R.id.action_share_qr)).perform(click());\n        onView(withId(R.id.btnNext)).perform(click()).perform(click()).perform(click());\n\n        onView(withId(R.id.rvKeyProfiles)).perform(RecyclerViewActions.actionOnItemAtPosition(entryPosOffset + 0, longClick()));\n        onView(allOf(isDescendantOfA(withClassName(containsString(\"ActionBarContextView\"))), withClassName(containsString(\"OverflowMenuButton\")))).perform(click());\n        onView(withText(R.string.action_delete)).perform(click());\n        onView(withId(android.R.id.button1)).perform(click());\n\n        openContextualActionModeOverflowMenu();\n        onView(withText(R.string.lock)).perform(click());\n        onView(withId(R.id.text_password)).perform(typeText(VAULT_PASSWORD), closeSoftKeyboard());\n        onView(withId(R.id.button_decrypt)).perform(click());\n        vault = _vaultManager.getVault();\n\n        openContextualActionModeOverflowMenu();\n        onView(withText(R.string.action_settings)).perform(click());\n        onView(withId(androidx.preference.R.id.recycler_view)).perform(RecyclerViewActions.actionOnItem(hasDescendant(withText(R.string.pref_section_security_title)), click()));\n        onView(withId(androidx.preference.R.id.recycler_view)).perform(RecyclerViewActions.actionOnItemAtPosition(1, click()));\n        onView(withId(android.R.id.button1)).perform(click());\n\n        assertFalse(vault.isEncryptionEnabled());\n        assertNull(vault.getCredentials());\n\n        onView(withId(androidx.preference.R.id.recycler_view)).perform(RecyclerViewActions.actionOnItemAtPosition(1, click()));\n        onView(withId(R.id.text_password)).perform(typeText(VAULT_PASSWORD), closeSoftKeyboard());\n        onView(withId(R.id.text_password_confirm)).perform(typeText(VAULT_PASSWORD), closeSoftKeyboard());\n        onView(withId(android.R.id.button1)).perform(click());\n\n        assertTrue(vault.isEncryptionEnabled());\n        assertTrue(vault.getCredentials().getSlots().has(PasswordSlot.class));\n    }\n\n    private void changeSort(@IdRes int resId) {\n        onView(withId(R.id.action_sort)).perform(click());\n        onView(withText(resId)).perform(click());\n    }\n\n    private void changeGroupFilter(String text) {\n        if (text == null) {\n            onView(allOf(withText(R.string.no_group), isDescendantOfA(withId(R.id.groupChipGroup)))).perform(click());\n        } else {\n            onView(allOf(withText(text), isDescendantOfA(withId(R.id.groupChipGroup)))).perform(click());\n        }\n    }\n\n    private void addEntry(VaultEntry entry) {\n        onView(withId(R.id.fab)).perform(click());\n        onView(withId(R.id.fab_menu_item_enter)).perform(click());\n\n        onView(withId(R.id.accordian_header)).perform(scrollTo(), click());\n        onView(withId(R.id.text_name)).perform(typeText(entry.getName()), closeSoftKeyboard());\n        onView(withId(R.id.text_issuer)).perform(typeText(entry.getIssuer()), closeSoftKeyboard());\n\n        if (entry.getInfo().getClass() != TotpInfo.class) {\n            String otpType;\n            if (entry.getInfo() instanceof HotpInfo) {\n                otpType = \"HOTP\";\n            } else if (entry.getInfo() instanceof SteamInfo) {\n                otpType = \"Steam\";\n            } else if (entry.getInfo() instanceof YandexInfo) {\n                otpType = \"Yandex\";\n            } else if (entry.getInfo() instanceof MotpInfo) {\n                otpType = \"MOTP\";\n            } else if (entry.getInfo() instanceof TotpInfo) {\n                otpType = \"TOTP\";\n            } else {\n                throw new RuntimeException(String.format(\"Unexpected entry type: %s\", entry.getInfo().getClass().getSimpleName()));\n            }\n\n            onView(withId(R.id.dropdown_type)).perform(scrollTo(), click());\n            onView(withText(otpType)).inRoot(RootMatchers.isPlatformPopup()).perform(click());\n        }\n\n        String secret;\n        if (Objects.equals(entry.getInfo().getTypeId(), MotpInfo.ID)) {\n            secret = Hex.encode(entry.getInfo().getSecret());\n        } else {\n            secret = Base32.encode(entry.getInfo().getSecret());\n        }\n\n        onView(withId(R.id.text_secret)).perform(typeText(secret), closeSoftKeyboard());\n\n        if (entry.getInfo() instanceof YandexInfo) {\n            String pin = \"123456\";\n            ((YandexInfo) entry.getInfo()).setPin(pin);\n            onView(withId(R.id.text_pin)).perform(typeText(pin), closeSoftKeyboard());\n        } else if (entry.getInfo() instanceof MotpInfo) {\n            String pin = \"1234\";\n            ((MotpInfo) entry.getInfo()).setPin(pin);\n            onView(withId(R.id.text_pin)).perform(typeText(pin), closeSoftKeyboard());\n        }\n\n        onView(withId(R.id.action_save)).perform(click());\n    }\n}\n"
  },
  {
    "path": "app/src/androidTest/java/com/beemdevelopment/aegis/PanicTriggerTest.java",
    "content": "package com.beemdevelopment.aegis;\n\nimport static org.junit.Assert.assertFalse;\nimport static org.junit.Assert.assertThrows;\nimport static org.junit.Assert.assertTrue;\n\nimport android.content.Intent;\n\nimport androidx.test.ext.junit.runners.AndroidJUnit4;\nimport androidx.test.filters.SmallTest;\nimport androidx.test.rule.ActivityTestRule;\n\nimport com.beemdevelopment.aegis.ui.PanicResponderActivity;\nimport com.beemdevelopment.aegis.vault.VaultRepository;\n\nimport org.junit.Before;\nimport org.junit.Test;\nimport org.junit.runner.RunWith;\n\nimport dagger.hilt.android.testing.HiltAndroidTest;\n\n@RunWith(AndroidJUnit4.class)\n@HiltAndroidTest\n@SmallTest\npublic class PanicTriggerTest extends AegisTest {\n    @Before\n    public void before() {\n        initEncryptedVault();\n    }\n\n    @Test\n    public void testPanicTriggerDisabled() {\n        assertFalse(_prefs.isPanicTriggerEnabled());\n        assertTrue(_vaultManager.isVaultLoaded());\n        launchPanic();\n        assertTrue(_vaultManager.isVaultLoaded());\n        _vaultManager.getVault();\n        assertTrue(VaultRepository.fileExists(getApp()));\n    }\n\n    @Test\n    public void testPanicTriggerEnabled() {\n        _prefs.setIsPanicTriggerEnabled(true);\n        assertTrue(_prefs.isPanicTriggerEnabled());\n        assertTrue(_vaultManager.isVaultLoaded());\n        launchPanic();\n        assertFalse(_vaultManager.isVaultLoaded());\n        assertThrows(IllegalStateException.class, () -> _vaultManager.getVault());\n        assertFalse(VaultRepository.fileExists(getApp()));\n    }\n\n    private void launchPanic() {\n        Intent intent = new Intent(PanicResponderActivity.PANIC_TRIGGER_ACTION);\n        // we need to use the deprecated ActivityTestRule class because of https://github.com/android/android-test/issues/143\n        ActivityTestRule<PanicResponderActivity> rule = new ActivityTestRule<>(PanicResponderActivity.class);\n        rule.launchActivity(intent);\n    }\n}\n"
  },
  {
    "path": "app/src/androidTest/java/com/beemdevelopment/aegis/rules/ScreenshotTestRule.java",
    "content": "package com.beemdevelopment.aegis.rules;\n\nimport android.graphics.Bitmap;\n\nimport androidx.test.runner.screenshot.BasicScreenCaptureProcessor;\nimport androidx.test.runner.screenshot.ScreenCapture;\nimport androidx.test.runner.screenshot.ScreenCaptureProcessor;\nimport androidx.test.runner.screenshot.Screenshot;\n\nimport org.junit.rules.TestWatcher;\nimport org.junit.runner.Description;\n\nimport java.io.IOException;\nimport java.util.HashSet;\n\npublic class ScreenshotTestRule extends TestWatcher {\n    @Override\n    protected void failed(Throwable e, Description description) {\n        super.failed(e, description);\n\n        String filename = description.getTestClass().getSimpleName() + \"-\" + description.getMethodName();\n\n        ScreenCapture capture = Screenshot.capture();\n        capture.setName(filename);\n        capture.setFormat(Bitmap.CompressFormat.PNG);\n\n        HashSet<ScreenCaptureProcessor> processors = new HashSet<>();\n        processors.add(new BasicScreenCaptureProcessor());\n\n        try {\n            capture.process(processors);\n        } catch (IOException e2) {\n            e.printStackTrace();\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/androidTest/java/com/beemdevelopment/aegis/vault/VaultRepositoryTest.java",
    "content": "package com.beemdevelopment.aegis.vault;\n\nimport static org.junit.Assert.assertEquals;\nimport static org.junit.Assert.assertFalse;\nimport static org.junit.Assert.assertNotNull;\nimport static org.junit.Assert.assertNull;\nimport static org.junit.Assert.assertTrue;\n\nimport androidx.test.ext.junit.runners.AndroidJUnit4;\nimport androidx.test.filters.SmallTest;\n\nimport com.beemdevelopment.aegis.AegisTest;\nimport com.beemdevelopment.aegis.vault.slots.PasswordSlot;\n\nimport org.junit.Before;\nimport org.junit.Test;\nimport org.junit.runner.RunWith;\n\nimport dagger.hilt.android.testing.HiltAndroidTest;\n\n@RunWith(AndroidJUnit4.class)\n@HiltAndroidTest\n@SmallTest\npublic class VaultRepositoryTest extends AegisTest {\n    @Before\n    public void before() {\n        initEncryptedVault();\n    }\n\n    @Test\n    public void testToggleEncryption() throws VaultRepositoryException {\n        VaultRepository vault = _vaultManager.getVault();\n        _vaultManager.disableEncryption();\n        assertFalse(vault.isEncryptionEnabled());\n        assertNull(vault.getCredentials());\n\n        VaultFileCredentials creds = generateCredentials();\n        _vaultManager.enableEncryption(creds);\n        assertTrue(vault.isEncryptionEnabled());\n        assertNotNull(vault.getCredentials());\n        assertEquals(vault.getCredentials().getSlots().findAll(PasswordSlot.class).size(), 1);\n    }\n}\n"
  },
  {
    "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\n    <uses-permission android:name=\"android.permission.CAMERA\" />\n    <uses-permission android:name=\"android.permission.USE_BIOMETRIC\" />\n    <uses-permission android:name=\"android.permission.VIBRATE\" />\n    <uses-permission android:name=\"android.permission.RECEIVE_BOOT_COMPLETED\" />\n\n    <!-- NOTE: Disabled for now. See issue: #1047\n    <uses-permission android:name=\"android.permission.POST_NOTIFICATIONS\" />\n    -->\n\n    <uses-feature\n        android:name=\"android.hardware.camera\"\n        android:required=\"false\" />\n    <uses-feature\n        android:name=\"android.hardware.camera.autofocus\"\n        android:required=\"false\" />\n\n    <application\n        android:name=\".AegisApplication\"\n        android:allowBackup=\"true\"\n        android:fullBackupOnly=\"true\"\n        android:fullBackupContent=\"@xml/backup_rules_old\"\n        android:dataExtractionRules=\"@xml/backup_rules\"\n        android:backupAgent=\".AegisBackupAgent\"\n        android:enableOnBackInvokedCallback=\"true\"\n        android:icon=\"@mipmap/${iconName}\"\n        android:label=\"Aegis\"\n        android:supportsRtl=\"true\"\n        android:largeHeap=\"true\"\n        android:theme=\"@style/Theme.Aegis.Launch\"\n        tools:targetApi=\"tiramisu\">\n        <activity android:name=\".ui.TransferEntriesActivity\"\n            android:label=\"@string/title_activity_transfer\" />\n        <activity\n            android:name=\".ui.AboutActivity\"\n            android:label=\"@string/title_activity_about\" />\n        <activity\n            android:name=\".ui.ImportEntriesActivity\"\n            android:label=\"@string/title_activity_import_entries\" />\n        <activity\n            android:name=\".ui.MainActivity\"\n            android:exported=\"true\"\n            android:label=\"${title}\">\n            <intent-filter>\n                <action android:name=\"android.intent.action.MAIN\" />\n\n                <category android:name=\"android.intent.category.LAUNCHER\" />\n            </intent-filter>\n            <intent-filter>\n                <action android:name=\"android.intent.action.VIEW\" />\n\n                <category android:name=\"android.intent.category.DEFAULT\" />\n                <category android:name=\"android.intent.category.BROWSABLE\" />\n\n                <data android:scheme=\"otpauth\" />\n            </intent-filter>\n            <intent-filter>\n                <action android:name=\"android.intent.action.SEND\" />\n                <action android:name=\"android.intent.action.SEND_MULTIPLE\" />\n                <category android:name=\"android.intent.category.DEFAULT\" />\n                <data android:mimeType=\"image/*\" />\n                <data android:mimeType=\"text/plain\" />\n            </intent-filter>\n        </activity>\n        <activity\n            android:name=\".ui.ScannerActivity\"\n            android:configChanges=\"keyboardHidden|orientation|screenSize\"\n            android:label=\"@string/title_activity_scan_qr\"\n            android:screenOrientation=\"portrait\" />\n        <activity\n            android:name=\".ui.EditEntryActivity\"\n            android:label=\"@string/title_activity_edit_entry\" />\n        <activity\n            android:name=\".ui.IntroActivity\"\n            android:screenOrientation=\"portrait\" />\n        <activity\n            android:name=\".ui.AuthActivity\" />\n        <activity\n            android:name=\".ui.PreferencesActivity\"\n            android:label=\"@string/title_activity_preferences\" />\n        <activity\n            android:name=\".ui.GroupManagerActivity\"\n            android:label=\"@string/title_activity_manage_groups\" />\n        <activity android:name=\".ui.AssignIconsActivity\"\n            android:label=\"@string/title_activity_assign_icons\"/>\n        <activity android:name=\".ui.LicensesActivity\"\n            android:label=\"@string/title_activity_licenses\"/>\n        <activity\n            android:name=\".ui.PanicResponderActivity\"\n            android:exported=\"true\"\n            android:launchMode=\"singleInstance\"\n            android:noHistory=\"true\"\n            android:theme=\"@android:style/Theme.NoDisplay\">\n            <intent-filter>\n                <action android:name=\"info.guardianproject.panic.action.TRIGGER\" />\n                <category android:name=\"android.intent.category.DEFAULT\" />\n            </intent-filter>\n        </activity>\n        <activity android:name=\".ui.ExitActivity\" />\n\n        <!-- NOTE: Disabled for now. See issue: #1047\n        <service android:name=\".services.NotificationService\" />\n        -->\n\n        <service\n            android:name=\".services.LaunchAppTileService\"\n            android:label=\"@string/tile_open_vault\"\n            android:icon=\"@drawable/ic_aegis_quicksettings\"\n            android:permission=\"android.permission.BIND_QUICK_SETTINGS_TILE\"\n            android:exported=\"true\">\n            <intent-filter>\n                <action android:name=\"android.service.quicksettings.action.QS_TILE\" />\n            </intent-filter>\n            <meta-data android:name=\"android.service.quicksettings.ACTIVE_TILE\"\n                android:value=\"true\" />\n        </service>\n\n        <service\n            android:name=\".services.LaunchScannerTileService\"\n            android:label=\"@string/tile_open_scanner\"\n            android:icon=\"@drawable/ic_aegis_quicksettings\"\n            android:permission=\"android.permission.BIND_QUICK_SETTINGS_TILE\"\n            android:exported=\"true\">\n            <intent-filter>\n                <action android:name=\"android.service.quicksettings.action.QS_TILE\" />\n            </intent-filter>\n            <meta-data android:name=\"android.service.quicksettings.ACTIVE_TILE\"\n                android:value=\"true\" />\n        </service>\n\n        <receiver android:name=\".receivers.VaultLockReceiver\" android:exported=\"false\">\n            <intent-filter>\n                <action android:name=\"${applicationId}.LOCK_VAULT\" />\n            </intent-filter>\n        </receiver>\n\n        <receiver\n            android:name=\".receivers.QsTileRefreshReceiver\"\n            android:exported=\"false\">\n            <intent-filter>\n                <action android:name=\"android.intent.action.BOOT_COMPLETED\" />\n                <action android:name=\"android.intent.action.USER_UNLOCKED\" />\n            </intent-filter>\n        </receiver>\n\n        <provider\n            android:name=\"androidx.core.content.FileProvider\"\n            android:authorities=\"${fileProviderAuthority}\"\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            </meta-data>\n        </provider>\n\n        <meta-data android:name=\"android.webkit.WebView.MetricsOptOut\" android:value=\"true\" />\n    </application>\n\n    <queries>\n        <package android:name=\"com.stratumauth.app\" />\n        <package android:name=\"com.authy.authy\" />\n        <package android:name=\"org.fedorahosted.freeotp\" />\n        <package android:name=\"org.liberty.android.freeotpplus\" />\n        <package android:name=\"com.google.android.apps.authenticator2\" />\n        <package android:name=\"com.azure.authenticator\" />\n        <package android:name=\"com.valvesoftware.android.steam.community\" />\n        <package android:name=\"com.authenticator.authservice2\" />\n        <package android:name=\"com.duosecurity.duomobile\" />\n        <package android:name=\"com.blizzard.messenger\" />\n    </queries>\n\n</manifest>\n"
  },
  {
    "path": "app/src/main/assets/changelog.html",
    "content": "<html>\n    <head>\n        <style type=\"text/css\">\n            * {\n            word-wrap: break-word;\n            }\n            body {\n                background-color: %1$s;\n                color: %2$s;\n            }\n            ul {\n                list-style-position: inside;\n                padding: 0;\n                padding-left: 5px;\n                margin-bottom: 5px;\n            }\n            li {\n                padding-bottom: 8px;\n                list-style-position: outside;\n                margin-left: 1em;\n            }\n            h4 {\n                margin-top: 0px;\n                margin-bottom: 0px;\n            }\n            h3 {\n                margin-bottom: 7px;\n                padding-top: 7px;\n            }\n        </style>\n    </head>\n    <body>\n        <div></div>\n        <h3>Version 3.4.2</h3>\n        <p>\n            This version fixes the quick settings tile staying inactive permanently after upgrading to Android 16.\n        </p>\n        <h4>New</h4>\n        <ul>\n            <li>Redesigned FAB menu</li>\n            <li>Ability to import otpauth uri from clipboard</li>\n        </ul>\n        <h4>Fixes</h4>\n        <ul>\n            <li>Fix quick settings tile state</li>\n            <li>Disable autofill services in 'Edit Entry' screen to avoid accidental overwriting master password</li>\n            <li>Inverted positions of buttons in 'Select Group' dialog</li>\n            <li>Remove redundant padding in tiles view</li>\n        </ul>\n        <h3>Version 3.4.1</h3>\n        <h4>New</h4>\n        <ul>\n            <li>Support for importing from Proton Authenticator</li>\n        </ul>\n        <h4>Fixes</h4>\n        <ul>\n            <li>The autofill service would show a prompt to save the PIN as a password</li>\n        </ul>\n        <h3>Version 3.4</h3>\n        <h4>New</h4>\n        <ul>\n            <li>Haptic feedback when an entry is about to expire</li>\n            <li>Brightness increase is now toggleable in the entry transfer view</li>\n            <li>Filter on multiple groups simultaneously</li>\n            <li>Color contrast on hidden codes has been improved</li>\n            <li>Prompt before the user is about to save an entry with a duplicate name/issuer combination</li>\n            <li>New languages: Estonian, Korean, Malayalam, Norwegian (Bokmål) and Serbian</li>\n        </ul>\n        <h4>Fixes</h4>\n        <ul>\n            <li>A crash could occur if an entry with period 7 exists and code expiry indication is enabled</li>\n            <li>The Portuguese (Brazilian) locale was used even if Portuguese was configured</li>\n            <li>FreeOTP import would fail if the algorithm or digits field was not specified for an entry</li>\n            <li>The divider between entries would be missing in certain filter configurations</li>\n            <li>The snackbar in try entry importing view could obstruct the name of an entry</li>\n        </ul>\n        <h4>Miscellaneous</h4>\n        <ul>\n            <li>Android 6 or newer is now required the run the app</li>\n        </ul>\n        <h3>Version 3.3.4</h3>\n        <h4>Fixes</h4>\n        <ul>\n            <li>Icons are now resized to 512x512 to reduce the size of the vault file and to reduce the chance of encountering out of memory conditions</li>\n        </ul>\n        <h3>Version 3.3.3</h3>\n        <h4>Fixes</h4>\n        <ul>\n            <li>Some users ran into out of memory conditions due to large icons in their vault file. We've introduced a temporary measure that should help in most cases, but we'll follow up with a more comprehensive fix soon.</li>\n            <li>Window insets were not always applied correctly, causing parts of the UI to appear off-screen</li>\n            <li>The 2FAS importer did not tolerate spaces for secrets and was not always able to extract the issuer</li>\n        </ul>\n        <h3>Version 3.3.2</h3>\n        <h4>New</h4>\n        <ul>\n            <li>Find entries by searching in multiple fields simultaneously</li>\n        </ul>\n        <h4>Fixes</h4>\n        <ul>\n            <li>Entries would not actually be added to the Aegis vault in some cases when importing from Google Authenticator export QR codes</li>\n            <li>The lock button was sometimes shown for unencrypted vaults</li>\n            <li>The sort category menu item did not always reflect the current sorting</li>\n            <li>The next code was not always easy to read because its color had low contrast with the background</li>\n            <li>Entry selection was not cancelled when changing the group filter</li>\n        </ul>\n        <h3>Version 3.3.1</h3>\n        <h4>Fixes</h4>\n        <ul>\n            <li>Codes were not shown in case the tiles view mode was combined with hidden account names</li>\n        </ul>\n        <h3>Version 3.3</h3>\n        <h4>New</h4>\n        <ul>\n            <li>Significant improvements to group filtering\n                <ul>\n                    <li>Groups can now be filtered on straight from the main view instead of through a dialog</li>\n                    <li>Ability to assign multiple entries to a group in one go</li>\n                    <li>Support for reordering groups</li>\n                </ul>\n            </li>\n            <li>Codes now change color when they're about to expire</li>\n            <li>Option to show the next code ahead of time</li>\n            <li>Support for backing up to a single file (This enables support for more cloud providers, such as Google Drive)</li>\n            <li>Various minor improvements to make QR code exports easier to scan</li>\n            <li>Support for importing from Ente Auth</li>\n            <li>Support for importing FreeOTP 2 backups</li>\n            <li>Updated translations</li>\n        </ul>\n        <h4>Fixes</h4>\n        <ul>\n            <li>QR codes exported for Google Authenticator could not be scanned on iOS</li>\n            <li>The code would be copied after a single tap in case \"Tap to reveal\" and \"Copy tokens to the clipboard\" were enabled simultaneously</li>\n            <li>Various other minor UI, stability and performance improvements</li>\n        </ul>\n        <h3>Version 3.2</h3>\n        <h4>New</h4>\n        <ul>\n            <li>The ability to add a single entry to multiple groups</li>\n            <li>Option to keep an infinite number of backups</li>\n            <li>Option to customize which fields to search for in entries</li>\n            <li>Allow hiding entry names in the tiled view mode</li>\n        </ul>\n        <h4>Fixes</h4>\n        <ul>\n            <li>With \"Tap to reveal\" enabled, the size of the shown dots would not be consistent with the size of the code digits, on some devices</li>\n            <li>After importing a backup, the UI would in some cases incorrectly claim that biometric unlock is enabled</li>\n            <li>The export dialog was not fully visible on some devices</li>\n            <li>Various other minor UI, stability and performance improvements</li>\n        </ul>\n        <h3>Version 3.1.1</h3>\n        <h4>Fixes</h4>\n        <p>\n            A recent Android Pixel update introduced a bug causing Aegis to sometimes show a black screen after unlocking the vault.\n            We have reported this issue to the Google Issue Tracker (<a href=\"https://issuetracker.google.com/issues/352963108\">link</a>) and\n            are awaiting a response from Google. In the meantime, we have implemented a workaround that eliminates this bug.\n        </p>\n        <ul>\n            <li>Group filter now gets applied properly upon unlocking the vault</li>\n            <li>Advanced entry settings now gets shown correctly</li>\n            <li>Keyboard when searching for entries now gets hidden when the user starts scrolling through the list</li>\n        </ul>\n        <h3>Version 3.1</h3>\n        <h4>New</h4>\n        <ul>\n            <li>A new audit log has been added to check all important events that occurred in your vault</li>\n            <li>Added the ability to rename groups</li>\n        </ul>\n        <h4>Fixes</h4>\n        <ul>\n            <li>Group selection will now be remembered again upon launch</li>\n            <li>Various UI improvements</li>\n            <li>Stability fixes</li>\n        </ul>\n        <h3>Version 3.0.1</h3>\n        <h4>New</h4>\n        <ul>\n            <li>Support for importing from the new Battle.net app</li>\n        </ul>\n        <h4>Fixes</h4>\n        <ul>\n            <li>Visual glitches when AMOLED theme was used on old Android versions</li>\n            <li>Minor UI improvements</li>\n        </ul>\n        <h3>Version 3.0</h3>\n        <h4>New</h4>\n        <ul>\n            <li>Material 3 (and Material You)</li>\n            <li>Automatic assignment of icons to entries</li>\n            <li>Ability to select all entries in one go</li>\n            <li>Support for importing 2FAS schema v4 backups</li>\n            <li>Sort entries based on the last time they were used</li>\n            <li>Some clarifications related to importing and backup permission errors</li>\n            <li>Preparations for the ability to assign a single entry to multiple groups</li>\n            <li>Performance improvements when scrolling through an entry list with lots of icons</li>\n            <li>A new look for the third-party licenses list</li>\n        </ul>\n        <h4>Fixes</h4>\n        <ul>\n            <li>Directly importing from Authy using root would fail</li>\n            <li>Minor glitches related to animation duration scale settings</li>\n            <li>Various stability improvements</li>\n        </ul>\n        <h3>Version 2.2.2</h3>\n        <h4>New</h4>\n        <ul>\n            <li>An optional name field for icon packs to bypass filename character restrictions</li>\n        </ul>\n        <h4>Fixes</h4>\n        <ul>\n            <li>The Authenticator Pro importer only supported the legacy backup format</li>\n            <li>A crash could occur in the tile service</li>\n        </ul>\n        <h3>Version 2.2.1</h3>\n        <h4>New</h4>\n        <ul>\n            <li>Ability to automatically skip potential duplicates when importing entries</li>\n        </ul>\n        <h4>Fixes</h4>\n        <ul>\n            <li>Biometrics button on the unlock screen was unresponsive</li>\n        </ul>\n        <h3>Version 2.2</h3>\n        <h4>New</h4>\n        <ul>\n            <li>Authenticator Pro encrypted import support</li>\n            <li>Ability to change account name position</li>\n            <li>A new dialog explaining how our password reminder works</li>\n            <li>Ability to change copy behavior</li>\n            <li>Ability to only show account names when necessary</li>\n            <li>New view mode: Tiles/Grid</li>\n            <li>Added translation: Dutch (Frysian)</li>\n            <li>Updated translations</li>\n        </ul>\n        <h4>Fixes</h4>\n        <ul>\n            <li>Deleting an entry while a search filter is active now shows the correct state</li>\n            <li>Aegis now fully respects system animation settings</li>\n        </ul>\n        <h3>Version 2.1.3</h3>\n        <h4>New</h4>\n        <ul>\n            <li>Option to disable the backup reminder</li>\n            <li>Improved group selection dropdown during vault export</li>\n            <li>New translation: Hebrew</li>\n            <li>Updated translations</li>\n        </ul>\n        <h4>Fixes</h4>\n        <ul>\n            <li>A crash could occur because a Toast was incorrectly created</li>\n        </ul>\n        <h3>Version 2.1.2</h3>\n        <h4>Fixes</h4>\n        <ul>\n            <li>A crash could occur when changing an entry in such a way that it is filtered out from the entry list</li>\n        </ul>\n        <h3>Version 2.1.1</h3>\n        <h4>New</h4>\n        <ul>\n            <li>An option to export the vault as an HTML file</li>\n            <li>Support for importing from Battle.net Authenticator (root required)</li>\n            <li>An option to hide entry icons</li>\n            <li>An option to only include certain groups in an export</li>\n            <li>Copying a token now takes a second tap if tap to reveal is enabled</li>\n            <li>The ability to copy the URI when transferring entries through QR codes</li>\n            <li>Updated translations</li>\n        </ul>\n        <h4>Fixes</h4>\n        <ul>\n            <li>The lock notification would remain after locking the vault in certain cases. For now, we've disabled the notification entirely.</li>\n            <li>Making changes to an entry while having one or more favorited entries in the vault could result in buggy ordering</li>\n            <li>Tapping to the reveal a token could increase the height of the entry in certain view modes on recent Android versions</li>\n            <li>The backup reminder was unclear about when the last successful backup took place</li>\n            <li>Users could accidentally select MD5 as the hash algorithm for non-mOTP entry types, causing crashes at seemingly random intervals. Any users who have gotten themselves into this situation will see these bad entries get reset to SHA1.</li>\n            <li>Importing from certain apps would cause a crash if an empty password was entered</li>\n            <li>The andOTP importer could hang indefinitely if the user accidentally selected a non-andOTP file.</li>\n            <li>Various other stability improvements</li>\n        </ul>\n        <h3>Version 2.1</h3>\n        <h4>New</h4>\n        <ul>\n            <li>Support for mOTP</li>\n            <li>Support for Yandex OTP (Experimental)</li>\n            <li>An Adaptive Icon for Material You</li>\n            <li>Ability to favorite certain entries and pin them to the top of the entry list</li>\n            <li>Ability to filter by entries that are not in a group</li>\n            <li>Ability to set a separate password that is used for encrypting backups and exports</li>\n            <li>Support for predictive back gesture</li>\n            <li>Improved overview of backup status in preferences</li>\n            <li>Additional options for code digit grouping</li>\n            <li>Support for importing from Duo</li>\n            <li>Support for importing from Bitwarden</li>\n            <li>Support for importing multiple QR code images in one go</li>\n            <li>Support for scanning Google Authenticator export QR codes from image files</li>\n            <li>Display some extra information in the dialog displayed when deleting an entry</li>\n            <li>An option to export through Google Authenticator export QR code images</li>\n            <li>An option to import an existing vault file from the first page in the intro</li>\n            <li>An option to minimize the app after copying a token</li>\n            <li>A count of the total number of entries is displayed at the bottom of the entry list</li>\n            <li>A backup reminder is shown if changes were made to the vault, but no backup or export has been created yet since then</li>\n            <li>A warning is shown after a plaintext export has been made</li>\n            <li>An option to focus search immediately after the app starts</li>\n            <li>Allow customization of the frequency of the password reminder</li>\n            <li>Allow sharing text to Aegis in the format of a Google Authenticator URI to add as a new entry</li>\n            <li>Always allow D2D (device-to-device) Android backups regardless of backup settings</li>\n            <li>Mark clipboard data as sensitive when copying tokens so that Android will mask them in the UI</li>\n            <li>Updated translations for almost all languages</li>\n            <li>New languages: Asturian, Catalan, Galician</li>\n        </ul>\n        <h4>Fixes</h4>\n        <ul>\n            <li>Various reliability improvements for the QR code scanner</li>\n            <li>The floating action button was glitchy when making small entry list scroll movements</li>\n            <li>The vault unlocked notification was never shown and was still using the old app icon</li>\n            <li>The automatically generated entry icon was broken if the entry name/issuer is a multi-codepoint character (certain emoji's, for example)</li>\n            <li>The PIN keyboard was not disabled after enabling encryption</li>\n            <li>The password prompt message was unclear when importing from a file</li>\n            <li>The entry list was not sorted correctly if a change to an entry caused its location to change</li>\n            <li>Quickly double-tapping on the copy button would cause a crash</li>\n            <li>Importing an entry with an empty secret would cause a crash loop</li>\n            <li>On certain devices, it was not possible to import icon packs because the .ZIP files would be grayed out</li>\n            <li>An unclear error message was shown when trying to import from Steam and Google Authenticator</li>\n            <li>Various other minor UI and stability improvements</li>\n        </ul>\n        <h3>Version 2.0.3</h3>\n        <h4>New</h4>\n        <ul>\n            <li>Support for importing 2FAS Authenticator's new backup format</li>\n        </ul>\n        <h3>Version 2.0.2</h3>\n        <h4>New</h4>\n        <ul>\n            <li>Add a note field to entries</li>\n            <li>An option to pause code updating of highlighted entries</li>\n            <li>New translation: Lithuanian</li>\n        </ul>\n        <h4>Fixes</h4>\n        <ul>\n            <li>Minor UI and stability improvements</li>\n            <li>The Microsoft Authenticator importer did not accept spaces and dashes in secrets</li>\n        </ul>\n        <h3>Version 2.0.1</h3>\n        <h4>New</h4>\n        <ul>\n            <li>Support for sorting on most used tokens</li>\n            <li>Some minor UX and stability improvements</li>\n            <li>New translation: Vietnamese</li>\n        </ul>\n        <h4>Fixes</h4>\n        <ul>\n            <li>QR code information was decoded incorrectly in some cases if the app was set to a certain language (Turkish, for example)</li>\n        </ul>\n        <h3>Version 2.0</h3>\n        <h4>New</h4>\n        <ul>\n            <li>Support for icon packs</li>\n            <li>Support for participation in Android's backup system (Google Drive, Seedvault)</li>\n            <li>UI refresh (switched to the Material Components theme)</li>\n            <li>Bottom sheet with chips to filter on groups</li>\n            <li>Support for importing from 2FAS Authenticator</li>\n            <li>Search in account names by default (and remove the setting)</li>\n            <li>Replaced the FAB with a bottom sheet dialog</li>\n            <li>Reorganization of settings into separate categories</li>\n            <li>Ability to 'share' images of QR codes to scan in Aegis</li>\n            <li>Option to save the current group filter</li>\n            <li>New translations for Bulgarian, Danish, Latvian, Swedish and Ukranian</li>\n        </ul>\n        <h4>Fixes</h4>\n        <ul>\n            <li>The QR code scanner had trouble detecting QR codes on some devices due to low resolution image capture</li>\n            <li>The app would vanish from the recent apps list after locking</li>\n            <li>When importing from Nextcloud, Aegis would report that the file could not be found.</li>\n            <li>The biometrics prompt would not appear on some devices</li>\n            <li>The app would lock when selecting a file/icon on certain devices and configurations</li>\n            <li>There were multiple layout issues on small screen devices</li>\n            <li>Various other usability, performance and stability improvements</li>\n        </ul>\n        <h3>Version 1.4.2</h3>\n        <h4>Fixes</h4>\n        <ul>\n            <li>The app would crash if DocumentsUI is not present on the device</li>\n            <li>The app would close when selecting an icon if auto lock on minimize was enabled</li>\n            <li>Importing from Authy was flaky for entries that have an icon</li>\n            <li>The dark theme was not properly applied to the QR code scanner view</li>\n            <li>The app would crash on plain text export on some devices</li>\n            <li>Importing from Authenticator Plus stopped working</li>\n        </ul>\n        <h3>Version 1.4.1</h3>\n        <h4>Fixes</h4>\n        <ul>\n            <li>Scanning QR codes stopped working on certain devices (primarily OnePlus)</li>\n        </ul>\n        <h3>Version 1.4</h3>\n        <h4>New</h4>\n        <ul>\n            <li>Optionally delete the vault if a panic trigger is received from Ripple</li>\n            <li>More customizable auto-lock</li>\n            <li>More flexible export options\n                <ul>\n                    <li>Share mechanism</li>\n                    <li>Offer to encrypt even if this feature is disabled in the app</li>\n                    <li>Export to a Google Authenticator URI file</li>\n                </ul>\n            </li>\n            <li>Perform exports/backups on a background thread (automatic backups now work with Nextcloud)</li>\n            <li>Color improvements to the dark theme (slightly darker)</li>\n            <li>Offer more locations to select an image/icon from</li>\n            <li>Display some helpful information when importing from a different app</li>\n            <li>Minimum tap to reveal timeout changed to 1 second</li>\n            <li>After an entry is added, scroll to it and highlight it</li>\n            <li>Updated translations, and new translations for: Basque, Chinese Traditional, Hindi, Indonesian, Japanese, Persian, Romanian, Slovak</li>\n        </ul>\n        <h4>Fixes</h4>\n        <ul>\n            <li>Scanning large images for QR codes would fail</li>\n            <li>The FAB would remain hidden under certain circumstances</li>\n            <li>The app would crash if an entry was added to the vault twice due to an IO error</li>\n            <li>The app would crash if the device was rotated while a progress dialog was shown</li>\n            <li>The PIN keyboard would show even if a new non-digit password was set</li>\n            <li>The password reminder popup would be occluded by the autofill popup</li>\n            <li>Importing from other apps on Android 11 was broken due to some permission issues</li>\n        </ul>\n        <h3>Version 1.3</h3>\n        <h4>New</h4>\n        <ul>\n            <li>Completely rewritten intro/onboarding</li>\n            <li>Option to show a PIN keyboard when unlocking Aegis</li>\n            <li>A password strength meter when setting up encryption (based on zxcvbn)</li>\n            <li>RTL support</li>\n            <li>Arabic and Portuguese translations</li>\n            <li>Updates to existing translations</li>\n        </ul>\n        <h4>Fixes</h4>\n        <ul>\n            <li>Better lifecycle handling of the biometric authentication prompt</li>\n            <li>The filename of exported vaults had a double .json extension</li>\n            <li>The navigation bar color was incorrect on devices pre API 27</li>\n            <li>QR code scanner performance and stability improvements</li>\n            <li>Various other small usability and stability improvements</li>\n        </ul>\n        <h3>Version 1.2.1</h3>\n        <h4>Fixes</h4>\n        <ul>\n            <li>Fix a rare issue where the intro could end up in a bad state</li>\n        </ul>\n        <h3>Version 1.2</h3>\n        <h4>New</h4>\n        <ul>\n            <li>Add navigation bar color to themes</li>\n            <li>Add support for importing from TOTP Authenticator</li>\n            <li>Add support for importing from Microsoft Authenticator</li>\n            <li>Add support for importing from Authenticator Plus</li>\n            <li>Add support for importing a plain text Google Authenticator URI file</li>\n            <li>Add support for importing from the new Google Authenticator export QR codes</li>\n            <li>Add support for otpauth://steam URI's</li>\n            <li>Add an option to copy tokens on tap (and disable it by default)</li>\n            <li>Improve method to notify users on copy</li>\n            <li>Add support for backups</li>\n            <li>Improve multiselect flow</li>\n            <li>Automatically adapt to system theme</li>\n            <li>Add setting to change from 3 digit group size to 2 digit group size</li>\n            <li>Use most frequent period to show progress</li>\n            <li>Append a timestamp to the filename of exported vaults</li>\n            <li>Add Hungarian translation</li>\n            <li>Add Turkish translation</li>\n            <li>Display a warning if automatic time sync is not enabled</li>\n            <li>Minor card entry layout overhaul</li>\n            <li>Ability to transfer tokens with qr codes</li>\n            <li>Lockscreen overhaul</li>\n        </ul>\n        <h4>Fixes</h4>\n        <ul>\n            <li>Improve overall exception handling and error feedback to the user</li>\n            <li>Improve icon editing flow</li>\n            <li>Protect writes of the vault file against corruption with AtomicFile</li>\n            <li>Make the parsing logic of the QR code URI more robust</li>\n            <li>Importing from Authy now asks for password if needed</li>\n            <li>Update Russian localization</li>\n            <li>Increase password reminder period to 30 days</li>\n            <li>Fix importing andOTP backups with more than 10000 PBKDF iterations</li>\n            <li>Respect the global animator duration scale setting</li>\n        </ul>\n        <p>Various other minor improvements</p>\n        <h3>Version 1.1.4</h3>\n        <h4>Fixes</h4>\n        <ul>\n            <li>The export filename was missing the \".json\" extension in some cases</li>\n        </ul>\n        <h3>Version 1.1.3</h3>\n        <h4>New</h4>\n        <ul>\n            <li>Password reminder for users who use biometric unlock</li>\n        </ul>\n        <h4>Fixes</h4>\n        <ul>\n            <li>Tokens would not refresh in some rare cases</li>\n        </ul>\n        <h3>Version 1.1.2</h3>\n        <h4>New</h4>\n        <ul>\n            <li>Ability to select multiple entries</li>\n            <li>Ability to select a file location when exporting the vault (including cloud providers like Google Drive)</li>\n            <li>Explanation and warning for the security options</li>\n            <li>Removed external storage permissions</li>\n        </ul>\n        <h3>Version 1.1.1</h3>\n        <h4>Fixes</h4>\n        <ul>\n            <li>Exporting the vault did not work on Android 10</li>\n        </ul>\n        <h3>Version 1.1</h3>\n        <h4>New</h4>\n        <ul>\n            <li>Support for other types of biometric authentication (i.e. Pixel 4 face unlock)</li>\n            <li>Support for importing from WinAuth</li>\n            <li>Support for Chromebooks</li>\n            <li>Option to highlight entries when tapped</li>\n            <li>Filter for ungrouped tokens</li>\n            <li>Ability to search for token account names</li>\n            <li>Simplified Chinese translation (thanks RunningMelos!)</li>\n            <li>Updated translations (thanks to all Crowdin contributers!)</li>\n        </ul>\n        <h4>Fixes</h4>\n        <ul>\n            <li>The behavior of highlighting and revealing entries was inconsistent</li>\n            <li>The changelog dialog didn't work</li>\n            <li>The persistent notification was shown even after the app was killed</li>\n        </ul>\n        <h3>Version 1.0.3</h3>\n        <h4>New</h4>\n        <ul>\n            <li>Support for andOTP's new backup file format</li>\n        </ul>\n        <h3>Version 1.0.2</h3>\n        <h4>Fixes</h4>\n        <ul>\n            <li>Search feature on Huawei devices</li>\n        </ul>\n        <h4>Notes</h4>\n        <ul>\n            <li>Disabled automatic backups through the Google Play Store</li>\n        </ul>\n        <h3>Version 1.0.1</h3>\n        <h4>Notes</h4>\n        <ul>\n            <li>Temporarily disabled search feature on Huawei devices</li>\n        </ul>\n        <h3>Version 1.0</h3>\n        <h4>New</h4>\n        <ul>\n            <li>New icon</li>\n            <li>Overhaul of interaction with the entry list</li>\n            <li>Persistent notification while the vault is unlocked</li>\n            <li>Language override option</li>\n            <li>Support for importing from FreeOTP+</li>\n            <li>Ability to toggle password visibility during unlock</li>\n            <li>Support for deeplinking otpauth URIs</li>\n        </ul>\n        <h4>Fixes</h4>\n        <ul>\n            <li>Bad overall performance and high battery usage</li>\n            <li>Codes with an uneven number of digits are displayed incorrectly</li>\n            <li>Crash when entering a large value for OTP period</li>\n        </ul>\n    </body>\n</html>"
  },
  {
    "path": "app/src/main/assets/license.html",
    "content": "<html>\n    <head>\n        <style type=\"text/css\">\n            body {\n                background-color: %2$s;\n                color: %3$s;\n                font-size: 0.8em;\n            }\n        </style>\n    </head>\n    <body>\n        <pre>%1$s</pre>\n    </body>\n</html>\n"
  },
  {
    "path": "app/src/main/java/com/amulyakhare/textdrawable/LICENSE",
    "content": "The MIT License (MIT)\n\nCopyright (c) 2014 Amulya Khare\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\n"
  },
  {
    "path": "app/src/main/java/com/amulyakhare/textdrawable/TextDrawable.java",
    "content": "package com.amulyakhare.textdrawable;\n\nimport android.graphics.*;\nimport android.graphics.drawable.ShapeDrawable;\nimport android.graphics.drawable.shapes.OvalShape;\nimport android.graphics.drawable.shapes.RectShape;\nimport android.graphics.drawable.shapes.RoundRectShape;\n\n/**\n * @author amulya\n * @datetime 14 Oct 2014, 3:53 PM\n */\npublic class TextDrawable extends ShapeDrawable {\n\n    private final Paint textPaint;\n    private final Paint borderPaint;\n    private static final float SHADE_FACTOR = 0.9f;\n    private final String text;\n    private final int color;\n    private final RectShape shape;\n    private final int height;\n    private final int width;\n    private final int fontSize;\n    private final float radius;\n    private final int borderThickness;\n\n    private TextDrawable(Builder builder) {\n        super(builder.shape);\n\n        // shape properties\n        shape = builder.shape;\n        height = builder.height;\n        width = builder.width;\n        radius = builder.radius;\n\n        // text and color\n        text = builder.toUpperCase ? builder.text.toUpperCase() : builder.text;\n        color = builder.color;\n\n        // text paint settings\n        fontSize = builder.fontSize;\n        textPaint = new Paint();\n        textPaint.setColor(builder.textColor);\n        textPaint.setAntiAlias(true);\n        textPaint.setFakeBoldText(builder.isBold);\n        textPaint.setStyle(Paint.Style.FILL);\n        textPaint.setTypeface(builder.font);\n        textPaint.setTextAlign(Paint.Align.CENTER);\n        textPaint.setStrokeWidth(builder.borderThickness);\n\n        // border paint settings\n        borderThickness = builder.borderThickness;\n        borderPaint = new Paint();\n        borderPaint.setColor(getDarkerShade(color));\n        borderPaint.setStyle(Paint.Style.STROKE);\n        borderPaint.setStrokeWidth(borderThickness);\n\n        // drawable paint color\n        Paint paint = getPaint();\n        paint.setColor(color);\n\n    }\n\n    private int getDarkerShade(int color) {\n        return Color.rgb((int)(SHADE_FACTOR * Color.red(color)),\n                (int)(SHADE_FACTOR * Color.green(color)),\n                (int)(SHADE_FACTOR * Color.blue(color)));\n    }\n\n    @Override\n    public void draw(Canvas canvas) {\n        super.draw(canvas);\n        Rect r = getBounds();\n\n\n        // draw border\n        if (borderThickness > 0) {\n            drawBorder(canvas);\n        }\n\n        int count = canvas.save();\n        canvas.translate(r.left, r.top);\n\n        // draw text\n        int width = this.width < 0 ? r.width() : this.width;\n        int height = this.height < 0 ? r.height() : this.height;\n        int fontSize = this.fontSize < 0 ? (Math.min(width, height) / 2) : this.fontSize;\n        textPaint.setTextSize(fontSize);\n        canvas.drawText(text, width / 2, height / 2 - ((textPaint.descent() + textPaint.ascent()) / 2), textPaint);\n\n        canvas.restoreToCount(count);\n\n    }\n\n    private void drawBorder(Canvas canvas) {\n        RectF rect = new RectF(getBounds());\n        rect.inset(borderThickness/2, borderThickness/2);\n\n        if (shape instanceof OvalShape) {\n            canvas.drawOval(rect, borderPaint);\n        }\n        else if (shape instanceof RoundRectShape) {\n            canvas.drawRoundRect(rect, radius, radius, borderPaint);\n        }\n        else {\n            canvas.drawRect(rect, borderPaint);\n        }\n    }\n\n    @Override\n    public void setAlpha(int alpha) {\n        textPaint.setAlpha(alpha);\n    }\n\n    @Override\n    public void setColorFilter(ColorFilter cf) {\n        textPaint.setColorFilter(cf);\n    }\n\n    @Override\n    public int getOpacity() {\n        return PixelFormat.TRANSLUCENT;\n    }\n\n    @Override\n    public int getIntrinsicWidth() {\n        return width;\n    }\n\n    @Override\n    public int getIntrinsicHeight() {\n        return height;\n    }\n\n    public static IShapeBuilder builder() {\n        return new Builder();\n    }\n\n    public static class Builder implements IConfigBuilder, IShapeBuilder, IBuilder {\n\n        private String text;\n\n        private int color;\n\n        private int borderThickness;\n\n        private int width;\n\n        private int height;\n\n        private Typeface font;\n\n        private RectShape shape;\n\n        public int textColor;\n\n        private int fontSize;\n\n        private boolean isBold;\n\n        private boolean toUpperCase;\n\n        public float radius;\n\n        private Builder() {\n            text = \"\";\n            color = Color.GRAY;\n            textColor = Color.WHITE;\n            borderThickness = 0;\n            width = -1;\n            height = -1;\n            shape = new RectShape();\n            font = Typeface.create(\"sans-serif-light\", Typeface.NORMAL);\n            fontSize = -1;\n            isBold = false;\n            toUpperCase = false;\n        }\n\n        public IConfigBuilder width(int width) {\n            this.width = width;\n            return this;\n        }\n\n        public IConfigBuilder height(int height) {\n            this.height = height;\n            return this;\n        }\n\n        public IConfigBuilder textColor(int color) {\n            this.textColor = color;\n            return this;\n        }\n\n        public IConfigBuilder withBorder(int thickness) {\n            this.borderThickness = thickness;\n            return this;\n        }\n\n        public IConfigBuilder useFont(Typeface font) {\n            this.font = font;\n            return this;\n        }\n\n        public IConfigBuilder fontSize(int size) {\n            this.fontSize = size;\n            return this;\n        }\n\n        public IConfigBuilder bold() {\n            this.isBold = true;\n            return this;\n        }\n\n        public IConfigBuilder toUpperCase() {\n            this.toUpperCase = true;\n            return this;\n        }\n\n        @Override\n        public IConfigBuilder beginConfig() {\n            return this;\n        }\n\n        @Override\n        public IShapeBuilder endConfig() {\n            return this;\n        }\n\n        @Override\n        public IBuilder rect() {\n            this.shape = new RectShape();\n            return this;\n        }\n\n        @Override\n        public IBuilder round() {\n            this.shape = new OvalShape();\n            return this;\n        }\n\n        @Override\n        public IBuilder roundRect(int radius) {\n            this.radius = radius;\n            float[] radii = {radius, radius, radius, radius, radius, radius, radius, radius};\n            this.shape = new RoundRectShape(radii, null, null);\n            return this;\n        }\n\n        @Override\n        public TextDrawable buildRect(String text, int color) {\n            rect();\n            return build(text, color);\n        }\n\n        @Override\n        public TextDrawable buildRoundRect(String text, int color, int radius) {\n            roundRect(radius);\n            return build(text, color);\n        }\n\n        @Override\n        public TextDrawable buildRound(String text, int color) {\n            round();\n            return build(text, color);\n        }\n\n        @Override\n        public TextDrawable build(String text, int color) {\n            this.color = color;\n            this.text = text;\n            return new TextDrawable(this);\n        }\n    }\n\n    public interface IConfigBuilder {\n        public IConfigBuilder width(int width);\n\n        public IConfigBuilder height(int height);\n\n        public IConfigBuilder textColor(int color);\n\n        public IConfigBuilder withBorder(int thickness);\n\n        public IConfigBuilder useFont(Typeface font);\n\n        public IConfigBuilder fontSize(int size);\n\n        public IConfigBuilder bold();\n\n        public IConfigBuilder toUpperCase();\n\n        public IShapeBuilder endConfig();\n    }\n\n    public static interface IBuilder {\n\n        public TextDrawable build(String text, int color);\n    }\n\n    public static interface IShapeBuilder {\n\n        public IConfigBuilder beginConfig();\n\n        public IBuilder rect();\n\n        public IBuilder round();\n\n        public IBuilder roundRect(int radius);\n\n        public TextDrawable buildRect(String text, int color);\n\n        public TextDrawable buildRoundRect(String text, int color, int radius);\n\n        public TextDrawable buildRound(String text, int color);\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/amulyakhare/textdrawable/util/ColorGenerator.java",
    "content": "package com.amulyakhare.textdrawable.util;\n\nimport java.util.Arrays;\nimport java.util.List;\nimport java.util.Random;\n\n/**\n * @author amulya\n * @datetime 14 Oct 2014, 5:20 PM\n */\npublic class ColorGenerator {\n\n    public static ColorGenerator DEFAULT;\n\n    public static ColorGenerator MATERIAL;\n\n    static {\n        DEFAULT = create(Arrays.asList(\n                0xfff16364,\n                0xfff58559,\n                0xfff9a43e,\n                0xffe4c62e,\n                0xff67bf74,\n                0xff59a2be,\n                0xff2093cd,\n                0xffad62a7,\n                0xff805781\n        ));\n        MATERIAL = create(Arrays.asList(\n                0xffe57373,\n                0xfff06292,\n                0xffba68c8,\n                0xff9575cd,\n                0xff7986cb,\n                0xff64b5f6,\n                0xff4fc3f7,\n                0xff4dd0e1,\n                0xff4db6ac,\n                0xff81c784,\n                0xffaed581,\n                0xffff8a65,\n                0xffd4e157,\n                0xffffd54f,\n                0xffffb74d,\n                0xffa1887f,\n                0xff90a4ae\n        ));\n    }\n\n    private final List<Integer> mColors;\n    private final Random mRandom;\n\n    public static ColorGenerator create(List<Integer> colorList) {\n        return new ColorGenerator(colorList);\n    }\n\n    private ColorGenerator(List<Integer> colorList) {\n        mColors = colorList;\n        mRandom = new Random(System.currentTimeMillis());\n    }\n\n    public int getRandomColor() {\n        return mColors.get(mRandom.nextInt(mColors.size()));\n    }\n\n    public int getColor(Object key) {\n        return mColors.get(Math.abs(key.hashCode()) % mColors.size());\n    }\n}"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/AccountNamePosition.java",
    "content": "package com.beemdevelopment.aegis;\n\npublic enum AccountNamePosition {\n    HIDDEN,\n    END,\n    BELOW;\n\n    private static AccountNamePosition[] _values;\n\n    static {\n        _values = values();\n    }\n\n    public static AccountNamePosition fromInteger(int x) {\n        return _values[x];\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/AegisApplication.java",
    "content": "package com.beemdevelopment.aegis;\n\nimport dagger.hilt.android.HiltAndroidApp;\n\n@HiltAndroidApp\npublic class AegisApplication extends AegisApplicationBase {\n\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/AegisApplicationBase.java",
    "content": "package com.beemdevelopment.aegis;\n\nimport android.app.Application;\nimport android.app.NotificationChannel;\nimport android.app.NotificationManager;\nimport android.content.Intent;\nimport android.content.IntentFilter;\nimport android.content.pm.ShortcutInfo;\nimport android.content.pm.ShortcutManager;\nimport android.graphics.drawable.Icon;\nimport android.os.Build;\n\nimport androidx.annotation.NonNull;\nimport androidx.annotation.RequiresApi;\nimport androidx.core.content.ContextCompat;\nimport androidx.lifecycle.Lifecycle;\nimport androidx.lifecycle.LifecycleEventObserver;\nimport androidx.lifecycle.LifecycleOwner;\nimport androidx.lifecycle.ProcessLifecycleOwner;\n\nimport com.beemdevelopment.aegis.receivers.VaultLockReceiver;\nimport com.beemdevelopment.aegis.ui.MainActivity;\nimport com.beemdevelopment.aegis.util.IOUtils;\nimport com.beemdevelopment.aegis.vault.VaultManager;\nimport com.topjohnwu.superuser.Shell;\n\nimport java.util.Collections;\n\nimport dagger.hilt.InstallIn;\nimport dagger.hilt.android.EarlyEntryPoint;\nimport dagger.hilt.android.EarlyEntryPoints;\nimport dagger.hilt.components.SingletonComponent;\n\npublic abstract class AegisApplicationBase extends Application {\n    private static final String CODE_LOCK_STATUS_ID = \"lock_status_channel\";\n\n    private VaultManager _vaultManager;\n\n    static {\n        // Enable verbose libsu logging in debug builds\n        Shell.enableVerboseLogging = BuildConfig.DEBUG;\n    }\n\n    @Override\n    public void onCreate() {\n        super.onCreate();\n        _vaultManager = EarlyEntryPoints.get(this, EntryPoint.class).getVaultManager();\n\n        VaultLockReceiver lockReceiver = new VaultLockReceiver();\n        IntentFilter intentFilter = new IntentFilter(Intent.ACTION_SCREEN_OFF);\n        ContextCompat.registerReceiver(this, lockReceiver, intentFilter, ContextCompat.RECEIVER_NOT_EXPORTED);\n\n        // lock the app if the user moves the application to the background\n        ProcessLifecycleOwner.get().getLifecycle().addObserver(new AppLifecycleObserver());\n\n        // clear the cache directory on startup, to make sure no temporary vault export files remain\n        IOUtils.clearDirectory(getCacheDir(), false);\n\n        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N_MR1) {\n            initAppShortcuts();\n        }\n\n        // NOTE: Disabled for now. See issue: #1047\n        /*if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {\n            initNotificationChannels();\n        }*/\n    }\n\n    @RequiresApi(api = Build.VERSION_CODES.N_MR1)\n    private void initAppShortcuts() {\n        ShortcutManager shortcutManager = getSystemService(ShortcutManager.class);\n        if (shortcutManager == null) {\n            return;\n        }\n\n        Intent intent = new Intent(this, MainActivity.class);\n        intent.putExtra(\"action\", \"scan\");\n        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);\n        intent.setAction(Intent.ACTION_MAIN);\n\n        ShortcutInfo shortcut = new ShortcutInfo.Builder(this, \"shortcut_new\")\n                .setShortLabel(getString(R.string.new_entry))\n                .setLongLabel(getString(R.string.add_new_entry))\n                .setIcon(Icon.createWithResource(this, R.drawable.ic_qr_code))\n                .setIntent(intent)\n                .build();\n\n        shortcutManager.setDynamicShortcuts(Collections.singletonList(shortcut));\n    }\n\n    private void initNotificationChannels() {\n        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {\n            CharSequence name = getString(R.string.channel_name_lock_status);\n            String description = getString(R.string.channel_description_lock_status);\n            int importance = NotificationManager.IMPORTANCE_LOW;\n\n            NotificationChannel channel = new NotificationChannel(CODE_LOCK_STATUS_ID, name, importance);\n            channel.setDescription(description);\n\n            NotificationManager notificationManager = getSystemService(NotificationManager.class);\n            notificationManager.createNotificationChannel(channel);\n        }\n    }\n\n    private class AppLifecycleObserver implements LifecycleEventObserver {\n        @Override\n        public void onStateChanged(@NonNull LifecycleOwner source, @NonNull Lifecycle.Event event) {\n            if (event == Lifecycle.Event.ON_STOP\n                    && _vaultManager.isAutoLockEnabled(Preferences.AUTO_LOCK_ON_MINIMIZE)\n                    && !_vaultManager.isAutoLockBlocked()) {\n                _vaultManager.lock(false);\n            }\n        }\n    }\n\n    @EarlyEntryPoint\n    @InstallIn(SingletonComponent.class)\n    interface EntryPoint {\n        VaultManager getVaultManager();\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/AegisBackupAgent.java",
    "content": "package com.beemdevelopment.aegis;\n\nimport android.app.backup.BackupAgent;\nimport android.app.backup.BackupDataInput;\nimport android.app.backup.BackupDataOutput;\nimport android.app.backup.FullBackupDataOutput;\nimport android.os.Build;\nimport android.os.ParcelFileDescriptor;\nimport android.util.Log;\n\nimport com.beemdevelopment.aegis.database.AppDatabase;\nimport com.beemdevelopment.aegis.database.AuditLogRepository;\nimport com.beemdevelopment.aegis.util.IOUtils;\nimport com.beemdevelopment.aegis.vault.VaultFile;\nimport com.beemdevelopment.aegis.vault.VaultRepository;\nimport com.beemdevelopment.aegis.vault.VaultRepositoryException;\n\nimport java.io.File;\nimport java.io.FileInputStream;\nimport java.io.FileOutputStream;\nimport java.io.IOException;\nimport java.io.InputStream;\nimport java.io.OutputStream;\n\npublic class AegisBackupAgent extends BackupAgent {\n    private static final String TAG = AegisBackupAgent.class.getSimpleName();\n\n    private Preferences _prefs;\n\n    private AuditLogRepository _auditLogRepository;\n\n    @Override\n    public void onCreate() {\n        super.onCreate();\n\n        // Cannot use injection with Dagger Hilt here, because the app is launched in a restricted mode on restore\n        _prefs = new Preferences(this);\n        AppDatabase appDatabase = AegisModule.provideAppDatabase(this);\n        _auditLogRepository = AegisModule.provideAuditLogRepository(appDatabase);\n    }\n\n    @Override\n    public synchronized void onFullBackup(FullBackupDataOutput data) throws IOException {\n        Log.i(TAG, String.format(\"onFullBackup() called: flags=%d, quota=%d\",\n                Build.VERSION.SDK_INT >= Build.VERSION_CODES.P ? data.getTransportFlags() : -1,\n                Build.VERSION.SDK_INT >= Build.VERSION_CODES.O ? data.getQuota() : -1));\n\n        boolean isD2D = Build.VERSION.SDK_INT >= Build.VERSION_CODES.P\n                && (data.getTransportFlags() & FLAG_DEVICE_TO_DEVICE_TRANSFER) == FLAG_DEVICE_TO_DEVICE_TRANSFER;\n\n        if (isD2D) {\n            Log.i(TAG, \"onFullBackup(): allowing D2D transfer\");\n        } else if (!_prefs.isAndroidBackupsEnabled()) {\n            Log.i(TAG, \"onFullBackup() skipped: Android backups disabled in preferences\");\n            return;\n        }\n\n        // We perform a catch of any Exception here to make sure we also\n        // report any runtime exceptions, in addition to the expected IOExceptions.\n        try {\n            fullBackup(data);\n            _auditLogRepository.addAndroidBackupCreatedEvent();\n            _prefs.setAndroidBackupResult(new Preferences.BackupResult(null));\n        } catch (Exception e) {\n            Log.e(TAG, String.format(\"onFullBackup() failed: %s\", e));\n            _prefs.setAndroidBackupResult(new Preferences.BackupResult(e));\n            throw e;\n        }\n\n        Log.i(TAG, \"onFullBackup() finished\");\n    }\n\n    private void fullBackup(FullBackupDataOutput data) throws IOException {\n        // First copy the vault to the files/backup directory\n        createBackupDir();\n        File vaultBackupFile = getVaultBackupFile();\n        try (OutputStream outputStream = new FileOutputStream(vaultBackupFile)) {\n            VaultFile vaultFile = VaultRepository.readVaultFile(this);\n            byte[] bytes = vaultFile.exportable().toBytes();\n            outputStream.write(bytes);\n        } catch (VaultRepositoryException | IOException e) {\n            deleteBackupDir();\n            throw new IOException(e);\n        }\n\n        // Then call the original implementation so that fullBackupContent specified in AndroidManifest is read\n        try {\n            super.onFullBackup(data);\n        } finally {\n            deleteBackupDir();\n        }\n    }\n\n    @Override\n    public synchronized void onRestoreFile(ParcelFileDescriptor data, long size, File destination, int type, long mode, long mtime) throws IOException {\n        Log.i(TAG, String.format(\"onRestoreFile() called: dest=%s\", destination));\n        super.onRestoreFile(data, size, destination, type, mode, mtime);\n\n        File vaultBackupFile = getVaultBackupFile();\n        if (destination.getCanonicalFile().equals(vaultBackupFile.getCanonicalFile())) {\n            try (InputStream inStream = new FileInputStream(vaultBackupFile)) {\n                VaultRepository.writeToFile(this, inStream);\n            } catch (IOException e) {\n                Log.e(TAG, String.format(\"onRestoreFile() failed: dest=%s, error=%s\", destination, e));\n                throw e;\n            } finally {\n                deleteBackupDir();\n            }\n        }\n\n        Log.i(TAG, String.format(\"onRestoreFile() finished: dest=%s\", destination));\n    }\n\n    @Override\n    public synchronized void onQuotaExceeded(long backupDataBytes, long quotaBytes) {\n        super.onQuotaExceeded(backupDataBytes, quotaBytes);\n        Log.e(TAG, String.format(\"onQuotaExceeded() called: backupDataBytes=%d, quotaBytes=%d\", backupDataBytes, quotaBytes));\n    }\n\n    @Override\n    public void onBackup(ParcelFileDescriptor oldState, BackupDataOutput data, ParcelFileDescriptor newState) throws IOException {\n\n    }\n\n    @Override\n    public void onRestore(BackupDataInput data, int appVersionCode, ParcelFileDescriptor newState) throws IOException {\n\n    }\n\n    private void createBackupDir() throws IOException {\n        File dir = getVaultBackupFile().getParentFile();\n        if (dir == null || (!dir.exists() && !dir.mkdir())) {\n            throw new IOException(String.format(\"Unable to create backup directory: %s\", dir));\n        }\n    }\n\n    private void deleteBackupDir() {\n        File dir = getVaultBackupFile().getParentFile();\n        if (dir != null) {\n            IOUtils.clearDirectory(dir, true);\n        }\n    }\n\n    private File getVaultBackupFile() {\n        return new File(new File(getFilesDir(), \"backup\"), VaultRepository.FILENAME);\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/AegisModule.java",
    "content": "package com.beemdevelopment.aegis;\n\nimport android.content.Context;\n\nimport androidx.room.Room;\n\nimport com.beemdevelopment.aegis.database.AppDatabase;\nimport com.beemdevelopment.aegis.database.AuditLogDao;\nimport com.beemdevelopment.aegis.database.AuditLogRepository;\nimport com.beemdevelopment.aegis.icons.IconPackManager;\nimport com.beemdevelopment.aegis.vault.VaultManager;\n\nimport javax.inject.Singleton;\n\nimport dagger.Module;\nimport dagger.Provides;\nimport dagger.hilt.InstallIn;\nimport dagger.hilt.android.qualifiers.ApplicationContext;\nimport dagger.hilt.components.SingletonComponent;\n\n@Module\n@InstallIn(SingletonComponent.class)\npublic class AegisModule {\n    @Provides\n    @Singleton\n    public static IconPackManager provideIconPackManager(@ApplicationContext Context context) {\n        return new IconPackManager(context);\n    }\n\n    @Provides\n    @Singleton\n    public static AuditLogRepository provideAuditLogRepository(AppDatabase appDatabase) {\n        AuditLogDao auditLogDao = appDatabase.auditLogDao();\n        return new AuditLogRepository(auditLogDao);\n    }\n\n    @Provides\n    @Singleton\n    public static VaultManager provideVaultManager(@ApplicationContext Context context, AuditLogRepository auditLogRepository) {\n        return new VaultManager(context, auditLogRepository);\n    }\n\n    @Provides\n    public static Preferences providePreferences(@ApplicationContext Context context) {\n        return new Preferences(context);\n    }\n\n    @Provides\n    @Singleton\n    public static AppDatabase provideAppDatabase(@ApplicationContext Context context) {\n        return Room.databaseBuilder(context.getApplicationContext(),\n                        AppDatabase.class, \"aegis-db\")\n                .build();\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/BackupsVersioningStrategy.java",
    "content": "package com.beemdevelopment.aegis;\n\npublic enum BackupsVersioningStrategy {\n    UNDEFINED,\n    MULTIPLE_BACKUPS,\n    SINGLE_BACKUP\n}"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/CopyBehavior.java",
    "content": "package com.beemdevelopment.aegis;\n\npublic enum CopyBehavior {\n    NEVER,\n    SINGLETAP,\n    DOUBLETAP;\n\n    private static CopyBehavior[] _values;\n\n    static {\n        _values = values();\n    }\n\n    public static CopyBehavior fromInteger(int x) {\n        return _values[x];\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/EventType.java",
    "content": "package com.beemdevelopment.aegis;\n\npublic enum EventType {\n\n    VAULT_UNLOCKED,\n    VAULT_BACKUP_CREATED,\n    VAULT_ANDROID_BACKUP_CREATED,\n    VAULT_EXPORTED,\n    ENTRY_SHARED,\n    VAULT_UNLOCK_FAILED_PASSWORD,\n    VAULT_UNLOCK_FAILED_BIOMETRICS;\n    private static EventType[] _values;\n\n    static {\n        _values = values();\n    }\n\n    public static EventType fromInteger(int x) {\n        return _values[x];\n    }\n\n    public static int getEventTitleRes(EventType eventType) {\n        switch (eventType) {\n            case VAULT_UNLOCKED:\n                return R.string.event_title_vault_unlocked;\n            case VAULT_BACKUP_CREATED:\n                return R.string.event_title_backup_created;\n            case VAULT_ANDROID_BACKUP_CREATED:\n                return R.string.event_title_android_backup_created;\n            case VAULT_EXPORTED:\n                return R.string.event_title_vault_exported;\n            case ENTRY_SHARED:\n                return R.string.event_title_entry_shared;\n            case VAULT_UNLOCK_FAILED_PASSWORD:\n                return R.string.event_title_vault_unlock_failed_password;\n            case VAULT_UNLOCK_FAILED_BIOMETRICS:\n                return R.string.event_title_vault_unlock_failed_biometrics;\n            default:\n                return R.string.event_unknown;\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/GroupPlaceholderType.java",
    "content": "package com.beemdevelopment.aegis;\n\npublic enum GroupPlaceholderType {\n    ALL,\n    NEW_GROUP,\n    NO_GROUP;\n\n    public int getStringRes() {\n        switch (this) {\n            case ALL:\n                return R.string.all;\n            case NEW_GROUP:\n                return R.string.new_group;\n            case NO_GROUP:\n                return R.string.no_group;\n            default:\n                throw new IllegalArgumentException(\"Unexpected placeholder type: \" + this);\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/PassReminderFreq.java",
    "content": "package com.beemdevelopment.aegis;\n\nimport androidx.annotation.StringRes;\n\nimport java.util.concurrent.TimeUnit;\n\npublic enum PassReminderFreq {\n    NEVER,\n    WEEKLY,\n    BIWEEKLY,\n    MONTHLY,\n    QUARTERLY;\n\n    public long getDurationMillis() {\n        long weeks;\n        switch (this) {\n            case WEEKLY:\n                weeks = 1;\n                break;\n            case BIWEEKLY:\n                weeks = 2;\n                break;\n            case MONTHLY:\n                weeks = 4;\n                break;\n            case QUARTERLY:\n                weeks = 13;\n                break;\n            default:\n                weeks = 0;\n                break;\n        }\n\n        return TimeUnit.MILLISECONDS.convert(weeks * 7L, TimeUnit.DAYS);\n    }\n\n    @StringRes\n    public int getStringRes() {\n        switch (this) {\n            case WEEKLY:\n                return R.string.password_reminder_freq_weekly;\n            case BIWEEKLY:\n                return R.string.password_reminder_freq_biweekly;\n            case MONTHLY:\n                return R.string.password_reminder_freq_monthly;\n            case QUARTERLY:\n                return R.string.password_reminder_freq_quarterly;\n            default:\n                return R.string.password_reminder_freq_never;\n        }\n    }\n\n    public static PassReminderFreq fromInteger(int i) {\n        return PassReminderFreq.values()[i];\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/Preferences.java",
    "content": "package com.beemdevelopment.aegis;\n\nimport android.content.Context;\nimport android.content.SharedPreferences;\nimport android.content.res.Resources;\nimport android.net.Uri;\nimport android.os.Build;\n\nimport androidx.annotation.NonNull;\nimport androidx.annotation.Nullable;\nimport androidx.core.provider.DocumentsContractCompat;\nimport androidx.preference.PreferenceManager;\n\nimport com.beemdevelopment.aegis.util.JsonUtils;\nimport com.beemdevelopment.aegis.util.TimeUtils;\nimport com.beemdevelopment.aegis.vault.VaultBackupPermissionException;\n\nimport org.json.JSONArray;\nimport org.json.JSONException;\nimport org.json.JSONObject;\n\nimport java.util.ArrayList;\nimport java.util.Collections;\nimport java.util.Date;\nimport java.util.HashMap;\nimport java.util.HashSet;\nimport java.util.List;\nimport java.util.Locale;\nimport java.util.Map;\nimport java.util.Set;\nimport java.util.UUID;\n\npublic class Preferences {\n    public static final int AUTO_LOCK_OFF = 1 << 0;\n    public static final int AUTO_LOCK_ON_BACK_BUTTON = 1 << 1;\n    public static final int AUTO_LOCK_ON_MINIMIZE = 1 << 2;\n    public static final int AUTO_LOCK_ON_DEVICE_LOCK = 1 << 3;\n\n    public static final int SEARCH_IN_ISSUER = 1 << 0;\n    public static final int SEARCH_IN_NAME = 1 << 1;\n    public static final int SEARCH_IN_NOTE = 1 << 2;\n    public static final int SEARCH_IN_GROUPS = 1 << 3;\n\n    public static final int BACKUPS_VERSIONS_INFINITE = -1;\n\n    public static final int[] AUTO_LOCK_SETTINGS = {\n            AUTO_LOCK_ON_BACK_BUTTON,\n            AUTO_LOCK_ON_MINIMIZE,\n            AUTO_LOCK_ON_DEVICE_LOCK\n    };\n\n    public static final int[] SEARCH_BEHAVIOR_SETTINGS = {\n            SEARCH_IN_ISSUER,\n            SEARCH_IN_NAME,\n            SEARCH_IN_NOTE,\n            SEARCH_IN_GROUPS\n    };\n\n    private SharedPreferences _prefs;\n\n    public Preferences(Context context) {\n        _prefs = PreferenceManager.getDefaultSharedPreferences(context);\n\n        if (getPasswordReminderTimestamp().getTime() == 0) {\n            resetPasswordReminderTimestamp();\n        }\n\n        migratePreferences();\n    }\n\n    public void migratePreferences() {\n        // Change copy on tap to copy behavior to new preference and delete the old key\n        String prefCopyOnTapKey = \"pref_copy_on_tap\";\n        if (_prefs.contains(prefCopyOnTapKey)) {\n\n            boolean isCopyOnTapEnabled = _prefs.getBoolean(prefCopyOnTapKey, false);\n            if (isCopyOnTapEnabled) {\n                setCopyBehavior(CopyBehavior.SINGLETAP);\n            }\n\n            _prefs.edit().remove(prefCopyOnTapKey).apply();\n        }\n    }\n\n    public boolean isTapToRevealEnabled() {\n        return _prefs.getBoolean(\"pref_tap_to_reveal\", false);\n    }\n\n    public boolean isGroupMultiselectEnabled() {\n        return _prefs.getBoolean(\"pref_groups_multiselect\", false);\n    }\n\n    public boolean isEntryHighlightEnabled() {\n        return _prefs.getBoolean(\"pref_highlight_entry\", false);\n    }\n\n    public boolean isHapticFeedbackEnabled() {\n        return _prefs.getBoolean(\"pref_haptic_feedback\", true);\n    }\n\n    public boolean isPauseFocusedEnabled() {\n        boolean dependenciesEnabled = isTapToRevealEnabled() || isEntryHighlightEnabled();\n        if (!dependenciesEnabled) return false;\n        return _prefs.getBoolean(\"pref_pause_entry\", false);\n    }\n\n    public boolean isPanicTriggerEnabled() {\n        return _prefs.getBoolean(\"pref_panic_trigger\", false);\n    }\n\n    public void setIsPanicTriggerEnabled(boolean enabled) {\n        _prefs.edit().putBoolean(\"pref_panic_trigger\", enabled).apply();\n    }\n\n    public boolean isSecureScreenEnabled() {\n        // screen security should be enabled by default, but not for debug builds\n        return _prefs.getBoolean(\"pref_secure_screen\", !BuildConfig.DEBUG);\n    }\n\n    public PassReminderFreq getPasswordReminderFrequency() {\n        final String key = \"pref_password_reminder_freq\";\n        if (_prefs.contains(key) || _prefs.getBoolean(\"pref_password_reminder\", true)) {\n            int i = _prefs.getInt(key, PassReminderFreq.BIWEEKLY.ordinal());\n            return PassReminderFreq.fromInteger(i);\n        }\n\n        return PassReminderFreq.NEVER;\n    }\n\n    public void setPasswordReminderFrequency(PassReminderFreq freq) {\n        _prefs.edit().putInt(\"pref_password_reminder_freq\", freq.ordinal()).apply();\n    }\n\n    public boolean isPasswordReminderNeeded() {\n        return isPasswordReminderNeeded(new Date().getTime());\n    }\n\n    boolean isPasswordReminderNeeded(long currTime) {\n        PassReminderFreq freq = getPasswordReminderFrequency();\n        if (freq == PassReminderFreq.NEVER) {\n            return false;\n        }\n\n        long duration = currTime - getPasswordReminderTimestamp().getTime();\n        return duration >= freq.getDurationMillis();\n    }\n\n    public Date getPasswordReminderTimestamp() {\n        return new Date(_prefs.getLong(\"pref_password_reminder_counter\", 0));\n    }\n\n    void setPasswordReminderTimestamp(long timestamp) {\n        _prefs.edit().putLong(\"pref_password_reminder_counter\", timestamp).apply();\n    }\n\n    public void resetPasswordReminderTimestamp() {\n        setPasswordReminderTimestamp(new Date().getTime());\n    }\n\n    public boolean onlyShowNecessaryAccountNames() { return _prefs.getBoolean(\"pref_shared_issuer_account_name\", false); }\n\n    public boolean isIconVisible() {\n        return _prefs.getBoolean(\"pref_show_icons\", true);\n    }\n\n    public boolean getShowNextCode() {\n        return _prefs.getBoolean(\"pref_show_next_code\", false);\n    }\n\n    public boolean getShowExpirationState() {\n        return _prefs.getBoolean(\"pref_expiration_state\", true);\n    }\n\n    public CodeGrouping getCodeGroupSize() {\n        String value = _prefs.getString(\"pref_code_group_size_string\", \"GROUPING_THREES\");\n\n        return CodeGrouping.valueOf(value);\n    }\n\n    public void setCodeGroupSize(CodeGrouping codeGroupSize) {\n        _prefs.edit().putString(\"pref_code_group_size_string\", codeGroupSize.name()).apply();\n    }\n\n    public boolean isIntroDone() {\n        return _prefs.getBoolean(\"pref_intro\", false);\n    }\n\n    private int getAutoLockMask() {\n        final int def = AUTO_LOCK_ON_BACK_BUTTON | AUTO_LOCK_ON_DEVICE_LOCK;\n        if (!_prefs.contains(\"pref_auto_lock_mask\")) {\n            return _prefs.getBoolean(\"pref_auto_lock\", true) ? def : AUTO_LOCK_OFF;\n        }\n\n        return _prefs.getInt(\"pref_auto_lock_mask\", def);\n    }\n\n    public int getSearchBehaviorMask() {\n        final int def = SEARCH_IN_ISSUER | SEARCH_IN_NAME;\n\n        return _prefs.getInt(\"pref_search_behavior_mask\", def);\n    }\n\n    public boolean isSearchBehaviorTypeEnabled(int searchBehaviorType) {\n        return (getSearchBehaviorMask() & searchBehaviorType) == searchBehaviorType;\n    }\n\n    public void setSearchBehaviorMask(int searchBehavior) {\n        _prefs.edit().putInt(\"pref_search_behavior_mask\", searchBehavior).apply();\n    }\n\n    public boolean isAutoLockEnabled() {\n        return getAutoLockMask() != AUTO_LOCK_OFF;\n    }\n\n    public boolean isAutoLockTypeEnabled(int autoLockType) {\n        return (getAutoLockMask() & autoLockType) == autoLockType;\n    }\n\n    public void setAutoLockMask(int autoLock) {\n        _prefs.edit().putInt(\"pref_auto_lock_mask\", autoLock).apply();\n    }\n\n    public void setIntroDone(boolean done) {\n        _prefs.edit().putBoolean(\"pref_intro\", done).apply();\n    }\n\n    public void setTapToRevealTime(int number) {\n        _prefs.edit().putInt(\"pref_tap_to_reveal_time\", number).apply();\n    }\n\n    public void setCurrentSortCategory(SortCategory category) {\n        _prefs.edit().putInt(\"pref_current_sort_category\", category.ordinal()).apply();\n    }\n\n    public SortCategory getCurrentSortCategory() {\n        return SortCategory.fromInteger(_prefs.getInt(\"pref_current_sort_category\", 0));\n    }\n\n    public int getTapToRevealTime() {\n        return _prefs.getInt(\"pref_tap_to_reveal_time\", 30);\n    }\n\n    public Theme getCurrentTheme() {\n        return Theme.fromInteger(_prefs.getInt(\"pref_current_theme\", Theme.SYSTEM.ordinal()));\n    }\n\n    public void setCurrentTheme(Theme theme) {\n        _prefs.edit().putInt(\"pref_current_theme\", theme.ordinal()).apply();\n    }\n\n    public boolean isDynamicColorsEnabled() {\n        return _prefs.getBoolean(\"pref_dynamic_colors\", false);\n    }\n\n    public ViewMode getCurrentViewMode() {\n        return ViewMode.fromInteger(_prefs.getInt(\"pref_current_view_mode\", 0));\n    }\n\n    public void setCurrentViewMode(ViewMode viewMode) {\n        _prefs.edit().putInt(\"pref_current_view_mode\", viewMode.ordinal()).apply();\n    }\n\n    public AccountNamePosition getAccountNamePosition() {\n        return AccountNamePosition.fromInteger(_prefs.getInt(\"pref_account_name_position\", AccountNamePosition.END.ordinal()));\n    }\n\n    public void setAccountNamePosition(AccountNamePosition accountNamePosition) {\n        _prefs.edit().putInt(\"pref_account_name_position\", accountNamePosition.ordinal()).apply();\n    }\n\n    public Integer getUsageCount(UUID uuid) {\n        Integer usageCount = getUsageCounts().get(uuid);\n\n        return usageCount != null ? usageCount : 0;\n    }\n\n    public void resetUsageCount(UUID uuid) {\n        Map<UUID, Integer> usageCounts = getUsageCounts();\n        usageCounts.put(uuid, 0);\n\n        setUsageCount(usageCounts);\n    }\n\n    public long getLastUsedTimestamp(UUID uuid) {\n        Map<UUID, Long> timestamps = getLastUsedTimestamps();\n        if (timestamps != null && timestamps.size() > 0){\n            Long timestamp = timestamps.get(uuid);\n            return timestamp != null ? timestamp : 0;\n        }\n\n        return 0;\n    }\n\n    public void clearUsageCount() {\n        _prefs.edit().remove(\"pref_usage_count\").apply();\n    }\n\n    public Map<UUID, Long> getLastUsedTimestamps() {\n        Map<UUID, Long> lastUsedTimestamps = new HashMap<>();\n        String lastUsedTimestamp = _prefs.getString(\"pref_last_used_timestamps\", \"\");\n        try {\n            JSONArray arr = new JSONArray(lastUsedTimestamp);\n            for (int i = 0; i < arr.length(); i++) {\n                JSONObject json = arr.getJSONObject(i);\n                lastUsedTimestamps.put(UUID.fromString(json.getString(\"uuid\")), json.getLong(\"timestamp\"));\n            }\n        } catch (JSONException ignored) {\n        }\n\n        return lastUsedTimestamps;\n    }\n\n    public void setLastUsedTimestamps(Map<UUID, Long> lastUsedTimestamps) {\n        JSONArray lastUsedTimestampJson = new JSONArray();\n        for (Map.Entry<UUID, Long> entry : lastUsedTimestamps.entrySet()) {\n            JSONObject entryJson = new JSONObject();\n            try {\n                entryJson.put(\"uuid\", entry.getKey());\n                entryJson.put(\"timestamp\", entry.getValue());\n                lastUsedTimestampJson.put(entryJson);\n            } catch (JSONException e) {\n                e.printStackTrace();\n            }\n        }\n\n        _prefs.edit().putString(\"pref_last_used_timestamps\", lastUsedTimestampJson.toString()).apply();\n    }\n\n    public Map<UUID, Integer> getUsageCounts() {\n        Map<UUID, Integer> usageCounts = new HashMap<>();\n        String usageCount = _prefs.getString(\"pref_usage_count\", \"\");\n        try {\n            JSONArray arr = new JSONArray(usageCount);\n            for (int i = 0; i < arr.length(); i++) {\n                JSONObject json = arr.getJSONObject(i);\n                usageCounts.put(UUID.fromString(json.getString(\"uuid\")), json.getInt(\"count\"));\n            }\n        } catch (JSONException ignored) {\n        }\n\n        return usageCounts;\n    }\n\n    public void setUsageCount(Map<UUID, Integer> usageCounts) {\n        JSONArray usageCountJson = new JSONArray();\n        for (Map.Entry<UUID, Integer> entry : usageCounts.entrySet()) {\n            JSONObject entryJson = new JSONObject();\n            try {\n                entryJson.put(\"uuid\", entry.getKey());\n                entryJson.put(\"count\", entry.getValue());\n                usageCountJson.put(entryJson);\n            } catch (JSONException e) {\n                e.printStackTrace();\n            }\n        }\n\n        _prefs.edit().putString(\"pref_usage_count\", usageCountJson.toString()).apply();\n    }\n\n    public int getTimeout() {\n        return _prefs.getInt(\"pref_timeout\", -1);\n    }\n\n    public String getLanguage() {\n        return _prefs.getString(\"pref_lang\", \"system\");\n    }\n\n    public void setLanguage(String lang) {\n        _prefs.edit().putString(\"pref_lang\", lang).apply();\n    }\n\n    public Locale getLocale() {\n        String lang = getLanguage();\n\n        if (lang.equals(\"system\")) {\n            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {\n                return Resources.getSystem().getConfiguration().getLocales().get(0);\n            } else {\n                return Resources.getSystem().getConfiguration().locale;\n            }\n        }\n\n        String[] parts = lang.split(\"_\");\n        if (parts.length == 1) {\n            return new Locale(parts[0]);\n        }\n\n        return new Locale(parts[0], parts[1]);\n    }\n\n    public boolean isAndroidBackupsEnabled() {\n        return _prefs.getBoolean(\"pref_android_backups\", false);\n    }\n\n    public void setIsAndroidBackupsEnabled(boolean enabled) {\n        _prefs.edit().putBoolean(\"pref_android_backups\", enabled).apply();\n        setAndroidBackupResult(null);\n    }\n\n    public boolean isBackupsEnabled() {\n        return _prefs.getBoolean(\"pref_backups\", false);\n    }\n\n    public void setIsBackupsEnabled(boolean enabled) {\n        _prefs.edit().putBoolean(\"pref_backups\", enabled).apply();\n        setBuiltInBackupResult(null);\n    }\n\n    public boolean isBackupReminderEnabled() {\n        return _prefs.getBoolean(\"pref_backup_reminder\", true);\n    }\n\n    public void setIsBackupReminderEnabled(boolean enabled) {\n        _prefs.edit().putBoolean(\"pref_backup_reminder\", enabled).apply();\n    }\n\n    public Uri getBackupsLocation() {\n        String str = _prefs.getString(\"pref_backups_location\", null);\n        if (str != null) {\n            return Uri.parse(str);\n        }\n\n        return null;\n    }\n\n    public boolean getFocusSearchEnabled() {\n        return _prefs.getBoolean(\"pref_focus_search\", false);\n    }\n\n    public void setFocusSearch(boolean enabled) {\n        _prefs.edit().putBoolean(\"pref_focus_search\", enabled).apply();\n    }\n\n    public void setLatestExportTimeNow() {\n        _prefs.edit().putLong(\"pref_export_latest\", new Date().getTime()).apply();\n        setIsBackupReminderNeeded(false);\n    }\n\n    public Date getLatestBackupOrExportTime() {\n        List<Date> dates = new ArrayList<>();\n\n        long l = _prefs.getLong(\"pref_export_latest\", 0);\n        if (l > 0) {\n            dates.add(new Date(l));\n        }\n\n        BackupResult builtinRes = getBuiltInBackupResult();\n        if (builtinRes != null) {\n            dates.add(builtinRes.getTime());\n        }\n\n        BackupResult androidRes = getAndroidBackupResult();\n        if (androidRes != null) {\n            dates.add(androidRes.getTime());\n        }\n\n        if (dates.size() == 0) {\n            return null;\n        }\n\n        return Collections.max(dates, Date::compareTo);\n    }\n\n    public void setBackupsLocation(Uri location) {\n        _prefs.edit().putString(\"pref_backups_location\", location == null ? null : location.toString()).apply();\n    }\n\n    public int getBackupsVersionCount() {\n        return _prefs.getInt(\"pref_backups_versions\", 5);\n    }\n\n    public void setBackupsVersionCount(int versions) {\n        _prefs.edit().putInt(\"pref_backups_versions\", versions).apply();\n    }\n\n    public void setAndroidBackupResult(@Nullable BackupResult res) {\n        setBackupResult(false, res);\n    }\n\n    public void setBuiltInBackupResult(@Nullable BackupResult res) {\n        setBackupResult(true, res);\n    }\n\n    @Nullable\n    public BackupResult getAndroidBackupResult() {\n        return getBackupResult(false);\n    }\n\n    @Nullable\n    public BackupResult getBuiltInBackupResult() {\n        return getBackupResult(true);\n    }\n\n    @Nullable\n    public Preferences.BackupResult getErroredBackupResult() {\n        Preferences.BackupResult res = getBuiltInBackupResult();\n        if (res != null && !res.isSuccessful()) {\n            return res;\n        }\n        res = getAndroidBackupResult();\n        if (res != null && !res.isSuccessful()) {\n            return res;\n        }\n        return null;\n    }\n\n    private void setBackupResult(boolean isBuiltInBackup, @Nullable BackupResult res) {\n        String json = null;\n        if (res != null) {\n            res.setIsBuiltIn(isBuiltInBackup);\n            json = res.toJson();\n        }\n        _prefs.edit().putString(getBackupResultKey(isBuiltInBackup), json).apply();\n    }\n\n    @Nullable\n    private BackupResult getBackupResult(boolean isBuiltInBackup) {\n        String json = _prefs.getString(getBackupResultKey(isBuiltInBackup), null);\n        if (json == null) {\n            return null;\n        }\n\n        try {\n            BackupResult res = BackupResult.fromJson(json);\n            res.setIsBuiltIn(isBuiltInBackup);\n            return res;\n        } catch (JSONException e) {\n            return null;\n        }\n    }\n\n    private static String getBackupResultKey(boolean isBuiltInBackup) {\n        return isBuiltInBackup ? \"pref_backups_result_builtin\": \"pref_backups_result_android\";\n    }\n\n    public void setIsBackupReminderNeeded(boolean needed) {\n        if (isBackupsReminderNeeded() != needed) {\n            _prefs.edit().putBoolean(\"pref_backups_reminder_needed\", needed).apply();\n        }\n    }\n\n    public boolean isBackupsReminderNeeded() {\n        return _prefs.getBoolean(\"pref_backups_reminder_needed\", false);\n    }\n\n    public void setIsPlaintextBackupWarningNeeded(boolean needed) {\n        _prefs.edit().putBoolean(\"pref_plaintext_backup_warning_needed\", needed).apply();\n    }\n\n    public boolean isPlaintextBackupWarningNeeded() {\n        return !isPlaintextBackupWarningDisabled()\n                && _prefs.getBoolean(\"pref_plaintext_backup_warning_needed\", false);\n    }\n\n    public void setIsPlaintextBackupWarningDisabled(boolean disabled) {\n        _prefs.edit().putBoolean(\"pref_plaintext_backup_warning_disabled\", disabled).apply();\n    }\n\n    public boolean isPlaintextBackupWarningDisabled() {\n        return _prefs.getBoolean(\"pref_plaintext_backup_warning_disabled\", false);\n    }\n\n    public boolean isPinKeyboardEnabled() {\n        return _prefs.getBoolean(\"pref_pin_keyboard\", false);\n    }\n\n    public boolean isTimeSyncWarningEnabled() {\n        return _prefs.getBoolean(\"pref_warn_time_sync\", true);\n    }\n\n    public void setIsTimeSyncWarningEnabled(boolean enabled) {\n        _prefs.edit().putBoolean(\"pref_warn_time_sync\", enabled).apply();\n    }\n\n    public CopyBehavior getCopyBehavior() {\n        return CopyBehavior.fromInteger(_prefs.getInt(\"pref_current_copy_behavior\", 0));\n    }\n\n    public void setCopyBehavior(CopyBehavior copyBehavior) {\n        _prefs.edit().putInt(\"pref_current_copy_behavior\", copyBehavior.ordinal()).apply();\n    }\n\n    public boolean isMinimizeOnCopyEnabled() {\n        return _prefs.getBoolean(\"pref_minimize_on_copy\", false);\n    }\n\n    public void setGroupFilter(Set<UUID> groupFilter) {\n        JSONArray json = new JSONArray(groupFilter);\n        _prefs.edit().putString(\"pref_group_filter_uuids\", json.toString()).apply();\n    }\n\n    public Set<UUID> getGroupFilter() {\n        String raw = _prefs.getString(\"pref_group_filter_uuids\", null);\n        if (raw == null || raw.isEmpty()) {\n            return Collections.emptySet();\n        }\n\n        try {\n            JSONArray json = new JSONArray(raw);\n            Set<UUID> filter = new HashSet<>();\n            for (int i = 0; i < json.length(); i++) {\n                filter.add(json.isNull(i) ? null : UUID.fromString(json.getString(i)));\n            }\n            return filter;\n        } catch (JSONException e) {\n            return Collections.emptySet();\n        }\n    }\n\n    @NonNull\n    public BackupsVersioningStrategy getBackupVersioningStrategy() {\n        Uri uri = getBackupsLocation();\n        if (uri == null) {\n            return BackupsVersioningStrategy.UNDEFINED;\n        }\n        if (DocumentsContractCompat.isTreeUri(uri)) {\n            return BackupsVersioningStrategy.MULTIPLE_BACKUPS;\n        } else {\n            return BackupsVersioningStrategy.SINGLE_BACKUP;\n        }\n    }\n\n    public static class BackupResult {\n        private final Date _time;\n        private boolean _isBuiltIn;\n        private final String _error;\n        private final boolean _isPermissionError;\n\n        public BackupResult(@Nullable Exception e) {\n            this(new Date(), e == null ? null : e.toString(), e instanceof VaultBackupPermissionException);\n        }\n\n        private BackupResult(Date time, @Nullable String error, boolean isPermissionError) {\n            _time = time;\n            _error = error;\n            _isPermissionError = isPermissionError;\n        }\n\n        @Nullable\n        public String getError() {\n            return _error;\n        }\n\n        public boolean isSuccessful() {\n            return _error == null;\n        }\n\n        public Date getTime() {\n            return _time;\n        }\n\n        public String getElapsedSince(Context context) {\n            return TimeUtils.getElapsedSince(context, _time);\n        }\n\n        public boolean isBuiltIn() {\n            return _isBuiltIn;\n        }\n\n        private void setIsBuiltIn(boolean isBuiltIn) {\n            _isBuiltIn = isBuiltIn;\n        }\n\n        public boolean isPermissionError() {\n            return _isPermissionError;\n        }\n\n        public String toJson() {\n            JSONObject obj = new JSONObject();\n\n            try {\n                obj.put(\"time\", _time.getTime());\n                obj.put(\"error\", _error == null ? JSONObject.NULL : _error);\n                obj.put(\"isPermissionError\", _isPermissionError);\n            } catch (JSONException e) {\n                throw new RuntimeException(e);\n            }\n\n            return obj.toString();\n        }\n\n        public static BackupResult fromJson(String json) throws JSONException {\n            JSONObject obj = new JSONObject(json);\n            long time = obj.getLong(\"time\");\n            String error = JsonUtils.optString(obj, \"error\");\n            boolean isPermissionError = obj.optBoolean(\"isPermissionError\");\n            return new BackupResult(new Date(time), error, isPermissionError);\n        }\n    }\n\n    public enum CodeGrouping {\n        HALVES(-1),\n        NO_GROUPING(-2),\n        GROUPING_TWOS(2),\n        GROUPING_THREES(3),\n        GROUPING_FOURS(4);\n\n        private final int _value;\n        CodeGrouping(int value) {\n            _value = value;\n        }\n\n        public int getValue() {\n            return _value;\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/SortCategory.java",
    "content": "package com.beemdevelopment.aegis;\n\nimport com.beemdevelopment.aegis.helpers.comparators.LastUsedComparator;\nimport com.beemdevelopment.aegis.helpers.comparators.UsageCountComparator;\nimport com.beemdevelopment.aegis.vault.VaultEntry;\nimport com.beemdevelopment.aegis.helpers.comparators.AccountNameComparator;\nimport com.beemdevelopment.aegis.helpers.comparators.IssuerNameComparator;\n\nimport java.util.Collections;\nimport java.util.Comparator;\n\npublic enum SortCategory {\n    CUSTOM,\n    ACCOUNT,\n    ACCOUNT_REVERSED,\n    ISSUER,\n    ISSUER_REVERSED,\n    USAGE_COUNT,\n    LAST_USED;\n\n    private static SortCategory[] _values;\n\n    static {\n        _values = values();\n    }\n\n    public static SortCategory fromInteger(int x) {\n        return _values[x];\n    }\n\n    public Comparator<VaultEntry> getComparator() {\n        Comparator<VaultEntry> comparator = null;\n\n        switch (this) {\n            case ACCOUNT:\n                comparator = new AccountNameComparator().thenComparing(new IssuerNameComparator());\n                break;\n            case ACCOUNT_REVERSED:\n                comparator = Collections.reverseOrder(new AccountNameComparator().thenComparing(new IssuerNameComparator()));\n                break;\n            case ISSUER:\n                comparator = new IssuerNameComparator().thenComparing(new AccountNameComparator());\n                break;\n            case ISSUER_REVERSED:\n                comparator = Collections.reverseOrder(new IssuerNameComparator().thenComparing(new AccountNameComparator()));\n                break;\n            case USAGE_COUNT:\n                comparator = Collections.reverseOrder(new UsageCountComparator());\n                break;\n            case LAST_USED:\n                comparator = Collections.reverseOrder(new LastUsedComparator());\n        }\n\n        return comparator;\n    }\n\n    public int getMenuItem() {\n        switch (this) {\n            case CUSTOM:\n                return R.id.menu_sort_custom;\n            case ACCOUNT:\n                return R.id.menu_sort_alphabetically_name;\n            case ACCOUNT_REVERSED:\n                return R.id.menu_sort_alphabetically_name_reverse;\n            case ISSUER:\n                return R.id.menu_sort_alphabetically;\n            case ISSUER_REVERSED:\n                return R.id.menu_sort_alphabetically_reverse;\n            case USAGE_COUNT:\n                return R.id.menu_sort_usage_count;\n            case LAST_USED:\n                return R.id.menu_sort_last_used;\n            default:\n                return R.id.menu_sort_custom;\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/Theme.java",
    "content": "package com.beemdevelopment.aegis;\n\npublic enum Theme {\n    LIGHT,\n    DARK,\n    AMOLED,\n    SYSTEM,\n    SYSTEM_AMOLED;\n\n    private static Theme[] _values;\n\n    static {\n        _values = values();\n    }\n\n    public static Theme fromInteger(int x) {\n        return _values[x];\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/ThemeMap.java",
    "content": "package com.beemdevelopment.aegis;\n\nimport com.google.common.collect.ImmutableMap;\n\nimport java.util.Map;\n\npublic class ThemeMap {\n    private ThemeMap() {\n\n    }\n\n    public static final Map<Theme, Integer> DEFAULT = ImmutableMap.of(\n            Theme.LIGHT, R.style.Theme_Aegis_Light,\n            Theme.DARK, R.style.Theme_Aegis_Dark,\n            Theme.AMOLED, R.style.Theme_Aegis_Amoled\n    );\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/VibrationPatterns.java",
    "content": "package com.beemdevelopment.aegis;\n\nimport java.util.Arrays;\n\npublic class VibrationPatterns {\n    public static final long[] EXPIRING = {475, 20, 5, 20, 965, 20, 5, 20, 965, 20, 5, 20, 420};\n    public static final long[] REFRESH_CODE = {0, 100};\n\n    public static long getLengthInMillis(long[] pattern) {\n        return Arrays.stream(pattern).sum();\n    }\n}"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/ViewMode.java",
    "content": "package com.beemdevelopment.aegis;\n\nimport androidx.annotation.LayoutRes;\n\npublic enum ViewMode {\n    NORMAL,\n    COMPACT,\n    SMALL,\n    TILES;\n\n    private static ViewMode[] _values;\n\n    static {\n        _values = values();\n    }\n\n    public static ViewMode fromInteger(int x) {\n        return _values[x];\n    }\n\n    @LayoutRes\n    public int getLayoutId() {\n        switch (this) {\n            case NORMAL:\n                return R.layout.card_entry;\n            case COMPACT:\n                return R.layout.card_entry_compact;\n            case SMALL:\n                return R.layout.card_entry_small;\n            case TILES:\n                return R.layout.card_entry_tile;\n            default:\n                return R.layout.card_entry;\n        }\n    }\n\n    /**\n     * Retrieves the offset (in dp) that should exist between entries in this view mode.\n     */\n    public float getItemOffset() {\n        if (this == ViewMode.COMPACT) {\n            return 1;\n        } else if (this == ViewMode.TILES) {\n            return 4;\n        }\n\n        return 8;\n    }\n\n    public int getSpanCount() {\n        if (this == ViewMode.TILES) {\n            return 2;\n        }\n\n        return 1;\n    }\n\n    public String getFormattedAccountName(String accountName) {\n        if (this == ViewMode.TILES) {\n            return accountName;\n        }\n\n        return String.format(\"(%s)\", accountName);\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/crypto/CryptParameters.java",
    "content": "package com.beemdevelopment.aegis.crypto;\n\nimport com.beemdevelopment.aegis.encoding.EncodingException;\nimport com.beemdevelopment.aegis.encoding.Hex;\n\nimport org.json.JSONException;\nimport org.json.JSONObject;\n\nimport java.io.Serializable;\n\npublic class CryptParameters implements Serializable {\n    private byte[] _nonce;\n    private byte[] _tag;\n\n    public CryptParameters(byte[] nonce, byte[] tag) {\n        _nonce = nonce;\n        _tag = tag;\n    }\n\n    public JSONObject toJson() {\n        JSONObject obj = new JSONObject();\n\n        try {\n            obj.put(\"nonce\", Hex.encode(_nonce));\n            obj.put(\"tag\", Hex.encode(_tag));\n        } catch (JSONException e) {\n            throw new RuntimeException(e);\n        }\n\n        return obj;\n    }\n\n    public static CryptParameters fromJson(JSONObject obj) throws JSONException, EncodingException {\n        byte[] nonce = Hex.decode(obj.getString(\"nonce\"));\n        byte[] tag = Hex.decode(obj.getString(\"tag\"));\n        return new CryptParameters(nonce, tag);\n    }\n\n    public byte[] getNonce() {\n        return _nonce;\n    }\n\n    public byte[] getTag() {\n        return _tag;\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/crypto/CryptResult.java",
    "content": "package com.beemdevelopment.aegis.crypto;\n\npublic class CryptResult {\n    private byte[] _data;\n    private CryptParameters _params;\n\n    public CryptResult(byte[] data, CryptParameters params) {\n        _data = data;\n        _params = params;\n    }\n\n    public byte[] getData() {\n        return _data;\n    }\n\n    public CryptParameters getParams() {\n        return _params;\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/crypto/CryptoUtils.java",
    "content": "package com.beemdevelopment.aegis.crypto;\n\nimport com.beemdevelopment.aegis.crypto.bc.SCrypt;\n\nimport java.io.ByteArrayOutputStream;\nimport java.io.IOException;\nimport java.nio.ByteBuffer;\nimport java.nio.CharBuffer;\nimport java.nio.charset.StandardCharsets;\nimport java.security.InvalidAlgorithmParameterException;\nimport java.security.InvalidKeyException;\nimport java.security.NoSuchAlgorithmException;\nimport java.security.SecureRandom;\nimport java.security.spec.AlgorithmParameterSpec;\nimport java.util.Arrays;\n\nimport javax.crypto.BadPaddingException;\nimport javax.crypto.Cipher;\nimport javax.crypto.IllegalBlockSizeException;\nimport javax.crypto.KeyGenerator;\nimport javax.crypto.NoSuchPaddingException;\nimport javax.crypto.SecretKey;\nimport javax.crypto.spec.GCMParameterSpec;\nimport javax.crypto.spec.SecretKeySpec;\n\npublic class CryptoUtils {\n    public static final String CRYPTO_AEAD = \"AES/GCM/NoPadding\";\n    public static final byte CRYPTO_AEAD_KEY_SIZE = 32;\n    public static final byte CRYPTO_AEAD_TAG_SIZE = 16;\n    public static final byte CRYPTO_AEAD_NONCE_SIZE = 12;\n\n    public static final int CRYPTO_SCRYPT_N = 1 << 15;\n    public static final int CRYPTO_SCRYPT_r = 8;\n    public static final int CRYPTO_SCRYPT_p = 1;\n\n    public static SecretKey deriveKey(byte[] input, SCryptParameters params) {\n        byte[] keyBytes = SCrypt.generate(input, params.getSalt(), params.getN(), params.getR(), params.getP(), CRYPTO_AEAD_KEY_SIZE);\n        return new SecretKeySpec(keyBytes, 0, keyBytes.length, \"AES\");\n    }\n\n    public static SecretKey deriveKey(char[] password, SCryptParameters params) {\n        byte[] bytes = toBytes(password);\n        return deriveKey(bytes, params);\n    }\n\n    public static Cipher createEncryptCipher(SecretKey key)\n            throws NoSuchPaddingException, NoSuchAlgorithmException,\n            InvalidAlgorithmParameterException, InvalidKeyException {\n        return createCipher(key, Cipher.ENCRYPT_MODE, null);\n    }\n\n    public static Cipher createDecryptCipher(SecretKey key, byte[] nonce)\n            throws InvalidAlgorithmParameterException, NoSuchAlgorithmException,\n            InvalidKeyException, NoSuchPaddingException {\n        return createCipher(key, Cipher.DECRYPT_MODE, nonce);\n    }\n\n    private static Cipher createCipher(SecretKey key, int opmode, byte[] nonce)\n            throws NoSuchPaddingException, NoSuchAlgorithmException,\n            InvalidAlgorithmParameterException, InvalidKeyException {\n        Cipher cipher = Cipher.getInstance(CRYPTO_AEAD);\n\n        // generate the nonce if none is given\n        // we are not allowed to do this ourselves as \"setRandomizedEncryptionRequired\" is set to true\n        if (nonce != null) {\n            AlgorithmParameterSpec spec = new GCMParameterSpec(CRYPTO_AEAD_TAG_SIZE * 8, nonce);\n            cipher.init(opmode, key, spec);\n        } else {\n            cipher.init(opmode, key);\n        }\n\n        return cipher;\n    }\n\n    public static CryptResult encrypt(byte[] data, Cipher cipher)\n            throws BadPaddingException, IllegalBlockSizeException {\n        // split off the tag to store it separately\n        byte[] result = cipher.doFinal(data);\n        byte[] tag = Arrays.copyOfRange(result, result.length - CRYPTO_AEAD_TAG_SIZE, result.length);\n        byte[] encrypted = Arrays.copyOfRange(result, 0, result.length - CRYPTO_AEAD_TAG_SIZE);\n\n        return new CryptResult(encrypted, new CryptParameters(cipher.getIV(), tag));\n    }\n\n    public static CryptResult decrypt(byte[] encrypted, Cipher cipher, CryptParameters params)\n            throws IOException, BadPaddingException, IllegalBlockSizeException {\n        return decrypt(encrypted, 0, encrypted.length, cipher, params);\n    }\n\n    public static CryptResult decrypt(byte[] encrypted, int encryptedOffset, int encryptedLen, Cipher cipher, CryptParameters params)\n            throws IOException, BadPaddingException, IllegalBlockSizeException {\n        // append the tag to the ciphertext\n        ByteArrayOutputStream stream = new ByteArrayOutputStream();\n        stream.write(encrypted, encryptedOffset, encryptedLen);\n        stream.write(params.getTag());\n\n        encrypted = stream.toByteArray();\n        byte[] decrypted = cipher.doFinal(encrypted);\n\n        return new CryptResult(decrypted, params);\n    }\n\n    public static SecretKey generateKey() {\n        try {\n            KeyGenerator generator = KeyGenerator.getInstance(\"AES\");\n            generator.init(CRYPTO_AEAD_KEY_SIZE * 8);\n            return generator.generateKey();\n        } catch (NoSuchAlgorithmException e) {\n            throw new AssertionError(e);\n        }\n    }\n\n    public static byte[] generateSalt() {\n        return generateRandomBytes(CRYPTO_AEAD_KEY_SIZE);\n    }\n\n    public static byte[] generateRandomBytes(int length) {\n        SecureRandom random = new SecureRandom();\n        byte[] data = new byte[length];\n        random.nextBytes(data);\n        return data;\n    }\n\n    public static byte[] toBytes(char[] chars) {\n        CharBuffer charBuf = CharBuffer.wrap(chars);\n        ByteBuffer byteBuf = StandardCharsets.UTF_8.encode(charBuf);\n        byte[] bytes = new byte[byteBuf.limit()];\n        byteBuf.get(bytes);\n        return bytes;\n    }\n\n    @Deprecated\n    public static byte[] toBytesOld(char[] chars) {\n        CharBuffer charBuf = CharBuffer.wrap(chars);\n        ByteBuffer byteBuf = StandardCharsets.UTF_8.encode(charBuf);\n        return byteBuf.array();\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/crypto/KeyStoreHandle.java",
    "content": "package com.beemdevelopment.aegis.crypto;\n\nimport android.security.keystore.KeyGenParameterSpec;\nimport android.security.keystore.KeyProperties;\n\nimport java.io.IOException;\nimport java.security.InvalidAlgorithmParameterException;\nimport java.security.InvalidKeyException;\nimport java.security.KeyStore;\nimport java.security.KeyStoreException;\nimport java.security.NoSuchAlgorithmException;\nimport java.security.NoSuchProviderException;\nimport java.security.ProviderException;\nimport java.security.UnrecoverableKeyException;\nimport java.security.cert.CertificateException;\nimport java.util.Collections;\n\nimport javax.crypto.Cipher;\nimport javax.crypto.KeyGenerator;\nimport javax.crypto.NoSuchPaddingException;\nimport javax.crypto.SecretKey;\n\npublic class KeyStoreHandle {\n    private final KeyStore _keyStore;\n    private static final String STORE_NAME = \"AndroidKeyStore\";\n\n    public KeyStoreHandle() throws KeyStoreHandleException {\n        try {\n            _keyStore = KeyStore.getInstance(STORE_NAME);\n            _keyStore.load(null);\n        } catch (KeyStoreException | CertificateException | NoSuchAlgorithmException | IOException e) {\n            throw new KeyStoreHandleException(e);\n        }\n    }\n\n    public boolean containsKey(String id) throws KeyStoreHandleException {\n        try {\n            return _keyStore.containsAlias(id);\n        } catch (KeyStoreException e) {\n            throw new KeyStoreHandleException(e);\n        }\n    }\n\n    public SecretKey generateKey(String id) throws KeyStoreHandleException {\n        try {\n            KeyGenerator generator = KeyGenerator.getInstance(KeyProperties.KEY_ALGORITHM_AES, STORE_NAME);\n            generator.init(new KeyGenParameterSpec.Builder(id,\n                    KeyProperties.PURPOSE_ENCRYPT | KeyProperties.PURPOSE_DECRYPT)\n                    .setBlockModes(KeyProperties.BLOCK_MODE_GCM)\n                    .setEncryptionPaddings(KeyProperties.ENCRYPTION_PADDING_NONE)\n                    .setUserAuthenticationRequired(true)\n                    .setRandomizedEncryptionRequired(true)\n                    .setKeySize(CryptoUtils.CRYPTO_AEAD_KEY_SIZE * 8)\n                    .build());\n\n            return generator.generateKey();\n        } catch (ProviderException e) {\n            // a ProviderException can occur at runtime with buggy Keymaster HAL implementations\n            // so if this was caused by an android.security.KeyStoreException, throw a KeyStoreHandleException instead\n            Throwable cause = e.getCause();\n            if (cause != null && cause.getClass().getName().equals(\"android.security.KeyStoreException\")) {\n                throw new KeyStoreHandleException(cause);\n            }\n            throw e;\n        } catch (NoSuchAlgorithmException | NoSuchProviderException | InvalidAlgorithmParameterException e) {\n            throw new KeyStoreHandleException(e);\n        }\n    }\n\n    public SecretKey getKey(String id) throws KeyStoreHandleException {\n        SecretKey key;\n\n        try {\n            key = (SecretKey) _keyStore.getKey(id, null);\n        } catch (UnrecoverableKeyException e) {\n            return null;\n        } catch (NoSuchAlgorithmException e) {\n            throw new RuntimeException(e);\n        } catch (KeyStoreException e) {\n            throw new KeyStoreHandleException(e);\n        }\n\n        if (isKeyPermanentlyInvalidated(key)) {\n            return null;\n        }\n\n        return key;\n    }\n\n    private static boolean isKeyPermanentlyInvalidated(SecretKey key) {\n        // try to initialize a dummy cipher and see if an InvalidKeyException is thrown\n        try {\n            Cipher cipher = Cipher.getInstance(CryptoUtils.CRYPTO_AEAD);\n            cipher.init(Cipher.ENCRYPT_MODE, key);\n        } catch (InvalidKeyException e) {\n            // some devices throw a plain InvalidKeyException, not KeyPermanentlyInvalidatedException\n            return true;\n        } catch (NoSuchAlgorithmException | NoSuchPaddingException e) {\n            throw new RuntimeException(e);\n        }\n\n        return false;\n    }\n\n    public void deleteKey(String id) throws KeyStoreHandleException {\n        try {\n            _keyStore.deleteEntry(id);\n        } catch (KeyStoreException e) {\n            throw new KeyStoreHandleException(e);\n        }\n    }\n\n    public void clear() throws KeyStoreHandleException {\n        try {\n            for (String alias : Collections.list(_keyStore.aliases())) {\n                deleteKey(alias);\n            }\n        } catch (KeyStoreException e) {\n            throw new KeyStoreHandleException(e);\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/crypto/KeyStoreHandleException.java",
    "content": "package com.beemdevelopment.aegis.crypto;\n\npublic class KeyStoreHandleException extends Exception {\n    public KeyStoreHandleException(Throwable cause) {\n        super(cause);\n    }\n\n    public KeyStoreHandleException(String message) {\n        super(message);\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/crypto/MasterKey.java",
    "content": "package com.beemdevelopment.aegis.crypto;\n\nimport java.io.IOException;\nimport java.io.Serializable;\nimport java.security.InvalidAlgorithmParameterException;\nimport java.security.InvalidKeyException;\nimport java.security.NoSuchAlgorithmException;\n\nimport javax.crypto.BadPaddingException;\nimport javax.crypto.Cipher;\nimport javax.crypto.IllegalBlockSizeException;\nimport javax.crypto.NoSuchPaddingException;\nimport javax.crypto.SecretKey;\n\npublic class MasterKey implements Serializable {\n    private SecretKey _key;\n\n    public MasterKey(SecretKey key)  {\n        if (key == null) {\n            throw new IllegalArgumentException(\"Key cannot be null\");\n        }\n        _key = key;\n    }\n\n    public static MasterKey generate() {\n        return new MasterKey(CryptoUtils.generateKey());\n    }\n\n    public CryptResult encrypt(byte[] bytes) throws MasterKeyException {\n        try {\n            Cipher cipher = CryptoUtils.createEncryptCipher(_key);\n            return CryptoUtils.encrypt(bytes, cipher);\n        } catch (NoSuchPaddingException\n                | NoSuchAlgorithmException\n                | InvalidAlgorithmParameterException\n                | InvalidKeyException\n                | BadPaddingException\n                | IllegalBlockSizeException e) {\n            throw new MasterKeyException(e);\n        }\n    }\n\n    public CryptResult decrypt(byte[] bytes, CryptParameters params) throws MasterKeyException {\n        try {\n            Cipher cipher = CryptoUtils.createDecryptCipher(_key, params.getNonce());\n            return CryptoUtils.decrypt(bytes, cipher, params);\n        } catch (NoSuchPaddingException\n                | NoSuchAlgorithmException\n                | InvalidAlgorithmParameterException\n                | InvalidKeyException\n                | BadPaddingException\n                | IOException\n                | IllegalBlockSizeException e) {\n            throw new MasterKeyException(e);\n        }\n    }\n\n    public byte[] getBytes() {\n        return _key.getEncoded();\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/crypto/MasterKeyException.java",
    "content": "package com.beemdevelopment.aegis.crypto;\n\npublic class MasterKeyException extends Exception {\n    public MasterKeyException(Throwable cause) {\n        super(cause);\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/crypto/SCryptParameters.java",
    "content": "package com.beemdevelopment.aegis.crypto;\n\nimport java.io.Serializable;\n\npublic class SCryptParameters implements Serializable {\n    private int _n;\n    private int _r;\n    private int _p;\n    private byte[] _salt;\n\n    public SCryptParameters(int n, int r, int p, byte[] salt) {\n        _n = n;\n        _r = r;\n        _p = p;\n        _salt = salt;\n    }\n\n    public byte[] getSalt() {\n        return _salt;\n    }\n\n    public int getN() {\n        return _n;\n    }\n\n    public int getR() {\n        return _r;\n    }\n\n    public int getP() {\n        return _p;\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/crypto/bc/SCrypt.java",
    "content": "/*\nCopyright (c) 2000-2021 The Legion of the Bouncy Castle Inc. (https://www.bouncycastle.org)\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software\nand associated documentation files (the \"Software\"), to deal in the Software without restriction,\nincluding without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense,\nand/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so,\nsubject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial\nportions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,\nINCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR\nPURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\nLIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\nOTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\nDEALINGS IN THE SOFTWARE.\n */\n\npackage com.beemdevelopment.aegis.crypto.bc;\n\nimport org.bouncycastle.crypto.PBEParametersGenerator;\nimport org.bouncycastle.crypto.digests.SHA256Digest;\nimport org.bouncycastle.crypto.generators.PKCS5S2ParametersGenerator;\nimport org.bouncycastle.crypto.params.KeyParameter;\nimport org.bouncycastle.util.Arrays;\nimport org.bouncycastle.util.Integers;\nimport org.bouncycastle.util.Pack;\n\n/**\n * Implementation of the scrypt a password-based key derivation function.\n * <p>\n * Scrypt was created by Colin Percival and is specified in <a\n * href=\"https://tools.ietf.org/html/rfc7914\">RFC 7914 - The scrypt Password-Based Key Derivation Function</a>\n */\npublic class SCrypt\n{\n    private SCrypt()\n    {\n        // not used.\n    }\n\n    /**\n     * Generate a key using the scrypt key derivation function.\n     *\n     * @param P     the bytes of the pass phrase.\n     * @param S     the salt to use for this invocation.\n     * @param N     CPU/Memory cost parameter. Must be larger than 1, a power of 2 and less than\n     *              <code>2^(128 * r / 8)</code>.\n     * @param r     the block size, must be &gt;= 1.\n     * @param p     Parallelization parameter. Must be a positive integer less than or equal to\n     *              <code>Integer.MAX_VALUE / (128 * r * 8)</code>.\n     * @param dkLen the length of the key to generate.\n     * @return the generated key.\n     */\n    public static byte[] generate(byte[] P, byte[] S, int N, int r, int p, int dkLen)\n    {\n        if (P == null)\n        {\n            throw new IllegalArgumentException(\"Passphrase P must be provided.\");\n        }\n        if (S == null)\n        {\n            throw new IllegalArgumentException(\"Salt S must be provided.\");\n        }\n        if (N <= 1 || !isPowerOf2(N))\n        {\n            throw new IllegalArgumentException(\"Cost parameter N must be > 1 and a power of 2\");\n        }\n        // Only value of r that cost (as an int) could be exceeded for is 1\n        if (r == 1 && N >= 65536)\n        {\n            throw new IllegalArgumentException(\"Cost parameter N must be > 1 and < 65536.\");\n        }\n        if (r < 1)\n        {\n            throw new IllegalArgumentException(\"Block size r must be >= 1.\");\n        }\n        int maxParallel = Integer.MAX_VALUE / (128 * r * 8);\n        if (p < 1 || p > maxParallel)\n        {\n            throw new IllegalArgumentException(\"Parallelisation parameter p must be >= 1 and <= \" + maxParallel\n                    + \" (based on block size r of \" + r + \")\");\n        }\n        if (dkLen < 1)\n        {\n            throw new IllegalArgumentException(\"Generated key length dkLen must be >= 1.\");\n        }\n        return MFcrypt(P, S, N, r, p, dkLen);\n    }\n\n    private static byte[] MFcrypt(byte[] P, byte[] S, int N, int r, int p, int dkLen)\n    {\n        int MFLenBytes = r * 128;\n        byte[] bytes = SingleIterationPBKDF2(P, S, p * MFLenBytes);\n\n        int[] B = null;\n\n        try\n        {\n            int BLen = bytes.length >>> 2;\n            B = new int[BLen];\n\n            Pack.littleEndianToInt(bytes, 0, B);\n\n            /*\n             * Chunk memory allocations; We choose 'd' so that there will be 2**d chunks, each not\n             * larger than 32KiB, except that the minimum chunk size is 2 * r * 32.\n             */\n            int d = 0, total = N * r;\n            while ((N - d) > 2 && total > (1 << 10))\n            {\n                ++d;\n                total >>>= 1;\n            }\n\n            int MFLenWords = MFLenBytes >>> 2;\n            for (int BOff = 0; BOff < BLen; BOff += MFLenWords)\n            {\n                // TODO These can be done in parallel threads\n                SMix(B, BOff, N, d, r);\n            }\n\n            Pack.intToLittleEndian(B, bytes, 0);\n\n            return SingleIterationPBKDF2(P, bytes, dkLen);\n        }\n        finally\n        {\n            Clear(bytes);\n            Clear(B);\n        }\n    }\n\n    private static byte[] SingleIterationPBKDF2(byte[] P, byte[] S, int dkLen)\n    {\n        PBEParametersGenerator pGen = new PKCS5S2ParametersGenerator(new SHA256Digest());\n        pGen.init(P, S, 1);\n        KeyParameter key = (KeyParameter)pGen.generateDerivedMacParameters(dkLen * 8);\n        return key.getKey();\n    }\n\n    private static void SMix(int[] B, int BOff, int N, int d, int r)\n    {\n        int powN = Integers.numberOfTrailingZeros(N);\n        int blocksPerChunk = N >>> d;\n        int chunkCount = 1 << d, chunkMask = blocksPerChunk - 1, chunkPow = powN - d;\n\n        int BCount = r * 32;\n\n        int[] blockX1 = new int[16];\n        int[] blockX2 = new int[16];\n        int[] blockY = new int[BCount];\n\n        int[] X = new int[BCount];\n        int[][] VV = new int[chunkCount][];\n\n        try\n        {\n            System.arraycopy(B, BOff, X, 0, BCount);\n\n            for (int c = 0; c < chunkCount; ++c)\n            {\n                int[] V = new int[blocksPerChunk * BCount];\n                VV[c] = V;\n\n                int off = 0;\n                for (int i = 0; i < blocksPerChunk; i += 2)\n                {\n                    System.arraycopy(X, 0, V, off, BCount);\n                    off += BCount;\n                    BlockMix(X, blockX1, blockX2, blockY, r);\n                    System.arraycopy(blockY, 0, V, off, BCount);\n                    off += BCount;\n                    BlockMix(blockY, blockX1, blockX2, X, r);\n                }\n            }\n\n            int mask = N - 1;\n            for (int i = 0; i < N; ++i)\n            {\n                int j = X[BCount - 16] & mask;\n                int[] V = VV[j >>> chunkPow];\n                int VOff = (j & chunkMask) * BCount;\n                System.arraycopy(V, VOff, blockY, 0, BCount);\n                Xor(blockY, X, 0, blockY);\n                BlockMix(blockY, blockX1, blockX2, X, r);\n            }\n\n            System.arraycopy(X, 0, B, BOff, BCount);\n        }\n        finally\n        {\n            ClearAll(VV);\n            ClearAll(new int[][]{X, blockX1, blockX2, blockY});\n        }\n    }\n\n    private static void BlockMix(int[] B, int[] X1, int[] X2, int[] Y, int r)\n    {\n        System.arraycopy(B, B.length - 16, X1, 0, 16);\n\n        int BOff = 0, YOff = 0, halfLen = B.length >>> 1;\n\n        for (int i = 2 * r; i > 0; --i)\n        {\n            Xor(X1, B, BOff, X2);\n\n            Salsa20Engine.salsaCore(8, X2, X1);\n            System.arraycopy(X1, 0, Y, YOff, 16);\n\n            YOff = halfLen + BOff - YOff;\n            BOff += 16;\n        }\n    }\n\n    private static void Xor(int[] a, int[] b, int bOff, int[] output)\n    {\n        for (int i = output.length - 1; i >= 0; --i)\n        {\n            output[i] = a[i] ^ b[bOff + i];\n        }\n    }\n\n    private static void Clear(byte[] array)\n    {\n        if (array != null)\n        {\n            Arrays.fill(array, (byte)0);\n        }\n    }\n\n    private static void Clear(int[] array)\n    {\n        if (array != null)\n        {\n            Arrays.fill(array, 0);\n        }\n    }\n\n    private static void ClearAll(int[][] arrays)\n    {\n        for (int i = 0; i < arrays.length; ++i)\n        {\n            Clear(arrays[i]);\n        }\n    }\n\n    // note: we know X is non-zero\n    private static boolean isPowerOf2(int x)\n    {\n        return ((x & (x - 1)) == 0);\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/crypto/bc/Salsa20Engine.java",
    "content": "/*\nCopyright (c) 2000-2021 The Legion of the Bouncy Castle Inc. (https://www.bouncycastle.org)\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software\nand associated documentation files (the \"Software\"), to deal in the Software without restriction,\nincluding without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense,\nand/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so,\nsubject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial\nportions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,\nINCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR\nPURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\nLIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\nOTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\nDEALINGS IN THE SOFTWARE.\n */\n\npackage com.beemdevelopment.aegis.crypto.bc;\n\n/**\n * Implementation of Daniel J. Bernstein's Salsa20 stream cipher, Snuffle 2005\n */\npublic class Salsa20Engine {\n    private Salsa20Engine()\n    {\n\n    }\n\n    public static void salsaCore(int rounds, int[] input, int[] x)\n    {\n        if (input.length != 16)\n        {\n            throw new IllegalArgumentException();\n        }\n        if (x.length != 16)\n        {\n            throw new IllegalArgumentException();\n        }\n        if (rounds % 2 != 0)\n        {\n            throw new IllegalArgumentException(\"Number of rounds must be even\");\n        }\n\n        int x00 = input[ 0];\n        int x01 = input[ 1];\n        int x02 = input[ 2];\n        int x03 = input[ 3];\n        int x04 = input[ 4];\n        int x05 = input[ 5];\n        int x06 = input[ 6];\n        int x07 = input[ 7];\n        int x08 = input[ 8];\n        int x09 = input[ 9];\n        int x10 = input[10];\n        int x11 = input[11];\n        int x12 = input[12];\n        int x13 = input[13];\n        int x14 = input[14];\n        int x15 = input[15];\n\n        for (int i = rounds; i > 0; i -= 2)\n        {\n            x04 ^= Integer.rotateLeft(x00 + x12, 7);\n            x08 ^= Integer.rotateLeft(x04 + x00, 9);\n            x12 ^= Integer.rotateLeft(x08 + x04, 13);\n            x00 ^= Integer.rotateLeft(x12 + x08, 18);\n            x09 ^= Integer.rotateLeft(x05 + x01, 7);\n            x13 ^= Integer.rotateLeft(x09 + x05, 9);\n            x01 ^= Integer.rotateLeft(x13 + x09, 13);\n            x05 ^= Integer.rotateLeft(x01 + x13, 18);\n            x14 ^= Integer.rotateLeft(x10 + x06, 7);\n            x02 ^= Integer.rotateLeft(x14 + x10, 9);\n            x06 ^= Integer.rotateLeft(x02 + x14, 13);\n            x10 ^= Integer.rotateLeft(x06 + x02, 18);\n            x03 ^= Integer.rotateLeft(x15 + x11, 7);\n            x07 ^= Integer.rotateLeft(x03 + x15, 9);\n            x11 ^= Integer.rotateLeft(x07 + x03, 13);\n            x15 ^= Integer.rotateLeft(x11 + x07, 18);\n\n            x01 ^= Integer.rotateLeft(x00 + x03, 7);\n            x02 ^= Integer.rotateLeft(x01 + x00, 9);\n            x03 ^= Integer.rotateLeft(x02 + x01, 13);\n            x00 ^= Integer.rotateLeft(x03 + x02, 18);\n            x06 ^= Integer.rotateLeft(x05 + x04, 7);\n            x07 ^= Integer.rotateLeft(x06 + x05, 9);\n            x04 ^= Integer.rotateLeft(x07 + x06, 13);\n            x05 ^= Integer.rotateLeft(x04 + x07, 18);\n            x11 ^= Integer.rotateLeft(x10 + x09, 7);\n            x08 ^= Integer.rotateLeft(x11 + x10, 9);\n            x09 ^= Integer.rotateLeft(x08 + x11, 13);\n            x10 ^= Integer.rotateLeft(x09 + x08, 18);\n            x12 ^= Integer.rotateLeft(x15 + x14, 7);\n            x13 ^= Integer.rotateLeft(x12 + x15, 9);\n            x14 ^= Integer.rotateLeft(x13 + x12, 13);\n            x15 ^= Integer.rotateLeft(x14 + x13, 18);\n        }\n\n        x[ 0] = x00 + input[ 0];\n        x[ 1] = x01 + input[ 1];\n        x[ 2] = x02 + input[ 2];\n        x[ 3] = x03 + input[ 3];\n        x[ 4] = x04 + input[ 4];\n        x[ 5] = x05 + input[ 5];\n        x[ 6] = x06 + input[ 6];\n        x[ 7] = x07 + input[ 7];\n        x[ 8] = x08 + input[ 8];\n        x[ 9] = x09 + input[ 9];\n        x[10] = x10 + input[10];\n        x[11] = x11 + input[11];\n        x[12] = x12 + input[12];\n        x[13] = x13 + input[13];\n        x[14] = x14 + input[14];\n        x[15] = x15 + input[15];\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/crypto/otp/HOTP.java",
    "content": "package com.beemdevelopment.aegis.crypto.otp;\n\nimport java.nio.ByteBuffer;\nimport java.nio.ByteOrder;\nimport java.security.InvalidKeyException;\nimport java.security.NoSuchAlgorithmException;\n\nimport javax.crypto.Mac;\nimport javax.crypto.spec.SecretKeySpec;\n\npublic class HOTP {\n    private HOTP() {\n    }\n\n    public static OTP generateOTP(byte[] secret, String algo, int digits, long counter)\n            throws NoSuchAlgorithmException, InvalidKeyException {\n        byte[] hash = getHash(secret, algo, counter);\n\n        // truncate hash to get the HTOP value\n        // http://tools.ietf.org/html/rfc4226#section-5.4\n        int offset = hash[hash.length - 1] & 0xf;\n        int otp = ((hash[offset] & 0x7f) << 24)\n                | ((hash[offset + 1] & 0xff) << 16)\n                | ((hash[offset + 2] & 0xff) << 8)\n                | (hash[offset + 3] & 0xff);\n\n        return new OTP(otp, digits);\n    }\n\n    public static byte[] getHash(byte[] secret, String algo, long counter)\n            throws NoSuchAlgorithmException, InvalidKeyException {\n        SecretKeySpec key = new SecretKeySpec(secret, \"RAW\");\n\n        // encode counter in big endian\n        byte[] counterBytes = ByteBuffer.allocate(8)\n                .order(ByteOrder.BIG_ENDIAN)\n                .putLong(counter)\n                .array();\n\n        // calculate the hash of the counter\n        Mac mac = Mac.getInstance(algo);\n        mac.init(key);\n        return mac.doFinal(counterBytes);\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/crypto/otp/MOTP.java",
    "content": "package com.beemdevelopment.aegis.crypto.otp;\n\nimport androidx.annotation.NonNull;\nimport androidx.annotation.VisibleForTesting;\n\nimport com.beemdevelopment.aegis.encoding.Hex;\n\nimport java.nio.charset.StandardCharsets;\nimport java.security.MessageDigest;\nimport java.security.NoSuchAlgorithmException;\n\npublic class MOTP {\n    private final String _code;\n    private final int _digits;\n\n    private MOTP(String code, int digits) {\n        _code = code;\n        _digits = digits;\n    }\n\n    @NonNull\n    public static MOTP generateOTP(byte[] secret, String algo, int digits, int period, String pin)\n            throws NoSuchAlgorithmException {\n\n        return generateOTP(secret, algo, digits, period, pin, System.currentTimeMillis() / 1000);\n    }\n\n    @NonNull\n    public static MOTP generateOTP(byte[] secret, String algo, int digits, int period, String pin, long time)\n            throws NoSuchAlgorithmException {\n\n        long timeBasedCounter = time / period;\n        String secretAsString = Hex.encode(secret);\n        String toDigest =  timeBasedCounter + secretAsString + pin;\n        String code = getDigest(algo, toDigest.getBytes(StandardCharsets.UTF_8));\n\n        return new MOTP(code, digits);\n    }\n\n    @VisibleForTesting\n    @NonNull\n    protected static String getDigest(String algo, byte[] toDigest) throws NoSuchAlgorithmException {\n        MessageDigest md = MessageDigest.getInstance(algo);\n        byte[] digest = md.digest(toDigest);\n\n        return Hex.encode(digest);\n    }\n\n    @NonNull\n    @Override\n    public String toString() {\n        return _code.substring(0, _digits);\n    }\n}"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/crypto/otp/OTP.java",
    "content": "package com.beemdevelopment.aegis.crypto.otp;\n\nimport androidx.annotation.NonNull;\n\npublic class OTP {\n    private static final String STEAM_ALPHABET = \"23456789BCDFGHJKMNPQRTVWXY\";\n\n    private final int _code;\n    private final int _digits;\n\n    public OTP(int code, int digits) {\n        _code = code;\n        _digits = digits;\n    }\n\n    public int getCode() {\n        return _code;\n    }\n\n    public int getDigits() {\n        return _digits;\n    }\n\n    @NonNull\n    @Override\n    public String toString() {\n        int code = _code % (int) Math.pow(10, _digits);\n\n        // prepend zeroes if needed\n        StringBuilder res = new StringBuilder(Long.toString(code));\n        while (res.length() < _digits) {\n            res.insert(0, \"0\");\n        }\n\n        return res.toString();\n    }\n\n    public String toSteamString() {\n        int code = _code;\n        StringBuilder res = new StringBuilder();\n\n        for (int i = 0; i < _digits; i++) {\n            char c = STEAM_ALPHABET.charAt(code % STEAM_ALPHABET.length());\n            res.append(c);\n            code /= STEAM_ALPHABET.length();\n        }\n\n        return res.toString();\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/crypto/otp/TOTP.java",
    "content": "package com.beemdevelopment.aegis.crypto.otp;\n\nimport java.security.InvalidKeyException;\nimport java.security.NoSuchAlgorithmException;\n\npublic class TOTP {\n\n    private TOTP() {\n    }\n\n    public static OTP generateOTP(byte[] secret, String algo, int digits, long period, long seconds)\n            throws InvalidKeyException, NoSuchAlgorithmException {\n        long counter = (long) Math.floor((double) seconds / period);\n        return HOTP.generateOTP(secret, algo, digits, counter);\n    }\n\n    public static OTP generateOTP(byte[] secret, String algo, int digits, long period)\n            throws InvalidKeyException, NoSuchAlgorithmException {\n        return generateOTP(secret, algo, digits, period, System.currentTimeMillis() / 1000);\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/crypto/otp/YAOTP.java",
    "content": "package com.beemdevelopment.aegis.crypto.otp;\n\nimport androidx.annotation.NonNull;\n\nimport java.io.ByteArrayOutputStream;\nimport java.io.IOException;\nimport java.nio.ByteBuffer;\nimport java.nio.ByteOrder;\nimport java.nio.charset.StandardCharsets;\nimport java.security.InvalidKeyException;\nimport java.security.MessageDigest;\nimport java.security.NoSuchAlgorithmException;\nimport java.util.Arrays;\n\npublic class YAOTP {\n    private static final int EN_ALPHABET_LENGTH = 26;\n    private final long _code;\n    private final int _digits;\n\n    private YAOTP(long code, int digits) {\n        _code = code;\n        _digits = digits;\n    }\n\n    public static YAOTP generateOTP(byte[] secret, String pin, int digits, String otpAlgo, long period)\n            throws NoSuchAlgorithmException, InvalidKeyException, IOException {\n        long seconds = System.currentTimeMillis() / 1000;\n        return generateOTP(secret, pin, digits, otpAlgo, period, seconds);\n    }\n\n    public static YAOTP generateOTP(byte[] secret, String pin, int digits, String otpAlgo, long period, long seconds)\n            throws NoSuchAlgorithmException, InvalidKeyException, IOException {\n        byte[] pinWithHash;\n        byte[] pinBytes = pin.getBytes(StandardCharsets.UTF_8);\n        try (ByteArrayOutputStream stream = new ByteArrayOutputStream(pinBytes.length + secret.length)) {\n            stream.write(pinBytes);\n            stream.write(secret);\n            pinWithHash = stream.toByteArray();\n        }\n\n        MessageDigest md = MessageDigest.getInstance(\"SHA-256\");\n        byte[] keyHash = md.digest(pinWithHash);\n        if (keyHash[0] == 0) {\n            keyHash = Arrays.copyOfRange(keyHash, 1, keyHash.length);\n        }\n\n        long counter = (long) Math.floor((double) seconds / period);\n        byte[] periodHash = HOTP.getHash(keyHash, otpAlgo, counter);\n        int offset = periodHash[periodHash.length - 1] & 0xf;\n        periodHash[offset] &= 0x7f;\n        long otp = ByteBuffer.wrap(periodHash)\n                .order(ByteOrder.BIG_ENDIAN)\n                .getLong(offset);\n\n        return new YAOTP(otp, digits);\n    }\n\n    @NonNull\n    @Override\n    public String toString() {\n        long code = _code % (long) Math.pow(EN_ALPHABET_LENGTH, _digits);\n        char[] chars = new char[_digits];\n\n        for (int i = _digits - 1; i >= 0; i--) {\n            chars[i] = (char) ('a' + (code % EN_ALPHABET_LENGTH));\n            code /= EN_ALPHABET_LENGTH;\n        }\n\n        return new String(chars);\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/crypto/pins/GuardianProjectFDroidRSA2048.java",
    "content": "package com.beemdevelopment.aegis.crypto.pins;\n\nimport info.guardianproject.trustedintents.ApkSignaturePin;\n\npublic final class GuardianProjectFDroidRSA2048 extends ApkSignaturePin {\n\n    public GuardianProjectFDroidRSA2048() {\n        fingerprints = new String[]{\n                \"927f7e38b6acbecd84e02dace33efa9a7a2f0979750f28f585688ee38b3a4e28\",\n        };\n        certificates = new byte[][]{\n                {48, -126, 3, 95, 48, -126, 2, 71, -96, 3, 2, 1, 2, 2, 4, 28, -30, 107, -102, 48, 13, 6, 9, 42, -122, 72, -122, -9, 13, 1, 1, 11, 5, 0, 48, 96, 49, 11, 48, 9, 6, 3, 85, 4, 6, 19, 2, 85, 75, 49, 12, 48, 10, 6, 3, 85, 4, 8, 19, 3, 79, 82, 71, 49, 12, 48, 10, 6, 3, 85, 4, 7, 19, 3, 79, 82, 71, 49, 19, 48, 17, 6, 3, 85, 4, 10, 19, 10, 102, 100, 114, 111, 105, 100, 46, 111, 114, 103, 49, 15, 48, 13, 6, 3, 85, 4, 11, 19, 6, 70, 68, 114, 111, 105, 100, 49, 15, 48, 13, 6, 3, 85, 4, 3, 19, 6, 70, 68, 114, 111, 105, 100, 48, 30, 23, 13, 49, 55, 49, 50, 48, 55, 49, 55, 51, 48, 52, 50, 90, 23, 13, 52, 53, 48, 52, 50, 52, 49, 55, 51, 48, 52, 50, 90, 48, 96, 49, 11, 48, 9, 6, 3, 85, 4, 6, 19, 2, 85, 75, 49, 12, 48, 10, 6, 3, 85, 4, 8, 19, 3, 79, 82, 71, 49, 12, 48, 10, 6, 3, 85, 4, 7, 19, 3, 79, 82, 71, 49, 19, 48, 17, 6, 3, 85, 4, 10, 19, 10, 102, 100, 114, 111, 105, 100, 46, 111, 114, 103, 49, 15, 48, 13, 6, 3, 85, 4, 11, 19, 6, 70, 68, 114, 111, 105, 100, 49, 15, 48, 13, 6, 3, 85, 4, 3, 19, 6, 70, 68, 114, 111, 105, 100, 48, -126, 1, 34, 48, 13, 6, 9, 42, -122, 72, -122, -9, 13, 1, 1, 1, 5, 0, 3, -126, 1, 15, 0, 48, -126, 1, 10, 2, -126, 1, 1, 0, -107, -115, -106, 1, -26, 72, -105, -99, 62, 3, -55, 34, 99, -112, -68, -20, -115, 31, 34, 118, -50, 12, -32, -59, 74, -58, -37, -87, 21, 105, 36, -82, 13, -51, 66, 4, 55, -111, 13, -46, -7, -69, -15, 36, 118, -7, 101, -86, 123, -83, -103, 110, 116, -54, 112, 46, 12, 96, -76, -48, -70, -33, -81, 52, 59, 73, 107, -126, -72, -25, 32, 93, 29, -20, 5, -41, -27, 123, -9, 104, -31, -59, -1, -83, -93, 99, 85, -116, -62, -55, 18, -63, 6, -51, -110, 33, 9, 7, -49, 102, -20, -122, -124, -68, 93, -102, 31, 48, 86, 96, -99, 105, -52, 95, 12, 57, 99, 12, -24, 70, 40, -99, -20, -21, -85, -70, -105, 95, 117, -31, 126, -126, -39, 46, -62, 59, -23, -74, 108, -12, -56, -40, -96, 79, -37, -82, 1, 99, -104, 48, -60, 92, 14, 109, 127, -22, 31, 115, -27, 108, 9, 92, 118, -45, 103, 117, 57, -50, -82, 114, -113, 68, -82, 87, 96, 111, 72, 65, -63, 12, 31, -34, -31, -55, -101, 101, 101, 59, 73, -119, -122, 82, 28, 47, -108, -85, 59, 46, 89, -93, -1, 9, -11, -51, 63, -44, 109, -76, -103, -26, -49, -80, 6, 52, -27, 73, -104, 40, 2, -101, -124, 60, -52, -105, -70, -24, -62, 88, 38, 53, -99, -92, 31, 119, 26, 79, 60, -124, 25, -115, -89, -115, -109, 0, 6, 122, -78, 116, 82, 3, 39, -67, 45, -43, 17, -39, 2, 3, 1, 0, 1, -93, 33, 48, 31, 48, 29, 6, 3, 85, 29, 14, 4, 22, 4, 20, 63, 109, -42, -109, 25, 22, 7, -37, -22, -41, -38, 58, -56, 2, -68, -38, -22, 65, -28, -60, 48, 13, 6, 9, 42, -122, 72, -122, -9, 13, 1, 1, 11, 5, 0, 3, -126, 1, 1, 0, 94, 17, 31, 36, 85, -11, 85, 44, 19, -80, -20, -92, -118, 93, 40, 45, 96, 31, -3, -37, -110, -96, 102, 81, 61, -74, -125, -117, -112, 58, -47, 17, 78, -18, 111, -116, 26, -91, 73, 100, 84, -99, 21, 87, 73, -106, 108, -51, -125, -21, 119, -88, -78, 2, 82, -109, -64, -9, -86, -112, -115, 66, -86, 46, 71, 107, -65, 96, -102, 47, 35, -45, -126, 33, 34, 121, -25, -85, -121, -56, -42, 22, -1, -95, -86, 81, 100, -70, 113, 104, -73, 22, -19, 79, -19, 52, 62, 42, 76, -112, 94, -34, 42, -57, -75, -90, -58, 118, 127, -106, -39, 108, -56, -79, 103, -33, 22, 3, 47, 103, -76, -81, 53, -22, -44, -26, -102, 63, -99, 39, 38, -108, 75, 33, 10, 25, -110, -125, -115, 114, -69, 73, -112, 36, 74, 77, -82, -44, 29, -123, -8, -117, 71, -105, 15, -109, 51, 22, 4, 80, 1, 43, 118, 121, -113, -70, 83, -56, 82, -110, 4, -63, 16, -57, 126, -70, 81, 73, 61, 2, -61, 24, -14, -10, 4, -21, 90, 24, 66, 41, -57, -60, -113, -18, -54, -1, 103, -75, 32, -64, 67, 103, 109, -79, -12, -113, -27, 114, 89, 116, 115, -13, -123, -70, 61, -41, -46, -118, 29, -105, -97, -75, 39, -51, 60, 88, 125, 55, -46, -95, 52, 57, 52, -115, 80, 44, 109, 119, -116, -62, -77, -74, -88, 41, 57, -65, -71, -115, -67, 23, 66, -21, 56, 51, -91, 109},};\n    }\n}"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/database/AppDatabase.java",
    "content": "package com.beemdevelopment.aegis.database;\n\nimport android.content.Context;\n\nimport androidx.room.Database;\nimport androidx.room.Room;\nimport androidx.room.RoomDatabase;\n\nimport java.util.concurrent.ExecutorService;\nimport java.util.concurrent.Executors;\n\n@Database(entities = {AuditLogEntry.class}, version = 1)\npublic abstract class AppDatabase extends RoomDatabase {\n    public abstract AuditLogDao auditLogDao();\n}"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/database/AuditLogDao.java",
    "content": "package com.beemdevelopment.aegis.database;\n\nimport androidx.lifecycle.LiveData;\nimport androidx.room.Dao;\nimport androidx.room.Insert;\nimport androidx.room.Query;\n\nimport java.util.List;\n\n@Dao\npublic interface AuditLogDao {\n    @Insert\n    void insert(AuditLogEntry log);\n\n    @Query(\"SELECT * FROM audit_logs WHERE timestamp >= strftime('%s', 'now', '-30 days') ORDER BY timestamp DESC\")\n    LiveData<List<AuditLogEntry>> getAll();\n}"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/database/AuditLogEntry.java",
    "content": "package com.beemdevelopment.aegis.database;\n\nimport androidx.annotation.NonNull;\nimport androidx.annotation.Nullable;\nimport androidx.room.ColumnInfo;\nimport androidx.room.Entity;\nimport androidx.room.Ignore;\nimport androidx.room.PrimaryKey;\n\nimport com.beemdevelopment.aegis.EventType;\n\n@Entity(tableName = \"audit_logs\")\npublic class AuditLogEntry {\n    @PrimaryKey(autoGenerate = true)\n    protected long id;\n\n    @NonNull\n    @ColumnInfo(name = \"event_type\")\n    private final EventType _eventType;\n\n    @ColumnInfo(name = \"reference\")\n    private final String _reference;\n\n    @ColumnInfo(name = \"timestamp\")\n    private final long _timestamp;\n\n    @Ignore\n    public AuditLogEntry(@NonNull EventType eventType) {\n        this(eventType, null);\n    }\n\n    @Ignore\n    public AuditLogEntry(@NonNull EventType eventType, @Nullable String reference) {\n        _eventType = eventType;\n        _reference = reference;\n        _timestamp = System.currentTimeMillis();\n    }\n\n    AuditLogEntry(long id, @NonNull EventType eventType, @Nullable String reference, long timestamp) {\n        this.id = id;\n        _eventType = eventType;\n        _reference = reference;\n        _timestamp = timestamp;\n    }\n\n    public long getId() {\n        return id;\n    }\n\n    public EventType getEventType() {\n        return _eventType;\n    }\n\n    public String getReference() {\n        return _reference;\n    }\n\n    public long getTimestamp() {\n        return _timestamp;\n    }\n}"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/database/AuditLogRepository.java",
    "content": "package com.beemdevelopment.aegis.database;\n\nimport androidx.lifecycle.LiveData;\n\nimport com.beemdevelopment.aegis.EventType;\n\nimport java.util.List;\nimport java.util.concurrent.Executor;\nimport java.util.concurrent.Executors;\n\npublic class AuditLogRepository {\n    private final AuditLogDao _auditLogDao;\n    private final Executor _executor;\n\n    public AuditLogRepository(AuditLogDao auditLogDao) {\n        _auditLogDao = auditLogDao;\n        _executor = Executors.newSingleThreadExecutor();\n    }\n\n    public LiveData<List<AuditLogEntry>> getAllAuditLogEntries() {\n        return _auditLogDao.getAll();\n    }\n\n    public void addVaultUnlockedEvent() {\n        AuditLogEntry auditLogEntry = new AuditLogEntry(EventType.VAULT_UNLOCKED);\n        insert(auditLogEntry);\n    }\n\n    public void addBackupCreatedEvent() {\n        AuditLogEntry auditLogEntry = new AuditLogEntry(EventType.VAULT_BACKUP_CREATED);\n        insert(auditLogEntry);\n    }\n\n    public void addAndroidBackupCreatedEvent() {\n        AuditLogEntry auditLogEntry = new AuditLogEntry(EventType.VAULT_ANDROID_BACKUP_CREATED);\n        insert(auditLogEntry);\n    }\n\n    public void addVaultExportedEvent() {\n        AuditLogEntry auditLogEntry = new AuditLogEntry(EventType.VAULT_EXPORTED);\n        insert(auditLogEntry);\n    }\n\n    public void addEntrySharedEvent(String reference) {\n        AuditLogEntry auditLogEntry = new AuditLogEntry(EventType.ENTRY_SHARED, reference);\n        insert(auditLogEntry);\n    }\n\n    public void addVaultUnlockFailedPasswordEvent() {\n        AuditLogEntry auditLogEntry = new AuditLogEntry(EventType.VAULT_UNLOCK_FAILED_PASSWORD);\n        insert(auditLogEntry);\n\n    }\n\n    public void addVaultUnlockFailedBiometricsEvent() {\n        AuditLogEntry auditLogEntry = new AuditLogEntry(EventType.VAULT_UNLOCK_FAILED_BIOMETRICS);\n        insert(auditLogEntry);\n    }\n\n    public void insert(AuditLogEntry auditLogEntry) {\n        _executor.execute(() -> {\n            _auditLogDao.insert(auditLogEntry);\n        });\n    }\n\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/encoding/Base32.java",
    "content": "package com.beemdevelopment.aegis.encoding;\n\nimport com.google.common.io.BaseEncoding;\n\nimport java.nio.charset.StandardCharsets;\nimport java.util.Locale;\n\npublic class Base32 {\n    private Base32() {\n\n    }\n\n    public static byte[] decode(String s) throws EncodingException {\n        try {\n            return BaseEncoding.base32().decode(s.toUpperCase(Locale.ROOT));\n        } catch (IllegalArgumentException e) {\n            throw new EncodingException(e);\n        }\n    }\n\n    public static String encode(byte[] data) {\n        return BaseEncoding.base32().omitPadding().encode(data);\n    }\n\n    public static String encode(String s) {\n        byte[] bytes = s.getBytes(StandardCharsets.UTF_8);\n        return encode(bytes);\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/encoding/Base64.java",
    "content": "package com.beemdevelopment.aegis.encoding;\n\nimport com.google.common.io.BaseEncoding;\n\nimport java.nio.charset.StandardCharsets;\n\npublic class Base64 {\n    private Base64() {\n\n    }\n\n    public static byte[] decode(String s) throws EncodingException {\n        try {\n            return BaseEncoding.base64().decode(s);\n        } catch (IllegalArgumentException e) {\n            throw new EncodingException(e);\n        }\n    }\n\n    public static byte[] decode(byte[] s) throws EncodingException {\n        return decode(new String(s, StandardCharsets.UTF_8));\n    }\n\n    public static String encode(byte[] data) {\n        return BaseEncoding.base64().encode(data);\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/encoding/EncodingException.java",
    "content": "package com.beemdevelopment.aegis.encoding;\n\nimport java.io.IOException;\n\npublic class EncodingException extends IOException {\n    public EncodingException(Throwable cause) {\n        super(cause);\n    }\n\n    public EncodingException(String message) {\n        super(message);\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/encoding/Hex.java",
    "content": "package com.beemdevelopment.aegis.encoding;\n\nimport com.google.common.io.BaseEncoding;\n\nimport java.util.Locale;\n\npublic class Hex {\n    private Hex() {\n\n    }\n\n    public static byte[] decode(String s) throws EncodingException {\n        try {\n            return BaseEncoding.base16().decode(s.toUpperCase(Locale.ROOT));\n        } catch (IllegalArgumentException e) {\n            throw new EncodingException(e);\n        }\n    }\n\n    public static String encode(byte[] data) {\n        return BaseEncoding.base16().lowerCase().encode(data);\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/helpers/AnimationsHelper.java",
    "content": "package com.beemdevelopment.aegis.helpers;\n\nimport android.content.Context;\nimport android.provider.Settings;\nimport android.view.animation.Animation;\nimport android.view.animation.AnimationUtils;\nimport android.view.animation.LayoutAnimationController;\n\npublic class AnimationsHelper {\n    private AnimationsHelper() {\n\n    }\n\n    public static Animation loadScaledAnimation(Context context, int animationResId) {\n        return loadScaledAnimation(context, animationResId, Scale.ANIMATOR);\n    }\n\n    public static Animation loadScaledAnimation(Context context, int animationResId, Scale scale) {\n        Animation animation = AnimationUtils.loadAnimation(context, animationResId);\n        long newDuration = (long) (animation.getDuration() * scale.getValue(context));\n        animation.setDuration(newDuration);\n        return animation;\n    }\n\n    public static LayoutAnimationController loadScaledLayoutAnimation(Context context, int animationResId) {\n        return loadScaledLayoutAnimation(context, animationResId, Scale.ANIMATOR);\n    }\n\n    public static LayoutAnimationController loadScaledLayoutAnimation(Context context, int animationResId, Scale scale) {\n        LayoutAnimationController controller = AnimationUtils.loadLayoutAnimation(context, animationResId);\n        Animation animation = controller.getAnimation();\n        animation.setDuration((long) (animation.getDuration() * scale.getValue(context)));\n        return controller;\n    }\n\n    public enum Scale {\n        ANIMATOR(Settings.Global.ANIMATOR_DURATION_SCALE),\n        TRANSITION(Settings.Global.TRANSITION_ANIMATION_SCALE);\n\n        private final String _setting;\n\n        Scale(String setting) {\n            _setting = setting;\n        }\n\n        public float getValue(Context context) {\n            return Settings.Global.getFloat(context.getContentResolver(), _setting, 1.0f);\n        }\n\n        public boolean isZero(Context context) {\n            return getValue(context) == 0;\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/helpers/BiometricSlotInitializer.java",
    "content": "package com.beemdevelopment.aegis.helpers;\n\nimport androidx.annotation.NonNull;\nimport androidx.biometric.BiometricPrompt;\nimport androidx.fragment.app.Fragment;\nimport androidx.fragment.app.FragmentActivity;\n\nimport com.beemdevelopment.aegis.crypto.KeyStoreHandle;\nimport com.beemdevelopment.aegis.crypto.KeyStoreHandleException;\nimport com.beemdevelopment.aegis.vault.slots.BiometricSlot;\nimport com.beemdevelopment.aegis.vault.slots.Slot;\nimport com.beemdevelopment.aegis.vault.slots.SlotException;\n\nimport java.util.Objects;\n\nimport javax.crypto.Cipher;\nimport javax.crypto.SecretKey;\n\n/**\n * A class that can prepare initialization of a BiometricSlot by generating a new\n * key in the Android KeyStore and authenticating a cipher for it through a\n * BiometricPrompt.\n */\npublic class BiometricSlotInitializer extends BiometricPrompt.AuthenticationCallback {\n    private BiometricSlot _slot;\n    private Listener _listener;\n    private BiometricPrompt _prompt;\n\n    public BiometricSlotInitializer(Fragment fragment, Listener listener) {\n        _listener = listener;\n        _prompt = new BiometricPrompt(fragment, new UiThreadExecutor(), this);\n    }\n\n    public BiometricSlotInitializer(FragmentActivity activity, Listener listener) {\n        _listener = listener;\n        _prompt = new BiometricPrompt(activity, new UiThreadExecutor(), this);\n    }\n\n    /**\n     * Generates a new key in the Android KeyStore for the new BiometricSlot,\n     * initializes a cipher with it and shows a BiometricPrompt to the user for\n     * authentication. If authentication is successful, the new slot will be\n     * initialized and delivered back through the listener.\n     */\n    public void authenticate(BiometricPrompt.PromptInfo info) {\n        if (_slot != null) {\n            throw new IllegalStateException(\"Biometric authentication already in progress\");\n        }\n\n        KeyStoreHandle keyStore;\n        try {\n            keyStore = new KeyStoreHandle();\n        } catch (KeyStoreHandleException e) {\n            fail(e);\n            return;\n        }\n\n        // generate a new Android KeyStore key\n        // and assign it the UUID of the new slot as an alias\n        Cipher cipher;\n        BiometricSlot slot = new BiometricSlot();\n        try {\n            SecretKey key = keyStore.generateKey(slot.getUUID().toString());\n            cipher = Slot.createEncryptCipher(key);\n        } catch (KeyStoreHandleException | SlotException e) {\n            fail(e);\n            return;\n        }\n\n        _slot = slot;\n        _prompt.authenticate(info, new BiometricPrompt.CryptoObject(cipher));\n    }\n\n    /**\n     * Cancels the BiometricPrompt and resets the state of the initializer. It will\n     * also attempt to delete the previously generated Android KeyStore key.\n     */\n    public void cancelAuthentication() {\n        if (_slot == null) {\n            throw new IllegalStateException(\"Biometric authentication not in progress\");\n        }\n\n        reset();\n        _prompt.cancelAuthentication();\n    }\n\n    private void reset() {\n        if (_slot != null) {\n            try {\n                // clean up the unused KeyStore key\n                // this is non-critical, so just fail silently if an error occurs\n                String uuid = _slot.getUUID().toString();\n                KeyStoreHandle keyStore = new KeyStoreHandle();\n                if (keyStore.containsKey(uuid)) {\n                    keyStore.deleteKey(uuid);\n                }\n            } catch (KeyStoreHandleException e) {\n                e.printStackTrace();\n            }\n\n            _slot = null;\n        }\n    }\n\n    private void fail(int errorCode, CharSequence errString) {\n        reset();\n        _listener.onSlotInitializationFailed(errorCode, errString);\n    }\n\n    private void fail(Exception e) {\n        e.printStackTrace();\n        fail(0, e.toString());\n    }\n\n    @Override\n    public void onAuthenticationError(int errorCode, @NonNull CharSequence errString) {\n        super.onAuthenticationError(errorCode, errString);\n        fail(errorCode, errString.toString());\n    }\n\n    @Override\n    public void onAuthenticationSucceeded(@NonNull BiometricPrompt.AuthenticationResult result) {\n        super.onAuthenticationSucceeded(result);\n        _listener.onInitializeSlot(_slot, Objects.requireNonNull(result.getCryptoObject()).getCipher());\n    }\n\n    @Override\n    public void onAuthenticationFailed() {\n        super.onAuthenticationFailed();\n    }\n\n    public interface Listener {\n        void onInitializeSlot(BiometricSlot slot, Cipher cipher);\n        void onSlotInitializationFailed(int errorCode, @NonNull CharSequence errString);\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/helpers/BiometricsHelper.java",
    "content": "package com.beemdevelopment.aegis.helpers;\n\nimport android.content.Context;\n\nimport androidx.biometric.BiometricManager;\nimport androidx.biometric.BiometricPrompt;\n\npublic class BiometricsHelper {\n    private BiometricsHelper() {\n\n    }\n\n    public static BiometricManager getManager(Context context) {\n        BiometricManager manager = BiometricManager.from(context);\n        if (manager.canAuthenticate(BiometricManager.Authenticators.BIOMETRIC_STRONG) == BiometricManager.BIOMETRIC_SUCCESS) {\n            return manager;\n        }\n        return null;\n    }\n\n    public static boolean isCanceled(int errorCode) {\n        return errorCode == BiometricPrompt.ERROR_CANCELED\n                || errorCode == BiometricPrompt.ERROR_USER_CANCELED\n                || errorCode == BiometricPrompt.ERROR_NEGATIVE_BUTTON;\n    }\n\n    public static boolean isAvailable(Context context) {\n        return getManager(context) != null;\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/helpers/BitmapHelper.java",
    "content": "package com.beemdevelopment.aegis.helpers;\n\nimport android.graphics.Bitmap;\nimport android.graphics.BitmapFactory;\n\nimport com.beemdevelopment.aegis.icons.IconType;\nimport com.beemdevelopment.aegis.vault.VaultEntryIcon;\n\nimport java.io.ByteArrayOutputStream;\nimport java.util.Objects;\n\npublic class BitmapHelper {\n    private BitmapHelper() {\n\n    }\n\n    /**\n     * Scales the given Bitmap to the given maximum width/height, while keeping the aspect ratio intact.\n     */\n    public static Bitmap resize(Bitmap bitmap, int maxWidth, int maxHeight) {\n        if (maxHeight <= 0 || maxWidth <= 0) {\n            return bitmap;\n        }\n\n        float maxRatio = (float) maxWidth / maxHeight;\n        float ratio = (float) bitmap.getWidth() / bitmap.getHeight();\n\n        int width = maxWidth;\n        int height = maxHeight;\n        if (maxRatio > 1) {\n            width = (int) ((float) maxHeight * ratio);\n        } else {\n            height = (int) ((float) maxWidth / ratio);\n        }\n\n        return Bitmap.createScaledBitmap(bitmap, width, height, true);\n    }\n\n    public static boolean isVaultEntryIconOptimized(VaultEntryIcon icon) {\n        BitmapFactory.Options opts = new BitmapFactory.Options();\n        opts.inJustDecodeBounds = true;\n        BitmapFactory.decodeByteArray(icon.getBytes(), 0, icon.getBytes().length, opts);\n        return opts.outWidth <= VaultEntryIcon.MAX_DIMENS && opts.outHeight <= VaultEntryIcon.MAX_DIMENS;\n    }\n\n    public static VaultEntryIcon toVaultEntryIcon(Bitmap bitmap, IconType iconType) {\n        if (bitmap.getWidth() > VaultEntryIcon.MAX_DIMENS\n                || bitmap.getHeight() > VaultEntryIcon.MAX_DIMENS) {\n            bitmap = resize(bitmap, VaultEntryIcon.MAX_DIMENS, VaultEntryIcon.MAX_DIMENS);\n        }\n\n        ByteArrayOutputStream stream = new ByteArrayOutputStream();\n        if (Objects.equals(iconType, IconType.PNG)) {\n            bitmap.compress(Bitmap.CompressFormat.PNG, 100, stream);\n        } else {\n            iconType = IconType.JPEG;\n            bitmap.compress(Bitmap.CompressFormat.JPEG, 90, stream);\n        }\n\n        byte[] data = stream.toByteArray();\n        return new VaultEntryIcon(data, iconType);\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/helpers/CenterVerticalSpan.java",
    "content": "package com.beemdevelopment.aegis.helpers;\n\nimport android.graphics.Rect;\nimport android.text.TextPaint;\nimport android.text.style.MetricAffectingSpan;\n\nimport androidx.annotation.NonNull;\n\npublic class CenterVerticalSpan extends MetricAffectingSpan {\n    Rect _substringBounds;\n\n    public CenterVerticalSpan(Rect substringBounds) {\n        _substringBounds = substringBounds;\n    }\n\n    @Override\n    public void updateMeasureState(@NonNull TextPaint textPaint) {\n        applyBaselineShift(textPaint);\n    }\n\n    @Override\n    public void updateDrawState(@NonNull TextPaint textPaint) {\n        applyBaselineShift(textPaint);\n    }\n\n    private void applyBaselineShift(TextPaint textPaint) {\n        float topDifference = textPaint.getFontMetrics().top - _substringBounds.top;\n        textPaint.baselineShift -= (topDifference / 2f);\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/helpers/ContextHelper.java",
    "content": "package com.beemdevelopment.aegis.helpers;\n\nimport android.content.Context;\nimport android.content.ContextWrapper;\n\nimport androidx.activity.ComponentActivity;\nimport androidx.annotation.NonNull;\nimport androidx.lifecycle.Lifecycle;\n\nimport javax.annotation.Nullable;\n\n/**\n * ContextHelper contains some disgusting hacks to obtain the Activity/Lifecycle from a Context.\n */\npublic class ContextHelper {\n    private ContextHelper() {\n\n    }\n\n    // source: https://github.com/androidx/androidx/blob/e32e1da51a0c7448c74861c667fa76738a415a89/mediarouter/mediarouter/src/main/java/androidx/mediarouter/app/MediaRouteButton.java#L425-L435\n    @Nullable\n    public static ComponentActivity getActivity(@NonNull Context context) {\n        while (context instanceof ContextWrapper) {\n            if (context instanceof ComponentActivity) {\n                return (ComponentActivity) context;\n            }\n\n            context = ((ContextWrapper) context).getBaseContext();\n        }\n\n        return null;\n    }\n\n    @Nullable\n    public static Lifecycle getLifecycle(@NonNull Context context) {\n        ComponentActivity activity = getActivity(context);\n        return activity == null ? null : activity.getLifecycle();\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/helpers/DropdownHelper.java",
    "content": "package com.beemdevelopment.aegis.helpers;\n\nimport android.content.Context;\nimport android.widget.ArrayAdapter;\nimport android.widget.AutoCompleteTextView;\n\nimport androidx.annotation.ArrayRes;\n\nimport com.beemdevelopment.aegis.R;\n\nimport java.util.List;\n\npublic class DropdownHelper {\n    private DropdownHelper() {\n\n    }\n\n    public static void fillDropdown(Context context, AutoCompleteTextView dropdown, @ArrayRes int textArrayResId) {\n        ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(context, textArrayResId, R.layout.dropdown_list_item);\n        dropdown.setAdapter(adapter);\n    }\n\n    public static <T> void fillDropdown(Context context, AutoCompleteTextView dropdown, List<T> items) {\n        ArrayAdapter<T> adapter = new ArrayAdapter<>(context, R.layout.dropdown_list_item, items);\n        dropdown.setAdapter(adapter);\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/helpers/EditTextHelper.java",
    "content": "package com.beemdevelopment.aegis.helpers;\n\nimport android.text.Editable;\nimport android.widget.EditText;\n\nimport java.util.Arrays;\n\npublic class EditTextHelper {\n    private EditTextHelper() {\n    }\n\n    public static char[] getEditTextChars(EditText text) {\n        Editable editable = text.getText();\n        char[] chars = new char[editable.length()];\n        editable.getChars(0, editable.length(), chars, 0);\n        return chars;\n    }\n\n    public static boolean areEditTextsEqual(EditText text1, EditText text2) {\n        char[] password = getEditTextChars(text1);\n        char[] passwordConfirm = getEditTextChars(text2);\n        return password.length != 0 && Arrays.equals(password, passwordConfirm);\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/helpers/FabMenuHelper.java",
    "content": "package com.beemdevelopment.aegis.helpers;\n\nimport android.animation.ValueAnimator;\nimport android.graphics.Matrix;\nimport android.graphics.drawable.Drawable;\nimport android.view.View;\nimport android.view.ViewGroup;\nimport android.view.animation.OvershootInterpolator;\nimport android.widget.ImageView;\n\n\nimport com.google.android.material.floatingactionbutton.FloatingActionButton;\n\nimport java.util.ArrayList;\nimport java.util.List;\nimport java.util.Map;\nimport java.util.function.Consumer;\n\npublic class FabMenuHelper {\n    private final static long ANIMATION_DURATION = 300L;\n    private final static long ANIMATION_ACTION_DELAY = 50L;\n    private final View _scrim;\n    private final View _menuItemsContainer;\n    private final FloatingActionButton _mainFab;\n    private final List<View> _actions;\n    private Consumer<Boolean> _stateListener;\n    private boolean _isOpen = false;\n\n    public FabMenuHelper(\n        View scrim,\n        ViewGroup menuItemsContainer,\n        FloatingActionButton fab,\n        Map<View, Runnable> actions\n    ) {\n        _scrim = scrim;\n        _menuItemsContainer = menuItemsContainer;\n        _mainFab = fab;\n        _actions = new ArrayList<>(actions.keySet());\n\n        for (View action : _actions) {\n            action.setVisibility(View.GONE);\n            action.setAlpha(0f);\n            action.setScaleX(0f);\n            action.setScaleY(0f);\n        }\n\n        setupClickListeners(actions);\n    }\n\n    public void setOnFabMenuStateChangeListener(Consumer<Boolean> listener) {\n        _stateListener = listener;\n    }\n\n    private void setupClickListeners(Map<View, Runnable> actions) {\n        _mainFab.setOnClickListener(v -> toggle());\n        _scrim.setOnClickListener(v -> close());\n\n        actions.forEach((action, onClick) -> {\n            action.setOnClickListener(v -> {\n                if (onClick != null) {\n                    onClick.run();\n                }\n                close();\n            });\n        });\n    }\n\n    public void toggle() {\n        if (_isOpen) {\n            close();\n        } else {\n            open();\n        }\n    }\n\n    public void open() {\n        if (_isOpen) {\n            return;\n        }\n\n        _isOpen = true;\n\n        _scrim.animate()\n            .alpha(0.5f)\n            .setDuration(ANIMATION_DURATION)\n            .withStartAction(() -> _scrim.setVisibility(View.VISIBLE))\n            .start();\n\n        _menuItemsContainer.setVisibility(View.VISIBLE);\n\n        long delay = 0L;\n        for (int i = _actions.size() - 1; i >= 0; i--) {\n            animateActionIn(_actions.get(i), delay);\n            delay += ANIMATION_ACTION_DELAY;\n        }\n\n        animateFabIconForward(_mainFab);\n\n        if (_stateListener != null) {\n            _stateListener.accept(true);\n        }\n    }\n\n    public void close() {\n        if (!_isOpen) {\n            return;\n        }\n\n        _isOpen = false;\n\n        _scrim.animate()\n            .alpha(0f)\n            .setDuration(ANIMATION_DURATION)\n            .withEndAction(() -> _scrim.setVisibility(View.GONE))\n            .start();\n\n        long delay = 0L;\n        for (View action : _actions) {\n            animateActionOut(action, delay);\n            delay += ANIMATION_ACTION_DELAY;\n        }\n\n        animateFabIconBackward(_mainFab);\n\n        _mainFab.postDelayed(() -> {\n            if (!_isOpen) {\n                _menuItemsContainer.setVisibility(View.GONE);\n            }\n        }, ANIMATION_DURATION);\n\n        if (_stateListener != null) {\n            _stateListener.accept(false);\n        }\n    }\n\n    private void animateFabIconForward(FloatingActionButton fab) {\n        animateFabIcon(fab, 0f, 45f);\n    }\n\n    private void animateFabIconBackward(FloatingActionButton fab) {\n        animateFabIcon(fab, 45f, 0f);\n    }\n\n    private void animateFabIcon(FloatingActionButton fab, float from, float to) {\n        Drawable drawable = _mainFab.getDrawable();\n        int width = drawable.getIntrinsicWidth();\n        int height = drawable.getIntrinsicHeight();\n        fab.setScaleType(ImageView.ScaleType.MATRIX);\n        Matrix matrix = new Matrix();\n        ValueAnimator anim = ValueAnimator.ofFloat(from, to);\n        anim.setDuration(100L);\n\n        anim.addUpdateListener(valueAnimator -> {\n            Float angle = (Float) valueAnimator.getAnimatedValue();\n            matrix.reset();\n            matrix.postRotate(angle, width / 2f, height / 2f);\n            fab.setImageMatrix(matrix);\n        });\n\n        anim.start();\n    }\n\n    private void animateActionIn(View action, long delay) {\n        action.setVisibility(View.VISIBLE);\n        action.setAlpha(0f);\n        action.setScaleX(0.4f);\n        action.setScaleY(0.4f);\n\n        action.animate()\n                .alpha(1f)\n                .scaleX(1f)\n                .scaleY(1f)\n                .setDuration(ANIMATION_DURATION)\n                .setStartDelay(delay)\n                .setInterpolator(new OvershootInterpolator(1.2f))\n                .start();\n    }\n\n    private void animateActionOut(View action, long delay) {\n        action.animate()\n            .alpha(0f)\n            .scaleX(0f)\n            .scaleY(0f)\n            .setDuration(ANIMATION_DURATION)\n            .setStartDelay(delay)\n            .withEndAction(() -> action.setVisibility(View.GONE))\n            .start();\n    }\n\n    public boolean isOpen() {\n        return _isOpen;\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/helpers/FabScrollHelper.java",
    "content": "package com.beemdevelopment.aegis.helpers;\n\nimport android.animation.Animator;\nimport android.animation.AnimatorListenerAdapter;\nimport android.view.View;\nimport android.view.animation.AccelerateInterpolator;\nimport android.view.animation.DecelerateInterpolator;\nimport androidx.coordinatorlayout.widget.CoordinatorLayout;\n\npublic class FabScrollHelper {\n    private View _fabMenu;\n    private boolean _isAnimating;\n\n    public FabScrollHelper(View floatingActionsMenu) {\n        _fabMenu = floatingActionsMenu;\n    }\n\n    public void onScroll(int dx, int dy) {\n        if (dy > 2 && _fabMenu.getVisibility() == View.VISIBLE && !_isAnimating) {\n            setVisible(false);\n        } else if (dy < -2 && _fabMenu.getVisibility() != View.VISIBLE && !_isAnimating) {\n            setVisible(true);\n        }\n    }\n\n    public void setVisible(boolean visible) {\n        if (visible) {\n            _fabMenu.setVisibility(View.VISIBLE);\n            _fabMenu.animate()\n                    .translationY(0)\n                    .setInterpolator(new DecelerateInterpolator(2))\n                    .setListener(new AnimatorListenerAdapter() {\n                        @Override\n                        public void onAnimationEnd(Animator animation) {\n                            _isAnimating = false;\n                            super.onAnimationEnd(animation);\n                        }\n                    }).start();\n        } else {\n            _isAnimating = true;\n            CoordinatorLayout.LayoutParams lp = (CoordinatorLayout.LayoutParams) _fabMenu.getLayoutParams();\n            int fabBottomMargin = lp.bottomMargin;\n            _fabMenu.animate()\n                    .translationY(_fabMenu.getHeight() + fabBottomMargin)\n                    .setInterpolator(new AccelerateInterpolator(2))\n                    .setListener(new AnimatorListenerAdapter() {\n                        @Override\n                        public void onAnimationEnd(Animator animation) {\n                            _isAnimating = false;\n                            _fabMenu.setVisibility(View.INVISIBLE);\n                            super.onAnimationEnd(animation);\n                        }\n                    }).start();\n        }\n\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/helpers/ItemTouchHelperAdapter.java",
    "content": "package com.beemdevelopment.aegis.helpers;\n\nimport androidx.recyclerview.widget.RecyclerView;\n\npublic interface ItemTouchHelperAdapter {\n\n    /**\n     * Called when an item has been dragged far enough to trigger a move. This is called every time\n     * an item is shifted, and <strong>not</strong> at the end of a \"drop\" event.<br/>\n     * <br/>\n     * Implementations should call {@link RecyclerView.Adapter#notifyItemMoved(int, int)} after\n     * adjusting the underlying data to reflect this move.\n     *\n     * @param fromPosition The start position of the moved item.\n     * @param toPosition   Then resolved position of the moved item.\n     * @see RecyclerView#getAdapterPositionFor(RecyclerView.ViewHolder)\n     * @see RecyclerView.ViewHolder#getAdapterPosition()\n     */\n    void onItemMove(int fromPosition, int toPosition);\n\n    /**\n     * Called when an item has been dismissed by a swipe.<br/>\n     * <br/>\n     * Implementations should call {@link RecyclerView.Adapter#notifyItemRemoved(int)} after\n     * adjusting the underlying data to reflect this removal.\n     *\n     * @param position The position of the item dismissed.\n     * @see RecyclerView#getAdapterPositionFor(RecyclerView.ViewHolder)\n     * @see RecyclerView.ViewHolder#getAdapterPosition()\n     */\n    void onItemDismiss(int position);\n\n    /**\n     * Called when an item has been dropped after a drag.\n     *\n     * @param position The position of the moved item.\n     */\n    void onItemDrop(int position);\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/helpers/MetricsHelper.java",
    "content": "package com.beemdevelopment.aegis.helpers;\n\nimport android.content.Context;\nimport android.util.DisplayMetrics;\n\npublic class MetricsHelper {\n    private MetricsHelper() {\n\n    }\n\n    public static int convertDpToPixels(Context context, float dp) {\n        return (int) (dp * (context.getResources().getDisplayMetrics().densityDpi / DisplayMetrics.DENSITY_DEFAULT));\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/helpers/PasswordStrengthHelper.java",
    "content": "package com.beemdevelopment.aegis.helpers;\n\nimport android.content.Context;\nimport android.content.res.ColorStateList;\nimport android.graphics.Color;\nimport android.widget.EditText;\nimport android.widget.ProgressBar;\nimport android.widget.TextView;\n\nimport com.beemdevelopment.aegis.R;\nimport com.google.android.material.textfield.TextInputLayout;\nimport com.google.common.base.Strings;\nimport com.nulabinc.zxcvbn.Strength;\nimport com.nulabinc.zxcvbn.Zxcvbn;\n\npublic class PasswordStrengthHelper {\n    // Limit the password length to prevent zxcvbn4j from exploding\n    private static final int MAX_PASSWORD_LENGTH = 64;\n\n    // Material design color palette\n    private final static String[] COLORS = {\"#FF5252\", \"#FF5252\", \"#FFC107\", \"#8BC34A\", \"#4CAF50\"};\n\n    private final Zxcvbn _zxcvbn = new Zxcvbn();\n    private final EditText _textPassword;\n    private final ProgressBar _barPasswordStrength;\n    private final TextView _textPasswordStrength;\n    private final TextInputLayout _textPasswordWrapper;\n\n    public PasswordStrengthHelper(\n            EditText textPassword,\n            ProgressBar barPasswordStrength,\n            TextView textPasswordStrength,\n            TextInputLayout textPasswordWrapper\n    ) {\n        _textPassword = textPassword;\n        _barPasswordStrength = barPasswordStrength;\n        _textPasswordStrength = textPasswordStrength;\n        _textPasswordWrapper = textPasswordWrapper;\n    }\n\n    public void measure(Context context) {\n        if (_textPassword.getText().length() > MAX_PASSWORD_LENGTH) {\n            _barPasswordStrength.setProgress(0);\n            _textPasswordStrength.setText(R.string.password_strength_unknown);\n        } else {\n            Strength strength = _zxcvbn.measure(_textPassword.getText());\n            _barPasswordStrength.setProgress(strength.getScore());\n            _barPasswordStrength.setProgressTintList(ColorStateList.valueOf(Color.parseColor(getColor(strength.getScore()))));\n            _textPasswordStrength.setText((_textPassword.getText().length() != 0) ? getString(strength.getScore(), context) : \"\");\n            String warning = strength.getFeedback().getWarning();\n            _textPasswordWrapper.setError(warning);\n            _textPasswordWrapper.setErrorEnabled(!Strings.isNullOrEmpty(warning));\n            strength.wipe();\n        }\n    }\n\n    private static String getString(int score, Context context) {\n        if (score < 0 || score > 4) {\n            throw new IllegalArgumentException(\"Not a valid zxcvbn score\");\n        }\n\n        String[] strings = context.getResources().getStringArray(R.array.password_strength);\n        return strings[score];\n    }\n\n    private static String getColor(int score) {\n        if (score < 0 || score > 4) {\n            throw new IllegalArgumentException(\"Not a valid zxcvbn score\");\n        }\n\n        return COLORS[score];\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/helpers/PermissionHelper.java",
    "content": "package com.beemdevelopment.aegis.helpers;\n\nimport android.app.Activity;\nimport android.content.Context;\nimport android.content.pm.PackageManager;\n\nimport java.util.ArrayList;\nimport java.util.List;\n\nimport androidx.core.app.ActivityCompat;\nimport androidx.core.content.ContextCompat;\n\npublic class PermissionHelper {\n    private PermissionHelper() {\n\n    }\n\n    public static boolean granted(Context context, String permission) {\n        return ContextCompat.checkSelfPermission(context, permission) == PackageManager.PERMISSION_GRANTED;\n    }\n\n    public static boolean request(Activity activity, int requestCode, String... perms) {\n        List<String> deniedPerms = new ArrayList<>();\n        for (String permission : perms) {\n            if (!granted(activity, permission)) {\n                deniedPerms.add(permission);\n            }\n        }\n\n        int size = deniedPerms.size();\n        if (size > 0) {\n            String[] array = new String[size];\n            ActivityCompat.requestPermissions(activity, deniedPerms.toArray(array), requestCode);\n        }\n        return size == 0;\n    }\n\n    public static boolean checkResults(int[] grantResults) {\n        for (int result : grantResults) {\n            if (result != PackageManager.PERMISSION_GRANTED) {\n                return false;\n            }\n        }\n        return true;\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/helpers/QrCodeAnalyzer.java",
    "content": "package com.beemdevelopment.aegis.helpers;\n\nimport static android.graphics.ImageFormat.YUV_420_888;\n\nimport android.util.Log;\nimport android.util.Size;\n\nimport androidx.annotation.NonNull;\nimport androidx.camera.core.ImageAnalysis;\nimport androidx.camera.core.ImageProxy;\n\nimport com.google.zxing.NotFoundException;\nimport com.google.zxing.PlanarYUVLuminanceSource;\nimport com.google.zxing.Result;\n\nimport java.nio.ByteBuffer;\n\npublic class QrCodeAnalyzer implements ImageAnalysis.Analyzer {\n    private static final String TAG = QrCodeAnalyzer.class.getSimpleName();\n    public static final Size RESOLUTION = new Size(1200, 1600);\n\n    private final QrCodeAnalyzer.Listener _listener;\n\n    public QrCodeAnalyzer(QrCodeAnalyzer.Listener listener) {\n        _listener = listener;\n    }\n\n    @Override\n    public void analyze(@NonNull ImageProxy image) {\n        int format = image.getFormat();\n        if (format != YUV_420_888) {\n            Log.e(TAG, String.format(\"Unexpected YUV image format: %d\", format));\n            image.close();\n            return;\n        }\n\n        ImageProxy.PlaneProxy plane = image.getPlanes()[0];\n        ByteBuffer buf = plane.getBuffer();\n        byte[] data = new byte[buf.remaining()];\n        buf.get(data);\n        buf.rewind();\n\n        PlanarYUVLuminanceSource source = new PlanarYUVLuminanceSource(\n                data,\n                plane.getRowStride(),\n                image.getHeight(),\n                0,\n                0,\n                image.getWidth(),\n                image.getHeight(),\n                false\n        );\n\n        try {\n            Result result = QrCodeHelper.decodeFromSource(source);\n            if (_listener != null) {\n                _listener.onQrCodeDetected(result);\n            }\n        } catch (NotFoundException ignored) {\n\n        } finally {\n            image.close();\n        }\n    }\n\n    public interface Listener {\n        void onQrCodeDetected(Result result);\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/helpers/QrCodeHelper.java",
    "content": "package com.beemdevelopment.aegis.helpers;\n\nimport android.graphics.Bitmap;\nimport android.graphics.BitmapFactory;\nimport android.graphics.Color;\n\nimport androidx.annotation.ColorInt;\n\nimport com.google.zxing.BarcodeFormat;\nimport com.google.zxing.BinaryBitmap;\nimport com.google.zxing.DecodeHintType;\nimport com.google.zxing.LuminanceSource;\nimport com.google.zxing.MultiFormatReader;\nimport com.google.zxing.NotFoundException;\nimport com.google.zxing.RGBLuminanceSource;\nimport com.google.zxing.Result;\nimport com.google.zxing.WriterException;\nimport com.google.zxing.common.BitMatrix;\nimport com.google.zxing.common.HybridBinarizer;\nimport com.google.zxing.qrcode.QRCodeWriter;\n\nimport java.io.InputStream;\nimport java.util.Collections;\nimport java.util.HashMap;\nimport java.util.Map;\n\npublic class QrCodeHelper {\n    private QrCodeHelper() {\n\n    }\n\n    public static Result decodeFromSource(LuminanceSource source) throws NotFoundException {\n        Map<DecodeHintType, Object> hints = new HashMap<>();\n        hints.put(DecodeHintType.POSSIBLE_FORMATS, Collections.singletonList(BarcodeFormat.QR_CODE));\n        hints.put(DecodeHintType.ALSO_INVERTED, true);\n\n        BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(source));\n        MultiFormatReader reader = new MultiFormatReader();\n        return reader.decode(bitmap, hints);\n    }\n\n    public static Result decodeFromStream(InputStream inStream) throws DecodeError {\n        BitmapFactory.Options bmOptions = new BitmapFactory.Options();\n        Bitmap bitmap = BitmapFactory.decodeStream(inStream, null, bmOptions);\n        if (bitmap == null) {\n            throw new DecodeError(\"Unable to decode stream to bitmap\");\n        }\n\n        // If ZXing is not able to decode the image on the first try, we try a couple of\n        // more times with smaller versions of the same image.\n        for (int i = 0; i <= 2; i++) {\n            if (i != 0) {\n                bitmap = BitmapHelper.resize(bitmap, bitmap.getWidth() / (i * 2), bitmap.getHeight() / (i * 2));\n            }\n\n            try {\n                int[] pixels = new int[bitmap.getWidth() * bitmap.getHeight()];\n                bitmap.getPixels(pixels, 0, bitmap.getWidth(), 0, 0, bitmap.getWidth(), bitmap.getHeight());\n\n                LuminanceSource source = new RGBLuminanceSource(bitmap.getWidth(), bitmap.getHeight(), pixels);\n                return decodeFromSource(source);\n            } catch (NotFoundException ignored) {\n\n            }\n        }\n\n        throw new DecodeError(NotFoundException.getNotFoundInstance());\n    }\n\n    public static Bitmap encodeToBitmap(String data, int width, int height, @ColorInt int backgroundColor) throws WriterException {\n        QRCodeWriter writer = new QRCodeWriter();\n        BitMatrix bitMatrix = writer.encode(data, BarcodeFormat.QR_CODE, width, height);\n\n        int[] pixels = new int[width * height];\n        for (int y = 0; y < height; y++) {\n            int offset = y * width;\n            for (int x = 0; x < width; x++) {\n                pixels[offset + x] = bitMatrix.get(x, y) ? Color.BLACK : backgroundColor;\n            }\n        }\n\n        Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);\n        bitmap.setPixels(pixels, 0, width, 0, 0, width, height);\n        return bitmap;\n    }\n\n    public static class DecodeError extends Exception {\n        public DecodeError(String message) {\n            super(message);\n        }\n\n        public DecodeError(Throwable cause) {\n            super(cause);\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/helpers/SafHelper.java",
    "content": "package com.beemdevelopment.aegis.helpers;\n\nimport android.content.Context;\nimport android.database.Cursor;\nimport android.net.Uri;\nimport android.provider.OpenableColumns;\nimport android.webkit.MimeTypeMap;\n\nimport androidx.documentfile.provider.DocumentFile;\n\npublic class SafHelper {\n    private SafHelper() {\n\n    }\n\n    public static String getFileName(Context context, Uri uri) {\n        if (uri.getScheme() != null && uri.getScheme().equals(\"content\")) {\n            try (Cursor cursor = context.getContentResolver().query(uri, new String[]{OpenableColumns.DISPLAY_NAME}, null, null, null)) {\n                if (cursor != null && cursor.moveToFirst()) {\n                    int i = cursor.getColumnIndex(OpenableColumns.DISPLAY_NAME);\n                    if (i != -1) {\n                        return cursor.getString(i);\n                    }\n                }\n            }\n        }\n\n        return uri.getLastPathSegment();\n    }\n\n    public static String getMimeType(Context context, Uri uri) {\n        DocumentFile file = DocumentFile.fromSingleUri(context, uri);\n        if (file != null) {\n            String fileType = file.getType();\n            if (fileType != null) {\n                return fileType;\n            }\n\n            String ext = MimeTypeMap.getFileExtensionFromUrl(uri.toString());\n            if (ext != null) {\n                return MimeTypeMap.getSingleton().getMimeTypeFromExtension(ext);\n            }\n        }\n\n        return null;\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/helpers/SimpleAnimationEndListener.java",
    "content": "package com.beemdevelopment.aegis.helpers;\n\nimport android.view.animation.Animation;\n\npublic class SimpleAnimationEndListener implements Animation.AnimationListener {\n    private final Listener _listener;\n\n    public SimpleAnimationEndListener(Listener listener) {\n        _listener = listener;\n    }\n\n    @Override\n    public void onAnimationStart(Animation animation) {\n\n    }\n\n    @Override\n    public void onAnimationEnd(Animation animation) {\n        if (_listener != null) {\n            _listener.onAnimationEnd(animation);\n        }\n    }\n\n    @Override\n    public void onAnimationRepeat(Animation animation) {\n\n    }\n\n    public interface Listener {\n        void onAnimationEnd(Animation animation);\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/helpers/SimpleItemTouchHelperCallback.java",
    "content": "package com.beemdevelopment.aegis.helpers;\n\nimport static androidx.recyclerview.widget.RecyclerView.NO_POSITION;\n\nimport androidx.annotation.NonNull;\nimport androidx.recyclerview.widget.ItemTouchHelper;\nimport androidx.recyclerview.widget.RecyclerView;\n\nimport com.beemdevelopment.aegis.ui.views.EntryAdapter;\nimport com.beemdevelopment.aegis.vault.VaultEntry;\n\npublic class SimpleItemTouchHelperCallback extends ItemTouchHelper.Callback {\n\n    private VaultEntry _selectedEntry;\n\n    private final EntryAdapter _adapter;\n    private boolean _positionChanged = false;\n    private boolean _isLongPressDragEnabled = true;\n    private int _dragFlags = ItemTouchHelper.UP | ItemTouchHelper.DOWN;\n\n    public SimpleItemTouchHelperCallback(EntryAdapter adapter) {\n        _adapter = adapter;\n    }\n\n    @Override\n    public boolean isLongPressDragEnabled() {\n        return _isLongPressDragEnabled;\n    }\n\n    public void setIsLongPressDragEnabled(boolean enabled) {\n        _isLongPressDragEnabled = enabled;\n    }\n\n    public void setSelectedEntry(VaultEntry entry) {\n        if (entry == null) {\n            _selectedEntry = null;\n            return;\n        }\n\n        if (!entry.isFavorite()) {\n            _selectedEntry = entry;\n        }\n    }\n\n    @Override\n    public boolean isItemViewSwipeEnabled() {\n        return false;\n    }\n\n    public void setDragFlags(int dragFlags) {\n        _dragFlags = dragFlags;\n    }\n\n    @Override\n    public int getMovementFlags(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder) {\n        // It's not clear when this can happen, but sometimes the ViewHolder\n        // that's passed to this function has a position of -1, leading\n        // to a crash down the line.\n        int position = viewHolder.getBindingAdapterPosition();\n        if (position == NO_POSITION) {\n            return 0;\n        }\n\n        EntryAdapter adapter = (EntryAdapter) recyclerView.getAdapter();\n        if (adapter == null) {\n            return 0;\n        }\n\n        int swipeFlags = 0;\n        if (adapter.isPositionFooter(position)\n                || adapter.isPositionErrorCard(position)\n                || adapter.getEntryAtPosition(position) != _selectedEntry\n                || !isLongPressDragEnabled()) {\n            return makeMovementFlags(0, swipeFlags);\n        }\n\n        return makeMovementFlags(_dragFlags, swipeFlags);\n    }\n\n    @Override\n    public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder,\n                          RecyclerView.ViewHolder target) {\n        int targetIndex = _adapter.translateEntryPosToIndex(target.getBindingAdapterPosition());\n        if (targetIndex < _adapter.getShownFavoritesCount()) {\n            return false;\n        }\n\n        int firstPosition = viewHolder.getLayoutPosition();\n        int secondPosition = target.getBindingAdapterPosition();\n\n        _adapter.onItemMove(firstPosition, secondPosition);\n        _positionChanged = true;\n        return true;\n    }\n\n    @Override\n    public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) {\n        _adapter.onItemDismiss(viewHolder.getBindingAdapterPosition());\n    }\n\n    @Override\n    public void clearView(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) {\n        super.clearView(recyclerView, viewHolder);\n\n        if (_positionChanged) {\n            _adapter.onItemDrop(viewHolder.getBindingAdapterPosition());\n            _positionChanged = false;\n            _adapter.refresh(false);\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/helpers/SimpleTextWatcher.java",
    "content": "package com.beemdevelopment.aegis.helpers;\n\nimport android.text.Editable;\nimport android.text.TextWatcher;\n\npublic final class SimpleTextWatcher implements TextWatcher {\n    private final Listener _listener;\n\n    public SimpleTextWatcher(Listener listener) {\n        _listener = listener;\n    }\n\n    @Override\n    public void beforeTextChanged(CharSequence s, int start, int count, int after) {\n\n    }\n\n    @Override\n    public void onTextChanged(CharSequence s, int start, int before, int count) {\n\n    }\n\n    @Override\n    public void afterTextChanged(Editable s) {\n        if (_listener != null) {\n            _listener.afterTextChanged(s);\n        }\n    }\n\n    public interface Listener {\n        void afterTextChanged(Editable s);\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/helpers/TextDrawableHelper.java",
    "content": "package com.beemdevelopment.aegis.helpers;\n\nimport android.view.View;\n\nimport com.amulyakhare.textdrawable.TextDrawable;\nimport com.amulyakhare.textdrawable.util.ColorGenerator;\n\nimport java.text.BreakIterator;\nimport java.util.Arrays;\n\npublic class TextDrawableHelper {\n    // taken from: https://materialuicolors.co (level 700)\n    private static ColorGenerator _generator = ColorGenerator.create(Arrays.asList(\n            0xFFD32F2F,\n            0xFFC2185B,\n            0xFF7B1FA2,\n            0xFF512DA8,\n            0xFF303F9F,\n            0xFF1976D2,\n            0xFF0288D1,\n            0xFF0097A7,\n            0xFF00796B,\n            0xFF388E3C,\n            0xFF689F38,\n            0xFFAFB42B,\n            0xFFFBC02D,\n            0xFFFFA000,\n            0xFFF57C00,\n            0xFFE64A19,\n            0xFF5D4037,\n            0xFF616161,\n            0xFF455A64\n    ));\n\n    private TextDrawableHelper() {\n\n    }\n\n    public static TextDrawable generate(String text, String fallback, View view) {\n        if (text == null || text.isEmpty()) {\n            if (fallback == null || fallback.isEmpty()) {\n                return null;\n            }\n            text = fallback;\n        }\n\n        int color = _generator.getColor(text);\n        return TextDrawable.builder().beginConfig()\n                .width(view.getLayoutParams().width)\n                .height(view.getLayoutParams().height)\n                .endConfig()\n                .buildRound(getFirstGrapheme(text).toUpperCase(), color);\n    }\n\n    private static String getFirstGrapheme(String text) {\n        BreakIterator iter = BreakIterator.getCharacterInstance();\n        iter.setText(text);\n\n        int start = iter.first(), end = iter.next();\n        if (end == BreakIterator.DONE) {\n            return \"\";\n        }\n\n        return text.substring(start, end);\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/helpers/ThemeHelper.java",
    "content": "package com.beemdevelopment.aegis.helpers;\n\nimport android.content.res.Configuration;\n\nimport androidx.appcompat.app.AppCompatActivity;\n\nimport com.beemdevelopment.aegis.Preferences;\nimport com.beemdevelopment.aegis.R;\nimport com.beemdevelopment.aegis.Theme;\nimport com.google.android.material.color.DynamicColors;\nimport com.google.android.material.color.DynamicColorsOptions;\n\nimport java.util.Map;\n\npublic class ThemeHelper {\n    private final AppCompatActivity _activity;\n    private final Preferences _prefs;\n\n    public ThemeHelper(AppCompatActivity activity, Preferences prefs) {\n        _activity = activity;\n        _prefs = prefs;\n    }\n\n    /**\n     * Sets the theme of the activity. The actual style that is set is picked from the\n     * given map, based on the theme configured by the user.\n     */\n    public void setTheme(Map<Theme, Integer> themeMap) {\n        int theme = themeMap.get(getConfiguredTheme());\n        _activity.setTheme(theme);\n\n        if (_prefs.isDynamicColorsEnabled()) {\n            DynamicColorsOptions.Builder optsBuilder = new DynamicColorsOptions.Builder();\n            if (getConfiguredTheme().equals(Theme.AMOLED)) {\n                optsBuilder.setThemeOverlay(R.style.ThemeOverlay_Aegis_Dynamic_Amoled);\n            } else if (getConfiguredTheme().equals(Theme.DARK)) {\n                optsBuilder.setThemeOverlay(R.style.ThemeOverlay_Aegis_Dynamic_Dark);\n            }\n\n            DynamicColors.applyToActivityIfAvailable(_activity, optsBuilder.build());\n        }\n    }\n\n    public Theme getConfiguredTheme() {\n        Theme theme = _prefs.getCurrentTheme();\n\n        if (theme == Theme.SYSTEM || theme == Theme.SYSTEM_AMOLED) {\n            int currentNightMode = _activity.getResources().getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK;\n            if (currentNightMode == Configuration.UI_MODE_NIGHT_YES) {\n                theme = theme == Theme.SYSTEM_AMOLED ? Theme.AMOLED : Theme.DARK;\n            } else {\n                theme = Theme.LIGHT;\n            }\n        }\n\n        return theme;\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/helpers/UiRefresher.java",
    "content": "package com.beemdevelopment.aegis.helpers;\n\nimport android.os.Handler;\n\nimport com.beemdevelopment.aegis.VibrationPatterns;\n\npublic class UiRefresher {\n    private boolean _running;\n    private Listener _listener;\n    private Handler _handler;\n\n    public UiRefresher(Listener listener) {\n        _listener = listener;\n        _handler = new Handler();\n    }\n\n    public void destroy() {\n        stop();\n        _listener = null;\n    }\n\n    public void start() {\n        if (_running) {\n            return;\n        }\n        _running = true;\n\n        _handler.postDelayed(new Runnable() {\n            @Override\n            public void run() {\n                _listener.onRefresh();\n                _handler.postDelayed(this, _listener.getMillisTillNextRefresh());\n            }\n        }, _listener.getMillisTillNextRefresh());\n\n        _handler.postDelayed(new Runnable() {\n            @Override\n            public void run() {\n                _listener.onExpiring();\n                _handler.postDelayed(this, getNextRun());\n            }\n        },  getInitialRun());\n    }\n\n    private long getInitialRun() {\n        long sum = _listener.getMillisTillNextRefresh() - VibrationPatterns.getLengthInMillis(VibrationPatterns.EXPIRING);\n        if (sum < 0) {\n            return getNextRun();\n        }\n\n        return sum;\n    }\n\n    private long getNextRun() {\n        return (_listener.getMillisTillNextRefresh() + _listener.getPeriodMillis()) - VibrationPatterns.getLengthInMillis(VibrationPatterns.EXPIRING);\n    }\n\n    public void stop() {\n        _handler.removeCallbacksAndMessages(null);\n        _running = false;\n    }\n\n    public interface Listener {\n        void onRefresh();\n        void onExpiring();\n        long getMillisTillNextRefresh();\n        long getPeriodMillis();\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/helpers/UiThreadExecutor.java",
    "content": "package com.beemdevelopment.aegis.helpers;\n\nimport android.os.Handler;\nimport android.os.Looper;\n\nimport androidx.annotation.NonNull;\n\nimport java.util.concurrent.Executor;\n\npublic class UiThreadExecutor implements Executor {\n    private final Handler _handler = new Handler(Looper.getMainLooper());\n\n    @Override\n    public void execute(@NonNull Runnable command) {\n        _handler.post(command);\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/helpers/VibrationHelper.java",
    "content": "package com.beemdevelopment.aegis.helpers;\n\nimport android.content.Context;\nimport android.os.Build;\nimport android.os.VibrationEffect;\nimport android.os.Vibrator;\nimport android.os.VibratorManager;\n\nimport com.beemdevelopment.aegis.Preferences;\n\npublic class VibrationHelper {\n    private Preferences _preferences;\n\n    public VibrationHelper(Context context) {\n        _preferences = new Preferences(context);\n    }\n\n    public void vibratePattern(Context context, long[] pattern) {\n        if (!isHapticFeedbackEnabled()) {\n            return;\n        }\n\n        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {\n            VibratorManager vibratorManager = (VibratorManager) context.getSystemService(Context.VIBRATOR_MANAGER_SERVICE);\n            if (vibratorManager != null) {\n                Vibrator vibrator = vibratorManager.getDefaultVibrator();\n                VibrationEffect effect = VibrationEffect.createWaveform(pattern, -1);\n                vibrator.vibrate(effect);\n            }\n        } else {\n            Vibrator vibrator = (Vibrator) context.getSystemService(Context.VIBRATOR_SERVICE);\n            if (vibrator != null) {\n                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {\n                    VibrationEffect effect = VibrationEffect.createWaveform(pattern, -1);\n                    vibrator.vibrate(effect);\n                }\n            }\n        }\n    }\n\n    public boolean isHapticFeedbackEnabled() {\n        return _preferences.isHapticFeedbackEnabled();\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/helpers/ViewHelper.java",
    "content": "package com.beemdevelopment.aegis.helpers;\n\nimport androidx.core.graphics.Insets;\nimport androidx.core.view.ViewCompat;\nimport androidx.core.view.WindowInsetsCompat;\n\nimport com.google.android.material.appbar.AppBarLayout;\n\npublic class ViewHelper {\n    private ViewHelper() {\n\n    }\n\n    public static void setupAppBarInsets(AppBarLayout appBar) {\n        ViewCompat.setOnApplyWindowInsetsListener(appBar, (targetView, windowInsets) -> {\n            Insets insets = windowInsets.getInsets(WindowInsetsCompat.Type.systemBars() | WindowInsetsCompat.Type.displayCutout());\n            targetView.setPadding(\n                    insets.left,\n                    insets.top,\n                    insets.right,\n                    0\n            );\n            return WindowInsetsCompat.CONSUMED;\n        });\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/helpers/comparators/AccountNameComparator.java",
    "content": "package com.beemdevelopment.aegis.helpers.comparators;\n\nimport com.beemdevelopment.aegis.vault.VaultEntry;\n\nimport java.util.Comparator;\n\npublic class AccountNameComparator implements Comparator<VaultEntry> {\n    @Override\n    public int compare(VaultEntry a, VaultEntry b) {\n        return a.getName().compareToIgnoreCase(b.getName());\n    }\n}"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/helpers/comparators/FavoriteComparator.java",
    "content": "package com.beemdevelopment.aegis.helpers.comparators;\n\nimport com.beemdevelopment.aegis.vault.VaultEntry;\n\nimport java.util.Comparator;\n\npublic class FavoriteComparator implements Comparator<VaultEntry> {\n    @Override\n    public int compare(VaultEntry a, VaultEntry b) {\n        return -1 * Boolean.compare(a.isFavorite(), b.isFavorite());\n    }\n}"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/helpers/comparators/IssuerNameComparator.java",
    "content": "package com.beemdevelopment.aegis.helpers.comparators;\n\nimport com.beemdevelopment.aegis.vault.VaultEntry;\n\nimport java.util.Comparator;\n\npublic class IssuerNameComparator implements Comparator<VaultEntry> {\n    @Override\n    public int compare(VaultEntry a, VaultEntry b) {\n        return a.getIssuer().compareToIgnoreCase(b.getIssuer());\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/helpers/comparators/LastUsedComparator.java",
    "content": "package com.beemdevelopment.aegis.helpers.comparators;\n\nimport com.beemdevelopment.aegis.vault.VaultEntry;\n\nimport java.util.Comparator;\n\npublic class LastUsedComparator implements Comparator<VaultEntry> {\n    @Override\n    public int compare(VaultEntry a, VaultEntry b) {\n        return Long.compare(a.getLastUsedTimestamp(), b.getLastUsedTimestamp());\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/helpers/comparators/UsageCountComparator.java",
    "content": "package com.beemdevelopment.aegis.helpers.comparators;\n\nimport com.beemdevelopment.aegis.vault.VaultEntry;\n\nimport java.util.Comparator;\n\npublic class UsageCountComparator implements Comparator<VaultEntry> {\n    @Override\n    public int compare(VaultEntry a, VaultEntry b) {\n        return Integer.compare(a.getUsageCount(), b.getUsageCount());\n    }\n}"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/icons/IconPack.java",
    "content": "package com.beemdevelopment.aegis.icons;\n\nimport androidx.annotation.NonNull;\nimport androidx.annotation.Nullable;\n\nimport com.beemdevelopment.aegis.util.JsonUtils;\nimport com.google.common.base.Objects;\nimport com.google.common.io.Files;\n\nimport org.json.JSONArray;\nimport org.json.JSONException;\nimport org.json.JSONObject;\n\nimport java.io.File;\nimport java.io.Serializable;\nimport java.nio.charset.StandardCharsets;\nimport java.util.ArrayList;\nimport java.util.Collections;\nimport java.util.List;\nimport java.util.UUID;\n\npublic class IconPack {\n    private UUID _uuid;\n    private String _name;\n    private int _version;\n    private List<Icon> _icons;\n\n    private File _dir;\n\n    private IconPack(UUID uuid, String name, int version, List<Icon> icons) {\n        _uuid = uuid;\n        _name = name;\n        _version = version;\n        _icons = icons;\n    }\n\n    public UUID getUUID() {\n        return _uuid;\n    }\n\n    public String getName() {\n        return _name;\n    }\n\n    public int getVersion() {\n        return _version;\n    }\n\n    public List<Icon> getIcons() {\n        return Collections.unmodifiableList(_icons);\n    }\n\n    /**\n     * Retrieves a list of icons suggested for the given issuer.\n     */\n    public List<Icon> getSuggestedIcons(String issuer) {\n        if (issuer == null || issuer.isEmpty()) {\n            return new ArrayList<>();\n        }\n\n        List<Icon> icons = new ArrayList<>();\n        for (Icon icon : _icons) {\n            MatchType matchType = icon.getMatchFor(issuer);\n            if (matchType != null) {\n                // Inverse matches (entry issuer contains icon name) are less likely\n                // to be good, so position them at the end of the list.\n                if (matchType.equals(MatchType.NORMAL)) {\n                    icons.add(0, icon);\n                } else if (matchType.equals(MatchType.INVERSE)) {\n                    icons.add(icon);\n                }\n            }\n        }\n\n        return icons;\n    }\n\n    @Nullable\n    public File getDirectory() {\n        return _dir;\n    }\n\n    void setDirectory(@NonNull File dir) {\n        _dir = dir;\n    }\n\n    /**\n     * Indicates whether some other object is \"equal to\" this one. The object does not\n     * necessarily have to be the same instance. Equality of UUID and version will make\n     * this method return true;\n     */\n    @Override\n    public boolean equals(Object o) {\n        if (!(o instanceof IconPack)) {\n            return false;\n        }\n\n        IconPack pack = (IconPack) o;\n        return super.equals(pack) || (getUUID().equals(pack.getUUID()) && getVersion() == pack.getVersion());\n    }\n\n    @Override\n    public int hashCode() {\n        return Objects.hashCode(_uuid, _version);\n    }\n\n    public static IconPack fromJson(JSONObject obj) throws JSONException {\n        UUID uuid;\n        String uuidString = obj.getString(\"uuid\");\n        try {\n            uuid = UUID.fromString(uuidString);\n        } catch (IllegalArgumentException e) {\n            throw new JSONException(String.format(\"Bad UUID format: %s\", uuidString));\n        }\n        String name = obj.getString(\"name\");\n        int version = obj.getInt(\"version\");\n        JSONArray array = obj.getJSONArray(\"icons\");\n\n        List<Icon> icons = new ArrayList<>();\n        for (int i = 0; i < array.length(); i++) {\n            Icon icon = Icon.fromJson(array.getJSONObject(i));\n            icons.add(icon);\n        }\n\n        return new IconPack(uuid, name, version, icons);\n    }\n\n    public static IconPack fromBytes(byte[] data) throws JSONException {\n        JSONObject obj = new JSONObject(new String(data, StandardCharsets.UTF_8));\n        return IconPack.fromJson(obj);\n    }\n\n    public static class Icon implements Serializable {\n        private final String _relFilename;\n        private final String _name;\n        private final String _category;\n        private final List<String> _issuers;\n\n        private File _file;\n\n        protected Icon(String filename, String name, String category, List<String> issuers) {\n            _relFilename = filename;\n            _name = name;\n            _category = category;\n            _issuers = issuers;\n        }\n\n        public String getRelativeFilename() {\n            return _relFilename;\n        }\n\n        @Nullable\n        public File getFile() {\n            return _file;\n        }\n\n        void setFile(@NonNull File file) {\n            _file = file;\n        }\n\n        public IconType getIconType() {\n            return IconType.fromFilename(_relFilename);\n        }\n\n        public String getName() {\n            if (_name != null) {\n                return _name;\n            }\n            return Files.getNameWithoutExtension(new File(_relFilename).getName());\n        }\n\n        public String getCategory() {\n            return _category;\n        }\n\n        private MatchType getMatchFor(String issuer) {\n            String lowerEntryIssuer = issuer.toLowerCase();\n\n            boolean inverseMatch = false;\n            for (String is : _issuers) {\n                String lowerIconIssuer = is.toLowerCase();\n                if (lowerIconIssuer.contains(lowerEntryIssuer)) {\n                    return MatchType.NORMAL;\n                }\n                if (lowerEntryIssuer.contains(lowerIconIssuer)) {\n                    inverseMatch = true;\n                }\n            }\n            if (inverseMatch) {\n                return MatchType.INVERSE;\n            }\n\n            return null;\n        }\n\n        public static Icon fromJson(JSONObject obj) throws JSONException {\n            String filename = obj.getString(\"filename\");\n            String name = JsonUtils.optString(obj, \"name\");\n            String category = obj.isNull(\"category\") ? null : obj.getString(\"category\");\n            JSONArray array = obj.getJSONArray(\"issuer\");\n\n            List<String> issuers = new ArrayList<>();\n            for (int i = 0; i < array.length(); i++) {\n                String issuer = array.getString(i);\n                issuers.add(issuer);\n            }\n\n            return new Icon(filename, name, category, issuers);\n        }\n    }\n\n    private enum MatchType {\n        NORMAL,\n        INVERSE\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/icons/IconPackException.java",
    "content": "package com.beemdevelopment.aegis.icons;\n\npublic class IconPackException extends Exception {\n    public IconPackException(Throwable cause) {\n        super(cause);\n    }\n\n    public IconPackException(String message) {\n        super(message);\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/icons/IconPackExistsException.java",
    "content": "package com.beemdevelopment.aegis.icons;\n\npublic class IconPackExistsException extends IconPackException {\n    private IconPack _pack;\n\n    public IconPackExistsException(IconPack pack) {\n        super(String.format(\"Icon pack %s (%d) already exists\", pack.getName(), pack.getVersion()));\n        _pack = pack;\n    }\n\n    public IconPack getIconPack() {\n        return _pack;\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/icons/IconPackManager.java",
    "content": "package com.beemdevelopment.aegis.icons;\n\nimport android.content.Context;\n\nimport androidx.annotation.Nullable;\n\nimport com.beemdevelopment.aegis.util.IOUtils;\n\nimport net.lingala.zip4j.ZipFile;\nimport net.lingala.zip4j.io.inputstream.ZipInputStream;\nimport net.lingala.zip4j.model.FileHeader;\n\nimport org.json.JSONException;\n\nimport java.io.File;\nimport java.io.FileInputStream;\nimport java.io.FileOutputStream;\nimport java.io.IOException;\nimport java.util.ArrayList;\nimport java.util.List;\nimport java.util.UUID;\nimport java.util.stream.Collectors;\n\npublic class IconPackManager {\n    private static final String _packDefFilename = \"pack.json\";\n\n    private File _iconsBaseDir;\n    private List<IconPack> _iconPacks;\n\n    public IconPackManager(Context context) {\n        _iconPacks = new ArrayList<>();\n        _iconsBaseDir = new File(context.getFilesDir(), \"icons\");\n        rescanIconPacks();\n    }\n\n    private IconPack getIconPackByUUID(UUID uuid) {\n        List<IconPack> packs = _iconPacks.stream().filter(i -> i.getUUID().equals(uuid)).collect(Collectors.toList());\n        if (packs.size() == 0) {\n            return null;\n        }\n\n        return packs.get(0);\n    }\n\n    public boolean hasIconPack() {\n        return _iconPacks.size() > 0;\n    }\n\n    public List<IconPack> getIconPacks() {\n        return new ArrayList<>(_iconPacks);\n    }\n\n    public void removeIconPack(IconPack pack) throws IconPackException {\n        try {\n            File dir = getIconPackDir(pack);\n            deleteDir(dir);\n        } catch (IOException e) {\n            throw new IconPackException(e);\n        }\n\n        _iconPacks.remove(pack);\n    }\n\n    public IconPack importPack(File inFile) throws IconPackException {\n        try {\n            // read and parse the icon pack definition file of the icon pack\n            ZipFile zipFile = new ZipFile(inFile);\n            FileHeader packHeader = zipFile.getFileHeader(_packDefFilename);\n            if (packHeader == null) {\n                throw new IOException(\"Unable to find pack.json in the root of the ZIP file\");\n            }\n            IconPack pack;\n            byte[] defBytes;\n            try (ZipInputStream inStream = zipFile.getInputStream(packHeader)) {\n                defBytes = IOUtils.readAll(inStream);\n                pack = IconPack.fromBytes(defBytes);\n            }\n\n            // create a new directory to store the icon pack, based on the UUID and version\n            File packDir = getIconPackDir(pack);\n            if (!packDir.getCanonicalPath().startsWith(_iconsBaseDir.getCanonicalPath() + File.separator)) {\n                throw new IOException(\"Attempted to write outside of the parent directory\");\n            }\n            if (packDir.exists()) {\n                throw new IconPackExistsException(pack);\n            }\n            IconPack existingPack = getIconPackByUUID(pack.getUUID());\n            if (existingPack != null) {\n                throw new IconPackExistsException(existingPack);\n            }\n            if (!packDir.exists() && !packDir.mkdirs()) {\n                throw new IOException(String.format(\"Unable to create directories: %s\", packDir.toString()));\n            }\n\n            // extract each of the defined icons to the icon pack directory\n            for (IconPack.Icon icon : pack.getIcons()) {\n                File destFile = new File(packDir, icon.getRelativeFilename());\n                FileHeader iconHeader = zipFile.getFileHeader(icon.getRelativeFilename());\n                if (iconHeader == null) {\n                    throw new IOException(String.format(\"Unable to find %s relative to the root of the ZIP file\", icon.getRelativeFilename()));\n                }\n\n                // create new directories for this file if needed\n                File parent = destFile.getParentFile();\n                if (parent != null && !parent.exists() && !parent.mkdirs()) {\n                    throw new IOException(String.format(\"Unable to create directories: %s\", packDir.toString()));\n                }\n\n                try (ZipInputStream inStream = zipFile.getInputStream(iconHeader);\n                     FileOutputStream outStream = new FileOutputStream(destFile)) {\n                    IOUtils.copy(inStream, outStream);\n                }\n\n                // after successful copy of the icon, store the new filename\n                icon.setFile(destFile);\n            }\n\n            // write the icon pack definition file to the newly created directory\n            try (FileOutputStream outStream = new FileOutputStream(new File(packDir, _packDefFilename))) {\n                outStream.write(defBytes);\n            }\n\n            // after successful extraction of the icon pack, store the new directory\n            pack.setDirectory(packDir);\n            _iconPacks.add(pack);\n            return pack;\n        } catch (IOException | JSONException e) {\n            throw new IconPackException(e);\n        }\n    }\n\n    private void rescanIconPacks() {\n        _iconPacks.clear();\n\n        File[] dirs = _iconsBaseDir.listFiles();\n        if (dirs == null) {\n            return;\n        }\n\n        for (File dir : dirs) {\n            if (!dir.isDirectory()) {\n                 continue;\n            }\n\n            UUID uuid;\n            try {\n                uuid = UUID.fromString(dir.getName());\n            } catch (IllegalArgumentException e) {\n                e.printStackTrace();\n                continue;\n            }\n\n            File versionDir = getLatestVersionDir(dir);\n            if (versionDir != null) {\n                IconPack pack;\n                try (FileInputStream inStream = new FileInputStream(new File(versionDir, _packDefFilename))) {\n                    byte[] bytes = IOUtils.readAll(inStream);\n                    pack = IconPack.fromBytes(bytes);\n                    pack.setDirectory(versionDir);\n                } catch (JSONException | IOException e) {\n                    e.printStackTrace();\n                    continue;\n                }\n\n                for (IconPack.Icon icon : pack.getIcons()) {\n                    icon.setFile(new File(versionDir, icon.getRelativeFilename()));\n                }\n\n                // do a sanity check on the UUID and version\n                if (pack.getUUID().equals(uuid) && pack.getVersion() == Integer.parseInt(versionDir.getName())) {\n                    _iconPacks.add(pack);\n                }\n            }\n        }\n    }\n\n    private File getIconPackDir(IconPack pack) {\n        return new File(_iconsBaseDir, pack.getUUID() + File.separator + pack.getVersion());\n    }\n\n    @Nullable\n    private static File getLatestVersionDir(File packDir) {\n        File[] dirs = packDir.listFiles();\n        if (dirs == null) {\n            return null;\n        }\n\n        int latestVersion = -1;\n        for (File versionDir : dirs) {\n            int version;\n            try {\n                version = Integer.parseInt(versionDir.getName());\n            } catch (NumberFormatException ignored) {\n                continue;\n            }\n\n            if (latestVersion == -1 || version > latestVersion) {\n                latestVersion = version;\n            }\n        }\n\n        if (latestVersion == -1) {\n            return null;\n        }\n\n        return new File(packDir, Integer.toString(latestVersion));\n    }\n\n    private static void deleteDir(File dir) throws IOException {\n        if (dir.isDirectory()) {\n            File[] children = dir.listFiles();\n            if (children != null) {\n                for (File child : children) {\n                    deleteDir(child);\n                }\n            }\n        }\n\n        if (!dir.delete()) {\n            throw new IOException(String.format(\"Unable to delete directory: %s\", dir));\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/icons/IconType.java",
    "content": "package com.beemdevelopment.aegis.icons;\n\nimport com.google.common.io.Files;\n\nimport java.util.Locale;\n\npublic enum IconType {\n    INVALID,\n    SVG,\n    PNG,\n    JPEG;\n\n    public static IconType fromMimeType(String mimeType) {\n        switch (mimeType) {\n            case \"image/svg+xml\":\n                return SVG;\n            case \"image/png\":\n                return PNG;\n            case \"image/jpeg\":\n                return JPEG;\n            default:\n                return INVALID;\n        }\n    }\n\n    public static IconType fromFilename(String filename) {\n        switch (Files.getFileExtension(filename).toLowerCase(Locale.ROOT)) {\n            case \"svg\":\n                return SVG;\n            case \"png\":\n                return PNG;\n            case \"jpg\":\n                // intentional fallthrough\n            case \"jpeg\":\n                return JPEG;\n            default:\n                return INVALID;\n        }\n    }\n\n    public String toMimeType() {\n        switch (this) {\n            case SVG:\n                return \"image/svg+xml\";\n            case PNG:\n                return \"image/png\";\n            case JPEG:\n                return \"image/jpeg\";\n            default:\n                throw new RuntimeException(String.format(\"Can't convert icon type %s to MIME type\", this));\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/importers/AegisImporter.java",
    "content": "package com.beemdevelopment.aegis.importers;\n\nimport android.content.Context;\nimport android.content.DialogInterface;\n\nimport androidx.annotation.Nullable;\nimport androidx.lifecycle.Lifecycle;\n\nimport com.beemdevelopment.aegis.R;\nimport com.beemdevelopment.aegis.helpers.ContextHelper;\nimport com.beemdevelopment.aegis.ui.dialogs.Dialogs;\nimport com.beemdevelopment.aegis.ui.tasks.PasswordSlotDecryptTask;\nimport com.beemdevelopment.aegis.util.IOUtils;\nimport com.beemdevelopment.aegis.vault.VaultEntry;\nimport com.beemdevelopment.aegis.vault.VaultEntryException;\nimport com.beemdevelopment.aegis.vault.VaultFile;\nimport com.beemdevelopment.aegis.vault.VaultFileCredentials;\nimport com.beemdevelopment.aegis.vault.VaultFileException;\nimport com.beemdevelopment.aegis.vault.VaultGroup;\nimport com.beemdevelopment.aegis.vault.slots.PasswordSlot;\nimport com.beemdevelopment.aegis.vault.slots.SlotList;\nimport com.topjohnwu.superuser.io.SuFile;\n\nimport org.json.JSONArray;\nimport org.json.JSONException;\nimport org.json.JSONObject;\n\nimport java.io.IOException;\nimport java.io.InputStream;\nimport java.util.List;\nimport java.util.UUID;\n\npublic class AegisImporter extends DatabaseImporter {\n\n    public AegisImporter(Context context) {\n        super(context);\n    }\n\n    @Override\n    protected SuFile getAppPath() {\n        throw new UnsupportedOperationException();\n    }\n\n    @Override\n    public State read(InputStream stream, boolean isInternal) throws DatabaseImporterException {\n        try {\n            byte[] bytes = IOUtils.readAll(stream);\n            VaultFile file = VaultFile.fromBytes(bytes);\n            if (file.isEncrypted()) {\n                return new EncryptedState(file);\n            }\n            return new DecryptedState(file.getContent());\n        } catch (VaultFileException | IOException e) {\n            throw new DatabaseImporterException(e);\n        }\n    }\n\n    public static class EncryptedState extends State {\n        private VaultFile _file;\n\n        private EncryptedState(VaultFile file) {\n            super(true);\n            _file = file;\n        }\n\n        public SlotList getSlots() {\n            return _file.getHeader().getSlots();\n        }\n\n        public State decrypt(VaultFileCredentials creds) throws DatabaseImporterException {\n            JSONObject obj;\n            try {\n                obj = _file.getContent(creds);\n            } catch (VaultFileException e) {\n                throw new DatabaseImporterException(e);\n            }\n\n            return new DecryptedState(obj, creds);\n        }\n\n        public State decrypt(char[] password) throws DatabaseImporterException {\n            List<PasswordSlot> slots = getSlots().findAll(PasswordSlot.class);\n            PasswordSlotDecryptTask.Result result = PasswordSlotDecryptTask.decrypt(slots, password);\n            VaultFileCredentials creds = new VaultFileCredentials(result.getKey(), getSlots());\n            return decrypt(creds);\n        }\n\n        @Override\n        public void decrypt(Context context, DecryptListener listener) {\n            Dialogs.showPasswordInputDialog(context, R.string.enter_password_aegis_title, 0, (Dialogs.TextInputListener) password -> {\n                List<PasswordSlot> slots = getSlots().findAll(PasswordSlot.class);\n                PasswordSlotDecryptTask.Params params = new PasswordSlotDecryptTask.Params(slots, password);\n                PasswordSlotDecryptTask task = new PasswordSlotDecryptTask(context, result -> {\n                    try {\n                        if (result == null) {\n                            throw new DatabaseImporterException(\"Password incorrect\");\n                        }\n\n                        VaultFileCredentials creds = new VaultFileCredentials(result.getKey(), getSlots());\n                        State state = decrypt(creds);\n                        listener.onStateDecrypted(state);\n                    } catch (DatabaseImporterException e) {\n                        listener.onError(e);\n                    }\n                });\n\n                Lifecycle lifecycle = ContextHelper.getLifecycle(context);\n                task.execute(lifecycle, params);\n            }, (DialogInterface.OnCancelListener) dialog -> listener.onCanceled());\n        }\n    }\n\n    public static class DecryptedState extends State {\n        private JSONObject _obj;\n        private VaultFileCredentials _creds;\n\n        private DecryptedState(JSONObject obj) {\n            this(obj, null);\n        }\n\n        private DecryptedState(JSONObject obj, VaultFileCredentials creds) {\n            super(false);\n            _obj = obj;\n            _creds = creds;\n        }\n\n        @Nullable\n        public VaultFileCredentials getCredentials() {\n            return _creds;\n        }\n\n        @Override\n        public Result convert() throws DatabaseImporterException {\n            Result result = new Result();\n\n            try {\n                if (_obj.has(\"groups\")) {\n                    JSONArray groupArray = _obj.getJSONArray(\"groups\");\n                    for (int i = 0; i < groupArray.length(); i++) {\n                        JSONObject groupObj = groupArray.getJSONObject(i);\n                        try {\n                            VaultGroup group = convertGroup(groupObj);\n                            if (!result.getGroups().has(group)) {\n                                result.addGroup(group);\n                            }\n                        } catch (DatabaseImporterEntryException e) {\n                            result.addError(e);\n                        }\n                    }\n                }\n\n                JSONArray entryArray = _obj.getJSONArray(\"entries\");\n                for (int i = 0; i < entryArray.length(); i++) {\n                    JSONObject entryObj = entryArray.getJSONObject(i);\n                    try {\n                        VaultEntry entry = convertEntry(entryObj);\n                        for (UUID groupUuid : entry.getGroups()) {\n                            if (!result.getGroups().has(groupUuid)) {\n                                entry.getGroups().remove(groupUuid);\n                            }\n                        }\n                        result.addEntry(entry);\n                    } catch (DatabaseImporterEntryException e) {\n                        result.addError(e);\n                    }\n                }\n            } catch (JSONException e) {\n                throw new DatabaseImporterException(e);\n            }\n\n            return result;\n        }\n\n        private static VaultEntry convertEntry(JSONObject obj) throws DatabaseImporterEntryException {\n            try {\n                return VaultEntry.fromJson(obj);\n            } catch (VaultEntryException e) {\n                throw new DatabaseImporterEntryException(e, obj.toString());\n            }\n        }\n\n        private static VaultGroup convertGroup(JSONObject obj) throws DatabaseImporterEntryException {\n            try {\n                return VaultGroup.fromJson(obj);\n            } catch (VaultEntryException e) {\n                throw new DatabaseImporterEntryException(e, obj.toString());\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/importers/AndOtpImporter.java",
    "content": "package com.beemdevelopment.aegis.importers;\n\nimport android.content.Context;\n\nimport androidx.appcompat.app.AlertDialog;\nimport androidx.lifecycle.Lifecycle;\n\nimport com.beemdevelopment.aegis.R;\nimport com.beemdevelopment.aegis.crypto.CryptParameters;\nimport com.beemdevelopment.aegis.crypto.CryptResult;\nimport com.beemdevelopment.aegis.crypto.CryptoUtils;\nimport com.beemdevelopment.aegis.encoding.Base32;\nimport com.beemdevelopment.aegis.encoding.EncodingException;\nimport com.beemdevelopment.aegis.helpers.ContextHelper;\nimport com.beemdevelopment.aegis.otp.HotpInfo;\nimport com.beemdevelopment.aegis.otp.OtpInfo;\nimport com.beemdevelopment.aegis.otp.OtpInfoException;\nimport com.beemdevelopment.aegis.otp.SteamInfo;\nimport com.beemdevelopment.aegis.otp.TotpInfo;\nimport com.beemdevelopment.aegis.ui.dialogs.Dialogs;\nimport com.beemdevelopment.aegis.ui.tasks.PBKDFTask;\nimport com.beemdevelopment.aegis.util.IOUtils;\nimport com.beemdevelopment.aegis.vault.VaultEntry;\nimport com.google.android.material.dialog.MaterialAlertDialogBuilder;\nimport com.topjohnwu.superuser.io.SuFile;\n\nimport org.json.JSONArray;\nimport org.json.JSONException;\nimport org.json.JSONObject;\n\nimport java.io.IOException;\nimport java.io.InputStream;\nimport java.nio.ByteBuffer;\nimport java.nio.charset.StandardCharsets;\nimport java.security.InvalidAlgorithmParameterException;\nimport java.security.InvalidKeyException;\nimport java.security.MessageDigest;\nimport java.security.NoSuchAlgorithmException;\nimport java.util.Arrays;\nimport java.util.Locale;\n\nimport javax.crypto.BadPaddingException;\nimport javax.crypto.Cipher;\nimport javax.crypto.IllegalBlockSizeException;\nimport javax.crypto.NoSuchPaddingException;\nimport javax.crypto.SecretKey;\nimport javax.crypto.spec.SecretKeySpec;\n\npublic class AndOtpImporter extends DatabaseImporter {\n    private static final int INT_SIZE = 4;\n    private static final int NONCE_SIZE = 12;\n    private static final int TAG_SIZE = 16;\n    private static final int SALT_SIZE = 12;\n    private static final int KEY_SIZE = 256; // bits\n\n    public AndOtpImporter(Context context) {\n        super(context);\n    }\n\n    @Override\n    protected SuFile getAppPath() {\n        throw new UnsupportedOperationException();\n    }\n\n    @Override\n    public State read(InputStream stream, boolean isInternal) throws DatabaseImporterException {\n        byte[] bytes;\n        try {\n            bytes = IOUtils.readAll(stream);\n        } catch (IOException e) {\n            throw new DatabaseImporterException(e);\n        }\n\n        try {\n            return read(bytes);\n        } catch (JSONException e) {\n            // andOTP doesn't have a proper way to indicate whether a file is encrypted\n            // so, if we can't parse it as JSON, we'll have to assume it is\n            return new EncryptedState(bytes);\n        }\n    }\n\n    private static DecryptedState read(byte[] bytes) throws JSONException {\n        JSONArray array = new JSONArray(new String(bytes, StandardCharsets.UTF_8));\n        return new DecryptedState(array);\n    }\n\n    public static class EncryptedState extends DatabaseImporter.State {\n        private byte[] _data;\n\n        public EncryptedState(byte[] data) {\n            super(true);\n            _data = data;\n        }\n\n        private DecryptedState decryptContent(SecretKey key, int offset) throws DatabaseImporterException {\n            byte[] nonce = Arrays.copyOfRange(_data, offset, offset + NONCE_SIZE);\n            byte[] tag = Arrays.copyOfRange(_data, _data.length - TAG_SIZE, _data.length);\n            CryptParameters params = new CryptParameters(nonce, tag);\n\n            try {\n                Cipher cipher = CryptoUtils.createDecryptCipher(key, nonce);\n                int len = _data.length - offset - NONCE_SIZE - TAG_SIZE;\n                CryptResult result = CryptoUtils.decrypt(_data, offset + NONCE_SIZE, len, cipher, params);\n                return read(result.getData());\n            } catch (IOException | BadPaddingException | JSONException e) {\n                throw new DatabaseImporterException(e);\n            } catch (NoSuchAlgorithmException\n                    | InvalidAlgorithmParameterException\n                    | InvalidKeyException\n                    | NoSuchPaddingException\n                    | IllegalBlockSizeException e) {\n                throw new RuntimeException(e);\n            }\n        }\n\n        private PBKDFTask.Params getKeyDerivationParams(char[] password) throws DatabaseImporterException {\n            byte[] iterBytes = Arrays.copyOfRange(_data, 0, INT_SIZE);\n            int iterations = ByteBuffer.wrap(iterBytes).getInt();\n            if (iterations < 1) {\n                throw new DatabaseImporterException(String.format(\"Invalid number of iterations for PBKDF: %d\", iterations));\n            }\n            // If number of iterations is this high, it's probably not an andOTP file, so\n            // abort early in order to prevent having to wait for an extremely long key derivation\n            // process, only to find out that the user picked the wrong file\n            if (iterations > 10_000_000L) {\n                throw new DatabaseImporterException(String.format(\"Unexpectedly high number of iterations: %d\", iterations));\n            }\n\n            byte[] salt = Arrays.copyOfRange(_data, INT_SIZE, INT_SIZE + SALT_SIZE);\n            return new PBKDFTask.Params(\"PBKDF2WithHmacSHA1\", KEY_SIZE, password, salt, iterations);\n        }\n\n        protected DecryptedState decryptOldFormat(char[] password) throws DatabaseImporterException {\n            // WARNING: DON'T DO THIS IN YOUR OWN CODE\n            // this exists solely to support the old andOTP backup format\n            // it is not a secure way to derive a key from a password\n            MessageDigest hash;\n            try {\n                hash = MessageDigest.getInstance(\"SHA-256\");\n            } catch (NoSuchAlgorithmException e) {\n                throw new RuntimeException(e);\n            }\n            byte[] keyBytes = hash.digest(CryptoUtils.toBytes(password));\n            SecretKey key = new SecretKeySpec(keyBytes, \"AES\");\n            return decryptContent(key, 0);\n        }\n\n        protected DecryptedState decryptNewFormat(SecretKey key) throws DatabaseImporterException {\n            return decryptContent(key, INT_SIZE + SALT_SIZE);\n        }\n\n        protected DecryptedState decryptNewFormat(char[] password)\n            throws DatabaseImporterException {\n            PBKDFTask.Params params = getKeyDerivationParams(password);\n            SecretKey key = PBKDFTask.deriveKey(params);\n            return decryptNewFormat(key);\n        }\n\n        private void decrypt(Context context, char[] password, boolean oldFormat, DecryptListener listener) throws DatabaseImporterException {\n            if (oldFormat) {\n                DecryptedState state = decryptOldFormat(password);\n                listener.onStateDecrypted(state);\n            } else {\n                PBKDFTask.Params params = getKeyDerivationParams(password);\n                PBKDFTask task = new PBKDFTask(context, key -> {\n                    try {\n                        DecryptedState state = decryptNewFormat(key);\n                        listener.onStateDecrypted(state);\n                    } catch (DatabaseImporterException e) {\n                        listener.onError(e);\n                    }\n                });\n                Lifecycle lifecycle = ContextHelper.getLifecycle(context);\n                task.execute(lifecycle, params);\n            }\n        }\n\n        @Override\n        public void decrypt(Context context, DecryptListener listener) {\n            String[] choices = new String[]{\n                    context.getResources().getString(R.string.andotp_new_format),\n                    context.getResources().getString(R.string.andotp_old_format)\n            };\n\n            Dialogs.showSecureDialog(new MaterialAlertDialogBuilder(context)\n                    .setTitle(R.string.choose_andotp_importer)\n                    .setSingleChoiceItems(choices, 0, null)\n                    .setPositiveButton(android.R.string.ok, (dialog, which) -> {\n                        int i = ((AlertDialog) dialog).getListView().getCheckedItemPosition();\n                        Dialogs.showPasswordInputDialog(context, password -> {\n                            try {\n                                decrypt(context, password, i != 0, listener);\n                            } catch (DatabaseImporterException e) {\n                                listener.onError(e);\n                            }\n                        }, dialog1 -> listener.onCanceled());\n                    })\n                    .create());\n        }\n    }\n\n    public static class DecryptedState extends DatabaseImporter.State {\n        private JSONArray _obj;\n\n        private DecryptedState(JSONArray obj) {\n            super(false);\n            _obj = obj;\n        }\n\n        @Override\n        public Result convert() throws DatabaseImporterException {\n            Result result = new Result();\n\n            for (int i = 0; i < _obj.length(); i++) {\n                try {\n                    JSONObject obj = _obj.getJSONObject(i);\n                    VaultEntry entry = convertEntry(obj);\n                    result.addEntry(entry);\n                } catch (JSONException e) {\n                    throw new DatabaseImporterException(e);\n                } catch (DatabaseImporterEntryException e) {\n                    result.addError(e);\n                }\n            }\n\n            return result;\n        }\n\n        private static VaultEntry convertEntry(JSONObject obj) throws DatabaseImporterEntryException {\n            try {\n                String type = obj.getString(\"type\").toLowerCase(Locale.ROOT);\n                String algo = obj.getString(\"algorithm\");\n                int digits = obj.getInt(\"digits\");\n                byte[] secret = Base32.decode(obj.getString(\"secret\"));\n\n                OtpInfo info;\n                switch (type) {\n                    case \"hotp\":\n                        info = new HotpInfo(secret, algo, digits, obj.getLong(\"counter\"));\n                        break;\n                    case \"totp\":\n                        info = new TotpInfo(secret, algo, digits, obj.getInt(\"period\"));\n                        break;\n                    case \"steam\":\n                        info = new SteamInfo(secret, algo, digits, obj.optInt(\"period\", TotpInfo.DEFAULT_PERIOD));\n                        break;\n                    default:\n                        throw new DatabaseImporterException(\"unsupported otp type: \" + type);\n                }\n\n                String name;\n                String issuer = \"\";\n\n                if (obj.has(\"issuer\")) {\n                    name = obj.getString(\"label\");\n                    issuer = obj.getString(\"issuer\");\n                } else {\n                    String[] parts = obj.getString(\"label\").split(\" - \");\n                    if (parts.length > 1) {\n                        issuer = parts[0];\n                        name = parts[1];\n                    } else {\n                        name = parts[0];\n                    }\n                }\n\n                return new VaultEntry(info, name, issuer);\n            } catch (DatabaseImporterException | EncodingException | OtpInfoException |\n                     JSONException e) {\n                throw new DatabaseImporterEntryException(e, obj.toString());\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/importers/AuthenticatorPlusImporter.java",
    "content": "package com.beemdevelopment.aegis.importers;\n\nimport android.content.Context;\n\nimport com.beemdevelopment.aegis.ui.dialogs.Dialogs;\nimport com.beemdevelopment.aegis.util.IOUtils;\nimport com.topjohnwu.superuser.io.SuFile;\n\nimport net.lingala.zip4j.io.inputstream.ZipInputStream;\nimport net.lingala.zip4j.model.LocalFileHeader;\n\nimport java.io.ByteArrayInputStream;\nimport java.io.File;\nimport java.io.FileNotFoundException;\nimport java.io.IOException;\nimport java.io.InputStream;\n\npublic class AuthenticatorPlusImporter extends DatabaseImporter {\n    private static final String FILENAME = \"Accounts.txt\";\n\n    public AuthenticatorPlusImporter(Context context) {\n        super(context);\n    }\n\n    @Override\n    protected SuFile getAppPath() {\n        throw new UnsupportedOperationException();\n    }\n\n    @Override\n    public State read(InputStream stream, boolean isInternal) throws DatabaseImporterException {\n        try {\n            return new EncryptedState(IOUtils.readAll(stream));\n        } catch (IOException e) {\n            throw new DatabaseImporterException(e);\n        }\n    }\n\n    public static class EncryptedState extends DatabaseImporter.State {\n        private final byte[] _data;\n\n        private EncryptedState(byte[] data) {\n            super(true);\n            _data = data;\n        }\n\n        protected State decrypt(char[] password) throws DatabaseImporterException {\n            try (ByteArrayInputStream inStream = new ByteArrayInputStream(_data);\n                 ZipInputStream zipStream = new ZipInputStream(inStream, password)) {\n                LocalFileHeader header;\n                while ((header = zipStream.getNextEntry()) != null) {\n                    File file = new File(header.getFileName());\n                    if (file.getName().equals(FILENAME)) {\n                        GoogleAuthUriImporter importer = new GoogleAuthUriImporter(null);\n                        return importer.read(zipStream);\n                    }\n                }\n\n                throw new FileNotFoundException(FILENAME);\n            } catch (IOException e) {\n                throw new DatabaseImporterException(e);\n            }\n        }\n\n        @Override\n        public void decrypt(Context context, DecryptListener listener) {\n            Dialogs.showPasswordInputDialog(context, password -> {\n                try {\n                    DatabaseImporter.State state = decrypt(password);\n                    listener.onStateDecrypted(state);\n                } catch (DatabaseImporterException e) {\n                    listener.onError(e);\n                }\n            }, dialog1 -> listener.onCanceled());\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/importers/AuthyImporter.java",
    "content": "package com.beemdevelopment.aegis.importers;\n\nimport android.content.Context;\nimport android.content.pm.PackageManager;\nimport android.util.Xml;\n\nimport com.beemdevelopment.aegis.R;\nimport com.beemdevelopment.aegis.encoding.Base32;\nimport com.beemdevelopment.aegis.encoding.Base64;\nimport com.beemdevelopment.aegis.encoding.EncodingException;\nimport com.beemdevelopment.aegis.encoding.Hex;\nimport com.beemdevelopment.aegis.otp.OtpInfo;\nimport com.beemdevelopment.aegis.otp.OtpInfoException;\nimport com.beemdevelopment.aegis.otp.TotpInfo;\nimport com.beemdevelopment.aegis.ui.dialogs.Dialogs;\nimport com.beemdevelopment.aegis.util.JsonUtils;\nimport com.beemdevelopment.aegis.util.PreferenceParser;\nimport com.beemdevelopment.aegis.vault.VaultEntry;\nimport com.topjohnwu.superuser.Shell;\nimport com.topjohnwu.superuser.io.SuFile;\nimport com.topjohnwu.superuser.io.SuFileInputStream;\n\nimport org.json.JSONArray;\nimport org.json.JSONException;\nimport org.json.JSONObject;\nimport org.xmlpull.v1.XmlPullParser;\nimport org.xmlpull.v1.XmlPullParserException;\n\nimport java.io.IOException;\nimport java.io.InputStream;\nimport java.nio.charset.StandardCharsets;\nimport java.security.InvalidAlgorithmParameterException;\nimport java.security.InvalidKeyException;\nimport java.security.NoSuchAlgorithmException;\nimport java.security.spec.InvalidKeySpecException;\nimport java.security.spec.KeySpec;\n\nimport javax.crypto.BadPaddingException;\nimport javax.crypto.Cipher;\nimport javax.crypto.IllegalBlockSizeException;\nimport javax.crypto.NoSuchPaddingException;\nimport javax.crypto.SecretKey;\nimport javax.crypto.SecretKeyFactory;\nimport javax.crypto.spec.IvParameterSpec;\nimport javax.crypto.spec.PBEKeySpec;\nimport javax.crypto.spec.SecretKeySpec;\n\npublic class AuthyImporter extends DatabaseImporter {\n    private static final String _subPath = \"shared_prefs\";\n    private static final String _pkgName = \"com.authy.authy\";\n    private static final String _authFilename = \"com.authy.storage.tokens.authenticator\";\n    private static final String _authyFilename = \"com.authy.storage.tokens.authy\";\n\n    private static final int ITERATIONS = 1000;\n    private static final int KEY_SIZE = 256;\n    private static final byte[] IV = new byte[]{\n            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00\n    };\n\n    public AuthyImporter(Context context) {\n        super(context);\n    }\n\n    @Override\n    protected SuFile getAppPath() throws PackageManager.NameNotFoundException {\n        return getAppPath(_pkgName, _subPath);\n    }\n\n    @Override\n    public State readFromApp(Shell shell) throws PackageManager.NameNotFoundException, DatabaseImporterException {\n        SuFile path = getAppPath();\n        path.setShell(shell);\n\n        JSONArray array;\n        JSONArray authyArray;\n        try {\n            SuFile file1 = new SuFile(path, String.format(\"%s.xml\", _authFilename));\n            file1.setShell(shell);\n            SuFile file2 = new SuFile(path, String.format(\"%s.xml\", _authyFilename));\n            file2.setShell(shell);\n\n            array = readFile(file1, String.format(\"%s.key\", _authFilename));\n            authyArray = readFile(file2, String.format(\"%s.key\", _authyFilename));\n        } catch (IOException | XmlPullParserException e) {\n            throw new DatabaseImporterException(e);\n        }\n\n        try {\n            for (int i = 0; i < authyArray.length(); i++) {\n                array.put(authyArray.getJSONObject(i));\n            }\n        } catch (JSONException e) {\n            throw new DatabaseImporterException(e);\n        }\n\n        return read(array);\n    }\n\n    @Override\n    public State read(InputStream stream, boolean isInternal) throws DatabaseImporterException {\n        try {\n            XmlPullParser parser = Xml.newPullParser();\n            parser.setFeature(XmlPullParser.FEATURE_PROCESS_NAMESPACES, false);\n            parser.setInput(stream, null);\n            parser.nextTag();\n\n            JSONArray array = new JSONArray();\n            for (PreferenceParser.XmlEntry entry : PreferenceParser.parse(parser)) {\n                if (entry.Name.equals(String.format(\"%s.key\", _authFilename))\n                        || entry.Name.equals(String.format(\"%s.key\", _authyFilename))) {\n                    array = new JSONArray(entry.Value);\n                    break;\n                }\n            }\n\n            return read(array);\n        } catch (XmlPullParserException | JSONException | IOException e) {\n            throw new DatabaseImporterException(e);\n        }\n    }\n\n    private State read(JSONArray array) throws DatabaseImporterException {\n        try {\n            for (int i = 0; i < array.length(); i++) {\n                JSONObject obj = array.getJSONObject(i);\n                if (!obj.has(\"decryptedSecret\") && !obj.has(\"secretSeed\")) {\n                    return new EncryptedState(array);\n                }\n            }\n        } catch (JSONException e) {\n            throw new DatabaseImporterException(e);\n        }\n\n        return new DecryptedState(array);\n    }\n\n    private JSONArray readFile(SuFile file, String key) throws IOException, XmlPullParserException {\n        try (InputStream inStream = SuFileInputStream.open(file)) {\n            XmlPullParser parser = Xml.newPullParser();\n            parser.setFeature(XmlPullParser.FEATURE_PROCESS_NAMESPACES, false);\n            parser.setInput(inStream, null);\n            parser.nextTag();\n\n            for (PreferenceParser.XmlEntry entry : PreferenceParser.parse(parser)) {\n                if (entry.Name.equals(key)) {\n                    return new JSONArray(entry.Value);\n                }\n            }\n        } catch (JSONException ignored) {\n\n        }\n\n        return new JSONArray();\n    }\n\n    public static class EncryptedState extends DatabaseImporter.State {\n        private JSONArray _array;\n\n        private EncryptedState(JSONArray array) {\n            super(true);\n            _array = array;\n        }\n\n        protected DecryptedState decrypt(char[] password) throws DatabaseImporterException {\n            try {\n                for (int i = 0; i < _array.length(); i++) {\n                    JSONObject obj = _array.getJSONObject(i);\n                    String secretString = JsonUtils.optString(obj, \"encryptedSecret\");\n                    if (secretString == null) {\n                        continue;\n                    }\n\n                    byte[] encryptedSecret = Base64.decode(secretString);\n                    byte[] salt = obj.getString(\"salt\").getBytes(StandardCharsets.UTF_8);\n                    SecretKeyFactory factory = SecretKeyFactory.getInstance(\"PBKDF2WithHmacSHA1\");\n                    KeySpec spec = new PBEKeySpec(password, salt, ITERATIONS, KEY_SIZE);\n                    SecretKey key = factory.generateSecret(spec);\n                    key = new SecretKeySpec(key.getEncoded(), \"AES\");\n\n                    Cipher cipher = Cipher.getInstance(\"AES/CBC/PKCS5Padding\");\n                    IvParameterSpec ivSpec = new IvParameterSpec(IV);\n                    cipher.init(Cipher.DECRYPT_MODE, key, ivSpec);\n\n                    byte[] secret = cipher.doFinal(encryptedSecret);\n                    obj.remove(\"encryptedSecret\");\n                    obj.remove(\"salt\");\n                    obj.put(\"decryptedSecret\", new String(secret, StandardCharsets.UTF_8));\n                }\n\n                return new DecryptedState(_array);\n            } catch (JSONException\n                    | EncodingException\n                    | NoSuchAlgorithmException\n                    | InvalidKeySpecException\n                    | InvalidAlgorithmParameterException\n                    | InvalidKeyException\n                    | NoSuchPaddingException\n                    | BadPaddingException\n                    | IllegalBlockSizeException e) {\n                throw new DatabaseImporterException(e);\n            }\n        }\n\n        @Override\n        public void decrypt(Context context, DecryptListener listener) {\n            Dialogs.showPasswordInputDialog(context, R.string.enter_password_authy_message, password -> {\n                try {\n                    DecryptedState state = decrypt(password);\n                    listener.onStateDecrypted(state);\n                } catch (DatabaseImporterException e) {\n                    listener.onError(e);\n                }\n            }, dialog1 -> listener.onCanceled());\n        }\n    }\n\n    public static class DecryptedState extends DatabaseImporter.State {\n        private JSONArray _array;\n\n        private DecryptedState(JSONArray array) {\n            super(false);\n            _array = array;\n        }\n\n        @Override\n        public Result convert() throws DatabaseImporterException {\n            Result result = new Result();\n\n            try {\n                for (int i = 0; i < _array.length(); i++) {\n                    JSONObject entryObj = _array.getJSONObject(i);\n                    try {\n                        VaultEntry entry = convertEntry(entryObj);\n                        result.addEntry(entry);\n                    } catch (DatabaseImporterEntryException e) {\n                        result.addError(e);\n                    }\n                }\n            } catch (JSONException e) {\n                throw new DatabaseImporterException(e);\n            }\n\n            return result;\n        }\n\n        private static VaultEntry convertEntry(JSONObject entry) throws DatabaseImporterEntryException {\n            try {\n                AuthyEntryInfo authyEntryInfo = new AuthyEntryInfo();\n                authyEntryInfo.OriginalName = JsonUtils.optString(entry, \"originalName\");\n                authyEntryInfo.OriginalIssuer = JsonUtils.optString(entry, \"originalIssuer\");\n                authyEntryInfo.AccountType = JsonUtils.optString(entry, \"accountType\");\n                authyEntryInfo.Name = entry.optString(\"name\");\n\n                boolean isAuthy = entry.has(\"secretSeed\");\n                sanitizeEntryInfo(authyEntryInfo, isAuthy);\n\n                byte[] secret;\n                if (isAuthy) {\n                    secret = Hex.decode(entry.getString(\"secretSeed\"));\n                } else {\n                    secret = Base32.decode(entry.getString(\"decryptedSecret\"));\n                }\n\n                int digits = entry.getInt(\"digits\");\n                OtpInfo info = new TotpInfo(secret, OtpInfo.DEFAULT_ALGORITHM, digits, isAuthy ? 10 : TotpInfo.DEFAULT_PERIOD);\n                return new VaultEntry(info, authyEntryInfo.Name, authyEntryInfo.Issuer);\n            } catch (OtpInfoException | JSONException | EncodingException e) {\n                throw new DatabaseImporterEntryException(e, entry.toString());\n            }\n        }\n\n        private static void sanitizeEntryInfo(AuthyEntryInfo info, boolean isAuthy) {\n            if (!isAuthy) {\n                String separator = \"\";\n\n                if (info.OriginalIssuer != null) {\n                    info.Issuer = info.OriginalIssuer;\n                } else if (info.OriginalName != null && info.OriginalName.contains(\":\")) {\n                    info.Issuer = info.OriginalName.substring(0, info.OriginalName.indexOf(\":\"));\n                    separator = \":\";\n                } else if (info.Name.contains(\" - \")) {\n                    info.Issuer = info.Name.substring(0, info.Name.indexOf(\" - \"));\n                    separator = \" - \";\n                } else {\n                    info.Issuer = info.AccountType.substring(0, 1).toUpperCase() + info.AccountType.substring(1);\n                }\n\n                info.Name = info.Name.replace(info.Issuer + separator, \"\");\n            } else {\n                info.Issuer = info.Name;\n                info.Name = \"\";\n            }\n\n            if (info.Name.startsWith(\": \")) {\n                info.Name = info.Name.substring(2);\n            }\n        }\n    }\n\n    private static class AuthyEntryInfo {\n        String OriginalName;\n        String OriginalIssuer;\n        String AccountType;\n        String Issuer;\n        String Name;\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/importers/BattleNetImporter.java",
    "content": "package com.beemdevelopment.aegis.importers;\n\nimport android.content.Context;\nimport android.content.pm.PackageManager;\nimport android.util.Xml;\n\nimport com.beemdevelopment.aegis.encoding.EncodingException;\nimport com.beemdevelopment.aegis.encoding.Hex;\nimport com.beemdevelopment.aegis.otp.OtpInfo;\nimport com.beemdevelopment.aegis.otp.OtpInfoException;\nimport com.beemdevelopment.aegis.otp.TotpInfo;\nimport com.beemdevelopment.aegis.util.PreferenceParser;\nimport com.beemdevelopment.aegis.vault.VaultEntry;\nimport com.google.common.base.Strings;\nimport com.topjohnwu.superuser.io.SuFile;\n\nimport org.xmlpull.v1.XmlPullParser;\nimport org.xmlpull.v1.XmlPullParserException;\n\nimport java.io.IOException;\nimport java.io.InputStream;\n\npublic class BattleNetImporter extends DatabaseImporter {\n    private static final String _pkgName = \"com.blizzard.messenger\";\n    private static final String _subPath = \"shared_prefs/com.blizzard.messenger.authenticator_preferences.xml\";\n\n    private static final byte[] _key;\n\n    public BattleNetImporter(Context context) {\n        super(context);\n    }\n\n    static {\n        try {\n            _key = Hex.decode(\"398e27fc50276a656065b0e525f4c06c04c61075286b8e7aeda59da9813b5dd6c80d2fb38068773fa59ba47c17ca6c6479015c1d5b8b8f6b9a\");\n        } catch (EncodingException e) {\n            throw new RuntimeException(e);\n        }\n    }\n\n    @Override\n    protected SuFile getAppPath() throws DatabaseImporterException, PackageManager.NameNotFoundException {\n        return getAppPath(_pkgName, _subPath);\n    }\n\n    @Override\n    protected State read(InputStream stream, boolean isInternal) throws DatabaseImporterException {\n        final String serialKey = \"com.blizzard.messenger.AUTHENTICATOR_SERIAL\";\n        final String secretKey = \"com.blizzard.messenger.AUTHENTICATOR_DEVICE_SECRET\";\n\n        try {\n            XmlPullParser parser = Xml.newPullParser();\n            parser.setFeature(XmlPullParser.FEATURE_PROCESS_NAMESPACES, false);\n            parser.setInput(stream, null);\n            parser.nextTag();\n\n            String serial = \"\";\n            String secretValue = null;\n            for (PreferenceParser.XmlEntry entry : PreferenceParser.parse(parser)) {\n                if (entry.Name.equals(secretKey)) {\n                    secretValue = entry.Value;\n                } else if (entry.Name.equals(serialKey)) {\n                    serial = entry.Value;\n                }\n            }\n\n            if (secretValue == null) {\n                throw new DatabaseImporterException(String.format(\"Key not found: %s\", secretKey));\n            }\n\n            return new BattleNetImporter.State(serial, secretValue);\n        } catch (XmlPullParserException | IOException e) {\n            throw new DatabaseImporterException(e);\n        }\n    }\n\n    public static class State extends DatabaseImporter.State {\n        private final String _serial;\n        private final String _secretValue;\n\n        public State(String serial, String secretValue) {\n            super(false);\n            _serial = serial;\n            _secretValue = secretValue;\n        }\n\n        @Override\n        public Result convert() {\n            Result result = new Result();\n\n            try {\n                VaultEntry entry = convertEntry(_serial, _secretValue);\n                result.addEntry(entry);\n            } catch (DatabaseImporterEntryException e) {\n                result.addError(e);\n            }\n\n            return result;\n        }\n\n        private static VaultEntry convertEntry(String serial, String secretString) throws DatabaseImporterEntryException {\n            try {\n                if (!Strings.isNullOrEmpty(serial)) {\n                    serial = unmask(serial);\n                }\n                byte[] secret = Hex.decode(unmask(secretString));\n                OtpInfo info = new TotpInfo(secret, OtpInfo.DEFAULT_ALGORITHM, 8, TotpInfo.DEFAULT_PERIOD);\n                return new VaultEntry(info, serial, \"Battle.net\");\n            } catch (OtpInfoException | EncodingException e) {\n                throw new DatabaseImporterEntryException(e, secretString);\n            }\n        }\n\n        private static String unmask(String s) throws EncodingException {\n            byte[] ds = Hex.decode(s);\n            StringBuilder sb = new StringBuilder();\n            for (int i = 0; i < ds.length; i++) {\n                char c = (char) (ds[i] ^ _key[i]);\n                sb.append(c);\n            }\n            return sb.toString();\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/importers/BitwardenImporter.java",
    "content": "package com.beemdevelopment.aegis.importers;\n\nimport android.content.Context;\nimport android.net.Uri;\n\nimport com.beemdevelopment.aegis.encoding.Base32;\nimport com.beemdevelopment.aegis.encoding.EncodingException;\nimport com.beemdevelopment.aegis.otp.GoogleAuthInfo;\nimport com.beemdevelopment.aegis.otp.GoogleAuthInfoException;\nimport com.beemdevelopment.aegis.otp.OtpInfoException;\nimport com.beemdevelopment.aegis.otp.SteamInfo;\nimport com.beemdevelopment.aegis.util.IOUtils;\nimport com.beemdevelopment.aegis.vault.VaultEntry;\nimport com.topjohnwu.superuser.io.SuFile;\n\nimport org.json.JSONArray;\nimport org.json.JSONException;\nimport org.json.JSONObject;\nimport org.simpleflatmapper.csv.CsvParser;\nimport org.simpleflatmapper.lightningcsv.Row;\n\nimport java.io.IOException;\nimport java.io.InputStream;\nimport java.net.URISyntaxException;\nimport java.nio.charset.StandardCharsets;\nimport java.util.ArrayList;\nimport java.util.Iterator;\nimport java.util.List;\nimport java.util.Objects;\n\npublic class BitwardenImporter extends DatabaseImporter {\n    public BitwardenImporter(Context context) {\n        super(context);\n    }\n\n    @Override\n    protected SuFile getAppPath() {\n        throw new UnsupportedOperationException();\n    }\n\n    @Override\n    protected State read(InputStream stream, boolean isInternal) throws DatabaseImporterException {\n        String fileString;\n        try {\n            fileString = new String(IOUtils.readAll(stream), StandardCharsets.UTF_8);\n        } catch (IOException e) {\n            throw new DatabaseImporterException(e);\n        }\n        try {\n            JSONObject obj = new JSONObject(fileString);\n            JSONArray array = obj.getJSONArray(\"items\");\n\n            List<String> entries = new ArrayList<>();\n            String entry;\n            for (int i = 0; i < array.length(); i++) {\n                entry = array.getJSONObject(i).getJSONObject(\"login\").getString(\"totp\");\n                if (!entry.isEmpty()) {\n                    entries.add(entry);\n                }\n            }\n\n            return new BitwardenImporter.State(entries);\n        } catch (JSONException e) {\n            try {\n                Iterator<Row> rowIterator = CsvParser.separator(',').rowIterator(fileString);\n                List<String> entries = new ArrayList<>();\n                rowIterator.forEachRemaining((row -> {\n                    String entry = row.get(\"login_totp\");\n                    if (entry != null && !entry.isEmpty()) {\n                        entries.add(entry);\n                    }\n                }));\n                return new BitwardenImporter.State(entries);\n            } catch (IOException e2) {\n                throw new DatabaseImporterException(e2);\n            }\n        }\n    }\n\n    public static class State extends DatabaseImporter.State {\n        private final List<String> _entries;\n\n        public State(List<String> entries) {\n            super(false);\n            _entries = entries;\n        }\n\n        @Override\n        public Result convert() {\n            Result result = new Result();\n\n            for (String obj : _entries) {\n                try {\n                    VaultEntry entry = convertEntry(obj);\n                    result.addEntry(entry);\n                } catch (DatabaseImporterEntryException e) {\n                    result.addError(e);\n                }\n            }\n\n            return result;\n        }\n\n        private static VaultEntry convertEntry(String obj) throws DatabaseImporterEntryException {\n            try {\n                GoogleAuthInfo info = BitwardenImporter.parseUri(obj);\n                return new VaultEntry(info);\n            } catch (GoogleAuthInfoException | EncodingException | OtpInfoException | URISyntaxException e) {\n                throw new DatabaseImporterEntryException(e, obj);\n            }\n        }\n    }\n\n    private static GoogleAuthInfo parseUri(String s) throws EncodingException, OtpInfoException, URISyntaxException, GoogleAuthInfoException {\n        Uri uri = Uri.parse(s);\n        if (Objects.equals(uri.getScheme(), \"steam\")) {\n            String secretString = uri.getAuthority();\n            if (secretString == null) {\n                throw new GoogleAuthInfoException(uri, \"Empty secret (empty authority)\");\n            }\n            byte[] secret = Base32.decode(secretString);\n            return new GoogleAuthInfo(new SteamInfo(secret), \"Steam account\", \"Steam\");\n        }\n\n        return GoogleAuthInfo.parseUri(uri);\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/importers/DatabaseImporter.java",
    "content": "package com.beemdevelopment.aegis.importers;\n\nimport android.content.Context;\nimport android.content.pm.PackageManager;\n\nimport androidx.annotation.StringRes;\n\nimport com.beemdevelopment.aegis.R;\nimport com.beemdevelopment.aegis.util.UUIDMap;\nimport com.beemdevelopment.aegis.vault.VaultEntry;\nimport com.beemdevelopment.aegis.vault.VaultGroup;\nimport com.topjohnwu.superuser.Shell;\nimport com.topjohnwu.superuser.io.SuFile;\nimport com.topjohnwu.superuser.io.SuFileInputStream;\n\nimport java.io.IOException;\nimport java.io.InputStream;\nimport java.io.Serializable;\nimport java.lang.reflect.InvocationTargetException;\nimport java.util.ArrayList;\nimport java.util.Collections;\nimport java.util.List;\nimport java.util.stream.Collectors;\n\npublic abstract class DatabaseImporter {\n    private Context _context;\n\n    private static List<Definition> _importers;\n\n    static {\n        // note: keep these lists sorted alphabetically\n        _importers = new ArrayList<>();\n        _importers.add(new Definition(\"2FAS Authenticator\", TwoFASImporter.class, R.string.importer_help_2fas, false));\n        _importers.add(new Definition(\"Aegis\", AegisImporter.class, R.string.importer_help_aegis, false));\n        _importers.add(new Definition(\"andOTP\", AndOtpImporter.class, R.string.importer_help_andotp, false));\n        _importers.add(new Definition(\"Authenticator Plus\", AuthenticatorPlusImporter.class, R.string.importer_help_authenticator_plus, false));\n        _importers.add(new Definition(\"Authy\", AuthyImporter.class, R.string.importer_help_authy, true));\n        _importers.add(new Definition(\"Battle.net Authenticator\", BattleNetImporter.class, R.string.importer_help_battle_net_authenticator, true));\n        _importers.add(new Definition(\"Bitwarden\", BitwardenImporter.class, R.string.importer_help_bitwarden, false));\n        _importers.add(new Definition(\"Duo\", DuoImporter.class, R.string.importer_help_duo, true));\n        _importers.add(new Definition(\"Ente Auth\", EnteAuthImporter.class, R.string.importer_help_ente_auth, false));\n        _importers.add(new Definition(\"FreeOTP\", FreeOtpImporter.class, R.string.importer_help_freeotp, true));\n        _importers.add(new Definition(\"FreeOTP+ (JSON)\", FreeOtpPlusImporter.class, R.string.importer_help_freeotp_plus, true));\n        _importers.add(new Definition(\"Google Authenticator\", GoogleAuthImporter.class, R.string.importer_help_google_authenticator, true));\n        _importers.add(new Definition(\"Microsoft Authenticator\", MicrosoftAuthImporter.class, R.string.importer_help_microsoft_authenticator, true));\n        _importers.add(new Definition(\"Plain text\", GoogleAuthUriImporter.class, R.string.importer_help_plain_text, false));\n        _importers.add(new Definition(\"Proton Authenticator\", ProtonAuthenticatorImporter.class, R.string.importer_help_proton_authenticator, false));\n        _importers.add(new Definition(\"Steam\", SteamImporter.class, R.string.importer_help_steam, true));\n        _importers.add(new Definition(\"Stratum (Authenticator Pro)\", StratumImporter.class, R.string.importer_help_stratum, true));\n        _importers.add(new Definition(\"TOTP Authenticator\", TotpAuthenticatorImporter.class, R.string.importer_help_totp_authenticator, true));\n        _importers.add(new Definition(\"WinAuth\", WinAuthImporter.class, R.string.importer_help_winauth, false));\n    }\n\n    public DatabaseImporter(Context context) {\n        _context = context;\n    }\n\n    protected Context requireContext() {\n        return _context;\n    }\n\n    protected abstract SuFile getAppPath() throws DatabaseImporterException, PackageManager.NameNotFoundException;\n\n    protected SuFile getAppPath(String pkgName, String subPath) throws PackageManager.NameNotFoundException {\n        PackageManager man = requireContext().getPackageManager();\n        return new SuFile(man.getApplicationInfo(pkgName, 0).dataDir, subPath);\n    }\n\n    public boolean isInstalledAppVersionSupported() {\n        return true;\n    }\n\n    protected abstract State read(InputStream stream, boolean isInternal) throws DatabaseImporterException;\n\n    public State read(InputStream stream) throws DatabaseImporterException {\n        return read(stream, false);\n    }\n\n    public State readFromApp(Shell shell) throws PackageManager.NameNotFoundException, DatabaseImporterException {\n        SuFile file = getAppPath();\n        file.setShell(shell);\n\n        try (InputStream stream = SuFileInputStream.open(file)) {\n            return read(stream, true);\n        } catch (IOException e) {\n            throw new DatabaseImporterException(e);\n        }\n    }\n\n    public static DatabaseImporter create(Context context, Class<? extends DatabaseImporter> type) {\n        try {\n            return type.getConstructor(Context.class).newInstance(context);\n        } catch (IllegalAccessException | InstantiationException\n                | NoSuchMethodException | InvocationTargetException e) {\n            throw new RuntimeException(e);\n        }\n    }\n\n    public static List<Definition> getImporters(boolean isDirect) {\n        if (isDirect) {\n            return Collections.unmodifiableList(_importers.stream().filter(Definition::supportsDirect).collect(Collectors.toList()));\n        }\n\n        return Collections.unmodifiableList(_importers);\n    }\n\n    public static class Definition implements Serializable {\n        private final String _name;\n        private final Class<? extends DatabaseImporter> _type;\n        private final @StringRes int _help;\n        private final boolean _supportsDirect;\n\n        /**\n         *\n         * @param name The name of the Authenticator the importer handles.\n         * @param type The class which does the importing.\n         * @param help The string that explains the type of file needed (and optionally where it can be obtained).\n         * @param supportsDirect Whether the importer can directly import the entries from the app's internal storage using root access.\n         */\n        public Definition(String name, Class<? extends DatabaseImporter> type, @StringRes int help, boolean supportsDirect) {\n            _name = name;\n            _type = type;\n            _help = help;\n            _supportsDirect = supportsDirect;\n        }\n\n        public String getName() {\n            return _name;\n        }\n\n        public Class<? extends DatabaseImporter> getType() {\n            return _type;\n        }\n\n        public @StringRes int getHelp() {\n            return _help;\n        }\n\n        public boolean supportsDirect() {\n            return _supportsDirect;\n        }\n    }\n\n    public static abstract class State {\n        private boolean _encrypted;\n\n        public State(boolean encrypted) {\n            _encrypted = encrypted;\n        }\n\n        public boolean isEncrypted() {\n            return _encrypted;\n        }\n\n        public void decrypt(Context context, DecryptListener listener) throws DatabaseImporterException {\n            if (!_encrypted) {\n                throw new RuntimeException(\"Attempted to decrypt a plain text database\");\n            }\n\n            throw new UnsupportedOperationException();\n        }\n\n        public Result convert() throws DatabaseImporterException {\n            if (_encrypted) {\n                throw new RuntimeException(\"Attempted to convert database before decrypting it\");\n            }\n\n            throw new UnsupportedOperationException();\n        }\n    }\n\n    public static class Result {\n        private UUIDMap<VaultEntry> _entries = new UUIDMap<>();\n        private UUIDMap<VaultGroup> _groups = new UUIDMap<>();\n        private List<DatabaseImporterEntryException> _errors = new ArrayList<>();\n\n        public void addEntry(VaultEntry entry) {\n            _entries.add(entry);\n        }\n\n        public void addGroup(VaultGroup group) {\n            _groups.add(group);\n        }\n\n        public void addError(DatabaseImporterEntryException error) {\n            _errors.add(error);\n        }\n\n        public UUIDMap<VaultEntry> getEntries() {\n            return _entries;\n        }\n\n        public UUIDMap<VaultGroup> getGroups() {\n            return _groups;\n        }\n\n        public List<DatabaseImporterEntryException> getErrors() {\n            return _errors;\n        }\n    }\n\n    public static abstract class DecryptListener {\n        protected abstract void onStateDecrypted(State state);\n        protected abstract void onError(Exception e);\n        protected abstract void onCanceled();\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/importers/DatabaseImporterEntryException.java",
    "content": "package com.beemdevelopment.aegis.importers;\n\npublic class DatabaseImporterEntryException extends Exception {\n    private String _text;\n\n    public DatabaseImporterEntryException(String message, String text) {\n        super(message);\n        _text = text;\n    }\n\n    public DatabaseImporterEntryException(Throwable cause, String text) {\n        super(cause);\n        _text = text;\n    }\n\n    public String getText() {\n        return _text;\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/importers/DatabaseImporterException.java",
    "content": "package com.beemdevelopment.aegis.importers;\n\npublic class DatabaseImporterException extends Exception {\n    public DatabaseImporterException(Throwable cause) {\n        super(cause);\n    }\n\n    public DatabaseImporterException(String message) {\n        super(message);\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/importers/DuoImporter.java",
    "content": "package com.beemdevelopment.aegis.importers;\n\nimport static java.nio.charset.StandardCharsets.UTF_8;\n\nimport android.content.Context;\nimport android.content.pm.PackageManager.NameNotFoundException;\n\nimport androidx.annotation.NonNull;\n\nimport com.beemdevelopment.aegis.encoding.Base32;\nimport com.beemdevelopment.aegis.encoding.EncodingException;\nimport com.beemdevelopment.aegis.otp.HotpInfo;\nimport com.beemdevelopment.aegis.otp.OtpInfo;\nimport com.beemdevelopment.aegis.otp.OtpInfoException;\nimport com.beemdevelopment.aegis.otp.TotpInfo;\nimport com.beemdevelopment.aegis.util.IOUtils;\nimport com.beemdevelopment.aegis.vault.VaultEntry;\nimport com.topjohnwu.superuser.io.SuFile;\n\nimport org.json.JSONArray;\nimport org.json.JSONException;\nimport org.json.JSONObject;\n\nimport java.io.IOException;\nimport java.io.InputStream;\n\npublic class DuoImporter extends DatabaseImporter {\n    private static final String _pkgName = \"com.duosecurity.duomobile\";\n    private static final String _subPath = \"files/duokit/accounts.json\";\n\n    public DuoImporter(Context context) {\n        super(context);\n    }\n\n    @Override\n    protected @NonNull SuFile getAppPath() throws DatabaseImporterException, NameNotFoundException {\n        return getAppPath(_pkgName, _subPath);\n    }\n\n    @Override\n    protected @NonNull State read(\n            @NonNull InputStream stream, boolean isInternal\n    ) throws DatabaseImporterException {\n        try {\n            String contents = new String(IOUtils.readAll(stream), UTF_8);\n            return new DecryptedState(new JSONArray(contents));\n        } catch (JSONException | IOException e) {\n            throw new DatabaseImporterException(e);\n        }\n    }\n\n    public static class DecryptedState extends DatabaseImporter.State {\n        private final JSONArray _array;\n\n        public DecryptedState(@NonNull JSONArray array) {\n            super(false);\n            _array = array;\n        }\n\n        @Override\n        public @NonNull Result convert() throws DatabaseImporterException {\n            Result result = new Result();\n\n            try {\n                for (int i = 0; i < _array.length(); i++) {\n                    JSONObject entry = _array.getJSONObject(i);\n                    try {\n                        result.addEntry(convertEntry(entry));\n                    } catch (DatabaseImporterEntryException e) {\n                        result.addError(e);\n                    }\n                }\n            } catch (JSONException e) {\n                throw new DatabaseImporterException(e);\n            }\n\n            return result;\n        }\n\n        private static @NonNull VaultEntry convertEntry(\n                @NonNull JSONObject entry\n        ) throws DatabaseImporterEntryException {\n            try {\n                String label = entry.optString(\"name\");\n                JSONObject otpData = entry.getJSONObject(\"otpGenerator\");\n                byte[] secret = Base32.decode(otpData.getString(\"otpSecret\"));\n                Long counter = otpData.has(\"counter\") ? otpData.getLong(\"counter\") : null;\n\n                OtpInfo otp = counter == null\n                        ? new TotpInfo(secret)\n                        : new HotpInfo(secret, counter);\n\n                return new VaultEntry(otp, label, \"\");\n            } catch (JSONException | OtpInfoException | EncodingException e) {\n                throw new DatabaseImporterEntryException(e, entry.toString());\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/importers/EnteAuthImporter.java",
    "content": "package com.beemdevelopment.aegis.importers;\n\nimport android.content.Context;\n\nimport com.beemdevelopment.aegis.util.IOUtils;\nimport com.topjohnwu.superuser.io.SuFile;\n\nimport java.io.ByteArrayInputStream;\nimport java.io.IOException;\nimport java.io.InputStream;\n\npublic class EnteAuthImporter extends DatabaseImporter {\n    public EnteAuthImporter(Context context) {\n        super(context);\n    }\n\n    @Override\n    protected SuFile getAppPath() {\n        throw new UnsupportedOperationException();\n    }\n\n    @Override\n    protected State read(InputStream stream, boolean isInternal) throws DatabaseImporterException {\n        try {\n            byte[] bytes = IOUtils.readAll(stream);\n            GoogleAuthUriImporter importer = new GoogleAuthUriImporter(requireContext());\n            return importer.read(new ByteArrayInputStream(bytes), isInternal);\n        } catch (IOException e) {\n            throw new DatabaseImporterException(e);\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/importers/FreeOtpImporter.java",
    "content": "package com.beemdevelopment.aegis.importers;\n\nimport android.content.Context;\nimport android.content.pm.PackageManager;\nimport android.util.Xml;\n\nimport androidx.lifecycle.Lifecycle;\n\nimport com.beemdevelopment.aegis.R;\nimport com.beemdevelopment.aegis.helpers.ContextHelper;\nimport com.beemdevelopment.aegis.otp.HotpInfo;\nimport com.beemdevelopment.aegis.otp.OtpInfo;\nimport com.beemdevelopment.aegis.otp.OtpInfoException;\nimport com.beemdevelopment.aegis.otp.SteamInfo;\nimport com.beemdevelopment.aegis.otp.TotpInfo;\nimport com.beemdevelopment.aegis.ui.dialogs.Dialogs;\nimport com.beemdevelopment.aegis.ui.tasks.PBKDFTask;\nimport com.beemdevelopment.aegis.util.PreferenceParser;\nimport com.beemdevelopment.aegis.vault.VaultEntry;\nimport com.google.android.material.dialog.MaterialAlertDialogBuilder;\nimport com.topjohnwu.superuser.io.SuFile;\n\nimport org.bouncycastle.asn1.ASN1Encodable;\nimport org.bouncycastle.asn1.ASN1OctetString;\nimport org.bouncycastle.asn1.ASN1Primitive;\nimport org.bouncycastle.asn1.ASN1Sequence;\nimport org.json.JSONArray;\nimport org.json.JSONException;\nimport org.json.JSONObject;\nimport org.xmlpull.v1.XmlPullParser;\nimport org.xmlpull.v1.XmlPullParserException;\n\nimport java.io.BufferedInputStream;\nimport java.io.DataInputStream;\nimport java.io.IOException;\nimport java.io.InputStream;\nimport java.nio.charset.StandardCharsets;\nimport java.security.InvalidAlgorithmParameterException;\nimport java.security.InvalidKeyException;\nimport java.security.NoSuchAlgorithmException;\nimport java.util.ArrayList;\nimport java.util.HashMap;\nimport java.util.List;\nimport java.util.Locale;\nimport java.util.Map;\n\nimport javax.crypto.BadPaddingException;\nimport javax.crypto.Cipher;\nimport javax.crypto.IllegalBlockSizeException;\nimport javax.crypto.NoSuchPaddingException;\nimport javax.crypto.SecretKey;\nimport javax.crypto.spec.IvParameterSpec;\nimport javax.crypto.spec.SecretKeySpec;\n\npublic class FreeOtpImporter extends DatabaseImporter {\n    private static final String _subPath = \"shared_prefs/tokens.xml\";\n    private static final String _pkgName = \"org.fedorahosted.freeotp\";\n\n    public FreeOtpImporter(Context context) {\n        super(context);\n    }\n\n    @Override\n    protected SuFile getAppPath() throws PackageManager.NameNotFoundException {\n        return getAppPath(_pkgName, _subPath);\n    }\n\n    @Override\n    public State read(InputStream stream, boolean isInternal) throws DatabaseImporterException {\n        try (BufferedInputStream bufInStream = new BufferedInputStream(stream);\n             DataInputStream dataInStream = new DataInputStream(bufInStream)) {\n\n            dataInStream.mark(2);\n            int magic = dataInStream.readUnsignedShort();\n            dataInStream.reset();\n\n            if (magic == SerializedHashMapParser.MAGIC) {\n                return readV2(dataInStream);\n            } else {\n                return readV1(bufInStream);\n            }\n        } catch (IOException e) {\n            throw new DatabaseImporterException(e);\n        }\n    }\n\n    private DecryptedStateV1 readV1(InputStream stream) throws DatabaseImporterException {\n        try {\n            XmlPullParser parser = Xml.newPullParser();\n            parser.setFeature(XmlPullParser.FEATURE_PROCESS_NAMESPACES, false);\n            parser.setInput(stream, null);\n            parser.nextTag();\n\n            List<JSONObject> entries = new ArrayList<>();\n            for (PreferenceParser.XmlEntry entry : PreferenceParser.parse(parser)) {\n                if (!entry.Name.equals(\"tokenOrder\")) {\n                    entries.add(new JSONObject(entry.Value));\n                }\n            }\n            return new DecryptedStateV1(entries);\n        } catch (XmlPullParserException | IOException | JSONException e) {\n            throw new DatabaseImporterException(e);\n        }\n    }\n\n    private EncryptedState readV2(DataInputStream stream) throws DatabaseImporterException {\n        try {\n            Map<String, String> entries = SerializedHashMapParser.parse(stream);\n            JSONObject mkObj = new JSONObject(entries.get(\"masterKey\"));\n            return new EncryptedState(mkObj, entries);\n        } catch (IOException | JSONException | SerializedHashMapParser.ParseException e) {\n            throw new DatabaseImporterException(e);\n        }\n    }\n\n    public static class EncryptedState extends State {\n        private static final int MASTER_KEY_SIZE = 32 * 8;\n\n        private final String _mkAlgo;\n        private final String _mkCipher;\n        private final byte[] _mkCipherText;\n        private final byte[] _mkParameters;\n        private final byte[] _mkToken;\n        private final byte[] _mkSalt;\n        private final int _mkIterations;\n        private final Map<String, String> _entries;\n\n        private EncryptedState(JSONObject mkObj, Map<String, String> entries)\n                throws DatabaseImporterException, JSONException {\n            super(true);\n\n            _mkAlgo = mkObj.getString(\"mAlgorithm\");\n            if (!_mkAlgo.equals(\"PBKDF2withHmacSHA1\") && !_mkAlgo.equals(\"PBKDF2withHmacSHA512\")) {\n                throw new DatabaseImporterException(String.format(\"Unexpected master key KDF: %s\", _mkAlgo));\n            }\n            JSONObject keyObj = mkObj.getJSONObject(\"mEncryptedKey\");\n            _mkCipher = keyObj.getString(\"mCipher\");\n            if (!_mkCipher.equals(\"AES/GCM/NoPadding\")) {\n                throw new DatabaseImporterException(String.format(\"Unexpected master key cipher: %s\", _mkCipher));\n            }\n            _mkCipherText = toBytes(keyObj.getJSONArray(\"mCipherText\"));\n            _mkParameters = toBytes(keyObj.getJSONArray(\"mParameters\"));\n            _mkToken = keyObj.getString(\"mToken\").getBytes(StandardCharsets.UTF_8);\n            _mkSalt = toBytes(mkObj.getJSONArray(\"mSalt\"));\n            _mkIterations = mkObj.getInt(\"mIterations\");\n            _entries = entries;\n        }\n\n        public State decrypt(char[] password) throws DatabaseImporterException {\n            PBKDFTask.Params params = new PBKDFTask.Params(_mkAlgo, MASTER_KEY_SIZE, password, _mkSalt, _mkIterations);\n            SecretKey passKey = PBKDFTask.deriveKey(params);\n            return decrypt(passKey);\n        }\n\n        public State decrypt(SecretKey passKey) throws DatabaseImporterException {\n            byte[] masterKeyBytes;\n            try {\n                byte[] nonce = parseNonce(_mkParameters);\n                IvParameterSpec spec = new IvParameterSpec(nonce);\n                Cipher cipher = Cipher.getInstance(_mkCipher);\n                cipher.init(Cipher.DECRYPT_MODE, passKey, spec);\n                cipher.updateAAD(_mkToken);\n                masterKeyBytes = cipher.doFinal(_mkCipherText);\n            } catch (NoSuchAlgorithmException | NoSuchPaddingException | BadPaddingException |\n                     IllegalBlockSizeException | InvalidKeyException |\n                     InvalidAlgorithmParameterException | IOException e) {\n                throw new DatabaseImporterException(e);\n            }\n\n            SecretKey masterKey = new SecretKeySpec(masterKeyBytes, 0, masterKeyBytes.length, \"AES\");\n            return new DecryptedStateV2(_entries, masterKey);\n        }\n\n        @Override\n        public void decrypt(Context context, DecryptListener listener) {\n            Dialogs.showSecureDialog(new MaterialAlertDialogBuilder(context, R.style.ThemeOverlay_Aegis_AlertDialog_Warning)\n                    .setTitle(R.string.importer_warning_title_freeotp2)\n                    .setMessage(R.string.importer_warning_message_freeotp2)\n                    .setIconAttribute(android.R.attr.alertDialogIcon)\n                    .setCancelable(false)\n                    .setPositiveButton(android.R.string.ok, (dialog, which) -> {\n                        Dialogs.showPasswordInputDialog(context, R.string.enter_password_aegis_title, 0, password -> {\n                            PBKDFTask.Params params = getKeyDerivationParams(password, _mkAlgo);\n                            PBKDFTask task = new PBKDFTask(context, key -> {\n                                try {\n                                    State state = decrypt(key);\n                                    listener.onStateDecrypted(state);\n                                } catch (DatabaseImporterException e) {\n                                    listener.onError(e);\n                                }\n                            });\n                            Lifecycle lifecycle = ContextHelper.getLifecycle(context);\n                            task.execute(lifecycle, params);\n                        }, dialog1 -> listener.onCanceled());\n                    })\n                    .create());\n        }\n\n        private PBKDFTask.Params getKeyDerivationParams(char[] password, String algo) {\n            return new PBKDFTask.Params(algo, MASTER_KEY_SIZE, password, _mkSalt, _mkIterations);\n        }\n    }\n\n    public static class DecryptedStateV2 extends DatabaseImporter.State {\n        private final Map<String, String> _entries;\n        private final SecretKey _masterKey;\n\n        public DecryptedStateV2(Map<String, String> entries, SecretKey masterKey) {\n            super(false);\n            _entries = entries;\n            _masterKey = masterKey;\n        }\n\n        @Override\n        public Result convert() throws DatabaseImporterException {\n            Result result = new Result();\n\n            for (Map.Entry<String, String> entry : _entries.entrySet()) {\n                if (entry.getKey().endsWith(\"-token\") || entry.getKey().equals(\"masterKey\")) {\n                    continue;\n                }\n\n                try {\n                    JSONObject encObj = new JSONObject(entry.getValue());\n                    String tokenKey = String.format(\"%s-token\", entry.getKey());\n                    JSONObject tokenObj = new JSONObject(_entries.get(tokenKey));\n\n                    VaultEntry vaultEntry = convertEntry(encObj, tokenObj);\n                    result.addEntry(vaultEntry);\n                } catch (DatabaseImporterEntryException e) {\n                    result.addError(e);\n                } catch (JSONException ignored) {\n                }\n            }\n\n            return result;\n        }\n\n        private VaultEntry convertEntry(JSONObject encObj, JSONObject tokenObj)\n                throws DatabaseImporterEntryException {\n            try {\n                JSONObject keyObj = new JSONObject(encObj.getString(\"key\"));\n                String cipherName = keyObj.getString(\"mCipher\");\n                if (!cipherName.equals(\"AES/GCM/NoPadding\")) {\n                    throw new DatabaseImporterException(String.format(\"Unexpected cipher: %s\", cipherName));\n                }\n                byte[] cipherText = toBytes(keyObj.getJSONArray(\"mCipherText\"));\n                byte[] parameters = toBytes(keyObj.getJSONArray(\"mParameters\"));\n                byte[] token = keyObj.getString(\"mToken\").getBytes(StandardCharsets.UTF_8);\n\n                byte[] nonce = parseNonce(parameters);\n                IvParameterSpec spec = new IvParameterSpec(nonce);\n                Cipher cipher = Cipher.getInstance(cipherName);\n                cipher.init(Cipher.DECRYPT_MODE, _masterKey, spec);\n                cipher.updateAAD(token);\n                byte[] secretBytes = cipher.doFinal(cipherText);\n\n                JSONArray secretArray = new JSONArray();\n                for (byte b : secretBytes) {\n                    secretArray.put(b);\n                }\n                tokenObj.put(\"secret\", secretArray);\n\n                return DecryptedStateV1.convertEntry(tokenObj);\n            } catch (DatabaseImporterException | JSONException | NoSuchAlgorithmException |\n                     NoSuchPaddingException | InvalidAlgorithmParameterException |\n                     InvalidKeyException | BadPaddingException | IllegalBlockSizeException |\n                     IOException e) {\n                throw new DatabaseImporterEntryException(e, tokenObj.toString());\n            }\n        }\n    }\n\n    public static class DecryptedStateV1 extends DatabaseImporter.State {\n        private final List<JSONObject> _entries;\n\n        public DecryptedStateV1(List<JSONObject> entries) {\n            super(false);\n            _entries = entries;\n        }\n\n        @Override\n        public Result convert() {\n            Result result = new Result();\n\n            for (JSONObject obj : _entries) {\n                try {\n                    VaultEntry entry = convertEntry(obj);\n                    result.addEntry(entry);\n                } catch (DatabaseImporterEntryException e) {\n                    result.addError(e);\n                }\n            }\n\n            return result;\n        }\n\n        private static VaultEntry convertEntry(JSONObject obj) throws DatabaseImporterEntryException {\n            try {\n                String type = obj.getString(\"type\").toLowerCase(Locale.ROOT);\n                String algo = obj.optString(\"algo\", OtpInfo.DEFAULT_ALGORITHM);\n                int digits = obj.optInt(\"digits\", OtpInfo.DEFAULT_DIGITS);\n                byte[] secret = toBytes(obj.getJSONArray(\"secret\"));\n\n                String issuer = obj.getString(\"issuerExt\");\n                String name = obj.optString(\"label\");\n\n                OtpInfo info;\n                switch (type) {\n                    case \"totp\":\n                        int period = obj.optInt(\"period\", TotpInfo.DEFAULT_PERIOD);\n                        if (issuer.equals(\"Steam\")) {\n                            info = new SteamInfo(secret, algo, digits, period);\n                        } else {\n                            info = new TotpInfo(secret, algo, digits, period);\n                        }\n                        break;\n                    case \"hotp\":\n                        info = new HotpInfo(secret, algo, digits, obj.getLong(\"counter\"));\n                        break;\n                    default:\n                        throw new DatabaseImporterException(\"unsupported otp type: \" + type);\n                }\n\n                return new VaultEntry(info, name, issuer);\n            } catch (DatabaseImporterException | OtpInfoException | JSONException e) {\n                throw new DatabaseImporterEntryException(e, obj.toString());\n            }\n        }\n    }\n\n    private static byte[] parseNonce(byte[] parameters) throws IOException {\n        ASN1Primitive prim = ASN1Sequence.fromByteArray(parameters);\n        if (prim instanceof ASN1OctetString) {\n            return ((ASN1OctetString) prim).getOctets();\n        }\n\n        if (prim instanceof ASN1Sequence) {\n            for (ASN1Encodable enc : (ASN1Sequence) prim) {\n                if (enc instanceof ASN1OctetString) {\n                    return ((ASN1OctetString) enc).getOctets();\n                }\n            }\n        }\n\n        throw new IOException(\"Unable to find nonce in parameters\");\n    }\n\n    private static byte[] toBytes(JSONArray array) throws JSONException {\n        byte[] bytes = new byte[array.length()];\n        for (int i = 0; i < array.length(); i++) {\n            bytes[i] = (byte)array.getInt(i);\n        }\n        return bytes;\n    }\n    private static class SerializedHashMapParser {\n        private static final int MAGIC = 0xaced;\n        private static final int VERSION = 5;\n        private static final long SERIAL_VERSION_UID = 362498820763181265L;\n\n        private static final byte TC_NULL = 0x70;\n        private static final byte TC_CLASSDESC = 0x72;\n        private static final byte TC_OBJECT = 0x73;\n        private static final byte TC_STRING = 0x74;\n\n        private SerializedHashMapParser() {\n\n        }\n\n        public static Map<String, String> parse(DataInputStream inStream)\n                throws IOException, ParseException {\n            Map<String, String> map = new HashMap<>();\n\n            // Read/validate the magic number and version\n            int magic = inStream.readUnsignedShort();\n            int version = inStream.readUnsignedShort();\n            if (magic != MAGIC || version != VERSION) {\n                throw new ParseException(\"Not a serialized Java Object\");\n            }\n\n            // Read the class descriptor info for HashMap\n            byte b = inStream.readByte();\n            if (b != TC_OBJECT) {\n                throw new ParseException(\"Expected an object, found: \" + b);\n            }\n            b = inStream.readByte();\n            if (b != TC_CLASSDESC) {\n                throw new ParseException(\"Expected a class desc, found: \" + b);\n            }\n            parseClassDescriptor(inStream);\n\n            // Not interested in the capacity of the map\n            inStream.readInt();\n            // Read the number of elements in the HashMap\n            int size = inStream.readInt();\n\n            // Parse each key-value pair in the map\n            for (int i = 0; i < size; i++) {\n                String key = parseStringObject(inStream);\n                String value = parseStringObject(inStream);\n                map.put(key, value);\n            }\n\n            return map;\n        }\n\n        private static void parseClassDescriptor(DataInputStream inputStream)\n                throws IOException, ParseException {\n            // Check whether we're dealing with a HashMap and a version we support\n            String className = parseUTF(inputStream);\n            if (!className.equals(HashMap.class.getName())) {\n                throw new ParseException(String.format(\"Unexpected class name: %s\", className));\n            }\n            long serialVersionUID = inputStream.readLong();\n            if (serialVersionUID != SERIAL_VERSION_UID) {\n                throw new ParseException(String.format(\"Unexpected serial version UID: %d\", serialVersionUID));\n            }\n\n            // Read past all of the fields in the class\n            byte fieldDescriptor = inputStream.readByte();\n            if (fieldDescriptor == TC_NULL) {\n                return;\n            }\n            int totalFieldSkip = 0;\n            int fieldCount = inputStream.readUnsignedShort();\n            for (int i = 0; i < fieldCount; i++) {\n                char fieldType = (char) inputStream.readByte();\n                parseUTF(inputStream);\n                switch (fieldType) {\n                    case 'F': // float (4 bytes)\n                    case 'I': // int (4 bytes)\n                        totalFieldSkip += 4;\n                        break;\n                    default:\n                        throw new ParseException(String.format(\"Unexpected field type: %s\", fieldType));\n                }\n            }\n            inputStream.skipBytes(totalFieldSkip);\n\n            // Not sure what these bytes are, just skip them\n            inputStream.skipBytes(4);\n        }\n\n        private static String parseStringObject(DataInputStream inputStream)\n                throws IOException, ParseException {\n            byte objectType = inputStream.readByte();\n            if (objectType != TC_STRING) {\n                throw new ParseException(String.format(\"Expected a string object, found: %d\", objectType));\n            }\n\n            int length = inputStream.readUnsignedShort();\n            byte[] strBytes = new byte[length];\n            inputStream.readFully(strBytes);\n\n            return new String(strBytes, StandardCharsets.UTF_8);\n        }\n\n        private static String parseUTF(DataInputStream inputStream) throws IOException {\n            int length = inputStream.readUnsignedShort();\n            byte[] strBytes = new byte[length];\n            inputStream.readFully(strBytes);\n            return new String(strBytes, StandardCharsets.UTF_8);\n        }\n\n        private static class ParseException extends Exception {\n            public ParseException(String message) {\n                super(message);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/importers/FreeOtpPlusImporter.java",
    "content": "package com.beemdevelopment.aegis.importers;\n\nimport android.content.Context;\nimport android.content.pm.PackageManager;\n\nimport com.beemdevelopment.aegis.util.IOUtils;\nimport com.topjohnwu.superuser.io.SuFile;\n\nimport org.json.JSONArray;\nimport org.json.JSONException;\nimport org.json.JSONObject;\n\nimport java.io.IOException;\nimport java.io.InputStream;\nimport java.nio.charset.StandardCharsets;\nimport java.util.ArrayList;\nimport java.util.List;\n\npublic class FreeOtpPlusImporter extends DatabaseImporter {\n    private static final String _subPath = \"shared_prefs/tokens.xml\";\n    private static final String _pkgName = \"org.liberty.android.freeotpplus\";\n\n    public FreeOtpPlusImporter(Context context) {\n        super(context);\n    }\n\n    @Override\n    protected SuFile getAppPath() throws PackageManager.NameNotFoundException {\n        return getAppPath(_pkgName, _subPath);\n    }\n\n    @Override\n    public State read(InputStream stream, boolean isInternal) throws DatabaseImporterException {\n        State state;\n\n        if (isInternal) {\n            state = new FreeOtpImporter(requireContext()).read(stream);\n        } else {\n            try {\n                String json = new String(IOUtils.readAll(stream), StandardCharsets.UTF_8);\n                JSONObject obj = new JSONObject(json);\n                JSONArray array = obj.getJSONArray(\"tokens\");\n\n                List<JSONObject> entries = new ArrayList<>();\n                for (int i = 0; i < array.length(); i++) {\n                    entries.add(array.getJSONObject(i));\n                }\n\n                state = new FreeOtpImporter.DecryptedStateV1(entries);\n            } catch (IOException | JSONException e) {\n                throw new DatabaseImporterException(e);\n            }\n        }\n\n        return state;\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/importers/GoogleAuthImporter.java",
    "content": "package com.beemdevelopment.aegis.importers;\n\nimport android.content.Context;\nimport android.content.pm.PackageInfo;\nimport android.content.pm.PackageManager;\nimport android.database.Cursor;\n\nimport com.beemdevelopment.aegis.R;\nimport com.beemdevelopment.aegis.encoding.EncodingException;\nimport com.beemdevelopment.aegis.otp.GoogleAuthInfo;\nimport com.beemdevelopment.aegis.otp.HotpInfo;\nimport com.beemdevelopment.aegis.otp.OtpInfo;\nimport com.beemdevelopment.aegis.otp.OtpInfoException;\nimport com.beemdevelopment.aegis.otp.TotpInfo;\nimport com.beemdevelopment.aegis.vault.VaultEntry;\nimport com.topjohnwu.superuser.Shell;\nimport com.topjohnwu.superuser.io.SuFile;\n\nimport java.io.InputStream;\nimport java.util.List;\n\npublic class GoogleAuthImporter extends DatabaseImporter {\n    private static final int TYPE_TOTP = 0;\n    private static final int TYPE_HOTP = 1;\n\n    private static final String _subPath = \"databases/databases\";\n    private static final String _pkgName = \"com.google.android.apps.authenticator2\";\n\n    public GoogleAuthImporter(Context context) {\n        super(context);\n    }\n\n    @Override\n    protected SuFile getAppPath() throws PackageManager.NameNotFoundException {\n        SuFile file = getAppPath(_pkgName, _subPath);\n        return file;\n    }\n\n    @Override\n    public boolean isInstalledAppVersionSupported() {\n        PackageInfo info;\n        try {\n            info = requireContext().getPackageManager().getPackageInfo(_pkgName, 0);\n        } catch (PackageManager.NameNotFoundException e) {\n            return false;\n        }\n\n        return info.versionCode <= 5000100;\n    }\n\n    @Override\n    public State read(InputStream stream, boolean isInternal) throws DatabaseImporterException {\n        final Context context = requireContext();\n        SqlImporterHelper helper = new SqlImporterHelper(context);\n        List<Entry> entries = helper.read(Entry.class, stream, \"accounts\");\n        return new State(entries, context);\n    }\n\n    @Override\n    public DatabaseImporter.State readFromApp(Shell shell) throws PackageManager.NameNotFoundException, DatabaseImporterException {\n        SuFile path = getAppPath();\n        path.setShell(shell);\n\n        final Context context = requireContext();\n        SqlImporterHelper helper = new SqlImporterHelper(context);\n        List<Entry> entries = helper.read(Entry.class, path, \"accounts\");\n        return new State(entries, context);\n    }\n\n    public static class State extends DatabaseImporter.State {\n        private List<Entry> _entries;\n        private Context _context;\n\n        private State(List<Entry> entries, Context context) {\n            super(false);\n            _entries = entries;\n            _context = context;\n        }\n\n        @Override\n        public Result convert() {\n            Result result = new Result();\n\n            for (Entry sqlEntry : _entries) {\n                try {\n                    VaultEntry entry = convertEntry(sqlEntry, _context);\n                    result.addEntry(entry);\n                } catch (DatabaseImporterEntryException e) {\n                    result.addError(e);\n                }\n            }\n\n            return result;\n        }\n\n        private static VaultEntry convertEntry(Entry entry, Context context) throws DatabaseImporterEntryException {\n            try {\n                if (entry.isEncrypted()) {\n                    throw new DatabaseImporterException(context.getString(R.string.importer_encrypted_exception_google_authenticator, entry.getEmail()));\n                }\n                byte[] secret = GoogleAuthInfo.parseSecret(entry.getSecret());\n\n                OtpInfo info;\n                switch (entry.getType()) {\n                    case TYPE_TOTP:\n                        info = new TotpInfo(secret);\n                        break;\n                    case TYPE_HOTP:\n                        info = new HotpInfo(secret, entry.getCounter());\n                        break;\n                    default:\n                        throw new DatabaseImporterException(\"unsupported otp type: \" + entry.getType());\n                }\n\n                String name = entry.getEmail();\n                String[] parts = name.split(\":\");\n                if (parts.length == 2) {\n                    name = parts[1];\n                }\n\n                return new VaultEntry(info, name, entry.getIssuer());\n            } catch (EncodingException | OtpInfoException | DatabaseImporterException e) {\n                throw new DatabaseImporterEntryException(e, entry.toString());\n            }\n        }\n    }\n\n    private static class Entry extends SqlImporterHelper.Entry {\n        private int _type;\n        private boolean _isEncrypted;\n        private String _secret;\n        private String _email;\n        private String _issuer;\n        private long _counter;\n\n        public Entry(Cursor cursor) {\n            super(cursor);\n            _type = SqlImporterHelper.getInt(cursor, \"type\");\n            _secret = SqlImporterHelper.getString(cursor, \"secret\");\n            _email = SqlImporterHelper.getString(cursor, \"email\", \"\");\n            _issuer = SqlImporterHelper.getString(cursor, \"issuer\", \"\");\n            _counter = SqlImporterHelper.getLong(cursor, \"counter\");\n            _isEncrypted = (cursor.getColumnIndex(\"isencrypted\") != -1 && SqlImporterHelper.getInt(cursor, \"isencrypted\") > 0);\n        }\n\n\n        public int getType() {\n            return _type;\n        }\n\n        public boolean isEncrypted() {\n            return _isEncrypted;\n        }\n\n        public String getSecret() {\n            return _secret;\n        }\n\n        public String getEmail() {\n            return _email;\n        }\n\n        public String getIssuer() {\n            return _issuer;\n        }\n\n        public long getCounter() {\n            return _counter;\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/importers/GoogleAuthUriImporter.java",
    "content": "package com.beemdevelopment.aegis.importers;\n\nimport android.content.Context;\n\nimport com.beemdevelopment.aegis.otp.GoogleAuthInfo;\nimport com.beemdevelopment.aegis.otp.GoogleAuthInfoException;\nimport com.beemdevelopment.aegis.vault.VaultEntry;\nimport com.topjohnwu.superuser.io.SuFile;\n\nimport java.io.BufferedReader;\nimport java.io.IOException;\nimport java.io.InputStream;\nimport java.io.InputStreamReader;\nimport java.util.ArrayList;\n\npublic class GoogleAuthUriImporter extends DatabaseImporter {\n    public GoogleAuthUriImporter(Context context) {\n        super(context);\n    }\n\n    @Override\n    protected SuFile getAppPath() {\n        throw new UnsupportedOperationException();\n    }\n\n    @Override\n    public GoogleAuthUriImporter.State read(InputStream stream, boolean isInternal) throws DatabaseImporterException {\n        ArrayList<String> lines = new ArrayList<>();\n\n        try (InputStreamReader streamReader = new InputStreamReader(stream);\n             BufferedReader bufferedReader = new BufferedReader(streamReader)) {\n            String line;\n            while ((line = bufferedReader.readLine()) != null) {\n                if (!line.isEmpty()) {\n                    lines.add(line);\n                }\n            }\n        } catch (IOException e) {\n            throw new DatabaseImporterException(e);\n        }\n\n        return new GoogleAuthUriImporter.State(lines);\n    }\n\n    public static class State extends DatabaseImporter.State {\n        private ArrayList<String> _lines;\n\n        private State(ArrayList<String> lines) {\n            super(false);\n            _lines = lines;\n        }\n\n        @Override\n        public DatabaseImporter.Result convert() {\n            DatabaseImporter.Result result = new DatabaseImporter.Result();\n\n            for (String line : _lines) {\n                try {\n                    VaultEntry entry = convertEntry(line);\n                    result.addEntry(entry);\n                } catch (DatabaseImporterEntryException e) {\n                    result.addError(e);\n                }\n            }\n\n            return result;\n        }\n\n        private static VaultEntry convertEntry(String line) throws DatabaseImporterEntryException {\n            try {\n                GoogleAuthInfo info = GoogleAuthInfo.parseUri(line);\n                return new VaultEntry(info);\n            } catch (GoogleAuthInfoException e) {\n                throw new DatabaseImporterEntryException(e, line);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/importers/MicrosoftAuthImporter.java",
    "content": "package com.beemdevelopment.aegis.importers;\n\nimport android.content.Context;\nimport android.content.pm.PackageManager;\nimport android.database.Cursor;\n\nimport com.beemdevelopment.aegis.encoding.Base64;\nimport com.beemdevelopment.aegis.encoding.EncodingException;\nimport com.beemdevelopment.aegis.otp.GoogleAuthInfo;\nimport com.beemdevelopment.aegis.otp.OtpInfo;\nimport com.beemdevelopment.aegis.otp.OtpInfoException;\nimport com.beemdevelopment.aegis.otp.TotpInfo;\nimport com.beemdevelopment.aegis.vault.VaultEntry;\nimport com.topjohnwu.superuser.Shell;\nimport com.topjohnwu.superuser.io.SuFile;\n\nimport java.io.InputStream;\nimport java.util.List;\n\npublic class MicrosoftAuthImporter extends DatabaseImporter {\n    private static final String _subPath = \"databases/PhoneFactor\";\n    private static final String _pkgName = \"com.azure.authenticator\";\n\n    private static final int TYPE_TOTP = 0;\n    private static final int TYPE_MICROSOFT = 1;\n\n    public MicrosoftAuthImporter(Context context) {\n        super(context);\n    }\n\n    @Override\n    protected SuFile getAppPath() throws PackageManager.NameNotFoundException {\n        return getAppPath(_pkgName, _subPath);\n    }\n\n    @Override\n    public State read(InputStream stream, boolean isInternal) throws DatabaseImporterException {\n        SqlImporterHelper helper = new SqlImporterHelper(requireContext());\n        List<Entry> entries = helper.read(Entry.class, stream, \"accounts\");\n        return new State(entries);\n    }\n\n    @Override\n    public DatabaseImporter.State readFromApp(Shell shell) throws PackageManager.NameNotFoundException, DatabaseImporterException {\n        SuFile path = getAppPath();\n        path.setShell(shell);\n\n        SqlImporterHelper helper = new SqlImporterHelper(requireContext());\n        List<Entry> entries = helper.read(Entry.class, path, \"accounts\");\n        return new State(entries);\n    }\n\n    public static class State extends DatabaseImporter.State {\n        private List<Entry> _entries;\n\n        private State(List<Entry> entries) {\n            super(false);\n            _entries = entries;\n        }\n\n        @Override\n        public Result convert() {\n            Result result = new Result();\n\n            for (Entry sqlEntry : _entries) {\n                try {\n                    int type = sqlEntry.getType();\n                    if (type == TYPE_TOTP || type == TYPE_MICROSOFT) {\n                        VaultEntry entry = convertEntry(sqlEntry);\n                        result.addEntry(entry);\n                    }\n                } catch (DatabaseImporterEntryException e) {\n                    result.addError(e);\n                }\n            }\n\n            return result;\n        }\n\n        private static VaultEntry convertEntry(Entry entry) throws DatabaseImporterEntryException {\n            try {\n                byte[] secret;\n                int digits = 6;\n\n                switch (entry.getType()) {\n                    case TYPE_TOTP:\n                        secret = GoogleAuthInfo.parseSecret(entry.getSecret());\n                        break;\n                    case TYPE_MICROSOFT:\n                        digits = 8;\n                        secret = Base64.decode(entry.getSecret());\n                        break;\n                    default:\n                        throw new DatabaseImporterEntryException(String.format(\"Unsupported OTP type: %d\", entry.getType()), entry.toString());\n                }\n\n                OtpInfo info = new TotpInfo(secret, OtpInfo.DEFAULT_ALGORITHM, digits, TotpInfo.DEFAULT_PERIOD);\n                return new VaultEntry(info, entry.getUserName(), entry.getIssuer());\n            } catch (EncodingException | OtpInfoException e) {\n                throw new DatabaseImporterEntryException(e, entry.toString());\n            }\n        }\n    }\n\n    private static class Entry extends SqlImporterHelper.Entry {\n        private int _type;\n        private String _secret;\n        private String _issuer;\n        private String _userName;\n\n        public Entry(Cursor cursor) {\n            super(cursor);\n            _type = SqlImporterHelper.getInt(cursor, \"account_type\");\n            _secret = SqlImporterHelper.getString(cursor, \"oath_secret_key\");\n            _issuer = SqlImporterHelper.getString(cursor, \"name\");\n            _userName = SqlImporterHelper.getString(cursor, \"username\");\n        }\n\n        public int getType() {\n            return _type;\n        }\n\n        public String getSecret() {\n            return _secret;\n        }\n\n        public String getIssuer() {\n            return _issuer;\n        }\n\n        public String getUserName() {\n            return _userName;\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/importers/ProtonAuthenticatorImporter.java",
    "content": "package com.beemdevelopment.aegis.importers;\n\nimport static java.nio.charset.StandardCharsets.UTF_8;\n\nimport android.content.Context;\nimport android.net.Uri;\n\nimport androidx.annotation.NonNull;\n\nimport com.beemdevelopment.aegis.otp.GoogleAuthInfo;\nimport com.beemdevelopment.aegis.otp.GoogleAuthInfoException;\nimport com.beemdevelopment.aegis.otp.OtpInfo;\nimport com.beemdevelopment.aegis.util.IOUtils;\nimport com.beemdevelopment.aegis.vault.VaultEntry;\nimport com.topjohnwu.superuser.io.SuFile;\n\nimport org.json.JSONArray;\nimport org.json.JSONException;\nimport org.json.JSONObject;\n\nimport java.io.IOException;\nimport java.io.InputStream;\n\npublic class ProtonAuthenticatorImporter extends DatabaseImporter {\n\n    public ProtonAuthenticatorImporter(Context context) {\n        super(context);\n    }\n\n    @Override\n    protected SuFile getAppPath() {\n        throw new UnsupportedOperationException();\n    }\n\n    @Override\n    protected @NonNull State read(@NonNull InputStream stream, boolean isInternal) throws DatabaseImporterException {\n        try {\n            String contents = new String(IOUtils.readAll(stream), UTF_8);\n            JSONObject json = new JSONObject(contents);\n\n            return new DecryptedState(json);\n        } catch (JSONException | IOException e) {\n            throw new DatabaseImporterException(e);\n        }\n    }\n\n    public static class DecryptedState extends DatabaseImporter.State {\n        private final JSONObject _json;\n\n        public DecryptedState(@NonNull JSONObject json) {\n            super(false);\n            _json = json;\n        }\n\n        @Override\n        public @NonNull Result convert() throws DatabaseImporterException {\n            Result result = new Result();\n\n            try {\n                JSONArray entries = _json.getJSONArray(\"entries\");\n                for (int i = 0; i < entries.length(); i++) {\n                    JSONObject entry = entries.getJSONObject(i);\n                    try {\n                        result.addEntry(convertEntry(entry));\n                    } catch (DatabaseImporterEntryException e) {\n                        result.addError(e);\n                    }\n                }\n            } catch (JSONException e) {\n                throw new DatabaseImporterException(e);\n            }\n\n            return result;\n        }\n\n        private static @NonNull VaultEntry convertEntry(@NonNull JSONObject entry) throws DatabaseImporterEntryException {\n            try {\n                JSONObject content = entry.getJSONObject(\"content\");\n                String name = content.getString(\"name\");\n                String uriString = content.getString(\"uri\");\n\n                Uri uri = Uri.parse(uriString);\n                try {\n                    GoogleAuthInfo info = GoogleAuthInfo.parseUri(uri);\n                    OtpInfo otp = info.getOtpInfo();\n\n                    return new VaultEntry(otp, name, info.getIssuer());\n                } catch (GoogleAuthInfoException e) {\n                    throw new DatabaseImporterEntryException(e, uriString);\n                }\n            } catch (JSONException e) {\n                throw new DatabaseImporterEntryException(e, entry.toString());\n            }\n        }\n    }\n}"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/importers/SqlImporterHelper.java",
    "content": "package com.beemdevelopment.aegis.importers;\n\nimport static android.database.sqlite.SQLiteDatabase.OPEN_READONLY;\n\nimport android.annotation.SuppressLint;\nimport android.content.Context;\nimport android.database.Cursor;\nimport android.database.sqlite.SQLiteDatabase;\nimport android.database.sqlite.SQLiteException;\n\nimport com.beemdevelopment.aegis.util.IOUtils;\nimport com.google.common.io.Files;\nimport com.topjohnwu.superuser.io.SuFile;\nimport com.topjohnwu.superuser.io.SuFileInputStream;\n\nimport java.io.File;\nimport java.io.FileOutputStream;\nimport java.io.IOException;\nimport java.io.InputStream;\nimport java.lang.reflect.InvocationTargetException;\nimport java.util.ArrayList;\nimport java.util.List;\n\npublic class SqlImporterHelper {\n    private Context _context;\n\n    public SqlImporterHelper(Context context) {\n        _context = context;\n    }\n\n    public <T extends Entry> List<T> read(Class<T> type, SuFile path, String table) throws DatabaseImporterException {\n        File dir = Files.createTempDir();\n        File mainFile = new File(dir, path.getName());\n\n        List<File> fileCopies = new ArrayList<>();\n        for (SuFile file : SqlImporterHelper.findDatabaseFiles(path)) {\n            // create temporary copies of the database files so that SQLiteDatabase can open them\n            File fileCopy = null;\n            try (InputStream inStream = SuFileInputStream.open(file)) {\n                fileCopy = new File(dir, file.getName());\n                try (FileOutputStream out = new FileOutputStream(fileCopy)) {\n                    IOUtils.copy(inStream, out);\n                }\n                fileCopies.add(fileCopy);\n            } catch (IOException e) {\n                if (fileCopy != null) {\n                    fileCopy.delete();\n                }\n\n                for (File fileCopy2 : fileCopies) {\n                    fileCopy2.delete();\n                }\n\n                throw new DatabaseImporterException(e);\n            }\n        }\n\n        try {\n            return read(type, mainFile, table);\n        } finally {\n            for (File fileCopy : fileCopies) {\n                fileCopy.delete();\n            }\n        }\n    }\n\n    private static SuFile[] findDatabaseFiles(SuFile path) throws DatabaseImporterException {\n        SuFile[] files = path.getParentFile().listFiles((d, name) -> name.startsWith(path.getName()));\n        if (files == null || files.length == 0) {\n            throw new DatabaseImporterException(String.format(\"File does not exist: %s\", path.getAbsolutePath()));\n        }\n\n        return files;\n    }\n\n    public <T extends Entry> List<T> read(Class<T> type, InputStream inStream, String table) throws DatabaseImporterException {\n        File file = null;\n        try {\n            // create a temporary copy of the database so that SQLiteDatabase can open it\n            file = File.createTempFile(\"db-import-\", \"\", _context.getCacheDir());\n            try (FileOutputStream out = new FileOutputStream(file)) {\n                IOUtils.copy(inStream, out);\n            }\n        } catch (IOException e) {\n            if (file != null) {\n                file.delete();\n            }\n            throw new DatabaseImporterException(e);\n        }\n\n        try {\n            return read(type, file, table);\n        } finally {\n            // always delete the temporary file\n            file.delete();\n        }\n    }\n\n    private <T extends Entry> List<T> read(Class<T> type, File file, String table) throws DatabaseImporterException {\n        try (SQLiteDatabase db = SQLiteDatabase.openDatabase(file.getAbsolutePath(), null, OPEN_READONLY)) {\n            try (Cursor cursor = db.rawQuery(String.format(\"SELECT * FROM %s\", table), null)) {\n                List<T> entries = new ArrayList<>();\n\n                if (cursor.moveToFirst()) {\n                    do {\n                        T entry = type.getDeclaredConstructor(Cursor.class).newInstance(cursor);\n                        entries.add(entry);\n                    } while (cursor.moveToNext());\n                }\n\n                return entries;\n            } catch (InstantiationException | IllegalAccessException\n                    | NoSuchMethodException | InvocationTargetException e) {\n                throw new RuntimeException(e);\n            }\n        } catch (SQLiteException e) {\n            throw new DatabaseImporterException(e);\n        }\n    }\n\n    @SuppressLint(\"Range\")\n    public static String getString(Cursor cursor, String columnName) {\n        return cursor.getString(cursor.getColumnIndex(columnName));\n    }\n\n    @SuppressLint(\"Range\")\n    public static String getString(Cursor cursor, String columnName, String def) {\n        String res = cursor.getString(cursor.getColumnIndex(columnName));\n        if (res == null) {\n            return def;\n        }\n        return res;\n    }\n\n    @SuppressLint(\"Range\")\n    public static int getInt(Cursor cursor, String columnName) {\n        return cursor.getInt(cursor.getColumnIndex(columnName));\n    }\n\n    @SuppressLint(\"Range\")\n    public static long getLong(Cursor cursor, String columnName) {\n        return cursor.getLong(cursor.getColumnIndex(columnName));\n    }\n\n    public static abstract class Entry {\n        public Entry(Cursor cursor) {\n\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/importers/SteamImporter.java",
    "content": "package com.beemdevelopment.aegis.importers;\n\nimport android.content.Context;\nimport android.content.pm.PackageInfo;\nimport android.content.pm.PackageManager;\n\nimport com.beemdevelopment.aegis.encoding.Base64;\nimport com.beemdevelopment.aegis.encoding.EncodingException;\nimport com.beemdevelopment.aegis.otp.OtpInfoException;\nimport com.beemdevelopment.aegis.otp.SteamInfo;\nimport com.beemdevelopment.aegis.util.IOUtils;\nimport com.beemdevelopment.aegis.vault.VaultEntry;\nimport com.topjohnwu.superuser.io.SuFile;\n\nimport org.json.JSONException;\nimport org.json.JSONObject;\n\nimport java.io.IOException;\nimport java.io.InputStream;\nimport java.nio.charset.StandardCharsets;\nimport java.sql.Array;\nimport java.util.ArrayList;\nimport java.util.Iterator;\nimport java.util.List;\n\npublic class SteamImporter extends DatabaseImporter {\n    private static final String _subDir = \"files\";\n    private static final String _pkgName = \"com.valvesoftware.android.steam.community\";\n\n    public SteamImporter(Context context) {\n        super(context);\n    }\n\n    @Override\n    protected SuFile getAppPath() throws DatabaseImporterException, PackageManager.NameNotFoundException {\n        // NOTE: this assumes that a global root shell has already been obtained by the caller\n        SuFile path = getAppPath(_pkgName, _subDir);\n        SuFile[] files = path.listFiles((d, name) -> name.startsWith(\"Steamguard-\"));\n        if (files == null || files.length == 0) {\n            throw new DatabaseImporterException(String.format(\"Empty directory: %s\", path.getAbsolutePath()));\n        }\n\n        // TODO: handle multiple files (can this even occur?)\n        return files[0];\n    }\n\n    @Override\n    public boolean isInstalledAppVersionSupported() {\n        PackageInfo info;\n        try {\n            info = requireContext().getPackageManager().getPackageInfo(_pkgName, 0);\n        } catch (PackageManager.NameNotFoundException e) {\n            return false;\n        }\n\n        return info.versionCode < 7460894;\n    }\n\n    @Override\n    public State read(InputStream stream, boolean isInternal) throws DatabaseImporterException {\n        try {\n            byte[] bytes = IOUtils.readAll(stream);\n            JSONObject obj = new JSONObject(new String(bytes, StandardCharsets.UTF_8));\n\n            List<JSONObject> objs = new ArrayList<>();\n            if (obj.has(\"accounts\")) {\n                JSONObject accounts = obj.getJSONObject(\"accounts\");\n                Iterator<String> keys = accounts.keys();\n                while (keys.hasNext()) {\n                    String key = keys.next();\n                    objs.add(accounts.getJSONObject(key));\n                }\n            } else {\n                objs.add(obj);\n            }\n            return new State(objs);\n        } catch (IOException | JSONException e) {\n            throw new DatabaseImporterException(e);\n        }\n    }\n\n    public static class State extends DatabaseImporter.State {\n        private final List<JSONObject> _objs;\n\n        private State(List<JSONObject> objs) {\n            super(false);\n            _objs = objs;\n        }\n\n        @Override\n        public Result convert() {\n            Result result = new Result();\n\n            for (JSONObject obj : _objs) {\n                try {\n                    VaultEntry entry = convertEntry(obj);\n                    result.addEntry(entry);\n                } catch (DatabaseImporterEntryException e) {\n                    result.addError(e);\n                }\n            }\n\n            return result;\n        }\n\n        private static VaultEntry convertEntry(JSONObject obj) throws DatabaseImporterEntryException {\n            try {\n                byte[] secret = Base64.decode(obj.getString(\"shared_secret\"));\n                SteamInfo info = new SteamInfo(secret);\n\n                String account = obj.getString(\"account_name\");\n                return new VaultEntry(info, account, \"Steam\");\n            } catch (JSONException | EncodingException | OtpInfoException e) {\n                throw new DatabaseImporterEntryException(e, obj.toString());\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/importers/StratumImporter.java",
    "content": "package com.beemdevelopment.aegis.importers;\n\nimport android.content.Context;\nimport android.content.pm.PackageManager;\nimport android.database.Cursor;\n\nimport androidx.lifecycle.Lifecycle;\n\nimport com.beemdevelopment.aegis.R;\nimport com.beemdevelopment.aegis.encoding.Base32;\nimport com.beemdevelopment.aegis.encoding.EncodingException;\nimport com.beemdevelopment.aegis.helpers.ContextHelper;\nimport com.beemdevelopment.aegis.otp.HotpInfo;\nimport com.beemdevelopment.aegis.otp.OtpInfo;\nimport com.beemdevelopment.aegis.otp.OtpInfoException;\nimport com.beemdevelopment.aegis.otp.SteamInfo;\nimport com.beemdevelopment.aegis.otp.TotpInfo;\nimport com.beemdevelopment.aegis.ui.dialogs.Dialogs;\nimport com.beemdevelopment.aegis.ui.tasks.Argon2Task;\nimport com.beemdevelopment.aegis.ui.tasks.PBKDFTask;\nimport com.beemdevelopment.aegis.util.IOUtils;\nimport com.beemdevelopment.aegis.vault.VaultEntry;\nimport com.topjohnwu.superuser.io.SuFile;\n\nimport org.bouncycastle.crypto.params.Argon2Parameters;\nimport org.json.JSONArray;\nimport org.json.JSONException;\nimport org.json.JSONObject;\n\nimport java.io.ByteArrayInputStream;\nimport java.io.DataInputStream;\nimport java.io.IOException;\nimport java.io.InputStream;\nimport java.io.UTFDataFormatException;\nimport java.nio.charset.StandardCharsets;\nimport java.security.InvalidAlgorithmParameterException;\nimport java.security.InvalidKeyException;\nimport java.security.NoSuchAlgorithmException;\nimport java.util.List;\n\nimport javax.crypto.BadPaddingException;\nimport javax.crypto.Cipher;\nimport javax.crypto.IllegalBlockSizeException;\nimport javax.crypto.NoSuchPaddingException;\nimport javax.crypto.SecretKey;\nimport javax.crypto.spec.IvParameterSpec;\n\npublic class StratumImporter extends DatabaseImporter {\n    private static final String HEADER = \"AUTHENTICATORPRO\";\n    private static final String HEADER_LEGACY = \"AuthenticatorPro\";\n    private static final String PKG_NAME = \"com.stratumauth.app\";\n    private static final String PKG_DB_PATH = \"databases/authenticator.db3\";\n\n    private enum Algorithm {\n        SHA1,\n        SHA256,\n        SHA512\n    }\n\n    public StratumImporter(Context context) {\n        super(context);\n    }\n\n    @Override\n    protected SuFile getAppPath() throws DatabaseImporterException, PackageManager.NameNotFoundException {\n        return getAppPath(PKG_NAME, PKG_DB_PATH);\n    }\n\n    @Override\n    protected State read(InputStream stream, boolean isInternal) throws DatabaseImporterException {\n        return isInternal ? readInternal(stream) : readExternal(stream);\n    }\n\n    private State readInternal(InputStream stream) throws DatabaseImporterException {\n        List<SqlEntry> entries = new SqlImporterHelper(requireContext()).read(SqlEntry.class, stream, \"authenticator\");\n        return new SqlState(entries);\n    }\n\n    private static State readExternal(InputStream stream) throws DatabaseImporterException {\n        byte[] data;\n        try {\n            data = IOUtils.readAll(stream);\n        } catch (IOException e) {\n            throw new DatabaseImporterException(e);\n        }\n\n        try {\n            return new JsonState(new JSONObject(new String(data, StandardCharsets.UTF_8)));\n        } catch (JSONException e) {\n            return readEncrypted(new DataInputStream(new ByteArrayInputStream(data)));\n        }\n    }\n\n    private static State readEncrypted(DataInputStream stream) throws DatabaseImporterException {\n        try {\n            byte[] headerBytes = new byte[HEADER.getBytes(StandardCharsets.UTF_8).length];\n            stream.readFully(headerBytes);\n            String header = new String(headerBytes, StandardCharsets.UTF_8);\n            switch (header) {\n                case HEADER:\n                    return EncryptedState.parseHeader(stream);\n                case HEADER_LEGACY:\n                    return LegacyEncryptedState.parseHeader(stream);\n                default:\n                    throw new DatabaseImporterException(\"Invalid file header\");\n            }\n        } catch (UTFDataFormatException e) {\n            throw new DatabaseImporterException(\"Invalid file header\");\n        } catch (IOException | NoSuchPaddingException | NoSuchAlgorithmException e) {\n            throw new DatabaseImporterException(e);\n        }\n    }\n\n    private static OtpInfo parseOtpInfo(int type, byte[] secret, Algorithm algo, int digits, int period, int counter)\n            throws OtpInfoException, DatabaseImporterEntryException {\n        switch (type) {\n            case 1:\n                return new HotpInfo(secret, algo.name(), digits, counter);\n            case 2:\n                return new TotpInfo(secret, algo.name(), digits, period);\n            case 4:\n                return new SteamInfo(secret, algo.name(), digits, period);\n            default:\n                throw new DatabaseImporterEntryException(String.format(\"Unsupported otp type: %d\", type), null);\n        }\n    }\n\n    static class EncryptedState extends State {\n        private static final int KEY_SIZE = 32;\n        private static final int MEMORY_COST = 16; // 2^16 KiB = 64 MiB\n        private static final int PARALLELISM = 4;\n        private static final int ITERATIONS = 3;\n        private static final int SALT_SIZE = 16;\n        private static final int IV_SIZE = 12;\n\n        private final Cipher _cipher;\n        private final byte[] _salt;\n        private final byte[] _iv;\n        private final byte[] _data;\n\n        public EncryptedState(Cipher cipher, byte[] salt, byte[] iv, byte[] data) {\n            super(true);\n            _cipher = cipher;\n            _salt = salt;\n            _iv = iv;\n            _data = data;\n        }\n\n        public JsonState decrypt(char[] password) throws DatabaseImporterException {\n            Argon2Task.Params params = getKeyDerivationParams(password);\n            SecretKey key = Argon2Task.deriveKey(params);\n            return decrypt(key);\n        }\n\n        public JsonState decrypt(SecretKey key) throws DatabaseImporterException {\n            try {\n                _cipher.init(Cipher.DECRYPT_MODE, key, new IvParameterSpec(_iv));\n                byte[] decrypted = _cipher.doFinal(_data);\n                return new JsonState(new JSONObject(new String(decrypted, StandardCharsets.UTF_8)));\n            } catch (InvalidAlgorithmParameterException | IllegalBlockSizeException\n                     | JSONException | InvalidKeyException | BadPaddingException e) {\n                throw new DatabaseImporterException(e);\n            }\n        }\n\n        @Override\n        public void decrypt(Context context, DecryptListener listener) throws DatabaseImporterException {\n            Dialogs.showPasswordInputDialog(context, R.string.enter_password_aegis_title, 0, (Dialogs.TextInputListener) password -> {\n                Argon2Task.Params params = getKeyDerivationParams(password);\n                Argon2Task task = new Argon2Task(context, key -> {\n                    try {\n                        StratumImporter.JsonState state = decrypt(key);\n                        listener.onStateDecrypted(state);\n                    } catch (DatabaseImporterException e) {\n                        listener.onError(e);\n                    }\n                });\n                Lifecycle lifecycle = ContextHelper.getLifecycle(context);\n                task.execute(lifecycle, params);\n            }, dialog -> listener.onCanceled());\n        }\n\n        private Argon2Task.Params getKeyDerivationParams(char[] password) {\n            Argon2Parameters argon2Params = new Argon2Parameters.Builder(Argon2Parameters.ARGON2_id)\n                    .withIterations(ITERATIONS)\n                    .withParallelism(PARALLELISM)\n                    .withMemoryPowOfTwo(MEMORY_COST)\n                    .withSalt(_salt)\n                    .build();\n            return new Argon2Task.Params(password, argon2Params, KEY_SIZE);\n        }\n\n        private static EncryptedState parseHeader(DataInputStream stream)\n            throws IOException, NoSuchPaddingException, NoSuchAlgorithmException {\n            byte[] salt = new byte[SALT_SIZE];\n            stream.readFully(salt);\n\n            byte[] iv = new byte[IV_SIZE];\n            stream.readFully(iv);\n\n            Cipher cipher = Cipher.getInstance(\"AES/GCM/NoPadding\");\n            return new EncryptedState(cipher, salt, iv, IOUtils.readAll(stream));\n        }\n    }\n\n    static class LegacyEncryptedState extends State {\n        private static final int ITERATIONS = 64000;\n        private static final int KEY_SIZE = 32 * Byte.SIZE;\n        private static final int SALT_SIZE = 20;\n\n        private final Cipher _cipher;\n        private final byte[] _salt;\n        private final byte[] _iv;\n        private final byte[] _data;\n\n        public LegacyEncryptedState(Cipher cipher, byte[] salt, byte[] iv, byte[] data) {\n            super(true);\n            _cipher = cipher;\n            _salt = salt;\n            _iv = iv;\n            _data = data;\n        }\n\n        public JsonState decrypt(char[] password) throws DatabaseImporterException {\n            PBKDFTask.Params params = getKeyDerivationParams(password);\n            SecretKey key = PBKDFTask.deriveKey(params);\n            return decrypt(key);\n        }\n\n        public JsonState decrypt(SecretKey key) throws DatabaseImporterException {\n            try {\n                _cipher.init(Cipher.DECRYPT_MODE, key, new IvParameterSpec(_iv));\n                byte[] decrypted = _cipher.doFinal(_data);\n                return new JsonState(new JSONObject(new String(decrypted, StandardCharsets.UTF_8)));\n            } catch (InvalidAlgorithmParameterException | IllegalBlockSizeException\n                     | JSONException | InvalidKeyException | BadPaddingException e) {\n                throw new DatabaseImporterException(e);\n            }\n        }\n\n        @Override\n        public void decrypt(Context context, DecryptListener listener) throws DatabaseImporterException {\n            Dialogs.showPasswordInputDialog(context, R.string.enter_password_aegis_title, 0, (Dialogs.TextInputListener) password -> {\n                PBKDFTask.Params params = getKeyDerivationParams(password);\n                PBKDFTask task = new PBKDFTask(context, key -> {\n                    try {\n                        StratumImporter.JsonState state = decrypt(key);\n                        listener.onStateDecrypted(state);\n                    } catch (DatabaseImporterException e) {\n                        listener.onError(e);\n                    }\n                });\n                Lifecycle lifecycle = ContextHelper.getLifecycle(context);\n                task.execute(lifecycle, params);\n            }, dialog -> listener.onCanceled());\n        }\n\n        private PBKDFTask.Params getKeyDerivationParams(char[] password) {\n            return new PBKDFTask.Params(\"PBKDF2WithHmacSHA1\", KEY_SIZE, password, _salt, ITERATIONS);\n        }\n\n        private static LegacyEncryptedState parseHeader(DataInputStream stream)\n            throws IOException, NoSuchPaddingException, NoSuchAlgorithmException {\n            byte[] salt = new byte[SALT_SIZE];\n            stream.readFully(salt);\n\n            Cipher cipher = Cipher.getInstance(\"AES/CBC/PKCS5Padding\");\n            int ivSize = cipher.getBlockSize();\n            byte[] iv = new byte[ivSize];\n            stream.readFully(iv);\n            return new LegacyEncryptedState(cipher, salt, iv, IOUtils.readAll(stream));\n        }\n    }\n\n    private static class JsonState extends State {\n        private final JSONObject _obj;\n\n        public JsonState(JSONObject obj) {\n            super(false);\n            _obj = obj;\n        }\n\n        @Override\n        public Result convert() throws DatabaseImporterException {\n            Result res = new Result();\n\n            try {\n                JSONArray array = _obj.getJSONArray(\"Authenticators\");\n                for (int i = 0; i < array.length(); i++) {\n                    JSONObject obj = array.getJSONObject(i);\n                    try {\n                        res.addEntry(convertEntry(obj));\n                    } catch (DatabaseImporterEntryException e) {\n                        res.addError(e);\n                    }\n                }\n            } catch (JSONException e) {\n                throw new DatabaseImporterException(e);\n            }\n\n            return res;\n        }\n\n        private static VaultEntry convertEntry(JSONObject obj) throws DatabaseImporterEntryException {\n            try {\n                int type = obj.getInt(\"Type\");\n                String issuer = obj.getString(\"Issuer\");\n                Object nullableUsername = obj.get(\"Username\");\n                String username = nullableUsername == JSONObject.NULL ? \"\" : nullableUsername.toString();\n                byte[] secret = Base32.decode(obj.getString(\"Secret\"));\n                Algorithm algo = Algorithm.values()[obj.getInt(\"Algorithm\")];\n                int digits = obj.getInt(\"Digits\");\n                int period = obj.getInt(\"Period\");\n                int counter = obj.getInt(\"Counter\");\n\n                OtpInfo info = parseOtpInfo(type, secret, algo, digits, period, counter);\n                return new VaultEntry(info, username, issuer);\n            } catch (OtpInfoException | EncodingException | JSONException e) {\n                throw new DatabaseImporterEntryException(e, null);\n            }\n        }\n    }\n\n    private static class SqlState extends State {\n        private final List<SqlEntry> _entries;\n\n        public SqlState(List<SqlEntry> entries) {\n            super(false);\n            _entries = entries;\n        }\n\n        @Override\n        public Result convert() throws DatabaseImporterException {\n            Result res = new Result();\n\n            for (SqlEntry entry : _entries) {\n                try {\n                    res.addEntry(entry.convert());\n                } catch (DatabaseImporterEntryException e) {\n                    res.addError(e);\n                }\n            }\n\n            return res;\n        }\n    }\n\n    private static class SqlEntry extends SqlImporterHelper.Entry {\n        private final int _type;\n        private final String _issuer;\n        private final String _username;\n        private final String _secret;\n        private final Algorithm _algo;\n        private final int _digits;\n        private final int _period;\n        private final int _counter;\n\n        public SqlEntry(Cursor cursor) {\n            super(cursor);\n            _type = SqlImporterHelper.getInt(cursor, \"type\");\n            _issuer = SqlImporterHelper.getString(cursor, \"issuer\");\n            _username = SqlImporterHelper.getString(cursor, \"username\");\n            _secret = SqlImporterHelper.getString(cursor, \"secret\");\n            _algo = Algorithm.values()[SqlImporterHelper.getInt(cursor, \"algorithm\")];\n            _digits = SqlImporterHelper.getInt(cursor, \"digits\");\n            _period = SqlImporterHelper.getInt(cursor, \"period\");\n            _counter = SqlImporterHelper.getInt(cursor, \"counter\");\n        }\n\n        public VaultEntry convert() throws DatabaseImporterEntryException {\n            try {\n                byte[] secret = Base32.decode(_secret);\n                OtpInfo info = parseOtpInfo(_type, secret, _algo, _digits, _period, _counter);\n                return new VaultEntry(info, _username, _issuer);\n            } catch (EncodingException | OtpInfoException e) {\n                throw new DatabaseImporterEntryException(e, null);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/importers/TotpAuthenticatorImporter.java",
    "content": "package com.beemdevelopment.aegis.importers;\n\nimport android.content.Context;\nimport android.content.pm.PackageManager;\nimport android.util.Xml;\n\nimport com.beemdevelopment.aegis.R;\nimport com.beemdevelopment.aegis.crypto.CryptoUtils;\nimport com.beemdevelopment.aegis.encoding.Base32;\nimport com.beemdevelopment.aegis.encoding.Base64;\nimport com.beemdevelopment.aegis.encoding.EncodingException;\nimport com.beemdevelopment.aegis.encoding.Hex;\nimport com.beemdevelopment.aegis.otp.OtpInfoException;\nimport com.beemdevelopment.aegis.otp.TotpInfo;\nimport com.beemdevelopment.aegis.ui.dialogs.Dialogs;\nimport com.beemdevelopment.aegis.util.IOUtils;\nimport com.beemdevelopment.aegis.util.PreferenceParser;\nimport com.beemdevelopment.aegis.vault.VaultEntry;\nimport com.google.android.material.dialog.MaterialAlertDialogBuilder;\nimport com.topjohnwu.superuser.io.SuFile;\n\nimport org.json.JSONArray;\nimport org.json.JSONException;\nimport org.json.JSONObject;\nimport org.xmlpull.v1.XmlPullParser;\nimport org.xmlpull.v1.XmlPullParserException;\n\nimport java.io.IOException;\nimport java.io.InputStream;\nimport java.nio.charset.StandardCharsets;\nimport java.security.InvalidAlgorithmParameterException;\nimport java.security.InvalidKeyException;\nimport java.security.MessageDigest;\nimport java.security.NoSuchAlgorithmException;\nimport java.util.ArrayList;\nimport java.util.List;\n\nimport javax.crypto.BadPaddingException;\nimport javax.crypto.Cipher;\nimport javax.crypto.IllegalBlockSizeException;\nimport javax.crypto.NoSuchPaddingException;\nimport javax.crypto.SecretKey;\nimport javax.crypto.spec.IvParameterSpec;\nimport javax.crypto.spec.SecretKeySpec;\n\npublic class TotpAuthenticatorImporter extends DatabaseImporter {\n    private static final String _subPath = \"shared_prefs/TOTP_Authenticator_Preferences.xml\";\n    private static final String _pkgName = \"com.authenticator.authservice2\";\n\n    // WARNING: DON'T DO THIS IN YOUR OWN CODE\n    // this is a hardcoded password and nonce, used solely to decrypt TOTP Authenticator backups\n    private static final char[] PASSWORD = \"TotpAuthenticator\".toCharArray();\n    private static final byte[] IV = new byte[]{\n            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00\n    };\n\n    private static final String PREF_KEY = \"STATIC_TOTP_CODES_LIST\";\n\n    public TotpAuthenticatorImporter(Context context) {\n        super(context);\n    }\n\n    @Override\n    protected SuFile getAppPath() throws PackageManager.NameNotFoundException {\n        return getAppPath(_pkgName, _subPath);\n    }\n\n    @Override\n    public State read(InputStream stream, boolean isInternal) throws DatabaseImporterException {\n        try {\n            if (isInternal) {\n                XmlPullParser parser = Xml.newPullParser();\n                parser.setFeature(XmlPullParser.FEATURE_PROCESS_NAMESPACES, false);\n                parser.setInput(stream, null);\n                parser.nextTag();\n\n                String data = null;\n                for (PreferenceParser.XmlEntry entry : PreferenceParser.parse(parser)) {\n                    if (entry.Name.equals(PREF_KEY)) {\n                        data = entry.Value;\n                    }\n                }\n\n                if (data == null) {\n                    throw new DatabaseImporterException(String.format(\"Key %s not found in shared preference file\", PREF_KEY));\n                }\n\n                List<JSONObject> entries = parse(data);\n                return new DecryptedState(entries);\n            } else {\n                byte[] base64 = IOUtils.readAll(stream);\n                byte[] cipherText = Base64.decode(base64);\n                return new EncryptedState(cipherText);\n            }\n        } catch (IOException | XmlPullParserException | JSONException e) {\n            throw new DatabaseImporterException(e);\n        }\n    }\n\n    private static List<JSONObject> parse(String data) throws JSONException {\n        JSONArray array = new JSONArray(data);\n\n        List<JSONObject> entries = new ArrayList<>();\n        for (int i = 0; i < array.length(); ++i) {\n            JSONObject obj = array.getJSONObject(i);\n            entries.add(obj);\n        }\n\n        return entries;\n    }\n\n    public static class EncryptedState extends DatabaseImporter.State {\n        private byte[] _data;\n\n        public EncryptedState(byte[] data) {\n            super(true);\n            _data = data;\n        }\n\n        protected DecryptedState decrypt(char[] password) throws DatabaseImporterException {\n            try {\n                // WARNING: DON'T DO THIS IN YOUR OWN CODE\n                // this is not a secure way to derive a key from a password\n                MessageDigest hash = MessageDigest.getInstance(\"SHA-256\");\n                byte[] keyBytes = hash.digest(CryptoUtils.toBytes(password));\n                SecretKey key = new SecretKeySpec(keyBytes, \"AES\");\n\n                Cipher cipher = Cipher.getInstance(\"AES/CBC/PKCS5Padding\");\n                IvParameterSpec spec = new IvParameterSpec(IV);\n                cipher.init(Cipher.DECRYPT_MODE, key, spec);\n\n                byte[] bytes = cipher.doFinal(_data);\n                JSONObject obj = new JSONObject(new String(bytes, StandardCharsets.UTF_8));\n                JSONArray keys = obj.names();\n\n                List<JSONObject> entries = new ArrayList<>();\n                if (keys != null && keys.length() > 0) {\n                    entries = parse((String) keys.get(0));\n                }\n\n                return new DecryptedState(entries);\n            } catch (NoSuchAlgorithmException\n                    | NoSuchPaddingException\n                    | InvalidAlgorithmParameterException\n                    | InvalidKeyException\n                    | BadPaddingException\n                    | IllegalBlockSizeException\n                    | JSONException e) {\n                throw new DatabaseImporterException(e);\n            }\n        }\n\n        @Override\n        public void decrypt(Context context, DecryptListener listener) {\n            Dialogs.showSecureDialog(new MaterialAlertDialogBuilder(context)\n                    .setMessage(R.string.choose_totpauth_importer)\n                    .setPositiveButton(R.string.yes, (dialog, which) -> {\n                        Dialogs.showPasswordInputDialog(context, password -> {\n                            decrypt(password, listener);\n                        }, dialog1 -> listener.onCanceled());\n                    })\n                    .setNegativeButton(R.string.no, (dialog, which) -> {\n                        decrypt(PASSWORD, listener);\n                    })\n                    .create());\n        }\n\n        private void decrypt(char[] password, DecryptListener listener) {\n            try {\n                DecryptedState state = decrypt(password);\n                listener.onStateDecrypted(state);\n            } catch (DatabaseImporterException e) {\n                listener.onError(e);\n            }\n        }\n    }\n\n    public static class DecryptedState extends DatabaseImporter.State {\n        private List<JSONObject> _objs;\n\n        private DecryptedState(List<JSONObject> objs) {\n            super(false);\n            _objs = objs;\n        }\n\n        @Override\n        public Result convert() {\n            Result result = new Result();\n\n            for (JSONObject obj : _objs) {\n                try {\n                    VaultEntry entry = convertEntry(obj);\n                    result.addEntry(entry);\n                } catch (DatabaseImporterEntryException e) {\n                    result.addError(e);\n                }\n            }\n\n            return result;\n        }\n\n        private static VaultEntry convertEntry(JSONObject obj) throws DatabaseImporterEntryException {\n            try {\n                int base = obj.getInt(\"base\");\n                String secretString = obj.getString(\"key\");\n\n                byte[] secret;\n                switch (base) {\n                    case 16:\n                        secret = Hex.decode(secretString);\n                        break;\n                    case 32:\n                        secret = Base32.decode(secretString);\n                        break;\n                    case 64:\n                        secret = Base64.decode(secretString);\n                        break;\n                    default:\n                        throw new DatabaseImporterEntryException(String.format(\"Unsupported secret encoding: base %d\", base), obj.toString());\n                }\n\n                TotpInfo info = new TotpInfo(secret);\n                String name = obj.optString(\"name\");\n                String issuer = obj.optString(\"issuer\");\n\n                return new VaultEntry(info, name, issuer);\n            } catch (JSONException | OtpInfoException | EncodingException e) {\n                throw new DatabaseImporterEntryException(e, obj.toString());\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/importers/TwoFASImporter.java",
    "content": "package com.beemdevelopment.aegis.importers;\n\nimport android.content.Context;\n\nimport com.beemdevelopment.aegis.R;\nimport com.beemdevelopment.aegis.crypto.CryptoUtils;\nimport com.beemdevelopment.aegis.encoding.Base64;\nimport com.beemdevelopment.aegis.encoding.EncodingException;\nimport com.beemdevelopment.aegis.otp.GoogleAuthInfo;\nimport com.beemdevelopment.aegis.otp.HotpInfo;\nimport com.beemdevelopment.aegis.otp.OtpInfo;\nimport com.beemdevelopment.aegis.otp.OtpInfoException;\nimport com.beemdevelopment.aegis.otp.SteamInfo;\nimport com.beemdevelopment.aegis.otp.TotpInfo;\nimport com.beemdevelopment.aegis.ui.dialogs.Dialogs;\nimport com.beemdevelopment.aegis.util.IOUtils;\nimport com.beemdevelopment.aegis.util.JsonUtils;\nimport com.beemdevelopment.aegis.vault.VaultEntry;\nimport com.google.common.base.Strings;\nimport com.topjohnwu.superuser.io.SuFile;\n\nimport org.json.JSONArray;\nimport org.json.JSONException;\nimport org.json.JSONObject;\n\nimport java.io.IOException;\nimport java.io.InputStream;\nimport java.nio.charset.StandardCharsets;\nimport java.security.InvalidAlgorithmParameterException;\nimport java.security.InvalidKeyException;\nimport java.security.NoSuchAlgorithmException;\nimport java.security.spec.InvalidKeySpecException;\nimport java.security.spec.KeySpec;\nimport java.util.ArrayList;\nimport java.util.List;\n\nimport javax.crypto.BadPaddingException;\nimport javax.crypto.Cipher;\nimport javax.crypto.IllegalBlockSizeException;\nimport javax.crypto.NoSuchPaddingException;\nimport javax.crypto.SecretKey;\nimport javax.crypto.SecretKeyFactory;\nimport javax.crypto.spec.PBEKeySpec;\nimport javax.crypto.spec.SecretKeySpec;\n\npublic class TwoFASImporter extends DatabaseImporter {\n    private static final int ITERATION_COUNT = 10_000;\n    private static final int KEY_SIZE = 256; // bits\n\n    public TwoFASImporter(Context context) {\n        super(context);\n    }\n\n    @Override\n    protected SuFile getAppPath() {\n        throw new UnsupportedOperationException();\n    }\n\n    @Override\n    public State read(InputStream stream, boolean isInternal) throws DatabaseImporterException {\n        try {\n            String json = new String(IOUtils.readAll(stream), StandardCharsets.UTF_8);\n            JSONObject obj = new JSONObject(json);\n            int version = obj.getInt(\"schemaVersion\");\n            if (version > 4) {\n                throw new DatabaseImporterException(String.format(\"Unsupported schema version: %d\", version));\n            }\n\n            String encryptedString = JsonUtils.optString(obj, \"servicesEncrypted\");\n            if (encryptedString == null) {\n                JSONArray array = obj.getJSONArray(\"services\");\n                List<JSONObject> entries = arrayToList(array);\n                return new DecryptedState(entries);\n            }\n\n            String[] parts = encryptedString.split(\":\");\n            if (parts.length < 3) {\n                throw new DatabaseImporterException(String.format(\"Unexpected format of encrypted data (parts: %d)\", parts.length));\n            }\n\n            byte[] data = Base64.decode(parts[0]);\n            byte[] salt = Base64.decode(parts[1]);\n            byte[] iv = Base64.decode(parts[2]);\n            return new EncryptedState(data, salt, iv);\n        } catch (IOException | JSONException e) {\n            throw new DatabaseImporterException(e);\n        }\n    }\n\n    private static List<JSONObject> arrayToList(JSONArray array) throws JSONException {\n        List<JSONObject> list = new ArrayList<>();\n        for (int i = 0; i < array.length(); i++) {\n            list.add(array.getJSONObject(i));\n        }\n\n        return list;\n    }\n\n    public static class EncryptedState extends State {\n        private final byte[] _data;\n        private final byte[] _salt;\n        private final byte[] _iv;\n\n        private EncryptedState(byte[] data, byte[] salt, byte[] iv) {\n            super(true);\n            _data = data;\n            _salt = salt;\n            _iv = iv;\n        }\n\n        private SecretKey deriveKey(char[] password)\n                throws NoSuchAlgorithmException, InvalidKeySpecException {\n            SecretKeyFactory factory = SecretKeyFactory.getInstance(\"PBKDF2WithHmacSHA256\");\n            KeySpec spec = new PBEKeySpec(password, _salt, ITERATION_COUNT, KEY_SIZE);\n            SecretKey key = factory.generateSecret(spec);\n            return new SecretKeySpec(key.getEncoded(), \"AES\");\n        }\n\n        public DecryptedState decrypt(char[] password) throws DatabaseImporterException {\n            try {\n                SecretKey key = deriveKey(password);\n                Cipher cipher = CryptoUtils.createDecryptCipher(key, _iv);\n                byte[] decrypted = cipher.doFinal(_data);\n                String json = new String(decrypted, StandardCharsets.UTF_8);\n                return new DecryptedState(arrayToList(new JSONArray(json)));\n            } catch (BadPaddingException | JSONException e) {\n                throw new DatabaseImporterException(e);\n            } catch (NoSuchAlgorithmException\n                    | InvalidKeySpecException\n                    | InvalidAlgorithmParameterException\n                    | NoSuchPaddingException\n                    | InvalidKeyException\n                    | IllegalBlockSizeException e) {\n                throw new RuntimeException(e);\n            }\n        }\n\n        @Override\n        public void decrypt(Context context, DecryptListener listener) {\n            Dialogs.showPasswordInputDialog(context, R.string.enter_password_2fas_message, 0, password -> {\n                try {\n                    DecryptedState state = decrypt(password);\n                    listener.onStateDecrypted(state);\n                } catch (DatabaseImporterException e) {\n                    listener.onError(e);\n                }\n            }, dialog -> listener.onCanceled());\n        }\n    }\n\n    public static class DecryptedState extends DatabaseImporter.State {\n        private final List<JSONObject> _entries;\n\n        public DecryptedState(List<JSONObject> entries) {\n            super(false);\n            _entries = entries;\n        }\n\n        @Override\n        public Result convert() {\n            Result result = new Result();\n\n            for (JSONObject obj : _entries) {\n                try {\n                    VaultEntry entry = convertEntry(obj);\n                    result.addEntry(entry);\n                } catch (DatabaseImporterEntryException e) {\n                    result.addError(e);\n                }\n            }\n\n            return result;\n        }\n\n        private static VaultEntry convertEntry(JSONObject obj) throws DatabaseImporterEntryException {\n            try {\n                byte[] secret = GoogleAuthInfo.parseSecret(obj.getString(\"secret\"));\n                JSONObject info = obj.getJSONObject(\"otp\");\n                String issuer = obj.optString(\"name\");\n                if (Strings.isNullOrEmpty(issuer)) {\n                    issuer = info.optString(\"issuer\");\n                }\n                String name = info.optString(\"account\");\n                int digits = info.optInt(\"digits\", TotpInfo.DEFAULT_DIGITS);\n                String algorithm = info.optString(\"algorithm\", TotpInfo.DEFAULT_ALGORITHM);\n\n                OtpInfo otp;\n                String tokenType = JsonUtils.optString(info, \"tokenType\");\n                if (tokenType == null || tokenType.equals(\"TOTP\")) {\n                    int period = info.optInt(\"period\", TotpInfo.DEFAULT_PERIOD);\n                    otp = new TotpInfo(secret, algorithm, digits, period);\n                } else if (tokenType.equals(\"HOTP\")) {\n                    long counter = info.optLong(\"counter\", 0);\n                    otp = new HotpInfo(secret, algorithm, digits, counter);\n                } else if (tokenType.equals(\"STEAM\")) {\n                    int period = info.optInt(\"period\", TotpInfo.DEFAULT_PERIOD);\n                    otp = new SteamInfo(secret, algorithm, digits, period);\n                } else {\n                    throw new DatabaseImporterEntryException(String.format(\"Unrecognized tokenType: %s\", tokenType), obj.toString());\n                }\n\n                return new VaultEntry(otp, name, issuer);\n            } catch (OtpInfoException | JSONException | EncodingException e) {\n                throw new DatabaseImporterEntryException(e, obj.toString());\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/importers/WinAuthImporter.java",
    "content": "package com.beemdevelopment.aegis.importers;\n\nimport android.content.Context;\n\nimport com.beemdevelopment.aegis.vault.VaultEntry;\nimport com.topjohnwu.superuser.io.SuFile;\n\nimport java.io.InputStream;\n\npublic class WinAuthImporter extends DatabaseImporter {\n    public WinAuthImporter(Context context) {\n        super(context);\n    }\n\n    @Override\n    protected SuFile getAppPath() {\n        throw new UnsupportedOperationException();\n    }\n\n    @Override\n    public WinAuthImporter.State read(InputStream stream, boolean isInternal) throws DatabaseImporterException {\n        GoogleAuthUriImporter importer = new GoogleAuthUriImporter(requireContext());\n        DatabaseImporter.State state = importer.read(stream);\n        return new State(state);\n    }\n\n    public static class State extends DatabaseImporter.State {\n        private DatabaseImporter.State _state;\n\n        private State(DatabaseImporter.State state) {\n            super(false);\n            _state = state;\n        }\n\n        @Override\n        public Result convert() throws DatabaseImporterException {\n            Result result = _state.convert();\n\n            for (VaultEntry entry : result.getEntries()) {\n                entry.setIssuer(entry.getName());\n                entry.setName(\"WinAuth\");\n            }\n\n            return result;\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/otp/GoogleAuthInfo.java",
    "content": "package com.beemdevelopment.aegis.otp;\n\nimport android.net.Uri;\n\nimport androidx.annotation.NonNull;\n\nimport com.beemdevelopment.aegis.GoogleAuthProtos;\nimport com.beemdevelopment.aegis.encoding.Base32;\nimport com.beemdevelopment.aegis.encoding.Base64;\nimport com.beemdevelopment.aegis.encoding.EncodingException;\nimport com.beemdevelopment.aegis.encoding.Hex;\nimport com.google.protobuf.ByteString;\nimport com.google.protobuf.InvalidProtocolBufferException;\n\nimport java.io.Serializable;\nimport java.nio.charset.StandardCharsets;\nimport java.util.ArrayList;\nimport java.util.List;\nimport java.util.Set;\nimport java.util.stream.Collectors;\n\npublic class GoogleAuthInfo implements Transferable, Serializable {\n    public static final String SCHEME = \"otpauth\";\n    public static final String SCHEME_EXPORT = \"otpauth-migration\";\n\n    private OtpInfo _info;\n    private String _accountName;\n    private String _issuer;\n\n    public GoogleAuthInfo(OtpInfo info, String accountName, String issuer) {\n        _info = info;\n        _accountName = accountName;\n        _issuer = issuer;\n    }\n\n    public static GoogleAuthInfo parseUri(String s) throws GoogleAuthInfoException {\n        Uri uri = Uri.parse(s);\n        if (uri == null) {\n            throw new GoogleAuthInfoException(uri, String.format(\"Bad URI format: %s\", s));\n        }\n        return GoogleAuthInfo.parseUri(uri);\n    }\n\n    public static GoogleAuthInfo parseUri(Uri uri) throws GoogleAuthInfoException {\n        String scheme = uri.getScheme();\n        if (scheme == null || !(scheme.equals(SCHEME) || scheme.equals(MotpInfo.SCHEME))) {\n            throw new GoogleAuthInfoException(uri, String.format(\"Unsupported protocol: %s\", scheme));\n        }\n\n        // 'secret' is a required parameter\n        String encodedSecret = uri.getQueryParameter(\"secret\");\n        if (encodedSecret == null) {\n            throw new GoogleAuthInfoException(uri, \"Parameter 'secret' is not present\");\n        }\n\n        byte[] secret;\n        try {\n            secret = (scheme.equals(MotpInfo.SCHEME)) ? Hex.decode(encodedSecret) : parseSecret(encodedSecret);\n        } catch (EncodingException e) {\n            throw new GoogleAuthInfoException(uri, \"Bad secret\", e);\n        }\n        if (secret.length == 0) {\n            throw new GoogleAuthInfoException(uri, \"Secret is empty\");\n        }\n\n        OtpInfo info;\n        String issuer = \"\";\n        try {\n            String type = (scheme.equals(MotpInfo.SCHEME)) ? MotpInfo.ID : uri.getHost();\n            if (type == null) {\n                throw new GoogleAuthInfoException(uri, String.format(\"Host not present in URI: %s\", uri.toString()));\n            }\n\n            switch (type) {\n                case \"totp\":\n                    TotpInfo totpInfo = new TotpInfo(secret);\n                    String period = uri.getQueryParameter(\"period\");\n                    if (period != null) {\n                        totpInfo.setPeriod(Integer.parseInt(period));\n                    }\n                    info = totpInfo;\n                    break;\n                case \"steam\":\n                    SteamInfo steamInfo = new SteamInfo(secret);\n                    period = uri.getQueryParameter(\"period\");\n                    if (period != null) {\n                        steamInfo.setPeriod(Integer.parseInt(period));\n                    }\n                    info = steamInfo;\n                    break;\n                case \"hotp\":\n                    HotpInfo hotpInfo = new HotpInfo(secret);\n                    String counter = uri.getQueryParameter(\"counter\");\n                    if (counter == null) {\n                        throw new GoogleAuthInfoException(uri, \"Parameter 'counter' is not present\");\n                    }\n                    hotpInfo.setCounter(Long.parseLong(counter));\n                    info = hotpInfo;\n                    break;\n                case YandexInfo.HOST_ID:\n                    String pin = uri.getQueryParameter(\"pin\");\n                    if (pin != null) {\n                        pin = new String(parseSecret(pin), StandardCharsets.UTF_8);\n                    }\n\n                    info = new YandexInfo(secret, pin);\n                    issuer = info.getType();\n                    break;\n                case MotpInfo.ID:\n                    info = new MotpInfo(secret);\n                    break;\n                default:\n                    throw new GoogleAuthInfoException(uri, String.format(\"Unsupported OTP type: %s\", type));\n            }\n        } catch (OtpInfoException | NumberFormatException | EncodingException e) {\n            throw new GoogleAuthInfoException(uri, e);\n        }\n\n        // provider info used to disambiguate accounts\n        String path = uri.getPath();\n        String label = path != null && path.length() > 0 ? path.substring(1) : \"\";\n\n        String accountName = \"\";\n\n        if (label.contains(\":\")) {\n            // a label can only contain one colon\n            // it's ok to fail if that's not the case\n            String[] strings = label.split(\":\");\n            if (strings.length == 2) {\n                issuer = strings[0];\n                accountName = strings[1];\n            } else {\n                // at this point, just dump the whole thing into the accountName\n                accountName = label;\n            }\n        } else {\n            // label only contains the account name\n            // grab the issuer's info from the 'issuer' parameter if it's present\n            String issuerParam = uri.getQueryParameter(\"issuer\");\n            if (issuer.isEmpty()) {\n                issuer = issuerParam != null ? issuerParam : \"\";\n            }\n            accountName = label;\n        }\n\n        // just use the defaults if these parameters aren't set\n        try {\n            String algorithm = uri.getQueryParameter(\"algorithm\");\n            if (algorithm != null) {\n                info.setAlgorithm(algorithm);\n            }\n            String digits = uri.getQueryParameter(\"digits\");\n            if (digits != null) {\n                info.setDigits(Integer.parseInt(digits));\n            }\n        } catch (OtpInfoException | NumberFormatException e) {\n            throw new GoogleAuthInfoException(uri, e);\n        }\n\n        return new GoogleAuthInfo(info, accountName, issuer);\n    }\n\n    /**\n     * Decodes the given base 32 secret, while being tolerant of whitespace and dashes.\n     */\n    public static byte[] parseSecret(String s) throws EncodingException {\n        s = s.trim().replace(\"-\", \"\").replace(\" \", \"\");\n        return Base32.decode(s);\n    }\n\n    public static Export parseExportUri(String s) throws GoogleAuthInfoException {\n        Uri uri = Uri.parse(s);\n        if (uri == null) {\n            throw new GoogleAuthInfoException(uri, \"Bad URI format\");\n        }\n        return GoogleAuthInfo.parseExportUri(uri);\n    }\n\n    public static Export parseExportUri(Uri uri) throws GoogleAuthInfoException {\n        String scheme = uri.getScheme();\n        if (scheme == null || !scheme.equals(SCHEME_EXPORT)) {\n            throw new GoogleAuthInfoException(uri, \"Unsupported protocol\");\n        }\n\n        String host = uri.getHost();\n        if (host == null || !host.equals(\"offline\")) {\n            throw new GoogleAuthInfoException(uri, \"Unsupported host\");\n        }\n\n        String data = uri.getQueryParameter(\"data\");\n        if (data == null) {\n            throw new GoogleAuthInfoException(uri, \"Parameter 'data' is not set\");\n        }\n\n        GoogleAuthProtos.MigrationPayload payload;\n        try {\n            byte[] bytes = Base64.decode(data);\n            payload = GoogleAuthProtos.MigrationPayload.parseFrom(bytes);\n        } catch (EncodingException | InvalidProtocolBufferException e) {\n            throw new GoogleAuthInfoException(uri, e);\n        }\n\n        List<GoogleAuthInfo> infos = new ArrayList<>();\n        for (GoogleAuthProtos.MigrationPayload.OtpParameters params : payload.getOtpParametersList()) {\n            OtpInfo otp;\n            try {\n                int digits;\n                switch (params.getDigits()) {\n                    case DIGIT_COUNT_UNSPECIFIED:\n                        // intentional fallthrough\n                    case DIGIT_COUNT_SIX:\n                        digits = TotpInfo.DEFAULT_DIGITS;\n                        break;\n                    case DIGIT_COUNT_EIGHT:\n                        digits = 8;\n                        break;\n                    default:\n                        throw new GoogleAuthInfoException(uri, String.format(\"Unsupported digits: %d\", params.getDigits().ordinal()));\n                }\n\n                String algo;\n                switch (params.getAlgorithm()) {\n                    case ALGORITHM_UNSPECIFIED:\n                        // intentional fallthrough\n                    case ALGORITHM_SHA1:\n                        algo = \"SHA1\";\n                        break;\n                    case ALGORITHM_SHA256:\n                        algo = \"SHA256\";\n                        break;\n                    case ALGORITHM_SHA512:\n                        algo = \"SHA512\";\n                        break;\n                    default:\n                        throw new GoogleAuthInfoException(uri, String.format(\"Unsupported hash algorithm: %d\", params.getAlgorithm().ordinal()));\n                }\n\n                byte[] secret = params.getSecret().toByteArray();\n                if (secret.length == 0) {\n                    throw new GoogleAuthInfoException(uri, \"Secret is empty\");\n                }\n\n                switch (params.getType()) {\n                    case OTP_TYPE_UNSPECIFIED:\n                        // intentional fallthrough\n                    case OTP_TYPE_TOTP:\n                        otp = new TotpInfo(secret, algo, digits, TotpInfo.DEFAULT_PERIOD);\n                        break;\n                    case OTP_TYPE_HOTP:\n                        otp = new HotpInfo(secret, algo, digits, params.getCounter());\n                        break;\n                    default:\n                        throw new GoogleAuthInfoException(uri, String.format(\"Unsupported algorithm: %d\", params.getType().ordinal()));\n                }\n            } catch (OtpInfoException e) {\n                throw new GoogleAuthInfoException(uri, e);\n            }\n\n            String name = params.getName();\n            String issuer = params.getIssuer();\n            int colonI = name.indexOf(':');\n            if (issuer.isEmpty() && colonI != -1) {\n                issuer = name.substring(0, colonI);\n                name = name.substring(colonI + 1);\n            }\n\n            GoogleAuthInfo info = new GoogleAuthInfo(otp, name, issuer);\n            infos.add(info);\n        }\n\n        return new Export(infos, payload.getBatchId(), payload.getBatchIndex(), payload.getBatchSize());\n    }\n\n    public OtpInfo getOtpInfo() {\n        return _info;\n    }\n\n    @Override\n    public Uri getUri() {\n        Uri.Builder builder = new Uri.Builder();\n\n        if (_info instanceof MotpInfo) {\n            builder.scheme(MotpInfo.SCHEME);\n            builder.appendQueryParameter(\"secret\", Hex.encode(_info.getSecret()));\n        } else {\n            builder.scheme(SCHEME);\n\n            if (_info instanceof TotpInfo) {\n                if (_info instanceof SteamInfo) {\n                    builder.authority(\"steam\");\n                } else if (_info instanceof YandexInfo) {\n                    builder.authority(YandexInfo.HOST_ID);\n                } else {\n                    builder.authority(\"totp\");\n                }\n                builder.appendQueryParameter(\"period\", Integer.toString(((TotpInfo) _info).getPeriod()));\n            } else if (_info instanceof HotpInfo) {\n                builder.authority(\"hotp\");\n                builder.appendQueryParameter(\"counter\", Long.toString(((HotpInfo) _info).getCounter()));\n            } else {\n                throw new RuntimeException(String.format(\"Unsupported OtpInfo type: %s\", _info.getClass()));\n            }\n\n            builder.appendQueryParameter(\"digits\", Integer.toString(_info.getDigits()));\n            builder.appendQueryParameter(\"algorithm\", _info.getAlgorithm(false));\n            builder.appendQueryParameter(\"secret\", Base32.encode(_info.getSecret()));\n\n            if (_info instanceof YandexInfo) {\n                builder.appendQueryParameter(\"pin\", Base32.encode(((YandexInfo) _info).getPin()));\n            }\n        }\n\n        if (_issuer != null && !_issuer.equals(\"\")) {\n            builder.path(String.format(\"%s:%s\", _issuer, _accountName));\n            builder.appendQueryParameter(\"issuer\", _issuer);\n        } else {\n            builder.path(_accountName);\n        }\n\n        return builder.build();\n    }\n\n    public String getIssuer() {\n        return _issuer;\n    }\n\n    public String getAccountName() {\n        return _accountName;\n    }\n\n    public static class Export implements Transferable, Serializable {\n        private int _batchId;\n        private int _batchIndex;\n        private int _batchSize;\n        private List<GoogleAuthInfo> _entries;\n\n        public Export(List<GoogleAuthInfo> entries, int batchId, int batchIndex, int batchSize) {\n            _batchId = batchId;\n            _batchIndex = batchIndex;\n            _batchSize = batchSize;\n            _entries = entries;\n        }\n\n        public List<GoogleAuthInfo> getEntries() {\n            return _entries;\n        }\n\n        public int getBatchSize() {\n            return _batchSize;\n        }\n\n        public int getBatchIndex() {\n            return _batchIndex;\n        }\n\n        public int getBatchId() {\n            return _batchId;\n        }\n\n        public static List<Integer> getMissingIndices(@NonNull List<Export> exports) throws IllegalArgumentException {\n            if (!isSingleBatch(exports)) {\n                throw new IllegalArgumentException(\"Export list contains entries from different batches\");\n            }\n\n            List<Integer> indicesMissing = new ArrayList<>();\n            if (exports.isEmpty()) {\n                return indicesMissing;\n            }\n\n            Set<Integer> indicesPresent = exports.stream()\n                    .map(Export::getBatchIndex)\n                    .collect(Collectors.toSet());\n\n            for (int i = 0; i < exports.get(0).getBatchSize(); i++) {\n                if (!indicesPresent.contains(i)) {\n                    indicesMissing.add(i);\n                }\n            }\n\n            return indicesMissing;\n        }\n\n        public static boolean isSingleBatch(@NonNull List<Export> exports) {\n            if (exports.isEmpty()) {\n                return true;\n            }\n\n            int batchId = exports.get(0).getBatchId();\n            for (Export export : exports) {\n                if (export.getBatchId() != batchId) {\n                    return false;\n                }\n            }\n\n            return true;\n        }\n\n        @Override\n        public Uri getUri() throws GoogleAuthInfoException {\n            GoogleAuthProtos.MigrationPayload.Builder builder = GoogleAuthProtos.MigrationPayload.newBuilder();\n            builder.setBatchId(_batchId)\n                    .setBatchIndex(_batchIndex)\n                    .setBatchSize(_batchSize)\n                    .setVersion(1);\n\n            for (GoogleAuthInfo info: _entries) {\n                GoogleAuthProtos.MigrationPayload.OtpParameters.Builder parameters = GoogleAuthProtos.MigrationPayload.OtpParameters.newBuilder()\n                        .setSecret(ByteString.copyFrom(info.getOtpInfo().getSecret()))\n                        .setName(info.getAccountName())\n                        .setIssuer(info.getIssuer());\n\n                switch (info.getOtpInfo().getAlgorithm(false)) {\n                    case \"SHA1\":\n                        parameters.setAlgorithm(GoogleAuthProtos.MigrationPayload.Algorithm.ALGORITHM_SHA1);\n                        break;\n                    case \"SHA256\":\n                        parameters.setAlgorithm(GoogleAuthProtos.MigrationPayload.Algorithm.ALGORITHM_SHA256);\n                        break;\n                    case \"SHA512\":\n                        parameters.setAlgorithm(GoogleAuthProtos.MigrationPayload.Algorithm.ALGORITHM_SHA512);\n                        break;\n                    case \"MD5\":\n                        parameters.setAlgorithm(GoogleAuthProtos.MigrationPayload.Algorithm.ALGORITHM_MD5);\n                        break;\n                    default:\n                        throw new GoogleAuthInfoException(info.getUri(), String.format(\"Unsupported Algorithm: %s\", info.getOtpInfo().getAlgorithm(false)));\n                }\n\n                switch (info.getOtpInfo().getDigits()) {\n                    case 6:\n                        parameters.setDigits(GoogleAuthProtos.MigrationPayload.DigitCount.DIGIT_COUNT_SIX);\n                        break;\n                    case 8:\n                        parameters.setDigits(GoogleAuthProtos.MigrationPayload.DigitCount.DIGIT_COUNT_EIGHT);\n                        break;\n                    default:\n                        throw new GoogleAuthInfoException(info.getUri(), String.format(\"Unsupported number of digits: %s\", info.getOtpInfo().getDigits()));\n                }\n\n                switch (info.getOtpInfo().getType().toLowerCase()) {\n                    case HotpInfo.ID:\n                        parameters.setType(GoogleAuthProtos.MigrationPayload.OtpType.OTP_TYPE_HOTP);\n                        parameters.setCounter(((HotpInfo) info.getOtpInfo()).getCounter());\n                        break;\n                    case TotpInfo.ID:\n                        parameters.setType(GoogleAuthProtos.MigrationPayload.OtpType.OTP_TYPE_TOTP);\n                        break;\n                    default:\n                        throw new GoogleAuthInfoException(info.getUri(), String.format(\"Type unsupported by GoogleAuthProtos: %s\", info.getOtpInfo().getType()));\n                }\n\n                builder.addOtpParameters(parameters.build());\n            }\n\n            Uri.Builder exportUriBuilder = new Uri.Builder()\n                    .scheme(SCHEME_EXPORT)\n                    .authority(\"offline\");\n\n            String data = Base64.encode(builder.build().toByteArray());\n            exportUriBuilder.appendQueryParameter(\"data\", data);\n\n            return exportUriBuilder.build();\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/otp/GoogleAuthInfoException.java",
    "content": "package com.beemdevelopment.aegis.otp;\n\nimport android.net.Uri;\n\npublic class GoogleAuthInfoException extends Exception {\n    private final Uri _uri;\n\n    public GoogleAuthInfoException(Uri uri, Throwable cause) {\n        super(cause);\n        _uri = uri;\n    }\n\n    public GoogleAuthInfoException(Uri uri, String message) {\n        super(message);\n        _uri = uri;\n    }\n\n    public GoogleAuthInfoException(Uri uri, String message, Throwable cause) {\n        super(message, cause);\n        _uri = uri;\n    }\n\n    /**\n     * Reports whether the scheme of the URI is phonefactor://.\n     */\n    public boolean isPhoneFactor() {\n        return _uri != null && _uri.getScheme() != null && _uri.getScheme().equals(\"phonefactor\");\n    }\n\n    @Override\n    public String getMessage() {\n        Throwable cause = getCause();\n        if (cause == null\n                || this == cause\n                || (super.getMessage() != null && super.getMessage().equals(cause.getMessage()))) {\n            return super.getMessage();\n        }\n\n        return String.format(\"%s (%s)\", super.getMessage(), cause.getMessage());\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/otp/HotpInfo.java",
    "content": "package com.beemdevelopment.aegis.otp;\n\nimport com.beemdevelopment.aegis.crypto.otp.HOTP;\nimport com.beemdevelopment.aegis.crypto.otp.OTP;\n\nimport org.json.JSONException;\nimport org.json.JSONObject;\n\nimport java.security.InvalidKeyException;\nimport java.security.NoSuchAlgorithmException;\n\npublic class HotpInfo extends OtpInfo {\n    public static final String ID = \"hotp\";\n    public static final int DEFAULT_COUNTER = 0;\n\n    private long _counter;\n\n    public HotpInfo(byte[] secret, long counter) throws OtpInfoException {\n        super(secret);\n        setCounter(counter);\n    }\n\n    public HotpInfo(byte[] secret) throws OtpInfoException {\n        this(secret, DEFAULT_COUNTER);\n    }\n\n    public HotpInfo(byte[] secret, String algorithm, int digits, long counter) throws OtpInfoException {\n        super(secret, algorithm, digits);\n        setCounter(counter);\n    }\n\n    @Override\n    public String getOtp() throws OtpInfoException {\n        checkSecret();\n\n        try {\n            OTP otp = HOTP.generateOTP(getSecret(), getAlgorithm(true), getDigits(), getCounter());\n            return otp.toString();\n        } catch (NoSuchAlgorithmException | InvalidKeyException e) {\n            throw new RuntimeException(e);\n        }\n    }\n\n    @Override\n    public String getTypeId() {\n        return ID;\n    }\n\n    @Override\n    public JSONObject toJson() {\n        JSONObject obj = super.toJson();\n        try {\n            obj.put(\"counter\", getCounter());\n        } catch (JSONException e) {\n            throw new RuntimeException(e);\n        }\n        return obj;\n    }\n\n    public long getCounter() {\n        return _counter;\n    }\n\n    public static boolean isCounterValid(long counter) {\n        return counter >= 0;\n    }\n\n    public void setCounter(long counter) throws OtpInfoException {\n        if (!isCounterValid(counter)) {\n            throw new OtpInfoException(String.format(\"bad counter: %d\", counter));\n        }\n        _counter = counter;\n    }\n\n    public void incrementCounter() throws OtpInfoException {\n        setCounter(getCounter() + 1);\n    }\n\n    @Override\n    public boolean equals(Object o) {\n        if (!(o instanceof HotpInfo)) {\n            return false;\n        }\n\n        HotpInfo info = (HotpInfo) o;\n        return super.equals(o) && getCounter() == info.getCounter();\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/otp/MotpInfo.java",
    "content": "package com.beemdevelopment.aegis.otp;\n\nimport androidx.annotation.NonNull;\nimport androidx.annotation.Nullable;\n\nimport com.beemdevelopment.aegis.crypto.otp.MOTP;\n\nimport org.json.JSONException;\nimport org.json.JSONObject;\n\nimport java.security.NoSuchAlgorithmException;\nimport java.util.Objects;\n\npublic class MotpInfo extends TotpInfo {\n    public static final String ID = \"motp\";\n    public static final String SCHEME = \"motp\";\n    public static final String ALGORITHM = \"MD5\";\n\n    public static final int PERIOD = 10;\n    public static final int DIGITS = 6;\n\n    private String _pin;\n\n    public MotpInfo(@NonNull byte[] secret) throws OtpInfoException {\n        this(secret, null);\n    }\n\n    public MotpInfo(byte[] secret, String pin) throws OtpInfoException {\n        super(secret, ALGORITHM, DIGITS, PERIOD);\n        setPin(pin);\n    }\n\n    @Override\n    public String getOtp(long time) {\n        if (_pin == null) {\n            throw new IllegalStateException(\"PIN must be set before generating an OTP\");\n        }\n\n        try {\n            MOTP otp = MOTP.generateOTP(getSecret(), getAlgorithm(false), getDigits(), getPeriod(), getPin(), time);\n            return otp.toString();\n        } catch (NoSuchAlgorithmException e) {\n            throw new RuntimeException(e);\n        }\n    }\n\n    @Override\n    public String getTypeId() {\n        return ID;\n    }\n\n    @Override\n    public JSONObject toJson() {\n        JSONObject result = super.toJson();\n        try {\n            result.put(\"pin\", getPin());\n        } catch (JSONException e) {\n            throw new RuntimeException(e);\n        }\n        return result;\n    }\n\n    @Nullable\n    public String getPin() {\n        return _pin;\n    }\n\n    public void setPin(@NonNull String pin) {\n        this._pin = pin;\n    }\n\n    @Override\n    public boolean equals(Object o) {\n        if (!(o instanceof MotpInfo)) {\n            return false;\n        }\n\n        MotpInfo info = (MotpInfo) o;\n        return super.equals(o) && Objects.equals(getPin(), info.getPin());\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/otp/OtpInfo.java",
    "content": "package com.beemdevelopment.aegis.otp;\n\nimport com.beemdevelopment.aegis.encoding.Base32;\nimport com.beemdevelopment.aegis.encoding.EncodingException;\n\nimport org.json.JSONException;\nimport org.json.JSONObject;\n\nimport java.io.Serializable;\nimport java.util.Arrays;\nimport java.util.Locale;\n\npublic abstract class OtpInfo implements Serializable {\n    public static final int DEFAULT_DIGITS = 6;\n    public static final String DEFAULT_ALGORITHM = \"SHA1\";\n\n    private byte[] _secret;\n    private String _algorithm;\n    private int _digits;\n\n    public OtpInfo(byte[] secret) throws OtpInfoException {\n        this(secret, DEFAULT_ALGORITHM, DEFAULT_DIGITS);\n    }\n\n    public OtpInfo(byte[] secret, String algorithm, int digits) throws OtpInfoException {\n        setSecret(secret);\n        setAlgorithm(algorithm);\n        setDigits(digits);\n    }\n\n    public abstract String getOtp() throws OtpInfoException;\n\n    protected void checkSecret() throws OtpInfoException {\n        if (getSecret().length == 0) {\n            throw new OtpInfoException(\"Secret is empty\");\n        }\n    }\n\n    public abstract String getTypeId();\n\n    public String getType() {\n        return getTypeId().toUpperCase(Locale.ROOT);\n    }\n\n    public JSONObject toJson() {\n        JSONObject obj = new JSONObject();\n\n        try {\n            obj.put(\"secret\", Base32.encode(getSecret()));\n            obj.put(\"algo\", getAlgorithm(false));\n            obj.put(\"digits\", getDigits());\n        } catch (JSONException e) {\n            throw new RuntimeException(e);\n        }\n\n        return obj;\n    }\n\n    public byte[] getSecret() {\n        return _secret;\n    }\n\n    public String getAlgorithm(boolean java) {\n        if (java) {\n            return \"Hmac\" + _algorithm;\n        }\n        return _algorithm;\n    }\n\n    public int getDigits() {\n        return _digits;\n    }\n\n    public void setSecret(byte[] secret) {\n        _secret = secret;\n    }\n\n    public static boolean isAlgorithmValid(String algorithm) {\n        return algorithm.equals(\"SHA1\") || algorithm.equals(\"SHA256\") ||\n                algorithm.equals(\"SHA512\") || algorithm.equals(\"MD5\");\n    }\n\n    public void setAlgorithm(String algorithm) throws OtpInfoException {\n        if (algorithm.startsWith(\"Hmac\")) {\n            algorithm = algorithm.substring(4);\n        }\n        algorithm = algorithm.toUpperCase(Locale.ROOT);\n\n        if (!isAlgorithmValid(algorithm)) {\n            throw new OtpInfoException(String.format(\"unsupported algorithm: %s\", algorithm));\n        }\n        _algorithm = algorithm;\n    }\n\n    public static boolean isDigitsValid(int digits) {\n        // allow a max of 10 digits, as truncation will only extract 31 bits\n        return digits > 0 && digits <= 10;\n    }\n\n    public void setDigits(int digits) throws OtpInfoException {\n        if (!isDigitsValid(digits)) {\n            throw new OtpInfoException(String.format(\"unsupported amount of digits: %d\", digits));\n        }\n        _digits = digits;\n    }\n\n    public static OtpInfo fromJson(String type, JSONObject obj) throws OtpInfoException {\n        OtpInfo info;\n\n        try {\n            byte[] secret = Base32.decode(obj.getString(\"secret\"));\n            String algo = obj.getString(\"algo\");\n            int digits = obj.getInt(\"digits\");\n\n            // Special case to work around a bug where a user could accidentally\n            // set the hash algorithm of a non-mOTP entry to MD5\n            if (!type.equals(MotpInfo.ID) && algo.equals(\"MD5\")) {\n                algo = DEFAULT_ALGORITHM;\n            }\n\n            switch (type) {\n                case TotpInfo.ID:\n                    info = new TotpInfo(secret, algo, digits, obj.getInt(\"period\"));\n                    break;\n                case SteamInfo.ID:\n                    info = new SteamInfo(secret, algo, digits, obj.getInt(\"period\"));\n                    break;\n                case HotpInfo.ID:\n                    info = new HotpInfo(secret, algo, digits, obj.getLong(\"counter\"));\n                    break;\n                case YandexInfo.ID:\n                    info = new YandexInfo(secret, obj.getString(\"pin\"));\n                    break;\n                case MotpInfo.ID:\n                    info = new MotpInfo(secret, obj.getString(\"pin\"));\n                    break;\n                default:\n                    throw new OtpInfoException(\"unsupported otp type: \" + type);\n            }\n        } catch (EncodingException | JSONException e) {\n            throw new OtpInfoException(e);\n        }\n\n        return info;\n    }\n\n    @Override\n    public boolean equals(Object o) {\n        if (this == o) {\n            return true;\n        }\n        if (!(o instanceof OtpInfo)) {\n            return false;\n        }\n\n        OtpInfo info = (OtpInfo) o;\n        return getTypeId().equals(info.getTypeId())\n                && Arrays.equals(getSecret(), info.getSecret())\n                && getAlgorithm(false).equals(info.getAlgorithm(false))\n                && getDigits() == info.getDigits();\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/otp/OtpInfoException.java",
    "content": "package com.beemdevelopment.aegis.otp;\n\npublic class OtpInfoException extends Exception {\n    public OtpInfoException(Throwable cause) {\n        super(cause);\n    }\n\n    public OtpInfoException(String message) {\n        super(message);\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/otp/SteamInfo.java",
    "content": "package com.beemdevelopment.aegis.otp;\n\nimport com.beemdevelopment.aegis.crypto.otp.OTP;\nimport com.beemdevelopment.aegis.crypto.otp.TOTP;\n\nimport java.security.InvalidKeyException;\nimport java.security.NoSuchAlgorithmException;\nimport java.util.Locale;\n\npublic class SteamInfo extends TotpInfo {\n    public static final String ID = \"steam\";\n    public static final int DIGITS = 5;\n\n    public SteamInfo(byte[] secret) throws OtpInfoException {\n        super(secret, OtpInfo.DEFAULT_ALGORITHM, DIGITS, TotpInfo.DEFAULT_PERIOD);\n    }\n\n    public SteamInfo(byte[] secret, String algorithm, int digits, int period) throws OtpInfoException {\n        super(secret, algorithm, digits, period);\n    }\n\n    @Override\n    public String getOtp(long time) throws OtpInfoException {\n        checkSecret();\n\n        try {\n            OTP otp = TOTP.generateOTP(getSecret(), getAlgorithm(true), getDigits(), getPeriod(), time);\n            return otp.toSteamString();\n        } catch (InvalidKeyException | NoSuchAlgorithmException e) {\n            throw new RuntimeException(e);\n        }\n    }\n\n    @Override\n    public String getTypeId() {\n        return ID;\n    }\n\n    @Override\n    public String getType() {\n        String id = getTypeId();\n        return id.substring(0, 1).toUpperCase(Locale.ROOT) + id.substring(1);\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/otp/TotpInfo.java",
    "content": "package com.beemdevelopment.aegis.otp;\n\nimport com.beemdevelopment.aegis.crypto.otp.OTP;\nimport com.beemdevelopment.aegis.crypto.otp.TOTP;\n\nimport org.json.JSONException;\nimport org.json.JSONObject;\n\nimport java.security.InvalidKeyException;\nimport java.security.NoSuchAlgorithmException;\n\npublic class TotpInfo extends OtpInfo {\n    public static final String ID = \"totp\";\n    public static final int DEFAULT_PERIOD = 30;\n\n    private int _period;\n\n    public TotpInfo(byte[] secret) throws OtpInfoException {\n        super(secret);\n        setPeriod(DEFAULT_PERIOD);\n    }\n\n    public TotpInfo(byte[] secret, String algorithm, int digits, int period) throws OtpInfoException {\n        super(secret, algorithm, digits);\n        setPeriod(period);\n    }\n\n    @Override\n    public String getOtp() throws OtpInfoException {\n        return getOtp(System.currentTimeMillis() / 1000);\n    }\n\n    public String getOtp(long time) throws OtpInfoException {\n        checkSecret();\n\n        try {\n            OTP otp = TOTP.generateOTP(getSecret(), getAlgorithm(true), getDigits(), getPeriod(), time);\n            return otp.toString();\n        } catch (InvalidKeyException | NoSuchAlgorithmException e) {\n            throw new RuntimeException(e);\n        }\n    }\n\n    @Override\n    public String getTypeId() {\n        return ID;\n    }\n\n    @Override\n    public JSONObject toJson() {\n        JSONObject obj = super.toJson();\n        try {\n            obj.put(\"period\", getPeriod());\n        } catch (JSONException e) {\n            throw new RuntimeException(e);\n        }\n        return obj;\n    }\n\n    public int getPeriod() {\n        return _period;\n    }\n\n    public static boolean isPeriodValid(int period) {\n        if (period <= 0) {\n            return false;\n        }\n\n        // check for the possibility of an overflow when converting to milliseconds\n        return period <= Integer.MAX_VALUE / 1000;\n    }\n\n    public void setPeriod(int period) throws OtpInfoException {\n        if (!isPeriodValid(period)) {\n            throw new OtpInfoException(String.format(\"bad period: %d\", period));\n        }\n        _period = period;\n    }\n\n    public long getMillisTillNextRotation() {\n        return TotpInfo.getMillisTillNextRotation(_period);\n    }\n\n    public static long getMillisTillNextRotation(int period) {\n        long p = period * 1000;\n        return p - (System.currentTimeMillis() % p);\n    }\n\n    @Override\n    public boolean equals(Object o) {\n        if (!(o instanceof TotpInfo)) {\n            return false;\n        }\n\n        TotpInfo info = (TotpInfo) o;\n        return super.equals(o) && getPeriod() == info.getPeriod();\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/otp/Transferable.java",
    "content": "package com.beemdevelopment.aegis.otp;\n\nimport android.net.Uri;\n\npublic interface Transferable {\n    Uri getUri() throws GoogleAuthInfoException;\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/otp/YandexInfo.java",
    "content": "package com.beemdevelopment.aegis.otp;\n\nimport androidx.annotation.NonNull;\nimport androidx.annotation.Nullable;\n\nimport com.beemdevelopment.aegis.crypto.otp.YAOTP;\n\nimport org.json.JSONException;\nimport org.json.JSONObject;\n\nimport java.io.IOException;\nimport java.security.InvalidKeyException;\nimport java.security.NoSuchAlgorithmException;\nimport java.util.Arrays;\nimport java.util.Locale;\nimport java.util.Objects;\n\npublic class YandexInfo extends TotpInfo {\n    public static final String DEFAULT_ALGORITHM = \"SHA256\";\n    public static final int DIGITS = 8;\n\n    public static final int SECRET_LENGTH = 16;\n    public static final int SECRET_FULL_LENGTH = 26;\n    public static final String ID = \"yandex\";\n    public static final String HOST_ID = \"yaotp\";\n\n    @Nullable\n    private String _pin;\n\n    public YandexInfo(@NonNull byte[] secret) throws OtpInfoException {\n        this(secret, null);\n    }\n\n    public YandexInfo(@NonNull byte[] secret, @Nullable String pin) throws OtpInfoException {\n        super(secret, DEFAULT_ALGORITHM, DIGITS, TotpInfo.DEFAULT_PERIOD);\n        setSecret(parseSecret(secret));\n        _pin = pin;\n    }\n\n    @Override\n    public String getOtp(long time) {\n        if (_pin == null) {\n            throw new IllegalStateException(\"PIN must be set before generating an OTP\");\n        }\n\n        try {\n            YAOTP otp = YAOTP.generateOTP(getSecret(), getPin(), getDigits(), getAlgorithm(true), getPeriod(), time);\n            return otp.toString();\n        } catch (InvalidKeyException | NoSuchAlgorithmException | IOException e) {\n            throw new RuntimeException(e);\n        }\n    }\n\n    @Nullable\n    public String getPin() {\n        return _pin;\n    }\n\n    public void setPin(@NonNull String pin) {\n        _pin = pin;\n    }\n\n    @Override\n    public String getTypeId() {\n        return ID;\n    }\n\n    @Override\n    public String getType() {\n        String id = getTypeId();\n        return id.substring(0, 1).toUpperCase(Locale.ROOT) + id.substring(1);\n    }\n\n    @Override\n    public JSONObject toJson() {\n        JSONObject result = super.toJson();\n        try {\n            result.put(\"pin\", getPin());\n        } catch (JSONException e) {\n            throw new RuntimeException(e);\n        }\n        return result;\n    }\n\n    @Override\n    public boolean equals(Object o) {\n        if (!(o instanceof YandexInfo)) {\n            return false;\n        }\n\n        YandexInfo info = (YandexInfo) o;\n        return super.equals(o) && Objects.equals(getPin(), info.getPin());\n    }\n\n    public static byte[] parseSecret(byte[] secret) throws OtpInfoException {\n        validateSecret(secret);\n\n        if (secret.length != SECRET_LENGTH) {\n            return Arrays.copyOfRange(secret, 0, SECRET_LENGTH);\n        }\n\n        return secret;\n    }\n\n    /**\n     * Java implementation of ChecksumIsValid\n     * From: https://github.com/norblik/KeeYaOtp/blob/188a1a99f13f82e4ef8df8a1b9b9351ba236e2a1/KeeYaOtp/Core/Secret.cs\n     * License: GPLv3+\n     */\n    public static void validateSecret(byte[] secret) throws OtpInfoException {\n        if (secret.length != SECRET_LENGTH && secret.length != SECRET_FULL_LENGTH) {\n            throw new OtpInfoException(String.format(\"Invalid Yandex secret length: %d bytes\", secret.length));\n        }\n\n        // Secrets originating from a QR code do not have a checksum, so we assume those are valid\n        if (secret.length == SECRET_LENGTH) {\n            return;\n        }\n\n        char originalChecksum = (char) ((secret[secret.length - 2] & 0x0F) << 8 | secret[secret.length - 1] & 0xff);\n\n        char accum = 0;\n        int accumBits = 0;\n\n        int inputTotalBitsAvailable = secret.length * 8 - 12;\n        int inputIndex = 0;\n        int inputBitsAvailable = 8;\n\n        while (inputTotalBitsAvailable > 0) {\n            int requiredBits = 13 - accumBits;\n            if (inputTotalBitsAvailable < requiredBits) {\n                requiredBits = inputTotalBitsAvailable;\n            }\n\n            while (requiredBits > 0) {\n                int curInput = (secret[inputIndex] & (1 << inputBitsAvailable) - 1) & 0xff;\n                int bitsToRead = Math.min(requiredBits, inputBitsAvailable);\n\n                curInput >>= inputBitsAvailable - bitsToRead;\n                accum = (char) (accum << bitsToRead | curInput);\n\n                inputTotalBitsAvailable -= bitsToRead;\n                requiredBits -= bitsToRead;\n                inputBitsAvailable -= bitsToRead;\n                accumBits += bitsToRead;\n\n                if (inputBitsAvailable == 0) {\n                    inputIndex += 1;\n                    inputBitsAvailable = 8;\n                }\n            }\n\n            if (accumBits == 13) {\n                accum ^= 0b1_1000_1111_0011;\n            }\n            accumBits = 16 - getNumberOfLeadingZeros(accum);\n        }\n\n        if (accum != originalChecksum) {\n            throw new OtpInfoException(\"Yandex secret checksum invalid\");\n        }\n    }\n\n    private static int getNumberOfLeadingZeros(char value) {\n        if (value == 0) {\n            return 16;\n        }\n\n        int n = 0;\n        if ((value & 0xFF00) == 0) {\n            n += 8;\n            value <<= 8;\n        }\n        if ((value & 0xF000) == 0) {\n            n += 4;\n            value <<= 4;\n        }\n        if ((value & 0xC000) == 0) {\n            n += 2;\n            value <<= 2;\n        }\n        if ((value & 0x8000) == 0) {\n            n++;\n        }\n\n        return n;\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/receivers/QsTileRefreshReceiver.java",
    "content": "package com.beemdevelopment.aegis.receivers;\n\nimport static android.content.Intent.ACTION_BOOT_COMPLETED;\n\nimport android.content.BroadcastReceiver;\nimport android.content.ComponentName;\nimport android.content.Context;\nimport android.content.Intent;\nimport android.os.Build;\nimport android.service.quicksettings.TileService;\n\nimport com.beemdevelopment.aegis.services.LaunchAppTileService;\nimport com.beemdevelopment.aegis.services.LaunchScannerTileService;\n\npublic class QsTileRefreshReceiver extends BroadcastReceiver {\n    @Override\n    public void onReceive(Context context, Intent intent) {\n        if (intent.getAction() == null\n                || (!intent.getAction().equals(ACTION_BOOT_COMPLETED)\n                && !intent.getAction().equals(Intent.ACTION_USER_UNLOCKED))) {\n            return;\n        }\n\n        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {\n            TileService.requestListeningState(context,\n                    new ComponentName(context, LaunchAppTileService.class));\n            TileService.requestListeningState(context,\n                    new ComponentName(context, LaunchScannerTileService.class));\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/receivers/VaultLockReceiver.java",
    "content": "package com.beemdevelopment.aegis.receivers;\n\nimport android.content.BroadcastReceiver;\nimport android.content.Context;\nimport android.content.Intent;\n\nimport com.beemdevelopment.aegis.BuildConfig;\nimport com.beemdevelopment.aegis.Preferences;\nimport com.beemdevelopment.aegis.vault.VaultManager;\n\nimport javax.inject.Inject;\n\nimport dagger.hilt.android.AndroidEntryPoint;\n\n@AndroidEntryPoint\npublic class VaultLockReceiver extends BroadcastReceiver {\n    public static final String ACTION_LOCK_VAULT\n            = String.format(\"%s.LOCK_VAULT\", BuildConfig.APPLICATION_ID);\n\n    @Inject\n    protected VaultManager _vaultManager;\n\n    @Override\n    public void onReceive(Context context, Intent intent) {\n        if (intent.getAction() == null\n                || (!intent.getAction().equals(ACTION_LOCK_VAULT)\n                && !intent.getAction().equals(Intent.ACTION_SCREEN_OFF))) {\n            return;\n        }\n\n        if (_vaultManager.isAutoLockEnabled(Preferences.AUTO_LOCK_ON_DEVICE_LOCK)) {\n            _vaultManager.lock(false);\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/services/LaunchAppTileService.java",
    "content": "package com.beemdevelopment.aegis.services;\n\nimport android.annotation.SuppressLint;\nimport android.app.PendingIntent;\nimport android.content.Intent;\nimport android.os.Build;\nimport android.service.quicksettings.Tile;\nimport android.service.quicksettings.TileService;\n\nimport androidx.annotation.RequiresApi;\n\nimport com.beemdevelopment.aegis.ui.MainActivity;\n\n@RequiresApi(api = Build.VERSION_CODES.N)\npublic class LaunchAppTileService extends TileService {\n\n    @Override\n    public void onStartListening() {\n        super.onStartListening();\n        Tile tile = getQsTile();\n        if (tile != null) {\n            tile.setState(Tile.STATE_INACTIVE);\n            tile.updateTile();\n        }\n    }\n\n    @SuppressLint(\"StartActivityAndCollapseDeprecated\")\n    @Override\n    public void onClick() {\n        super.onClick();\n\n        Intent intent = new Intent(this, MainActivity.class);\n        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);\n        intent.setAction(Intent.ACTION_MAIN);\n\n        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE) {\n            int flags = PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE;\n            PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, flags);\n            startActivityAndCollapse(pendingIntent);\n        } else {\n            startActivityAndCollapse(intent);\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/services/LaunchScannerTileService.java",
    "content": "package com.beemdevelopment.aegis.services;\n\nimport android.annotation.SuppressLint;\nimport android.app.PendingIntent;\nimport android.content.Intent;\nimport android.os.Build;\nimport android.service.quicksettings.Tile;\nimport android.service.quicksettings.TileService;\n\nimport androidx.annotation.RequiresApi;\n\nimport com.beemdevelopment.aegis.ui.MainActivity;\n\n@RequiresApi(api = Build.VERSION_CODES.N)\npublic class LaunchScannerTileService extends TileService {\n\n    @Override\n    public void onStartListening() {\n        super.onStartListening();\n        Tile tile = getQsTile();\n        if (tile != null) {\n            tile.setState(Tile.STATE_INACTIVE);\n            tile.updateTile();\n        }\n    }\n\n    @SuppressLint(\"StartActivityAndCollapseDeprecated\")\n    @Override\n    public void onClick() {\n        super.onClick();\n\n        Intent intent = new Intent(this, MainActivity.class);\n        intent.putExtra(\"action\", \"scan\");\n        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);\n        intent.setAction(Intent.ACTION_MAIN);\n\n        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE) {\n            int flags = PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE;\n            PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, flags);\n            startActivityAndCollapse(pendingIntent);\n        } else {\n            startActivityAndCollapse(intent);\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/services/NotificationService.java",
    "content": "package com.beemdevelopment.aegis.services;\n\nimport android.annotation.SuppressLint;\nimport android.app.PendingIntent;\nimport android.app.Service;\nimport android.content.Intent;\nimport android.os.IBinder;\n\nimport androidx.annotation.Nullable;\nimport androidx.core.app.NotificationCompat;\nimport androidx.core.app.NotificationManagerCompat;\n\nimport com.beemdevelopment.aegis.BuildConfig;\nimport com.beemdevelopment.aegis.R;\nimport com.beemdevelopment.aegis.receivers.VaultLockReceiver;\n\npublic class NotificationService extends Service {\n    private static final int NOTIFICATION_VAULT_UNLOCKED = 1;\n\n    private static final String CHANNEL_ID = \"lock_status_channel\";\n\n    @Override\n    public int onStartCommand(Intent intent,int flags, int startId){\n        super.onStartCommand(intent, flags, startId);\n        serviceMethod();\n        return Service.START_STICKY;\n    }\n\n    @SuppressLint(\"LaunchActivityFromNotification\")\n    public void serviceMethod() {\n        int flags = PendingIntent.FLAG_ONE_SHOT | PendingIntent.FLAG_IMMUTABLE;\n        Intent intent = new Intent(this, VaultLockReceiver.class);\n        intent.setAction(VaultLockReceiver.ACTION_LOCK_VAULT);\n        intent.setPackage(BuildConfig.APPLICATION_ID);\n        PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 1, intent, flags);\n\n        NotificationCompat.Builder builder = new NotificationCompat.Builder(this, CHANNEL_ID)\n                .setSmallIcon(R.drawable.ic_aegis_notification)\n                .setContentTitle(getString(R.string.app_name_full))\n                .setContentText(getString(R.string.vault_unlocked_state))\n                .setPriority(NotificationCompat.PRIORITY_DEFAULT)\n                .setOngoing(true)\n                .setContentIntent(pendingIntent);\n\n        // NOTE: Disabled for now. See issue: #1047\n        //startForeground(NOTIFICATION_VAULT_UNLOCKED, builder.build());\n    }\n\n    @Override\n    public void onDestroy() {\n        NotificationManagerCompat notificationManager = NotificationManagerCompat.from(this);\n        notificationManager.cancel(NOTIFICATION_VAULT_UNLOCKED);\n        super.onDestroy();\n    }\n\n    @Override\n    public void onTaskRemoved(Intent rootIntent) {\n        super.onTaskRemoved(rootIntent);\n        stopSelf();\n    }\n\n    @Nullable\n    @Override\n    public IBinder onBind(Intent intent) {\n        return null;\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/ui/AboutActivity.java",
    "content": "package com.beemdevelopment.aegis.ui;\n\nimport android.content.ClipData;\nimport android.content.ClipboardManager;\nimport android.content.Context;\nimport android.content.Intent;\nimport android.net.Uri;\nimport android.os.Bundle;\nimport android.view.MenuItem;\nimport android.view.View;\nimport android.widget.TextView;\nimport android.widget.Toast;\n\nimport androidx.annotation.AttrRes;\nimport androidx.annotation.StringRes;\nimport androidx.core.graphics.Insets;\nimport androidx.core.view.ViewCompat;\nimport androidx.core.view.WindowInsetsCompat;\n\nimport com.beemdevelopment.aegis.BuildConfig;\nimport com.beemdevelopment.aegis.R;\nimport com.beemdevelopment.aegis.ui.dialogs.ChangelogDialog;\nimport com.beemdevelopment.aegis.ui.dialogs.LicenseDialog;\nimport com.beemdevelopment.aegis.helpers.ViewHelper;\nimport com.google.android.material.color.MaterialColors;\n\npublic class AboutActivity extends AegisActivity {\n\n    private static String GITHUB = \"https://github.com/beemdevelopment/Aegis\";\n    private static String WEBSITE_ALEXANDER = \"https://alexbakker.me\";\n    private static String GITHUB_MICHAEL = \"https://github.com/michaelschattgen\";\n\n    private static String MAIL_BEEMDEVELOPMENT = \"beemdevelopment@gmail.com\";\n    private static String WEBSITE_BEEMDEVELOPMENT = \"https://beem.dev/\";\n    private static String PLAYSTORE_BEEMDEVELOPMENT = \"https://play.google.com/store/apps/details?id=com.beemdevelopment.aegis\";\n\n    @Override\n    protected void onCreate(Bundle savedInstanceState) {\n        super.onCreate(savedInstanceState);\n        if (abortIfOrphan(savedInstanceState)) {\n            return;\n        }\n\n        setContentView(R.layout.activity_about);\n        setSupportActionBar(findViewById(R.id.toolbar));\n        ViewHelper.setupAppBarInsets(findViewById(R.id.app_bar_layout));\n\n        if (getSupportActionBar() != null) {\n            getSupportActionBar().setDisplayHomeAsUpEnabled(true);\n            getSupportActionBar().setDisplayShowHomeEnabled(true);\n        }\n\n        View btnLicense = findViewById(R.id.btn_license);\n        btnLicense.setOnClickListener(v -> {\n            LicenseDialog.create()\n                    .setTheme(_themeHelper.getConfiguredTheme())\n                    .show(getSupportFragmentManager(), null);\n        });\n\n        View btnThirdPartyLicenses = findViewById(R.id.btn_third_party_licenses);\n        btnThirdPartyLicenses.setOnClickListener(v -> {\n            Intent intent = new Intent(this, LicensesActivity.class);\n            startActivity(intent);\n        });\n\n        TextView appVersion = findViewById(R.id.app_version);\n        appVersion.setText(getCurrentAppVersion());\n\n        View btnAppVersion = findViewById(R.id.btn_app_version);\n        btnAppVersion.setOnClickListener(v -> {\n            copyToClipboard(getCurrentAppVersion(), R.string.version_copied);\n        });\n\n        View btnGithub = findViewById(R.id.btn_github);\n        btnGithub.setOnClickListener(v -> openUrl(GITHUB));\n\n        View btnAlexander = findViewById(R.id.btn_alexander);\n        btnAlexander.setOnClickListener(v -> openUrl(WEBSITE_ALEXANDER));\n\n        View btnMichael = findViewById(R.id.btn_michael);\n        btnMichael.setOnClickListener(v -> openUrl(GITHUB_MICHAEL));\n\n        View btnMail = findViewById(R.id.btn_email);\n        btnMail.setOnClickListener(v -> openMail(MAIL_BEEMDEVELOPMENT));\n\n        View btnWebsite = findViewById(R.id.btn_website);\n        btnWebsite.setOnClickListener(v -> openUrl(WEBSITE_BEEMDEVELOPMENT));\n\n        View btnRate = findViewById(R.id.btn_rate);\n        btnRate.setOnClickListener(v -> openUrl(PLAYSTORE_BEEMDEVELOPMENT ));\n\n        View btnChangelog = findViewById(R.id.btn_changelog);\n        btnChangelog.setOnClickListener(v -> {\n            ChangelogDialog.create()\n                    .setTheme(_themeHelper.getConfiguredTheme())\n                    .show(getSupportFragmentManager(), null);\n        });\n\n        ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.about_scroll_view), (targetView, windowInsets) -> {\n            Insets insets = windowInsets.getInsets(WindowInsetsCompat.Type.systemBars() | WindowInsetsCompat.Type.displayCutout());\n            targetView.setPadding(\n                    0,\n                    0,\n                    0,\n                    insets.bottom\n            );\n            return WindowInsetsCompat.CONSUMED;\n        });\n    }\n\n    private static String getCurrentAppVersion() {\n        if (BuildConfig.DEBUG) {\n            return String.format(\"%s-%s (%s)\", BuildConfig.VERSION_NAME, BuildConfig.GIT_HASH, BuildConfig.GIT_BRANCH);\n        }\n\n        return BuildConfig.VERSION_NAME;\n    }\n\n    private void openUrl(String url) {\n        Intent browserIntent = new Intent(Intent.ACTION_VIEW);\n        browserIntent.setData(Uri.parse(url));\n        browserIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);\n\n        startActivity(browserIntent);\n    }\n\n    private void copyToClipboard(String text, @StringRes int messageId) {\n        ClipboardManager clipboard = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);\n        ClipData data = ClipData.newPlainText(\"text/plain\", text);\n        clipboard.setPrimaryClip(data);\n        Toast.makeText(this, messageId, Toast.LENGTH_SHORT).show();\n    }\n\n    private void openMail(String mailaddress) {\n        Intent mailIntent = new Intent(Intent.ACTION_SENDTO);\n        mailIntent.setData(Uri.parse(\"mailto:\" + mailaddress));\n        mailIntent.putExtra(Intent.EXTRA_EMAIL, mailaddress);\n        mailIntent.putExtra(Intent.EXTRA_SUBJECT, R.string.app_name_full);\n\n        startActivity(Intent.createChooser(mailIntent, getString(R.string.email)));\n    }\n\n    private String getThemeColorAsHex(@AttrRes int attributeId) {\n        int color = MaterialColors.getColor(this, attributeId, getClass().getCanonicalName());\n        return String.format(\"%06X\", 0xFFFFFF & color);\n    }\n\n    @Override\n    public boolean onOptionsItemSelected(MenuItem item) {\n        switch (item.getItemId()) {\n            case android.R.id.home:\n                finish();\n                break;\n            default:\n                return super.onOptionsItemSelected(item);\n        }\n\n        return true;\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/ui/AegisActivity.java",
    "content": "package com.beemdevelopment.aegis.ui;\n\nimport android.annotation.SuppressLint;\nimport android.app.Activity;\nimport android.content.Intent;\nimport android.content.res.Configuration;\nimport android.graphics.drawable.Drawable;\nimport android.os.Bundle;\nimport android.view.View;\nimport android.view.ViewGroup;\nimport android.view.WindowManager;\nimport android.widget.Toast;\n\nimport androidx.annotation.CallSuper;\nimport androidx.annotation.NonNull;\nimport androidx.appcompat.app.AppCompatActivity;\nimport androidx.appcompat.view.ActionMode;\nimport androidx.core.view.ViewPropertyAnimatorCompat;\n\nimport com.beemdevelopment.aegis.Preferences;\nimport com.beemdevelopment.aegis.R;\nimport com.beemdevelopment.aegis.ThemeMap;\nimport com.beemdevelopment.aegis.database.AuditLogRepository;\nimport com.beemdevelopment.aegis.helpers.ThemeHelper;\nimport com.beemdevelopment.aegis.icons.IconPackManager;\nimport com.beemdevelopment.aegis.vault.VaultManager;\nimport com.beemdevelopment.aegis.vault.VaultRepositoryException;\nimport com.google.android.material.appbar.AppBarLayout;\nimport com.google.android.material.color.MaterialColors;\n\nimport java.lang.reflect.Field;\nimport java.lang.reflect.InvocationTargetException;\nimport java.lang.reflect.Method;\nimport java.util.Locale;\n\nimport javax.inject.Inject;\n\nimport dagger.hilt.InstallIn;\nimport dagger.hilt.android.AndroidEntryPoint;\nimport dagger.hilt.android.EarlyEntryPoint;\nimport dagger.hilt.android.EarlyEntryPoints;\nimport dagger.hilt.components.SingletonComponent;\n\n@AndroidEntryPoint\npublic abstract class AegisActivity extends AppCompatActivity implements VaultManager.LockListener {\n    protected Preferences _prefs;\n    protected ThemeHelper _themeHelper;\n\n    @Inject\n    protected VaultManager _vaultManager;\n\n    @Inject\n    protected AuditLogRepository _auditLogRepository;\n\n    @Inject\n    protected IconPackManager _iconPackManager;\n\n    private ActionModeStatusGuardHack _statusGuardHack;\n\n    @Override\n    protected void onCreate(Bundle savedInstanceState) {\n        // set the theme and locale before creating the activity\n        _prefs = EarlyEntryPoints.get(getApplicationContext(), PrefEntryPoint.class).getPreferences();\n        _themeHelper = new ThemeHelper(this, _prefs);\n        onSetTheme();\n        setLocale(_prefs.getLocale());\n        super.onCreate(savedInstanceState);\n\n        _statusGuardHack = new ActionModeStatusGuardHack();\n\n        // set FLAG_SECURE on the window of every AegisActivity\n        if (_prefs.isSecureScreenEnabled()) {\n            getWindow().addFlags(WindowManager.LayoutParams.FLAG_SECURE);\n        }\n\n        // register a callback to listen for lock events\n        _vaultManager.registerLockListener(this);\n    }\n\n    @Override\n    @CallSuper\n    protected void onDestroy() {\n        _vaultManager.unregisterLockListener(this);\n        super.onDestroy();\n    }\n\n    @CallSuper\n    @Override\n    protected void onResume() {\n        super.onResume();\n        _vaultManager.setBlockAutoLock(false);\n    }\n\n    @SuppressLint(\"SoonBlockedPrivateApi\")\n    @SuppressWarnings(\"JavaReflectionMemberAccess\")\n    @Override\n    public void onLocked(boolean userInitiated) {\n        setResult(RESULT_CANCELED, null);\n\n        try {\n            // Call a private overload of the finish() method to prevent the app\n            // from disappearing from the recent apps menu\n            Method method = Activity.class.getDeclaredMethod(\"finish\", int.class);\n            method.setAccessible(true);\n            method.invoke(this, 2); // FINISH_TASK_WITH_ACTIVITY = 2\n        } catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException e) {\n            // On recent Android versions, the overload  of the finish() method\n            // used above is no longer accessible\n            finishAndRemoveTask();\n        }\n    }\n\n    /**\n     * Called when the activity is expected to set its theme.\n     */\n    protected void onSetTheme() {\n        _themeHelper.setTheme(ThemeMap.DEFAULT);\n    }\n\n    protected void setLocale(Locale locale) {\n        Locale.setDefault(locale);\n\n        Configuration config = new Configuration();\n        config.locale = locale;\n\n        getResources().updateConfiguration(config, getResources().getDisplayMetrics());\n    }\n\n    protected boolean saveVault() {\n        try {\n            _vaultManager.save();\n            return true;\n        } catch (VaultRepositoryException e) {\n            Toast.makeText(this, getString(R.string.saving_error), Toast.LENGTH_LONG).show();\n            return false;\n        }\n    }\n\n    protected boolean saveAndBackupVault() {\n        try {\n            _vaultManager.saveAndBackup();\n            return true;\n        } catch (VaultRepositoryException e) {\n            Toast.makeText(this, getString(R.string.saving_error), Toast.LENGTH_LONG).show();\n            return false;\n        }\n    }\n\n    /**\n     * Closes this activity if it has become an orphan (isOrphan() == true) and launches MainActivity.\n     * @param savedInstanceState the bundle passed to onCreate.\n     * @return whether to abort onCreate.\n     */\n    protected boolean abortIfOrphan(Bundle savedInstanceState) {\n        if (savedInstanceState == null || !isOrphan()) {\n            return false;\n        }\n\n        Intent intent = new Intent(this, MainActivity.class);\n        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);\n        startActivity(intent);\n        finish();\n        return true;\n    }\n\n    @Override\n    public void onSupportActionModeStarted(@NonNull ActionMode mode) {\n        super.onSupportActionModeStarted(mode);\n        _statusGuardHack.apply(View.VISIBLE);\n    }\n\n    @Override\n    public void onSupportActionModeFinished(@NonNull ActionMode mode) {\n        super.onSupportActionModeFinished(mode);\n        _statusGuardHack.apply(View.GONE);\n    }\n\n    /**\n     * When starting/finishing an action mode, forcefully cancel the fade in/out animation and\n     * set the status bar color. This requires the abc_decor_view_status_guard colors to be set\n     * to transparent.\n     *\n     * This should fix any inconsistencies between the color of the action bar and the status bar\n     * when an action mode is active.\n     */\n    private class ActionModeStatusGuardHack {\n        private Field _fadeAnimField;\n        private Field _actionModeViewField;\n        private Drawable _appBarBackground;\n\n        private ActionModeStatusGuardHack() {\n            try {\n                _fadeAnimField = getDelegate().getClass().getDeclaredField(\"mFadeAnim\");\n                _fadeAnimField.setAccessible(true);\n                _actionModeViewField = getDelegate().getClass().getDeclaredField(\"mActionModeView\");\n                _actionModeViewField.setAccessible(true);\n            } catch (NoSuchFieldException ignored) {\n            }\n        }\n\n        private void apply(int visibility) {\n            if (_fadeAnimField == null || _actionModeViewField == null) {\n                return;\n            }\n\n            ViewPropertyAnimatorCompat fadeAnim;\n            ViewGroup actionModeView;\n            try {\n                fadeAnim = (ViewPropertyAnimatorCompat) _fadeAnimField.get(getDelegate());\n                actionModeView = (ViewGroup) _actionModeViewField.get(getDelegate());\n            } catch (IllegalAccessException e) {\n                return;\n            }\n\n            AppBarLayout appBarLayout = findViewById(R.id.app_bar_layout);\n            if (appBarLayout != null && _appBarBackground == null) {\n                _appBarBackground = appBarLayout.getBackground();\n            }\n\n            if (fadeAnim == null || actionModeView == null || appBarLayout == null || _appBarBackground == null) {\n                return;\n            }\n\n            fadeAnim.cancel();\n\n            if (visibility == View.VISIBLE) {\n                actionModeView.setVisibility(visibility);\n                actionModeView.setAlpha(1f);\n                int color = MaterialColors.getColor(appBarLayout, com.google.android.material.R.attr.colorSurfaceContainer);\n                appBarLayout.setBackgroundColor(color);\n            } else {\n                actionModeView.setVisibility(visibility);\n                actionModeView.setAlpha(0f);\n                appBarLayout.setBackground(_appBarBackground);\n            }\n        }\n    }\n\n    /**\n     * Reports whether this Activity instance has become an orphan. This can happen if\n     * the vault was killed/locked by an external trigger while the Activity was still open.\n     */\n    private boolean isOrphan() {\n        return !(this instanceof MainActivity)\n                && !(this instanceof AuthActivity)\n                && !(this instanceof IntroActivity)\n                && !_vaultManager.isVaultLoaded();\n    }\n\n    @EarlyEntryPoint\n    @InstallIn(SingletonComponent.class)\n    public interface PrefEntryPoint {\n        Preferences getPreferences();\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/ui/AssignIconsActivity.java",
    "content": "package com.beemdevelopment.aegis.ui;\n\nimport android.content.Intent;\nimport android.graphics.Rect;\nimport android.graphics.drawable.Drawable;\nimport android.os.Bundle;\nimport android.view.Menu;\nimport android.view.MenuItem;\nimport android.view.View;\nimport android.widget.Toast;\n\nimport androidx.activity.OnBackPressedCallback;\nimport androidx.annotation.NonNull;\nimport androidx.annotation.Nullable;\nimport androidx.recyclerview.widget.LinearLayoutManager;\nimport androidx.recyclerview.widget.RecyclerView;\n\nimport com.beemdevelopment.aegis.R;\nimport com.beemdevelopment.aegis.helpers.MetricsHelper;\nimport com.beemdevelopment.aegis.icons.IconPack;\nimport com.beemdevelopment.aegis.ui.dialogs.Dialogs;\nimport com.beemdevelopment.aegis.ui.dialogs.IconPickerDialog;\nimport com.beemdevelopment.aegis.ui.glide.GlideHelper;\nimport com.beemdevelopment.aegis.ui.models.AssignIconEntry;\nimport com.beemdevelopment.aegis.ui.views.AssignIconAdapter;\nimport com.beemdevelopment.aegis.ui.views.IconAdapter;\nimport com.beemdevelopment.aegis.util.IOUtils;\nimport com.beemdevelopment.aegis.helpers.ViewHelper;\nimport com.beemdevelopment.aegis.vault.VaultEntry;\nimport com.beemdevelopment.aegis.vault.VaultEntryIcon;\nimport com.bumptech.glide.Glide;\nimport com.bumptech.glide.ListPreloader;\nimport com.bumptech.glide.RequestBuilder;\nimport com.bumptech.glide.integration.recyclerview.RecyclerViewPreloader;\nimport com.bumptech.glide.util.ViewPreloadSizeProvider;\nimport com.google.android.material.bottomsheet.BottomSheetDialog;\n\nimport java.io.FileInputStream;\nimport java.io.IOException;\nimport java.util.ArrayList;\nimport java.util.Collections;\nimport java.util.Comparator;\nimport java.util.List;\nimport java.util.Optional;\nimport java.util.UUID;\nimport java.util.stream.Collectors;\n\npublic class AssignIconsActivity extends AegisActivity implements AssignIconAdapter.Listener {\n    private AssignIconAdapter _adapter;\n    private ArrayList<AssignIconEntry> _entries = new ArrayList<>();\n    private RecyclerView _entriesView;\n    private AssignIconsActivity.BackPressHandler _backPressHandler;\n    private ViewPreloadSizeProvider<AssignIconEntry> _preloadSizeProvider;\n    private IconPack _favoriteIconPack;\n\n    @Override\n    protected void onCreate(Bundle savedInstanceState) {\n        super.onCreate(savedInstanceState);\n        if (abortIfOrphan(savedInstanceState)) {\n            return;\n        }\n\n        setContentView(R.layout.activity_assign_icons);\n        setSupportActionBar(findViewById(R.id.toolbar));\n        ViewHelper.setupAppBarInsets(findViewById(R.id.app_bar_layout));\n        if (getSupportActionBar() != null) {\n            getSupportActionBar().setDisplayHomeAsUpEnabled(true);\n            getSupportActionBar().setDisplayShowHomeEnabled(true);\n        }\n\n        ArrayList<UUID> assignIconEntriesIds = (ArrayList<UUID>) getIntent().getSerializableExtra(\"entries\");\n        for (UUID entryId: assignIconEntriesIds) {\n            VaultEntry vaultEntry = _vaultManager.getVault().getEntryByUUID(entryId);\n            _entries.add(new AssignIconEntry(vaultEntry));\n        }\n\n        _backPressHandler = new AssignIconsActivity.BackPressHandler();\n        getOnBackPressedDispatcher().addCallback(this, _backPressHandler);\n\n        IconPreloadProvider modelProvider1 = new IconPreloadProvider();\n        EntryIconPreloadProvider modelProvider2 = new EntryIconPreloadProvider();\n        _preloadSizeProvider = new ViewPreloadSizeProvider<>();\n        RecyclerViewPreloader<IconPack.Icon> preloader1 = new RecyclerViewPreloader(this, modelProvider1, _preloadSizeProvider, 10);\n        RecyclerViewPreloader<VaultEntry> preloader2 = new RecyclerViewPreloader(this, modelProvider2, _preloadSizeProvider, 10);\n\n        _adapter = new AssignIconAdapter(this);\n        _entriesView = findViewById(R.id.list_assign_icons);\n        LinearLayoutManager layoutManager = new LinearLayoutManager(this);\n        _entriesView.setLayoutManager(layoutManager);\n        _entriesView.setAdapter(_adapter);\n        _entriesView.setNestedScrollingEnabled(false);\n        _entriesView.addItemDecoration(new SpacesItemDecoration(8));\n        _entriesView.addOnScrollListener(preloader1);\n        _entriesView.addOnScrollListener(preloader2);\n\n        Optional<IconPack> favoriteIconPack = _iconPackManager.getIconPacks().stream()\n                .sorted(Comparator.comparing(IconPack::getName))\n                .findFirst();\n\n        if (!favoriteIconPack.isPresent()) {\n            throw new RuntimeException(String.format(\"Started %s without any icon packs present\", AssignIconsActivity.class.getName()));\n        }\n\n        _favoriteIconPack = favoriteIconPack.get();\n\n        for (AssignIconEntry entry : _entries) {\n            IconPack.Icon suggestedIcon = findSuggestedIcon(entry);\n            if (suggestedIcon != null) {\n                entry.setNewIcon(suggestedIcon);\n            }\n        }\n\n        _adapter.addEntries(_entries);\n    }\n\n    private IconPack.Icon findSuggestedIcon(AssignIconEntry entry) {\n        List<IconPack.Icon> suggestedIcons = _favoriteIconPack.getSuggestedIcons(entry.getEntry().getIssuer());\n        if (suggestedIcons.size() > 0) {\n            return suggestedIcons.get(0);\n        }\n\n        return null;\n    }\n\n    private void saveAndFinish() throws IOException {\n        ArrayList<UUID> uuids = new ArrayList<>();\n        for (AssignIconEntry selectedEntry : _entries) {\n            VaultEntry entry = selectedEntry.getEntry();\n            if (selectedEntry.getNewIcon() != null) {\n                byte[] iconBytes;\n                try (FileInputStream inStream = new FileInputStream(selectedEntry.getNewIcon().getFile())){\n                    iconBytes = IOUtils.readFile(inStream);\n                }\n\n                VaultEntryIcon icon = new VaultEntryIcon(iconBytes, selectedEntry.getNewIcon().getIconType());\n                entry.setIcon(icon);\n                uuids.add(entry.getUUID());\n\n                _vaultManager.getVault().replaceEntry(entry);\n            }\n        }\n\n        Intent intent = new Intent();\n        intent.putExtra(\"entryUUIDs\", uuids);\n\n        if (saveAndBackupVault()) {\n            setResult(RESULT_OK, intent);\n            finish();\n        }\n    }\n\n    private void discardAndFinish() {\n        Dialogs.showDiscardDialog(this,\n                (dialog, which) -> {\n                    try {\n                        saveAndFinish();\n                    } catch (IOException e) {\n                        Toast.makeText(this, R.string.saving_assign_icons_error, Toast.LENGTH_SHORT).show();\n                    }\n                },\n                (dialog, which) -> finish());\n    }\n\n    @Override\n    public boolean onCreateOptionsMenu(Menu menu) {\n        getMenuInflater().inflate(R.menu.menu_assign_icons, menu);\n        return true;\n    }\n\n    @Override\n    public boolean onOptionsItemSelected(MenuItem item) {\n        int itemId = item.getItemId();\n        if (itemId == android.R.id.home) {\n            discardAndFinish();\n        } else if (itemId == R.id.action_save) {\n            try {\n                saveAndFinish();\n            } catch (IOException e) {\n                Toast.makeText(this, R.string.saving_assign_icons_error, Toast.LENGTH_SHORT).show();\n            }\n        } else {\n            return super.onOptionsItemSelected(item);\n        }\n\n        return true;\n    }\n\n    @Override\n    public void onAssignIconEntryClick(AssignIconEntry entry) {\n        List<IconPack> iconPacks = _iconPackManager.getIconPacks().stream()\n                .sorted(Comparator.comparing(IconPack::getName))\n                .collect(Collectors.toList());\n\n        BottomSheetDialog dialog = IconPickerDialog.create(this, iconPacks, entry.getEntry().getIssuer(), false, new IconAdapter.Listener() {\n            @Override\n            public void onIconSelected(IconPack.Icon icon) {\n                entry.setNewIcon(icon);\n            }\n\n            @Override\n            public void onCustomSelected() { }\n        });\n        Dialogs.showSecureDialog(dialog);\n    }\n\n    @Override\n    public void onSetPreloadView(View view) {\n        _preloadSizeProvider.setView(view);\n    }\n\n    private class BackPressHandler extends OnBackPressedCallback {\n        public BackPressHandler() {\n            super(false);\n        }\n\n        @Override\n        public void handleOnBackPressed() {\n            discardAndFinish();\n        }\n    }\n\n    private class EntryIconPreloadProvider implements ListPreloader.PreloadModelProvider<VaultEntry> {\n        @NonNull\n        @Override\n        public List<VaultEntry> getPreloadItems(int position) {\n            VaultEntry entry = _entries.get(position).getEntry();\n            if (entry.hasIcon()) {\n                return Collections.singletonList(entry);\n            }\n            return Collections.emptyList();\n        }\n\n        @Nullable\n        @Override\n        public RequestBuilder<Drawable> getPreloadRequestBuilder(@NonNull VaultEntry entry) {\n            RequestBuilder<Drawable> rb = Glide.with(AssignIconsActivity.this)\n                    .load(entry.getIcon());\n            return GlideHelper.setCommonOptions(rb, entry.getIcon().getType());\n        }\n    }\n\n    private class IconPreloadProvider implements ListPreloader.PreloadModelProvider<IconPack.Icon> {\n        @NonNull\n        @Override\n        public List<IconPack.Icon> getPreloadItems(int position) {\n            AssignIconEntry entry = _entries.get(position);\n            if (entry.getNewIcon() != null) {\n                return Collections.singletonList(entry.getNewIcon());\n            }\n            return Collections.emptyList();\n        }\n\n        @Nullable\n        @Override\n        public RequestBuilder<Drawable> getPreloadRequestBuilder(@NonNull IconPack.Icon icon) {\n            RequestBuilder<Drawable> rb = Glide.with(AssignIconsActivity.this)\n                    .load(icon.getFile());\n            return GlideHelper.setCommonOptions(rb, icon.getIconType());\n        }\n    }\n\n    private class SpacesItemDecoration extends RecyclerView.ItemDecoration {\n        private final int _space;\n\n        public SpacesItemDecoration(int dpSpace) {\n\n            this._space = MetricsHelper.convertDpToPixels(AssignIconsActivity.this, dpSpace);\n        }\n\n        @Override\n        public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {\n            outRect.left = _space;\n            outRect.right = _space;\n            outRect.bottom = _space;\n\n            if (parent.getChildLayoutPosition(view) == 0) {\n                outRect.top = _space;\n            }\n        }\n    }\n}"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/ui/AuthActivity.java",
    "content": "package com.beemdevelopment.aegis.ui;\n\nimport android.content.Context;\nimport android.content.Intent;\nimport android.os.Bundle;\nimport android.text.InputType;\nimport android.view.KeyEvent;\nimport android.view.View;\nimport android.view.ViewGroup;\nimport android.view.WindowManager;\nimport android.view.inputmethod.EditorInfo;\nimport android.view.inputmethod.InputMethodManager;\nimport android.widget.Button;\nimport android.widget.EditText;\nimport android.widget.LinearLayout;\nimport android.widget.PopupWindow;\nimport android.widget.TextView;\nimport android.widget.Toast;\n\nimport androidx.activity.OnBackPressedCallback;\nimport androidx.annotation.NonNull;\nimport androidx.biometric.BiometricPrompt;\n\nimport com.beemdevelopment.aegis.R;\nimport com.beemdevelopment.aegis.crypto.KeyStoreHandle;\nimport com.beemdevelopment.aegis.crypto.KeyStoreHandleException;\nimport com.beemdevelopment.aegis.crypto.MasterKey;\nimport com.beemdevelopment.aegis.helpers.BiometricsHelper;\nimport com.beemdevelopment.aegis.helpers.EditTextHelper;\nimport com.beemdevelopment.aegis.helpers.MetricsHelper;\nimport com.beemdevelopment.aegis.helpers.UiThreadExecutor;\nimport com.beemdevelopment.aegis.ui.dialogs.Dialogs;\nimport com.beemdevelopment.aegis.ui.tasks.PasswordSlotDecryptTask;\nimport com.beemdevelopment.aegis.vault.VaultFile;\nimport com.beemdevelopment.aegis.vault.VaultFileCredentials;\nimport com.beemdevelopment.aegis.vault.VaultRepository;\nimport com.beemdevelopment.aegis.vault.VaultRepositoryException;\nimport com.beemdevelopment.aegis.vault.slots.BiometricSlot;\nimport com.beemdevelopment.aegis.vault.slots.PasswordSlot;\nimport com.beemdevelopment.aegis.vault.slots.Slot;\nimport com.beemdevelopment.aegis.vault.slots.SlotException;\nimport com.beemdevelopment.aegis.vault.slots.SlotIntegrityException;\nimport com.beemdevelopment.aegis.vault.slots.SlotList;\nimport com.google.android.material.dialog.MaterialAlertDialogBuilder;\nimport com.google.android.material.textfield.TextInputLayout;\n\nimport java.util.List;\n\nimport javax.crypto.Cipher;\nimport javax.crypto.SecretKey;\n\npublic class AuthActivity extends AegisActivity {\n    // Permission request codes\n    private static final int CODE_PERM_NOTIFICATIONS = 0;\n\n    private EditText _textPassword;\n\n    private VaultFile _vaultFile;\n    private SlotList _slots;\n\n    private SecretKey _bioKey;\n    private BiometricSlot _bioSlot;\n    private BiometricPrompt _bioPrompt;\n    private Button _decryptButton;\n\n    private int _failedUnlockAttempts;\n\n    // the first time this activity is resumed after creation, it's possible to inhibit showing the\n    // biometric prompt by setting 'inhibitBioPrompt' to true through the intent\n    private boolean _inhibitBioPrompt;\n\n    @Override\n    protected void onCreate(Bundle savedInstanceState) {\n        super.onCreate(savedInstanceState);\n        setContentView(R.layout.activity_auth);\n\n        TextInputLayout layoutStandard = findViewById(R.id.layout_standard);\n        TextInputLayout layoutNoAutofill = findViewById(R.id.layout_no_autofill);\n        EditText editStandard = findViewById(R.id.text_password);\n        EditText editNoAutofill = findViewById(R.id.text_password_no_autofill);\n\n        if (_prefs.isPinKeyboardEnabled()) {\n            layoutStandard.setVisibility(View.GONE);\n            layoutNoAutofill.setVisibility(View.VISIBLE);\n            _textPassword = editNoAutofill;\n        } else {\n            layoutStandard.setVisibility(View.VISIBLE);\n            layoutNoAutofill.setVisibility(View.GONE);\n            _textPassword = editStandard;\n        }\n\n        LinearLayout boxBiometricInfo = findViewById(R.id.box_biometric_info);\n        _decryptButton = findViewById(R.id.button_decrypt);\n        TextView biometricsButton = findViewById(R.id.button_biometrics);\n\n        getOnBackPressedDispatcher().addCallback(this, new BackPressHandler());\n\n        _textPassword.setOnEditorActionListener((v, actionId, event) -> {\n            if ((event != null && (event.getKeyCode() == KeyEvent.KEYCODE_ENTER)) || (actionId == EditorInfo.IME_ACTION_DONE)) {\n                _decryptButton.performClick();\n            }\n            return false;\n        });\n\n        Intent intent = getIntent();\n        if (savedInstanceState == null) {\n            _inhibitBioPrompt = intent.getBooleanExtra(\"inhibitBioPrompt\", false);\n\n            // A persistent notification is shown to let the user know that the vault is unlocked. Permission\n            // to do so is required since API 33, so for existing users, we have to request permission here\n            // in order to be able to show the notification after unlock.\n            //\n            // NOTE: Disabled for now. See issue: #1047\n            /*if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {\n                PermissionHelper.request(this, CODE_PERM_NOTIFICATIONS, Manifest.permission.POST_NOTIFICATIONS);\n            }*/\n        } else {\n            _inhibitBioPrompt = savedInstanceState.getBoolean(\"inhibitBioPrompt\", false);\n        }\n\n        try {\n            _vaultFile = VaultRepository.readVaultFile(this);\n        } catch (VaultRepositoryException e) {\n            Dialogs.showErrorDialog(this, R.string.vault_load_error, e, (dialog, which) -> {\n                getOnBackPressedDispatcher().onBackPressed();\n            });\n            return;\n        }\n\n        // only show the biometric prompt if the api version is new enough, permission is granted, a scanner is found and a biometric slot is found\n        _slots = _vaultFile.getHeader().getSlots();\n        if (_slots.has(BiometricSlot.class) && BiometricsHelper.isAvailable(this)) {\n            boolean invalidated = false;\n\n            try {\n                // find a biometric slot with an id that matches an alias in the keystore\n                for (BiometricSlot slot : _slots.findAll(BiometricSlot.class)) {\n                    String id = slot.getUUID().toString();\n                    KeyStoreHandle handle = new KeyStoreHandle();\n                    if (handle.containsKey(id)) {\n                        SecretKey key = handle.getKey(id);\n                        // if 'key' is null, it was permanently invalidated\n                        if (key == null) {\n                            invalidated = true;\n                            continue;\n                        }\n\n                        _bioSlot = slot;\n                        _bioKey = key;\n                        biometricsButton.setVisibility(View.VISIBLE);\n                        invalidated = false;\n                        break;\n                    }\n                }\n            } catch (KeyStoreHandleException e) {\n                e.printStackTrace();\n                Dialogs.showErrorDialog(this, R.string.biometric_init_error, e);\n            }\n\n            // display a help message if a matching invalidated keystore entry was found\n            if (invalidated) {\n                boxBiometricInfo.setVisibility(View.VISIBLE);\n                biometricsButton.setVisibility(View.GONE);\n            }\n        }\n\n        _decryptButton.setOnClickListener(v -> {\n            InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);\n            imm.hideSoftInputFromWindow(v.getWindowToken(), 0);\n\n            char[] password = EditTextHelper.getEditTextChars(_textPassword);\n            List<PasswordSlot> slots = _slots.findAll(PasswordSlot.class);\n            PasswordSlotDecryptTask.Params params = new PasswordSlotDecryptTask.Params(slots, password);\n            PasswordSlotDecryptTask task = new PasswordSlotDecryptTask(AuthActivity.this, new PasswordDerivationListener());\n            task.execute(getLifecycle(), params);\n\n            _decryptButton.setEnabled(false);\n        });\n\n        biometricsButton.setOnClickListener(v -> {\n            if (_prefs.isPasswordReminderNeeded()) {\n                Dialogs.showSecureDialog(new MaterialAlertDialogBuilder(this, R.style.ThemeOverlay_Aegis_AlertDialog_Warning)\n                        .setTitle(getString(R.string.password_reminder_dialog_title))\n                        .setMessage(getString(R.string.password_reminder_dialog_message))\n                        .setCancelable(false)\n                        .setIconAttribute(android.R.attr.alertDialogIcon)\n                        .setPositiveButton(android.R.string.ok, (dialog1, which) -> {\n                            showBiometricPrompt();\n                        })\n                        .create());\n            } else {\n                showBiometricPrompt();\n            }\n        });\n    }\n\n    @Override\n    protected void onSaveInstanceState(@NonNull Bundle outState) {\n        super.onSaveInstanceState(outState);\n        outState.putBoolean(\"inhibitBioPrompt\", _inhibitBioPrompt);\n    }\n\n    private void selectPassword() {\n        _textPassword.selectAll();\n\n        InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);\n        imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0);\n    }\n\n    @Override\n    public void onResume() {\n        super.onResume();\n\n        boolean remindPassword = _prefs.isPasswordReminderNeeded();\n        if (_bioKey == null || remindPassword) {\n            focusPasswordField();\n        }\n\n        if (_bioKey != null && _bioPrompt == null && !_inhibitBioPrompt && !remindPassword) {\n            _bioPrompt = showBiometricPrompt();\n        }\n\n        _inhibitBioPrompt = false;\n    }\n\n    @Override\n    public void onPause() {\n        if (!isChangingConfigurations() && _bioPrompt != null) {\n            _bioPrompt.cancelAuthentication();\n            _bioPrompt = null;\n        }\n\n        super.onPause();\n    }\n\n    @Override\n    public void onAttachedToWindow() {\n        if (_bioKey != null && _prefs.isPasswordReminderNeeded()) {\n            showPasswordReminder();\n        }\n    }\n\n    private void focusPasswordField() {\n        _textPassword.requestFocus();\n        getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE);\n    }\n\n    private void showPasswordReminder() {\n        View popupLayout = getLayoutInflater().inflate(R.layout.popup_password, null);\n        popupLayout.measure(View.MeasureSpec.UNSPECIFIED, View.MeasureSpec.UNSPECIFIED);\n\n        PopupWindow popup = new PopupWindow(popupLayout, ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);\n        popup.setFocusable(false);\n        popup.setOutsideTouchable(true);\n        _textPassword.post(() -> {\n            if (isFinishing() || !_textPassword.isAttachedToWindow()) {\n                return;\n            }\n\n            // calculating the actual height of the popup window does not seem possible\n            // adding 25dp seems to look good enough\n            int yoff = _textPassword.getHeight()\n                    + popupLayout.getMeasuredHeight()\n                    + MetricsHelper.convertDpToPixels(this, 25);\n            popup.showAsDropDown(_textPassword, 0, -yoff);\n        });\n        _textPassword.postDelayed(popup::dismiss, 5000);\n    }\n\n    public BiometricPrompt showBiometricPrompt() {\n        InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);\n        imm.hideSoftInputFromWindow(_textPassword.getWindowToken(), 0);\n\n        Cipher cipher;\n        try {\n            cipher = _bioSlot.createDecryptCipher(_bioKey);\n        } catch (SlotException e) {\n            e.printStackTrace();\n            Dialogs.showErrorDialog(this, R.string.biometric_init_error, e);\n            return null;\n        }\n\n        BiometricPrompt.CryptoObject cryptoObj = new BiometricPrompt.CryptoObject(cipher);\n        BiometricPrompt prompt = new BiometricPrompt(this, new UiThreadExecutor(), new BiometricPromptListener());\n\n        BiometricPrompt.PromptInfo info = new BiometricPrompt.PromptInfo.Builder()\n                .setTitle(getString(R.string.authentication))\n                .setNegativeButtonText(getString(android.R.string.cancel))\n                .setConfirmationRequired(false)\n                .build();\n        prompt.authenticate(info, cryptoObj);\n        return prompt;\n    }\n\n    private void finish(MasterKey key, boolean isSlotRepaired) {\n        VaultFileCredentials creds = new VaultFileCredentials(key, _slots);\n\n        try {\n            _vaultManager.loadFrom(_vaultFile, creds);\n            if (isSlotRepaired) {\n                saveAndBackupVault();\n            }\n        } catch (VaultRepositoryException e) {\n            e.printStackTrace();\n            Dialogs.showErrorDialog(this, R.string.decryption_corrupt_error, e);\n            return;\n        }\n\n        setResult(RESULT_OK);\n        finish();\n    }\n\n    private void onInvalidPassword() {\n        Dialogs.showSecureDialog(new MaterialAlertDialogBuilder(AuthActivity.this, R.style.ThemeOverlay_Aegis_AlertDialog_Error)\n                .setTitle(getString(R.string.unlock_vault_error))\n                .setMessage(getString(R.string.unlock_vault_error_description))\n                .setCancelable(false)\n                .setIconAttribute(android.R.attr.alertDialogIcon)\n                .setPositiveButton(android.R.string.ok, (dialog, which) -> selectPassword())\n                .create());\n\n        _failedUnlockAttempts ++;\n\n        if (_failedUnlockAttempts >= 3) {\n            _textPassword.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD);\n        }\n    }\n\n    private class BackPressHandler extends OnBackPressedCallback {\n        public BackPressHandler() {\n            super(true);\n        }\n\n        @Override\n        public void handleOnBackPressed() {\n            // This breaks predictive back gestures, but it doesn't make sense\n            // to go back to MainActivity when cancelling auth\n            setResult(RESULT_CANCELED);\n            finishAffinity();\n        }\n    }\n\n    private class PasswordDerivationListener implements PasswordSlotDecryptTask.Callback {\n        @Override\n        public void onTaskFinished(PasswordSlotDecryptTask.Result result) {\n            if (result != null) {\n                // replace the old slot with the repaired one\n                if (result.isSlotRepaired()) {\n                    _slots.replace(result.getSlot());\n                }\n\n                if (result.getSlot().getType() == Slot.TYPE_PASSWORD) {\n                    _prefs.resetPasswordReminderTimestamp();\n                }\n\n                finish(result.getKey(), result.isSlotRepaired());\n            } else {\n                _decryptButton.setEnabled(true);\n\n                _auditLogRepository.addVaultUnlockFailedPasswordEvent();\n                onInvalidPassword();\n            }\n        }\n    }\n\n    private class BiometricPromptListener extends BiometricPrompt.AuthenticationCallback {\n        @Override\n        public void onAuthenticationError(int errorCode, @NonNull CharSequence errString) {\n            super.onAuthenticationError(errorCode, errString);\n            _bioPrompt = null;\n\n            if (!BiometricsHelper.isCanceled(errorCode)) {\n                _auditLogRepository.addVaultUnlockFailedBiometricsEvent();\n                Toast.makeText(AuthActivity.this, errString, Toast.LENGTH_LONG).show();\n            }\n        }\n\n        @Override\n        public void onAuthenticationSucceeded(@NonNull BiometricPrompt.AuthenticationResult result) {\n            super.onAuthenticationSucceeded(result);\n            _bioPrompt = null;\n\n            MasterKey key;\n            BiometricSlot slot = _slots.find(BiometricSlot.class);\n\n            try {\n                key = slot.getKey(result.getCryptoObject().getCipher());\n            } catch (SlotException | SlotIntegrityException e) {\n                e.printStackTrace();\n                Dialogs.showErrorDialog(AuthActivity.this, R.string.biometric_decrypt_error, e);\n                return;\n            }\n\n            finish(key, false);\n        }\n\n        @Override\n        public void onAuthenticationFailed() {\n            super.onAuthenticationFailed();\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/ui/EditEntryActivity.java",
    "content": "package com.beemdevelopment.aegis.ui;\n\nimport android.content.Intent;\nimport android.content.res.Resources;\nimport android.graphics.Bitmap;\nimport android.graphics.drawable.BitmapDrawable;\nimport android.graphics.drawable.Drawable;\nimport android.net.Uri;\nimport android.os.Bundle;\nimport android.text.TextWatcher;\nimport android.view.Menu;\nimport android.view.MenuItem;\nimport android.view.View;\nimport android.view.ViewGroup;\nimport android.view.animation.AccelerateInterpolator;\nimport android.view.animation.AlphaAnimation;\nimport android.view.animation.Animation;\nimport android.widget.AutoCompleteTextView;\nimport android.widget.Button;\nimport android.widget.ImageView;\nimport android.widget.LinearLayout;\nimport android.widget.RelativeLayout;\nimport android.widget.TextView;\n\nimport androidx.activity.OnBackPressedCallback;\nimport androidx.activity.result.ActivityResultLauncher;\nimport androidx.activity.result.contract.ActivityResultContracts.StartActivityForResult;\nimport androidx.annotation.NonNull;\nimport androidx.annotation.Nullable;\nimport androidx.appcompat.app.ActionBar;\nimport androidx.appcompat.app.AlertDialog;\n\nimport com.amulyakhare.textdrawable.TextDrawable;\nimport com.avito.android.krop.KropView;\nimport com.beemdevelopment.aegis.R;\nimport com.beemdevelopment.aegis.encoding.Base32;\nimport com.beemdevelopment.aegis.encoding.EncodingException;\nimport com.beemdevelopment.aegis.encoding.Hex;\nimport com.beemdevelopment.aegis.helpers.AnimationsHelper;\nimport com.beemdevelopment.aegis.helpers.BitmapHelper;\nimport com.beemdevelopment.aegis.helpers.DropdownHelper;\nimport com.beemdevelopment.aegis.helpers.EditTextHelper;\nimport com.beemdevelopment.aegis.helpers.SafHelper;\nimport com.beemdevelopment.aegis.helpers.SimpleAnimationEndListener;\nimport com.beemdevelopment.aegis.helpers.SimpleTextWatcher;\nimport com.beemdevelopment.aegis.helpers.TextDrawableHelper;\nimport com.beemdevelopment.aegis.helpers.ViewHelper;\nimport com.beemdevelopment.aegis.icons.IconPack;\nimport com.beemdevelopment.aegis.icons.IconType;\nimport com.beemdevelopment.aegis.otp.GoogleAuthInfo;\nimport com.beemdevelopment.aegis.otp.HotpInfo;\nimport com.beemdevelopment.aegis.otp.MotpInfo;\nimport com.beemdevelopment.aegis.otp.OtpInfo;\nimport com.beemdevelopment.aegis.otp.OtpInfoException;\nimport com.beemdevelopment.aegis.otp.SteamInfo;\nimport com.beemdevelopment.aegis.otp.TotpInfo;\nimport com.beemdevelopment.aegis.otp.YandexInfo;\nimport com.beemdevelopment.aegis.ui.dialogs.Dialogs;\nimport com.beemdevelopment.aegis.ui.dialogs.IconPickerDialog;\nimport com.beemdevelopment.aegis.ui.glide.GlideHelper;\nimport com.beemdevelopment.aegis.ui.models.VaultGroupModel;\nimport com.beemdevelopment.aegis.ui.tasks.ImportFileTask;\nimport com.beemdevelopment.aegis.ui.views.IconAdapter;\nimport com.beemdevelopment.aegis.util.Cloner;\nimport com.beemdevelopment.aegis.util.IOUtils;\nimport com.beemdevelopment.aegis.vault.VaultEntry;\nimport com.beemdevelopment.aegis.vault.VaultEntryIcon;\nimport com.beemdevelopment.aegis.vault.VaultGroup;\nimport com.beemdevelopment.aegis.vault.VaultRepository;\nimport com.bumptech.glide.Glide;\nimport com.bumptech.glide.load.engine.DiskCacheStrategy;\nimport com.bumptech.glide.request.target.CustomTarget;\nimport com.bumptech.glide.request.transition.Transition;\nimport com.google.android.material.bottomsheet.BottomSheetDialog;\nimport com.google.android.material.chip.Chip;\nimport com.google.android.material.chip.ChipGroup;\nimport com.google.android.material.dialog.MaterialAlertDialogBuilder;\nimport com.google.android.material.imageview.ShapeableImageView;\nimport com.google.android.material.textfield.TextInputEditText;\nimport com.google.android.material.textfield.TextInputLayout;\n\nimport java.io.File;\nimport java.io.FileInputStream;\nimport java.io.IOException;\nimport java.text.DateFormat;\nimport java.util.ArrayList;\nimport java.util.Collection;\nimport java.util.Collections;\nimport java.util.Comparator;\nimport java.util.Date;\nimport java.util.HashSet;\nimport java.util.Iterator;\nimport java.util.List;\nimport java.util.Locale;\nimport java.util.Set;\nimport java.util.UUID;\nimport java.util.concurrent.atomic.AtomicReference;\nimport java.util.stream.Collectors;\n\npublic class EditEntryActivity extends AegisActivity {\n    private boolean _isNew = false;\n    private boolean _isManual = false;\n    private VaultEntry _origEntry;\n    private Collection<VaultGroup> _groups;\n    private boolean _hasCustomIcon = false;\n    // keep track of icon changes separately as the generated jpeg's are not deterministic\n    private boolean _hasChangedIcon = false;\n    private IconPack.Icon _selectedIcon;\n    private String _pickedMimeType;\n    private ShapeableImageView _iconView;\n    private ImageView _saveImageButton;\n\n    private TextInputEditText _textName;\n    private TextInputEditText _textIssuer;\n    private TextInputLayout _textGroupLayout;\n    private TextInputEditText _textGroup;\n    private TextInputEditText _textPeriodCounter;\n    private TextInputLayout _textPeriodCounterLayout;\n    private TextInputEditText _textDigits;\n    private TextInputLayout _textDigitsLayout;\n    private TextInputEditText _textSecret;\n    private TextInputEditText _textPin;\n    private LinearLayout _textPinLayout;\n    private TextInputEditText _textUsageCount;\n    private TextInputEditText _textNote;\n    private TextView _textLastUsed;\n\n    private AutoCompleteTextView _dropdownType;\n    private AutoCompleteTextView _dropdownAlgo;\n    private TextInputLayout _dropdownAlgoLayout;\n    private List<UUID> _selectedGroups = new ArrayList<>();\n\n    private KropView _kropView;\n\n    private RelativeLayout _advancedSettingsHeader;\n    private LinearLayout _advancedSettingsLayout;\n\n    private BackPressHandler _backPressHandler;\n    private IconBackPressHandler _iconBackPressHandler;\n\n    private final ActivityResultLauncher<Intent> pickImageResultLauncher =\n            registerForActivityResult(new StartActivityForResult(), activityResult -> {\n                Intent data = activityResult.getData();\n                if (activityResult.getResultCode() != RESULT_OK || data == null || data.getData() == null) {\n                    return;\n                }\n                _pickedMimeType = SafHelper.getMimeType(this, data.getData());\n                if (_pickedMimeType != null && _pickedMimeType.equals(IconType.SVG.toMimeType())) {\n                    ImportFileTask.Params params = new ImportFileTask.Params(data.getData(), \"icon\", null);\n                    ImportFileTask task = new ImportFileTask(this, result -> {\n                        if (result.getError() == null) {\n                            CustomSvgIcon icon = new CustomSvgIcon(result.getFile());\n                            selectIcon(icon);\n                        } else {\n                            Dialogs.showErrorDialog(this, R.string.reading_file_error, result.getError());\n                        }\n                    });\n                    task.execute(getLifecycle(), params);\n                } else {\n                    startEditingIcon(data.getData());\n                }\n            });\n\n    @Override\n    protected void onCreate(Bundle savedInstanceState) {\n        super.onCreate(savedInstanceState);\n        if (abortIfOrphan(savedInstanceState)) {\n            return;\n        }\n        setContentView(R.layout.activity_edit_entry);\n        setSupportActionBar(findViewById(R.id.toolbar));\n        ViewHelper.setupAppBarInsets(findViewById(R.id.app_bar_layout));\n\n        _groups = _vaultManager.getVault().getGroups();\n\n        ActionBar bar = getSupportActionBar();\n        if (bar != null) {\n            bar.setHomeAsUpIndicator(R.drawable.ic_outline_close_24);\n            bar.setDisplayHomeAsUpEnabled(true);\n        }\n\n        _backPressHandler = new BackPressHandler();\n        getOnBackPressedDispatcher().addCallback(this, _backPressHandler);\n        _iconBackPressHandler = new IconBackPressHandler();\n        getOnBackPressedDispatcher().addCallback(this, _iconBackPressHandler);\n\n        // retrieve info from the calling activity\n        Intent intent = getIntent();\n        UUID entryUUID = (UUID) intent.getSerializableExtra(\"entryUUID\");\n        if (entryUUID != null) {\n            _origEntry = _vaultManager.getVault().getEntryByUUID(entryUUID);\n        } else {\n            _origEntry = (VaultEntry) intent.getSerializableExtra(\"newEntry\");\n            _isManual = intent.getBooleanExtra(\"isManual\", false);\n            _isNew = true;\n            setTitle(R.string.add_new_entry);\n        }\n\n        // set up fields\n        _iconView = findViewById(R.id.profile_drawable);\n        _kropView = findViewById(R.id.krop_view);\n        _saveImageButton = findViewById(R.id.iv_saveImage);\n        _textName = findViewById(R.id.text_name);\n        _textIssuer = findViewById(R.id.text_issuer);\n        _textGroup = findViewById(R.id.text_group);\n        _textGroupLayout = findViewById(R.id.text_group_layout);\n        _textPeriodCounter = findViewById(R.id.text_period_counter);\n        _textPeriodCounterLayout = findViewById(R.id.text_period_counter_layout);\n        _textDigits = findViewById(R.id.text_digits);\n        _textDigitsLayout = findViewById(R.id.text_digits_layout);\n        _textSecret = findViewById(R.id.text_secret);\n        _textPin = findViewById(R.id.text_pin);\n        _textPinLayout = findViewById(R.id.layout_pin);\n        _textUsageCount = findViewById(R.id.text_usage_count);\n        _textNote = findViewById(R.id.text_note);\n        _textLastUsed = findViewById(R.id.text_last_used);\n        _dropdownType = findViewById(R.id.dropdown_type);\n        DropdownHelper.fillDropdown(this, _dropdownType, R.array.otp_types_array);\n        _dropdownAlgoLayout = findViewById(R.id.dropdown_algo_layout);\n        _dropdownAlgo = findViewById(R.id.dropdown_algo);\n        DropdownHelper.fillDropdown(this, _dropdownAlgo, R.array.otp_algo_array);\n\n        // if this is NOT a manually entered entry, move the \"Secret\" field from basic to advanced settings\n        if (!_isNew || !_isManual) {\n            int secretIndex = 0;\n            LinearLayout layoutSecret = findViewById(R.id.layout_secret);\n            LinearLayout layoutBasic = findViewById(R.id.layout_basic);\n            LinearLayout layoutAdvanced = findViewById(R.id.layout_advanced);\n            layoutBasic.removeView(layoutSecret);\n            if (!_isNew) {\n                secretIndex = 1;\n                layoutBasic.removeView(_textPinLayout);\n                layoutAdvanced.addView(_textPinLayout, 0);\n                ((LinearLayout.LayoutParams) _textPinLayout.getLayoutParams()).topMargin = 0;\n            } else {\n                ((LinearLayout.LayoutParams) layoutSecret.getLayoutParams()).topMargin = 0;\n            }\n            layoutAdvanced.addView(layoutSecret, secretIndex);\n\n            if (_isNew && !_isManual) {\n                setViewEnabled(layoutAdvanced, false);\n            }\n        } else {\n            LinearLayout layoutTypeAlgo = findViewById(R.id.layout_type_algo);\n            ((LinearLayout.LayoutParams) layoutTypeAlgo.getLayoutParams()).topMargin = 0;\n        }\n\n        _advancedSettingsHeader = findViewById(R.id.accordian_header);\n        _advancedSettingsHeader.setOnClickListener(v -> openAdvancedSettings());\n        _advancedSettingsLayout = findViewById(R.id.layout_advanced);\n\n        // fill the fields with values if possible\n        GlideHelper.loadEntryIcon(Glide.with(this), _origEntry, _iconView);\n        if (_origEntry.hasIcon()) {\n            _hasCustomIcon = true;\n        }\n\n        _textName.setText(_origEntry.getName());\n        _textIssuer.setText(_origEntry.getIssuer());\n        _textNote.setText(_origEntry.getNote());\n\n        OtpInfo info = _origEntry.getInfo();\n\n        if (info instanceof TotpInfo) {\n            _textPeriodCounterLayout.setHint(R.string.period_hint);\n            _textPeriodCounter.setText(Integer.toString(((TotpInfo) info).getPeriod()));\n        } else if (info instanceof HotpInfo) {\n            _textPeriodCounterLayout.setHint(R.string.counter);\n            _textPeriodCounter.setText(Long.toString(((HotpInfo) info).getCounter()));\n        } else {\n            throw new RuntimeException(String.format(\"Unsupported OtpInfo type: %s\", info.getClass()));\n        }\n        _textDigits.setText(Integer.toString(info.getDigits()));\n\n        byte[] secretBytes = _origEntry.getInfo().getSecret();\n        if (secretBytes != null) {\n            String secretString = (info instanceof MotpInfo) ? Hex.encode(secretBytes) : Base32.encode(secretBytes);\n            _textSecret.setText(secretString);\n        }\n\n        _dropdownType.setText(_origEntry.getInfo().getType(), false);\n        _dropdownAlgo.setText(_origEntry.getInfo().getAlgorithm(false), false);\n\n        if (info instanceof YandexInfo) {\n            _textPin.setText(((YandexInfo) info).getPin());\n        } else if (info instanceof MotpInfo) {\n            _textPin.setText(((MotpInfo) info).getPin());\n        }\n\n        updateAdvancedFieldStatus(_origEntry.getInfo().getTypeId());\n        updatePinFieldVisibility(_origEntry.getInfo().getTypeId());\n\n        Set<UUID> groups = _origEntry.getGroups();\n        if (groups.isEmpty()) {\n            _textGroup.setText(getString(R.string.no_group));\n        } else {\n            String text = groups.stream().map(uuid -> {\n                VaultGroup group = _vaultManager.getVault().getGroupByUUID(uuid);\n                return group.getName();\n            })\n            .collect(Collectors.joining(\", \"));\n            _selectedGroups.addAll(groups);\n            _textGroup.setText(text);\n        }\n\n        // Update the icon if the issuer or name has changed\n        _textIssuer.addTextChangedListener(_nameChangeListener);\n        _textName.addTextChangedListener(_nameChangeListener);\n\n        // Register listeners to trigger validation\n        _textIssuer.addTextChangedListener(_validationListener);\n        _textGroup.addTextChangedListener(_validationListener);\n        _textName.addTextChangedListener(_validationListener);\n        _textNote.addTextChangedListener(_validationListener);\n        _textSecret.addTextChangedListener(_validationListener);\n        _dropdownType.addTextChangedListener(_validationListener);\n        _dropdownAlgo.addTextChangedListener(_validationListener);\n        _textPeriodCounter.addTextChangedListener(_validationListener);\n        _textDigits.addTextChangedListener(_validationListener);\n        _textPin.addTextChangedListener(_validationListener);\n\n        // show/hide period and counter fields on type change\n        _dropdownType.setOnItemClickListener((parent, view, position, id) -> {\n            String type = _dropdownType.getText().toString().toLowerCase(Locale.ROOT);\n            switch (type) {\n                case SteamInfo.ID:\n                    _dropdownAlgo.setText(OtpInfo.DEFAULT_ALGORITHM, false);\n                    _textPeriodCounterLayout.setHint(R.string.period_hint);\n                    _textPeriodCounter.setText(String.valueOf(TotpInfo.DEFAULT_PERIOD));\n                    _textDigits.setText(String.valueOf(SteamInfo.DIGITS));\n                    break;\n                case TotpInfo.ID:\n                    _dropdownAlgo.setText(OtpInfo.DEFAULT_ALGORITHM, false);\n                    _textPeriodCounterLayout.setHint(R.string.period_hint);\n                    _textPeriodCounter.setText(String.valueOf(TotpInfo.DEFAULT_PERIOD));\n                    _textDigits.setText(String.valueOf(OtpInfo.DEFAULT_DIGITS));\n                    break;\n                case HotpInfo.ID:\n                    _dropdownAlgo.setText(OtpInfo.DEFAULT_ALGORITHM, false);\n                    _textPeriodCounterLayout.setHint(R.string.counter);\n                    _textPeriodCounter.setText(String.valueOf(HotpInfo.DEFAULT_COUNTER));\n                    _textDigits.setText(String.valueOf(OtpInfo.DEFAULT_DIGITS));\n                    break;\n                case YandexInfo.ID:\n                    _dropdownAlgo.setText(YandexInfo.DEFAULT_ALGORITHM, false);\n                    _textPeriodCounterLayout.setHint(R.string.period_hint);\n                    _textPeriodCounter.setText(String.valueOf(TotpInfo.DEFAULT_PERIOD));\n                    _textDigits.setText(String.valueOf(YandexInfo.DIGITS));\n                    break;\n                case MotpInfo.ID:\n                    _dropdownAlgo.setText(MotpInfo.ALGORITHM, false);\n                    _textPeriodCounterLayout.setHint(R.string.period_hint);\n                    _textPeriodCounter.setText(String.valueOf(MotpInfo.PERIOD));\n                    _textDigits.setText(String.valueOf(MotpInfo.DIGITS));\n                    break;\n                default:\n                    throw new RuntimeException(String.format(\"Unsupported OTP type: %s\", type));\n            }\n\n            updateAdvancedFieldStatus(type);\n            updatePinFieldVisibility(type);\n        });\n\n        _iconView.setOnClickListener(v -> {\n            startIconSelection();\n        });\n\n        _textGroup.setShowSoftInputOnFocus(false);\n        _textGroup.setOnClickListener(v -> showGroupSelectionDialog());\n        _textGroup.setOnFocusChangeListener((v, hasFocus) -> {\n            if (hasFocus) {\n                showGroupSelectionDialog();\n            }\n        });\n\n        _textGroupLayout.setOnClickListener(v -> {\n            showGroupSelectionDialog();\n        });\n\n        _textUsageCount.setText(_prefs.getUsageCount(entryUUID).toString());\n        setLastUsedTimestamp(_prefs.getLastUsedTimestamp(entryUUID));\n    }\n\n    private void showGroupSelectionDialog() {\n        BottomSheetDialog dialog = new BottomSheetDialog(this);\n        View view = getLayoutInflater().inflate(R.layout.dialog_select_groups, null);\n        dialog.setContentView(view);\n\n        ChipGroup chipGroup = view.findViewById(R.id.groupChipGroup);\n        TextView addGroupInfo = view.findViewById(R.id.addGroupInfo);\n        LinearLayout addGroup = view.findViewById(R.id.addGroup);\n        Button clearButton = view.findViewById(R.id.btnClear);\n        Button saveButton = view.findViewById(R.id.btnSave);\n\n        chipGroup.removeAllViews();\n        addGroupInfo.setVisibility(View.VISIBLE);\n        addGroup.setVisibility(View.VISIBLE);\n\n        for (VaultGroup group : _groups) {\n            addChipTo(chipGroup, new VaultGroupModel(group), false);\n        }\n\n        addGroup.setOnClickListener(v1 -> {\n            Dialogs.TextInputListener onAddGroup = text -> {\n                String groupName = new String(text).trim();\n                if (!groupName.isEmpty()) {\n                    VaultGroup group = _vaultManager.getVault().findGroupByName(groupName);\n                    if (group == null) {\n                        group = new VaultGroup(groupName);\n                        _vaultManager.getVault().addGroup(group);\n                    }\n\n                    _selectedGroups.add(group.getUUID());\n                    addChipTo(chipGroup, new VaultGroupModel(group), true);\n                }\n            };\n\n            Dialogs.showTextInputDialog(EditEntryActivity.this, R.string.set_group, R.string.group_name_hint, onAddGroup);\n        });\n\n        saveButton.setOnClickListener(v1 -> {\n            if(getCheckedUUID(chipGroup).isEmpty()) {\n                _selectedGroups.clear();\n                _textGroup.setText(getString(R.string.no_group));\n            } else {\n                _selectedGroups.clear();\n                _selectedGroups.addAll(getCheckedUUID(chipGroup));\n                _textGroup.setText(getCheckedNames(chipGroup));\n            }\n            dialog.dismiss();\n        });\n\n        clearButton.setOnClickListener(v1 -> {\n            chipGroup.clearCheck();\n        });\n\n        Dialogs.showSecureDialog(dialog);\n    }\n\n    private void addChipTo(ChipGroup chipGroup, VaultGroupModel group, Boolean isNew) {\n        Chip chip = (Chip) getLayoutInflater().inflate(R.layout.chip_group_filter, null, false);\n        chip.setText(group.getName());\n        chip.setCheckable(true);\n\n        chip.setChecked((!_selectedGroups.isEmpty() && _selectedGroups.contains(group.getUUID())) || isNew);\n        chip.setCheckedIconVisible(true);\n        chip.setTag(group);\n        chipGroup.addView(chip);\n    }\n\n    private static Set<UUID> getCheckedUUID(ChipGroup chipGroup) {\n        return chipGroup.getCheckedChipIds().stream()\n                .map(i -> {\n                    Chip chip = chipGroup.findViewById(i);\n                    VaultGroupModel group = (VaultGroupModel) chip.getTag();\n                    return group.getUUID();\n                })\n                .collect(Collectors.toSet());\n    }\n\n    private static String getCheckedNames(ChipGroup chipGroup) {\n        return chipGroup.getCheckedChipIds().stream()\n                .map(i -> {\n                    Chip chip = chipGroup.findViewById(i);\n                    VaultGroupModel group = (VaultGroupModel) chip.getTag();\n                    return group.getName();\n                })\n                .collect(Collectors.joining(\", \"));\n    }\n\n    private void updateAdvancedFieldStatus(String otpType) {\n        boolean enabled = !otpType.equals(SteamInfo.ID) && !otpType.equals(YandexInfo.ID)\n                && !otpType.equals(MotpInfo.ID) && (!_isNew || _isManual);\n        _textDigitsLayout.setEnabled(enabled);\n        _textPeriodCounterLayout.setEnabled(enabled);\n        _dropdownAlgoLayout.setEnabled(enabled);\n    }\n\n    private void updatePinFieldVisibility(String otpType) {\n        boolean visible = otpType.equals(YandexInfo.ID) || otpType.equals(MotpInfo.ID);\n        _textPinLayout.setVisibility(visible ? View.VISIBLE : View.GONE);\n        _textPin.setHint(otpType.equals(MotpInfo.ID) ? R.string.motp_pin : R.string.yandex_pin);\n    }\n\n    private void openAdvancedSettings() {\n        Animation fadeOut = new AlphaAnimation(1, 0);\n        fadeOut.setInterpolator(new AccelerateInterpolator());\n        fadeOut.setDuration((long) (220 * AnimationsHelper.Scale.ANIMATOR.getValue(this)));\n        _advancedSettingsHeader.startAnimation(fadeOut);\n\n        fadeOut.setAnimationListener(new SimpleAnimationEndListener((a) -> {\n            _advancedSettingsHeader.setVisibility(View.GONE);\n            _advancedSettingsLayout.setVisibility(View.VISIBLE);\n            _advancedSettingsLayout.animate()\n                    .setInterpolator(new AccelerateInterpolator())\n                    .setDuration((long) (250 * AnimationsHelper.Scale.ANIMATOR.getValue(this)))\n                    .alpha(1);\n        }));\n    }\n\n    private boolean hasUnsavedChanges(VaultEntry newEntry) {\n        return _hasChangedIcon || !_origEntry.equals(newEntry);\n    }\n\n    private void discardAndFinish() {\n        AtomicReference<String> msg = new AtomicReference<>();\n        AtomicReference<VaultEntry> entry = new AtomicReference<>();\n        try {\n            entry.set(parseEntry());\n        } catch (ParseException e) {\n            msg.set(e.getMessage());\n        }\n\n        if (!hasUnsavedChanges(entry.get())) {\n            finish();\n            return;\n        }\n\n        // ask for confirmation if the entry has been changed\n        Dialogs.showDiscardDialog(EditEntryActivity.this,\n                (dialog, which) -> {\n                    // if the entry couldn't be parsed, we show an error dialog\n                    if (msg.get() != null) {\n                        onSaveError(msg.get());\n                        return;\n                    }\n\n                    addAndFinish(entry.get());\n                },\n                (dialog, which) -> finish()\n        );\n    }\n\n    @Override\n    public boolean onOptionsItemSelected(MenuItem item) {\n        int itemId = item.getItemId();\n        if (itemId == android.R.id.home) {\n            discardAndFinish();\n        } else if (itemId == R.id.action_save) {\n            onSave();\n        } else if (itemId == R.id.action_delete) {\n            Dialogs.showDeleteEntriesDialog(this, Collections.singletonList(_origEntry), (dialog, which) -> {\n                deleteAndFinish(_origEntry);\n            });\n        } else if (itemId == R.id.action_edit_icon) {\n            startIconSelection();\n        } else if (itemId == R.id.action_reset_usage_count) {\n            Dialogs.showSecureDialog(new MaterialAlertDialogBuilder(this)\n                    .setTitle(R.string.action_reset_usage_count)\n                    .setMessage(R.string.action_reset_usage_count_dialog)\n                    .setPositiveButton(android.R.string.yes, (dialog, which) -> resetUsageCount())\n                    .setNegativeButton(android.R.string.no, null)\n                    .create());\n        } else if (itemId == R.id.action_default_icon) {\n            TextDrawable drawable = TextDrawableHelper.generate(_origEntry.getIssuer(), _origEntry.getName(), _iconView);\n            _iconView.setImageDrawable(drawable);\n\n            _selectedIcon = null;\n            _hasCustomIcon = false;\n            _hasChangedIcon = true;\n        } else {\n            return super.onOptionsItemSelected(item);\n        }\n\n        return true;\n    }\n\n    private void startImageSelectionActivity() {\n        Intent galleryIntent = new Intent(Intent.ACTION_PICK);\n        galleryIntent.setDataAndType(android.provider.MediaStore.Images.Media.INTERNAL_CONTENT_URI, \"image/*\");\n\n        Intent fileIntent = new Intent(Intent.ACTION_GET_CONTENT);\n        fileIntent.setType(\"image/*\");\n\n        Intent chooserIntent = Intent.createChooser(galleryIntent, getString(R.string.select_icon));\n        chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, new Intent[] { fileIntent });\n        _vaultManager.fireIntentLauncher(this, chooserIntent, pickImageResultLauncher);\n    }\n\n    private void resetUsageCount() {\n        _prefs.resetUsageCount(_origEntry.getUUID());\n        _textUsageCount.setText(\"0\");\n    }\n\n    private void startIconSelection() {\n        List<IconPack> iconPacks = _iconPackManager.getIconPacks().stream()\n                .sorted(Comparator.comparing(IconPack::getName))\n                .collect(Collectors.toList());\n        if (iconPacks.size() == 0) {\n            startImageSelectionActivity();\n            return;\n        }\n\n        BottomSheetDialog dialog = IconPickerDialog.create(this, iconPacks, _textIssuer.getText().toString(), true, new IconAdapter.Listener() {\n            @Override\n            public void onIconSelected(IconPack.Icon icon) {\n                selectIcon(icon);\n            }\n\n            @Override\n            public void onCustomSelected() {\n                startImageSelectionActivity();\n            }\n        });\n        Dialogs.showSecureDialog(dialog);\n    }\n\n    private void selectIcon(IconPack.Icon icon) {\n        _selectedIcon = icon;\n        _hasCustomIcon = true;\n        _hasChangedIcon = true;\n\n        GlideHelper.loadIcon(Glide.with(EditEntryActivity.this), icon, _iconView);\n    }\n\n    private void startEditingIcon(Uri data) {\n        Glide.with(this)\n                .asBitmap()\n                .load(data)\n                .diskCacheStrategy(DiskCacheStrategy.NONE)\n                .skipMemoryCache(false)\n                .into(new CustomTarget<Bitmap>() {\n                    @Override\n                    public void onResourceReady(@NonNull Bitmap resource, @Nullable Transition<? super Bitmap> transition) {\n                        _kropView.setBitmap(resource);\n                    }\n\n                    @Override\n                    public void onLoadCleared(@Nullable Drawable placeholder) {\n\n                    }\n                });\n        _iconView.setVisibility(View.GONE);\n        _kropView.setVisibility(View.VISIBLE);\n\n        _saveImageButton.setOnClickListener(v -> {\n            stopEditingIcon(true);\n        });\n\n        _iconBackPressHandler.setEnabled(true);\n    }\n\n    private void stopEditingIcon(boolean save) {\n        if (save && _selectedIcon == null) {\n            _iconView.setImageBitmap(_kropView.getCroppedBitmap());\n        }\n        _iconView.setVisibility(View.VISIBLE);\n        _kropView.setVisibility(View.GONE);\n\n        _hasCustomIcon = _hasCustomIcon || save;\n        _hasChangedIcon = save;\n        _iconBackPressHandler.setEnabled(false);\n    }\n\n    @Override\n    public boolean onCreateOptionsMenu(Menu menu) {\n        getMenuInflater().inflate(R.menu.menu_edit, menu);\n        if (_isNew) {\n            menu.findItem(R.id.action_delete).setVisible(false);\n        }\n        if (!_hasCustomIcon) {\n            menu.findItem(R.id.action_default_icon).setVisible(false);\n        }\n\n        return true;\n    }\n\n    private void addAndFinish(VaultEntry entry) {\n        // It's possible that the new entry was already added to the vault, but writing the\n        // vault to disk failed, causing the user to tap 'Save' again. Calling addEntry\n        // again would cause a crash in that case, so the isEntryDuplicate check prevents\n        // that.\n        VaultRepository vault = _vaultManager.getVault();\n        if (_isNew && !vault.isEntryDuplicate(entry)) {\n            vault.addEntry(entry);\n        } else {\n            vault.replaceEntry(entry);\n        }\n\n        saveAndFinish(entry, false);\n    }\n\n    private void setLastUsedTimestamp(long timestamp) {\n        String readableDate = getString(R.string.last_used_never);\n        if (timestamp != 0) {\n            DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.MEDIUM, DateFormat.MEDIUM, Locale.getDefault());\n            readableDate = dateFormat.format(new Date(timestamp));\n        }\n\n        _textLastUsed.setText(String.format(\"%s: %s\", getString(R.string.last_used), readableDate));\n    }\n\n    private void deleteAndFinish(VaultEntry entry) {\n        _vaultManager.getVault().removeEntry(entry);\n        saveAndFinish(entry, true);\n    }\n\n    private void saveAndFinish(VaultEntry entry, boolean delete) {\n        Intent intent = new Intent();\n        intent.putExtra(\"entryUUID\", entry.getUUID());\n        intent.putExtra(\"delete\", delete);\n\n        if (saveAndBackupVault()) {\n            setResult(RESULT_OK, intent);\n            finish();\n        }\n    }\n\n    private int parsePeriod() throws ParseException {\n        try {\n            return Integer.parseInt(_textPeriodCounter.getText().toString());\n        } catch (NumberFormatException e) {\n            throw new ParseException(\"Period is not an integer.\");\n        }\n    }\n\n    private VaultEntry parseEntry() throws ParseException {\n        if (_textSecret.length() == 0) {\n            throw new ParseException(\"Secret is a required field.\");\n        }\n\n        String type = _dropdownType.getText().toString();\n        String algo = _dropdownAlgo.getText().toString();\n        String lowerCasedType = type.toLowerCase(Locale.ROOT);\n\n        if (lowerCasedType.equals(YandexInfo.ID) || lowerCasedType.equals(MotpInfo.ID)) {\n            int pinLength = _textPin.length();\n            if (pinLength < 4) {\n                throw new ParseException(\"PIN is a required field. Must have a minimum length of 4 digits.\");\n            }\n            if (pinLength != 4 && lowerCasedType.equals(MotpInfo.ID)) {\n                throw new ParseException(\"PIN must have a length of 4 digits.\");\n            }\n        }\n\n        int digits;\n        try {\n            digits = Integer.parseInt(_textDigits.getText().toString());\n        } catch (NumberFormatException e) {\n            throw new ParseException(\"Digits is not an integer.\");\n        }\n\n        byte[] secret;\n        try {\n            String secretString = new String(EditTextHelper.getEditTextChars(_textSecret));\n\n            secret = (lowerCasedType.equals(MotpInfo.ID)) ?\n                    Hex.decode(secretString) : GoogleAuthInfo.parseSecret(secretString);\n\n            if (secret.length == 0) {\n                throw new ParseException(\"Secret cannot be empty\");\n            }\n        } catch (EncodingException e) {\n            String exceptionMessage = (lowerCasedType.equals(MotpInfo.ID)) ?\n                    \"Secret is not valid hexadecimal\" : \"Secret is not valid base32.\";\n\n            throw new ParseException(exceptionMessage);\n        }\n\n        OtpInfo info;\n        try {\n            switch (type.toLowerCase(Locale.ROOT)) {\n                case TotpInfo.ID:\n                    info = new TotpInfo(secret, algo, digits, parsePeriod());\n                    break;\n                case SteamInfo.ID:\n                    info = new SteamInfo(secret, algo, digits, parsePeriod());\n                    break;\n                case HotpInfo.ID:\n                    long counter;\n                    try {\n                        counter = Long.parseLong(_textPeriodCounter.getText().toString());\n                    } catch (NumberFormatException e) {\n                        throw new ParseException(\"Counter is not an integer.\");\n                    }\n                    info = new HotpInfo(secret, algo, digits, counter);\n                    break;\n                case YandexInfo.ID:\n                    info = new YandexInfo(secret, _textPin.getText().toString());\n                    break;\n                case MotpInfo.ID:\n                    info = new MotpInfo(secret, _textPin.getText().toString());\n                    break;\n                default:\n                    throw new RuntimeException(String.format(\"Unsupported OTP type: %s\", type));\n            }\n\n            info.setDigits(digits);\n            info.setAlgorithm(algo);\n        } catch (OtpInfoException e) {\n            throw new ParseException(\"The entered info is incorrect: \" + e.getMessage());\n        }\n\n        VaultEntry entry = Cloner.clone(_origEntry);\n        entry.setInfo(info);\n        entry.setIssuer(_textIssuer.getText().toString());\n        entry.setName(_textName.getText().toString());\n        entry.setNote(_textNote.getText().toString());\n\n        if (_selectedGroups.isEmpty()) {\n            entry.setGroups(new HashSet<>());\n        } else {\n            entry.setGroups(new HashSet<>(_selectedGroups));\n        }\n\n        if (_hasChangedIcon) {\n            if (_hasCustomIcon) {\n                VaultEntryIcon icon;\n                if (_selectedIcon == null) {\n                    Bitmap bitmap = ((BitmapDrawable) _iconView.getDrawable()).getBitmap();\n                    IconType iconType = _pickedMimeType == null\n                            ? IconType.INVALID : IconType.fromMimeType(_pickedMimeType);\n                    if (iconType == IconType.INVALID) {\n                        iconType = bitmap.hasAlpha() ? IconType.PNG : IconType.JPEG;\n                    }\n                    icon = BitmapHelper.toVaultEntryIcon(bitmap, iconType);\n                } else {\n                    byte[] iconBytes;\n                    try (FileInputStream inStream = new FileInputStream(_selectedIcon.getFile())){\n                        iconBytes = IOUtils.readFile(inStream);\n                    } catch (IOException e) {\n                        throw new ParseException(e.getMessage());\n                    }\n                    icon = new VaultEntryIcon(iconBytes, _selectedIcon.getIconType());\n                }\n\n                entry.setIcon(icon);\n            } else {\n                entry.setIcon(null);\n            }\n        }\n\n        return entry;\n    }\n\n    private void onSaveError(String msg) {\n        Dialogs.showSecureDialog(new MaterialAlertDialogBuilder(this, R.style.ThemeOverlay_Aegis_AlertDialog_Error)\n                .setTitle(getString(R.string.saving_profile_error))\n                .setMessage(msg)\n                .setIconAttribute(android.R.attr.alertDialogIcon)\n                .setPositiveButton(android.R.string.ok, null)\n                .create());\n    }\n\n    private boolean onSave() {\n        if (_iconBackPressHandler.isEnabled()) {\n            stopEditingIcon(true);\n        }\n\n        VaultEntry entry;\n        try {\n            entry = parseEntry();\n        } catch (ParseException e) {\n            onSaveError(e.getMessage());\n            return false;\n        }\n\n        if (_isNew) {\n            for (VaultEntry existing : _vaultManager.getVault().getEntries()) {\n                if (entry.hasSameNameAndIssuer(existing)) {\n                    showDuplicateBottomSheet(entry);\n                    return false;\n                }\n            }\n        }\n\n        addAndFinish(entry);\n        return true;\n    }\n\n    private void showDuplicateBottomSheet(VaultEntry newEntry) {\n        BottomSheetDialog dialog = new BottomSheetDialog(this);\n        View view = getLayoutInflater().inflate(R.layout.dialog_duplicate_entry, null);\n        dialog.setContentView(view);\n\n        dialog.setCancelable(false);\n\n        View overwrite = view.findViewById(R.id.overwrite_entry);\n        View addSuffix = view.findViewById(R.id.create_new_entry);\n        View cancel = view.findViewById(R.id.cancel_save);\n\n        TextView suffixSubtext = view.findViewById(R.id.duplicate_suffix_subtitle);\n\n        String baseName = newEntry.getName();\n        Set<String> existingNames = new HashSet<>();\n        for (VaultEntry e : _vaultManager.getVault().getEntries()) {\n            if (e.getIssuer().equals(newEntry.getIssuer())) {\n                existingNames.add(e.getName());\n            }\n        }\n\n        int counter = 2;\n        String newName;\n        do {\n            newName = baseName + \" #\" + counter++;\n        } while (existingNames.contains(newName));\n\n        suffixSubtext.setText(getString(R.string.dialog_duplicate_entry_suffix_subtitle, newName));\n\n        overwrite.setOnClickListener(v -> {\n            List<VaultEntry> duplicates = new ArrayList<>();\n            for (VaultEntry existing : _vaultManager.getVault().getEntries()) {\n                if (existing.hasSameNameAndIssuer(newEntry)) {\n                    duplicates.add(existing);\n                }\n            }\n\n            Resources res = getResources();\n            String message = res.getQuantityString(\n                    R.plurals.dialog_duplicate_entry_overwrite_dialog_message,\n                    duplicates.size(),\n                    duplicates.size(),\n                    newEntry.getIssuer(),\n                    newEntry.getName()\n            );\n\n            new MaterialAlertDialogBuilder(this)\n                    .setTitle(R.string.dialog_duplicate_entry_overwrite_dialog_title)\n                    .setMessage(message)\n                    .setPositiveButton(R.string.action_delete, (d, which) -> {\n                        for (VaultEntry dup : duplicates) {\n                            _vaultManager.getVault().removeEntry(dup);\n                        }\n\n                        dialog.dismiss();\n                        addAndFinish(newEntry);\n                    })\n                    .setNegativeButton(android.R.string.no, null)\n                    .show();\n        });\n\n        String finalNewName = newName;\n        addSuffix.setOnClickListener(v -> {\n            newEntry.setName(finalNewName);\n            dialog.dismiss();\n            addAndFinish(newEntry);\n        });\n\n        cancel.setOnClickListener(v -> dialog.dismiss());\n\n        Dialogs.showSecureDialog(dialog);\n    }\n\n    private static void setViewEnabled(View view, boolean enabled) {\n        view.setEnabled(enabled);\n\n        if (view instanceof ViewGroup) {\n            ViewGroup group = (ViewGroup) view;\n            for (int i = 0; i < group.getChildCount(); i++) {\n                setViewEnabled(group.getChildAt(i), enabled);\n            }\n        }\n    }\n\n    private final TextWatcher _validationListener = new SimpleTextWatcher((s) -> {\n        updateBackPressHandlerState();\n    });\n\n    private final TextWatcher _nameChangeListener = new SimpleTextWatcher((s) -> {\n        if (!_hasCustomIcon) {\n            TextDrawable drawable = TextDrawableHelper.generate(_textIssuer.getText().toString(), _textName.getText().toString(), _iconView);\n            _iconView.setImageDrawable(drawable);\n        }\n    });\n\n    private void updateBackPressHandlerState() {\n        VaultEntry entry = null;\n        try {\n            entry = parseEntry();\n        } catch (ParseException ignored) {\n\n        }\n\n        boolean backEnabled = hasUnsavedChanges(entry);\n        _backPressHandler.setEnabled(backEnabled);\n    }\n\n    private class BackPressHandler extends OnBackPressedCallback {\n        public BackPressHandler() {\n            super(false);\n        }\n\n        @Override\n        public void handleOnBackPressed() {\n            discardAndFinish();\n        }\n    }\n\n    private class IconBackPressHandler extends OnBackPressedCallback {\n        public IconBackPressHandler() {\n            super(false);\n        }\n\n        @Override\n        public void handleOnBackPressed() {\n            stopEditingIcon(false);\n        }\n    }\n\n    private static class ParseException extends Exception {\n        public ParseException(String message) {\n            super(message);\n        }\n    }\n\n    private static class CustomSvgIcon extends IconPack.Icon {\n        private final File _file;\n\n        protected CustomSvgIcon(File file) {\n            super(file.getAbsolutePath(), null, null, null);\n            _file = file;\n        }\n\n        @Nullable\n        @Override\n        public File getFile() {\n            return _file;\n        }\n\n        @Override\n        public IconType getIconType() {\n            return IconType.SVG;\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/ui/ExitActivity.java",
    "content": "package com.beemdevelopment.aegis.ui;\n\nimport android.app.Activity;\nimport android.content.Context;\nimport android.content.Intent;\nimport android.os.Bundle;\n\npublic class ExitActivity extends Activity {\n\n    @Override\n    protected void onCreate(Bundle savedInstanceState) {\n        super.onCreate(savedInstanceState);\n\n        finishAndRemoveTask();\n    }\n\n    public static void exitAppAndRemoveFromRecents(Context context) {\n        Intent intent = new Intent(context, ExitActivity.class);\n        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK |\n                Intent.FLAG_ACTIVITY_CLEAR_TASK |\n                Intent.FLAG_ACTIVITY_NO_ANIMATION |\n                Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);\n\n        context.startActivity(intent);\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/ui/GroupManagerActivity.java",
    "content": "package com.beemdevelopment.aegis.ui;\n\nimport android.os.Bundle;\nimport android.view.Menu;\nimport android.view.MenuItem;\nimport android.view.View;\n\nimport androidx.activity.OnBackPressedCallback;\nimport androidx.annotation.NonNull;\nimport androidx.recyclerview.widget.ItemTouchHelper;\nimport androidx.recyclerview.widget.LinearLayoutManager;\nimport androidx.recyclerview.widget.RecyclerView;\n\nimport com.beemdevelopment.aegis.R;\nimport com.beemdevelopment.aegis.ui.dialogs.Dialogs;\nimport com.beemdevelopment.aegis.ui.views.GroupAdapter;\nimport com.beemdevelopment.aegis.util.Cloner;\nimport com.beemdevelopment.aegis.helpers.ViewHelper;\nimport com.beemdevelopment.aegis.vault.VaultGroup;\nimport com.google.android.material.dialog.MaterialAlertDialogBuilder;\n\nimport java.util.ArrayList;\nimport java.util.HashSet;\nimport java.util.List;\nimport java.util.Set;\nimport java.util.UUID;\n\npublic class GroupManagerActivity extends AegisActivity implements GroupAdapter.Listener {\n    private GroupAdapter _adapter;\n    private HashSet<UUID> _removedGroups;\n    private RecyclerView _groupsView;\n    private View _emptyStateView;\n    private BackPressHandler _backPressHandler;\n\n    @Override\n    protected void onCreate(Bundle savedInstanceState) {\n        super.onCreate(savedInstanceState);\n        if (abortIfOrphan(savedInstanceState)) {\n            return;\n        }\n        setContentView(R.layout.activity_groups);\n        setSupportActionBar(findViewById(R.id.toolbar));\n        ViewHelper.setupAppBarInsets(findViewById(R.id.app_bar_layout));\n        if (getSupportActionBar() != null) {\n            getSupportActionBar().setDisplayHomeAsUpEnabled(true);\n            getSupportActionBar().setDisplayShowHomeEnabled(true);\n        }\n        _backPressHandler = new BackPressHandler();\n        getOnBackPressedDispatcher().addCallback(this, _backPressHandler);\n\n        _removedGroups = new HashSet<>();\n        if (savedInstanceState != null) {\n            List<String> removedGroups = savedInstanceState.getStringArrayList(\"removedGroups\");\n            if (removedGroups != null) {\n                for (String uuid : removedGroups) {\n                    _removedGroups.add(UUID.fromString(uuid));\n                }\n            }\n        }\n\n        ItemTouchHelper touchHelper = new ItemTouchHelper(new ItemTouchHelper.Callback() {\n            @Override\n            public int getMovementFlags(\n                    @NonNull RecyclerView recyclerView,\n                    @NonNull RecyclerView.ViewHolder viewHolder) {\n\n                return makeMovementFlags(ItemTouchHelper.UP | ItemTouchHelper.DOWN, 0);\n            }\n\n            @Override\n            public boolean onMove(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder, @NonNull RecyclerView.ViewHolder target) {\n                int draggedItemIndex = viewHolder.getBindingAdapterPosition();\n                int targetIndex = target.getBindingAdapterPosition();\n\n                _adapter.onItemMove(draggedItemIndex, targetIndex);\n\n                return true;\n            }\n\n            @Override\n            public void onSwiped(@NonNull RecyclerView.ViewHolder viewHolder, int direction) { }\n        });\n\n        _adapter = new GroupAdapter(this);\n        _groupsView = findViewById(R.id.list_groups);\n        LinearLayoutManager layoutManager = new LinearLayoutManager(this);\n        _groupsView.setLayoutManager(layoutManager);\n        _groupsView.setAdapter(_adapter);\n        _groupsView.setNestedScrollingEnabled(false);\n        touchHelper.attachToRecyclerView(_groupsView);\n\n        for (VaultGroup group : _vaultManager.getVault().getGroups()) {\n            if (!_removedGroups.contains(group.getUUID())) {\n                _adapter.addGroup(group);\n            }\n        }\n\n        _emptyStateView = findViewById(R.id.vEmptyList);\n        updateEmptyState();\n    }\n\n    @Override\n    protected void onSaveInstanceState(@NonNull Bundle outState) {\n        super.onSaveInstanceState(outState);\n        ArrayList<String> removed = new ArrayList<>();\n        for (UUID uuid : _removedGroups) {\n            removed.add(uuid.toString());\n        }\n\n        outState.putStringArrayList(\"removedGroups\", removed);\n    }\n\n    @Override\n    public void onEditGroup(VaultGroup group) {\n        Dialogs.TextInputListener onEditGroup = text -> {\n            String newGroupName = new String(text).trim();\n            if (!newGroupName.isEmpty()) {\n                VaultGroup newGroup = Cloner.clone(group);\n                newGroup.setName(newGroupName);\n                _adapter.replaceGroup(group.getUUID(), newGroup);\n                _backPressHandler.setEnabled(true);\n            }\n        };\n\n        Dialogs.showTextInputDialog(GroupManagerActivity.this, R.string.rename_group, R.string.group_name_hint, onEditGroup, group.getName());\n    }\n\n    @Override\n    public void onRemoveGroup(VaultGroup group) {\n        Dialogs.showSecureDialog(new MaterialAlertDialogBuilder(this, R.style.ThemeOverlay_Aegis_AlertDialog_Warning)\n                .setTitle(R.string.remove_group)\n                .setMessage(R.string.remove_group_description)\n                .setIconAttribute(android.R.attr.alertDialogIcon)\n                .setPositiveButton(android.R.string.yes, (dialog, whichButton) -> {\n                    _removedGroups.add(group.getUUID());\n                    _adapter.removeGroup(group);\n                    _backPressHandler.setEnabled(true);\n                    updateEmptyState();\n                })\n                .setNegativeButton(android.R.string.no, null)\n                .create());\n    }\n\n    public void onRemoveUnusedGroups() {\n        Dialogs.showSecureDialog(new MaterialAlertDialogBuilder(this, R.style.ThemeOverlay_Aegis_AlertDialog_Warning)\n                .setTitle(R.string.remove_unused_groups)\n                .setMessage(R.string.remove_unused_groups_description)\n                .setIconAttribute(android.R.attr.alertDialogIcon)\n                .setPositiveButton(android.R.string.yes, (dialog, whichButton) -> {\n                    Set<VaultGroup> unusedGroups = new HashSet<>(_vaultManager.getVault().getGroups());\n                    unusedGroups.removeAll(_vaultManager.getVault().getUsedGroups());\n\n                    for (VaultGroup group : unusedGroups) {\n                        _removedGroups.add(group.getUUID());\n                        _adapter.removeGroup(group);\n                    }\n                    _backPressHandler.setEnabled(true);\n                    updateEmptyState();\n                })\n                .setNegativeButton(android.R.string.no, null)\n                .create());\n    }\n\n    private void saveAndFinish() {\n        if (!_removedGroups.isEmpty()) {\n            for (UUID uuid : _removedGroups) {\n                _vaultManager.getVault().removeGroup(uuid);\n            }\n        }\n\n        _vaultManager.getVault().replaceGroups(_adapter.getGroups());\n        saveAndBackupVault();\n\n        finish();\n    }\n\n    private void discardAndFinish() {\n        if (_removedGroups.isEmpty()) {\n            finish();\n            return;\n        }\n\n        Dialogs.showDiscardDialog(this,\n                (dialog, which) -> saveAndFinish(),\n                (dialog, which) -> finish());\n    }\n\n    @Override\n    public boolean onCreateOptionsMenu(Menu menu) {\n        getMenuInflater().inflate(R.menu.menu_groups, menu);\n        return true;\n    }\n\n    @Override\n    public boolean onOptionsItemSelected(MenuItem item) {\n        int itemId = item.getItemId();\n        if (itemId == android.R.id.home) {\n            discardAndFinish();\n        } else if (itemId == R.id.action_save) {\n            saveAndFinish();\n        } else if (itemId == R.id.action_delete_unused_groups) {\n            onRemoveUnusedGroups();\n        } else {\n            return super.onOptionsItemSelected(item);\n        }\n\n        return true;\n    }\n\n    private void updateEmptyState() {\n        if (_adapter.getItemCount() > 0) {\n            _groupsView.setVisibility(View.VISIBLE);\n            _emptyStateView.setVisibility(View.GONE);\n        } else {\n            _groupsView.setVisibility(View.GONE);\n            _emptyStateView.setVisibility(View.VISIBLE);\n        }\n    }\n\n    private class BackPressHandler extends OnBackPressedCallback {\n        public BackPressHandler() {\n            super(false);\n        }\n\n        @Override\n        public void handleOnBackPressed() {\n            discardAndFinish();\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/ui/ImportEntriesActivity.java",
    "content": "package com.beemdevelopment.aegis.ui;\n\nimport android.content.Intent;\nimport android.content.pm.PackageManager;\nimport android.os.Bundle;\nimport android.view.Menu;\nimport android.view.MenuItem;\nimport android.view.View;\nimport android.widget.Toast;\n\nimport androidx.annotation.NonNull;\nimport androidx.annotation.Nullable;\nimport androidx.appcompat.app.ActionBar;\nimport androidx.recyclerview.widget.LinearLayoutManager;\nimport androidx.recyclerview.widget.RecyclerView;\n\nimport com.beemdevelopment.aegis.R;\nimport com.beemdevelopment.aegis.helpers.BitmapHelper;\nimport com.beemdevelopment.aegis.helpers.FabScrollHelper;\nimport com.beemdevelopment.aegis.helpers.ViewHelper;\nimport com.beemdevelopment.aegis.icons.IconType;\nimport com.beemdevelopment.aegis.importers.DatabaseImporter;\nimport com.beemdevelopment.aegis.importers.DatabaseImporterEntryException;\nimport com.beemdevelopment.aegis.importers.DatabaseImporterException;\nimport com.beemdevelopment.aegis.ui.dialogs.Dialogs;\nimport com.beemdevelopment.aegis.ui.models.ImportEntry;\nimport com.beemdevelopment.aegis.ui.tasks.IconOptimizationTask;\nimport com.beemdevelopment.aegis.ui.tasks.RootShellTask;\nimport com.beemdevelopment.aegis.ui.views.ImportEntriesAdapter;\nimport com.beemdevelopment.aegis.util.UUIDMap;\nimport com.beemdevelopment.aegis.vault.VaultEntry;\nimport com.beemdevelopment.aegis.vault.VaultEntryIcon;\nimport com.beemdevelopment.aegis.vault.VaultGroup;\nimport com.beemdevelopment.aegis.vault.VaultRepository;\nimport com.google.android.material.dialog.MaterialAlertDialogBuilder;\nimport com.google.android.material.floatingactionbutton.FloatingActionButton;\nimport com.google.android.material.snackbar.Snackbar;\n\nimport java.io.File;\nimport java.io.FileInputStream;\nimport java.io.FileNotFoundException;\nimport java.io.IOException;\nimport java.io.InputStream;\nimport java.util.ArrayList;\nimport java.util.Arrays;\nimport java.util.List;\nimport java.util.Map;\nimport java.util.Set;\nimport java.util.UUID;\nimport java.util.stream.Collectors;\n\npublic class ImportEntriesActivity extends AegisActivity {\n    private View _view;\n    private Menu _menu;\n    private RecyclerView _entriesView;\n    private ImportEntriesAdapter _adapter;\n    private FabScrollHelper _fabScrollHelper;\n\n    private UUIDMap<VaultGroup> _importedGroups;\n\n    @Override\n    protected void onCreate(Bundle savedInstanceState) {\n        super.onCreate(savedInstanceState);\n        if (abortIfOrphan(savedInstanceState)) {\n            return;\n        }\n        setContentView(R.layout.activity_import_entries);\n        setSupportActionBar(findViewById(R.id.toolbar));\n        ViewHelper.setupAppBarInsets(findViewById(R.id.app_bar_layout));\n\n        _view = findViewById(R.id.importEntriesRootView);\n\n        ActionBar bar = getSupportActionBar();\n        bar.setHomeAsUpIndicator(R.drawable.ic_outline_close_24);\n        bar.setDisplayHomeAsUpEnabled(true);\n\n        _adapter = new ImportEntriesAdapter();\n        _entriesView = findViewById(R.id.list_entries);\n        _entriesView.addOnScrollListener(new RecyclerView.OnScrollListener() {\n            @Override\n            public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) {\n                super.onScrolled(recyclerView, dx, dy);\n                _fabScrollHelper.onScroll(dx, dy);\n            }\n        });\n\n        LinearLayoutManager layoutManager = new LinearLayoutManager(this);\n        _entriesView.setLayoutManager(layoutManager);\n        _entriesView.setAdapter(_adapter);\n        _entriesView.setNestedScrollingEnabled(false);\n\n        FloatingActionButton fab = findViewById(R.id.fab);\n        fab.setOnClickListener(v -> {\n            if (_vaultManager.getVault().getEntries().size() > 0\n                    && _menu.findItem(R.id.toggle_wipe_vault).isChecked()) {\n                showWipeEntriesDialog();\n            } else {\n                saveAndFinish(false);\n            }\n        });\n        _fabScrollHelper = new FabScrollHelper(fab);\n\n        DatabaseImporter.Definition importerDef = (DatabaseImporter.Definition) getIntent().getSerializableExtra(\"importerDef\");\n        startImport(importerDef, (File) getIntent().getSerializableExtra(\"file\"));\n    }\n\n    private void startImport(DatabaseImporter.Definition importerDef, @Nullable File file) {\n        DatabaseImporter importer = DatabaseImporter.create(this, importerDef.getType());\n        if (file == null) {\n            if (importer.isInstalledAppVersionSupported()) {\n                startImportApp(importer);\n            } else {\n                Dialogs.showSecureDialog(new MaterialAlertDialogBuilder(this, R.style.ThemeOverlay_Aegis_AlertDialog_Warning)\n                        .setTitle(R.string.warning)\n                        .setMessage(getString(R.string.app_version_error, importerDef.getName()))\n                        .setCancelable(false)\n                        .setIconAttribute(android.R.attr.alertDialogIcon)\n                        .setPositiveButton(R.string.yes, (dialog1, which) -> {\n                            startImportApp(importer);\n                        })\n                        .setNegativeButton(R.string.no, (dialog1, which) -> {\n                            finish();\n                        })\n                        .create());\n            }\n        } else {\n            startImportFile(importer, file);\n        }\n    }\n\n    private void startImportFile(@NonNull DatabaseImporter importer, @NonNull File file) {\n        try (InputStream stream = new FileInputStream(file)) {\n            DatabaseImporter.State state = importer.read(stream);\n            processImporterState(state);\n        } catch (FileNotFoundException e) {\n            Toast.makeText(this, R.string.file_not_found, Toast.LENGTH_SHORT).show();\n        } catch (DatabaseImporterException | IOException e) {\n            e.printStackTrace();\n            Dialogs.showErrorDialog(this, R.string.reading_file_error, e, (dialog, which) -> finish());\n        }\n    }\n\n    private void startImportApp(@NonNull DatabaseImporter importer) {\n        RootShellTask task = new RootShellTask(this, shell -> {\n            if (isFinishing()) {\n                return;\n            }\n\n            if (shell == null || !shell.isRoot()) {\n                Toast.makeText(this, R.string.root_error, Toast.LENGTH_SHORT).show();\n                finish();\n                return;\n            }\n\n            try {\n                DatabaseImporter.State state = importer.readFromApp(shell);\n                processImporterState(state);\n            } catch (PackageManager.NameNotFoundException e) {\n                e.printStackTrace();\n                Toast.makeText(this, R.string.app_lookup_error, Toast.LENGTH_SHORT).show();\n                finish();\n            } catch (DatabaseImporterException e) {\n                e.printStackTrace();\n                Dialogs.showErrorDialog(this, R.string.reading_file_error, e, (dialog, which) -> finish());\n            } finally {\n                try {\n                    shell.close();\n                } catch (IOException e) {\n                    e.printStackTrace();\n                }\n            }\n        });\n        task.execute(this);\n    }\n\n    private void processImporterState(DatabaseImporter.State state) {\n        try {\n            if (state.isEncrypted()) {\n                state.decrypt(this, new DatabaseImporter.DecryptListener() {\n                    @Override\n                    public void onStateDecrypted(DatabaseImporter.State state) {\n                        processDecryptedImporterState(state);\n                    }\n\n                    @Override\n                    public void onError(Exception e) {\n                        e.printStackTrace();\n                        Dialogs.showErrorDialog(ImportEntriesActivity.this, R.string.decryption_error, e, (dialog, which) -> finish());\n                    }\n\n                    @Override\n                    public void onCanceled() {\n                        finish();\n                    }\n                });\n            } else {\n                processDecryptedImporterState(state);\n            }\n        } catch (DatabaseImporterException e) {\n            e.printStackTrace();\n            Dialogs.showErrorDialog(this, R.string.parsing_file_error, e, (dialog, which) -> finish());\n        }\n    }\n\n    private void processDecryptedImporterState(DatabaseImporter.State state) {\n        DatabaseImporter.Result result;\n        try {\n            result = state.convert();\n        } catch (DatabaseImporterException e) {\n            e.printStackTrace();\n            Dialogs.showErrorDialog(this, R.string.parsing_file_error, e, (dialog, which) -> finish());\n            return;\n        }\n\n        Map<UUID, VaultEntryIcon> icons = result.getEntries().getValues().stream()\n                .filter(e -> e.getIcon() != null\n                        && !e.getIcon().getType().equals(IconType.SVG)\n                        && !BitmapHelper.isVaultEntryIconOptimized(e.getIcon()))\n                .collect(Collectors.toMap(VaultEntry::getUUID, VaultEntry::getIcon));\n        if (!icons.isEmpty()) {\n            IconOptimizationTask task = new IconOptimizationTask(this, newIcons -> {\n                for (Map.Entry<UUID, VaultEntryIcon> mapEntry : newIcons.entrySet()) {\n                    VaultEntry entry = result.getEntries().getByUUID(mapEntry.getKey());\n                    entry.setIcon(mapEntry.getValue());\n                }\n\n                processImporterResult(result);\n            });\n            task.execute(getLifecycle(), icons);\n        } else {\n            processImporterResult(result);\n        }\n    }\n\n    private void processImporterResult(DatabaseImporter.Result result) {\n        List<ImportEntry> importEntries = new ArrayList<>();\n        for (VaultEntry entry : result.getEntries().getValues()) {\n            ImportEntry importEntry = new ImportEntry(entry);\n            _adapter.addEntry(importEntry);\n            importEntries.add(importEntry);\n        }\n\n        _importedGroups = result.getGroups();\n\n        List<DatabaseImporterEntryException> errors = result.getErrors();\n        if (errors.size() > 0) {\n            String message = getResources().getQuantityString(R.plurals.import_error_dialog, errors.size(), errors.size());\n            Dialogs.showMultiExceptionDialog(this, R.string.import_error_title, message, errors, null);\n        }\n\n        findDuplicates(importEntries);\n    }\n\n    private void showWipeEntriesDialog() {\n        Dialogs.showCheckboxDialog(this, R.string.dialog_wipe_entries_title,\n                R.string.dialog_wipe_entries_message,\n                R.string.dialog_wipe_entries_checkbox,\n                this::saveAndFinish\n        );\n    }\n\n    private void saveAndFinish(boolean wipeEntries) {\n        VaultRepository vault = _vaultManager.getVault();\n        if (wipeEntries) {\n            vault.wipeContents();\n        }\n\n        // Given the list of selected entries, collect the UUID's of all groups\n        // that we're actually going to import\n        List<ImportEntry> selectedEntries = _adapter.getCheckedEntries();\n        List<UUID> selectedGroupUuids = new ArrayList<>();\n        for (ImportEntry entry : selectedEntries) {\n            selectedGroupUuids.addAll(entry.getEntry().getGroups());\n        }\n\n        // Add all of the new groups to the vault. If a group with the same name already\n        // exists in the vault, rewrite all entries in that group to reference the existing group.\n        for (VaultGroup importedGroup : _importedGroups) {\n            if (!selectedGroupUuids.contains(importedGroup.getUUID())) {\n                continue;\n            }\n\n            VaultGroup existingGroup = vault.findGroupByUUID(importedGroup.getUUID());\n            if (existingGroup != null) {\n                continue;\n            }\n\n            existingGroup = vault.findGroupByName(importedGroup.getName());\n            if (existingGroup == null) {\n                vault.addGroup(importedGroup);\n            } else {\n                for (ImportEntry entry : selectedEntries) {\n                    Set<UUID> entryGroups = entry.getEntry().getGroups();\n                    if (entryGroups.contains(importedGroup.getUUID())) {\n                        entryGroups.remove(importedGroup.getUUID());\n                        entryGroups.add(existingGroup.getUUID());\n                    }\n                }\n            }\n        }\n\n        for (ImportEntry selectedEntry : selectedEntries) {\n            VaultEntry entry = selectedEntry.getEntry();\n\n            // temporary: randomize the UUID of duplicate entries and add them anyway\n            if (vault.isEntryDuplicate(entry)) {\n                entry.resetUUID();\n            }\n\n            vault.addEntry(entry);\n        }\n\n        if (saveAndBackupVault()) {\n            String toastMessage = getResources().getQuantityString(R.plurals.imported_entries_count, selectedEntries.size(), selectedEntries.size());\n            Toast.makeText(this, toastMessage, Toast.LENGTH_SHORT).show();\n\n\n            setResult(RESULT_OK, null);\n\n            if (_iconPackManager.hasIconPack()) {\n                ArrayList<UUID> assignIconEntriesIds = new ArrayList<>();\n                Intent assignIconIntent = new Intent(getBaseContext(), AssignIconsActivity.class);\n                for (ImportEntry entry : selectedEntries) {\n                    assignIconEntriesIds.add(entry.getEntry().getUUID());\n                }\n\n                assignIconIntent.putExtra(\"entries\", assignIconEntriesIds);\n\n                Dialogs.showSecureDialog(new MaterialAlertDialogBuilder(this)\n                        .setTitle(R.string.import_assign_icons_dialog_title)\n                        .setMessage(R.string.import_assign_icons_dialog_text)\n                        .setPositiveButton(android.R.string.yes, (dialog, which) -> {\n                            startActivity(assignIconIntent);\n                            finish();\n                        })\n                        .setNegativeButton(android.R.string.no, ((dialogInterface, i) -> finish()))\n                        .create());\n            } else {\n                finish();\n            }\n        }\n    }\n\n    private void findDuplicates(List<ImportEntry> importEntries) {\n        List<UUID> duplicateEntries = new ArrayList<>();\n        for (ImportEntry importEntry: importEntries) {\n            boolean exists = _vaultManager.getVault().getEntries().stream().anyMatch(item ->\n                    item.getIssuer().equals(importEntry.getEntry().getIssuer()) &&\n                    Arrays.equals(item.getInfo().getSecret(), importEntry.getEntry().getInfo().getSecret()));\n\n            if (exists) {\n                duplicateEntries.add(importEntry.getEntry().getUUID());\n            }\n        }\n\n        if (duplicateEntries.size() == 0) {\n            return;\n        }\n\n        _adapter.setCheckboxStates(duplicateEntries, false);\n        Snackbar snackbar = Snackbar.make(_view, getResources().getQuantityString(R.plurals.import_duplicate_toast, duplicateEntries.size(), duplicateEntries.size()), Snackbar.LENGTH_INDEFINITE);\n        snackbar.addCallback(new Snackbar.Callback() {\n            @Override\n            public void onShown(Snackbar sb) {\n                int snackbarHeight = sb.getView().getHeight();\n\n                _entriesView.setPadding(\n                        _entriesView.getPaddingLeft(),\n                        _entriesView.getPaddingTop(),\n                        _entriesView.getPaddingRight(),\n                        _entriesView.getPaddingBottom() + snackbarHeight * 2\n                );\n            }\n\n            @Override\n            public void onDismissed(Snackbar sb, int event) {\n                int snackbarHeight = sb.getView().getHeight();\n\n                _entriesView.setPadding(\n                        _entriesView.getPaddingLeft(),\n                        _entriesView.getPaddingTop(),\n                        _entriesView.getPaddingRight(),\n                        _entriesView.getPaddingBottom() - snackbarHeight * 2\n                );\n            }\n        });\n        snackbar.setAction(R.string.undo, new View.OnClickListener() {\n            @Override\n            public void onClick(View v) {\n                _adapter.setCheckboxStates(duplicateEntries, true);\n            }\n        });\n        snackbar.show();\n    }\n\n    @Override\n    public boolean onCreateOptionsMenu(Menu menu) {\n        _menu = menu;\n        getMenuInflater().inflate(R.menu.menu_import_entries, _menu);\n        return true;\n    }\n\n    @Override\n    public boolean onOptionsItemSelected(MenuItem item) {\n        int itemId = item.getItemId();\n        if (itemId == android.R.id.home) {\n            finish();\n        } else if (itemId == R.id.toggle_checkboxes) {\n            _adapter.toggleCheckboxes();\n        } else if (itemId == R.id.toggle_wipe_vault) {\n            item.setChecked(!item.isChecked());\n        } else {\n            return super.onOptionsItemSelected(item);\n        }\n\n        return true;\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/ui/IntroActivity.java",
    "content": "package com.beemdevelopment.aegis.ui;\n\nimport static com.beemdevelopment.aegis.ui.slides.SecurityPickerSlide.CRYPT_TYPE_BIOMETRIC;\nimport static com.beemdevelopment.aegis.ui.slides.SecurityPickerSlide.CRYPT_TYPE_INVALID;\nimport static com.beemdevelopment.aegis.ui.slides.SecurityPickerSlide.CRYPT_TYPE_NONE;\nimport static com.beemdevelopment.aegis.ui.slides.SecurityPickerSlide.CRYPT_TYPE_PASS;\n\nimport android.os.Bundle;\nimport android.view.WindowManager;\nimport android.view.inputmethod.InputMethodManager;\n\nimport androidx.annotation.NonNull;\nimport androidx.annotation.Nullable;\n\nimport com.beemdevelopment.aegis.R;\nimport com.beemdevelopment.aegis.ui.dialogs.Dialogs;\nimport com.beemdevelopment.aegis.ui.intro.IntroBaseActivity;\nimport com.beemdevelopment.aegis.ui.intro.SlideFragment;\nimport com.beemdevelopment.aegis.ui.slides.DoneSlide;\nimport com.beemdevelopment.aegis.ui.slides.SecurityPickerSlide;\nimport com.beemdevelopment.aegis.ui.slides.SecuritySetupSlide;\nimport com.beemdevelopment.aegis.ui.slides.WelcomeSlide;\nimport com.beemdevelopment.aegis.vault.VaultFile;\nimport com.beemdevelopment.aegis.vault.VaultFileCredentials;\nimport com.beemdevelopment.aegis.vault.VaultRepository;\nimport com.beemdevelopment.aegis.vault.VaultRepositoryException;\nimport com.beemdevelopment.aegis.vault.slots.BiometricSlot;\nimport com.beemdevelopment.aegis.vault.slots.PasswordSlot;\n\npublic class IntroActivity extends IntroBaseActivity {\n    // Permission request codes\n    private static final int CODE_PERM_NOTIFICATIONS = 0;\n\n    @Override\n    protected void onCreate(Bundle savedInstanceState) {\n        super.onCreate(savedInstanceState);\n\n        addSlide(WelcomeSlide.class);\n        addSlide(SecurityPickerSlide.class);\n        addSlide(SecuritySetupSlide.class);\n        addSlide(DoneSlide.class);\n    }\n\n    @Override\n    protected boolean onBeforeSlideChanged(Class<? extends SlideFragment> oldSlide, @NonNull Class<? extends SlideFragment> newSlide) {\n        // hide the keyboard before every slide change\n        InputMethodManager imm = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE);\n        imm.hideSoftInputFromWindow(findViewById(android.R.id.content).getWindowToken(), 0);\n\n        if (oldSlide == SecurityPickerSlide.class\n                && newSlide == SecuritySetupSlide.class\n                && getState().getInt(\"cryptType\", CRYPT_TYPE_INVALID) == CRYPT_TYPE_NONE) {\n            skipToSlide(DoneSlide.class);\n            return true;\n        }\n\n        if (oldSlide == WelcomeSlide.class\n                && newSlide == SecurityPickerSlide.class\n                && getState().getBoolean(\"imported\")) {\n            skipToSlide(DoneSlide.class);\n            return true;\n        }\n\n        // on the welcome page, we don't want the keyboard to push any views up\n        getWindow().setSoftInputMode(newSlide == WelcomeSlide.class\n                ? WindowManager.LayoutParams.SOFT_INPUT_ADJUST_NOTHING\n                : WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);\n\n        return false;\n    }\n\n    @Override\n    protected void onAfterSlideChanged(@Nullable Class<? extends SlideFragment> oldSlide, @NonNull Class<? extends SlideFragment> newSlide) {\n        // If the user has enabled encryption, we need to request permission to show notifications\n        // in order to be able to show the \"Vault unlocked\" notification.\n        //\n        // NOTE: Disabled for now. See issue: #1047\n        /*if (newSlide == DoneSlide.class && getState().getSerializable(\"creds\") != null) {\n            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {\n                PermissionHelper.request(this, CODE_PERM_NOTIFICATIONS, Manifest.permission.POST_NOTIFICATIONS);\n            }\n        }*/\n    }\n\n    @Override\n    protected void onDonePressed() {\n        Bundle state = getState();\n\n        VaultFileCredentials creds = (VaultFileCredentials) state.getSerializable(\"creds\");\n        if (!state.getBoolean(\"imported\")) {\n            int cryptType = state.getInt(\"cryptType\", CRYPT_TYPE_INVALID);\n            if (cryptType == CRYPT_TYPE_INVALID\n                    || (cryptType == CRYPT_TYPE_NONE && creds != null)\n                    || (cryptType == CRYPT_TYPE_PASS && (creds == null || !creds.getSlots().has(PasswordSlot.class)))\n                    || (cryptType == CRYPT_TYPE_BIOMETRIC && (creds == null || !creds.getSlots().has(PasswordSlot.class) || !creds.getSlots().has(BiometricSlot.class)))) {\n                throw new RuntimeException(String.format(\"State of SecuritySetupSlide not properly propagated, cryptType: %d, creds: %s\", cryptType, creds));\n            }\n\n            try {\n                _vaultManager.initNew(creds);\n            } catch (VaultRepositoryException e) {\n                e.printStackTrace();\n                Dialogs.showErrorDialog(this, R.string.vault_init_error, e);\n                return;\n            }\n        } else {\n            VaultFile vaultFile;\n            try {\n                vaultFile = VaultRepository.readVaultFile(this);\n            } catch (VaultRepositoryException e) {\n                e.printStackTrace();\n                Dialogs.showErrorDialog(this, R.string.vault_load_error, e);\n                return;\n            }\n\n            try {\n                _vaultManager.loadFrom(vaultFile, creds);\n            } catch (VaultRepositoryException e) {\n                e.printStackTrace();\n                Dialogs.showErrorDialog(this, R.string.vault_load_error, e);\n                return;\n            }\n        }\n\n        // skip the intro from now on\n        _prefs.setIntroDone(true);\n\n        setResult(RESULT_OK);\n        finish();\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/ui/LicensesActivity.java",
    "content": "package com.beemdevelopment.aegis.ui;\n\nimport android.os.Bundle;\n\nimport com.beemdevelopment.aegis.Preferences;\nimport com.beemdevelopment.aegis.R;\nimport com.beemdevelopment.aegis.ThemeMap;\nimport com.beemdevelopment.aegis.helpers.ThemeHelper;\nimport com.mikepenz.aboutlibraries.LibsBuilder;\nimport com.mikepenz.aboutlibraries.ui.LibsActivity;\n\nimport org.jetbrains.annotations.Nullable;\n\nimport dagger.hilt.InstallIn;\nimport dagger.hilt.android.EarlyEntryPoint;\nimport dagger.hilt.android.EarlyEntryPoints;\nimport dagger.hilt.components.SingletonComponent;\n\npublic class LicensesActivity extends LibsActivity {\n    @Override\n    public void onCreate(@Nullable Bundle savedInstanceState) {\n        LibsBuilder builder = new LibsBuilder()\n                .withSearchEnabled(true)\n                .withAboutMinimalDesign(true)\n                .withActivityTitle(getString(R.string.title_activity_licenses));\n        setIntent(builder.intent(this));\n\n        Preferences _prefs = EarlyEntryPoints.get(getApplicationContext(), PrefEntryPoint.class).getPreferences();\n        ThemeHelper themeHelper = new ThemeHelper(this, _prefs);\n        themeHelper.setTheme(ThemeMap.DEFAULT);\n\n        super.onCreate(savedInstanceState);\n    }\n\n    @EarlyEntryPoint\n    @InstallIn(SingletonComponent.class)\n    public interface PrefEntryPoint {\n        Preferences getPreferences();\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/ui/MainActivity.java",
    "content": "package com.beemdevelopment.aegis.ui;\n\nimport android.Manifest;\nimport android.annotation.SuppressLint;\nimport android.content.ClipData;\nimport android.content.ClipDescription;\nimport android.content.ClipboardManager;\nimport android.content.Context;\nimport android.content.DialogInterface;\nimport android.content.Intent;\nimport android.graphics.Typeface;\nimport android.net.Uri;\nimport android.os.Build;\nimport android.os.Bundle;\nimport android.os.PersistableBundle;\nimport android.provider.Settings;\nimport android.text.Spannable;\nimport android.text.SpannableStringBuilder;\nimport android.text.style.StyleSpan;\nimport android.util.Log;\nimport android.view.KeyEvent;\nimport android.view.LayoutInflater;\nimport android.view.Menu;\nimport android.view.MenuInflater;\nimport android.view.MenuItem;\nimport android.view.View;\nimport android.view.ViewGroup;\nimport android.view.inputmethod.InputMethodManager;\nimport android.widget.AutoCompleteTextView;\nimport android.widget.Button;\nimport android.widget.CheckBox;\nimport android.widget.Toast;\n\nimport androidx.activity.OnBackPressedCallback;\nimport androidx.activity.result.ActivityResultLauncher;\nimport androidx.activity.result.contract.ActivityResultContracts.StartActivityForResult;\nimport androidx.annotation.NonNull;\nimport androidx.annotation.Nullable;\nimport androidx.appcompat.app.AlertDialog;\nimport androidx.appcompat.view.ActionMode;\nimport androidx.appcompat.widget.SearchView;\nimport androidx.core.view.ViewCompat;\nimport androidx.core.view.WindowInsetsCompat;\n\nimport com.beemdevelopment.aegis.GroupPlaceholderType;\nimport com.beemdevelopment.aegis.Preferences;\nimport com.beemdevelopment.aegis.R;\nimport com.beemdevelopment.aegis.SortCategory;\nimport com.beemdevelopment.aegis.helpers.BitmapHelper;\nimport com.beemdevelopment.aegis.helpers.DropdownHelper;\nimport com.beemdevelopment.aegis.helpers.FabMenuHelper;\nimport com.beemdevelopment.aegis.helpers.FabScrollHelper;\nimport com.beemdevelopment.aegis.helpers.PermissionHelper;\nimport com.beemdevelopment.aegis.helpers.ViewHelper;\nimport com.beemdevelopment.aegis.icons.IconType;\nimport com.beemdevelopment.aegis.otp.GoogleAuthInfo;\nimport com.beemdevelopment.aegis.otp.GoogleAuthInfoException;\nimport com.beemdevelopment.aegis.otp.OtpInfoException;\nimport com.beemdevelopment.aegis.ui.dialogs.Dialogs;\nimport com.beemdevelopment.aegis.ui.fragments.preferences.BackupsPreferencesFragment;\nimport com.beemdevelopment.aegis.ui.fragments.preferences.PreferencesFragment;\nimport com.beemdevelopment.aegis.ui.models.ErrorCardInfo;\nimport com.beemdevelopment.aegis.ui.models.VaultGroupModel;\nimport com.beemdevelopment.aegis.ui.tasks.IconOptimizationTask;\nimport com.beemdevelopment.aegis.ui.tasks.QrDecodeTask;\nimport com.beemdevelopment.aegis.ui.views.EntryListView;\nimport com.beemdevelopment.aegis.util.ClipboardUtils;\nimport com.beemdevelopment.aegis.util.TimeUtils;\nimport com.beemdevelopment.aegis.util.UUIDMap;\nimport com.beemdevelopment.aegis.vault.VaultEntry;\nimport com.beemdevelopment.aegis.vault.VaultEntryIcon;\nimport com.beemdevelopment.aegis.vault.VaultFile;\nimport com.beemdevelopment.aegis.vault.VaultGroup;\nimport com.beemdevelopment.aegis.vault.VaultRepository;\nimport com.beemdevelopment.aegis.vault.VaultRepositoryException;\nimport com.google.android.material.chip.Chip;\nimport com.google.android.material.chip.ChipGroup;\nimport com.google.android.material.color.MaterialColors;\nimport com.google.android.material.dialog.MaterialAlertDialogBuilder;\nimport com.google.android.material.floatingactionbutton.FloatingActionButton;\nimport com.google.android.material.textfield.TextInputEditText;\nimport com.google.android.material.textfield.TextInputLayout;\nimport com.google.common.base.Strings;\n\nimport java.util.ArrayList;\nimport java.util.Collection;\nimport java.util.Collections;\nimport java.util.Date;\nimport java.util.HashSet;\nimport java.util.LinkedHashMap;\nimport java.util.List;\nimport java.util.Map;\nimport java.util.Objects;\nimport java.util.Set;\nimport java.util.UUID;\nimport java.util.concurrent.atomic.AtomicReference;\nimport java.util.stream.Collectors;\n\npublic class MainActivity extends AegisActivity implements EntryListView.Listener {\n    // Permission request codes\n    private static final int CODE_PERM_CAMERA = 0;\n\n    private boolean _loaded;\n    private boolean _isRecreated;\n    private boolean _isDPadPressed;\n    private boolean _isDoingIntro;\n    private boolean _isAuthenticating;\n\n    private String _submittedSearchQuery;\n    private String _pendingSearchQuery;\n\n    private List<VaultEntry> _selectedEntries;\n\n    private Menu _menu;\n    private SearchView _searchView;\n    private EntryListView _entryListView;\n\n    private Collection<VaultGroup> _groups;\n    private ChipGroup _groupChip;\n    private Set<UUID> _groupFilter;\n    private Set<UUID> _prefGroupFilter;\n\n    private FabScrollHelper _fabScrollHelper;\n    private FabMenuHelper _fabMenuHelper;\n\n    private ActionMode _actionMode;\n    private ActionMode.Callback _actionModeCallbacks = new ActionModeCallbacks();\n\n    private LockBackPressHandler _lockBackPressHandler;\n    private SearchViewBackPressHandler _searchViewBackPressHandler;\n    private ActionModeBackPressHandler _actionModeBackPressHandler;\n    private FabMenuBackPressHandler _fabMenuBackPressHandler;\n\n    private final ActivityResultLauncher<Intent> authResultLauncher =\n            registerForActivityResult(new StartActivityForResult(), activityResult -> {\n                _isAuthenticating = false;\n                if (activityResult.getResultCode() == RESULT_OK) {\n                    onDecryptResult();\n                }\n            });\n\n    private final ActivityResultLauncher<Intent> introResultLauncher =\n            registerForActivityResult(new StartActivityForResult(), activityResult -> {\n                _isDoingIntro = false;\n                if (activityResult.getResultCode() == RESULT_OK) {\n                    onIntroResult();\n                }\n            });\n\n    private final ActivityResultLauncher<Intent> scanResultLauncher =\n            registerForActivityResult(new StartActivityForResult(), activityResult -> {\n                if (activityResult.getResultCode() != RESULT_OK || activityResult.getData() == null) {\n                    return;\n                }\n                onScanResult(activityResult.getData());\n            });\n\n    private final ActivityResultLauncher<Intent> assignIconsResultLauncher =\n            registerForActivityResult(new StartActivityForResult(), activityResult -> {\n                if (activityResult.getResultCode() != RESULT_OK || activityResult.getData() == null) {\n                    return;\n                }\n                onAssignIconsResult();\n            });\n\n    private final ActivityResultLauncher<Intent> preferenceResultLauncher =\n            registerForActivityResult(new StartActivityForResult(), activityResult -> onPreferencesResult());\n\n    private final ActivityResultLauncher<Intent> editEntryResultLauncher =\n            registerForActivityResult(new StartActivityForResult(), activityResult -> {\n                if (activityResult.getResultCode() != RESULT_OK || activityResult.getData() == null) {\n                    return;\n                }\n                onEditEntryResult();\n            });\n\n    private final ActivityResultLauncher<Intent> addEntryResultLauncher =\n            registerForActivityResult(new StartActivityForResult(), activityResult -> {\n                if (activityResult.getResultCode() != RESULT_OK || activityResult.getData() == null) {\n                    return;\n                }\n                onAddEntryResult(activityResult.getData());\n            });\n\n    private final ActivityResultLauncher<Intent> codeScanResultLauncher =\n            registerForActivityResult(new StartActivityForResult(), activityResult -> {\n                if (activityResult.getResultCode() == RESULT_OK && activityResult.getData() != null) {\n                    onScanImageResult(activityResult.getData());\n                }\n            });\n\n    @Override\n    protected void onCreate(Bundle savedInstanceState) {\n        super.onCreate(savedInstanceState);\n        setContentView(R.layout.activity_main);\n        setSupportActionBar(findViewById(R.id.toolbar));\n        ViewHelper.setupAppBarInsets(findViewById(R.id.app_bar_layout));\n        _loaded = false;\n        _isDPadPressed = false;\n        _isDoingIntro = false;\n        _isAuthenticating = false;\n        if (savedInstanceState != null) {\n            _isRecreated = true;\n            _pendingSearchQuery = savedInstanceState.getString(\"pendingSearchQuery\");\n            _submittedSearchQuery = savedInstanceState.getString(\"submittedSearchQuery\");\n            _isDoingIntro = savedInstanceState.getBoolean(\"isDoingIntro\");\n            _isAuthenticating = savedInstanceState.getBoolean(\"isAuthenticating\");\n        }\n\n        _lockBackPressHandler = new LockBackPressHandler();\n        getOnBackPressedDispatcher().addCallback(this, _lockBackPressHandler);\n        _searchViewBackPressHandler = new SearchViewBackPressHandler();\n        getOnBackPressedDispatcher().addCallback(this, _searchViewBackPressHandler);\n        _actionModeBackPressHandler = new ActionModeBackPressHandler();\n        getOnBackPressedDispatcher().addCallback(this, _actionModeBackPressHandler);\n        _fabMenuBackPressHandler = new FabMenuBackPressHandler();\n        getOnBackPressedDispatcher().addCallback(this, _fabMenuBackPressHandler);\n\n        _entryListView = (EntryListView) getSupportFragmentManager().findFragmentById(R.id.key_profiles);\n        _entryListView.setListener(this);\n        _entryListView.setCodeGroupSize(_prefs.getCodeGroupSize());\n        _entryListView.setAccountNamePosition(_prefs.getAccountNamePosition());\n        _entryListView.setShowIcon(_prefs.isIconVisible());\n        _entryListView.setShowExpirationState(_prefs.getShowExpirationState());\n        _entryListView.setShowNextCode(_prefs.getShowNextCode());\n        _entryListView.setOnlyShowNecessaryAccountNames(_prefs.onlyShowNecessaryAccountNames());\n        _entryListView.setHighlightEntry(_prefs.isEntryHighlightEnabled());\n        _entryListView.setPauseFocused(_prefs.isPauseFocusedEnabled());\n        _entryListView.setTapToReveal(_prefs.isTapToRevealEnabled());\n        _entryListView.setTapToRevealTime(_prefs.getTapToRevealTime());\n        _entryListView.setViewMode(_prefs.getCurrentViewMode());\n        _entryListView.setSortCategory(_prefs.getCurrentSortCategory(), false);\n        _entryListView.setCopyBehavior(_prefs.getCopyBehavior());\n        _entryListView.setSearchBehaviorMask(_prefs.getSearchBehaviorMask());\n        _prefGroupFilter = _prefs.getGroupFilter();\n\n         View scrimOverlayLayout = LayoutInflater.from(this).inflate(R.layout.scrim_layout, null);\n         View scrimOverlay = scrimOverlayLayout.findViewById(R.id.scrim);\n         addContentView(scrimOverlayLayout, new ViewGroup.LayoutParams(\n             ViewGroup.LayoutParams.MATCH_PARENT,\n             ViewGroup.LayoutParams.MATCH_PARENT\n         ));\n\n         View fabMenuLayout = LayoutInflater.from(this).inflate(R.layout.fab_menu, null);\n         addContentView(fabMenuLayout, new ViewGroup.LayoutParams(\n             ViewGroup.LayoutParams.MATCH_PARENT,\n             ViewGroup.LayoutParams.MATCH_PARENT\n         ));\n\n        ViewGroup menuItemsContainer = fabMenuLayout.findViewById(R.id.fab_menu_items_container);\n        FloatingActionButton fab = fabMenuLayout.findViewById(R.id.fab);\n\n        LinkedHashMap<View, Runnable> actions = new LinkedHashMap<>();\n        actions.put(fabMenuLayout.findViewById(R.id.fab_menu_item_scan), this::startScanActivity);\n        actions.put(fabMenuLayout.findViewById(R.id.fab_menu_item_scan_image), this::startScanImageActivity);\n        actions.put(fabMenuLayout.findViewById(R.id.fab_menu_item_enter), this::startEditEntryActivity);\n\n        _fabMenuHelper = new FabMenuHelper(scrimOverlay, menuItemsContainer, fab, actions);\n        _fabMenuHelper.setOnFabMenuStateChangeListener(_fabMenuBackPressHandler::setEnabled);\n\n        _groupChip = findViewById(R.id.groupChipGroup);\n        _fabScrollHelper = new FabScrollHelper(fab);\n        _selectedEntries = new ArrayList<>();\n    }\n\n    public void setGroups(Collection<VaultGroup> groups) {\n        _groups = groups;\n        _groupChip.setVisibility(_groups.isEmpty() ? View.GONE : View.VISIBLE);\n\n        if (_prefGroupFilter != null) {\n            Set<UUID> groupFilter = cleanGroupFilter(_prefGroupFilter);\n            _prefGroupFilter = null;\n            if (!groupFilter.isEmpty()) {\n                _groupFilter = groupFilter;\n                _entryListView.setGroupFilter(groupFilter);\n            }\n        } else if (_groupFilter != null) {\n            Set<UUID> groupFilter = cleanGroupFilter(_groupFilter);\n            if (!_groupFilter.equals(groupFilter)) {\n                _groupFilter = groupFilter;\n                _entryListView.setGroupFilter(groupFilter);\n            }\n        }\n\n        _entryListView.setGroups(groups);\n        initializeGroups();\n    }\n\n    private void initializeGroups() {\n        _groupChip.removeAllViews();\n        _groupChip.setSingleSelection(!_prefs.isGroupMultiselectEnabled());\n\n        for (VaultGroup group : _groups) {\n            addChipTo(_groupChip, new VaultGroupModel(group));\n        }\n\n        GroupPlaceholderType placeholderType = GroupPlaceholderType.NO_GROUP;\n        addChipTo(_groupChip, new VaultGroupModel(this, placeholderType));\n        addSaveChip(_groupChip);\n    }\n\n    private Set<UUID> cleanGroupFilter(Set<UUID> groupFilter) {\n        Set<UUID> groupUuids = _groups.stream().map(UUIDMap.Value::getUUID).collect(Collectors.toSet());\n\n        return groupFilter.stream()\n                .filter(g -> g == null || groupUuids.contains(g))\n                .collect(Collectors.toSet());\n    }\n\n    private void addChipTo(ChipGroup chipGroup, VaultGroupModel group) {\n        Chip chip = (Chip) getLayoutInflater().inflate(R.layout.chip_group_filter, null, false);\n        chip.setText(group.getName());\n        chip.setCheckable(true);\n        chip.setCheckedIconVisible(false);\n        chip.setChecked(_groupFilter != null && _groupFilter.contains(group.getUUID()));\n\n        if (group.isPlaceholder()) {\n            GroupPlaceholderType groupPlaceholderType = group.getPlaceholderType();\n            chip.setTag(groupPlaceholderType);\n\n            if (groupPlaceholderType == GroupPlaceholderType.ALL) {\n                chip.setChecked(_groupFilter == null);\n            } else if (groupPlaceholderType == GroupPlaceholderType.NO_GROUP) {\n                chip.setChecked(_groupFilter != null && _groupFilter.contains(null));\n            }\n        } else {\n            chip.setTag(group);\n        }\n\n        chip.setOnCheckedChangeListener((group1, isChecked) -> {\n            if (_actionMode != null) {\n                _actionMode.finish();\n            }\n\n            setSaveChipVisibility(true);\n\n            // Reset group filter if last checked group gets unchecked\n            if (!isChecked && _groupFilter.size() == 1) {\n                Set<UUID> groupFilter = new HashSet<>();\n\n                chipGroup.clearCheck();\n                _groupFilter = groupFilter;\n                _entryListView.setGroupFilter(groupFilter);\n                return;\n            }\n\n            _groupFilter = getGroupFilter(chipGroup);\n            _entryListView.setGroupFilter(_groupFilter);\n        });\n\n        chipGroup.addView(chip);\n    }\n\n    private void addSaveChip(ChipGroup chipGroup) {\n        Chip chip = (Chip) getLayoutInflater().inflate(R.layout.chip_group_filter, null, false);\n\n        chip.setText(getString(R.string.save));\n        chip.setVisibility(View.GONE);\n        chip.setChipStrokeWidth(0);\n        chip.setCheckable(false);\n        chip.setChipBackgroundColorResource(android.R.color.transparent);\n        chip.setTextColor(MaterialColors.getColor(chip.getRootView(), com.google.android.material.R.attr.colorSecondary));\n        chip.setClickable(true);\n        chip.setCheckedIconVisible(false);\n        chip.setOnClickListener(v -> {\n            onSaveGroupFilter(_groupFilter);\n            setSaveChipVisibility(false);\n        });\n\n        chipGroup.addView(chip);\n    }\n\n    private void setSaveChipVisibility(boolean visible) {\n        Chip saveChip = (Chip) _groupChip.getChildAt(_groupChip.getChildCount() - 1);\n        saveChip.setChecked(false);\n        saveChip.setVisibility(visible ? View.VISIBLE : View.GONE);\n    }\n\n    private static Set<UUID> getGroupFilter(ChipGroup chipGroup) {\n        return chipGroup.getCheckedChipIds().stream()\n                .filter(Objects::nonNull)\n                .map(i -> {\n                    Chip chip = chipGroup.findViewById(i);\n\n                    if (chip.getTag() instanceof VaultGroupModel) {\n                        VaultGroupModel group = (VaultGroupModel) chip.getTag();\n                        return group.getUUID();\n                    }\n\n                    return null;\n                })\n                .collect(Collectors.toSet());\n    }\n\n    @Override\n    protected void onDestroy() {\n        _entryListView.setListener(null);\n        super.onDestroy();\n    }\n\n    @Override\n    protected void onPause() {\n        Map<UUID, Integer> usageMap = _entryListView.getUsageCounts();\n        if (usageMap != null) {\n            _prefs.setUsageCount(usageMap);\n        }\n\n        Map<UUID, Long> lastUsedMap = _entryListView.getLastUsedTimestamps();\n        if (lastUsedMap != null) {\n            _prefs.setLastUsedTimestamps(lastUsedMap);\n        }\n\n        super.onPause();\n    }\n\n    @Override\n    protected void onSaveInstanceState(@NonNull Bundle instance) {\n        super.onSaveInstanceState(instance);\n        instance.putString(\"pendingSearchQuery\", _pendingSearchQuery);\n        instance.putString(\"submittedSearchQuery\", _submittedSearchQuery);\n        instance.putBoolean(\"isDoingIntro\", _isDoingIntro);\n        instance.putBoolean(\"isAuthenticating\", _isAuthenticating);\n\n        if (_groupFilter != null) {\n            instance.putSerializable(\"prefGroupFilter\", new HashSet<>(_groupFilter));\n        }\n    }\n\n    @Override\n    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {\n        if (!PermissionHelper.checkResults(grantResults)) {\n            Toast.makeText(this, getString(R.string.permission_denied), Toast.LENGTH_SHORT).show();\n            return;\n        }\n\n        if (requestCode == CODE_PERM_CAMERA) {\n            startScanActivity();\n        }\n\n        super.onRequestPermissionsResult(requestCode, permissions, grantResults);\n    }\n\n    @Override\n    public boolean onKeyDown(int keyCode, KeyEvent event) {\n        _isDPadPressed = isDPadKey(keyCode);\n        return super.onKeyDown(keyCode, event);\n    }\n\n    private static boolean isDPadKey(int keyCode) {\n        return keyCode == KeyEvent.KEYCODE_DPAD_DOWN || keyCode == KeyEvent.KEYCODE_DPAD_UP || keyCode == KeyEvent.KEYCODE_DPAD_RIGHT || keyCode == KeyEvent.KEYCODE_DPAD_LEFT;\n    }\n\n    @Override\n    public void onEntryListTouch() {\n        _isDPadPressed = false;\n\n        if (_searchView != null && !_searchView.isIconified()) {\n            if (ViewCompat.getRootWindowInsets(findViewById(android.R.id.content).getRootView()).isVisible(WindowInsetsCompat.Type.ime())) {\n                InputMethodManager inputMethodManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);\n                if (inputMethodManager != null && getCurrentFocus() != null) {\n                    inputMethodManager.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0);\n                }\n            }\n        }\n    }\n\n    private void onPreferencesResult() {\n        // refresh the entire entry list if needed\n        if (_loaded) {\n            recreate();\n        }\n    }\n\n    private void startEditEntryActivity() {\n        String clip = ClipboardUtils.readText(this);\n        if (clip != null) {\n            GoogleAuthInfo parsed;\n            try {\n                parsed = GoogleAuthInfo.parseUri(clip.trim());\n                String message = getString(\n                        R.string.import_from_clipboard_message,\n                        parsed.getAccountName(),\n                        parsed.getIssuer()\n                );\n\n                Dialogs.showSecureDialog(new MaterialAlertDialogBuilder(this)\n                        .setTitle(R.string.import_from_clipboard_title)\n                        .setMessage(message)\n                        .setPositiveButton(R.string.yes, (dialog, which) -> startEditEntryActivityForNew(new VaultEntry(parsed)))\n                        .setNegativeButton(R.string.no,  (dialog, which) -> startEditEntryActivityForManual())\n                        .create());\n\n                return;\n            } catch (GoogleAuthInfoException e) {\n                Log.i(\"EntryActivity\", \"Clipboard did not contain a valid otpauth URI\", e);\n            }\n        }\n\n        startEditEntryActivityForManual();\n    }\n\n    private void startEditEntryActivityForNew(VaultEntry entry) {\n        Intent intent = new Intent(this, EditEntryActivity.class);\n        intent.putExtra(\"newEntry\", entry);\n        intent.putExtra(\"isManual\", false);\n        addEntryResultLauncher.launch(intent);\n    }\n\n    private void startEditEntryActivityForManual() {\n        Intent intent = new Intent(this, EditEntryActivity.class);\n        intent.putExtra(\"newEntry\", VaultEntry.getDefault());\n        intent.putExtra(\"isManual\", true);\n        addEntryResultLauncher.launch(intent);\n    }\n\n    private void startEditEntryActivity(VaultEntry entry) {\n        Intent intent = new Intent(this, EditEntryActivity.class);\n        intent.putExtra(\"entryUUID\", entry.getUUID());\n        editEntryResultLauncher.launch(intent);\n    }\n\n    private void startAssignIconsActivity(List<VaultEntry> entries) {\n        ArrayList<UUID> assignIconEntriesIds = new ArrayList<>();\n        Intent assignIconIntent = new Intent(getBaseContext(), AssignIconsActivity.class);\n        for (VaultEntry entry : entries) {\n            assignIconEntriesIds.add(entry.getUUID());\n        }\n\n        assignIconIntent.putExtra(\"entries\", assignIconEntriesIds);\n        assignIconsResultLauncher.launch(assignIconIntent);\n    }\n\n    private void startAssignGroupsDialog() {\n        View view = LayoutInflater.from(this).inflate(R.layout.dialog_select_group, null);\n        TextInputLayout groupSelectionLayout = view.findViewById(R.id.group_selection_layout);\n        AutoCompleteTextView groupsSelection = view.findViewById(R.id.group_selection_dropdown);\n        TextInputLayout newGroupLayout = view.findViewById(R.id.text_group_name_layout);\n        TextInputEditText newGroupText = view.findViewById(R.id.text_group_name);\n\n        Collection<VaultGroup> groups = _vaultManager.getVault().getUsedGroups();\n        List<VaultGroupModel> groupModels = new ArrayList<>();\n        groupModels.add(new VaultGroupModel(this, GroupPlaceholderType.NEW_GROUP));\n        groupModels.addAll(groups.stream().map(VaultGroupModel::new).collect(Collectors.toList()));\n        DropdownHelper.fillDropdown(this, groupsSelection, groupModels);\n\n        AtomicReference<VaultGroupModel> groupModelRef = new AtomicReference<>();\n        groupsSelection.setOnItemClickListener((parent, view1, position, id) -> {\n            VaultGroupModel groupModel = (VaultGroupModel) parent.getItemAtPosition(position);\n            groupModelRef.set(groupModel);\n\n            if (groupModel.isPlaceholder()) {\n                newGroupLayout.setVisibility(View.VISIBLE);\n                newGroupText.requestFocus();\n            } else {\n                newGroupLayout.setVisibility(View.GONE);\n            }\n\n            groupSelectionLayout.setError(null);\n        });\n\n        AlertDialog dialog = new MaterialAlertDialogBuilder(this)\n                .setTitle(R.string.assign_groups)\n                .setView(view)\n                .setPositiveButton(android.R.string.ok, null)\n                .setNegativeButton(android.R.string.cancel, null)\n                .create();\n\n        dialog.setOnShowListener(d -> {\n            Button btnPos = dialog.getButton(AlertDialog.BUTTON_POSITIVE);\n            btnPos.setOnClickListener(v -> {\n                VaultGroupModel groupModel = groupModelRef.get();\n                if (groupModel == null) {\n                    groupSelectionLayout.setError(getString(R.string.error_required_field));\n                    return;\n                }\n\n                if (groupModel.isPlaceholder()) {\n                    String newGroupName = newGroupText.getText().toString().trim();\n                    if (newGroupName.isEmpty()) {\n                        newGroupLayout.setError(getString(R.string.error_required_field));\n                        return;\n                    }\n\n                    VaultGroup group = new VaultGroup(newGroupName);\n                    _vaultManager.getVault().addGroup(group);\n                    groupModel = new VaultGroupModel(group);\n                }\n\n                for (VaultEntry selectedEntry : _selectedEntries) {\n                    selectedEntry.addGroup(groupModel.getUUID());\n                }\n\n                dialog.dismiss();\n                saveAndBackupVault();\n                _actionMode.finish();\n                setGroups(_vaultManager.getVault().getUsedGroups());\n            });\n        });\n\n        Dialogs.showSecureDialog(dialog);\n    }\n\n    private void startIntroActivity() {\n        if (!_isDoingIntro) {\n            Intent intro = new Intent(this, IntroActivity.class);\n            introResultLauncher.launch(intro);\n            _isDoingIntro = true;\n        }\n    }\n\n    private void onScanResult(Intent data) {\n        List<VaultEntry> entries = (ArrayList<VaultEntry>) data.getSerializableExtra(\"entries\");\n        if (entries != null) {\n            importScannedEntries(entries);\n        }\n    }\n\n    private void onAddEntryResult(Intent data) {\n        if (_loaded) {\n            UUID entryUUID = (UUID) data.getSerializableExtra(\"entryUUID\");\n            VaultEntry entry = _vaultManager.getVault().getEntryByUUID(entryUUID);\n            _entryListView.setEntries(_vaultManager.getVault().getEntries());\n            _entryListView.onEntryAdded(entry);\n        }\n    }\n\n    private void onEditEntryResult() {\n        if (_loaded) {\n            _entryListView.setEntries(_vaultManager.getVault().getEntries());\n        }\n    }\n\n    private void onAssignIconsResult() {\n        if (_loaded) {\n            _entryListView.setEntries(_vaultManager.getVault().getEntries());\n        }\n    }\n\n    private void onScanImageResult(Intent intent) {\n        if (intent.getData() != null) {\n            startDecodeQrCodeImages(Collections.singletonList(intent.getData()));\n            return;\n        }\n\n        if (intent.getClipData() != null) {\n            ClipData data = intent.getClipData();\n\n            List<Uri> uris = new ArrayList<>();\n            for (int i = 0; i < data.getItemCount(); i++) {\n                ClipData.Item item = data.getItemAt(i);\n                if (item.getUri() != null) {\n                    uris.add(item.getUri());\n                }\n            }\n\n            if (uris.size() > 0) {\n                startDecodeQrCodeImages(uris);\n            }\n        }\n    }\n\n    private static CharSequence buildImportError(String fileName, Throwable e) {\n        SpannableStringBuilder builder = new SpannableStringBuilder(String.format(\"%s:\\n%s\", fileName, e));\n        builder.setSpan(new StyleSpan(Typeface.BOLD), 0, fileName.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);\n        return builder;\n    }\n\n    private void startDecodeQrCodeImages(List<Uri> uris) {\n        QrDecodeTask task = new QrDecodeTask(this, (results) -> {\n            List<CharSequence> errors = new ArrayList<>();\n            List<VaultEntry> entries = new ArrayList<>();\n            List<GoogleAuthInfo.Export> googleAuthExports = new ArrayList<>();\n\n            for (QrDecodeTask.Result res : results) {\n                if (res.getException() != null) {\n                    errors.add(buildImportError(res.getFileName(), res.getException()));\n                    continue;\n                }\n\n                try {\n                    Uri scanned = Uri.parse(res.getResult().getText());\n                    if (Objects.equals(scanned.getScheme(), GoogleAuthInfo.SCHEME_EXPORT)) {\n                        GoogleAuthInfo.Export export = GoogleAuthInfo.parseExportUri(scanned);\n                        for (GoogleAuthInfo info: export.getEntries()) {\n                            VaultEntry entry = new VaultEntry(info);\n                            entries.add(entry);\n                        }\n                        googleAuthExports.add(export);\n                    } else {\n                        GoogleAuthInfo info = GoogleAuthInfo.parseUri(res.getResult().getText());\n                        VaultEntry entry = new VaultEntry(info);\n                        entries.add(entry);\n                    }\n                } catch (GoogleAuthInfoException e) {\n                    errors.add(buildImportError(res.getFileName(), e));\n                }\n            }\n\n            final DialogInterface.OnClickListener dialogDismissHandler = (dialog, which) -> importScannedEntries(entries);\n            if (!googleAuthExports.isEmpty()) {\n                boolean isSingleBatch = GoogleAuthInfo.Export.isSingleBatch(googleAuthExports);\n                if (!isSingleBatch && errors.size() > 0) {\n                    errors.add(getString(R.string.unrelated_google_auth_batches_error));\n                    Dialogs.showMultiErrorDialog(this, R.string.import_error_title, getString(R.string.no_tokens_can_be_imported), errors, null);\n                    return;\n                } else if (!isSingleBatch) {\n                    Dialogs.showErrorDialog(this, R.string.import_google_auth_failure, getString(R.string.unrelated_google_auth_batches_error));\n                    return;\n                } else {\n                    List<Integer> missingIndices = GoogleAuthInfo.Export.getMissingIndices(googleAuthExports);\n                    if (missingIndices.size() != 0) {\n                        Dialogs.showPartialGoogleAuthImportWarningDialog(this, missingIndices, entries.size(), errors, dialogDismissHandler);\n                        return;\n                    }\n                }\n            }\n\n            if ((errors.size() > 0 && results.size() > 1) || errors.size() > 1) {\n                Dialogs.showMultiErrorDialog(this, R.string.import_error_title, getString(R.string.unable_to_read_qrcode_files, uris.size() - errors.size(), uris.size()), errors, dialogDismissHandler);\n            } else if (errors.size() > 0) {\n                Dialogs.showErrorDialog(this, getString(R.string.unable_to_read_qrcode_file, results.get(0).getFileName()), errors.get(0), dialogDismissHandler);\n            } else {\n                importScannedEntries(entries);\n            }\n        });\n        task.execute(getLifecycle(), uris);\n    }\n\n    private void importScannedEntries(List<VaultEntry> entries) {\n        if (entries.size() == 1) {\n            startEditEntryActivityForNew(entries.get(0));\n        } else if (entries.size() > 1) {\n            for (VaultEntry entry: entries) {\n                _vaultManager.getVault().addEntry(entry);\n            }\n\n            if (saveAndBackupVault()) {\n                Toast.makeText(this, getResources().getQuantityString(R.plurals.added_new_entries, entries.size(), entries.size()), Toast.LENGTH_LONG).show();\n            }\n\n            _entryListView.setEntries(_vaultManager.getVault().getEntries());\n        }\n    }\n\n    private void updateSortCategoryMenu() {\n        if (_menu != null) {\n            SortCategory category = _prefs.getCurrentSortCategory();\n            _menu.findItem(category.getMenuItem()).setChecked(true);\n        }\n    }\n\n    private void onIntroResult() {\n        loadEntries();\n    }\n\n    private void checkTimeSyncSetting() {\n        boolean autoTime = Settings.Global.getInt(getContentResolver(), Settings.Global.AUTO_TIME, 1) == 1;\n        if (!autoTime && _prefs.isTimeSyncWarningEnabled()) {\n            Dialogs.showTimeSyncWarningDialog(this, (dialog, which) -> {\n                Intent intent = new Intent(Settings.ACTION_DATE_SETTINGS);\n                startActivity(intent);\n            });\n        }\n    }\n\n    private void checkIconOptimization() {\n        if (!_vaultManager.getVault().areIconsOptimized()) {\n            Map<UUID, VaultEntryIcon> oldIcons = _vaultManager.getVault().getEntries().stream()\n                    .filter(e -> e.getIcon() != null\n                            && !e.getIcon().getType().equals(IconType.SVG)\n                            && !BitmapHelper.isVaultEntryIconOptimized(e.getIcon()))\n                    .collect(Collectors.toMap(VaultEntry::getUUID, VaultEntry::getIcon));\n\n            if (!oldIcons.isEmpty()) {\n                IconOptimizationTask task = new IconOptimizationTask(this, this::onIconsOptimized);\n                task.execute(getLifecycle(), oldIcons);\n            } else {\n                onIconsOptimized(Collections.emptyMap());\n            }\n        }\n    }\n\n    private void onIconsOptimized(Map<UUID, VaultEntryIcon> newIcons) {\n        for (Map.Entry<UUID, VaultEntryIcon> mapEntry : newIcons.entrySet()) {\n            VaultEntry entry = _vaultManager.getVault().getEntryByUUID(mapEntry.getKey());\n            entry.setIcon(mapEntry.getValue());\n        }\n\n        _vaultManager.getVault().setIconsOptimized(true);\n        saveAndBackupVault();\n\n        if (!newIcons.isEmpty()) {\n            _entryListView.setEntries(_vaultManager.getVault().getEntries());\n        }\n    }\n\n    private void onDecryptResult() {\n        _auditLogRepository.addVaultUnlockedEvent();\n\n        loadEntries();\n    }\n\n    private void startScanActivity() {\n        if (!PermissionHelper.request(this, CODE_PERM_CAMERA, Manifest.permission.CAMERA)) {\n            return;\n        }\n\n        Intent scannerActivity = new Intent(getApplicationContext(), ScannerActivity.class);\n        scanResultLauncher.launch(scannerActivity);\n    }\n\n    private void startScanImageActivity() {\n        Intent galleryIntent = new Intent(Intent.ACTION_PICK);\n        galleryIntent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true);\n        galleryIntent.setDataAndType(android.provider.MediaStore.Images.Media.INTERNAL_CONTENT_URI, \"image/*\");\n\n        Intent fileIntent = new Intent(Intent.ACTION_GET_CONTENT);\n        fileIntent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true);\n        fileIntent.setType(\"image/*\");\n\n        Intent chooserIntent = Intent.createChooser(galleryIntent, getString(R.string.select_picture));\n        chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, new Intent[] { fileIntent });\n        _vaultManager.fireIntentLauncher(this, chooserIntent, codeScanResultLauncher);\n    }\n\n    private void startPreferencesActivity() {\n        startPreferencesActivity(null, null);\n    }\n\n    private void startPreferencesActivity(Class<? extends PreferencesFragment> fragmentType, String preference) {\n        Intent intent = new Intent(this, PreferencesActivity.class);\n        intent.putExtra(\"fragment\", fragmentType);\n        intent.putExtra(\"pref\", preference);\n        preferenceResultLauncher.launch(intent);\n    }\n\n    private void doShortcutActions() {\n        Intent intent = getIntent();\n        String action = intent.getStringExtra(\"action\");\n        if (action == null || !_vaultManager.isVaultLoaded()) {\n            return;\n        }\n\n        switch (action) {\n            case \"scan\":\n                startScanActivity();\n                break;\n        }\n\n        intent.removeExtra(\"action\");\n    }\n\n    private void handleIncomingIntent() {\n        if (!_vaultManager.isVaultLoaded()) {\n            return;\n        }\n\n        Intent intent = getIntent();\n        if (intent.getAction() == null) {\n            return;\n        }\n\n        Uri uri;\n        switch (intent.getAction()) {\n            case Intent.ACTION_VIEW:\n                uri = intent.getData();\n                if (uri != null) {\n                    intent.setData(null);\n                    intent.setAction(null);\n\n                    GoogleAuthInfo info;\n                    try {\n                        info = GoogleAuthInfo.parseUri(uri);\n                    } catch (GoogleAuthInfoException e) {\n                        e.printStackTrace();\n                        Dialogs.showErrorDialog(this, R.string.unable_to_process_deeplink, e);\n                        break;\n                    }\n\n                    VaultEntry entry = new VaultEntry(info);\n                    startEditEntryActivityForNew(entry);\n                }\n                break;\n            case Intent.ACTION_SEND:\n                if (intent.hasExtra(Intent.EXTRA_STREAM)) {\n                    uri = intent.getParcelableExtra(Intent.EXTRA_STREAM);\n                    intent.setAction(null);\n                    intent.removeExtra(Intent.EXTRA_STREAM);\n\n                    if (uri != null) {\n                        startDecodeQrCodeImages(Collections.singletonList(uri));\n                    }\n                }\n                if (intent.hasExtra(Intent.EXTRA_TEXT)) {\n                    String stringExtra = intent.getStringExtra(Intent.EXTRA_TEXT);\n                    intent.setAction(null);\n                    intent.removeExtra(Intent.EXTRA_TEXT);\n\n                    if (stringExtra != null) {\n                        GoogleAuthInfo info;\n                        try {\n                            info = GoogleAuthInfo.parseUri(stringExtra);\n                        } catch (GoogleAuthInfoException e) {\n                            Dialogs.showErrorDialog(this, R.string.unable_to_process_shared_text, e);\n                            break;\n                        }\n\n                        VaultEntry entry = new VaultEntry(info);\n                        startEditEntryActivityForNew(entry);\n                    }\n                }\n                break;\n            case Intent.ACTION_SEND_MULTIPLE:\n                if (intent.hasExtra(Intent.EXTRA_STREAM)) {\n                    List<Uri> uris = intent.getParcelableArrayListExtra(Intent.EXTRA_STREAM);\n                    intent.setAction(null);\n                    intent.removeExtra(Intent.EXTRA_STREAM);\n\n                    if (uris != null) {\n                        uris = uris.stream()\n                                .filter(Objects::nonNull)\n                                .collect(Collectors.toList());\n\n                        startDecodeQrCodeImages(uris);\n                    }\n                }\n                break;\n        }\n    }\n\n    @Override\n    protected void onStop() {\n        super.onStop();\n\n        _entryListView.onRefreshStop();\n    }\n\n    @Override\n    protected void onStart() {\n        super.onStart();\n\n        if (_vaultManager.isVaultInitNeeded()) {\n            if (_prefs.isIntroDone()) {\n                Toast.makeText(this, getString(R.string.vault_not_found), Toast.LENGTH_SHORT).show();\n            }\n            startIntroActivity();\n            return;\n        }\n\n        // If the vault is not loaded yet, try to load it now in case it's plain text\n        if (!_vaultManager.isVaultLoaded()) {\n            VaultFile vaultFile;\n            try {\n                vaultFile = VaultRepository.readVaultFile(this);\n            } catch (VaultRepositoryException e) {\n                e.printStackTrace();\n                Dialogs.showErrorDialog(this, R.string.vault_load_error, e, (dialog, which) -> {\n                    finish();\n                });\n                return;\n            }\n\n            if (!vaultFile.isEncrypted()) {\n                try {\n                    _vaultManager.loadFrom(vaultFile);\n                } catch (VaultRepositoryException e) {\n                    e.printStackTrace();\n                    Dialogs.showErrorDialog(this, R.string.vault_load_error, e, (dialog, which) -> {\n                        finish();\n                    });\n                    return;\n                }\n            }\n        }\n\n        if (!_vaultManager.isVaultLoaded()) {\n            startAuthActivity(false);\n        } else if (_loaded) {\n            // update the list of groups in the entry list view so that the chip gets updated\n            setGroups(_vaultManager.getVault().getUsedGroups());\n\n            // update the usage counts in case they are edited outside of the EntryListView\n            _entryListView.setUsageCounts(_prefs.getUsageCounts());\n\n            _entryListView.setLastUsedTimestamps(_prefs.getLastUsedTimestamps());\n\n            // refresh all codes to prevent showing old ones\n            _entryListView.refresh(false);\n\n            _entryListView.onRefreshStart();\n        } else {\n            loadEntries();\n            checkTimeSyncSetting();\n            checkIconOptimization();\n\n            _entryListView.onRefreshStart();\n        }\n\n        _lockBackPressHandler.setEnabled(\n            _vaultManager.isAutoLockEnabled(Preferences.AUTO_LOCK_ON_BACK_BUTTON)\n        );\n\n        handleIncomingIntent();\n        updateLockIcon();\n        updateSortCategoryMenu();\n        doShortcutActions();\n        updateErrorCard();\n    }\n\n    @Override\n    public boolean onCreateOptionsMenu(Menu menu) {\n        _menu = menu;\n        getMenuInflater().inflate(R.menu.menu_main, menu);\n\n        updateLockIcon();\n        updateSortCategoryMenu();\n\n        MenuItem searchViewMenuItem = menu.findItem(R.id.mi_search);\n        _searchView = (SearchView) searchViewMenuItem.getActionView();\n        _searchView.setMaxWidth(Integer.MAX_VALUE);\n        _searchView.setOnQueryTextFocusChangeListener((v, hasFocus) -> {\n            boolean enabled = _submittedSearchQuery != null || hasFocus;\n            _searchViewBackPressHandler.setEnabled(enabled);\n        });\n        _searchView.setOnCloseListener(() -> {\n            boolean enabled = _submittedSearchQuery != null;\n            _searchViewBackPressHandler.setEnabled(enabled);\n            _groupChip.setVisibility(_groups.isEmpty() ? View.GONE : View.VISIBLE);\n            return false;\n        });\n\n        _searchView.setQueryHint(getString(R.string.search));\n        _searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {\n            @Override\n            public boolean onQueryTextSubmit(String s) {\n                setTitle(getString(R.string.search));\n                getSupportActionBar().setSubtitle(s);\n                _entryListView.setSearchFilter(s);\n                _pendingSearchQuery = null;\n                _submittedSearchQuery = s;\n                collapseSearchView();\n                _searchViewBackPressHandler.setEnabled(true);\n                return false;\n            }\n\n            @Override\n            public boolean onQueryTextChange(String s) {\n                if (_submittedSearchQuery == null) {\n                    _entryListView.setSearchFilter(s);\n                }\n\n                _pendingSearchQuery = Strings.isNullOrEmpty(s) && !_searchView.isIconified() ? null : s;\n                if (_pendingSearchQuery != null) {\n                    _entryListView.setSearchFilter(_pendingSearchQuery);\n                }\n\n                return false;\n            }\n        });\n        _searchView.setOnSearchClickListener(v -> {\n            String query = _submittedSearchQuery != null ? _submittedSearchQuery : _pendingSearchQuery;\n            _groupChip.setVisibility(View.GONE);\n            _searchView.setQuery(query, false);\n        });\n\n        if (_pendingSearchQuery != null) {\n            _searchView.setIconified(false);\n            _searchView.setQuery(_pendingSearchQuery, false);\n            _searchViewBackPressHandler.setEnabled(true);\n        } else if (_submittedSearchQuery != null) {\n            setTitle(getString(R.string.search));\n            getSupportActionBar().setSubtitle(_submittedSearchQuery);\n            _entryListView.setSearchFilter(_submittedSearchQuery);\n            _searchViewBackPressHandler.setEnabled(true);\n        } else if (_prefs.getFocusSearchEnabled() && !_isRecreated) {\n            _searchView.setIconified(false);\n            _searchView.setFocusable(true);\n            _searchView.requestFocus();\n            _searchView.requestFocusFromTouch();\n        }\n\n        return true;\n    }\n\n    @Override\n    public boolean onOptionsItemSelected(MenuItem item) {\n        int itemId = item.getItemId();\n        if (itemId == R.id.action_settings) {\n            startPreferencesActivity();\n        } else if (itemId == R.id.action_about) {\n            Intent intent = new Intent(this, AboutActivity.class);\n            startActivity(intent);\n        } else if (itemId == R.id.action_lock) {\n            _vaultManager.lock(true);\n        } else {\n            if (item.getGroupId() == R.id.action_sort_category) {\n                item.setChecked(true);\n\n                SortCategory sortCategory;\n                int subItemId = item.getItemId();\n                if (subItemId == R.id.menu_sort_alphabetically) {\n                    sortCategory = SortCategory.ISSUER;\n                } else if (subItemId == R.id.menu_sort_alphabetically_reverse) {\n                    sortCategory = SortCategory.ISSUER_REVERSED;\n                } else if (subItemId == R.id.menu_sort_alphabetically_name) {\n                    sortCategory = SortCategory.ACCOUNT;\n                } else if (subItemId == R.id.menu_sort_alphabetically_name_reverse) {\n                    sortCategory = SortCategory.ACCOUNT_REVERSED;\n                } else if (subItemId == R.id.menu_sort_usage_count) {\n                    sortCategory = SortCategory.USAGE_COUNT;\n                } else if (subItemId == R.id.menu_sort_last_used) {\n                    sortCategory = SortCategory.LAST_USED;\n                } else {\n                    sortCategory = SortCategory.CUSTOM;\n                }\n\n                _entryListView.setSortCategory(sortCategory, true);\n                _prefs.setCurrentSortCategory(sortCategory);\n            }\n\n            return super.onOptionsItemSelected(item);\n        }\n\n        return true;\n    }\n\n    private void collapseSearchView() {\n        _groupChip.setVisibility(_groups.isEmpty() ? View.GONE : View.VISIBLE);\n        _searchView.setQuery(null, false);\n        _searchView.setIconified(true);\n    }\n\n    private void loadEntries() {\n        if (!_loaded) {\n            setGroups(_vaultManager.getVault().getUsedGroups());\n            _entryListView.setUsageCounts(_prefs.getUsageCounts());\n            _entryListView.setLastUsedTimestamps(_prefs.getLastUsedTimestamps());\n            _entryListView.setEntries(_vaultManager.getVault().getEntries());\n            if (!_isRecreated) {\n                _entryListView.runEntriesAnimation();\n            }\n            _loaded = true;\n        }\n    }\n\n    private void startAuthActivity(boolean inhibitBioPrompt) {\n        if (!_isAuthenticating) {\n            Intent intent = new Intent(this, AuthActivity.class);\n            intent.putExtra(\"inhibitBioPrompt\", inhibitBioPrompt);\n            authResultLauncher.launch(intent);\n            _isAuthenticating = true;\n        }\n    }\n\n    private void updateLockIcon() {\n        // hide the lock icon if the vault is not unlocked\n        if (_menu != null && _vaultManager.isVaultLoaded()) {\n            MenuItem item = _menu.findItem(R.id.action_lock);\n            item.setVisible(_vaultManager.getVault().isEncryptionEnabled());\n        }\n    }\n\n   private void updateErrorCard() {\n       ErrorCardInfo info = null;\n\n       Preferences.BackupResult backupRes = _prefs.getErroredBackupResult();\n       if (backupRes != null) {\n           info = new ErrorCardInfo(getString(R.string.backup_error_bar_message), view -> {\n               Dialogs.showBackupErrorDialog(this, backupRes, (dialog, which) -> {\n                   startPreferencesActivity(BackupsPreferencesFragment.class, \"pref_backups\");\n               });\n           });\n       } else if (_prefs.isBackupsReminderNeeded() && _prefs.isBackupReminderEnabled()) {\n           String text;\n           Date date = _prefs.getLatestBackupOrExportTime();\n           if (date != null) {\n               text = getString(R.string.backup_reminder_bar_message_with_latest, TimeUtils.getElapsedSince(this, date));\n           } else {\n               text = getString(R.string.backup_reminder_bar_message);\n           }\n           info = new ErrorCardInfo(text, view -> {\n               Dialogs.showSecureDialog(new MaterialAlertDialogBuilder(this, R.style.ThemeOverlay_Aegis_AlertDialog_Error)\n                       .setTitle(R.string.backup_reminder_bar_dialog_title)\n                       .setMessage(R.string.backup_reminder_bar_dialog_summary)\n                       .setIconAttribute(android.R.attr.alertDialogIcon)\n                       .setPositiveButton(R.string.backup_reminder_bar_dialog_accept, (dialog, whichButton) -> {\n                           startPreferencesActivity(BackupsPreferencesFragment.class, \"pref_backups\");\n                       })\n                       .setNegativeButton(android.R.string.cancel, null)\n                       .create());\n           });\n       } else if (_prefs.isPlaintextBackupWarningNeeded()) {\n           info = new ErrorCardInfo(getString(R.string.backup_plaintext_export_warning), view -> showPlaintextExportWarningOptions());\n       }\n\n       _entryListView.setErrorCardInfo(info);\n   }\n\n    private void showPlaintextExportWarningOptions() {\n        View view = LayoutInflater.from(this).inflate(R.layout.dialog_plaintext_warning, null);\n\n        AlertDialog dialog = new MaterialAlertDialogBuilder(this, R.style.ThemeOverlay_Aegis_AlertDialog_Warning)\n                .setTitle(R.string.backup_plaintext_export_warning)\n                .setView(view)\n                .setIconAttribute(android.R.attr.alertDialogIcon)\n                .setPositiveButton(android.R.string.ok, null)\n                .setNegativeButton(android.R.string.cancel, null)\n                .create();\n\n        CheckBox checkBox = view.findViewById(R.id.checkbox_plaintext_warning);\n        checkBox.setChecked(false);\n\n        dialog.setOnShowListener(d -> {\n            Button btnPos = dialog.getButton(AlertDialog.BUTTON_POSITIVE);\n\n            btnPos.setOnClickListener(l -> {\n                dialog.dismiss();\n\n                _prefs.setIsPlaintextBackupWarningDisabled(checkBox.isChecked());\n                _prefs.setIsPlaintextBackupWarningNeeded(false);\n\n                updateErrorCard();\n            });\n        });\n\n        Dialogs.showSecureDialog(dialog);\n    }\n\n    @Override\n    public void onRestoreInstanceState(@Nullable Bundle savedInstanceState) {\n        super.onRestoreInstanceState(savedInstanceState);\n        if (savedInstanceState == null) {\n            return;\n        }\n\n        HashSet<UUID> filter = (HashSet<UUID>) savedInstanceState.getSerializable(\"prefGroupFilter\");\n        if (filter != null) {\n            _prefGroupFilter = filter;\n        }\n    }\n\n    @Override\n    public void onEntryClick(VaultEntry entry) {\n        if (_actionMode != null) {\n            if (_selectedEntries.isEmpty()) {\n                _actionMode.finish();\n            } else {\n                setFavoriteMenuItemVisiblity();\n                setIsMultipleSelected(_selectedEntries.size() > 1);\n            }\n        }\n    }\n\n    @Override\n    public void onSelect(VaultEntry entry) {\n        _selectedEntries.add(entry);\n    }\n\n    @Override\n    public void onDeselect(VaultEntry entry) {\n        _selectedEntries.remove(entry);\n    }\n\n    private void setIsMultipleSelected(boolean multipleSelected) {\n        _entryListView.setIsLongPressDragEnabled(!multipleSelected);\n        _actionMode.getMenu().findItem(R.id.action_edit).setVisible(!multipleSelected);\n        _actionMode.getMenu().findItem(R.id.action_copy).setVisible(!multipleSelected);\n    }\n\n    private void setAssignIconsMenuItemVisibility() {\n        MenuItem assignIconsMenuItem = _actionMode.getMenu().findItem(R.id.action_assign_icons);\n        assignIconsMenuItem.setVisible(_iconPackManager.hasIconPack());\n    }\n\n    private void setFavoriteMenuItemVisiblity() {\n        MenuItem toggleFavoriteMenuItem = _actionMode.getMenu().findItem(R.id.action_toggle_favorite);\n\n        if (_selectedEntries.size() == 1){\n            if (_selectedEntries.get(0).isFavorite()) {\n                toggleFavoriteMenuItem.setIcon(R.drawable.ic_filled_star_24);\n                toggleFavoriteMenuItem.setTitle(R.string.unfavorite);\n            } else {\n                toggleFavoriteMenuItem.setIcon(R.drawable.ic_outline_star_24);\n                toggleFavoriteMenuItem.setTitle(R.string.favorite);\n            }\n        } else {\n            toggleFavoriteMenuItem.setIcon(R.drawable.ic_outline_star_24);\n            toggleFavoriteMenuItem.setTitle(String.format(\"%s / %s\", getString(R.string.favorite), getString(R.string.unfavorite)));\n        }\n    }\n\n    @Override\n    public void onLongEntryClick(VaultEntry entry) {\n        if (!_selectedEntries.isEmpty()) {\n            return;\n        }\n\n        _selectedEntries.add(entry);\n        _entryListView.setActionModeState(true, entry);\n        startActionMode();\n    }\n\n    private void startActionMode() {\n        _actionMode = startSupportActionMode(_actionModeCallbacks);\n        _actionModeBackPressHandler.setEnabled(true);\n        setFavoriteMenuItemVisiblity();\n        setAssignIconsMenuItemVisibility();\n    }\n\n    @Override\n    public void onEntryMove(VaultEntry entry1, VaultEntry entry2) {\n        _vaultManager.getVault().moveEntry(entry1, entry2);\n    }\n\n    @Override\n    public void onEntryDrop(VaultEntry entry) {\n        saveVault();\n    }\n\n    @Override\n    public void onEntryChange(VaultEntry entry) {\n        saveAndBackupVault();\n    }\n\n    public void onEntryCopy(VaultEntry entry) {\n        copyEntryCode(entry);\n    }\n\n    @Override\n    public void onScroll(int dx, int dy) {\n        if (!_isDPadPressed) {\n            _fabScrollHelper.onScroll(dx, dy);\n        }\n    }\n\n    @Override\n    public void onListChange() { _fabScrollHelper.setVisible(true); }\n\n    @Override\n    public void onSaveGroupFilter(Set<UUID> groupFilter) {\n        if (_vaultManager.getVault().isGroupsMigrationFresh()) {\n            saveAndBackupVault();\n        }\n        _prefs.setGroupFilter(groupFilter);\n    }\n\n    @Override\n    public void onLocked(boolean userInitiated) {\n        if (_actionMode != null) {\n            _actionMode.finish();\n        }\n        if (_searchView != null && !_searchView.isIconified()) {\n            collapseSearchView();\n        }\n        if (_fabMenuHelper != null && _fabMenuHelper.isOpen()) {\n            _fabMenuHelper.close();\n        }\n\n        _entryListView.clearEntries();\n        _loaded = false;\n\n        if (userInitiated) {\n            startAuthActivity(true);\n        } else {\n            super.onLocked(false);\n        }\n    }\n\n    @Override\n    protected boolean saveAndBackupVault() {\n        boolean res = super.saveAndBackupVault();\n        updateErrorCard();\n        return res;\n    }\n\n    @SuppressLint(\"InlinedApi\")\n    private void copyEntryCode(VaultEntry entry) {\n        String otp;\n        try {\n            otp = entry.getInfo().getOtp();\n        } catch (OtpInfoException e) {\n            return;\n        }\n\n        ClipboardManager clipboard = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);\n        ClipData clip = ClipData.newPlainText(\"text/plain\", otp);\n        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {\n            PersistableBundle extras = new PersistableBundle();\n            extras.putBoolean(ClipDescription.EXTRA_IS_SENSITIVE, true);\n            clip.getDescription().setExtras(extras);\n        }\n        clipboard.setPrimaryClip(clip);\n        if (_prefs.isMinimizeOnCopyEnabled()) {\n            moveTaskToBack(true);\n        }\n    }\n\n    private class SearchViewBackPressHandler extends OnBackPressedCallback {\n        public SearchViewBackPressHandler() {\n            super(false);\n        }\n\n        @Override\n        public void handleOnBackPressed() {\n            if (!_searchView.isIconified() || _submittedSearchQuery != null) {\n                _submittedSearchQuery = null;\n                _pendingSearchQuery = null;\n                _entryListView.setSearchFilter(null);\n\n                collapseSearchView();\n                setTitle(R.string.app_name);\n                getSupportActionBar().setSubtitle(null);\n            }\n        }\n    }\n\n    private class LockBackPressHandler extends OnBackPressedCallback {\n        public LockBackPressHandler() {\n            super(false);\n        }\n\n        @Override\n        public void handleOnBackPressed() {\n            if (_vaultManager.isAutoLockEnabled(Preferences.AUTO_LOCK_ON_BACK_BUTTON)) {\n                _vaultManager.lock(false);\n            }\n        }\n    }\n\n    private class ActionModeBackPressHandler extends OnBackPressedCallback {\n        public ActionModeBackPressHandler() {\n            super(false);\n        }\n\n        @Override\n        public void handleOnBackPressed() {\n            if (_actionMode != null) {\n                _actionMode.finish();\n            }\n        }\n    }\n\n    private class FabMenuBackPressHandler extends OnBackPressedCallback {\n        public FabMenuBackPressHandler() {\n            super(false);\n        }\n\n        @Override\n        public void handleOnBackPressed() {\n            if (_fabMenuHelper != null && _fabMenuHelper.isOpen()) {\n                _fabMenuHelper.close();\n            }\n        }\n    }\n\n    private class ActionModeCallbacks implements ActionMode.Callback {\n        @Override\n        public boolean onCreateActionMode(ActionMode mode, Menu menu) {\n            MenuInflater inflater = getMenuInflater();\n            inflater.inflate(R.menu.menu_action_mode, menu);\n            return true;\n        }\n\n        @Override\n        public boolean onPrepareActionMode(ActionMode mode, Menu menu) {\n            return false;\n        }\n\n        @Override\n        public boolean onActionItemClicked(ActionMode mode, MenuItem item) {\n            if (_selectedEntries.size() == 0) {\n                mode.finish();\n                return true;\n            }\n\n            int itemId = item.getItemId();\n            if (itemId == R.id.action_copy) {\n                copyEntryCode(_selectedEntries.get(0));\n                mode.finish();\n            } else if (itemId == R.id.action_edit) {\n                startEditEntryActivity(_selectedEntries.get(0));\n                mode.finish();\n            } else if (itemId == R.id.action_toggle_favorite) {\n                for (VaultEntry entry : _selectedEntries) {\n                    _vaultManager.getVault().editEntry(entry, newEntry -> {\n                        newEntry.setIsFavorite(!newEntry.isFavorite());\n                    });\n                }\n\n                saveAndBackupVault();\n                _entryListView.setEntries(_vaultManager.getVault().getEntries());\n                mode.finish();\n            } else if (itemId == R.id.action_share_qr) {\n                Intent intent = new Intent(getBaseContext(), TransferEntriesActivity.class);\n                ArrayList<GoogleAuthInfo> authInfos = new ArrayList<>();\n                for (VaultEntry entry : _selectedEntries) {\n                    GoogleAuthInfo authInfo = new GoogleAuthInfo(entry.getInfo(), entry.getName(), entry.getIssuer());\n                    authInfos.add(authInfo);\n\n                    _auditLogRepository.addEntrySharedEvent(entry.getUUID().toString());\n                }\n\n                intent.putExtra(\"authInfos\", authInfos);\n                startActivity(intent);\n\n                mode.finish();\n            } else if (itemId == R.id.action_delete) {\n                Dialogs.showDeleteEntriesDialog(MainActivity.this, _selectedEntries, (d, which) -> {\n                    for (VaultEntry entry : _selectedEntries) {\n                        _vaultManager.getVault().removeEntry(entry);\n                    }\n                    saveAndBackupVault();\n                    _entryListView.setGroups(_vaultManager.getVault().getUsedGroups());\n                    _entryListView.setEntries(_vaultManager.getVault().getEntries());\n                    mode.finish();\n                });\n            } else if (itemId == R.id.action_select_all) {\n                _selectedEntries = _entryListView.selectAllEntries();\n                setFavoriteMenuItemVisiblity();\n                setIsMultipleSelected(_selectedEntries.size() > 1);\n            } else if (itemId == R.id.action_assign_icons) {\n                startAssignIconsActivity(_selectedEntries);\n                mode.finish();\n            } else if (itemId == R.id.action_assign_groups) {\n                startAssignGroupsDialog();\n            } else {\n                return false;\n            }\n\n            return true;\n        }\n\n        @Override\n        public void onDestroyActionMode(ActionMode mode) {\n            _entryListView.setActionModeState(false, null);\n            _actionModeBackPressHandler.setEnabled(false);\n            _selectedEntries.clear();\n            _actionMode = null;\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/ui/PanicResponderActivity.java",
    "content": "package com.beemdevelopment.aegis.ui;\n\nimport android.content.Intent;\nimport android.os.Bundle;\nimport android.widget.Toast;\n\nimport com.beemdevelopment.aegis.BuildConfig;\nimport com.beemdevelopment.aegis.R;\nimport com.beemdevelopment.aegis.crypto.pins.GuardianProjectFDroidRSA2048;\nimport com.beemdevelopment.aegis.vault.VaultRepository;\n\nimport info.guardianproject.GuardianProjectRSA4096;\nimport info.guardianproject.trustedintents.TrustedIntents;\n\npublic class PanicResponderActivity extends AegisActivity {\n    public static final String PANIC_TRIGGER_ACTION = \"info.guardianproject.panic.action.TRIGGER\";\n\n    @Override\n    protected void onCreate(Bundle savedInstanceState) {\n        super.onCreate(savedInstanceState);\n\n        if (!_prefs.isPanicTriggerEnabled()) {\n            Toast.makeText(this, R.string.panic_trigger_ignore_toast, Toast.LENGTH_SHORT).show();\n            finish();\n            return;\n        }\n\n        Intent intent;\n        if (!BuildConfig.TEST.get()) {\n            TrustedIntents trustedIntents = TrustedIntents.get(this);\n            trustedIntents.addTrustedSigner(GuardianProjectRSA4096.class);\n            trustedIntents.addTrustedSigner(GuardianProjectFDroidRSA2048.class);\n\n            intent = trustedIntents.getIntentFromTrustedSender(this);\n        } else {\n            intent = getIntent();\n        }\n\n        if (intent != null && PANIC_TRIGGER_ACTION.equals(intent.getAction())) {\n            VaultRepository.deleteFile(this);\n            _vaultManager.lock(false);\n            finishApp();\n            return;\n        }\n\n        finish();\n    }\n\n    private void finishApp() {\n        ExitActivity.exitAppAndRemoveFromRecents(this);\n        finishAndRemoveTask();\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/ui/PreferencesActivity.java",
    "content": "package com.beemdevelopment.aegis.ui;\n\nimport android.os.Bundle;\nimport android.view.MenuItem;\n\nimport androidx.annotation.NonNull;\nimport androidx.fragment.app.Fragment;\nimport androidx.fragment.app.FragmentManager;\nimport androidx.preference.Preference;\nimport androidx.preference.PreferenceFragmentCompat;\n\nimport com.beemdevelopment.aegis.R;\nimport com.beemdevelopment.aegis.ui.fragments.preferences.AppearancePreferencesFragment;\nimport com.beemdevelopment.aegis.ui.fragments.preferences.MainPreferencesFragment;\nimport com.beemdevelopment.aegis.ui.fragments.preferences.PreferencesFragment;\nimport com.beemdevelopment.aegis.helpers.ViewHelper;\n\npublic class PreferencesActivity extends AegisActivity implements\n        PreferenceFragmentCompat.OnPreferenceStartFragmentCallback {\n    private Fragment _fragment;\n    private CharSequence _prefTitle;\n\n    @Override\n    protected void onCreate(Bundle savedInstanceState) {\n        super.onCreate(savedInstanceState);\n        if (abortIfOrphan(savedInstanceState)) {\n            return;\n        }\n        setContentView(R.layout.activity_preferences);\n        setSupportActionBar(findViewById(R.id.toolbar));\n        ViewHelper.setupAppBarInsets(findViewById(R.id.app_bar_layout));\n        getSupportFragmentManager()\n                .registerFragmentLifecycleCallbacks(new FragmentResumeListener(), true);\n\n        if (getSupportActionBar() != null) {\n            getSupportActionBar().setDisplayHomeAsUpEnabled(true);\n            getSupportActionBar().setDisplayShowHomeEnabled(true);\n        }\n\n        if (savedInstanceState == null) {\n            _fragment = new MainPreferencesFragment();\n            _fragment.setArguments(getIntent().getExtras());\n\n            getSupportFragmentManager().beginTransaction()\n                    .replace(R.id.content, _fragment)\n                    .commit();\n\n            PreferencesFragment requestedFragment = getRequestedFragment();\n            if (requestedFragment != null) {\n                _fragment = requestedFragment;\n                showFragment(_fragment);\n            }\n        } else {\n            _fragment = getSupportFragmentManager().findFragmentById(R.id.content);\n            _prefTitle = savedInstanceState.getCharSequence(\"prefTitle\");\n            if (_prefTitle != null) {\n                setTitle(_prefTitle);\n            }\n        }\n    }\n\n    @Override\n    protected void onSaveInstanceState(@NonNull final Bundle outState) {\n        outState.putCharSequence(\"prefTitle\", _prefTitle);\n        super.onSaveInstanceState(outState);\n    }\n\n    @Override\n    public boolean onOptionsItemSelected(MenuItem item) {\n        if (item.getItemId() == android.R.id.home) {\n            getOnBackPressedDispatcher().onBackPressed();\n        } else {\n            return super.onOptionsItemSelected(item);\n        }\n\n        return true;\n    }\n\n    @Override\n    public boolean onPreferenceStartFragment(@NonNull PreferenceFragmentCompat caller, Preference pref) {\n        _fragment = getSupportFragmentManager().getFragmentFactory().instantiate(getClassLoader(), pref.getFragment());\n        _fragment.setArguments(pref.getExtras());\n        _fragment.setTargetFragment(caller, 0);\n        showFragment(_fragment);\n\n        _prefTitle = pref.getTitle();\n        setTitle(_prefTitle);\n        return true;\n    }\n\n    private void showFragment(Fragment fragment) {\n        getSupportFragmentManager().beginTransaction()\n                .setCustomAnimations(R.anim.slide_in_right, R.anim.slide_out_left, R.anim.slide_in_left, R.anim.slide_out_right)\n                .replace(R.id.content, fragment)\n                .addToBackStack(null)\n                .commit();\n    }\n\n    @SuppressWarnings(\"unchecked\")\n    private PreferencesFragment getRequestedFragment() {\n        Class<? extends PreferencesFragment> fragmentType = (Class<? extends PreferencesFragment>) getIntent().getSerializableExtra(\"fragment\");\n        if (fragmentType == null) {\n            return null;\n        }\n\n        try {\n            return fragmentType.newInstance();\n        } catch (IllegalAccessException | InstantiationException e) {\n            throw new RuntimeException(e);\n        }\n    }\n\n    private class FragmentResumeListener extends FragmentManager.FragmentLifecycleCallbacks {\n        @Override\n        public void onFragmentStarted(@NonNull FragmentManager fm, @NonNull Fragment f) {\n            if (f instanceof MainPreferencesFragment) {\n                setTitle(R.string.action_settings);\n            } else if (f instanceof AppearancePreferencesFragment) {\n                _prefTitle = getString(R.string.pref_section_appearance_title);\n                setTitle(_prefTitle);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/ui/ScannerActivity.java",
    "content": "package com.beemdevelopment.aegis.ui;\n\nimport android.content.Intent;\nimport android.net.Uri;\nimport android.os.Bundle;\nimport android.os.Handler;\nimport android.view.Menu;\nimport android.view.MenuItem;\nimport android.widget.Toast;\n\nimport androidx.annotation.NonNull;\nimport androidx.camera.core.CameraInfoUnavailableException;\nimport androidx.camera.core.CameraSelector;\nimport androidx.camera.core.ImageAnalysis;\nimport androidx.camera.core.Preview;\nimport androidx.camera.lifecycle.ProcessCameraProvider;\nimport androidx.camera.view.PreviewView;\nimport androidx.core.content.ContextCompat;\n\nimport com.beemdevelopment.aegis.R;\nimport com.beemdevelopment.aegis.helpers.QrCodeAnalyzer;\nimport com.beemdevelopment.aegis.otp.GoogleAuthInfo;\nimport com.beemdevelopment.aegis.otp.GoogleAuthInfoException;\nimport com.beemdevelopment.aegis.ui.dialogs.Dialogs;\nimport com.beemdevelopment.aegis.helpers.ViewHelper;\nimport com.beemdevelopment.aegis.vault.VaultEntry;\nimport com.google.common.util.concurrent.ListenableFuture;\nimport com.google.zxing.Result;\n\nimport java.util.ArrayList;\nimport java.util.List;\nimport java.util.concurrent.ExecutionException;\nimport java.util.concurrent.ExecutorService;\nimport java.util.concurrent.Executors;\n\npublic class ScannerActivity extends AegisActivity implements QrCodeAnalyzer.Listener {\n    private ProcessCameraProvider _cameraProvider;\n    private ListenableFuture<ProcessCameraProvider> _cameraProviderFuture;\n\n    private List<Integer> _lenses;\n    private int _currentLens;\n\n    private Menu _menu;\n    private ImageAnalysis _analysis;\n    private PreviewView _previewView;\n    private ExecutorService _executor;\n\n    private int _batchId = 0;\n    private int _batchIndex = -1;\n    private List<VaultEntry> _entries;\n\n    @Override\n    public void onCreate(Bundle savedInstanceState) {\n        super.onCreate(savedInstanceState);\n        if (abortIfOrphan(savedInstanceState)) {\n            return;\n        }\n        setContentView(R.layout.activity_scanner);\n        setSupportActionBar(findViewById(R.id.toolbar));\n        ViewHelper.setupAppBarInsets(findViewById(R.id.app_bar_layout));\n\n        _entries = new ArrayList<>();\n        _lenses = new ArrayList<>();\n        _previewView = findViewById(R.id.preview_view);\n        _executor = Executors.newSingleThreadExecutor();\n\n        _cameraProviderFuture = ProcessCameraProvider.getInstance(this);\n        _cameraProviderFuture.addListener(() -> {\n            try {\n                _cameraProvider = _cameraProviderFuture.get();\n            } catch (ExecutionException | InterruptedException e) {\n                // if we're to believe the Android documentation, this should never happen\n                // https://developer.android.com/training/camerax/preview#check-provider\n                throw new RuntimeException(e);\n            }\n\n            addCamera(CameraSelector.LENS_FACING_BACK);\n            addCamera(CameraSelector.LENS_FACING_FRONT);\n            if (_lenses.size() == 0) {\n                Toast.makeText(this, getString(R.string.no_cameras_available), Toast.LENGTH_LONG).show();\n                finish();\n                return;\n            }\n            _currentLens = _lenses.get(0);\n            updateCameraIcon();\n\n            bindPreview(_cameraProvider);\n        }, ContextCompat.getMainExecutor(this));\n    }\n\n    @Override\n    protected void onDestroy() {\n        if (_executor != null) {\n            _executor.shutdownNow();\n        }\n        super.onDestroy();\n    }\n\n    @Override\n    public boolean onCreateOptionsMenu(Menu menu) {\n        _menu = menu;\n        getMenuInflater().inflate(R.menu.menu_scanner, menu);\n        return true;\n    }\n\n    @Override\n    public boolean onOptionsItemSelected(MenuItem item) {\n        if (_cameraProvider == null) {\n            return false;\n        }\n\n        if (item.getItemId() == R.id.action_camera) {\n            unbindPreview(_cameraProvider);\n            _currentLens = _currentLens == CameraSelector.LENS_FACING_BACK ? CameraSelector.LENS_FACING_FRONT : CameraSelector.LENS_FACING_BACK;\n            bindPreview(_cameraProvider);\n            updateCameraIcon();\n            return true;\n        }\n\n        return super.onOptionsItemSelected(item);\n    }\n\n    private void addCamera(int lens) {\n        try {\n            CameraSelector camera = new CameraSelector.Builder().requireLensFacing(lens).build();\n            if (_cameraProvider.hasCamera(camera)) {\n                _lenses.add(lens);\n            }\n        } catch (CameraInfoUnavailableException e) {\n            e.printStackTrace();\n        }\n    }\n\n    private void updateCameraIcon() {\n        if (_menu != null) {\n            MenuItem item = _menu.findItem(R.id.action_camera);\n            boolean dual = _lenses.size() > 1;\n            if (dual) {\n                switch (_currentLens) {\n                    case CameraSelector.LENS_FACING_BACK:\n                        item.setIcon(R.drawable.ic_outline_camera_front_24);\n                        break;\n                    case CameraSelector.LENS_FACING_FRONT:\n                        item.setIcon(R.drawable.ic_outline_camera_rear_24);\n                        break;\n                }\n            }\n            item.setVisible(dual);\n        }\n    }\n\n    private void bindPreview(@NonNull ProcessCameraProvider cameraProvider) {\n        Preview preview = new Preview.Builder().build();\n        preview.setSurfaceProvider(_previewView.getSurfaceProvider());\n\n        CameraSelector selector = new CameraSelector.Builder()\n                .requireLensFacing(_currentLens)\n                .build();\n\n        _analysis = new ImageAnalysis.Builder()\n                .setTargetResolution(QrCodeAnalyzer.RESOLUTION)\n                .setBackpressureStrategy(ImageAnalysis.STRATEGY_KEEP_ONLY_LATEST)\n                .build();\n        _analysis.setAnalyzer(_executor, new QrCodeAnalyzer(this));\n\n        cameraProvider.bindToLifecycle(this, selector, preview, _analysis);\n    }\n\n    private void unbindPreview(@NonNull ProcessCameraProvider cameraProvider) {\n        _analysis = null;\n        cameraProvider.unbindAll();\n    }\n\n    @Override\n    public void onQrCodeDetected(Result result) {\n        new Handler(getMainLooper()).post(() -> {\n            if (isFinishing()) {\n                return;\n            }\n\n            if (_analysis != null) {\n                try {\n                    Uri uri = Uri.parse(result.getText().trim());\n                    if (uri.getScheme() != null && uri.getScheme().equals(GoogleAuthInfo.SCHEME_EXPORT)) {\n                        handleExportUri(uri);\n                    } else {\n                        handleUri(uri);\n                    }\n                } catch (GoogleAuthInfoException e) {\n                    e.printStackTrace();\n\n                    unbindPreview(_cameraProvider);\n\n                    Dialogs.showErrorDialog(this,\n                            e.isPhoneFactor() ? R.string.read_qr_error_phonefactor : R.string.read_qr_error,\n                            e, ((dialog, which) -> bindPreview(_cameraProvider)));\n                }\n            }\n        });\n    }\n\n    private void handleUri(Uri uri) throws GoogleAuthInfoException {\n        GoogleAuthInfo info = GoogleAuthInfo.parseUri(uri);\n        List<VaultEntry> entries = new ArrayList<>();\n        entries.add(new VaultEntry(info));\n        finish(entries);\n    }\n\n    private void handleExportUri(Uri uri) throws GoogleAuthInfoException {\n        GoogleAuthInfo.Export export = GoogleAuthInfo.parseExportUri(uri);\n\n        if (_batchId == 0) {\n            _batchId = export.getBatchId();\n        }\n\n        int batchIndex = export.getBatchIndex();\n        if (_batchId != export.getBatchId()) {\n            Toast.makeText(this, R.string.google_qr_export_unrelated, Toast.LENGTH_SHORT).show();\n        } else if (_batchIndex == -1 || _batchIndex == batchIndex - 1) {\n            for (GoogleAuthInfo info : export.getEntries()) {\n                VaultEntry entry = new VaultEntry(info);\n                _entries.add(entry);\n            }\n\n            _batchIndex = batchIndex;\n            if (_batchIndex + 1 == export.getBatchSize()) {\n                finish(_entries);\n            }\n\n            Toast.makeText(this, getResources().getQuantityString(R.plurals.google_qr_export_scanned, export.getBatchSize(), _batchIndex + 1, export.getBatchSize()), Toast.LENGTH_SHORT).show();\n        } else if (_batchIndex != batchIndex) {\n            Toast.makeText(this, getString(R.string.google_qr_export_unexpected, _batchIndex + 1, batchIndex + 1), Toast.LENGTH_SHORT).show();\n        }\n    }\n\n    private void finish(List<VaultEntry> entries) {\n        Intent intent = new Intent();\n        intent.putExtra(\"entries\", (ArrayList<VaultEntry>) entries);\n        setResult(RESULT_OK, intent);\n        finish();\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/ui/TransferEntriesActivity.java",
    "content": "package com.beemdevelopment.aegis.ui;\n\nimport android.content.ClipData;\nimport android.content.ClipDescription;\nimport android.content.ClipboardManager;\nimport android.content.Context;\nimport android.content.Intent;\nimport android.graphics.Bitmap;\nimport android.graphics.Color;\nimport android.os.Build;\nimport android.os.Bundle;\nimport android.os.PersistableBundle;\nimport android.provider.Settings;\nimport android.view.MenuItem;\nimport android.view.View;\nimport android.view.ViewGroup;\nimport android.view.ViewTreeObserver;\nimport android.view.WindowManager;\nimport android.widget.Button;\nimport android.widget.TextView;\nimport android.widget.Toast;\n\nimport androidx.constraintlayout.widget.ConstraintLayout;\n\nimport com.beemdevelopment.aegis.R;\nimport com.beemdevelopment.aegis.Theme;\nimport com.beemdevelopment.aegis.helpers.QrCodeHelper;\nimport com.beemdevelopment.aegis.otp.GoogleAuthInfo;\nimport com.beemdevelopment.aegis.otp.GoogleAuthInfoException;\nimport com.beemdevelopment.aegis.otp.Transferable;\nimport com.beemdevelopment.aegis.ui.dialogs.Dialogs;\nimport com.beemdevelopment.aegis.helpers.ViewHelper;\nimport com.google.android.material.color.MaterialColors;\nimport com.google.android.material.imageview.ShapeableImageView;\nimport com.google.zxing.WriterException;\n\nimport java.util.ArrayList;\nimport java.util.List;\n\npublic class TransferEntriesActivity extends AegisActivity {\n    private List<Transferable> _authInfos;\n    private ShapeableImageView _qrImage;\n    private TextView _description;\n    private TextView _issuer;\n    private TextView _accountName;\n    private TextView _entriesCount;\n    private Button _nextButton;\n    private Button _previousButton;\n    private Button _copyButton;\n    private int _currentEntryCount = 1;\n    private float _deviceBrightness;\n    private boolean _isMaxBrightnessSet = false;\n\n    @Override\n    protected void onCreate(Bundle savedInstanceState) {\n        super.onCreate(savedInstanceState);\n        if (abortIfOrphan(savedInstanceState)) {\n            return;\n        }\n        setContentView(R.layout.activity_share_entry);\n        setSupportActionBar(findViewById(R.id.toolbar));\n        ViewHelper.setupAppBarInsets(findViewById(R.id.app_bar_layout));\n\n        _qrImage = findViewById(R.id.ivQrCode);\n        _description = findViewById(R.id.tvDescription);\n        _issuer = findViewById(R.id.tvIssuer);\n        _accountName = findViewById(R.id.tvAccountName);\n        _entriesCount = findViewById(R.id.tvEntriesCount);\n        _nextButton = findViewById(R.id.btnNext);\n        _previousButton = findViewById(R.id.btnPrevious);\n        _copyButton = findViewById(R.id.btnCopyClipboard);\n\n        if (getSupportActionBar() != null) {\n            getSupportActionBar().setDisplayHomeAsUpEnabled(true);\n            getSupportActionBar().setDisplayShowHomeEnabled(true);\n        }\n\n        Intent intent = getIntent();\n        _authInfos = (ArrayList<Transferable>) intent.getSerializableExtra(\"authInfos\");\n\n        int controlVisibility = _authInfos.size() != 1 ? View.VISIBLE : View.INVISIBLE;\n        _nextButton.setVisibility(controlVisibility);\n\n        _nextButton.setOnClickListener(v -> {\n            if (_currentEntryCount < _authInfos.size()) {\n                _previousButton.setVisibility(View.VISIBLE);\n                _currentEntryCount++;\n                generateQR();\n\n                if (_currentEntryCount == _authInfos.size()) {\n                    _nextButton.setText(R.string.done);\n                }\n            } else {\n                finish();\n            }\n        });\n\n        _previousButton.setOnClickListener(v -> {\n            if (_currentEntryCount > 1) {\n                _nextButton.setText(R.string.next);\n                _currentEntryCount--;\n                generateQR();\n\n                if (_currentEntryCount == 1) {\n                    _previousButton.setVisibility(View.INVISIBLE);\n                }\n            }\n        });\n\n        if (_authInfos.get(0) instanceof GoogleAuthInfo) {\n            _copyButton.setVisibility(View.VISIBLE);\n        }\n\n        _copyButton.setOnClickListener(v -> {\n            Transferable selectedEntry = _authInfos.get(_currentEntryCount - 1);\n            try {\n                ClipboardManager clipboard = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);\n                ClipData clip = ClipData.newPlainText(\"text/plain\", selectedEntry.getUri().toString());\n                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {\n                    PersistableBundle extras = new PersistableBundle();\n                    extras.putBoolean(ClipDescription.EXTRA_IS_SENSITIVE, true);\n                    clip.getDescription().setExtras(extras);\n                }\n                if (clipboard != null) {\n                    clipboard.setPrimaryClip(clip);\n                }\n                Toast.makeText(this, R.string.uri_copied_to_clipboard, Toast.LENGTH_SHORT).show();\n\n            } catch (GoogleAuthInfoException e) {\n                Dialogs.showErrorDialog(this, R.string.unable_to_copy_uri_to_clipboard, e);\n            }\n        });\n\n        // Calculate sensible dimensions for the QR code depending on whether we're in landscape\n        _qrImage.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {\n            @Override\n            public void onGlobalLayout() {\n                ConstraintLayout layout = findViewById(R.id.layoutShareEntry);\n                if (layout.getWidth() > layout.getHeight()) {\n                    int squareSize = (int) (0.5 * layout.getHeight());\n                    ViewGroup.LayoutParams params = _qrImage.getLayoutParams();\n                    params.width = squareSize;\n                    params.height = squareSize;\n                    _qrImage.setLayoutParams(params);\n                }\n\n                generateQR();\n\n                _qrImage.getViewTreeObserver().removeOnGlobalLayoutListener(this);\n            }\n        });\n\n        _deviceBrightness = getSystemBrightness();\n        _qrImage.setOnClickListener(v -> {\n            if (!_isMaxBrightnessSet) {\n                setBrightness(1f);\n                _isMaxBrightnessSet = true;\n            } else {\n                setBrightness(_deviceBrightness);\n                _isMaxBrightnessSet = false;\n            }\n        });\n    }\n\n    private float getSystemBrightness() {\n        int brightness = 0;\n        try {\n            brightness = Settings.System.getInt(getContentResolver(), Settings.System.SCREEN_BRIGHTNESS);\n        } catch (Settings.SettingNotFoundException e) {\n            e.printStackTrace();\n        }\n\n        return brightness / 255f;\n    }\n\n    private void setBrightness(float brightnessAmount) {\n        WindowManager.LayoutParams attrs = getWindow().getAttributes();\n        attrs.screenBrightness = brightnessAmount;\n        getWindow().setAttributes(attrs);\n    }\n\n    @Override\n    public boolean onOptionsItemSelected(MenuItem item) {\n        switch (item.getItemId()) {\n            case android.R.id.home:\n                finish();\n                break;\n            default:\n                return super.onOptionsItemSelected(item);\n        }\n\n        return true;\n    }\n\n    private void generateQR() {\n        Transferable selectedEntry = _authInfos.get(_currentEntryCount - 1);\n        if (selectedEntry instanceof GoogleAuthInfo) {\n            GoogleAuthInfo entry = (GoogleAuthInfo) selectedEntry;\n            _issuer.setText(entry.getIssuer());\n            _accountName.setText(entry.getAccountName());\n        } else if (selectedEntry instanceof GoogleAuthInfo.Export) {\n            _description.setText(R.string.google_auth_compatible_transfer_description);\n        }\n\n        _entriesCount.setText(getResources().getQuantityString(R.plurals.qr_count, _authInfos.size(), _currentEntryCount, _authInfos.size()));\n\n        int backgroundColor = _themeHelper.getConfiguredTheme() == Theme.LIGHT\n                ? MaterialColors.getColor(_qrImage, com.google.android.material.R.attr.colorSurfaceContainer)\n                : Color.WHITE;\n\n        Bitmap bitmap;\n        try {\n            bitmap = QrCodeHelper.encodeToBitmap(selectedEntry.getUri().toString(), _qrImage.getWidth(), _qrImage.getWidth(), backgroundColor);\n        } catch (WriterException | GoogleAuthInfoException e) {\n            Dialogs.showErrorDialog(this, R.string.unable_to_generate_qrcode, e);\n            return;\n        }\n\n        _qrImage.setImageBitmap(bitmap);\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/ui/components/DropdownCheckBoxes.java",
    "content": "package com.beemdevelopment.aegis.ui.components;\n\nimport android.content.Context;\nimport android.content.res.TypedArray;\nimport android.text.InputType;\nimport android.util.AttributeSet;\nimport android.view.LayoutInflater;\nimport android.view.View;\nimport android.view.ViewGroup;\nimport android.widget.BaseAdapter;\nimport android.widget.CheckBox;\nimport android.widget.Filter;\nimport android.widget.Filterable;\n\nimport androidx.annotation.PluralsRes;\nimport androidx.appcompat.widget.AppCompatAutoCompleteTextView;\n\nimport com.beemdevelopment.aegis.R;\n\nimport java.util.ArrayList;\nimport java.util.HashSet;\nimport java.util.List;\nimport java.util.Set;\nimport java.util.stream.Collectors;\n\npublic class DropdownCheckBoxes<T> extends AppCompatAutoCompleteTextView {\n    private @PluralsRes int _selectedCountPlural = R.plurals.dropdown_checkboxes_default_count;\n\n    private boolean _allowFiltering = false;\n\n    private final List<T> _items = new ArrayList<>();\n    private List<T> _visibleItems = new ArrayList<>();\n    private final Set<T> _checkedItems = new HashSet<>();\n\n    private CheckboxAdapter _adapter;\n\n    public DropdownCheckBoxes(Context context) {\n        super(context);\n        initialise(context, null);\n    }\n\n    public DropdownCheckBoxes(Context context, AttributeSet attrs) {\n        super(context, attrs);\n        initialise(context, attrs);\n    }\n\n    public DropdownCheckBoxes(Context context, AttributeSet attrs, int defStyleAttr) {\n        super(context, attrs, defStyleAttr);\n        initialise(context, attrs);\n    }\n\n    private void initialise(Context context, AttributeSet attrs) {\n        _adapter = new CheckboxAdapter();\n        setAdapter(_adapter);\n\n        if (attrs != null) {\n            TypedArray a = context.obtainStyledAttributes(\n                    attrs,\n                    R.styleable.DropdownCheckBoxes,\n                    0, 0);\n\n            _allowFiltering = a.getBoolean(R.styleable.DropdownCheckBoxes_allow_filtering, false);\n            a.recycle();\n        }\n\n        if (!_allowFiltering) {\n            setInputType(0);\n        } else {\n            setInputType(InputType.TYPE_CLASS_TEXT);\n        }\n    }\n\n    /**\n     * Add parameterized items to be displayed as a checkbox in the dropdown view\n     * the label for the checkbox is determined by the toString() method of the items\n     * you add.\n     *\n     * @param items a list of the items you want to show in the dropdown\n     * @param startChecked whether the checkbox should be checked initially\n     */\n    public void addItems(List<T> items, boolean startChecked) {\n        _items.addAll(items);\n        _visibleItems.addAll(items);\n\n        if (startChecked) {\n            _checkedItems.addAll(items);\n        }\n\n        updateCheckedItemsCountText();\n        _adapter.notifyDataSetChanged();\n    }\n\n    private void updateCheckedItemsCountText() {\n        if (_allowFiltering) {\n            return;\n        }\n\n        int count = _checkedItems.size();\n        String countString = getResources().getQuantityString(_selectedCountPlural, count, count);\n\n        setText(countString, false);\n    }\n\n    public void setCheckedItemsCountTextRes(@PluralsRes int resId) {\n        _selectedCountPlural = resId;\n    }\n\n    public Set<T> getCheckedItems() {\n        return _checkedItems;\n    }\n\n    private class CheckboxAdapter extends BaseAdapter implements Filterable {\n\n        @Override\n        public int getCount() {\n            return _visibleItems.size();\n        }\n\n        @Override\n        public T getItem(int i) {\n            return _visibleItems.get(i);\n        }\n\n        @Override\n        public long getItemId(int i) {\n            return i;\n        }\n\n        @Override\n        public View getView(int i, View convertView, ViewGroup viewGroup) {\n            if (convertView == null) {\n                convertView = LayoutInflater.from(getContext()).inflate(R.layout.dropdown_checkbox, viewGroup, false);\n            }\n\n            T item = _visibleItems.get(i);\n\n            CheckBox checkBox = convertView.findViewById(R.id.checkbox_in_dropdown);\n            checkBox.setText(item.toString());\n            checkBox.setTag(item);\n            checkBox.setChecked(_checkedItems.contains(item));\n\n            checkBox.setOnCheckedChangeListener((buttonView, isChecked) -> {\n                if (isChecked) {\n                    _checkedItems.add((T) buttonView.getTag());\n                } else {\n                    _checkedItems.remove((T) buttonView.getTag());\n                }\n\n                updateCheckedItemsCountText();\n            });\n\n            return convertView;\n        }\n\n        @Override\n        public Filter getFilter() {\n            return new Filter() {\n                @Override\n                protected FilterResults performFiltering(CharSequence query) {\n                    FilterResults results = new FilterResults();\n                    results.values = (query == null || query.toString().isEmpty())\n                                   ? _items\n                                   : _items.stream().filter(item -> {\n                                                        String q = query.toString().toLowerCase();\n                                                        String strLower = item.toString().toLowerCase();\n\n                                                        return strLower.contains(q);\n                                                    })\n                                                    .collect(Collectors.toList());\n\n                    return results;\n                }\n\n                @Override\n                protected void publishResults(CharSequence charSequence, FilterResults filterResults) {\n                    _visibleItems = (List<T>) filterResults.values;\n                    notifyDataSetChanged();\n                }\n            };\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/ui/components/NoAutofillEditText.java",
    "content": "package com.beemdevelopment.aegis.ui.components;\n\nimport android.content.Context;\nimport android.os.Build;\nimport android.util.AttributeSet;\nimport android.view.View;\n\nimport androidx.annotation.NonNull;\nimport androidx.annotation.Nullable;\n\nimport com.google.android.material.textfield.TextInputEditText;\n\npublic class NoAutofillEditText extends TextInputEditText {\n\n    public NoAutofillEditText(@NonNull Context context) {\n        super(context);\n    }\n\n    public NoAutofillEditText(@NonNull Context context, @Nullable AttributeSet attrs) {\n        super(context, attrs);\n    }\n\n    public NoAutofillEditText(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr) {\n        super(context, attrs, defStyleAttr);\n    }\n\n    @Override\n    public int getAutofillType() {\n        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {\n            return View.AUTOFILL_TYPE_NONE;\n        } else {\n            return super.getAutofillType();\n        }\n    }\n}"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/ui/dialogs/ChangelogDialog.java",
    "content": "package com.beemdevelopment.aegis.ui.dialogs;\n\nimport android.content.Context;\n\nimport com.beemdevelopment.aegis.R;\n\npublic class ChangelogDialog extends SimpleWebViewDialog {\n    public ChangelogDialog() {\n        super(R.string.changelog);\n    }\n\n    public static ChangelogDialog create() {\n        return new ChangelogDialog();\n    }\n\n    @Override\n    protected String getContent(Context context) {\n        String content = readAssetAsString(context, \"changelog.html\");\n        return String.format(content, getBackgroundColor(), getTextColor());\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/ui/dialogs/Dialogs.java",
    "content": "package com.beemdevelopment.aegis.ui.dialogs;\n\nimport android.app.Dialog;\nimport android.content.ClipData;\nimport android.content.ClipboardManager;\nimport android.content.Context;\nimport android.content.DialogInterface;\nimport android.text.InputType;\nimport android.text.SpannableStringBuilder;\nimport android.text.TextWatcher;\nimport android.text.method.PasswordTransformationMethod;\nimport android.view.LayoutInflater;\nimport android.view.View;\nimport android.view.WindowManager;\nimport android.widget.ArrayAdapter;\nimport android.widget.Button;\nimport android.widget.CheckBox;\nimport android.widget.EditText;\nimport android.widget.ListView;\nimport android.widget.NumberPicker;\nimport android.widget.ProgressBar;\nimport android.widget.RadioButton;\nimport android.widget.RadioGroup;\nimport android.widget.TextView;\nimport android.widget.Toast;\n\nimport androidx.activity.ComponentActivity;\nimport androidx.annotation.Nullable;\nimport androidx.annotation.StringRes;\nimport androidx.appcompat.app.AlertDialog;\n\nimport com.beemdevelopment.aegis.BackupsVersioningStrategy;\nimport com.beemdevelopment.aegis.Preferences;\nimport com.beemdevelopment.aegis.R;\nimport com.beemdevelopment.aegis.helpers.EditTextHelper;\nimport com.beemdevelopment.aegis.helpers.PasswordStrengthHelper;\nimport com.beemdevelopment.aegis.helpers.SimpleTextWatcher;\nimport com.beemdevelopment.aegis.importers.DatabaseImporter;\nimport com.beemdevelopment.aegis.ui.tasks.KeyDerivationTask;\nimport com.beemdevelopment.aegis.vault.VaultEntry;\nimport com.beemdevelopment.aegis.vault.slots.PasswordSlot;\nimport com.beemdevelopment.aegis.vault.slots.Slot;\nimport com.beemdevelopment.aegis.vault.slots.SlotException;\nimport com.google.android.material.dialog.MaterialAlertDialogBuilder;\nimport com.google.android.material.textfield.TextInputEditText;\nimport com.google.android.material.textfield.TextInputLayout;\n\nimport java.util.ArrayList;\nimport java.util.List;\nimport java.util.concurrent.atomic.AtomicReference;\nimport java.util.stream.Collectors;\n\nimport javax.crypto.Cipher;\n\npublic class Dialogs {\n    private Dialogs() {\n\n    }\n\n    public static void secureDialog(Dialog dialog) {\n        if (new Preferences(dialog.getContext()).isSecureScreenEnabled()) {\n            dialog.getWindow().setFlags(WindowManager.LayoutParams.FLAG_SECURE, WindowManager.LayoutParams.FLAG_SECURE);\n        }\n    }\n\n    public static void showSecureDialog(Dialog dialog) {\n        secureDialog(dialog);\n        dialog.show();\n    }\n\n    public static void showDeleteEntriesDialog(Context context, List<VaultEntry> services, DialogInterface.OnClickListener onDelete) {\n        View view = LayoutInflater.from(context).inflate(R.layout.dialog_delete_entry, null);\n        TextView textMessage = view.findViewById(R.id.text_message);\n        TextView textExplanation = view.findViewById(R.id.text_explanation);\n        String entries = services.stream()\n                .map(entry -> String.format(\"• %s\", getVaultEntryName(context, entry)))\n                .collect(Collectors.joining(\"\\n\"));\n        textExplanation.setText(context.getString(R.string.delete_entry_explanation, entries));\n\n        String title, message;\n        if (services.size() > 1) {\n            title = context.getString(R.string.delete_entries);\n            message = context.getResources().getQuantityString(R.plurals.delete_entries_description, services.size(), services.size());\n        } else {\n            title = context.getString(R.string.delete_entry);\n            message = context.getString(R.string.delete_entry_description);\n        }\n        textMessage.setText(message);\n\n        showSecureDialog(new MaterialAlertDialogBuilder(context, R.style.ThemeOverlay_Aegis_AlertDialog_Warning)\n                .setTitle(title)\n                .setView(view)\n                .setIconAttribute(android.R.attr.alertDialogIcon)\n                .setPositiveButton(android.R.string.yes, onDelete)\n                .setNegativeButton(android.R.string.no, null)\n                .create());\n    }\n\n    private static String getVaultEntryName(Context context, VaultEntry entry) {\n        if (!entry.getIssuer().isEmpty() && !entry.getName().isEmpty()) {\n            return String.format(\"%s (%s)\", entry.getIssuer(), entry.getName());\n        } else if (entry.getIssuer().isEmpty() && entry.getName().isEmpty()) {\n            return context.getString(R.string.unknown_issuer);\n        } else if (entry.getIssuer().isEmpty()) {\n            return entry.getName();\n        } else {\n            return entry.getIssuer();\n        }\n    }\n\n    public static void showDiscardDialog(Context context, DialogInterface.OnClickListener onSave, DialogInterface.OnClickListener onDiscard) {\n        showSecureDialog(new MaterialAlertDialogBuilder(context, R.style.ThemeOverlay_Aegis_AlertDialog_Warning)\n                .setTitle(context.getString(R.string.discard_changes))\n                .setMessage(context.getString(R.string.discard_changes_description))\n                .setIconAttribute(android.R.attr.alertDialogIcon)\n                .setPositiveButton(R.string.save, onSave)\n                .setNegativeButton(R.string.discard, onDiscard)\n                .create());\n    }\n\n    public static void showSetPasswordDialog(ComponentActivity activity, PasswordSlotListener listener) {\n        View view = activity.getLayoutInflater().inflate(R.layout.dialog_password, null);\n        EditText textPassword = view.findViewById(R.id.text_password);\n        EditText textPasswordConfirm = view.findViewById(R.id.text_password_confirm);\n        ProgressBar barPasswordStrength = view.findViewById(R.id.progressBar);\n        TextView textPasswordStrength = view.findViewById(R.id.text_password_strength);\n        TextInputLayout textPasswordWrapper = view.findViewById(R.id.text_password_wrapper);\n        CheckBox switchToggleVisibility = view.findViewById(R.id.check_toggle_visibility);\n        PasswordStrengthHelper passStrength = new PasswordStrengthHelper(\n                textPassword, barPasswordStrength, textPasswordStrength, textPasswordWrapper);\n\n        switchToggleVisibility.setOnCheckedChangeListener((buttonView, isChecked) -> {\n            if (isChecked) {\n                textPassword.setTransformationMethod(null);\n                textPasswordConfirm.setTransformationMethod(null);\n                textPassword.clearFocus();\n                textPasswordConfirm.clearFocus();\n            } else {\n                textPassword.setTransformationMethod(new PasswordTransformationMethod());\n                textPasswordConfirm.setTransformationMethod(new PasswordTransformationMethod());\n            }\n        });\n\n        AlertDialog dialog = new MaterialAlertDialogBuilder(activity)\n                .setTitle(R.string.set_password)\n                .setView(view)\n                .setPositiveButton(android.R.string.ok, null)\n                .setNegativeButton(android.R.string.cancel, null)\n                .create();\n        dialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);\n\n        final AtomicReference<Button> buttonOK = new AtomicReference<>();\n        dialog.setOnShowListener(d -> {\n            Button button = dialog.getButton(AlertDialog.BUTTON_POSITIVE);\n            button.setEnabled(false);\n            buttonOK.set(button);\n\n            // replace the default listener\n            button.setOnClickListener(v -> {\n                if (!EditTextHelper.areEditTextsEqual(textPassword, textPasswordConfirm)) {\n                    return;\n                }\n\n                char[] password = EditTextHelper.getEditTextChars(textPassword);\n                PasswordSlot slot = new PasswordSlot();\n                KeyDerivationTask task = new KeyDerivationTask(activity, (passSlot, key) -> {\n                    Cipher cipher;\n                    try {\n                        cipher = Slot.createEncryptCipher(key);\n                    } catch (SlotException e) {\n                        listener.onException(e);\n                        dialog.cancel();\n                        return;\n                    }\n                    listener.onSlotResult(slot, cipher);\n                    dialog.dismiss();\n                });\n                KeyDerivationTask.Params params = new KeyDerivationTask.Params(slot, password);\n                task.execute(activity.getLifecycle(), params);\n            });\n        });\n\n        TextWatcher watcher = new SimpleTextWatcher(text -> {\n            boolean equal = EditTextHelper.areEditTextsEqual(textPassword, textPasswordConfirm);\n            buttonOK.get().setEnabled(equal);\n            passStrength.measure(activity);\n        });\n        textPassword.addTextChangedListener(watcher);\n        textPasswordConfirm.addTextChangedListener(watcher);\n\n        showSecureDialog(dialog);\n    }\n\n    private static void showTextInputDialog(Context context, @StringRes int titleId, @StringRes int messageId, @StringRes int hintId, TextInputListener listener, DialogInterface.OnCancelListener cancelListener, boolean isSecret,@Nullable String hint) {\n        final AtomicReference<Button> buttonOK = new AtomicReference<>();\n        View view = LayoutInflater.from(context).inflate(R.layout.dialog_text_input, null);\n        TextInputEditText input = view.findViewById(R.id.text_input);\n        if(hint != null) {\n            input.setText(hint);\n        }\n        input.addTextChangedListener(new SimpleTextWatcher(text -> {\n            if (buttonOK.get() != null) {\n                buttonOK.get().setEnabled(!text.toString().isEmpty());\n            }\n        }));\n        TextInputLayout inputLayout = view.findViewById(R.id.text_input_layout);\n        if (isSecret) {\n            input.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD);\n        }\n        inputLayout.setHint(hintId);\n\n        MaterialAlertDialogBuilder builder = new MaterialAlertDialogBuilder(context)\n                .setTitle(titleId)\n                .setView(view)\n                .setPositiveButton(android.R.string.ok, null);\n\n        if (cancelListener != null) {\n            builder.setOnCancelListener(cancelListener);\n        }\n\n        if (messageId != 0) {\n            builder.setMessage(messageId);\n        }\n\n        AlertDialog dialog = builder.create();\n        dialog.setOnShowListener(d -> {\n            Button button = dialog.getButton(AlertDialog.BUTTON_POSITIVE);\n            button.setEnabled(false);\n            buttonOK.set(button);\n\n            button.setOnClickListener(v -> {\n                char[] text = EditTextHelper.getEditTextChars(input);\n                listener.onTextInputResult(text);\n                dialog.dismiss();\n            });\n        });\n        dialog.setCanceledOnTouchOutside(true);\n        dialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);\n        showSecureDialog(dialog);\n    }\n\n    public static void showTextInputDialog(Context context, @StringRes int titleId, @StringRes int hintId, TextInputListener listener, String text) {\n        showTextInputDialog(context, titleId, 0, hintId, listener, null, false, text);\n    }\n\n    private static void showTextInputDialog(Context context, @StringRes int titleId, @StringRes int hintId, TextInputListener listener, boolean isSecret) {\n        showTextInputDialog(context, titleId, 0, hintId, listener, null, isSecret, null);\n    }\n\n    public static void showTextInputDialog(Context context, @StringRes int titleId, @StringRes int hintId, TextInputListener listener) {\n        showTextInputDialog(context, titleId, 0, hintId, listener, null, false, null);\n    }\n\n    public static void showPasswordInputDialog(Context context, TextInputListener listener) {\n        showTextInputDialog(context, R.string.set_password, R.string.password, listener, true);\n    }\n\n    public static void showPasswordInputDialog(Context context, TextInputListener listener, DialogInterface.OnCancelListener cancelListener) {\n        showTextInputDialog(context, R.string.set_password, 0, R.string.password, listener, cancelListener, true, null);\n    }\n\n    public static void showPasswordInputDialog(Context context, @StringRes int messageId, TextInputListener listener) {\n        showTextInputDialog(context, R.string.set_password, messageId, R.string.password, listener, null, true, null);\n    }\n\n    public static void showPasswordInputDialog(Context context, @StringRes int messageId, TextInputListener listener, DialogInterface.OnCancelListener cancelListener) {\n        showTextInputDialog(context, R.string.set_password, messageId, R.string.password, listener, cancelListener, true, null);\n    }\n\n    public static void showPasswordInputDialog(Context context, @StringRes int titleId, @StringRes int messageId, TextInputListener listener, DialogInterface.OnCancelListener cancelListener) {\n        showTextInputDialog(context, titleId, messageId, R.string.password, listener, cancelListener, true, null);\n    }\n\n    public static void showCheckboxDialog(Context context, @StringRes int titleId, @StringRes int messageId, @StringRes int checkboxMessageId, CheckboxInputListener listener) {\n        View view = LayoutInflater.from(context).inflate(R.layout.dialog_checkbox, null);\n        CheckBox checkBox = view.findViewById(R.id.checkbox);\n        checkBox.setText(checkboxMessageId);\n\n        MaterialAlertDialogBuilder builder = new MaterialAlertDialogBuilder(context)\n                .setTitle(titleId)\n                .setView(view)\n                .setNegativeButton(R.string.no, (dialog1, which) ->\n                        listener.onCheckboxInputResult(false))\n                .setPositiveButton(R.string.yes, (dialog1, which) ->\n                        listener.onCheckboxInputResult(checkBox.isChecked()));\n\n        if (messageId != 0) {\n            builder.setMessage(messageId);\n        }\n\n        AlertDialog dialog = builder.create();\n\n        final AtomicReference<Button> buttonOK = new AtomicReference<>();\n        dialog.setOnShowListener(d -> {\n            Button button = dialog.getButton(AlertDialog.BUTTON_POSITIVE);\n            button.setEnabled(false);\n            buttonOK.set(button);\n        });\n\n        checkBox.setOnCheckedChangeListener((buttonView, isChecked) -> buttonOK.get().setEnabled(isChecked));\n\n        showSecureDialog(dialog);\n    }\n\n    public static void showTapToRevealTimeoutPickerDialog(Context context, int currentValue, NumberInputListener listener) {\n        View view = LayoutInflater.from(context).inflate(R.layout.dialog_number_picker, null);\n        NumberPicker numberPicker = view.findViewById(R.id.numberPicker);\n        numberPicker.setMinValue(1);\n        numberPicker.setMaxValue(60);\n        numberPicker.setValue(currentValue);\n        numberPicker.setWrapSelectorWheel(true);\n\n        AlertDialog dialog = new MaterialAlertDialogBuilder(context)\n                .setTitle(R.string.set_number)\n                .setView(view)\n                .setPositiveButton(android.R.string.ok, (dialog1, which) ->\n                        listener.onNumberInputResult(numberPicker.getValue()))\n                .create();\n\n        showSecureDialog(dialog);\n    }\n\n    public static void showBackupVersionsPickerDialog(Context context, int currentVersionCount, NumberInputListener listener) {\n        String infinite = context.getString(R.string.pref_backups_versions_infinite);\n        String[] values = {\"5\", \"10\", \"15\", \"20\", \"25\", \"30\", infinite};\n        int[] numbers = {5, 10, 15, 20, 25, 30, Preferences.BACKUPS_VERSIONS_INFINITE};\n        int selectedIndex;\n        if (currentVersionCount == Preferences.BACKUPS_VERSIONS_INFINITE) {\n            selectedIndex = numbers.length - 1;\n        } else {\n            selectedIndex = currentVersionCount / 5 - 1;\n        }\n\n        View view = LayoutInflater.from(context).inflate(R.layout.dialog_number_picker, null);\n        NumberPicker numberPicker = view.findViewById(R.id.numberPicker);\n        numberPicker.setDisplayedValues(values);\n        numberPicker.setMaxValue(values.length - 1);\n        numberPicker.setMinValue(0);\n        numberPicker.setValue(selectedIndex);\n        numberPicker.setWrapSelectorWheel(false);\n\n        AlertDialog dialog = new MaterialAlertDialogBuilder(context)\n                .setTitle(R.string.set_number)\n                .setView(view)\n                .setPositiveButton(android.R.string.ok, (dialog1, which) -> {\n                    int index = numberPicker.getValue();\n                    int number = numbers[index];\n                    listener.onNumberInputResult(number);\n                })\n                .create();\n\n        showSecureDialog(dialog);\n    }\n\n    public static void showErrorDialog(Context context, @StringRes int message, Exception e) {\n        showErrorDialog(context, message, e, null);\n    }\n\n    public static void showErrorDialog(Context context, String message, Exception e) {\n        showErrorDialog(context, message, e, null);\n    }\n\n    public static void showErrorDialog(Context context, @StringRes int message, CharSequence error) {\n        showErrorDialog(context, message, error, null);\n    }\n\n    public static void showErrorDialog(Context context, @StringRes int message, Exception e, DialogInterface.OnClickListener listener) {\n        showErrorDialog(context, message, e.toString(), listener);\n    }\n\n    public static void showErrorDialog(Context context, String message, Exception e, DialogInterface.OnClickListener listener) {\n        showErrorDialog(context, message, e.toString(), listener);\n    }\n\n    public static void showErrorDialog(Context context, @StringRes int message, CharSequence error, DialogInterface.OnClickListener listener) {\n        showErrorDialog(context, context.getString(message), error, listener);\n    }\n\n    public static void showErrorDialog(Context context, String message, CharSequence error, DialogInterface.OnClickListener listener) {\n        View view = LayoutInflater.from(context).inflate(R.layout.dialog_error, null);\n        TextView textDetails = view.findViewById(R.id.error_details);\n        textDetails.setText(error);\n        TextView textMessage = view.findViewById(R.id.error_message);\n        textMessage.setText(message);\n\n        AlertDialog dialog = new MaterialAlertDialogBuilder(context, R.style.ThemeOverlay_Aegis_AlertDialog_Error)\n                .setTitle(R.string.error_occurred)\n                .setView(view)\n                .setCancelable(false)\n                .setIconAttribute(android.R.attr.alertDialogIcon)\n                .setPositiveButton(android.R.string.ok, (dialog1, which) -> {\n                    if (listener != null) {\n                        listener.onClick(dialog1, which);\n                    }\n                })\n                .setNeutralButton(R.string.details, (dialog1, which) -> {\n                    textDetails.setVisibility(View.VISIBLE);\n                })\n                .create();\n\n        dialog.setOnShowListener(d -> {\n            Button button = dialog.getButton(AlertDialog.BUTTON_NEUTRAL);\n            button.setOnClickListener(v -> {\n                if (textDetails.getVisibility() == View.GONE) {\n                    textDetails.setVisibility(View.VISIBLE);\n                    button.setText(R.string.copy);\n                } else {\n                    ClipboardManager clipboard = (ClipboardManager) context.getSystemService(Context.CLIPBOARD_SERVICE);\n                    if (clipboard != null) {\n                        ClipData clip = ClipData.newPlainText(\"text/plain\", error);\n                        clipboard.setPrimaryClip(clip);\n                    }\n                }\n            });\n        });\n\n        Dialogs.showSecureDialog(dialog);\n    }\n\n    public static void showBackupErrorDialog(Context context, Preferences.BackupResult backupRes, DialogInterface.OnClickListener listener) {\n        String system = context.getString(backupRes.isBuiltIn() ? R.string.backup_system_builtin : R.string.backup_system_android);\n        @StringRes int details = backupRes.isPermissionError() ? R.string.backup_permission_error_dialog_details : R.string.backup_error_dialog_details;\n        String message = context.getString(details, system, backupRes.getElapsedSince(context));\n        Dialogs.showErrorDialog(context, message, backupRes.getError(), listener);\n    }\n\n    public static void showMultiErrorDialog(\n            Context context, @StringRes int title, String message, List<CharSequence> messages, DialogInterface.OnClickListener listener) {\n        Dialogs.showSecureDialog(new MaterialAlertDialogBuilder(context, R.style.ThemeOverlay_Aegis_AlertDialog_Error)\n                .setTitle(title)\n                .setMessage(message)\n                .setCancelable(false)\n                .setIconAttribute(android.R.attr.alertDialogIcon)\n                .setPositiveButton(android.R.string.ok, (dialog, which) -> {\n                    if (listener != null) {\n                        listener.onClick(dialog, which);\n                    }\n                })\n                .setNeutralButton(context.getString(R.string.details), (dialog, which) -> {\n                    showDetailedMultiErrorDialog(context, title, messages, listener);\n                })\n                .create());\n    }\n\n    public static <T extends Throwable> void showMultiExceptionDialog(\n            Context context, @StringRes int title, String message, List<T> errors, DialogInterface.OnClickListener listener) {\n        List<CharSequence> messages = new ArrayList<>();\n        for (Throwable e : errors) {\n            messages.add(e.toString());\n        }\n\n        showMultiErrorDialog(context, title, message, messages, listener);\n    }\n\n    private static void showDetailedMultiErrorDialog(\n            Context context, @StringRes int title, List<CharSequence> messages, DialogInterface.OnClickListener listener) {\n        SpannableStringBuilder builder = new SpannableStringBuilder();\n        for (CharSequence message : messages) {\n            builder.append(message);\n            builder.append(\"\\n\\n\");\n        }\n\n        AlertDialog dialog = new MaterialAlertDialogBuilder(context, R.style.ThemeOverlay_Aegis_AlertDialog_Error)\n                .setTitle(title)\n                .setMessage(builder)\n                .setCancelable(false)\n                .setIconAttribute(android.R.attr.alertDialogIcon)\n                .setPositiveButton(android.R.string.ok, (dialog1, which) -> {\n                    if (listener != null) {\n                        listener.onClick(dialog1, which);\n                    }\n                })\n                .setNeutralButton(android.R.string.copy, null)\n                .create();\n\n        dialog.setOnShowListener(d -> {\n            Button button = dialog.getButton(AlertDialog.BUTTON_NEUTRAL);\n            button.setOnClickListener(v -> {\n                ClipboardManager clipboard = (ClipboardManager) context.getSystemService(Context.CLIPBOARD_SERVICE);\n                ClipData clip = ClipData.newPlainText(\"text/plain\", builder.toString());\n                clipboard.setPrimaryClip(clip);\n                Toast.makeText(context, R.string.errors_copied, Toast.LENGTH_SHORT).show();\n            });\n        });\n\n        Dialogs.showSecureDialog(dialog);\n    }\n    \n    public static void showTimeSyncWarningDialog(Context context, Dialog.OnClickListener listener) {\n        Preferences prefs = new Preferences(context);\n        View view = LayoutInflater.from(context).inflate(R.layout.dialog_time_sync, null);\n        CheckBox checkBox = view.findViewById(R.id.check_warning_disable);\n\n        showSecureDialog(new MaterialAlertDialogBuilder(context, R.style.ThemeOverlay_Aegis_AlertDialog_Warning)\n                .setTitle(R.string.time_sync_warning_title)\n                .setView(view)\n                .setCancelable(false)\n                .setIconAttribute(android.R.attr.alertDialogIcon)\n                .setPositiveButton(R.string.yes, (dialog, which) -> {\n                    if (checkBox.isChecked()) {\n                        prefs.setIsTimeSyncWarningEnabled(false);\n                    }\n                    if (listener != null) {\n                        listener.onClick(dialog, which);\n                    }\n                })\n                .setNegativeButton(R.string.no, (dialog, which) -> {\n                    if (checkBox.isChecked()) {\n                        prefs.setIsTimeSyncWarningEnabled(false);\n                    }\n                })\n                .create());\n    }\n\n    public static void showImportersDialog(Context context, boolean isDirect, ImporterListener listener) {\n        List<DatabaseImporter.Definition> importers = DatabaseImporter.getImporters(isDirect);\n        List<String> names = importers.stream().map(DatabaseImporter.Definition::getName).collect(Collectors.toList());\n\n        int i = 0;\n        if (!isDirect) {\n            i = names.indexOf(context.getString(R.string.app_name));\n        }\n        View view = LayoutInflater.from(context).inflate(R.layout.dialog_importers, null);\n        TextView helpText = view.findViewById(R.id.text_importer_help);\n        setImporterHelpText(helpText, importers.get(i), isDirect);\n        ListView listView = view.findViewById(R.id.list_importers);\n        listView.setAdapter(new ArrayAdapter<>(context, R.layout.card_importer, names));\n        listView.setItemChecked(i, true);\n        listView.setOnItemClickListener((parent, view1, position, id) -> {\n            setImporterHelpText(helpText, importers.get(position), isDirect);\n        });\n\n        Dialogs.showSecureDialog(new MaterialAlertDialogBuilder(context)\n                .setTitle(R.string.choose_application)\n                .setView(view)\n                .setPositiveButton(android.R.string.ok, (dialog1, which) -> {\n                    listener.onImporterSelectionResult(importers.get(listView.getCheckedItemPosition()));\n                })\n                .create());\n    }\n\n    public static void showPartialGoogleAuthImportWarningDialog(Context context, List<Integer> missingIndexes, int entries, List<CharSequence> scanningErrors, DialogInterface.OnClickListener dismissHandler) {\n        String missingIndexesAsString = missingIndexes.stream()\n                .map(index -> context.getString(R.string.missing_qr_code_descriptor, index + 1))\n                .collect(Collectors.joining(\"\\n\"));\n\n        View view = LayoutInflater.from(context).inflate(R.layout.dialog_error, null);\n        TextView errorDetails = view.findViewById(R.id.error_details);\n        for (CharSequence error: scanningErrors) {\n            errorDetails.append(error);\n            errorDetails.append(\"\\n\\n\");\n        }\n\n        MaterialAlertDialogBuilder builder = new MaterialAlertDialogBuilder(context, R.style.ThemeOverlay_Aegis_AlertDialog_Warning)\n                .setTitle(R.string.partial_google_auth_import)\n                .setMessage(context.getString(R.string.partial_google_auth_import_warning, missingIndexesAsString))\n                .setView(view)\n                .setCancelable(false)\n                .setIconAttribute(android.R.attr.alertDialogIcon)\n                .setPositiveButton(context.getResources().getQuantityString(R.plurals.import_partial_export_anyway, entries, entries), (dialog, which) -> {\n                    dismissHandler.onClick(dialog, which);\n                })\n                .setNegativeButton(android.R.string.cancel, null);\n\n        if (scanningErrors.size() > 0) {\n            builder.setNeutralButton(R.string.show_error_details, null);\n        }\n\n        AlertDialog dialog = builder.create();\n        dialog.setOnShowListener(d -> {\n            Button btnNeutral = dialog.getButton(DialogInterface.BUTTON_NEUTRAL);\n            if (btnNeutral != null) {\n                btnNeutral.setOnClickListener(b -> {\n                    errorDetails.setVisibility(View.VISIBLE);\n                    btnNeutral.setVisibility(View.GONE);\n                });\n            }\n        });\n\n        showSecureDialog(dialog);\n    }\n\n    public static void showBackupsVersioningStrategy(Context context, BackupsVersioningStrategy currentStrategy, BackupsVersioningStrategyListener listener) {\n        View view = LayoutInflater.from(context).inflate(R.layout.dialog_backups_versioning_strategy, null);\n        RadioGroup radioGroup = view.findViewById(R.id.radio_group);\n        RadioButton keepXVersionsButton = view.findViewById(R.id.keep_x_versions_button);\n        RadioButton singleBackupButton = view.findViewById(R.id.single_backup_button);\n        TextView warningText = view.findViewById(R.id.warning_text);\n        CheckBox riskAccept = view.findViewById(R.id.risk_accept);\n        final AtomicReference<Button> positiveButtonRef = new AtomicReference<>();\n        radioGroup.setOnCheckedChangeListener((group, checkedId) -> {\n            Button positiveButton = positiveButtonRef.get();\n            if (positiveButton != null) {\n                positiveButton.setEnabled(checkedId == keepXVersionsButton.getId());\n            }\n            int visibility = checkedId == singleBackupButton.getId() ? View.VISIBLE : View.GONE;\n            warningText.setVisibility(visibility);\n            riskAccept.setVisibility(visibility);\n        });\n        riskAccept.setOnCheckedChangeListener((buttonView, isChecked) -> {\n            Button positiveButton = positiveButtonRef.get();\n            if (positiveButton != null) {\n                positiveButton.setEnabled(isChecked);\n            }\n        });\n        AlertDialog alertDialog = new MaterialAlertDialogBuilder(context)\n                .setTitle(R.string.pref_backups_versioning_strategy_dialog_title)\n                .setView(view)\n                .setPositiveButton(android.R.string.ok, (dialog, which) -> {\n                    int checkedId = radioGroup.getCheckedRadioButtonId();\n                    if (checkedId == keepXVersionsButton.getId()) {\n                        listener.onStrategySelectionResult(BackupsVersioningStrategy.MULTIPLE_BACKUPS);\n                    } else if (checkedId == singleBackupButton.getId()) {\n                        listener.onStrategySelectionResult(BackupsVersioningStrategy.SINGLE_BACKUP);\n                    }\n                })\n                .setNegativeButton(android.R.string.cancel, null)\n                .create();\n        alertDialog.setOnShowListener(dialog -> {\n            Button positiveButton = alertDialog.getButton(AlertDialog.BUTTON_POSITIVE);\n            positiveButtonRef.set(positiveButton);\n            if (currentStrategy == BackupsVersioningStrategy.MULTIPLE_BACKUPS) {\n                radioGroup.check(keepXVersionsButton.getId());\n            } else if (currentStrategy == BackupsVersioningStrategy.SINGLE_BACKUP) {\n                radioGroup.check(singleBackupButton.getId());\n            }\n        });\n        showSecureDialog(alertDialog);\n    }\n\n    private static void setImporterHelpText(TextView view, DatabaseImporter.Definition definition, boolean isDirect) {\n        if (isDirect) {\n            view.setText(view.getResources().getString(R.string.importer_help_direct, definition.getName()));\n        } else {\n            view.setText(definition.getHelp());\n        }\n    }\n\n    public interface CheckboxInputListener {\n        void onCheckboxInputResult(boolean checkbox);\n    }\n\n    public interface NumberInputListener {\n        void onNumberInputResult(int number);\n    }\n\n    public interface TextInputListener {\n        void onTextInputResult(char[] text);\n    }\n\n    public interface PasswordSlotListener {\n        void onSlotResult(PasswordSlot slot, Cipher cipher);\n        void onException(Exception e);\n    }\n\n    public interface ImporterListener {\n        void onImporterSelectionResult(DatabaseImporter.Definition definition);\n    }\n\n    public interface BackupsVersioningStrategyListener {\n        void onStrategySelectionResult(BackupsVersioningStrategy strategy);\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/ui/dialogs/IconPickerDialog.java",
    "content": "package com.beemdevelopment.aegis.ui.dialogs;\n\nimport android.app.Activity;\nimport android.graphics.drawable.Drawable;\nimport android.text.Editable;\nimport android.text.TextWatcher;\nimport android.view.LayoutInflater;\nimport android.view.Menu;\nimport android.view.View;\nimport android.view.ViewGroup;\nimport android.widget.FrameLayout;\nimport android.widget.TextView;\n\nimport androidx.annotation.NonNull;\nimport androidx.annotation.Nullable;\nimport androidx.appcompat.widget.PopupMenu;\nimport androidx.recyclerview.widget.GridLayoutManager;\n\nimport com.beemdevelopment.aegis.R;\nimport com.beemdevelopment.aegis.icons.IconPack;\nimport com.beemdevelopment.aegis.ui.glide.GlideHelper;\nimport com.beemdevelopment.aegis.ui.views.IconAdapter;\nimport com.beemdevelopment.aegis.ui.views.IconRecyclerView;\nimport com.bumptech.glide.Glide;\nimport com.bumptech.glide.ListPreloader;\nimport com.bumptech.glide.RequestBuilder;\nimport com.bumptech.glide.integration.recyclerview.RecyclerViewPreloader;\nimport com.bumptech.glide.util.ViewPreloadSizeProvider;\nimport com.google.android.material.bottomsheet.BottomSheetBehavior;\nimport com.google.android.material.bottomsheet.BottomSheetDialog;\nimport com.google.android.material.textfield.TextInputEditText;\n\nimport java.util.Collections;\nimport java.util.List;\nimport java.util.stream.Collectors;\n\npublic class IconPickerDialog {\n    private IconPickerDialog() {\n\n    }\n\n    public static BottomSheetDialog create(Activity activity, List<IconPack> iconPacks, String issuer, boolean showAddCustom, IconAdapter.Listener listener) {\n        View view = LayoutInflater.from(activity).inflate(R.layout.dialog_icon_picker, null);\n        TextView textIconPack = view.findViewById(R.id.text_icon_pack);\n\n        BottomSheetDialog dialog = new BottomSheetDialog(activity);\n        dialog.setContentView(view);\n        dialog.create();\n\n        FrameLayout rootView = dialog.findViewById(com.google.android.material.R.id.design_bottom_sheet);\n        rootView.getLayoutParams().height = ViewGroup.LayoutParams.MATCH_PARENT;\n\n        IconAdapter adapter = new IconAdapter(dialog.getContext(), issuer, new IconAdapter.Listener() {\n            @Override\n            public void onIconSelected(IconPack.Icon icon) {\n                dialog.dismiss();\n                listener.onIconSelected(icon);\n            }\n\n            @Override\n            public void onCustomSelected() {\n                dialog.dismiss();\n                listener.onCustomSelected();\n            }\n        });\n\n        class IconPreloadProvider implements ListPreloader.PreloadModelProvider<IconPack.Icon> {\n            @NonNull\n            @Override\n            public List<IconPack.Icon> getPreloadItems(int position) {\n                IconPack.Icon icon = adapter.getIconAt(position);\n                return Collections.singletonList(icon);\n            }\n\n            @Nullable\n            @Override\n            public RequestBuilder<Drawable> getPreloadRequestBuilder(@NonNull IconPack.Icon icon) {\n                RequestBuilder<Drawable> rb = Glide.with(dialog.getContext())\n                        .load(icon.getFile());\n                return GlideHelper.setCommonOptions(rb, icon.getIconType());\n            }\n        }\n\n        TextInputEditText iconSearch = view.findViewById(R.id.text_search_icon);\n        iconSearch.setOnFocusChangeListener((v, hasFocus) -> {\n            if (hasFocus) {\n                BottomSheetBehavior<FrameLayout> behavior = BottomSheetBehavior.from(rootView);\n                behavior.setState(BottomSheetBehavior.STATE_EXPANDED);\n            }\n        });\n        iconSearch.addTextChangedListener(new TextWatcher() {\n            @Override\n            public void beforeTextChanged(CharSequence s, int start, int count, int after) {\n\n            }\n\n            @Override\n            public void onTextChanged(CharSequence s, int start, int before, int count) {\n                String query = s.toString();\n                adapter.setQuery(query.isEmpty() ? null : query);\n            }\n\n            @Override\n            public void afterTextChanged(Editable s) {\n\n            }\n        });\n\n        ViewPreloadSizeProvider<IconPack.Icon> preloadSizeProvider = new ViewPreloadSizeProvider<>();\n        IconPreloadProvider modelProvider = new IconPreloadProvider();\n        RecyclerViewPreloader<IconPack.Icon> preloader = new RecyclerViewPreloader<>(activity, modelProvider, preloadSizeProvider, 10);\n        IconRecyclerView recyclerView = view.findViewById(R.id.list_icons);\n        GridLayoutManager layoutManager = recyclerView.getGridLayoutManager();\n        layoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {\n            @Override\n            public int getSpanSize(int position) {\n                if (adapter.getItemViewType(position) == R.layout.card_icon) {\n                    return 1;\n                }\n\n                return recyclerView.getSpanCount();\n            }\n        });\n        recyclerView.setLayoutManager(layoutManager);\n        recyclerView.setAdapter(adapter);\n        recyclerView.addOnScrollListener(preloader);\n        adapter.loadIcons(iconPacks.get(0), showAddCustom);\n        textIconPack.setText(iconPacks.get(0).getName());\n\n        view.findViewById(R.id.btn_icon_pack).setOnClickListener(v -> {\n            List<String> iconPackNames = iconPacks.stream()\n                    .map(IconPack::getName)\n                    .collect(Collectors.toList());\n\n            PopupMenu popupMenu = new PopupMenu(activity, v);\n            popupMenu.setOnMenuItemClickListener(item -> {\n                IconPack pack = iconPacks.get(iconPackNames.indexOf(item.getTitle().toString()));\n                adapter.loadIcons(pack, showAddCustom);\n\n                String query = iconSearch.getText().toString();\n                if (!query.isEmpty()) {\n                    adapter.setQuery(query);\n                }\n\n                textIconPack.setText(pack.getName());\n                return true;\n            });\n            Menu menu = popupMenu.getMenu();\n            for (String name : iconPackNames) {\n                menu.add(name);\n            }\n\n            popupMenu.show();\n        });\n\n        return dialog;\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/ui/dialogs/LicenseDialog.java",
    "content": "package com.beemdevelopment.aegis.ui.dialogs;\n\nimport android.content.Context;\n\nimport com.beemdevelopment.aegis.R;\n\npublic class LicenseDialog extends SimpleWebViewDialog {\n    public LicenseDialog() {\n        super(R.string.license);\n    }\n\n    public static LicenseDialog create() {\n        return new LicenseDialog();\n    }\n\n    @Override\n    protected String getContent(Context context) {\n        String license = readAssetAsString(context, \"LICENSE\");\n        String html = readAssetAsString(context, \"license.html\");\n        return String.format(html, license, getBackgroundColor(), getTextColor());\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/ui/dialogs/SimpleWebViewDialog.java",
    "content": "package com.beemdevelopment.aegis.ui.dialogs;\n\nimport android.annotation.SuppressLint;\nimport android.app.Dialog;\nimport android.content.Context;\nimport android.graphics.Color;\nimport android.os.Bundle;\nimport android.view.InflateException;\nimport android.view.LayoutInflater;\nimport android.view.View;\nimport android.webkit.WebView;\n\nimport androidx.annotation.NonNull;\nimport androidx.annotation.StringRes;\nimport androidx.appcompat.app.AlertDialog;\nimport androidx.fragment.app.DialogFragment;\n\nimport com.beemdevelopment.aegis.R;\nimport com.beemdevelopment.aegis.Theme;\nimport com.google.android.material.color.MaterialColors;\nimport com.google.android.material.dialog.MaterialAlertDialogBuilder;\nimport com.google.common.io.CharStreams;\n\nimport java.io.IOException;\nimport java.io.InputStream;\nimport java.io.InputStreamReader;\nimport java.nio.charset.StandardCharsets;\n\npublic abstract class SimpleWebViewDialog extends DialogFragment {\n    private Theme _theme;\n    private final @StringRes int _title;\n\n    protected SimpleWebViewDialog(@StringRes int title) {\n        _title = title;\n    }\n\n    protected abstract String getContent(Context context);\n\n    @SuppressLint(\"InflateParams\")\n    @NonNull\n    @Override\n    public Dialog onCreateDialog(Bundle savedInstanceState) {\n        final View view;\n        try {\n            view = LayoutInflater.from(requireContext()).inflate(R.layout.dialog_web_view, null);\n        } catch (InflateException e) {\n            e.printStackTrace();\n            return new MaterialAlertDialogBuilder(requireContext())\n                    .setTitle(android.R.string.dialog_alert_title)\n                    .setMessage(getString(R.string.webview_error))\n                    .setPositiveButton(android.R.string.ok, null)\n                    .show();\n        }\n\n        AlertDialog dialog = new MaterialAlertDialogBuilder(requireContext())\n                .setTitle(_title)\n                .setView(view)\n                .setPositiveButton(android.R.string.ok, null)\n                .show();\n\n        String content = getContent(requireContext());\n        final WebView webView = view.findViewById(R.id.web_view);\n        webView.loadData(content, \"text/html\", \"UTF-8\");\n        return dialog;\n    }\n\n    public SimpleWebViewDialog setTheme(Theme theme) {\n        _theme = theme;\n        return this;\n    }\n\n    protected String getBackgroundColor() {\n        int color = MaterialColors.getColor(\n                requireContext(),\n                com.google.android.material.R.attr.colorSurfaceContainerHigh,\n                getClass().getCanonicalName()\n        );\n        return colorToCSS(color);\n    }\n\n    protected String getTextColor() {\n        int color = MaterialColors.getColor(\n                requireContext(),\n                com.google.android.material.R.attr.colorOnSurface,\n                getClass().getCanonicalName()\n        );\n        return colorToCSS(0xFFFFFF & color);\n    }\n\n    @SuppressLint(\"DefaultLocale\")\n    private static String colorToCSS(int color) {\n        return String.format(\"rgb(%d, %d, %d)\", Color.red(color), Color.green(color), Color.blue(color));\n    }\n\n    protected static String readAssetAsString(Context context, String name) {\n        try (InputStream inStream = context.getAssets().open(name);\n             InputStreamReader reader = new InputStreamReader(inStream, StandardCharsets.UTF_8)) {\n            return CharStreams.toString(reader);\n        } catch (IOException e) {\n            throw new RuntimeException(e);\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/ui/fragments/preferences/AppearancePreferencesFragment.java",
    "content": "package com.beemdevelopment.aegis.ui.fragments.preferences;\n\nimport android.content.Intent;\nimport android.os.Build;\nimport android.os.Bundle;\n\nimport androidx.appcompat.app.AlertDialog;\nimport androidx.preference.Preference;\n\nimport com.beemdevelopment.aegis.AccountNamePosition;\nimport com.beemdevelopment.aegis.Preferences;\nimport com.beemdevelopment.aegis.R;\nimport com.beemdevelopment.aegis.Theme;\nimport com.beemdevelopment.aegis.ViewMode;\nimport com.beemdevelopment.aegis.ui.GroupManagerActivity;\nimport com.beemdevelopment.aegis.ui.dialogs.Dialogs;\nimport com.google.android.material.color.DynamicColors;\nimport com.google.android.material.dialog.MaterialAlertDialogBuilder;\n\nimport java.util.Arrays;\nimport java.util.List;\n\npublic class AppearancePreferencesFragment extends PreferencesFragment {\n    private Preference _groupsPreference;\n    private Preference _resetUsageCountPreference;\n    private Preference _currentAccountNamePositionPreference;\n\n    @Override\n    public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {\n        addPreferencesFromResource(R.xml.preferences_appearance);\n\n        _groupsPreference = requirePreference(\"pref_groups\");\n        _groupsPreference.setOnPreferenceClickListener(preference -> {\n            Intent intent = new Intent(requireContext(), GroupManagerActivity.class);\n            startActivity(intent);\n            return true;\n        });\n\n        _resetUsageCountPreference = requirePreference(\"pref_reset_usage_count\");\n        _resetUsageCountPreference.setOnPreferenceClickListener(preference -> {\n            Dialogs.showSecureDialog(new MaterialAlertDialogBuilder(requireContext())\n                    .setTitle(R.string.preference_reset_usage_count)\n                    .setMessage(R.string.preference_reset_usage_count_dialog)\n                    .setPositiveButton(android.R.string.yes, (dialog, which) -> _prefs.clearUsageCount())\n                    .setNegativeButton(android.R.string.no, null)\n                    .create());\n            return true;\n        });\n\n        int currentTheme = _prefs.getCurrentTheme().ordinal();\n        Preference darkModePreference = requirePreference(\"pref_dark_mode\");\n        darkModePreference.setSummary(String.format(\"%s: %s\", getString(R.string.selected), getResources().getStringArray(R.array.theme_titles)[currentTheme]));\n        darkModePreference.setOnPreferenceClickListener(preference -> {\n            int currentTheme1 = _prefs.getCurrentTheme().ordinal();\n\n            Dialogs.showSecureDialog(new MaterialAlertDialogBuilder(requireContext())\n                    .setTitle(R.string.choose_theme)\n                    .setSingleChoiceItems(R.array.theme_titles, currentTheme1, (dialog, which) -> {\n                        int i = ((AlertDialog) dialog).getListView().getCheckedItemPosition();\n                        _prefs.setCurrentTheme(Theme.fromInteger(i));\n\n                        dialog.dismiss();\n\n                        requireActivity().recreate();\n                    })\n                    .setNegativeButton(android.R.string.cancel, null)\n                    .create());\n\n            return true;\n        });\n\n        Preference dynamicColorsPreference = requirePreference(\"pref_dynamic_colors\");\n        dynamicColorsPreference.setEnabled(DynamicColors.isDynamicColorAvailable());\n        dynamicColorsPreference.setOnPreferenceChangeListener((preference, newValue) -> {\n            requireActivity().recreate();\n            return true;\n        });\n\n        Preference langPreference = requirePreference(\"pref_lang\");\n        if (Build.VERSION.SDK_INT > Build.VERSION_CODES.M) {\n            String[] langs = getResources().getStringArray(R.array.pref_lang_values);\n            String[] langNames = getResources().getStringArray(R.array.pref_lang_entries);\n            List<String> langList = Arrays.asList(langs);\n            int curLangIndex = langList.contains(_prefs.getLanguage()) ? langList.indexOf(_prefs.getLanguage()) : 0;\n            langPreference.setSummary(langNames[curLangIndex]);\n            langPreference.setOnPreferenceClickListener(preference -> {\n                Dialogs.showSecureDialog(new MaterialAlertDialogBuilder(requireContext())\n                        .setTitle(R.string.pref_lang_title)\n                        .setSingleChoiceItems(langNames, curLangIndex, (dialog, which) -> {\n                            int newLangIndex = ((AlertDialog) dialog).getListView().getCheckedItemPosition();\n                            _prefs.setLanguage(langs[newLangIndex]);\n                            langPreference.setSummary(langNames[newLangIndex]);\n\n                            dialog.dismiss();\n\n                            requireActivity().recreate();\n                        })\n                        .setNegativeButton(android.R.string.cancel, null)\n                        .create());\n                return true;\n            });\n        } else {\n            // Setting locale doesn't work on Marshmallow or below\n            langPreference.setVisible(false);\n        }\n\n        int currentViewMode = _prefs.getCurrentViewMode().ordinal();\n        Preference viewModePreference = requirePreference(\"pref_view_mode\");\n        viewModePreference.setSummary(String.format(\"%s: %s\", getString(R.string.selected), getResources().getStringArray(R.array.view_mode_titles)[currentViewMode]));\n        viewModePreference.setOnPreferenceClickListener(preference -> {\n            int currentViewMode1 = _prefs.getCurrentViewMode().ordinal();\n\n            Dialogs.showSecureDialog(new MaterialAlertDialogBuilder(requireContext())\n                    .setTitle(R.string.choose_view_mode)\n                    .setSingleChoiceItems(R.array.view_mode_titles, currentViewMode1, (dialog, which) -> {\n                        int i = ((AlertDialog) dialog).getListView().getCheckedItemPosition();\n                        _prefs.setCurrentViewMode(ViewMode.fromInteger(i));\n                        viewModePreference.setSummary(String.format(\"%s: %s\", getString(R.string.selected), getResources().getStringArray(R.array.view_mode_titles)[i]));\n                        refreshAccountNamePositionText();\n                        dialog.dismiss();\n                    })\n                    .setNegativeButton(android.R.string.cancel, null)\n                    .create());\n\n            return true;\n        });\n\n        Preference showExpirationStatePreference = requirePreference(\"pref_expiration_state\");\n        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.O) {\n            showExpirationStatePreference.setSummary(getString(R.string.pref_expiration_state_fallback));\n        }\n\n        String[] codeGroupings = getResources().getStringArray(R.array.pref_code_groupings_values);\n        String[] codeGroupingNames = getResources().getStringArray(R.array.pref_code_groupings);\n        Preference codeDigitGroupingPreference = requirePreference(\"pref_code_group_size_string\");\n        codeDigitGroupingPreference.setOnPreferenceClickListener(preference -> {\n            int currentCodeGroupingIndex = Arrays.asList(codeGroupings).indexOf(_prefs.getCodeGroupSize().name());\n\n            Dialogs.showSecureDialog(new MaterialAlertDialogBuilder(requireContext())\n                    .setTitle(R.string.pref_code_group_size_title)\n                    .setSingleChoiceItems(codeGroupingNames, currentCodeGroupingIndex, (dialog, which) -> {\n                        int newCodeGroupingIndex = ((AlertDialog) dialog).getListView().getCheckedItemPosition();\n                        _prefs.setCodeGroupSize(Preferences.CodeGrouping.valueOf(codeGroupings[newCodeGroupingIndex]));\n\n                        dialog.dismiss();\n                    })\n                    .setNegativeButton(android.R.string.cancel, null)\n                    .create());\n            return true;\n        });\n\n        int currentAccountNamePosition = _prefs.getAccountNamePosition().ordinal();\n        _currentAccountNamePositionPreference = requirePreference(\"pref_account_name_position\");\n        _currentAccountNamePositionPreference.setSummary(String.format(\"%s: %s\", getString(R.string.selected), getResources().getStringArray(R.array.account_name_position_titles)[currentAccountNamePosition]));\n        _currentAccountNamePositionPreference.setOnPreferenceClickListener(preference -> {\n            int currentAccountNamePosition1 = _prefs.getAccountNamePosition().ordinal();\n\n            Dialogs.showSecureDialog(new MaterialAlertDialogBuilder(requireContext())\n                    .setTitle(getString(R.string.choose_account_name_position))\n                    .setSingleChoiceItems(R.array.account_name_position_titles, currentAccountNamePosition1, (dialog, which) -> {\n                        int i = ((AlertDialog) dialog).getListView().getCheckedItemPosition();\n                        _prefs.setAccountNamePosition(AccountNamePosition.fromInteger(i));\n                        _currentAccountNamePositionPreference.setSummary(String.format(\"%s: %s\", getString(R.string.selected), getResources().getStringArray(R.array.account_name_position_titles)[i]));\n                        refreshAccountNamePositionText();\n                        dialog.dismiss();\n                    })\n                    .setNegativeButton(android.R.string.cancel, null)\n                    .create());\n\n            return true;\n        });\n\n        refreshAccountNamePositionText();\n    }\n\n    private void refreshAccountNamePositionText() {\n        boolean override = (_prefs.getCurrentViewMode() == ViewMode.TILES && _prefs.getAccountNamePosition() == AccountNamePosition.END);\n\n        if (override) {\n            _currentAccountNamePositionPreference.setSummary(String.format(\"%s: %s. %s\", getString(R.string.selected), getResources().getStringArray(R.array.account_name_position_titles)[_prefs.getAccountNamePosition().ordinal()], getString(R.string.pref_account_name_position_summary_override)));\n        } else {\n            _currentAccountNamePositionPreference.setSummary(String.format(\"%s: %s\", getString(R.string.selected), getResources().getStringArray(R.array.account_name_position_titles)[_prefs.getAccountNamePosition().ordinal()]));\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/ui/fragments/preferences/AuditLogPreferencesFragment.java",
    "content": "package com.beemdevelopment.aegis.ui.fragments.preferences;\n\nimport android.graphics.Rect;\nimport android.os.Bundle;\nimport android.view.View;\nimport android.widget.LinearLayout;\n\nimport androidx.annotation.NonNull;\nimport androidx.core.graphics.Insets;\nimport androidx.core.view.ViewCompat;\nimport androidx.core.view.WindowInsetsCompat;\nimport androidx.fragment.app.Fragment;\nimport androidx.lifecycle.LiveData;\nimport androidx.recyclerview.widget.LinearLayoutManager;\nimport androidx.recyclerview.widget.RecyclerView;\n\nimport com.beemdevelopment.aegis.R;\nimport com.beemdevelopment.aegis.database.AuditLogEntry;\nimport com.beemdevelopment.aegis.database.AuditLogRepository;\nimport com.beemdevelopment.aegis.helpers.MetricsHelper;\nimport com.beemdevelopment.aegis.ui.models.AuditLogEntryModel;\nimport com.beemdevelopment.aegis.ui.views.AuditLogAdapter;\nimport com.beemdevelopment.aegis.vault.VaultEntry;\nimport com.beemdevelopment.aegis.vault.VaultManager;\n\nimport java.util.List;\nimport java.util.UUID;\n\nimport javax.inject.Inject;\n\nimport dagger.hilt.android.AndroidEntryPoint;\n\n@AndroidEntryPoint\npublic class AuditLogPreferencesFragment extends Fragment {\n\n    @Inject\n    AuditLogRepository _auditLogRepository;\n\n    private AuditLogAdapter _adapter;\n\n    private RecyclerView _auditLogRecyclerView;\n    private LinearLayout _noAuditLogsView;\n\n    @Inject\n    VaultManager _vaultManager;\n\n    public AuditLogPreferencesFragment() {\n        super(R.layout.fragment_audit_log);\n    }\n\n    @Override\n    public void onViewCreated(@NonNull View view, Bundle savedInstanceState) {\n        LiveData<List<AuditLogEntry>> entries = _auditLogRepository.getAllAuditLogEntries();\n\n        _adapter = new AuditLogAdapter();\n        _noAuditLogsView = view.findViewById(R.id.vEmptyList);\n        _auditLogRecyclerView = view.findViewById(R.id.list_audit_log);\n        LinearLayoutManager layoutManager = new LinearLayoutManager(requireContext());\n        _auditLogRecyclerView.addItemDecoration(new SpacesItemDecoration(8));\n        _auditLogRecyclerView.setLayoutManager(layoutManager);\n        _auditLogRecyclerView.setAdapter(_adapter);\n        _auditLogRecyclerView.setNestedScrollingEnabled(false);\n\n        ViewCompat.setOnApplyWindowInsetsListener(_auditLogRecyclerView, (targetView, windowInsets) -> {\n            Insets insets = windowInsets.getInsets(WindowInsetsCompat.Type.systemBars() | WindowInsetsCompat.Type.displayCutout());\n            targetView.setPadding(\n                    0,\n                    0,\n                    0,\n                    insets.bottom\n            );\n            return WindowInsetsCompat.CONSUMED;\n        });\n\n        entries.observe(getViewLifecycleOwner(), entries1 -> {\n            _noAuditLogsView.setVisibility(entries1.isEmpty() ? View.VISIBLE : View.GONE);\n\n            for (AuditLogEntry entry : entries1) {\n                VaultEntry referencedEntry = null;\n                if (entry.getReference() != null) {\n                    UUID referencedEntryUUID = UUID.fromString(entry.getReference());\n                    if (_vaultManager.getVault().hasEntryByUUID(referencedEntryUUID)) {\n                        referencedEntry = _vaultManager.getVault().getEntryByUUID(referencedEntryUUID);\n                    }\n                }\n\n                AuditLogEntryModel auditLogEntryModel = new AuditLogEntryModel(entry, referencedEntry);\n                _adapter.addAuditLogEntryModel(auditLogEntryModel);\n            }\n        });\n    }\n\n    private class SpacesItemDecoration extends RecyclerView.ItemDecoration {\n        private final int _space;\n\n        public SpacesItemDecoration(int dpSpace) {\n            _space = MetricsHelper.convertDpToPixels(getContext(), dpSpace);\n        }\n\n        @Override\n        public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {\n            outRect.left = _space;\n            outRect.right = _space;\n            outRect.bottom = _space;\n\n            if (parent.getChildLayoutPosition(view) == 0) {\n                outRect.top = _space;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/ui/fragments/preferences/BackupsPreferencesFragment.java",
    "content": "package com.beemdevelopment.aegis.ui.fragments.preferences;\n\nimport android.app.Activity;\nimport android.content.Intent;\nimport android.graphics.Typeface;\nimport android.net.Uri;\nimport android.os.Bundle;\nimport android.text.Spannable;\nimport android.text.SpannableString;\nimport android.text.style.ForegroundColorSpan;\nimport android.text.style.StyleSpan;\nimport android.widget.Toast;\n\nimport androidx.activity.result.ActivityResultLauncher;\nimport androidx.activity.result.contract.ActivityResultContracts.StartActivityForResult;\nimport androidx.annotation.Nullable;\nimport androidx.preference.Preference;\nimport androidx.preference.SwitchPreferenceCompat;\n\nimport com.beemdevelopment.aegis.BackupsVersioningStrategy;\nimport com.beemdevelopment.aegis.Preferences;\nimport com.beemdevelopment.aegis.R;\nimport com.beemdevelopment.aegis.ui.dialogs.Dialogs;\nimport com.beemdevelopment.aegis.vault.VaultBackupManager;\nimport com.beemdevelopment.aegis.vault.VaultRepositoryException;\nimport com.google.android.material.color.MaterialColors;\n\npublic class BackupsPreferencesFragment extends PreferencesFragment {\n    private SwitchPreferenceCompat _androidBackupsPreference;\n    private SwitchPreferenceCompat _backupsPreference;\n    private SwitchPreferenceCompat _backupReminderPreference;\n    private Preference _versioningStrategyPreference;\n    private Preference _backupsLocationPreference;\n    private Preference _backupsTriggerPreference;\n    private Preference _backupsVersionsPreference;\n    private Preference _backupsPasswordWarningPreference;\n\n    private Preference _builtinBackupStatusPreference;\n    private Preference _androidBackupStatusPreference;\n\n    private final ActivityResultLauncher<Intent> backupsResultLauncher =\n            registerForActivityResult(new StartActivityForResult(), activityResult -> {\n                Intent data = activityResult.getData();\n                int resultCode = activityResult.getResultCode();\n                if (data != null) {\n                    onSelectBackupsLocationResult(resultCode, data);\n                }\n            });\n\n    @Override\n    public void onResume() {\n        super.onResume();\n        updateBackupPreference();\n    }\n\n    @Override\n    public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {\n        addPreferencesFromResource(R.xml.preferences_backups);\n\n        _backupsPasswordWarningPreference = requirePreference(\"pref_backups_warning_password\");\n        _builtinBackupStatusPreference = requirePreference(\"pref_status_backup_builtin\");\n        _builtinBackupStatusPreference.setOnPreferenceClickListener(preference -> {\n            Preferences.BackupResult backupRes = _prefs.getBuiltInBackupResult();\n            if (backupRes != null && !backupRes.isSuccessful()) {\n                Dialogs.showBackupErrorDialog(requireContext(), backupRes, null);\n            }\n            return true;\n        });\n        _androidBackupStatusPreference = requirePreference(\"pref_status_backup_android\");\n        _androidBackupStatusPreference.setOnPreferenceClickListener(preference -> {\n            Preferences.BackupResult backupRes = _prefs.getAndroidBackupResult();\n            if (backupRes != null && !backupRes.isSuccessful()) {\n                Dialogs.showBackupErrorDialog(requireContext(), backupRes, null);\n            }\n            return true;\n        });\n\n        _backupsPreference = requirePreference(\"pref_backups\");\n        _backupsPreference.setOnPreferenceChangeListener((preference, newValue) -> {\n            if ((boolean) newValue) {\n                Dialogs.showBackupsVersioningStrategy(requireContext(), BackupsVersioningStrategy.MULTIPLE_BACKUPS, strategy -> {\n                    if (strategy == BackupsVersioningStrategy.MULTIPLE_BACKUPS) {\n                        selectBackupsLocation();\n                    } else if (strategy == BackupsVersioningStrategy.SINGLE_BACKUP) {\n                        createBackupFile();\n                    }\n                });\n            } else {\n                _prefs.setIsBackupsEnabled(false);\n                updateBackupPreference();\n            }\n\n            return false;\n        });\n\n        _backupReminderPreference = requirePreference(\"pref_backup_reminder\");\n        _backupReminderPreference.setOnPreferenceChangeListener((preference, newValue) -> {\n            if (!(boolean)newValue) {\n                Dialogs.showCheckboxDialog(getContext(), R.string.pref_backups_reminder_dialog_title,\n                        R.string.pref_backups_reminder_dialog_summary,\n                        R.string.understand_risk_accept,\n                        this::saveAndDisableBackupReminder\n                );\n            } else {\n                _prefs.setIsBackupReminderEnabled(true);\n                return true;\n            }\n\n            return false;\n        });\n\n        _versioningStrategyPreference = requirePreference(\"pref_versioning_strategy\");\n        updateBackupsVersioningStrategySummary();\n        _versioningStrategyPreference.setOnPreferenceClickListener(preference -> {\n            BackupsVersioningStrategy currentStrategy = _prefs.getBackupVersioningStrategy();\n            Dialogs.showBackupsVersioningStrategy(requireContext(), currentStrategy, strategy -> {\n                if (strategy == currentStrategy) {\n                    return;\n                }\n                if (strategy == BackupsVersioningStrategy.MULTIPLE_BACKUPS) {\n                    selectBackupsLocation();\n                } else if (strategy == BackupsVersioningStrategy.SINGLE_BACKUP) {\n                    createBackupFile();\n                }\n            });\n            return true;\n        });\n\n\n        _androidBackupsPreference = requirePreference(\"pref_android_backups\");\n        _androidBackupsPreference.setOnPreferenceChangeListener((preference, newValue) -> {\n            _prefs.setIsAndroidBackupsEnabled((boolean) newValue);\n            updateBackupPreference();\n            if ((boolean) newValue) {\n                _vaultManager.scheduleAndroidBackup();\n            }\n            return false;\n        });\n\n        _backupsLocationPreference = requirePreference(\"pref_backups_location\");\n        updateBackupsLocationSummary();\n        _backupsLocationPreference.setOnPreferenceClickListener(preference -> {\n            BackupsVersioningStrategy currentStrategy = _prefs.getBackupVersioningStrategy();\n            if (currentStrategy == BackupsVersioningStrategy.MULTIPLE_BACKUPS) {\n                selectBackupsLocation();\n            } else if (currentStrategy == BackupsVersioningStrategy.SINGLE_BACKUP) {\n                createBackupFile();\n            }\n            return false;\n        });\n\n        _backupsTriggerPreference = requirePreference(\"pref_backups_trigger\");\n        _backupsTriggerPreference.setOnPreferenceClickListener(preference -> {\n            if (_prefs.isBackupsEnabled()) {\n                scheduleBackup();\n                _builtinBackupStatusPreference.setVisible(false);\n            }\n            return true;\n        });\n\n        _backupsVersionsPreference = requirePreference(\"pref_backups_versions\");\n        updateBackupsVersionsSummary();\n        _backupsVersionsPreference.setOnPreferenceClickListener(preference -> {\n            Dialogs.showBackupVersionsPickerDialog(requireContext(), _prefs.getBackupsVersionCount(), number -> {\n                _prefs.setBackupsVersionCount(number);\n                updateBackupsVersionsSummary();\n            });\n            return false;\n        });\n    }\n\n    private void saveAndDisableBackupReminder(boolean understand) {\n        if (understand) {\n            _prefs.setIsBackupReminderEnabled(false);\n            updateBackupPreference();\n        }\n    }\n\n    private void onSelectBackupsLocationResult(int resultCode, Intent data) {\n        Uri uri = data.getData();\n        if (resultCode != Activity.RESULT_OK || uri == null) {\n            return;\n        }\n\n        int flags = Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION;\n        requireContext().getContentResolver().takePersistableUriPermission(data.getData(), flags);\n\n        _prefs.setBackupsLocation(uri);\n        _prefs.setIsBackupsEnabled(true);\n        updateBackupPreference();\n        scheduleBackup();\n        updateBackupsVersioningStrategySummary();\n        updateBackupsLocationSummary();\n    }\n\n    private void updateBackupPreference() {\n        boolean encrypted = _vaultManager.getVault().isEncryptionEnabled();\n        boolean androidBackupEnabled = _prefs.isAndroidBackupsEnabled() && encrypted;\n        boolean backupEnabled = _prefs.isBackupsEnabled() && encrypted;\n        boolean backupReminderEnabled = _prefs.isBackupReminderEnabled();\n        _backupsPasswordWarningPreference.setVisible(_vaultManager.getVault().isBackupPasswordSet());\n        _androidBackupsPreference.setChecked(androidBackupEnabled);\n        _androidBackupsPreference.setEnabled(encrypted);\n        _backupsPreference.setChecked(backupEnabled);\n        _backupsPreference.setEnabled(encrypted);\n        _backupReminderPreference.setChecked(backupReminderEnabled);\n        _versioningStrategyPreference.setVisible(backupEnabled);\n        _backupsLocationPreference.setVisible(backupEnabled);\n        _backupsTriggerPreference.setVisible(backupEnabled);\n        _backupsVersionsPreference.setVisible(backupEnabled && _prefs.getBackupVersioningStrategy() != BackupsVersioningStrategy.SINGLE_BACKUP);\n        if (backupEnabled) {\n            updateBackupStatus(_builtinBackupStatusPreference, _prefs.getBuiltInBackupResult());\n        }\n        if (androidBackupEnabled) {\n            updateBackupStatus(_androidBackupStatusPreference, _prefs.getAndroidBackupResult());\n        }\n        _builtinBackupStatusPreference.setVisible(backupEnabled);\n        _androidBackupStatusPreference.setVisible(androidBackupEnabled);\n    }\n\n    private void updateBackupStatus(Preference pref, Preferences.BackupResult res) {\n        boolean backupFailed = res != null && !res.isSuccessful();\n        pref.setSummary(getBackupStatusMessage(res));\n        pref.setSelectable(backupFailed);\n\n        // TODO: Find out why setting the tint of the icon doesn't work\n        if (backupFailed) {\n            pref.setIcon(R.drawable.ic_outline_error_24);\n        } else if (res != null) {\n            pref.setIcon(R.drawable.ic_outline_check_24);\n        } else {\n            pref.setIcon(null);\n        }\n    }\n\n    private CharSequence getBackupStatusMessage(@Nullable Preferences.BackupResult res) {\n        String message;\n        int colorAttr = com.google.android.material.R.attr.colorError;\n        if (res == null) {\n            message = getString(R.string.backup_status_none);\n        } else if (res.isSuccessful()) {\n            colorAttr = R.attr.colorSuccess;\n            message = getString(R.string.backup_status_success, res.getElapsedSince(requireContext()));\n        } else {\n            message = getString(R.string.backup_status_failed, res.getElapsedSince(requireContext()));\n        }\n\n        int color = MaterialColors.getColor(requireContext(), colorAttr, getClass().getCanonicalName());\n        Spannable spannable = new SpannableString(message);\n        spannable.setSpan(new ForegroundColorSpan(color), 0, message.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);\n        spannable.setSpan(new StyleSpan(Typeface.BOLD), 0, message.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);\n        return spannable;\n    }\n\n    private void createBackupFile() {\n        Intent intent = new Intent(Intent.ACTION_CREATE_DOCUMENT)\n                .addCategory(Intent.CATEGORY_OPENABLE)\n                .setType(\"application/json\")\n                .putExtra(Intent.EXTRA_TITLE, VaultBackupManager.FILENAME_SINGLE);\n        _vaultManager.fireIntentLauncher(this, intent, backupsResultLauncher);\n    }\n\n    private void selectBackupsLocation() {\n        Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT_TREE);\n        intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION\n                | Intent.FLAG_GRANT_WRITE_URI_PERMISSION\n                | Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION\n                | Intent.FLAG_GRANT_PREFIX_URI_PERMISSION);\n\n        _vaultManager.fireIntentLauncher(this, intent, backupsResultLauncher);\n    }\n\n    private void scheduleBackup() {\n        try {\n            _vaultManager.scheduleBackup();\n            Toast.makeText(requireContext(), R.string.backup_successful, Toast.LENGTH_LONG).show();\n        } catch (VaultRepositoryException e) {\n            e.printStackTrace();\n            Dialogs.showErrorDialog(requireContext(), R.string.backup_error, e);\n        }\n    }\n\n    private void updateBackupsVersioningStrategySummary() {\n        BackupsVersioningStrategy currentStrategy = _prefs.getBackupVersioningStrategy();\n        if (currentStrategy == BackupsVersioningStrategy.MULTIPLE_BACKUPS) {\n            _versioningStrategyPreference.setSummary(R.string.pref_backups_versioning_strategy_keep_x_versions);\n        } else if (currentStrategy == BackupsVersioningStrategy.SINGLE_BACKUP) {\n            _versioningStrategyPreference.setSummary(R.string.pref_backups_versioning_strategy_single_backup);\n        }\n    }\n\n    private void updateBackupsLocationSummary() {\n        Uri backupsLocation = _prefs.getBackupsLocation();\n        BackupsVersioningStrategy currentStrategy = _prefs.getBackupVersioningStrategy();\n        String text;\n        if (currentStrategy == BackupsVersioningStrategy.MULTIPLE_BACKUPS) {\n            text = getString(R.string.pref_backups_location_summary);\n        } else if (currentStrategy == BackupsVersioningStrategy.SINGLE_BACKUP) {\n            text = getString(R.string.pref_backup_location_summary);\n        } else {\n            return;\n        }\n        String summary = String.format(\"%s: %s\", text, Uri.decode(backupsLocation.toString()));\n        _backupsLocationPreference.setSummary(summary);\n    }\n\n    private void updateBackupsVersionsSummary() {\n        int count = _prefs.getBackupsVersionCount();\n        if (count == Preferences.BACKUPS_VERSIONS_INFINITE) {\n            _backupsVersionsPreference.setSummary(R.string.pref_backups_versions_infinite_summary);\n        } else {\n            String summary = getResources().getQuantityString(R.plurals.pref_backups_versions_summary, count, count);\n            _backupsVersionsPreference.setSummary(summary);\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/ui/fragments/preferences/BehaviorPreferencesFragment.java",
    "content": "package com.beemdevelopment.aegis.ui.fragments.preferences;\n\nimport android.os.Bundle;\nimport android.widget.Button;\n\nimport androidx.appcompat.app.AlertDialog;\nimport androidx.preference.Preference;\n\nimport com.beemdevelopment.aegis.CopyBehavior;\nimport com.beemdevelopment.aegis.Preferences;\nimport com.beemdevelopment.aegis.R;\nimport com.beemdevelopment.aegis.ui.dialogs.Dialogs;\nimport com.google.android.material.dialog.MaterialAlertDialogBuilder;\n\npublic class BehaviorPreferencesFragment extends PreferencesFragment {\n\n    @Override\n    public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {\n        addPreferencesFromResource(R.xml.preferences_behavior);\n\n        Preference currentSearchBehaviorPreference = requirePreference(\"pref_search_behavior\");\n        currentSearchBehaviorPreference.setSummary(getSearchBehaviorSummary());\n        currentSearchBehaviorPreference.setOnPreferenceClickListener((preference) -> {\n            final int[] items = Preferences.SEARCH_BEHAVIOR_SETTINGS;\n            final String[] textItems = getResources().getStringArray(R.array.pref_search_behavior_types);\n            final boolean[] checkedItems = new boolean[items.length];\n            for (int i = 0; i < items.length; i++) {\n                checkedItems[i] = _prefs.isSearchBehaviorTypeEnabled(items[i]);\n            }\n\n            MaterialAlertDialogBuilder builder = new MaterialAlertDialogBuilder(requireContext())\n                    .setTitle(R.string.pref_search_behavior_prompt)\n                    .setMultiChoiceItems(textItems, checkedItems, (dialog, index, isChecked) -> {\n                        checkedItems[index] = isChecked;\n\n                        boolean containsAtLeastOneCheckedItem = false;\n                        for(boolean b: checkedItems) {\n                            if (b) {\n                                containsAtLeastOneCheckedItem = true;\n                                break;\n                            }\n                        }\n\n                        AlertDialog alertDialog = (AlertDialog) dialog;\n                        Button positiveButton = alertDialog.getButton(AlertDialog.BUTTON_POSITIVE);\n\n                        positiveButton.setEnabled(containsAtLeastOneCheckedItem);\n                    })\n                    .setPositiveButton(android.R.string.ok, (dialog, which) -> {\n                        int searchBehavior = 0;\n                        for (int i = 0; i < checkedItems.length; i++) {\n                            if (checkedItems[i]) {\n                                searchBehavior |= items[i];\n                            }\n                        }\n\n                        _prefs.setSearchBehaviorMask(searchBehavior);\n                        currentSearchBehaviorPreference.setSummary(getSearchBehaviorSummary());\n                    })\n                    .setNegativeButton(android.R.string.cancel, null);\n\n            Dialogs.showSecureDialog(builder.create());\n            return true;\n        });\n\n        int currentCopyBehavior = _prefs.getCopyBehavior().ordinal();\n        Preference copyBehaviorPreference = requirePreference(\"pref_copy_behavior\");\n        copyBehaviorPreference.setSummary(String.format(\"%s: %s\", getString(R.string.selected), getResources().getStringArray(R.array.copy_behavior_titles)[currentCopyBehavior]));\n        copyBehaviorPreference.setOnPreferenceClickListener(preference -> {\n            int currentCopyBehavior1 = _prefs.getCopyBehavior().ordinal();\n\n            Dialogs.showSecureDialog(new MaterialAlertDialogBuilder(requireContext())\n                    .setTitle(getString(R.string.choose_copy_behavior))\n                    .setSingleChoiceItems(R.array.copy_behavior_titles, currentCopyBehavior1, (dialog, which) -> {\n                        int i = ((AlertDialog) dialog).getListView().getCheckedItemPosition();\n                        _prefs.setCopyBehavior(CopyBehavior.fromInteger(i));\n                        copyBehaviorPreference.setSummary(String.format(\"%s: %s\", getString(R.string.selected), getResources().getStringArray(R.array.copy_behavior_titles)[i]));\n                        dialog.dismiss();\n                    })\n                    .setNegativeButton(android.R.string.cancel, null)\n                    .create());\n\n            return true;\n        });\n\n        Preference entryPausePreference = requirePreference(\"pref_pause_entry\");\n        entryPausePreference.setEnabled(_prefs.isTapToRevealEnabled() || _prefs.isEntryHighlightEnabled());\n\n        Preference entryHighlightPreference = requirePreference(\"pref_highlight_entry\");\n        entryHighlightPreference.setOnPreferenceChangeListener((preference, newValue) -> {\n            entryPausePreference.setEnabled(_prefs.isTapToRevealEnabled() || (boolean) newValue);\n            return true;\n        });\n    }\n\n    private String getSearchBehaviorSummary() {\n        final int[] settings = Preferences.SEARCH_BEHAVIOR_SETTINGS;\n        final String[] descriptions = getResources().getStringArray(R.array.pref_search_behavior_types);\n\n        StringBuilder builder = new StringBuilder();\n        for (int i = 0; i < settings.length; i++) {\n            if (_prefs.isSearchBehaviorTypeEnabled(settings[i])) {\n                if (builder.length() != 0) {\n                    builder.append(\", \");\n                }\n\n                builder.append(descriptions[i].toLowerCase());\n            }\n        }\n\n        return getString(R.string.pref_search_behavior_summary, builder.toString());\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/ui/fragments/preferences/IconPacksManagerFragment.java",
    "content": "package com.beemdevelopment.aegis.ui.fragments.preferences;\n\nimport android.app.Activity;\nimport android.content.Intent;\nimport android.net.Uri;\nimport android.os.Bundle;\nimport android.text.method.LinkMovementMethod;\nimport android.view.View;\nimport android.view.ViewGroup.MarginLayoutParams;\nimport android.view.animation.Animation;\nimport android.widget.LinearLayout;\nimport android.widget.TextView;\n\nimport androidx.activity.result.ActivityResultLauncher;\nimport androidx.activity.result.contract.ActivityResultContracts.StartActivityForResult;\nimport androidx.annotation.NonNull;\nimport androidx.annotation.Nullable;\nimport androidx.core.graphics.Insets;\nimport androidx.core.view.ViewCompat;\nimport androidx.core.view.WindowInsetsCompat;\nimport androidx.fragment.app.Fragment;\nimport androidx.recyclerview.widget.LinearLayoutManager;\nimport androidx.recyclerview.widget.RecyclerView;\n\nimport com.beemdevelopment.aegis.R;\nimport com.beemdevelopment.aegis.helpers.AnimationsHelper;\nimport com.beemdevelopment.aegis.helpers.FabScrollHelper;\nimport com.beemdevelopment.aegis.icons.IconPack;\nimport com.beemdevelopment.aegis.icons.IconPackException;\nimport com.beemdevelopment.aegis.icons.IconPackExistsException;\nimport com.beemdevelopment.aegis.icons.IconPackManager;\nimport com.beemdevelopment.aegis.ui.dialogs.Dialogs;\nimport com.beemdevelopment.aegis.ui.tasks.ImportIconPackTask;\nimport com.beemdevelopment.aegis.ui.views.IconPackAdapter;\nimport com.beemdevelopment.aegis.vault.VaultManager;\nimport com.google.android.material.dialog.MaterialAlertDialogBuilder;\nimport com.google.android.material.floatingactionbutton.FloatingActionButton;\n\nimport javax.inject.Inject;\n\nimport dagger.hilt.android.AndroidEntryPoint;\n\n@AndroidEntryPoint\npublic class IconPacksManagerFragment extends Fragment implements IconPackAdapter.Listener {\n    @Inject\n    IconPackManager _iconPackManager;\n\n    @Inject\n    VaultManager _vaultManager;\n\n    private RecyclerView _iconPacksRecyclerView;\n    private IconPackAdapter _adapter;\n    private LinearLayout _noIconPacksView;\n    private FabScrollHelper _fabScrollHelper;\n\n    private final ActivityResultLauncher<Intent> importResultLauncher =\n            registerForActivityResult(new StartActivityForResult(), activityResult -> {\n                Intent data = activityResult.getData();\n                if (activityResult.getResultCode() == Activity.RESULT_OK && data != null && data.getData() != null) {\n                    importIconPack(data.getData());\n                }\n            });\n\n    public IconPacksManagerFragment() {\n        super(R.layout.fragment_icon_packs);\n    }\n\n    @Override\n    public void onViewCreated(@NonNull View view, Bundle savedInstanceState) {\n        FloatingActionButton fab = view.findViewById(R.id.fab);\n        fab.setOnClickListener(v -> startImportIconPack());\n        _fabScrollHelper = new FabScrollHelper(fab);\n\n        final MarginLayoutParams fabInitialMargin = (MarginLayoutParams) fab.getLayoutParams();\n        ViewCompat.setOnApplyWindowInsetsListener(fab, (targetView, windowInsets) -> {\n            Insets insets = windowInsets.getInsets(WindowInsetsCompat.Type.systemBars() | WindowInsetsCompat.Type.displayCutout());\n\n            MarginLayoutParams marginParams = (MarginLayoutParams) targetView.getLayoutParams();\n            marginParams.leftMargin = fabInitialMargin.leftMargin + insets.left;\n            marginParams.bottomMargin = fabInitialMargin.bottomMargin + insets.bottom;\n            marginParams.rightMargin = fabInitialMargin.rightMargin + insets.right;\n            targetView.setLayoutParams(marginParams);\n\n            return WindowInsetsCompat.CONSUMED;\n        });\n\n        _noIconPacksView = view.findViewById(R.id.vEmptyList);\n        ((TextView) view.findViewById(R.id.txt_no_icon_packs)).setMovementMethod(LinkMovementMethod.getInstance());\n        _adapter = new IconPackAdapter(this);\n        _iconPacksRecyclerView = view.findViewById(R.id.list_icon_packs);\n        LinearLayoutManager layoutManager = new LinearLayoutManager(requireContext());\n        _iconPacksRecyclerView.setLayoutManager(layoutManager);\n        _iconPacksRecyclerView.setAdapter(_adapter);\n        _iconPacksRecyclerView.setNestedScrollingEnabled(false);\n        _iconPacksRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {\n            @Override\n            public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) {\n                super.onScrolled(recyclerView, dx, dy);\n                _fabScrollHelper.onScroll(dx, dy);\n            }\n        });\n\n        for (IconPack pack : _iconPackManager.getIconPacks()) {\n            _adapter.addIconPack(pack);\n        }\n\n        updateEmptyState();\n    }\n\n    @Override\n    @Nullable\n    public Animation onCreateAnimation(int transit, boolean enter, int nextAnim) {\n        if (nextAnim != 0) {\n            return AnimationsHelper.loadScaledAnimation(requireContext(), nextAnim, AnimationsHelper.Scale.TRANSITION);\n        }\n\n        return super.onCreateAnimation(transit, enter, nextAnim);\n    }\n\n    @Override\n    public void onRemoveIconPack(IconPack pack) {\n        Dialogs.showSecureDialog(new MaterialAlertDialogBuilder(requireContext(), R.style.ThemeOverlay_Aegis_AlertDialog_Warning)\n                .setTitle(R.string.remove_icon_pack)\n                .setMessage(R.string.remove_icon_pack_description)\n                .setIconAttribute(android.R.attr.alertDialogIcon)\n                .setPositiveButton(android.R.string.yes, (dialog, whichButton) -> {\n                    removeIconPack(pack);\n                })\n                .setNegativeButton(android.R.string.no, null)\n                .create());\n    }\n\n    private void importIconPack(Uri uri) {\n        ImportIconPackTask task = new ImportIconPackTask(requireContext(), result -> {\n            Exception e = result.getException();\n            if (e instanceof IconPackExistsException) {\n                Dialogs.showSecureDialog(new MaterialAlertDialogBuilder(requireContext(), R.style.ThemeOverlay_Aegis_AlertDialog_Error)\n                        .setTitle(R.string.error_occurred)\n                        .setMessage(R.string.icon_pack_import_exists_error)\n                        .setIconAttribute(android.R.attr.alertDialogIcon)\n                        .setPositiveButton(R.string.yes, (dialog, which) -> {\n                            if (removeIconPack(((IconPackExistsException) e).getIconPack())) {\n                                importIconPack(uri);\n                            }\n                        })\n                        .setNegativeButton(R.string.no, null)\n                        .create());\n            } else if (e != null) {\n                Dialogs.showErrorDialog(requireContext(), R.string.icon_pack_import_error, e);\n            } else {\n                _adapter.addIconPack(result.getIconPack());\n                updateEmptyState();\n            }\n        });\n        task.execute(getLifecycle(), new ImportIconPackTask.Params(_iconPackManager, uri));\n    }\n\n    private boolean removeIconPack(IconPack pack) {\n        try {\n            _iconPackManager.removeIconPack(pack);\n        } catch (IconPackException e) {\n            e.printStackTrace();\n            Dialogs.showErrorDialog(requireContext(), R.string.icon_pack_delete_error, e);\n            return false;\n        }\n\n        _adapter.removeIconPack(pack);\n        updateEmptyState();\n        return true;\n    }\n\n    private void startImportIconPack() {\n        Intent intent = new Intent(Intent.ACTION_GET_CONTENT);\n        intent.setType(\"*/*\");\n        _vaultManager.fireIntentLauncher(this, intent, importResultLauncher);\n    }\n\n    private void updateEmptyState() {\n        if (_adapter.getItemCount() > 0) {\n            _iconPacksRecyclerView.setVisibility(View.VISIBLE);\n            _noIconPacksView.setVisibility(View.GONE);\n        } else {\n            _iconPacksRecyclerView.setVisibility(View.GONE);\n            _noIconPacksView.setVisibility(View.VISIBLE);\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/ui/fragments/preferences/ImportExportPreferencesFragment.java",
    "content": "package com.beemdevelopment.aegis.ui.fragments.preferences;\n\nimport android.app.Activity;\nimport android.content.Intent;\nimport android.net.Uri;\nimport android.os.Bundle;\nimport android.view.LayoutInflater;\nimport android.view.View;\nimport android.widget.AutoCompleteTextView;\nimport android.widget.Button;\nimport android.widget.CheckBox;\nimport android.widget.TextView;\nimport android.widget.Toast;\n\nimport androidx.activity.result.ActivityResultLauncher;\nimport androidx.activity.result.contract.ActivityResultContracts.StartActivityForResult;\nimport androidx.annotation.ArrayRes;\nimport androidx.annotation.NonNull;\nimport androidx.annotation.Nullable;\nimport androidx.appcompat.app.AlertDialog;\nimport androidx.core.content.FileProvider;\nimport androidx.preference.Preference;\n\nimport com.beemdevelopment.aegis.BuildConfig;\nimport com.beemdevelopment.aegis.GroupPlaceholderType;\nimport com.beemdevelopment.aegis.R;\nimport com.beemdevelopment.aegis.helpers.DropdownHelper;\nimport com.beemdevelopment.aegis.importers.DatabaseImporter;\nimport com.beemdevelopment.aegis.otp.GoogleAuthInfo;\nimport com.beemdevelopment.aegis.otp.HotpInfo;\nimport com.beemdevelopment.aegis.otp.OtpInfo;\nimport com.beemdevelopment.aegis.otp.TotpInfo;\nimport com.beemdevelopment.aegis.ui.ImportEntriesActivity;\nimport com.beemdevelopment.aegis.ui.TransferEntriesActivity;\nimport com.beemdevelopment.aegis.ui.components.DropdownCheckBoxes;\nimport com.beemdevelopment.aegis.ui.dialogs.Dialogs;\nimport com.beemdevelopment.aegis.ui.models.VaultGroupModel;\nimport com.beemdevelopment.aegis.ui.tasks.ExportTask;\nimport com.beemdevelopment.aegis.ui.tasks.ImportFileTask;\nimport com.beemdevelopment.aegis.vault.Vault;\nimport com.beemdevelopment.aegis.vault.VaultBackupManager;\nimport com.beemdevelopment.aegis.vault.VaultEntry;\nimport com.beemdevelopment.aegis.vault.VaultFileCredentials;\nimport com.beemdevelopment.aegis.vault.VaultGroup;\nimport com.beemdevelopment.aegis.vault.VaultRepository;\nimport com.beemdevelopment.aegis.vault.VaultRepositoryException;\nimport com.beemdevelopment.aegis.vault.slots.PasswordSlot;\nimport com.beemdevelopment.aegis.vault.slots.SlotException;\nimport com.google.android.material.dialog.MaterialAlertDialogBuilder;\nimport com.google.android.material.textfield.TextInputLayout;\n\nimport java.io.File;\nimport java.io.FileOutputStream;\nimport java.io.IOException;\nimport java.io.OutputStream;\nimport java.util.ArrayList;\nimport java.util.Collection;\nimport java.util.HashSet;\nimport java.util.List;\nimport java.util.Objects;\nimport java.util.Random;\nimport java.util.Set;\nimport java.util.UUID;\nimport java.util.stream.Collectors;\n\nimport javax.crypto.Cipher;\n\npublic class ImportExportPreferencesFragment extends PreferencesFragment {\n    // keep a reference to the type of database converter that was selected\n    private DatabaseImporter.Definition _importerDef;\n    private Vault.EntryFilter _exportFilter;\n\n    private final ActivityResultLauncher<Intent> importSelectResultLauncher =\n            registerForActivityResult(new StartActivityForResult(), activityResult -> {\n                Intent data = activityResult.getData();\n                if (data != null) {\n                    onImportSelectResult(activityResult.getResultCode(), data);\n                }\n            });\n\n    private final ActivityResultLauncher<Intent> exportResultLauncher =\n            registerForActivityResult(new StartActivityForResult(), activityResult ->\n                    onExportResult(CODE_EXPORT, activityResult.getResultCode(), activityResult.getData()));\n\n    private final ActivityResultLauncher<Intent> exportPlainResultLauncher =\n            registerForActivityResult(new StartActivityForResult(), activityResult ->\n                    onExportResult(CODE_EXPORT_PLAIN, activityResult.getResultCode(), activityResult.getData()));\n\n    private final ActivityResultLauncher<Intent> exportHtmlResultLauncher =\n            registerForActivityResult(new StartActivityForResult(), activityResult ->\n                    onExportResult(CODE_EXPORT_HTML, activityResult.getResultCode(), activityResult.getData()));\n\n    private final ActivityResultLauncher<Intent> exportGoogleUriResultLauncher =\n            registerForActivityResult(new StartActivityForResult(), activityResult ->\n                    onExportResult(CODE_EXPORT_GOOGLE_URI, activityResult.getResultCode(), activityResult.getData()));\n\n    @Override\n    public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {\n        addPreferencesFromResource(R.xml.preferences_import_export);\n\n        if (savedInstanceState != null) {\n            _importerDef = (DatabaseImporter.Definition) savedInstanceState.getSerializable(\"importerDef\");\n        }\n\n        Preference importPreference = requirePreference(\"pref_import\");\n        importPreference.setOnPreferenceClickListener(preference -> {\n            Dialogs.showImportersDialog(requireContext(), false, definition -> {\n                _importerDef = definition;\n\n                Intent intent = new Intent(Intent.ACTION_GET_CONTENT);\n                intent.setType(\"*/*\");\n                _vaultManager.fireIntentLauncher(this, intent, importSelectResultLauncher);\n            });\n            return true;\n        });\n\n        Preference importAppPreference = requirePreference(\"pref_import_app\");\n        importAppPreference.setOnPreferenceClickListener(preference -> {\n            Dialogs.showImportersDialog(requireContext(), true, definition -> {\n                startImportEntriesActivity(definition, null);\n            });\n            return true;\n        });\n\n        Preference exportPreference = requirePreference(\"pref_export\");\n        exportPreference.setOnPreferenceClickListener(preference -> {\n            startExport();\n            return true;\n        });\n\n        Preference googleAuthStyleExportPreference = requirePreference(\"pref_google_auth_style_export\");\n        googleAuthStyleExportPreference.setOnPreferenceClickListener(preference -> {\n            startGoogleAuthenticatorStyleExport();\n            return true;\n        });\n    }\n\n    @Override\n    public void onSaveInstanceState(@NonNull Bundle outState) {\n        super.onSaveInstanceState(outState);\n        outState.putSerializable(\"importerDef\", _importerDef);\n    }\n\n    private void onImportSelectResult(int resultCode, Intent data) {\n        Uri uri = data.getData();\n        if (resultCode != Activity.RESULT_OK || uri == null) {\n            return;\n        }\n\n        ImportFileTask.Params params = new ImportFileTask.Params(uri, \"import\", null);\n        ImportFileTask task = new ImportFileTask(requireContext(), result -> {\n            if (result.getError() == null) {\n                startImportEntriesActivity(_importerDef, result.getFile());\n            } else {\n                Dialogs.showErrorDialog(requireContext(), R.string.reading_file_error, result.getError());\n            }\n        });\n        task.execute(getLifecycle(), params);\n    }\n\n    private void startImportEntriesActivity(DatabaseImporter.Definition importerDef, File file) {\n        Intent intent = new Intent(requireContext(), ImportEntriesActivity.class);\n        intent.putExtra(\"importerDef\", importerDef);\n        intent.putExtra(\"file\", file);\n        startActivity(intent);\n    }\n\n    private void startExport() {\n        boolean isBackupPasswordSet = _vaultManager.getVault().isBackupPasswordSet();\n        View view = LayoutInflater.from(requireContext()).inflate(R.layout.dialog_export, null);\n        TextView warningText = view.findViewById(R.id.text_export_warning);\n        CheckBox checkBoxEncrypt = view.findViewById(R.id.checkbox_export_encrypt);\n        CheckBox checkBoxAccept = view.findViewById(R.id.checkbox_accept);\n        CheckBox checkBoxExportAllGroups = view.findViewById(R.id.export_selected_groups);\n        TextInputLayout groupsSelectionLayout = view.findViewById(R.id.group_selection_layout);\n        DropdownCheckBoxes<VaultGroupModel> groupsSelection = view.findViewById(R.id.group_selection_dropdown);\n        TextView passwordInfoText = view.findViewById(R.id.text_separate_password);\n        passwordInfoText.setVisibility(checkBoxEncrypt.isChecked() && isBackupPasswordSet ? View.VISIBLE : View.GONE);\n        AutoCompleteTextView dropdown = view.findViewById(R.id.dropdown_export_format);\n        DropdownHelper.fillDropdown(requireContext(), dropdown, R.array.export_formats);\n        dropdown.setText(getString(R.string.export_format_aegis), false);\n        dropdown.setOnItemClickListener((parent, view1, position, id) -> {\n            checkBoxEncrypt.setChecked(position == 0);\n            checkBoxEncrypt.setEnabled(position == 0);\n            warningText.setVisibility(checkBoxEncrypt.isChecked() ? View.GONE : View.VISIBLE);\n            passwordInfoText.setVisibility(checkBoxEncrypt.isChecked() && isBackupPasswordSet ? View.VISIBLE : View.GONE);\n        });\n\n        Collection<VaultGroup> groups = _vaultManager.getVault().getUsedGroups();\n        if (groups.size() > 0) {\n            checkBoxExportAllGroups.setVisibility(View.VISIBLE);\n\n            ArrayList<VaultGroupModel> groupsArray = new ArrayList<>();\n            groupsArray.add(new VaultGroupModel(requireContext(), GroupPlaceholderType.NO_GROUP));\n            groupsArray.addAll(groups.stream().map(VaultGroupModel::new).collect(Collectors.toList()));\n\n            groupsSelection.setCheckedItemsCountTextRes(R.plurals.export_groups_selected_count);\n            groupsSelection.addItems(groupsArray, false);\n        }\n\n        AlertDialog dialog = new MaterialAlertDialogBuilder(requireContext())\n                .setTitle(R.string.pref_export_summary)\n                .setView(view)\n                .setNeutralButton(R.string.share, null)\n                .setPositiveButton(android.R.string.ok, null)\n                .setNegativeButton(android.R.string.cancel, null)\n                .create();\n\n        dialog.setOnShowListener(d -> {\n            Button btnPos = dialog.getButton(AlertDialog.BUTTON_POSITIVE);\n            Button btnNeutral = dialog.getButton(AlertDialog.BUTTON_NEUTRAL);\n\n            DialogStateValidator stateValidator = () -> {\n                boolean noGroupsSelected = groupsSelection.getCheckedItems().isEmpty();\n                boolean validState = (checkBoxEncrypt.isChecked() || checkBoxAccept.isChecked()) &&\n                                     (checkBoxExportAllGroups.isChecked() || !noGroupsSelected);\n\n                if (noGroupsSelected && groupsSelectionLayout.getError() == null) {\n                    CharSequence errorMsg = getString(R.string.export_no_groups_selected);\n                    groupsSelectionLayout.setError(errorMsg);\n                } else if (!noGroupsSelected && groupsSelectionLayout.getError() != null) {\n                    groupsSelectionLayout.setError(null);\n                    groupsSelectionLayout.setErrorEnabled(false);\n                }\n\n                btnPos.setEnabled(validState);\n                btnNeutral.setEnabled(validState);\n            };\n\n            checkBoxEncrypt.setOnCheckedChangeListener((buttonView, isChecked) -> {\n                warningText.setVisibility(isChecked ? View.GONE : View.VISIBLE);\n                passwordInfoText.setVisibility(isChecked && isBackupPasswordSet ? View.VISIBLE : View.GONE);\n                checkBoxAccept.setVisibility(isChecked ? View.GONE : View.VISIBLE);\n                checkBoxAccept.setChecked(false);\n\n                stateValidator.enableIfValid();\n            });\n\n            checkBoxAccept.setOnCheckedChangeListener((buttonView, isChecked) -> {\n                stateValidator.enableIfValid();\n            });\n\n            checkBoxExportAllGroups.setOnCheckedChangeListener((button, isChecked) -> {\n                int visibility = isChecked ? View.GONE : View.VISIBLE;\n                groupsSelectionLayout.setVisibility(visibility);\n\n                stateValidator.enableIfValid();\n            });\n\n            groupsSelection.setOnDismissListener(stateValidator::enableIfValid);\n\n            btnPos.setOnClickListener(v -> {\n                dialog.dismiss();\n\n                if (!checkBoxEncrypt.isChecked() && !checkBoxAccept.isChecked()) {\n                    return;\n                }\n\n                if (!checkBoxExportAllGroups.isChecked()) {\n                    _exportFilter = getVaultEntryFilter(groupsSelection);\n                    if (_exportFilter == null) {\n                        Toast.makeText(requireContext(), R.string.export_no_groups_selected, Toast.LENGTH_SHORT).show();\n                        return;\n                    }\n                }\n\n                int pos = getStringResourceIndex(R.array.export_formats, dropdown.getText().toString());\n                boolean encrypt = checkBoxEncrypt.isChecked();\n                VaultBackupManager.FileInfo fileInfo = getExportFileInfo(pos, encrypt);\n                Intent intent = new Intent(Intent.ACTION_CREATE_DOCUMENT)\n                        .addCategory(Intent.CATEGORY_OPENABLE)\n                        .setType(getExportMimeType(getExportRequestCode(pos, encrypt)))\n                        .putExtra(Intent.EXTRA_TITLE, fileInfo.toString());\n\n                _auditLogRepository.addVaultExportedEvent();\n                ActivityResultLauncher<Intent> resultLauncher = getExportRequestLauncher(pos, encrypt);\n                _vaultManager.fireIntentLauncher(this, intent, resultLauncher);\n            });\n\n            btnNeutral.setOnClickListener(v -> {\n                dialog.dismiss();\n\n                int pos = getStringResourceIndex(R.array.export_formats, dropdown.getText().toString());\n                if (!checkBoxEncrypt.isChecked() && !checkBoxAccept.isChecked()) {\n                    return;\n                }\n\n                if (!checkBoxExportAllGroups.isChecked()) {\n                    _exportFilter = getVaultEntryFilter(groupsSelection);\n                    if (_exportFilter == null) {\n                        return;\n                    }\n                }\n\n                File file;\n                boolean encrypt = checkBoxEncrypt.isChecked();\n                try {\n                    VaultBackupManager.FileInfo fileInfo = getExportFileInfo(pos, encrypt);\n                    file = new File(getExportCacheDir(), fileInfo.toString());\n                } catch (IOException e) {\n                    e.printStackTrace();\n                    Dialogs.showErrorDialog(requireContext(), R.string.exporting_vault_error, e);\n                    return;\n                }\n\n                int requestCode = getExportRequestCode(pos, encrypt);\n                ActivityResultLauncher<Intent> resultLauncher = getExportRequestLauncher(pos, encrypt);\n                startExportVault(requestCode, cb -> {\n                    try (OutputStream stream = new FileOutputStream(file)) {\n                        cb.exportVault(stream);\n                    } catch (IOException | VaultRepositoryException e) {\n                        e.printStackTrace();\n                        Dialogs.showErrorDialog(requireContext(), R.string.exporting_vault_error, e);\n                        return;\n                    }\n\n                    // if the user creates an export, hide the backup reminder\n                    _prefs.setLatestExportTimeNow();\n                    _auditLogRepository.addVaultExportedEvent();\n                    Uri uri = FileProvider.getUriForFile(requireContext(), BuildConfig.FILE_PROVIDER_AUTHORITY, file);\n                    Intent intent = new Intent(Intent.ACTION_SEND)\n                            .setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)\n                            .setType(getExportMimeType(requestCode))\n                            .putExtra(Intent.EXTRA_STREAM, uri);\n                    Intent chooser = Intent.createChooser(intent, getString(R.string.pref_export_summary));\n                    _vaultManager.fireIntentLauncher(this, chooser, resultLauncher);\n                }, _exportFilter);\n                _exportFilter = null;\n            });\n        });\n\n        Dialogs.showSecureDialog(dialog);\n    }\n\n    private Vault.EntryFilter getVaultEntryFilter(DropdownCheckBoxes<VaultGroupModel> dropdownCheckBoxes) {\n        Set<UUID> groups = new HashSet<>();\n        for (VaultGroupModel group : dropdownCheckBoxes.getCheckedItems()) {\n            groups.add(group.getUUID());\n        }\n\n        return groups.isEmpty() ? null : entry -> {\n            if (entry.getGroups().isEmpty()) {\n                return groups.contains(null);\n            } else {\n                return entry.getGroups().stream().anyMatch(groups::contains);\n            }\n        };\n    }\n\n    private void startGoogleAuthenticatorStyleExport() {\n        ArrayList<GoogleAuthInfo> toExport = new ArrayList<>();\n        for (VaultEntry entry : _vaultManager.getVault().getEntries()) {\n            String type = entry.getInfo().getType().toLowerCase();\n            String algo = entry.getInfo().getAlgorithm(false);\n            int digits = entry.getInfo().getDigits();\n\n            if ((Objects.equals(type, TotpInfo.ID) || Objects.equals(type, HotpInfo.ID))\n                    && digits == OtpInfo.DEFAULT_DIGITS\n                    && Objects.equals(algo, OtpInfo.DEFAULT_ALGORITHM)) {\n                GoogleAuthInfo info = new GoogleAuthInfo(entry.getInfo(), entry.getName(), entry.getIssuer());\n                toExport.add(info);\n            }\n        }\n\n        int entriesSkipped = _vaultManager.getVault().getEntries().size() - toExport.size();\n        if (entriesSkipped > 0) {\n            String text = requireContext().getResources().getQuantityString(R.plurals.pref_google_auth_export_incompatible_entries, entriesSkipped, entriesSkipped);\n            Toast.makeText(requireContext(), text, Toast.LENGTH_SHORT).show();\n        }\n\n        int qrSize = 10;\n        int batchId = new Random().nextInt();\n        int batchSize = toExport.size() / qrSize + (toExport.size() % qrSize == 0 ? 0 : 1);\n        List<GoogleAuthInfo> infos = new ArrayList<>();\n        ArrayList<GoogleAuthInfo.Export> exports = new ArrayList<>();\n        for (int i = 0, batchIndex = 0; i < toExport.size(); i++) {\n            infos.add(toExport.get(i));\n            if (infos.size() == qrSize || toExport.size() == i + 1) {\n                exports.add(new GoogleAuthInfo.Export(infos, batchId, batchIndex++, batchSize));\n                infos = new ArrayList<>();\n            }\n        }\n\n        if (exports.size() == 0) {\n            Toast.makeText(requireContext(), R.string.pref_google_auth_export_no_data, Toast.LENGTH_SHORT).show();\n        } else {\n            Intent intent = new Intent(requireContext(), TransferEntriesActivity.class);\n            intent.putExtra(\"authInfos\", exports);\n            startActivity(intent);\n        }\n    }\n\n    private static int getExportRequestCode(int spinnerPos, boolean encrypt) {\n        if (spinnerPos == 0) {\n            return encrypt ? CODE_EXPORT : CODE_EXPORT_PLAIN;\n        } else if (spinnerPos == 1) {\n            return CODE_EXPORT_HTML;\n        }\n\n        return CODE_EXPORT_GOOGLE_URI;\n    }\n\n    private ActivityResultLauncher<Intent> getExportRequestLauncher(int spinnerPos, boolean encrypt) {\n        if (spinnerPos == 0) {\n            return encrypt ? exportResultLauncher : exportPlainResultLauncher;\n        } else if (spinnerPos == 1) {\n            return exportHtmlResultLauncher;\n        }\n\n        return exportGoogleUriResultLauncher;\n    }\n\n    private static VaultBackupManager.FileInfo getExportFileInfo(int spinnerPos, boolean encrypt) {\n        if (spinnerPos == 0) {\n            String filename = encrypt ? VaultRepository.FILENAME_PREFIX_EXPORT : VaultRepository.FILENAME_PREFIX_EXPORT_PLAIN;\n            return new VaultBackupManager.FileInfo(filename);\n        } else if (spinnerPos == 1) {\n            return new VaultBackupManager.FileInfo(VaultRepository.FILENAME_PREFIX_EXPORT_HTML, \"html\");\n        }\n\n        return new VaultBackupManager.FileInfo(VaultRepository.FILENAME_PREFIX_EXPORT_URI, \"txt\");\n    }\n\n    private static String getExportMimeType(int requestCode) {\n        if (requestCode == CODE_EXPORT_GOOGLE_URI) {\n            return \"text/plain\";\n        } else if (requestCode == CODE_EXPORT_HTML) {\n            return \"text/html\";\n        }\n        return \"application/json\";\n    }\n\n    private File getExportCacheDir() throws IOException {\n        File dir = new File(requireContext().getCacheDir(), \"export\");\n        if (!dir.exists() && !dir.mkdir()) {\n            throw new IOException(String.format(\"Unable to create directory %s\", dir));\n        }\n\n        return dir;\n    }\n\n    private void startExportVault(int requestCode, StartExportCallback cb, @Nullable Vault.EntryFilter filter) {\n        switch (requestCode) {\n            case CODE_EXPORT:\n                if (_vaultManager.getVault().isEncryptionEnabled()) {\n                    cb.exportVault(stream -> {\n                        if (filter != null) {\n                            _vaultManager.getVault().exportFiltered(stream, filter);\n                        } else {\n                            _vaultManager.getVault().export(stream);\n                        }\n                    });\n                } else {\n                    Dialogs.showSetPasswordDialog(requireActivity(), new Dialogs.PasswordSlotListener() {\n                        @Override\n                        public void onSlotResult(PasswordSlot slot, Cipher cipher) {\n                            VaultFileCredentials creds = new VaultFileCredentials();\n\n                            try {\n                                slot.setKey(creds.getKey(), cipher);\n                                creds.getSlots().add(slot);\n                            } catch (SlotException e) {\n                                onException(e);\n                                return;\n                            }\n\n                            cb.exportVault(stream -> {\n                                if (filter != null) {\n                                    _vaultManager.getVault().exportFiltered(stream, creds, filter);\n                                } else {\n                                    _vaultManager.getVault().export(stream, creds);\n                                }\n                            });\n                        }\n\n                        @Override\n                        public void onException(Exception e) {\n\n                        }\n                    });\n                }\n                break;\n            case CODE_EXPORT_PLAIN:\n                cb.exportVault(stream -> {\n                    if (filter != null) {\n                        _vaultManager.getVault().exportFiltered(stream, null, filter);\n                    } else {\n                        _vaultManager.getVault().export(stream, null);\n                    }\n                });\n\n                _prefs.setIsPlaintextBackupWarningNeeded(true);\n                break;\n            case CODE_EXPORT_GOOGLE_URI:\n                cb.exportVault((stream) -> _vaultManager.getVault().exportGoogleUris(stream, filter));\n                _prefs.setIsPlaintextBackupWarningNeeded(true);\n                break;\n            case CODE_EXPORT_HTML:\n                cb.exportVault((stream) -> _vaultManager.getVault().exportHtml(stream, filter));\n                _prefs.setIsPlaintextBackupWarningNeeded(true);\n                break;\n        }\n    }\n\n    private void onExportResult(int requestCode, int resultCode, @Nullable Intent data) {\n        if (data == null) {\n            return;\n        }\n        Uri uri = data.getData();\n        if (resultCode != Activity.RESULT_OK || uri == null) {\n            return;\n        }\n\n        startExportVault(requestCode, cb -> {\n            File file;\n            OutputStream outStream = null;\n            try {\n                file = File.createTempFile(VaultRepository.FILENAME_PREFIX_EXPORT + \"-\", \".json\", getExportCacheDir());\n                outStream = new FileOutputStream(file);\n                cb.exportVault(outStream);\n            } catch (VaultRepositoryException | IOException e) {\n                e.printStackTrace();\n                Dialogs.showErrorDialog(requireContext(), R.string.exporting_vault_error, e);\n                return;\n            } finally {\n                try {\n                    if (outStream != null) {\n                        outStream.close();\n                    }\n                } catch (IOException e) {\n                    e.printStackTrace();\n                }\n            }\n\n            new ExportTask(requireContext(), new ExportResultListener()).execute(getLifecycle(), new ExportTask.Params(file, uri));\n        }, _exportFilter);\n        _exportFilter = null;\n    }\n\n    private int getStringResourceIndex(@ArrayRes int id, String string) {\n        String[] res = getResources().getStringArray(id);\n        for (int i = 0; i < res.length; i++) {\n            if (res[i].equalsIgnoreCase(string)) {\n                return i;\n            }\n        }\n        return -1;\n    }\n\n    private class ExportResultListener implements ExportTask.Callback {\n        @Override\n        public void onTaskFinished(Exception e) {\n            if (e != null) {\n                e.printStackTrace();\n                Dialogs.showErrorDialog(requireContext(), R.string.exporting_vault_error, e);\n            } else {\n                // if the user creates an export, hide the backup reminder\n                _prefs.setLatestExportTimeNow();\n                _auditLogRepository.addVaultExportedEvent();\n                Toast.makeText(requireContext(), getString(R.string.exported_vault), Toast.LENGTH_SHORT).show();\n            }\n        }\n    }\n\n    private interface FinishExportCallback {\n        void exportVault(OutputStream stream) throws IOException, VaultRepositoryException;\n    }\n\n    private interface StartExportCallback {\n        void exportVault(FinishExportCallback exportCb);\n    }\n\n    private interface DialogStateValidator {\n        void enableIfValid();\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/ui/fragments/preferences/MainPreferencesFragment.java",
    "content": "package com.beemdevelopment.aegis.ui.fragments.preferences;\n\nimport android.os.Bundle;\n\nimport com.beemdevelopment.aegis.R;\n\npublic class MainPreferencesFragment extends PreferencesFragment {\n    @Override\n    public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {\n        addPreferencesFromResource(R.xml.preferences);\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/ui/fragments/preferences/PreferencesFragment.java",
    "content": "package com.beemdevelopment.aegis.ui.fragments.preferences;\n\nimport android.content.Intent;\nimport android.os.Bundle;\nimport android.view.LayoutInflater;\nimport android.view.ViewGroup;\nimport android.view.animation.Animation;\n\nimport androidx.annotation.CallSuper;\nimport androidx.annotation.NonNull;\nimport androidx.annotation.Nullable;\nimport androidx.core.graphics.Insets;\nimport androidx.core.view.ViewCompat;\nimport androidx.core.view.WindowInsetsCompat;\nimport androidx.preference.Preference;\nimport androidx.preference.PreferenceFragmentCompat;\nimport androidx.recyclerview.widget.RecyclerView;\n\nimport com.beemdevelopment.aegis.Preferences;\nimport com.beemdevelopment.aegis.R;\nimport com.beemdevelopment.aegis.database.AuditLogRepository;\nimport com.beemdevelopment.aegis.helpers.AnimationsHelper;\nimport com.beemdevelopment.aegis.ui.dialogs.Dialogs;\nimport com.beemdevelopment.aegis.vault.VaultManager;\nimport com.beemdevelopment.aegis.vault.VaultRepositoryException;\n\nimport javax.inject.Inject;\n\nimport dagger.hilt.android.AndroidEntryPoint;\n\n@AndroidEntryPoint\npublic abstract class PreferencesFragment extends PreferenceFragmentCompat {\n    // activity request codes\n    public static final int CODE_EXPORT = 5;\n    public static final int CODE_EXPORT_PLAIN = 6;\n    public static final int CODE_EXPORT_GOOGLE_URI = 7;\n    public static final int CODE_EXPORT_HTML = 8;\n\n    @Inject\n    Preferences _prefs;\n\n    @Inject\n    VaultManager _vaultManager;\n\n    @Inject\n    protected AuditLogRepository _auditLogRepository;\n\n    @Override\n    @CallSuper\n    public void onResume() {\n        super.onResume();\n\n        Intent intent = requireActivity().getIntent();\n        String preference = intent.getStringExtra(\"pref\");\n        if (preference != null) {\n            scrollToPreference(preference);\n            intent.removeExtra(\"pref\");\n        }\n    }\n\n    @Override\n    @Nullable\n    public Animation onCreateAnimation(int transit, boolean enter, int nextAnim) {\n        if (nextAnim != 0) {\n            return AnimationsHelper.loadScaledAnimation(requireContext(), nextAnim, AnimationsHelper.Scale.TRANSITION);\n        }\n\n        return super.onCreateAnimation(transit, enter, nextAnim);\n    }\n\n    @NonNull\n    @Override\n    public RecyclerView onCreateRecyclerView(@NonNull LayoutInflater inflater, @NonNull ViewGroup parent, @Nullable Bundle savedInstanceState) {\n        RecyclerView recyclerView = super.onCreateRecyclerView(inflater, parent, savedInstanceState);\n        ViewCompat.setOnApplyWindowInsetsListener(recyclerView, (targetView, windowInsets) -> {\n            Insets insets = windowInsets.getInsets(WindowInsetsCompat.Type.systemBars() | WindowInsetsCompat.Type.displayCutout());\n            targetView.setPadding(\n                    0,\n                    0,\n                    0,\n                    insets.bottom\n            );\n            return WindowInsetsCompat.CONSUMED;\n        });\n        return recyclerView;\n    }\n\n    protected boolean saveAndBackupVault() {\n        try {\n            _vaultManager.saveAndBackup();\n        } catch (VaultRepositoryException e) {\n            e.printStackTrace();\n            Dialogs.showErrorDialog(requireContext(), R.string.saving_error, e);\n            return false;\n        }\n\n        return true;\n    }\n\n    @NonNull\n    protected <T extends Preference> T requirePreference(@NonNull CharSequence key) {\n        T pref = findPreference(key);\n        if (pref == null) {\n            throw new IllegalStateException(String.format(\"Preference %s not found\", key));\n        }\n\n        return pref;\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/ui/fragments/preferences/SecurityPreferencesFragment.java",
    "content": "package com.beemdevelopment.aegis.ui.fragments.preferences;\n\nimport static android.text.TextUtils.isDigitsOnly;\n\nimport android.os.Bundle;\nimport android.view.Window;\nimport android.view.WindowManager;\nimport android.widget.Toast;\n\nimport androidx.annotation.NonNull;\nimport androidx.appcompat.app.AlertDialog;\nimport androidx.biometric.BiometricPrompt;\nimport androidx.preference.Preference;\nimport androidx.preference.SwitchPreferenceCompat;\n\nimport com.beemdevelopment.aegis.PassReminderFreq;\nimport com.beemdevelopment.aegis.Preferences;\nimport com.beemdevelopment.aegis.R;\nimport com.beemdevelopment.aegis.crypto.KeyStoreHandle;\nimport com.beemdevelopment.aegis.crypto.KeyStoreHandleException;\nimport com.beemdevelopment.aegis.helpers.BiometricSlotInitializer;\nimport com.beemdevelopment.aegis.helpers.BiometricsHelper;\nimport com.beemdevelopment.aegis.ui.dialogs.Dialogs;\nimport com.beemdevelopment.aegis.ui.preferences.SwitchPreference;\nimport com.beemdevelopment.aegis.ui.tasks.PasswordSlotDecryptTask;\nimport com.beemdevelopment.aegis.vault.VaultFileCredentials;\nimport com.beemdevelopment.aegis.vault.VaultRepositoryException;\nimport com.beemdevelopment.aegis.vault.slots.BiometricSlot;\nimport com.beemdevelopment.aegis.vault.slots.PasswordSlot;\nimport com.beemdevelopment.aegis.vault.slots.Slot;\nimport com.beemdevelopment.aegis.vault.slots.SlotException;\nimport com.beemdevelopment.aegis.vault.slots.SlotList;\nimport com.google.android.material.dialog.MaterialAlertDialogBuilder;\n\nimport java.util.Arrays;\nimport java.util.List;\n\nimport javax.crypto.Cipher;\n\npublic class SecurityPreferencesFragment extends PreferencesFragment {\n    private SwitchPreference _encryptionPreference;\n    private SwitchPreference _biometricsPreference;\n    private Preference _autoLockPreference;\n    private Preference _setPasswordPreference;\n    private Preference _passwordReminderPreference;\n    private SwitchPreferenceCompat _pinKeyboardPreference;\n    private SwitchPreference _backupPasswordPreference;\n    private Preference _backupPasswordChangePreference;\n\n    @Override\n    public void onResume() {\n        super.onResume();\n        updateEncryptionPreferences();\n    }\n\n    @Override\n    public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {\n        addPreferencesFromResource(R.xml.preferences_security);\n\n        Preference screenPreference = requirePreference(\"pref_secure_screen\");\n        screenPreference.setOnPreferenceChangeListener((preference, newValue) -> {\n            Window window = requireActivity().getWindow();\n            if ((boolean) newValue) {\n                window.addFlags(WindowManager.LayoutParams.FLAG_SECURE);\n            } else {\n                window.clearFlags(WindowManager.LayoutParams.FLAG_SECURE);\n            }\n            return true;\n        });\n\n        Preference tapToRevealTimePreference = requirePreference(\"pref_tap_to_reveal_time\");\n        tapToRevealTimePreference.setSummary(_prefs.getTapToRevealTime() + \" seconds\");\n        tapToRevealTimePreference.setOnPreferenceClickListener(preference -> {\n            Dialogs.showTapToRevealTimeoutPickerDialog(requireContext(), _prefs.getTapToRevealTime(), number -> {\n                _prefs.setTapToRevealTime(number);\n                tapToRevealTimePreference.setSummary(number + \" seconds\");\n            });\n            return false;\n        });\n\n        _encryptionPreference = requirePreference(\"pref_encryption\");\n        _encryptionPreference.setOnPreferenceChangeListener((preference, newValue) -> {\n            if (!_vaultManager.getVault().isEncryptionEnabled()) {\n                Dialogs.showSetPasswordDialog(requireActivity(), new EnableEncryptionListener());\n            } else {\n                Dialogs.showSecureDialog(new MaterialAlertDialogBuilder(requireContext(), R.style.ThemeOverlay_Aegis_AlertDialog_Warning)\n                        .setTitle(R.string.disable_encryption)\n                        .setMessage(getText(R.string.disable_encryption_description))\n                        .setIconAttribute(android.R.attr.alertDialogIcon)\n                        .setPositiveButton(android.R.string.yes, (dialog, which) -> {\n                            try {\n                                _vaultManager.disableEncryption();\n                            } catch (VaultRepositoryException e) {\n                                e.printStackTrace();\n                                Dialogs.showErrorDialog(requireContext(), R.string.disable_encryption_error, e);\n                                return;\n                            }\n\n                            _prefs.setIsBackupsEnabled(false);\n                            _prefs.setIsAndroidBackupsEnabled(false);\n                            updateEncryptionPreferences();\n                        })\n                        .setNegativeButton(android.R.string.no, null)\n                        .create());\n            }\n\n            return false;\n        });\n\n        _biometricsPreference = requirePreference(\"pref_biometrics\");\n        _biometricsPreference.setOnPreferenceChangeListener((preference, newValue) -> {\n            VaultFileCredentials creds = _vaultManager.getVault().getCredentials();\n            SlotList slots = creds.getSlots();\n\n            if (!slots.has(BiometricSlot.class)) {\n                if (BiometricsHelper.isAvailable(requireContext())) {\n                    BiometricSlotInitializer initializer = new BiometricSlotInitializer(SecurityPreferencesFragment.this, new RegisterBiometricsListener());\n                    BiometricPrompt.PromptInfo info = new BiometricPrompt.PromptInfo.Builder()\n                            .setTitle(getString(R.string.set_up_biometric))\n                            .setNegativeButtonText(getString(android.R.string.cancel))\n                            .build();\n                    initializer.authenticate(info);\n                }\n            } else {\n                // remove the biometric slot\n                BiometricSlot slot = slots.find(BiometricSlot.class);\n                slots.remove(slot);\n                _vaultManager.getVault().setCredentials(creds);\n\n                // remove the KeyStore key\n                try {\n                    KeyStoreHandle handle = new KeyStoreHandle();\n                    handle.deleteKey(slot.getUUID().toString());\n                } catch (KeyStoreHandleException e) {\n                    e.printStackTrace();\n                }\n\n                saveAndBackupVault();\n                updateEncryptionPreferences();\n            }\n\n            return false;\n        });\n\n        _setPasswordPreference = requirePreference(\"pref_password\");\n        _setPasswordPreference.setOnPreferenceClickListener(preference -> {\n            Dialogs.showSetPasswordDialog(requireActivity(), new SetPasswordListener());\n            return false;\n        });\n\n        _pinKeyboardPreference = requirePreference(\"pref_pin_keyboard\");\n        _pinKeyboardPreference.setOnPreferenceChangeListener((preference, newValue) -> {\n            if (!(boolean) newValue) {\n                return true;\n            }\n\n            Dialogs.showPasswordInputDialog(requireContext(), R.string.set_password_confirm, R.string.pin_keyboard_description, password -> {\n                if (isDigitsOnly(new String(password))) {\n                    List<PasswordSlot> slots = _vaultManager.getVault().getCredentials().getSlots().findRegularPasswordSlots();\n                    PasswordSlotDecryptTask.Params params = new PasswordSlotDecryptTask.Params(slots, password);\n                    PasswordSlotDecryptTask task = new PasswordSlotDecryptTask(requireContext(), new PasswordConfirmationListener());\n                    task.execute(getLifecycle(), params);\n                } else {\n                    _pinKeyboardPreference.setChecked(false);\n                    Dialogs.showSecureDialog(new MaterialAlertDialogBuilder(requireContext(), R.style.ThemeOverlay_Aegis_AlertDialog_Error)\n                            .setTitle(R.string.pin_keyboard_error)\n                            .setMessage(R.string.pin_keyboard_error_description)\n                            .setIconAttribute(android.R.attr.alertDialogIcon)\n                            .setCancelable(false)\n                            .setPositiveButton(android.R.string.ok, null)\n                            .create());\n                }\n            }, dialog -> {\n                _pinKeyboardPreference.setChecked(false);\n            });\n            return false;\n        });\n\n        _autoLockPreference = requirePreference(\"pref_auto_lock\");\n        _autoLockPreference.setSummary(getAutoLockSummary());\n        _autoLockPreference.setOnPreferenceClickListener((preference) -> {\n            final int[] items = Preferences.AUTO_LOCK_SETTINGS;\n            final String[] textItems = getResources().getStringArray(R.array.pref_auto_lock_types);\n            final boolean[] checkedItems = new boolean[items.length];\n            for (int i = 0; i < items.length; i++) {\n                checkedItems[i] = _prefs.isAutoLockTypeEnabled(items[i]);\n            }\n\n            MaterialAlertDialogBuilder builder = new MaterialAlertDialogBuilder(requireContext())\n                    .setTitle(R.string.pref_auto_lock_prompt)\n                    .setMultiChoiceItems(textItems, checkedItems, (dialog, index, isChecked) -> checkedItems[index] = isChecked)\n                    .setPositiveButton(android.R.string.ok, (dialog, which) -> {\n                        int autoLock = Preferences.AUTO_LOCK_OFF;\n                        for (int i = 0; i < checkedItems.length; i++) {\n                            if (checkedItems[i]) {\n                                autoLock |= items[i];\n                            }\n                        }\n\n                        _prefs.setAutoLockMask(autoLock);\n                        _autoLockPreference.setSummary(getAutoLockSummary());\n                    })\n                    .setNegativeButton(android.R.string.cancel, null);\n            Dialogs.showSecureDialog(builder.create());\n\n            return false;\n        });\n\n        _passwordReminderPreference = requirePreference(\"pref_password_reminder_freq\");\n        _passwordReminderPreference.setSummary(getPasswordReminderSummary());\n        _passwordReminderPreference.setOnPreferenceClickListener((preference) -> {\n            final PassReminderFreq currFreq = _prefs.getPasswordReminderFrequency();\n            final PassReminderFreq[] items = PassReminderFreq.values();\n            final String[] textItems = Arrays.stream(items)\n                    .map(f -> getString(f.getStringRes()))\n                    .toArray(String[]::new);\n\n            MaterialAlertDialogBuilder builder = new MaterialAlertDialogBuilder(requireContext())\n                    .setTitle(R.string.pref_password_reminder_title)\n                    .setSingleChoiceItems(textItems, currFreq.ordinal(), (dialog, which) -> {\n                        int i = ((AlertDialog) dialog).getListView().getCheckedItemPosition();\n                        PassReminderFreq freq = PassReminderFreq.fromInteger(i);\n                        _prefs.setPasswordReminderFrequency(freq);\n                        _passwordReminderPreference.setSummary(getPasswordReminderSummary());\n                        dialog.dismiss();\n                    })\n                    .setNegativeButton(android.R.string.cancel, null);\n            Dialogs.showSecureDialog(builder.create());\n            return false;\n        });\n\n        _backupPasswordPreference = requirePreference(\"pref_backup_password\");\n        _backupPasswordPreference.setOnPreferenceChangeListener((preference, newValue) -> {\n            if (!_vaultManager.getVault().isBackupPasswordSet()) {\n                Dialogs.showSetPasswordDialog(requireActivity(), new SetBackupPasswordListener());\n            } else {\n                VaultFileCredentials creds = _vaultManager.getVault().getCredentials();\n                SlotList slots = creds.getSlots();\n                for (Slot slot : slots.findBackupPasswordSlots()) {\n                    slots.remove(slot);\n                }\n                _vaultManager.getVault().setCredentials(creds);\n\n                saveAndBackupVault();\n                updateEncryptionPreferences();\n            }\n\n            return false;\n        });\n\n        _backupPasswordChangePreference = requirePreference(\"pref_backup_password_change\");\n        _backupPasswordChangePreference.setOnPreferenceClickListener(preference -> {\n            Dialogs.showSetPasswordDialog(requireActivity(), new SetBackupPasswordListener());\n            return false;\n        });\n    }\n\n    private void updateEncryptionPreferences() {\n        boolean encrypted = _vaultManager.getVault().isEncryptionEnabled();\n        boolean backupPasswordSet = _vaultManager.getVault().isBackupPasswordSet();\n        _encryptionPreference.setChecked(encrypted, true);\n        _setPasswordPreference.setVisible(encrypted);\n        _biometricsPreference.setVisible(encrypted);\n        _autoLockPreference.setVisible(encrypted);\n        _pinKeyboardPreference.setVisible(encrypted);\n        _backupPasswordPreference.getParent().setVisible(encrypted);\n        _backupPasswordPreference.setChecked(backupPasswordSet, true);\n        _backupPasswordChangePreference.setVisible(backupPasswordSet);\n\n        if (encrypted) {\n            SlotList slots = _vaultManager.getVault().getCredentials().getSlots();\n            boolean multiBackupPassword = slots.findBackupPasswordSlots().size() > 1;\n            boolean multiPassword = slots.findRegularPasswordSlots().size() > 1;\n            boolean multiBio = slots.findAll(BiometricSlot.class).size() > 1;\n            boolean canUseBio = BiometricsHelper.isAvailable(requireContext());\n            _setPasswordPreference.setEnabled(!multiPassword);\n            _biometricsPreference.setEnabled(canUseBio && !multiBio);\n            _biometricsPreference.setChecked(slots.has(BiometricSlot.class), true);\n            _passwordReminderPreference.setVisible(slots.has(BiometricSlot.class));\n            _backupPasswordChangePreference.setEnabled(!multiBackupPassword);\n        } else {\n            _setPasswordPreference.setEnabled(false);\n            _biometricsPreference.setEnabled(false);\n            _biometricsPreference.setChecked(false, true);\n            _passwordReminderPreference.setVisible(false);\n            _backupPasswordChangePreference.setEnabled(false);\n        }\n    }\n\n    private String getPasswordReminderSummary() {\n        PassReminderFreq freq = _prefs.getPasswordReminderFrequency();\n        if (freq == PassReminderFreq.NEVER) {\n            return getString(R.string.pref_password_reminder_summary_disabled);\n        }\n\n        String freqString = getString(freq.getStringRes()).toLowerCase();\n        return getString(R.string.pref_password_reminder_summary, freqString);\n    }\n\n    private String getAutoLockSummary() {\n        final int[] settings = Preferences.AUTO_LOCK_SETTINGS;\n        final String[] descriptions = getResources().getStringArray(R.array.pref_auto_lock_types);\n\n        StringBuilder builder = new StringBuilder();\n        for (int i = 0; i < settings.length; i++) {\n            if (_prefs.isAutoLockTypeEnabled(settings[i])) {\n                if (builder.length() != 0) {\n                    builder.append(\", \");\n                }\n\n                builder.append(descriptions[i].toLowerCase());\n            }\n        }\n\n        if (builder.length() == 0) {\n            return getString(R.string.pref_auto_lock_summary_disabled);\n        }\n\n        return getString(R.string.pref_auto_lock_summary, builder.toString());\n    }\n\n    private class SetPasswordListener implements Dialogs.PasswordSlotListener {\n        @Override\n        public void onSlotResult(PasswordSlot slot, Cipher cipher) {\n            VaultFileCredentials creds = _vaultManager.getVault().getCredentials();\n            SlotList slots = creds.getSlots();\n\n            try {\n                // encrypt the master key for this slot\n                slot.setKey(creds.getKey(), cipher);\n\n                // remove the old master password slot\n                List<PasswordSlot> passSlots = creds.getSlots().findRegularPasswordSlots();\n                if (passSlots.size() != 0) {\n                    slots.remove(passSlots.get(0));\n                }\n\n                // add the new master password slot\n                slots.add(slot);\n            } catch (SlotException e) {\n                onException(e);\n                return;\n            }\n\n            _vaultManager.getVault().setCredentials(creds);\n            saveAndBackupVault();\n\n            if (_prefs.isPinKeyboardEnabled()) {\n                _pinKeyboardPreference.setChecked(false);\n                Toast.makeText(requireContext(), R.string.pin_keyboard_disabled, Toast.LENGTH_SHORT).show();\n            }\n        }\n\n        @Override\n        public void onException(Exception e) {\n            e.printStackTrace();\n            updateEncryptionPreferences();\n            Dialogs.showErrorDialog(requireContext(), R.string.encryption_set_password_error, e);\n        }\n    }\n\n    private class SetBackupPasswordListener implements Dialogs.PasswordSlotListener {\n        @Override\n        public void onSlotResult(PasswordSlot slot, Cipher cipher) {\n            slot.setIsBackup(true);\n\n            VaultFileCredentials creds = _vaultManager.getVault().getCredentials();\n            SlotList slots = creds.getSlots();\n\n            try {\n                // encrypt the master key for this slot\n                slot.setKey(creds.getKey(), cipher);\n\n                // remove the old backup password slot\n                for (Slot oldSlot : slots.findBackupPasswordSlots()) {\n                    slots.remove(oldSlot);\n                }\n\n                // add the new backup password slot\n                slots.add(slot);\n            } catch (SlotException e) {\n                onException(e);\n                return;\n            }\n\n            _vaultManager.getVault().setCredentials(creds);\n            saveAndBackupVault();\n            updateEncryptionPreferences();\n        }\n\n        @Override\n        public void onException(Exception e) {\n            e.printStackTrace();\n            updateEncryptionPreferences();\n            Dialogs.showErrorDialog(requireContext(), R.string.encryption_set_password_error, e);\n        }\n    }\n\n    private class RegisterBiometricsListener implements BiometricSlotInitializer.Listener {\n        @Override\n        public void onInitializeSlot(BiometricSlot slot, Cipher cipher) {\n            VaultFileCredentials creds = _vaultManager.getVault().getCredentials();\n            try {\n                slot.setKey(creds.getKey(), cipher);\n            } catch (SlotException e) {\n                e.printStackTrace();\n                onSlotInitializationFailed(0, e.toString());\n                return;\n            }\n            creds.getSlots().add(slot);\n            _vaultManager.getVault().setCredentials(creds);\n\n            saveAndBackupVault();\n            updateEncryptionPreferences();\n        }\n\n        @Override\n        public void onSlotInitializationFailed(int errorCode, @NonNull CharSequence errString) {\n            if (!BiometricsHelper.isCanceled(errorCode)) {\n                Dialogs.showErrorDialog(requireContext(), R.string.encryption_enable_biometrics_error, errString);\n            }\n        }\n    }\n\n    private class EnableEncryptionListener implements Dialogs.PasswordSlotListener {\n        @Override\n        public void onSlotResult(PasswordSlot slot, Cipher cipher) {\n            VaultFileCredentials creds = new VaultFileCredentials();\n\n            try {\n                slot.setKey(creds.getKey(), cipher);\n                creds.getSlots().add(slot);\n                _vaultManager.enableEncryption(creds);\n            } catch (VaultRepositoryException | SlotException e) {\n                onException(e);\n                return;\n            }\n\n            _pinKeyboardPreference.setChecked(false);\n            updateEncryptionPreferences();\n        }\n\n        @Override\n        public void onException(Exception e) {\n            e.printStackTrace();\n            Dialogs.showErrorDialog(requireContext(), R.string.encryption_set_password_error, e);\n        }\n    }\n\n    private class PasswordConfirmationListener implements PasswordSlotDecryptTask.Callback {\n        @Override\n        public void onTaskFinished(PasswordSlotDecryptTask.Result result) {\n            if (result != null) {\n                _pinKeyboardPreference.setChecked(true);\n            } else {\n                Dialogs.showSecureDialog(new MaterialAlertDialogBuilder(requireContext(), R.style.ThemeOverlay_Aegis_AlertDialog_Error)\n                        .setTitle(R.string.pin_keyboard_error)\n                        .setMessage(R.string.invalid_password)\n                        .setIconAttribute(android.R.attr.alertDialogIcon)\n                        .setCancelable(false)\n                        .setPositiveButton(android.R.string.ok, null)\n                        .create());\n                _pinKeyboardPreference.setChecked(false);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/ui/glide/AegisGlideModule.java",
    "content": "package com.beemdevelopment.aegis.ui.glide;\n\nimport android.content.Context;\nimport android.graphics.drawable.PictureDrawable;\n\nimport androidx.annotation.NonNull;\n\nimport com.beemdevelopment.aegis.vault.VaultEntry;\nimport com.beemdevelopment.aegis.vault.VaultEntryIcon;\nimport com.bumptech.glide.Glide;\nimport com.bumptech.glide.Registry;\nimport com.bumptech.glide.annotation.GlideModule;\nimport com.bumptech.glide.module.AppGlideModule;\nimport com.caverock.androidsvg.SVG;\n\nimport java.io.InputStream;\nimport java.nio.ByteBuffer;\n\n@GlideModule\npublic class AegisGlideModule extends AppGlideModule {\n    @Override\n    public void registerComponents(@NonNull Context context, @NonNull Glide glide, @NonNull Registry registry) {\n        registry.prepend(VaultEntryIcon.class, ByteBuffer.class, new VaultEntryIconLoader.Factory());\n        registry.register(SVG.class, PictureDrawable.class, new SvgDrawableTranscoder())\n                .append(InputStream.class, SVG.class, new SvgDecoder())\n                .append(ByteBuffer.class, SVG.class, new SvgBytesDecoder());\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/ui/glide/GlideHelper.java",
    "content": "package com.beemdevelopment.aegis.ui.glide;\n\nimport android.graphics.drawable.Drawable;\nimport android.os.Build;\nimport android.widget.ImageView;\n\nimport androidx.annotation.NonNull;\nimport androidx.annotation.Nullable;\n\nimport com.amulyakhare.textdrawable.TextDrawable;\nimport com.beemdevelopment.aegis.helpers.TextDrawableHelper;\nimport com.beemdevelopment.aegis.icons.IconPack;\nimport com.beemdevelopment.aegis.icons.IconType;\nimport com.beemdevelopment.aegis.vault.VaultEntry;\nimport com.bumptech.glide.RequestBuilder;\nimport com.bumptech.glide.RequestManager;\nimport com.bumptech.glide.load.DataSource;\nimport com.bumptech.glide.load.engine.DiskCacheStrategy;\nimport com.bumptech.glide.load.engine.GlideException;\nimport com.bumptech.glide.request.RequestListener;\nimport com.bumptech.glide.request.target.DrawableImageViewTarget;\nimport com.bumptech.glide.request.target.Target;\n\nimport java.io.File;\n\npublic class GlideHelper {\n    private GlideHelper() {\n\n    }\n\n    public static void loadIconFile(RequestManager rm, File file, IconType iconType, ImageView targetView) {\n        load(rm.load(file), iconType, targetView);\n    }\n\n    public static void loadIcon(RequestManager rm, IconPack.Icon icon, ImageView targetView) {\n        loadIconFile(rm, icon.getFile(), icon.getIconType(), targetView);\n    }\n\n    public static void loadEntryIcon(RequestManager rm, VaultEntry entry, ImageView targetView) {\n        if (entry.hasIcon()) {\n            setCommonOptions(rm.load(entry.getIcon()), entry.getIcon().getType()).into(targetView);\n        } else {\n            // Clear any pending loads for targetView, so that the TextDrawable\n            // we're about to display doesn't get overwritten when that pending load finishes\n            rm.clear(targetView);\n\n            setLayerType(targetView, IconType.INVALID);\n            TextDrawable drawable = TextDrawableHelper.generate(entry.getIssuer(), entry.getName(), targetView);\n            targetView.setImageDrawable(drawable);\n        }\n    }\n\n    private static void load(RequestBuilder<Drawable> rb, IconType iconType, ImageView targetView) {\n        setCommonOptions(rb, iconType).into(targetView);\n    }\n\n    public static RequestBuilder<Drawable> setCommonOptions(RequestBuilder<Drawable> rb, IconType iconType) {\n        if (iconType != null) {\n            rb = rb.set(VaultEntryIconLoader.ICON_TYPE, iconType)\n                    .listener(new ViewReadyListener<>(targetView -> {\n                        targetView.setImageTintList(null);\n                        setLayerType(targetView, iconType);\n                    }));\n        }\n\n        return rb.diskCacheStrategy(DiskCacheStrategy.NONE)\n                .skipMemoryCache(false);\n    }\n\n    /**\n     * Sets the layer type of the given ImageView based on the given IconType. If the\n     * icon type is SVG and SDK <= 27, the layer type is set to software. Otherwise, it\n     * is set to hardware.\n     */\n    private static void setLayerType(ImageView view, IconType iconType) {\n        if (iconType == IconType.SVG && Build.VERSION.SDK_INT <= Build.VERSION_CODES.O_MR1) {\n            view.setLayerType(ImageView.LAYER_TYPE_SOFTWARE, null);\n            return;\n        }\n\n        view.setLayerType(ImageView.LAYER_TYPE_HARDWARE, null);\n    }\n\n    private static class ViewReadyListener<T> implements RequestListener<T> {\n        private final Listener<T> _listener;\n\n        public ViewReadyListener(Listener<T> listener) {\n            _listener = listener;\n        }\n\n        @Override\n        public boolean onLoadFailed(@Nullable GlideException e, @Nullable Object model, @NonNull Target<T> target, boolean isFirstResource) {\n            return false;\n        }\n\n        @Override\n        public boolean onResourceReady(@NonNull T resource, @NonNull Object model, Target<T> target, @NonNull DataSource dataSource, boolean isFirstResource) {\n            if (target instanceof DrawableImageViewTarget) {\n                DrawableImageViewTarget viewTarget = (DrawableImageViewTarget) target;\n                if (_listener != null) {\n                    _listener.onConfigureImageView(viewTarget.getView());\n                }\n            }\n            return false;\n        }\n\n        public interface Listener<T> {\n            void onConfigureImageView(ImageView targetView);\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/ui/glide/SvgBytesDecoder.java",
    "content": "package com.beemdevelopment.aegis.ui.glide;\n\nimport androidx.annotation.NonNull;\n\nimport com.bumptech.glide.load.Options;\nimport com.bumptech.glide.load.ResourceDecoder;\nimport com.bumptech.glide.load.engine.Resource;\nimport com.caverock.androidsvg.SVG;\n\nimport java.io.ByteArrayInputStream;\nimport java.io.IOException;\nimport java.nio.ByteBuffer;\n\npublic class SvgBytesDecoder implements ResourceDecoder<ByteBuffer, SVG> {\n    private SvgDecoder _decoder = new SvgDecoder();\n\n    @Override\n    public boolean handles(@NonNull ByteBuffer source, @NonNull Options options) throws IOException {\n        try (ByteArrayInputStream inStream = new ByteArrayInputStream(source.array())) {\n            return _decoder.handles(inStream, options);\n        }\n    }\n\n    public Resource<SVG> decode(@NonNull ByteBuffer source, int width, int height, @NonNull Options options) throws IOException {\n        try (ByteArrayInputStream inStream = new ByteArrayInputStream(source.array())) {\n            return _decoder.decode(inStream, width, height, options);\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/ui/glide/SvgDecoder.java",
    "content": "package com.beemdevelopment.aegis.ui.glide;\n\nimport androidx.annotation.NonNull;\n\nimport com.beemdevelopment.aegis.icons.IconType;\nimport com.bumptech.glide.load.Options;\nimport com.bumptech.glide.load.ResourceDecoder;\nimport com.bumptech.glide.load.engine.Resource;\nimport com.bumptech.glide.load.resource.SimpleResource;\nimport com.caverock.androidsvg.SVG;\nimport com.caverock.androidsvg.SVGParseException;\n\nimport java.io.IOException;\nimport java.io.InputStream;\n\nimport static com.bumptech.glide.request.target.Target.SIZE_ORIGINAL;\n\n// source: https://github.com/bumptech/glide/tree/master/samples/svg/src/main/java/com/bumptech/glide/samples/svg\n\n/** Decodes an SVG internal representation from an {@link InputStream}. */\npublic class SvgDecoder implements ResourceDecoder<InputStream, SVG> {\n\n    @Override\n    public boolean handles(@NonNull InputStream source, @NonNull Options options) {\n        return options.get(VaultEntryIconLoader.ICON_TYPE) == IconType.SVG;\n    }\n\n    public Resource<SVG> decode(\n            @NonNull InputStream source, int width, int height, @NonNull Options options)\n            throws IOException {\n        try {\n            SVG svg = SVG.getFromInputStream(source);\n            if (width != SIZE_ORIGINAL) {\n                svg.setDocumentWidth(width);\n            }\n            if (height != SIZE_ORIGINAL) {\n                svg.setDocumentHeight(height);\n            }\n            return new SimpleResource<>(svg);\n        } catch (SVGParseException ex) {\n            throw new IOException(\"Cannot load SVG from stream\", ex);\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/ui/glide/SvgDrawableTranscoder.java",
    "content": "package com.beemdevelopment.aegis.ui.glide;\n\nimport android.graphics.Picture;\nimport android.graphics.drawable.PictureDrawable;\n\nimport androidx.annotation.NonNull;\nimport androidx.annotation.Nullable;\n\nimport com.bumptech.glide.load.Options;\nimport com.bumptech.glide.load.engine.Resource;\nimport com.bumptech.glide.load.resource.SimpleResource;\nimport com.bumptech.glide.load.resource.transcode.ResourceTranscoder;\nimport com.caverock.androidsvg.SVG;\n\n// source: https://github.com/bumptech/glide/tree/master/samples/svg/src/main/java/com/bumptech/glide/samples/svg\n\n/**\n * Convert the {@link SVG}'s internal representation to an Android-compatible one ({@link Picture}).\n */\npublic class SvgDrawableTranscoder implements ResourceTranscoder<SVG, PictureDrawable> {\n    @Nullable\n    @Override\n    public Resource<PictureDrawable> transcode(\n            @NonNull Resource<SVG> toTranscode, @NonNull Options options) {\n        SVG svg = toTranscode.get();\n        Picture picture = svg.renderToPicture();\n        PictureDrawable drawable = new PictureDrawable(picture);\n        return new SimpleResource<>(drawable);\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/ui/glide/VaultEntryIconKey.java",
    "content": "package com.beemdevelopment.aegis.ui.glide;\n\nimport androidx.annotation.NonNull;\n\nimport com.beemdevelopment.aegis.vault.VaultEntryIcon;\nimport com.bumptech.glide.load.Key;\n\nimport java.security.MessageDigest;\n\npublic class VaultEntryIconKey implements Key {\n    private final VaultEntryIcon _icon;\n\n    public VaultEntryIconKey(VaultEntryIcon icon) {\n        _icon = icon;\n    }\n\n    @Override\n    public void updateDiskCacheKey(@NonNull MessageDigest messageDigest) {\n        messageDigest.update(_icon.getHash());\n    }\n\n    @Override\n    public boolean equals(Object o) {\n        return _icon.equals(o);\n    }\n\n    @Override\n    public int hashCode() {\n        return _icon.hashCode();\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/ui/glide/VaultEntryIconLoader.java",
    "content": "package com.beemdevelopment.aegis.ui.glide;\n\nimport androidx.annotation.NonNull;\n\nimport com.beemdevelopment.aegis.icons.IconType;\nimport com.beemdevelopment.aegis.vault.VaultEntryIcon;\nimport com.bumptech.glide.Priority;\nimport com.bumptech.glide.load.DataSource;\nimport com.bumptech.glide.load.Option;\nimport com.bumptech.glide.load.Options;\nimport com.bumptech.glide.load.data.DataFetcher;\nimport com.bumptech.glide.load.model.ModelLoader;\nimport com.bumptech.glide.load.model.ModelLoaderFactory;\nimport com.bumptech.glide.load.model.MultiModelLoaderFactory;\n\nimport java.nio.ByteBuffer;\n\npublic class VaultEntryIconLoader implements ModelLoader<VaultEntryIcon, ByteBuffer> {\n    public static final Option<IconType> ICON_TYPE = Option.memory(\"ICON_TYPE\", IconType.INVALID);\n\n    @Override\n    public LoadData<ByteBuffer> buildLoadData(@NonNull VaultEntryIcon icon, int width, int height, @NonNull Options options) {\n        return new LoadData<>(new VaultEntryIconKey(icon), new Fetcher(icon));\n    }\n\n    @Override\n    public boolean handles(@NonNull VaultEntryIcon icon) {\n        return true;\n    }\n\n    public static class Fetcher implements DataFetcher<ByteBuffer> {\n        private final VaultEntryIcon _icon;\n\n        private Fetcher(VaultEntryIcon icon) {\n            _icon = icon;\n        }\n\n        @Override\n        public void loadData(@NonNull Priority priority, @NonNull DataCallback<? super ByteBuffer> callback) {\n            byte[] bytes = _icon.getBytes();\n            ByteBuffer buf = ByteBuffer.wrap(bytes);\n            callback.onDataReady(buf);\n        }\n\n        @Override\n        public void cleanup() {\n\n        }\n\n        @Override\n        public void cancel() {\n\n        }\n\n        @NonNull\n        @Override\n        public Class<ByteBuffer> getDataClass() {\n            return ByteBuffer.class;\n        }\n\n        @NonNull\n        @Override\n        public DataSource getDataSource() {\n            return DataSource.MEMORY_CACHE;\n        }\n    }\n\n    public static class Factory implements ModelLoaderFactory<VaultEntryIcon, ByteBuffer> {\n        @NonNull\n        @Override\n        public ModelLoader<VaultEntryIcon, ByteBuffer> build(@NonNull MultiModelLoaderFactory unused) {\n            return new VaultEntryIconLoader();\n        }\n\n        @Override\n        public void teardown() {\n\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/ui/intro/IntroActivityInterface.java",
    "content": "package com.beemdevelopment.aegis.ui.intro;\n\nimport android.os.Bundle;\n\nimport androidx.annotation.NonNull;\n\npublic interface IntroActivityInterface {\n    /**\n     * Navigate to the next slide.\n     */\n    void goToNextSlide();\n\n    /**\n     * Navigate to the previous slide.\n     */\n    void goToPreviousSlide();\n\n    /**\n     * Navigate to the slide of the given type.\n     */\n    void skipToSlide(Class<? extends SlideFragment> type);\n\n    /**\n     * Retrieves the state of the intro. The state is shared among all slides and is\n     * properly restored after a configuration change. This method may only be called\n     * after onAttach has been called.\n     */\n    @NonNull\n    Bundle getState();\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/ui/intro/IntroBaseActivity.java",
    "content": "package com.beemdevelopment.aegis.ui.intro;\n\nimport android.os.Bundle;\nimport android.view.View;\n\nimport androidx.activity.OnBackPressedCallback;\nimport androidx.annotation.NonNull;\nimport androidx.annotation.Nullable;\nimport androidx.fragment.app.Fragment;\nimport androidx.fragment.app.FragmentManager;\nimport androidx.recyclerview.widget.RecyclerView;\nimport androidx.viewpager2.adapter.FragmentStateAdapter;\nimport androidx.viewpager2.widget.ViewPager2;\n\nimport com.beemdevelopment.aegis.R;\nimport com.beemdevelopment.aegis.helpers.AnimationsHelper;\nimport com.beemdevelopment.aegis.ui.AegisActivity;\nimport com.google.android.material.button.MaterialButton;\n\nimport java.lang.ref.WeakReference;\nimport java.util.ArrayList;\nimport java.util.List;\n\npublic abstract class IntroBaseActivity extends AegisActivity implements IntroActivityInterface {\n    private Bundle _state;\n    private ViewPager2 _pager;\n    private ScreenSlidePagerAdapter _adapter;\n    private List<Class<? extends SlideFragment>> _slides;\n    private WeakReference<SlideFragment> _currentSlide;\n\n    private MaterialButton _btnPrevious;\n    private MaterialButton _btnNext;\n    private SlideIndicator _slideIndicator;\n\n    @Override\n    protected void onCreate(Bundle savedInstanceState) {\n        super.onCreate(savedInstanceState);\n        setContentView(R.layout.activity_intro);\n        getOnBackPressedDispatcher().addCallback(this, new BackPressHandler());\n\n        _slides = new ArrayList<>();\n        _state = new Bundle();\n\n        _btnPrevious = findViewById(R.id.btnPrevious);\n        _btnPrevious.setOnClickListener(v -> goToPreviousSlide());\n        _btnNext = findViewById(R.id.btnNext);\n        _btnNext.setOnClickListener(v -> goToNextSlide());\n        _slideIndicator = findViewById(R.id.slideIndicator);\n\n        _adapter = new ScreenSlidePagerAdapter(getSupportFragmentManager());\n        _pager = findViewById(R.id.pager);\n        _pager.setAdapter(_adapter);\n        _pager.setUserInputEnabled(false);\n        _pager.registerOnPageChangeCallback(new SlideSkipBlocker());\n\n        View pagerChild = _pager.getChildAt(0);\n        if (pagerChild instanceof RecyclerView) {\n            pagerChild.setOverScrollMode(View.OVER_SCROLL_NEVER);\n        }\n    }\n\n    @Override\n    public void onRestoreInstanceState(@NonNull Bundle savedInstanceState) {\n        super.onRestoreInstanceState(savedInstanceState);\n        _state = savedInstanceState.getBundle(\"introState\");\n        updatePagerControls();\n    }\n\n    @Override\n    public void onSaveInstanceState(@NonNull Bundle outState) {\n        super.onSaveInstanceState(outState);\n        outState.putBundle(\"introState\", _state);\n    }\n\n    void setCurrentSlide(SlideFragment slide) {\n        _currentSlide = new WeakReference<>(slide);\n    }\n\n    @Override\n    public void goToNextSlide() {\n        int pos = _pager.getCurrentItem();\n        if (pos != _slides.size() - 1) {\n            SlideFragment currentSlide = _currentSlide.get();\n            if (currentSlide.isFinished()) {\n                currentSlide.onSaveIntroState(_state);\n                setPagerPosition(pos, 1);\n            } else {\n                currentSlide.onNotFinishedError();\n            }\n        } else {\n            onDonePressed();\n        }\n    }\n\n    @Override\n    public void goToPreviousSlide() {\n        int pos = _pager.getCurrentItem();\n        if (pos != 0 && pos != _slides.size() - 1) {\n            setPagerPosition(pos, -1);\n        }\n    }\n\n    @Override\n    public void skipToSlide(Class<? extends SlideFragment> type) {\n        int i = _slides.indexOf(type);\n        if (i == -1) {\n            throw new IllegalStateException(String.format(\"Cannot skip to slide of type %s because it is not in the slide list\", type.getName()));\n        }\n\n        setPagerPosition(i);\n    }\n\n    /**\n     * Called before a slide change is made. Overriding gives implementers the\n     * opportunity to block a slide change. onSaveIntroState is guaranteed to have been\n     * called on oldSlide before onBeforeSlideChanged is called.\n     * @param oldSlide the slide that is currently shown.\n     * @param newSlide the next slide that will be shown.\n     * @return whether to block the transition.\n     */\n    protected boolean onBeforeSlideChanged(@Nullable Class<? extends SlideFragment> oldSlide, @NonNull Class<? extends SlideFragment> newSlide) {\n        return false;\n    }\n\n    /**\n     * Called after a slide change was made.\n     * @param oldSlide the slide that was previously shown.\n     * @param newSlide the slide that is now shown.\n     */\n    protected void onAfterSlideChanged(@Nullable Class<? extends SlideFragment> oldSlide, @NonNull Class<? extends SlideFragment> newSlide) {\n\n    }\n\n    private void setPagerPosition(int pos) {\n        Class<? extends SlideFragment> oldSlide = _currentSlide.get().getClass();\n        Class<? extends SlideFragment> newSlide = _slides.get(pos);\n\n        if (!onBeforeSlideChanged(oldSlide, newSlide)) {\n            // We can't easily control the speed of the smooth scroll animation, but we\n            // can at least disable it if animations are disabled\n            boolean smoothScroll = !AnimationsHelper.Scale.TRANSITION.isZero(this);\n            _pager.setCurrentItem(pos, smoothScroll);\n        }\n        onAfterSlideChanged(oldSlide, newSlide);\n\n        updatePagerControls();\n    }\n\n    private void setPagerPosition(int pos, int delta) {\n        pos += delta;\n        setPagerPosition(pos);\n    }\n\n    private void updatePagerControls() {\n        int pos = _pager.getCurrentItem();\n        _btnPrevious.setVisibility(\n                pos != 0 && pos != _slides.size() - 1\n                        ? View.VISIBLE\n                        : View.INVISIBLE);\n        if (pos == _slides.size() - 1) {\n            _btnNext.setIconResource(R.drawable.ic_outline_check_24);\n        }\n        _slideIndicator.setSlideCount(_slides.size());\n        _slideIndicator.setCurrentSlide(pos);\n    }\n\n    @NonNull\n    public Bundle getState() {\n        return _state;\n    }\n\n    protected abstract void onDonePressed();\n\n    public void addSlide(Class<? extends SlideFragment> type) {\n        if (_slides.contains(type)) {\n            throw new IllegalStateException(String.format(\"Only one slide of type %s may be added to the intro\", type.getName()));\n        }\n\n        _slides.add(type);\n        _slideIndicator.setSlideCount(_slides.size());\n\n        // send 'slide changed' events for the first slide\n        if (_slides.size() == 1) {\n            Class<? extends SlideFragment> slide = _slides.get(0);\n            onBeforeSlideChanged(null, slide);\n            onAfterSlideChanged(null, slide);\n        }\n    }\n\n    private class BackPressHandler extends OnBackPressedCallback {\n        public BackPressHandler() {\n            super(true);\n        }\n\n        @Override\n        public void handleOnBackPressed() {\n            goToPreviousSlide();\n        }\n    }\n\n    private class ScreenSlidePagerAdapter extends FragmentStateAdapter {\n        public ScreenSlidePagerAdapter(FragmentManager fm) {\n            super(fm, getLifecycle());\n        }\n\n        @NonNull\n        @Override\n        public Fragment createFragment(int position) {\n            Class<? extends SlideFragment> type = _slides.get(position);\n\n            try {\n                return type.newInstance();\n            } catch (IllegalAccessException | InstantiationException e) {\n                throw new RuntimeException(e);\n            }\n        }\n\n        @Override\n        public int getItemCount() {\n            return _slides.size();\n        }\n    }\n\n    private class SlideSkipBlocker extends ViewPager2.OnPageChangeCallback {\n        @Override\n        public void onPageScrollStateChanged(@ViewPager2.ScrollState int state) {\n            // disable the buttons while scrolling to prevent disallowed skipping of slides\n            boolean enabled = state == ViewPager2.SCROLL_STATE_IDLE;\n            _btnNext.setEnabled(enabled);\n            _btnPrevious.setEnabled(enabled);\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/ui/intro/SlideFragment.java",
    "content": "package com.beemdevelopment.aegis.ui.intro;\n\nimport android.content.Context;\nimport android.os.Bundle;\n\nimport androidx.annotation.CallSuper;\nimport androidx.annotation.NonNull;\nimport androidx.fragment.app.Fragment;\n\nimport java.lang.ref.WeakReference;\n\npublic abstract class SlideFragment extends Fragment implements IntroActivityInterface {\n    private WeakReference<IntroBaseActivity> _parent;\n\n    @CallSuper\n    @Override\n    public void onAttach(@NonNull Context context) {\n        super.onAttach(context);\n\n        if (!(context instanceof IntroBaseActivity)) {\n            throw new ClassCastException(\"Parent context is expected to be of type IntroBaseActivity\");\n        }\n\n        _parent = new WeakReference<>((IntroBaseActivity) context);\n    }\n\n    @CallSuper\n    @Override\n    public void onResume() {\n        super.onResume();\n        getParent().setCurrentSlide(this);\n    }\n\n    /**\n     * Reports whether or not all required user actions are finished on this slide,\n     * indicating that we're ready to move to the next slide.\n     */\n    public boolean isFinished() {\n        return true;\n    }\n\n    /**\n     * Called if the user tried to move to the next slide, but isFinished returned false.\n     */\n    protected void onNotFinishedError() {\n\n    }\n\n    /**\n     * Called when the SlideFragment is expected to write its state to the given shared\n     * introState. This is only called if the user navigates to the next slide, not\n     * when a previous slide is next to be shown.\n     */\n    protected void onSaveIntroState(@NonNull Bundle introState) {\n\n    }\n\n    @Override\n    public void goToNextSlide() {\n        getParent().goToNextSlide();\n    }\n\n    @Override\n    public void goToPreviousSlide() {\n        getParent().goToPreviousSlide();\n    }\n\n    @Override\n    public void skipToSlide(Class<? extends SlideFragment> type) {\n        getParent().skipToSlide(type);\n    }\n\n    @NonNull\n    @Override\n    public Bundle getState() {\n        return getParent().getState();\n    }\n\n    @NonNull\n    private IntroBaseActivity getParent() {\n        if (_parent == null || _parent.get() == null) {\n            throw new IllegalStateException(\"This method must not be called before onAttach()\");\n        }\n\n        return _parent.get();\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/ui/intro/SlideIndicator.java",
    "content": "package com.beemdevelopment.aegis.ui.intro;\n\nimport android.content.Context;\nimport android.content.res.TypedArray;\nimport android.graphics.Canvas;\nimport android.graphics.Color;\nimport android.graphics.Paint;\nimport android.util.AttributeSet;\nimport android.view.View;\n\nimport androidx.annotation.Nullable;\n\nimport com.beemdevelopment.aegis.R;\n\npublic class SlideIndicator extends View {\n    private Paint _paint;\n    private int _slideCount;\n    private int _slideIndex;\n\n    private float _dotRadius;\n    private float _dotSeparator;\n    private int _dotColor;\n    private int _dotColorSelected;\n\n    public SlideIndicator(Context context, @Nullable AttributeSet attrs) {\n        super(context, attrs);\n        _paint = new Paint();\n        _paint.setAntiAlias(true);\n        _paint.setStyle(Paint.Style.FILL);\n\n        TypedArray array = null;\n        try {\n            array = context.obtainStyledAttributes(attrs, R.styleable.SlideIndicator);\n            _dotRadius = array.getDimension(R.styleable.SlideIndicator_dot_radius, 5f);\n            _dotSeparator = array.getDimension(R.styleable.SlideIndicator_dot_separation, 5f);\n            _dotColor = array.getColor(R.styleable.SlideIndicator_dot_color, Color.GRAY);\n            _dotColorSelected = array.getColor(R.styleable.SlideIndicator_dot_color_selected, Color.BLACK);\n        } finally {\n            if (array != null) {\n                array.recycle();\n            }\n        }\n    }\n\n    public void setSlideCount(int slideCount) {\n        if (slideCount < 0) {\n            throw new IllegalArgumentException(\"Slide count cannot be negative\");\n        }\n\n        _slideCount = slideCount;\n        invalidate();\n    }\n\n    public void setCurrentSlide(int index) {\n        if (index < 0) {\n            throw new IllegalArgumentException(\"Slide index cannot be negative\");\n        }\n\n        if (index + 1 > _slideCount) {\n            throw new IllegalStateException(String.format(\"Slide index out of range, slides: %d, index: %d\", _slideCount, index));\n        }\n\n        _slideIndex = index;\n        invalidate();\n    }\n\n    @Override\n    protected void onDraw(Canvas canvas) {\n        if (_slideCount <= 0) {\n            return;\n        }\n\n        float density = getResources().getDisplayMetrics().density;\n        float dotDp = density * _dotRadius * 2;\n        float spaceDp = density * _dotSeparator;\n\n        float offset;\n        if (_slideCount % 2 == 0) {\n            offset = (spaceDp / 2) + (dotDp / 2) + dotDp * (_slideCount / 2f - 1) + spaceDp * (_slideCount / 2f - 1);\n        } else {\n            int spaces = _slideCount > 1 ? _slideCount - 2 : 0;\n            offset = (_slideCount - 1) * (dotDp / 2) + spaces * spaceDp;\n        }\n\n        canvas.translate((getWidth() / 2f) - offset,getHeight() / 2f);\n\n        for (int i = 0; i < _slideCount; i++) {\n            int slideIndex = isRtl() ? (_slideCount - 1) - _slideIndex : _slideIndex;\n            _paint.setColor(i == slideIndex ? _dotColorSelected : _dotColor);\n            canvas.drawCircle(0,0, dotDp / 2, _paint);\n            canvas.translate(dotDp + spaceDp,0);\n        }\n    }\n\n    private boolean isRtl() {\n        return getResources().getConfiguration().getLayoutDirection() == View.LAYOUT_DIRECTION_RTL;\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/ui/models/AssignIconEntry.java",
    "content": "package com.beemdevelopment.aegis.ui.models;\n\nimport com.beemdevelopment.aegis.icons.IconPack;\nimport com.beemdevelopment.aegis.vault.VaultEntry;\n\nimport java.io.Serializable;\n\npublic class AssignIconEntry implements Serializable {\n    private final VaultEntry _entry;\n\n    private IconPack.Icon _newIcon;\n\n    private transient AssignIconEntry.Listener _listener;\n\n    public void setOnResetListener(AssignIconEntry.Listener listener) {\n        _listener = listener;\n    }\n\n    public AssignIconEntry(VaultEntry entry) {\n        _entry = entry;\n    }\n\n    public VaultEntry getEntry() {\n        return _entry;\n    }\n\n    public IconPack.Icon getNewIcon() { return _newIcon; }\n\n    public void setNewIcon(IconPack.Icon icon) {\n        _newIcon = icon;\n\n        if (_listener != null) {\n            _listener.onNewIconChanged();\n        }\n    }\n\n    public interface Listener {\n        void onNewIconChanged();\n    }\n}"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/ui/models/AuditLogEntryModel.java",
    "content": "package com.beemdevelopment.aegis.ui.models;\n\nimport com.beemdevelopment.aegis.database.AuditLogEntry;\nimport com.beemdevelopment.aegis.vault.VaultEntry;\n\nimport javax.annotation.Nullable;\n\npublic class AuditLogEntryModel {\n    private AuditLogEntry _auditLogEntry;\n    private VaultEntry _referencedVaultEntry;\n\n    public AuditLogEntryModel(AuditLogEntry auditLogEntry, @Nullable VaultEntry referencedVaultEntry) {\n        _auditLogEntry = auditLogEntry;\n        _referencedVaultEntry = referencedVaultEntry;\n    }\n\n    public AuditLogEntry getAuditLogEntry() {\n        return _auditLogEntry;\n    }\n\n    public VaultEntry getReferencedVaultEntry() {\n        return _referencedVaultEntry;\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/ui/models/ErrorCardInfo.java",
    "content": "package com.beemdevelopment.aegis.ui.models;\n\nimport android.view.View;\n\nimport com.google.common.hash.HashCode;\n\nimport java.util.Objects;\n\npublic class ErrorCardInfo {\n    private final String _message;\n    private final View.OnClickListener _listener;\n\n    public ErrorCardInfo(String message, View.OnClickListener listener) {\n        _message = message;\n        _listener = listener;\n    }\n\n    public String getMessage() {\n        return _message;\n    }\n\n    public View.OnClickListener getListener() {\n        return _listener;\n    }\n\n    @Override\n    public int hashCode() {\n        return HashCode.fromString(_message).asInt();\n    }\n\n    @Override\n    public boolean equals(Object o) {\n        if (o == this) {\n            return true;\n        }\n        if (!(o instanceof ErrorCardInfo)) {\n            return false;\n        }\n\n        // This equality check purposefully ignores the onclick listener\n        ErrorCardInfo info = (ErrorCardInfo) o;\n        return Objects.equals(getMessage(), info.getMessage());\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/ui/models/ImportEntry.java",
    "content": "package com.beemdevelopment.aegis.ui.models;\n\nimport com.beemdevelopment.aegis.vault.VaultEntry;\n\nimport java.io.Serializable;\n\npublic class ImportEntry implements Serializable {\n    private final VaultEntry _entry;\n\n    private transient Listener _listener;\n    private boolean _isChecked = true;\n\n    public ImportEntry(VaultEntry entry) {\n        _entry = entry;\n    }\n\n    public VaultEntry getEntry() {\n        return _entry;\n    }\n\n    public void setOnCheckedChangedListener(Listener listener) {\n        _listener = listener;\n    }\n\n    public boolean isChecked() {\n        return _isChecked;\n    }\n\n    public void setIsChecked(boolean isChecked) {\n        _isChecked = isChecked;\n\n        if (_listener != null) {\n            _listener.onCheckedChanged(_isChecked);\n        }\n    }\n\n    public interface Listener {\n        void onCheckedChanged(boolean value);\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/ui/models/VaultGroupModel.java",
    "content": "package com.beemdevelopment.aegis.ui.models;\n\nimport android.content.Context;\n\nimport androidx.annotation.NonNull;\nimport androidx.annotation.Nullable;\n\nimport com.beemdevelopment.aegis.GroupPlaceholderType;\nimport com.beemdevelopment.aegis.vault.VaultGroup;\n\nimport java.io.Serializable;\nimport java.util.UUID;\n\npublic class VaultGroupModel implements Serializable {\n    private final VaultGroup _group;\n    private final GroupPlaceholderType _placeholderType;\n    private final String _placeholderText;\n\n    public VaultGroupModel(VaultGroup group) {\n        _group = group;\n        _placeholderText = null;\n        _placeholderType = null;\n    }\n\n    public VaultGroupModel(Context context, GroupPlaceholderType placeholderType) {\n        _group = null;\n        _placeholderType = placeholderType;\n        _placeholderText = context.getString(placeholderType.getStringRes());\n    }\n\n    public VaultGroup getGroup() {\n        return _group;\n    }\n\n    public String getName() {\n        return _group != null ? _group.getName() : _placeholderText;\n    }\n\n    public GroupPlaceholderType getPlaceholderType() {\n        return _placeholderType;\n    }\n\n    public boolean isPlaceholder() {\n        return _placeholderType != null;\n    }\n\n    @Nullable\n    public UUID getUUID() {\n        return _group == null ? null : _group.getUUID();\n    }\n\n    @NonNull\n    @Override\n    public String toString() {\n        return getName();\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/ui/preferences/SwitchPreference.java",
    "content": "package com.beemdevelopment.aegis.ui.preferences;\n\nimport android.content.Context;\nimport android.util.AttributeSet;\n\nimport androidx.preference.Preference;\nimport androidx.preference.SwitchPreferenceCompat;\n\npublic class SwitchPreference extends SwitchPreferenceCompat {\n    private Preference.OnPreferenceChangeListener _listener;\n\n    public SwitchPreference(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {\n        super(context, attrs, defStyleAttr, defStyleRes);\n    }\n\n    public SwitchPreference(Context context, AttributeSet attrs, int defStyleAttr) {\n        super(context, attrs, defStyleAttr);\n    }\n\n    public SwitchPreference(Context context, AttributeSet attrs) {\n        super(context, attrs);\n    }\n\n    public SwitchPreference(Context context) {\n        super(context);\n    }\n\n    @Override\n    public void setOnPreferenceChangeListener(OnPreferenceChangeListener listener) {\n        super.setOnPreferenceChangeListener(listener);\n        _listener = listener;\n    }\n\n    @Override\n    public void setChecked(boolean checked) {\n        setChecked(true, false);\n    }\n\n    public void setChecked(boolean checked, boolean silent) {\n        if (silent) {\n            super.setOnPreferenceChangeListener(null);\n        }\n        super.setChecked(checked);\n        if (silent) {\n            super.setOnPreferenceChangeListener(_listener);\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/ui/slides/DoneSlide.java",
    "content": "package com.beemdevelopment.aegis.ui.slides;\n\nimport android.os.Bundle;\nimport android.view.LayoutInflater;\nimport android.view.View;\nimport android.view.ViewGroup;\n\nimport com.beemdevelopment.aegis.R;\nimport com.beemdevelopment.aegis.ui.intro.SlideFragment;\n\npublic class DoneSlide extends SlideFragment {\n    @Override\n    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {\n        return inflater.inflate(R.layout.fragment_done_slide, container, false);\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/ui/slides/SecurityPickerSlide.java",
    "content": "package com.beemdevelopment.aegis.ui.slides;\n\nimport android.os.Bundle;\nimport android.view.LayoutInflater;\nimport android.view.View;\nimport android.view.ViewGroup;\nimport android.widget.RadioButton;\nimport android.widget.RadioGroup;\nimport android.widget.TextView;\nimport android.widget.Toast;\n\nimport androidx.annotation.NonNull;\n\nimport com.beemdevelopment.aegis.R;\nimport com.beemdevelopment.aegis.helpers.BiometricsHelper;\nimport com.beemdevelopment.aegis.ui.intro.SlideFragment;\n\npublic class SecurityPickerSlide extends SlideFragment {\n    public static final int CRYPT_TYPE_INVALID = 0;\n    public static final int CRYPT_TYPE_NONE = 1;\n    public static final int CRYPT_TYPE_PASS = 2;\n    public static final int CRYPT_TYPE_BIOMETRIC = 3;\n\n    private RadioGroup _buttonGroup;\n    private RadioButton _bioButton;\n    private TextView _bioText;\n\n    @Override\n    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {\n        View view = inflater.inflate(R.layout.fragment_security_picker_slide, container, false);\n        _buttonGroup = view.findViewById(R.id.rg_authenticationMethod);\n        _bioButton = view.findViewById(R.id.rb_biometrics);\n        _bioText = view.findViewById(R.id.text_rb_biometrics);\n        updateBiometricsOption(true);\n        return view;\n    }\n\n    @Override\n    public void onResume() {\n        super.onResume();\n        updateBiometricsOption(false);\n    }\n\n    /**\n     * Updates the status of the biometrics option. Auto-selects the biometrics option\n     * if the API version is new enough, permission is granted and a scanner is found.\n     */\n    private void updateBiometricsOption(boolean autoSelect) {\n        boolean canUseBio = BiometricsHelper.isAvailable(requireContext());\n        _bioButton.setEnabled(canUseBio);\n        _bioText.setEnabled(canUseBio);\n\n        if (!canUseBio && _buttonGroup.getCheckedRadioButtonId() == R.id.rb_biometrics) {\n            _buttonGroup.check(R.id.rb_password);\n        }\n\n        if (canUseBio && autoSelect) {\n            _buttonGroup.check(R.id.rb_biometrics);\n        }\n    }\n\n    @Override\n    public boolean isFinished() {\n        return _buttonGroup.getCheckedRadioButtonId() != -1;\n    }\n\n    @Override\n    public void onNotFinishedError() {\n         Toast.makeText(requireContext(), R.string.snackbar_authentication_method, Toast.LENGTH_SHORT).show();\n    }\n\n    @Override\n    public void onSaveIntroState(@NonNull Bundle introState) {\n        int buttonId = _buttonGroup.getCheckedRadioButtonId();\n\n        int type;\n        if (buttonId == R.id.rb_none) {\n            type = CRYPT_TYPE_NONE;\n        } else if (buttonId == R.id.rb_password) {\n            type = CRYPT_TYPE_PASS;\n        } else if (buttonId == R.id.rb_biometrics) {\n            type = CRYPT_TYPE_BIOMETRIC;\n        } else {\n            throw new RuntimeException(String.format(\"Unsupported security type: %d\", buttonId));\n        }\n\n        introState.putInt(\"cryptType\", type);\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/ui/slides/SecuritySetupSlide.java",
    "content": "package com.beemdevelopment.aegis.ui.slides;\n\nimport static com.beemdevelopment.aegis.ui.slides.SecurityPickerSlide.CRYPT_TYPE_BIOMETRIC;\nimport static com.beemdevelopment.aegis.ui.slides.SecurityPickerSlide.CRYPT_TYPE_INVALID;\nimport static com.beemdevelopment.aegis.ui.slides.SecurityPickerSlide.CRYPT_TYPE_NONE;\nimport static com.beemdevelopment.aegis.ui.slides.SecurityPickerSlide.CRYPT_TYPE_PASS;\n\nimport android.os.Bundle;\nimport android.text.Editable;\nimport android.text.method.PasswordTransformationMethod;\nimport android.view.LayoutInflater;\nimport android.view.View;\nimport android.view.ViewGroup;\nimport android.widget.CheckBox;\nimport android.widget.EditText;\nimport android.widget.ProgressBar;\nimport android.widget.TextView;\nimport android.widget.Toast;\n\nimport androidx.annotation.NonNull;\nimport androidx.biometric.BiometricPrompt;\n\nimport com.beemdevelopment.aegis.R;\nimport com.beemdevelopment.aegis.helpers.BiometricSlotInitializer;\nimport com.beemdevelopment.aegis.helpers.BiometricsHelper;\nimport com.beemdevelopment.aegis.helpers.EditTextHelper;\nimport com.beemdevelopment.aegis.helpers.PasswordStrengthHelper;\nimport com.beemdevelopment.aegis.helpers.SimpleTextWatcher;\nimport com.beemdevelopment.aegis.ui.dialogs.Dialogs;\nimport com.beemdevelopment.aegis.ui.intro.SlideFragment;\nimport com.beemdevelopment.aegis.ui.tasks.KeyDerivationTask;\nimport com.beemdevelopment.aegis.vault.VaultFileCredentials;\nimport com.beemdevelopment.aegis.vault.slots.BiometricSlot;\nimport com.beemdevelopment.aegis.vault.slots.PasswordSlot;\nimport com.beemdevelopment.aegis.vault.slots.Slot;\nimport com.beemdevelopment.aegis.vault.slots.SlotException;\nimport com.google.android.material.textfield.TextInputLayout;\n\nimport javax.crypto.Cipher;\nimport javax.crypto.SecretKey;\n\npublic class SecuritySetupSlide extends SlideFragment {\n    private EditText _textPassword;\n    private EditText _textPasswordConfirm;\n    private CheckBox _checkPasswordVisibility;\n    private ProgressBar _barPasswordStrength;\n    private TextView _textPasswordStrength;\n    private TextInputLayout _textPasswordWrapper;\n\n    private int _cryptType;\n    private VaultFileCredentials _creds;\n\n    @Override\n    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {\n        View view = inflater.inflate(R.layout.fragment_security_setup_slide, container, false);\n        _textPassword = view.findViewById(R.id.text_password);\n        _textPasswordConfirm = view.findViewById(R.id.text_password_confirm);\n        _checkPasswordVisibility = view.findViewById(R.id.check_toggle_visibility);\n        _barPasswordStrength = view.findViewById(R.id.progressBar);\n        _textPasswordStrength = view.findViewById(R.id.text_password_strength);\n        _textPasswordWrapper = view.findViewById(R.id.text_password_wrapper);\n\n        _checkPasswordVisibility.setOnCheckedChangeListener((buttonView, isChecked) -> {\n            if (isChecked) {\n                _textPassword.setTransformationMethod(null);\n                _textPasswordConfirm.setTransformationMethod(null);\n                _textPassword.clearFocus();\n                _textPasswordConfirm.clearFocus();\n            } else {\n                _textPassword.setTransformationMethod(new PasswordTransformationMethod());\n                _textPasswordConfirm.setTransformationMethod(new PasswordTransformationMethod());\n            }\n        });\n\n        _textPassword.addTextChangedListener(new SimpleTextWatcher(new SimpleTextWatcher.Listener() {\n            private final PasswordStrengthHelper passStrength = new PasswordStrengthHelper(\n                    _textPassword, _barPasswordStrength, _textPasswordStrength, _textPasswordWrapper);\n\n            @Override\n            public void afterTextChanged(Editable s) {\n                passStrength.measure(requireContext());\n            }\n        }));\n\n        return view;\n    }\n\n    @Override\n    public void onResume() {\n        super.onResume();\n\n        _cryptType = getState().getInt(\"cryptType\", CRYPT_TYPE_INVALID);\n        if (_cryptType == CRYPT_TYPE_INVALID || _cryptType == CRYPT_TYPE_NONE) {\n            throw new RuntimeException(String.format(\"State of SecuritySetupSlide not properly propagated, cryptType: %d\", _cryptType));\n        }\n\n        _creds = new VaultFileCredentials();\n    }\n\n    private void showBiometricPrompt() {\n        BiometricSlotInitializer initializer = new BiometricSlotInitializer(this, new BiometricsListener());\n        BiometricPrompt.PromptInfo info = new BiometricPrompt.PromptInfo.Builder()\n                .setTitle(getString(R.string.set_up_biometric))\n                .setNegativeButtonText(getString(android.R.string.cancel))\n                .build();\n        initializer.authenticate(info);\n    }\n\n    private void deriveKey() {\n        PasswordSlot slot = new PasswordSlot();\n        KeyDerivationTask.Params params = new KeyDerivationTask.Params(slot, EditTextHelper.getEditTextChars(_textPassword));\n        KeyDerivationTask task = new KeyDerivationTask(requireContext(), new PasswordDerivationListener());\n        task.execute(getLifecycle(), params);\n    }\n\n    @Override\n    public boolean isFinished() {\n        switch (_cryptType) {\n            case CRYPT_TYPE_NONE:\n                return true;\n            case CRYPT_TYPE_BIOMETRIC:\n                if (!_creds.getSlots().has(BiometricSlot.class)) {\n                    return false;\n                }\n                // intentional fallthrough\n            case CRYPT_TYPE_PASS:\n                if (EditTextHelper.areEditTextsEqual(_textPassword, _textPasswordConfirm)) {\n                    return _creds.getSlots().has(PasswordSlot.class);\n                }\n\n                return false;\n            default:\n                return false;\n        }\n    }\n\n    @Override\n    public void onNotFinishedError() {\n        if (!EditTextHelper.areEditTextsEqual(_textPassword, _textPasswordConfirm)) {\n            Toast.makeText(requireContext(), R.string.password_equality_error, Toast.LENGTH_SHORT).show();\n        } else if (_cryptType != SecurityPickerSlide.CRYPT_TYPE_BIOMETRIC) {\n            deriveKey();\n        } else if (!_creds.getSlots().has(BiometricSlot.class)) {\n            showBiometricPrompt();\n        }\n    }\n\n    @Override\n    public void onSaveIntroState(@NonNull Bundle introState) {\n        introState.putSerializable(\"creds\", _creds);\n    }\n\n    private class PasswordDerivationListener implements KeyDerivationTask.Callback {\n        @Override\n        public void onTaskFinished(PasswordSlot slot, SecretKey key) {\n            try {\n                Cipher cipher = Slot.createEncryptCipher(key);\n                slot.setKey(_creds.getKey(), cipher);\n                _creds.getSlots().add(slot);\n            } catch (SlotException e) {\n                e.printStackTrace();\n                Dialogs.showErrorDialog(requireContext(), R.string.enable_encryption_error, e);\n                return;\n            }\n\n            goToNextSlide();\n        }\n    }\n\n    private class BiometricsListener implements BiometricSlotInitializer.Listener {\n        @Override\n        public void onInitializeSlot(BiometricSlot slot, Cipher cipher) {\n            try {\n                slot.setKey(_creds.getKey(), cipher);\n                _creds.getSlots().add(slot);\n            } catch (SlotException e) {\n                e.printStackTrace();\n                onSlotInitializationFailed(0, e.toString());\n                return;\n            }\n\n            deriveKey();\n        }\n\n        @Override\n        public void onSlotInitializationFailed(int errorCode, @NonNull CharSequence errString) {\n            if (!BiometricsHelper.isCanceled(errorCode)) {\n                Dialogs.showErrorDialog(requireContext(), R.string.encryption_enable_biometrics_error, errString);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/ui/slides/WelcomeSlide.java",
    "content": "package com.beemdevelopment.aegis.ui.slides;\n\nimport android.content.Intent;\nimport android.net.Uri;\nimport android.os.Bundle;\nimport android.view.LayoutInflater;\nimport android.view.View;\nimport android.view.ViewGroup;\n\nimport androidx.activity.result.ActivityResultLauncher;\nimport androidx.activity.result.contract.ActivityResultContracts.StartActivityForResult;\nimport androidx.annotation.NonNull;\n\nimport com.beemdevelopment.aegis.R;\nimport com.beemdevelopment.aegis.importers.AegisImporter;\nimport com.beemdevelopment.aegis.importers.DatabaseImporter;\nimport com.beemdevelopment.aegis.importers.DatabaseImporterException;\nimport com.beemdevelopment.aegis.ui.dialogs.Dialogs;\nimport com.beemdevelopment.aegis.ui.intro.SlideFragment;\nimport com.beemdevelopment.aegis.ui.tasks.ImportFileTask;\nimport com.beemdevelopment.aegis.vault.VaultFileCredentials;\nimport com.beemdevelopment.aegis.vault.VaultRepository;\n\nimport java.io.File;\nimport java.io.FileInputStream;\nimport java.io.IOException;\n\npublic class WelcomeSlide extends SlideFragment {\n    private boolean _imported;\n    private VaultFileCredentials _creds;\n\n    private final ActivityResultLauncher<Intent> vaultImportResultLauncher =\n            registerForActivityResult(new StartActivityForResult(), activityResult -> {\n                Intent data = activityResult.getData();\n                if (data != null && data.getData() != null) {\n                    startImportVault(data.getData());\n                }\n            });\n\n    @Override\n    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {\n        View view = inflater.inflate(R.layout.fragment_welcome_slide, container, false);\n        view.findViewById(R.id.btnImport).setOnClickListener(v -> {\n            Intent intent = new Intent(Intent.ACTION_GET_CONTENT);\n            intent.setType(\"*/*\");\n            vaultImportResultLauncher.launch(intent);\n        });\n        return view;\n    }\n\n    @Override\n    public void onSaveIntroState(@NonNull Bundle introState) {\n        introState.putBoolean(\"imported\", _imported);\n        introState.putSerializable(\"creds\", _creds);\n    }\n\n    private void startImportVault(Uri uri) {\n        ImportFileTask.Params params = new ImportFileTask.Params(uri, \"intro-import\", null);\n        ImportFileTask task = new ImportFileTask(requireContext(), result -> {\n            if (result.getError() != null) {\n                Dialogs.showErrorDialog(requireContext(), R.string.reading_file_error, result.getError());\n                return;\n            }\n\n            try (FileInputStream inStream = new FileInputStream(result.getFile())) {\n                AegisImporter importer = new AegisImporter(requireContext());\n                DatabaseImporter.State state = importer.read(inStream, false);\n                if (state.isEncrypted()) {\n                    state.decrypt(requireContext(), new DatabaseImporter.DecryptListener() {\n                        @Override\n                        protected void onStateDecrypted(DatabaseImporter.State state) {\n                            _creds = ((AegisImporter.DecryptedState) state).getCredentials();\n                            importVault(result.getFile());\n                        }\n\n                        @Override\n                        protected void onError(Exception e) {\n                            e.printStackTrace();\n                            Dialogs.showErrorDialog(requireContext(), R.string.decryption_error, e);\n                        }\n\n                        @Override\n                        protected void onCanceled() {\n\n                        }\n                    });\n                } else {\n                    importVault(result.getFile());\n                }\n            } catch (DatabaseImporterException | IOException e) {\n                e.printStackTrace();\n                Dialogs.showErrorDialog(requireContext(), R.string.intro_import_error_title, e);\n            }\n        });\n        task.execute(getLifecycle(), params);\n    }\n\n    private void importVault(File file) {\n        try (FileInputStream inStream = new FileInputStream(file)) {\n            VaultRepository.writeToFile(requireContext(), inStream);\n        } catch (IOException e) {\n            e.printStackTrace();\n            Dialogs.showErrorDialog(requireContext(), R.string.intro_import_error_title, e);\n            return;\n        }\n\n        _imported = true;\n        goToNextSlide();\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/ui/tasks/Argon2Task.java",
    "content": "package com.beemdevelopment.aegis.ui.tasks;\n\nimport android.content.Context;\n\nimport com.beemdevelopment.aegis.R;\n\nimport org.bouncycastle.crypto.generators.Argon2BytesGenerator;\nimport org.bouncycastle.crypto.params.Argon2Parameters;\n\nimport javax.crypto.SecretKey;\nimport javax.crypto.spec.SecretKeySpec;\n\npublic class Argon2Task extends ProgressDialogTask<Argon2Task.Params, SecretKey> {\n    private final Callback _cb;\n\n    public Argon2Task(Context context, Callback cb) {\n        super(context, context.getString(R.string.unlocking_vault));\n        _cb = cb;\n    }\n\n    @Override\n    protected SecretKey doInBackground(Params... args) {\n        setPriority();\n\n        Params params = args[0];\n        return deriveKey(params);\n    }\n\n    public static SecretKey deriveKey(Params params) {\n        Argon2BytesGenerator gen = new Argon2BytesGenerator();\n        gen.init(params.getArgon2Params());\n\n        byte[] key = new byte[params.getKeySize()];\n        gen.generateBytes(params.getPassword(), key);\n        return new SecretKeySpec(key, 0, key.length, \"AES\");\n    }\n\n    @Override\n    protected void onPostExecute(SecretKey key) {\n        super.onPostExecute(key);\n        _cb.onTaskFinished(key);\n    }\n\n    public interface Callback {\n        void onTaskFinished(SecretKey key);\n    }\n\n    public static class Params {\n        private final char[] _password;\n        private final Argon2Parameters _argon2Params;\n        private final int _keySize;\n\n        public Params(char[] password, Argon2Parameters argon2Params, int keySize) {\n            _password = password;\n            _argon2Params = argon2Params;\n            _keySize = keySize;\n        }\n\n        public char[] getPassword() {\n            return _password;\n        }\n\n        public Argon2Parameters getArgon2Params() {\n            return _argon2Params;\n        }\n\n        public int getKeySize() {\n            return _keySize;\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/ui/tasks/ExportTask.java",
    "content": "package com.beemdevelopment.aegis.ui.tasks;\n\nimport android.content.Context;\nimport android.net.Uri;\n\nimport com.beemdevelopment.aegis.R;\nimport com.beemdevelopment.aegis.util.IOUtils;\n\nimport java.io.File;\nimport java.io.FileInputStream;\nimport java.io.IOException;\nimport java.io.InputStream;\nimport java.io.OutputStream;\n\npublic class ExportTask extends ProgressDialogTask<ExportTask.Params, Exception> {\n    private final Callback _cb;\n\n    public ExportTask(Context context, Callback cb) {\n        super(context, context.getString(R.string.exporting_vault));\n        _cb = cb;\n    }\n\n    @Override\n    protected Exception doInBackground(ExportTask.Params... args) {\n        setPriority();\n\n        ExportTask.Params params = args[0];\n        try (InputStream inStream = new FileInputStream(params.getFile());\n             OutputStream outStream = getDialog().getContext().getContentResolver().openOutputStream(params.getDestUri(), \"w\")) {\n            if (outStream == null) {\n                throw new IOException(\"openOutputStream returned null\");\n            }\n            IOUtils.copy(inStream, outStream);\n            return null;\n        } catch (IOException e) {\n            return e;\n        } finally {\n            boolean ignored = params.getFile().delete();\n        }\n    }\n\n    @Override\n    protected void onPostExecute(Exception e) {\n        super.onPostExecute(e);\n        _cb.onTaskFinished(e);\n    }\n\n    public static class Params {\n        private final File _file;\n        private final Uri _destUri;\n\n        public Params(File file, Uri destUri) {\n            _file = file;\n            _destUri = destUri;\n        }\n\n        public File getFile() {\n            return _file;\n        }\n\n        public Uri getDestUri() {\n            return _destUri;\n        }\n    }\n\n    public interface Callback {\n        void onTaskFinished(Exception e);\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/ui/tasks/IconOptimizationTask.java",
    "content": "package com.beemdevelopment.aegis.ui.tasks;\n\nimport android.content.Context;\nimport android.graphics.Bitmap;\nimport android.graphics.BitmapFactory;\n\nimport com.beemdevelopment.aegis.R;\nimport com.beemdevelopment.aegis.helpers.BitmapHelper;\nimport com.beemdevelopment.aegis.icons.IconType;\nimport com.beemdevelopment.aegis.vault.VaultEntryIcon;\n\nimport java.util.HashMap;\nimport java.util.Map;\nimport java.util.UUID;\n\npublic class IconOptimizationTask extends ProgressDialogTask<Map<UUID, VaultEntryIcon>, Map<UUID, VaultEntryIcon>> {\n    private final Callback _cb;\n\n    public IconOptimizationTask(Context context, Callback cb) {\n        super(context, context.getString(R.string.optimizing_icon));\n        _cb = cb;\n    }\n\n    @Override\n    protected Map<UUID, VaultEntryIcon> doInBackground(Map<UUID, VaultEntryIcon>... params) {\n        Map<UUID, VaultEntryIcon> res = new HashMap<>();\n        Context context = getDialog().getContext();\n\n        int i = 0;\n        Map<UUID, VaultEntryIcon> icons = params[0];\n        for (Map.Entry<UUID, VaultEntryIcon> entry : icons.entrySet()) {\n            if (icons.size() > 1) {\n                publishProgress(context.getString(R.string.optimizing_icon_multiple, i + 1, icons.size()));\n            }\n            i++;\n\n            VaultEntryIcon oldIcon = entry.getValue();\n            if (oldIcon == null || oldIcon.getType().equals(IconType.SVG)) {\n                continue;\n            }\n            if (BitmapHelper.isVaultEntryIconOptimized(oldIcon)) {\n                continue;\n            }\n\n            Bitmap bitmap = BitmapFactory.decodeByteArray(oldIcon.getBytes(), 0, oldIcon.getBytes().length);\n            VaultEntryIcon newIcon = BitmapHelper.toVaultEntryIcon(bitmap, oldIcon.getType());\n            bitmap.recycle();\n            res.put(entry.getKey(), newIcon);\n        }\n\n        return res;\n    }\n\n    @Override\n    protected void onPostExecute(Map<UUID, VaultEntryIcon> results) {\n        super.onPostExecute(results);\n        _cb.onTaskFinished(results);\n    }\n\n    public interface Callback {\n        void onTaskFinished(Map<UUID, VaultEntryIcon> results);\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/ui/tasks/ImportFileTask.java",
    "content": "package com.beemdevelopment.aegis.ui.tasks;\n\nimport android.content.Context;\nimport android.net.Uri;\n\nimport com.beemdevelopment.aegis.R;\nimport com.beemdevelopment.aegis.util.IOUtils;\n\nimport java.io.File;\nimport java.io.FileOutputStream;\nimport java.io.IOException;\nimport java.io.InputStream;\n\n/**\n * ImportFileTask reads an SAF file from a background thread and\n * writes it to a temporary file in the cache directory.\n */\npublic class ImportFileTask extends ProgressDialogTask<ImportFileTask.Params, ImportFileTask.Result> {\n    private final Callback _cb;\n\n    public ImportFileTask(Context context, Callback cb) {\n        super(context, context.getString(R.string.reading_file));\n        _cb = cb;\n    }\n\n    @Override\n    protected Result doInBackground(Params... params) {\n        Context context = getDialog().getContext();\n\n        Params p = params[0];\n        Uri uri = p.getUri();\n        try (InputStream inStream = context.getContentResolver().openInputStream(uri)) {\n            if (inStream == null) {\n                throw new IOException(\"openInputStream returned null\");\n            }\n\n            String prefix = p.getNamePrefix() != null ? p.getNamePrefix() + \"-\" : \"\";\n            String suffix = p.getNameSuffix() != null ? \"-\" + p.getNameSuffix() : \"\";\n\n            File tempFile = File.createTempFile(prefix, suffix, context.getCacheDir());\n            try (FileOutputStream outStream = new FileOutputStream(tempFile)) {\n                IOUtils.copy(inStream, outStream);\n            }\n\n            return new Result(uri, tempFile);\n        } catch (IOException e) {\n            e.printStackTrace();\n            return new Result(uri, e);\n        }\n    }\n\n    @Override\n    protected void onPostExecute(Result result) {\n        super.onPostExecute(result);\n        _cb.onTaskFinished(result);\n    }\n\n    public interface Callback {\n        void onTaskFinished(Result result);\n    }\n\n    public static class Params {\n        private final Uri _uri;\n        private final String _namePrefix;\n        private final String _nameSuffix;\n\n        public Params(Uri uri, String namePrefix, String nameSuffix) {\n            _uri = uri;\n            _namePrefix = namePrefix;\n            _nameSuffix = nameSuffix;\n        }\n\n        public Uri getUri() {\n            return _uri;\n        }\n\n        public String getNamePrefix() {\n            return _namePrefix;\n        }\n\n        public String getNameSuffix() {\n            return _nameSuffix;\n        }\n    }\n\n    public static class Result {\n        private final Uri _uri;\n        private File _file;\n        private Exception _e;\n\n        public Result(Uri uri, File file) {\n            _uri = uri;\n            _file = file;\n        }\n\n        public Result(Uri uri, Exception e) {\n            _uri = uri;\n            _e = e;\n        }\n\n        public Uri getUri() {\n            return _uri;\n        }\n\n        public File getFile() {\n            return _file;\n        }\n\n        public String getError() {\n            if (_e == null) {\n                return null;\n            }\n\n            return String.format(\"ImportFileTask(uri=\\\"%s\\\"): %s\", _uri, _e);\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/ui/tasks/ImportIconPackTask.java",
    "content": "package com.beemdevelopment.aegis.ui.tasks;\n\nimport android.content.Context;\nimport android.net.Uri;\n\nimport com.beemdevelopment.aegis.R;\nimport com.beemdevelopment.aegis.icons.IconPack;\nimport com.beemdevelopment.aegis.icons.IconPackException;\nimport com.beemdevelopment.aegis.icons.IconPackManager;\nimport com.beemdevelopment.aegis.util.IOUtils;\n\nimport java.io.File;\nimport java.io.FileOutputStream;\nimport java.io.IOException;\nimport java.io.InputStream;\n\npublic class ImportIconPackTask extends ProgressDialogTask<ImportIconPackTask.Params, ImportIconPackTask.Result> {\n    private final ImportIconPackTask.Callback _cb;\n\n    public ImportIconPackTask(Context context, ImportIconPackTask.Callback cb) {\n        super(context, context.getString(R.string.importing_icon_pack));\n        _cb = cb;\n    }\n\n    @Override\n    protected ImportIconPackTask.Result doInBackground(ImportIconPackTask.Params... params) {\n        Context context = getDialog().getContext();\n        ImportIconPackTask.Params param = params[0];\n\n        File tempFile = null;\n        try {\n            tempFile = File.createTempFile(\"icon-pack-\", \"\", context.getCacheDir());\n            try (InputStream inStream = context.getContentResolver().openInputStream(param.getUri());\n                 FileOutputStream outStream = new FileOutputStream(tempFile)) {\n                if (inStream == null) {\n                    throw new IOException(\"openInputStream returned null\");\n                }\n                IOUtils.copy(inStream, outStream);\n            }\n\n            IconPack pack = param.getManager().importPack(tempFile);\n            return new Result(pack, null);\n        } catch (IOException | IconPackException e) {\n            e.printStackTrace();\n            return new ImportIconPackTask.Result(null, e);\n        } finally {\n            if (tempFile != null) {\n                tempFile.delete();\n            }\n        }\n    }\n\n    @Override\n    protected void onPostExecute(ImportIconPackTask.Result result) {\n        super.onPostExecute(result);\n        _cb.onTaskFinished(result);\n    }\n\n    public interface Callback {\n        void onTaskFinished(ImportIconPackTask.Result result);\n    }\n\n    public static class Params {\n        private final IconPackManager _manager;\n        private final Uri _uri;\n\n        public Params(IconPackManager manager, Uri uri) {\n            _manager = manager;\n            _uri = uri;\n        }\n\n        public IconPackManager getManager() {\n            return _manager;\n        }\n\n        public Uri getUri() {\n            return _uri;\n        }\n    }\n\n    public static class Result {\n        private final IconPack _pack;\n        private final Exception _e;\n\n        public Result(IconPack pack, Exception e) {\n            _pack = pack;\n            _e = e;\n        }\n\n        public IconPack getIconPack() {\n            return _pack;\n        }\n\n        public Exception getException() {\n            return _e;\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/ui/tasks/KeyDerivationTask.java",
    "content": "package com.beemdevelopment.aegis.ui.tasks;\n\nimport android.content.Context;\n\nimport com.beemdevelopment.aegis.R;\nimport com.beemdevelopment.aegis.crypto.CryptoUtils;\nimport com.beemdevelopment.aegis.crypto.SCryptParameters;\nimport com.beemdevelopment.aegis.vault.slots.PasswordSlot;\n\nimport javax.crypto.SecretKey;\n\npublic class KeyDerivationTask extends ProgressDialogTask<KeyDerivationTask.Params, KeyDerivationTask.Result> {\n    private Callback _cb;\n\n    public KeyDerivationTask(Context context, Callback cb) {\n        super(context, context.getString(R.string.encrypting_vault));\n        _cb = cb;\n    }\n\n    @Override\n    protected Result doInBackground(KeyDerivationTask.Params... args) {\n        setPriority();\n\n        Params params = args[0];\n        byte[] salt = CryptoUtils.generateSalt();\n        SCryptParameters scryptParams = new SCryptParameters(\n                CryptoUtils.CRYPTO_SCRYPT_N,\n                CryptoUtils.CRYPTO_SCRYPT_r,\n                CryptoUtils.CRYPTO_SCRYPT_p,\n                salt\n        );\n\n        PasswordSlot slot = params.getSlot();\n        SecretKey key = slot.deriveKey(params.getPassword(), scryptParams);\n        return new Result(slot, key);\n    }\n\n    @Override\n    protected void onPostExecute(Result result) {\n        super.onPostExecute(result);\n        _cb.onTaskFinished(result.getSlot(), result.getKey());\n    }\n\n    public static class Params {\n        private PasswordSlot _slot;\n        private char[] _password;\n\n        public Params(PasswordSlot slot, char[] password) {\n            _slot = slot;\n            _password = password;\n        }\n\n        public PasswordSlot getSlot() {\n            return _slot;\n        }\n\n        public char[] getPassword() {\n            return _password;\n        }\n    }\n\n    public static class Result {\n        private PasswordSlot _slot;\n        private SecretKey _key;\n\n        public Result(PasswordSlot slot, SecretKey key) {\n            _slot = slot;\n            _key = key;\n        }\n\n        public PasswordSlot getSlot() {\n            return _slot;\n        }\n\n        public SecretKey getKey() {\n            return _key;\n        }\n    }\n\n    public interface Callback {\n        void onTaskFinished(PasswordSlot slot, SecretKey key);\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/ui/tasks/PBKDFTask.java",
    "content": "package com.beemdevelopment.aegis.ui.tasks;\n\nimport android.content.Context;\n\nimport com.beemdevelopment.aegis.R;\nimport com.beemdevelopment.aegis.crypto.CryptoUtils;\n\nimport org.bouncycastle.crypto.digests.SHA512Digest;\nimport org.bouncycastle.crypto.generators.PKCS5S2ParametersGenerator;\nimport org.bouncycastle.crypto.params.KeyParameter;\n\nimport java.security.NoSuchAlgorithmException;\nimport java.security.spec.InvalidKeySpecException;\nimport java.security.spec.KeySpec;\n\nimport javax.crypto.SecretKey;\nimport javax.crypto.SecretKeyFactory;\nimport javax.crypto.spec.PBEKeySpec;\nimport javax.crypto.spec.SecretKeySpec;\n\npublic class PBKDFTask extends ProgressDialogTask<PBKDFTask.Params, SecretKey> {\n    private final Callback _cb;\n\n    public PBKDFTask(Context context, Callback cb) {\n        super(context, context.getString(R.string.unlocking_vault));\n        _cb = cb;\n    }\n\n    @Override\n    protected SecretKey doInBackground(Params... args) {\n        setPriority();\n\n        Params params = args[0];\n        return deriveKey(params);\n    }\n\n    public static SecretKey deriveKey(Params params) {\n        try {\n            // Some older versions of Android (< 26) do not support PBKDF2withHmacSHA512, so use\n            // BouncyCastle's implementation instead.\n            if (params.getAlgorithm().equals(\"PBKDF2withHmacSHA512\")) {\n                PKCS5S2ParametersGenerator gen = new PKCS5S2ParametersGenerator(new SHA512Digest());\n                gen.init(CryptoUtils.toBytes(params.getPassword()), params.getSalt(), params.getIterations());\n                byte[] key = ((KeyParameter) gen.generateDerivedParameters(params.getKeySize())).getKey();\n                return new SecretKeySpec(key, \"AES\");\n            }\n\n            SecretKeyFactory factory = SecretKeyFactory.getInstance(params.getAlgorithm());\n            KeySpec spec = new PBEKeySpec(params.getPassword(), params.getSalt(), params.getIterations(), params.getKeySize());\n            SecretKey key = factory.generateSecret(spec);\n            return new SecretKeySpec(key.getEncoded(), \"AES\");\n        } catch (NoSuchAlgorithmException | InvalidKeySpecException e) {\n            throw new RuntimeException(e);\n        }\n    }\n\n    @Override\n    protected void onPostExecute(SecretKey key) {\n        super.onPostExecute(key);\n        _cb.onTaskFinished(key);\n    }\n\n    public interface Callback {\n        void onTaskFinished(SecretKey key);\n    }\n\n    public static class Params {\n        private final String _algorithm;\n        private final int _keySize;\n        private final char[] _password;\n        private final byte[] _salt;\n        private final int _iterations;\n\n        public Params(String algorithm, int keySize, char[] password, byte[] salt, int iterations) {\n            _algorithm = algorithm;\n            _keySize = keySize;\n            _iterations = iterations;\n            _password = password;\n            _salt = salt;\n        }\n\n        public String getAlgorithm() {\n            return _algorithm;\n        }\n\n        public int getKeySize() {\n            return _keySize;\n        }\n\n        public char[] getPassword() {\n            return _password;\n        }\n\n        public int getIterations() {\n            return _iterations;\n        }\n\n        public byte[] getSalt() {\n            return _salt;\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/ui/tasks/PasswordSlotDecryptTask.java",
    "content": "package com.beemdevelopment.aegis.ui.tasks;\n\nimport android.content.Context;\n\nimport com.beemdevelopment.aegis.R;\nimport com.beemdevelopment.aegis.crypto.CryptoUtils;\nimport com.beemdevelopment.aegis.crypto.MasterKey;\nimport com.beemdevelopment.aegis.vault.slots.PasswordSlot;\nimport com.beemdevelopment.aegis.vault.slots.Slot;\nimport com.beemdevelopment.aegis.vault.slots.SlotException;\nimport com.beemdevelopment.aegis.vault.slots.SlotIntegrityException;\n\nimport java.util.List;\n\nimport javax.crypto.Cipher;\nimport javax.crypto.SecretKey;\n\npublic class PasswordSlotDecryptTask extends ProgressDialogTask<PasswordSlotDecryptTask.Params, PasswordSlotDecryptTask.Result> {\n    private Callback _cb;\n\n    public PasswordSlotDecryptTask(Context context, Callback cb) {\n        super(context, context.getString(R.string.unlocking_vault));\n        _cb = cb;\n    }\n\n    @Override\n    protected Result doInBackground(PasswordSlotDecryptTask.Params... args) {\n        setPriority();\n\n        Params params = args[0];\n        return decrypt(params.getSlots(), params.getPassword());\n    }\n\n    public static Result decrypt(List<PasswordSlot> slots, char[] password) {\n        for (PasswordSlot slot : slots) {\n            try {\n                return decryptPasswordSlot(slot, password);\n            } catch (SlotException e) {\n                throw new RuntimeException(e);\n            } catch (SlotIntegrityException ignored) {\n\n            }\n        }\n\n        return null;\n    }\n\n    public static Result decryptPasswordSlot(PasswordSlot slot, char[] password)\n            throws SlotIntegrityException, SlotException {\n        MasterKey masterKey;\n        SecretKey key = slot.deriveKey(password);\n        byte[] oldPasswordBytes = CryptoUtils.toBytesOld(password);\n\n        try {\n            masterKey = decryptPasswordSlot(slot, key);\n        } catch (SlotIntegrityException e) {\n            // a bug introduced in afb9e59 caused passwords longer than 64 bytes to produce a different key than before\n            // so, try again with the old password encode function if the password is longer than 64 bytes\n            if (slot.isRepaired() || oldPasswordBytes.length <= 64) {\n                throw e;\n            }\n\n            // try to decrypt the password slot with the old key\n            SecretKey oldKey = slot.deriveKey(oldPasswordBytes);\n            masterKey = decryptPasswordSlot(slot, oldKey);\n        }\n\n        // if necessary, repair the slot by re-encrypting the master key with the correct key\n        // slots with passwords smaller than 64 bytes also get this treatment to make sure those also have 'repaired' set to true\n        boolean repaired = false;\n        if (!slot.isRepaired()) {\n            Cipher cipher = Slot.createEncryptCipher(key);\n            slot.setKey(masterKey, cipher);\n            repaired = true;\n        }\n\n        return new Result(masterKey, slot, repaired);\n    }\n\n    public static MasterKey decryptPasswordSlot(PasswordSlot slot, SecretKey key)\n            throws SlotException, SlotIntegrityException {\n        Cipher cipher = slot.createDecryptCipher(key);\n        return slot.getKey(cipher);\n    }\n\n    @Override\n    protected void onPostExecute(Result result) {\n        super.onPostExecute(result);\n        _cb.onTaskFinished(result);\n    }\n\n    public static class Params {\n        private List<PasswordSlot> _slots;\n        private char[] _password;\n\n        public Params(List<PasswordSlot> slots, char[] password) {\n            _slots = slots;\n            _password = password;\n        }\n\n        public List<PasswordSlot> getSlots() {\n            return _slots;\n        }\n\n        public char[] getPassword() {\n            return _password;\n        }\n    }\n\n    public static class Result {\n        private MasterKey _key;\n        private PasswordSlot _slot;\n        private boolean _repaired;\n\n        public Result(MasterKey key, PasswordSlot slot, boolean repaired) {\n            _key = key;\n            _slot = slot;\n            _repaired = repaired;\n        }\n\n        public Result(MasterKey key, PasswordSlot slot) {\n            this(key, slot, false);\n        }\n\n        public MasterKey getKey() {\n            return _key;\n        }\n\n        public Slot getSlot() {\n            return _slot;\n        }\n\n        public boolean isSlotRepaired() {\n            return _repaired;\n        }\n    }\n\n    public interface Callback {\n        void onTaskFinished(Result result);\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/ui/tasks/ProgressDialogTask.java",
    "content": "package com.beemdevelopment.aegis.ui.tasks;\n\nimport android.app.Dialog;\nimport android.content.Context;\nimport android.os.AsyncTask;\nimport android.os.Process;\nimport android.view.LayoutInflater;\nimport android.view.View;\nimport android.widget.TextView;\n\nimport androidx.annotation.CallSuper;\nimport androidx.annotation.Nullable;\nimport androidx.appcompat.app.AlertDialog;\nimport androidx.lifecycle.Lifecycle;\nimport androidx.lifecycle.LifecycleObserver;\nimport androidx.lifecycle.OnLifecycleEvent;\n\nimport com.beemdevelopment.aegis.R;\nimport com.beemdevelopment.aegis.ui.dialogs.Dialogs;\nimport com.google.android.material.dialog.MaterialAlertDialogBuilder;\n\npublic abstract class ProgressDialogTask<Params, Result> extends AsyncTask<Params, String, Result> {\n    private final AlertDialog _dialog;\n    private final TextView _textProgress;\n\n    public ProgressDialogTask(Context context, String message) {\n        View view = LayoutInflater.from(context).inflate(R.layout.dialog_progress, null);\n        _textProgress = view.findViewById(R.id.text_progress);\n        _textProgress.setText(message);\n\n        _dialog = new MaterialAlertDialogBuilder(context)\n                .setView(view)\n                .setCancelable(false)\n                .create();\n\n        Dialogs.secureDialog(_dialog);\n    }\n\n    @CallSuper\n    @Override\n    protected void onPreExecute() {\n        _dialog.show();\n    }\n\n    @CallSuper\n    @Override\n    protected void onPostExecute(Result result) {\n        if (_dialog.isShowing()) {\n            _dialog.dismiss();\n        }\n    }\n\n    @Override\n    protected void onProgressUpdate(String... values) {\n        if (values.length == 1) {\n            _textProgress.setText(values[0]);\n        }\n    }\n\n    protected void setPriority() {\n        Process.setThreadPriority(Process.THREAD_PRIORITY_BACKGROUND + Process.THREAD_PRIORITY_MORE_FAVORABLE);\n    }\n\n    protected final AlertDialog getDialog() {\n        return _dialog;\n    }\n\n    @SafeVarargs\n    public final void execute(@Nullable Lifecycle lifecycle, Params... params) {\n        if (lifecycle != null) {\n            LifecycleObserver observer = new Observer(getDialog());\n            lifecycle.addObserver(observer);\n        }\n        execute(params);\n    }\n\n    private static class Observer implements LifecycleObserver {\n        private Dialog _dialog;\n\n        public Observer(Dialog dialog) {\n            _dialog = dialog;\n        }\n\n        @OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)\n        void onPause() {\n            if (_dialog != null && _dialog.isShowing()) {\n                _dialog.dismiss();\n                _dialog = null;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/ui/tasks/QrDecodeTask.java",
    "content": "package com.beemdevelopment.aegis.ui.tasks;\n\nimport android.content.Context;\nimport android.net.Uri;\n\nimport com.beemdevelopment.aegis.R;\nimport com.beemdevelopment.aegis.helpers.QrCodeHelper;\nimport com.beemdevelopment.aegis.helpers.SafHelper;\n\nimport java.io.IOException;\nimport java.io.InputStream;\nimport java.util.ArrayList;\nimport java.util.List;\n\npublic class QrDecodeTask extends ProgressDialogTask<List<Uri>, List<QrDecodeTask.Result>> {\n    private final Callback _cb;\n\n    public QrDecodeTask(Context context, Callback cb) {\n        super(context, context.getString(R.string.analyzing_qr));\n        _cb = cb;\n    }\n\n    @Override\n    protected List<Result> doInBackground(List<Uri>... params) {\n        List<Result> res = new ArrayList<>();\n        Context context = getDialog().getContext();\n\n        List<Uri> uris = params[0];\n        for (Uri uri : uris) {\n            String fileName = SafHelper.getFileName(context, uri);\n            if (uris.size() > 1) {\n                publishProgress(context.getString(R.string.analyzing_qr_multiple, uris.indexOf(uri) + 1, uris.size(), fileName));\n            }\n\n            try (InputStream inStream = context.getContentResolver().openInputStream(uri)) {\n                if (inStream == null) {\n                    throw new IOException(\"openInputStream returned null\");\n                }\n                com.google.zxing.Result result = QrCodeHelper.decodeFromStream(inStream);\n                res.add(new Result(uri, fileName, result, null));\n            } catch (QrCodeHelper.DecodeError | IOException e) {\n                e.printStackTrace();\n                res.add(new Result(uri, fileName, null, e));\n            }\n        }\n\n        return res;\n    }\n\n    @Override\n    protected void onPostExecute(List<Result> results) {\n        super.onPostExecute(results);\n        _cb.onTaskFinished(results);\n    }\n\n    public interface Callback {\n        void onTaskFinished(List<Result> results);\n    }\n\n    public static class Result {\n        private final Uri _uri;\n        private final String _fileName;\n        private final com.google.zxing.Result _result;\n        private final Exception _e;\n\n        public Result(Uri uri, String fileName, com.google.zxing.Result result, Exception e) {\n            _uri = uri;\n            _fileName = fileName;\n            _result = result;\n            _e = e;\n        }\n\n        public Uri getUri() {\n            return _uri;\n        }\n\n        public String getFileName() {\n            return _fileName;\n        }\n\n        public com.google.zxing.Result getResult() {\n            return _result;\n        }\n\n        public Exception getException() {\n            return _e;\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/ui/tasks/RootShellTask.java",
    "content": "package com.beemdevelopment.aegis.ui.tasks;\n\nimport android.content.Context;\n\nimport com.beemdevelopment.aegis.R;\nimport com.topjohnwu.superuser.Shell;\n\npublic class RootShellTask extends ProgressDialogTask<Object, Shell> {\n    private final Callback _cb;\n\n    public RootShellTask(Context context, Callback cb) {\n        super(context, context.getString(R.string.requesting_root_access));\n        _cb = cb;\n    }\n\n    @Override\n    protected Shell doInBackground(Object... params) {\n        // To access other app's internal storage directory, run libsu commands inside the global mount namespace\n        return Shell.Builder.create().setFlags(Shell.FLAG_MOUNT_MASTER).build();\n    }\n\n    @Override\n    protected void onPostExecute(Shell shell) {\n        super.onPostExecute(shell);\n        _cb.onTaskFinished(shell);\n    }\n\n    public interface Callback {\n        void onTaskFinished(Shell shell);\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/ui/views/AssignIconAdapter.java",
    "content": "package com.beemdevelopment.aegis.ui.views;\n\nimport android.view.LayoutInflater;\nimport android.view.View;\nimport android.view.ViewGroup;\n\nimport androidx.recyclerview.widget.RecyclerView;\n\nimport com.beemdevelopment.aegis.R;\nimport com.beemdevelopment.aegis.ui.models.AssignIconEntry;\n\nimport java.util.ArrayList;\nimport java.util.Collection;\n\npublic class AssignIconAdapter extends RecyclerView.Adapter<AssignIconHolder> {\n    private AssignIconAdapter.Listener _listener;\n    private ArrayList<AssignIconEntry> _entries;\n\n    public AssignIconAdapter(AssignIconAdapter.Listener listener) {\n        _listener = listener;\n        _entries = new ArrayList<>();\n    }\n\n    public void addEntries(Collection<AssignIconEntry> entries) {\n        _entries.addAll(entries);\n    }\n\n    @Override\n    public AssignIconHolder onCreateViewHolder(ViewGroup parent, int viewType) {\n        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.card_assign_icon_entry, parent, false);\n        AssignIconHolder holder = new AssignIconHolder(view);\n        // NOTE: This assumes that the old and new icon views are the same size\n        _listener.onSetPreloadView(holder.getOldIconView());\n        return holder;\n    }\n\n    @Override\n    public void onBindViewHolder(AssignIconHolder holder, int position) {\n        holder.setData(_entries.get(position));\n        holder.itemView.setOnClickListener(view -> {\n            _listener.onAssignIconEntryClick(_entries.get(position));\n        });\n        _entries.get(position).setOnResetListener(holder);\n    }\n\n    @Override\n    public int getItemCount() {\n        return _entries.size();\n    }\n\n    public interface Listener {\n        void onAssignIconEntryClick(AssignIconEntry entry);\n        void onSetPreloadView(View view);\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/ui/views/AssignIconHolder.java",
    "content": "package com.beemdevelopment.aegis.ui.views;\n\nimport android.view.View;\nimport android.widget.ImageView;\nimport android.widget.TextView;\n\nimport androidx.recyclerview.widget.RecyclerView;\n\nimport com.beemdevelopment.aegis.R;\nimport com.beemdevelopment.aegis.ui.glide.GlideHelper;\nimport com.beemdevelopment.aegis.ui.models.AssignIconEntry;\nimport com.bumptech.glide.Glide;\n\npublic class AssignIconHolder extends RecyclerView.ViewHolder implements AssignIconEntry.Listener {\n    private View _view;\n\n    private AssignIconEntry _entry;\n    private TextView _issuer;\n    private TextView _accountName;\n    private ImageView _oldIcon;\n    private ImageView _newIcon;\n    private ImageView _btnReset;\n\n    public AssignIconHolder(final View view) {\n        super(view);\n\n        _view = view.findViewById(R.id.rlCardEntry);\n\n        _issuer = view.findViewById(R.id.tvIssuer);\n        _accountName = view.findViewById(R.id.tvAccountName);\n        _oldIcon = view.findViewById(R.id.ivOldImage);\n        _newIcon = view.findViewById(R.id.ivNewImage);\n        _btnReset = view.findViewById(R.id.btnReset);\n        _btnReset.setOnClickListener(l -> _entry.setNewIcon(null));\n    }\n\n    public void setData(AssignIconEntry entry) {\n        _entry = entry;\n        _issuer.setText(entry.getEntry().getIssuer());\n        _accountName.setText(entry.getEntry().getName());\n\n        GlideHelper.loadEntryIcon(Glide.with(_view.getContext()), _entry.getEntry(), _oldIcon);\n        setNewIcon();\n    }\n\n    private void setNewIcon() {\n        if (_entry.getNewIcon() != null) {\n            GlideHelper.loadIcon(Glide.with(_view.getContext()), _entry.getNewIcon(), _newIcon);\n        } else {\n            Glide.with(_view.getContext()).clear(_newIcon);\n            _newIcon.setImageResource(R.drawable.ic_unselected);\n        }\n\n        _btnReset.setVisibility(_entry.getNewIcon() != null ? View.VISIBLE : View.INVISIBLE);\n    }\n\n    public View getOldIconView() {\n        return _oldIcon;\n    }\n\n    @Override\n    public void onNewIconChanged() {\n        setNewIcon();\n    }\n}"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/ui/views/AuditLogAdapter.java",
    "content": "package com.beemdevelopment.aegis.ui.views;\n\nimport android.view.LayoutInflater;\nimport android.view.View;\nimport android.view.ViewGroup;\n\nimport androidx.annotation.NonNull;\nimport androidx.recyclerview.widget.RecyclerView;\n\nimport com.beemdevelopment.aegis.R;\nimport com.beemdevelopment.aegis.database.AuditLogEntry;\nimport com.beemdevelopment.aegis.ui.models.AuditLogEntryModel;\nimport com.beemdevelopment.aegis.vault.VaultEntry;\n\nimport java.util.ArrayList;\nimport java.util.List;\nimport java.util.UUID;\n\npublic class AuditLogAdapter extends RecyclerView.Adapter<AuditLogHolder> {\n    private List<AuditLogEntryModel> _auditLogEntryModels;\n    private List<VaultEntry> _referencedEntries;\n\n    public AuditLogAdapter() {\n        _auditLogEntryModels = new ArrayList<>();\n        _referencedEntries = new ArrayList<>();\n    }\n\n    public void addAuditLogEntryModel(AuditLogEntryModel auditLogEntryModel) {\n        _auditLogEntryModels.add(auditLogEntryModel);\n\n        int position = getItemCount() - 1;\n        if (position == 0) {\n            notifyDataSetChanged();\n        } else {\n            notifyItemInserted(position);\n        }\n    }\n\n    public void addReferencedEntry(VaultEntry vaultEntry) {\n        _referencedEntries.add(vaultEntry);\n    }\n\n    @NonNull\n    @Override\n    public AuditLogHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {\n        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.card_audit_log, parent, false);\n        return new AuditLogHolder(view);\n    }\n\n    @Override\n    public void onBindViewHolder(@NonNull AuditLogHolder holder, int position) {\n        AuditLogEntryModel auditLogEntryModel = _auditLogEntryModels.get(position);\n\n        VaultEntry referencedEntry = null;\n        holder.setData(auditLogEntryModel);\n    }\n\n    @Override\n    public int getItemCount() {\n        return _auditLogEntryModels.size();\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/ui/views/AuditLogHolder.java",
    "content": "package com.beemdevelopment.aegis.ui.views;\n\nimport android.content.Context;\nimport android.content.res.ColorStateList;\nimport android.view.View;\nimport android.widget.ImageView;\nimport android.widget.TextView;\n\nimport androidx.cardview.widget.CardView;\nimport androidx.recyclerview.widget.RecyclerView;\n\nimport com.beemdevelopment.aegis.EventType;\nimport com.beemdevelopment.aegis.R;\nimport com.beemdevelopment.aegis.database.AuditLogEntry;\nimport com.beemdevelopment.aegis.ui.models.AuditLogEntryModel;\nimport com.beemdevelopment.aegis.vault.VaultEntry;\nimport com.google.android.material.color.MaterialColors;\n\nimport java.time.Instant;\nimport java.time.LocalDateTime;\nimport java.time.ZoneId;\nimport java.time.format.DateTimeFormatter;\nimport java.time.format.FormatStyle;\nimport java.time.temporal.ChronoUnit;\n\npublic class AuditLogHolder extends RecyclerView.ViewHolder {\n\n    private final CardView _cardView;\n    private final ImageView _auditLogEntryIcon;\n    private final TextView _auditLogEntryTitle;\n    private final TextView _auditLogEntryDescription;\n    private final TextView _auditLogEntryReference;\n    private final TextView _auditLogEntryTimestamp;\n    private final int _errorBackgroundColor;\n    private final ColorStateList _initialBackgroundColor;\n    private final int _initialIconColor;\n\n    public AuditLogHolder(final View view) {\n        super(view);\n\n        _cardView = (CardView)view;\n        _auditLogEntryIcon = view.findViewById(R.id.iv_icon_view);\n        _auditLogEntryTitle = view.findViewById(R.id.text_audit_log_title);\n        _auditLogEntryDescription = view.findViewById(R.id.text_audit_log_description);\n        _auditLogEntryReference = view.findViewById(R.id.text_audit_log_reference);\n        _auditLogEntryTimestamp = view.findViewById(R.id.text_audit_log_timestamp);\n\n        _initialBackgroundColor = _cardView.getCardBackgroundColor();\n        _initialIconColor = MaterialColors.getColor(view, com.google.android.material.R.attr.colorTertiaryContainer);\n        _errorBackgroundColor = MaterialColors.getColor(view, com.google.android.material.R.attr.colorErrorContainer);\n    }\n\n    public void setData(AuditLogEntryModel auditLogEntryModel) {\n        AuditLogEntry auditLogEntry = auditLogEntryModel.getAuditLogEntry();\n        _auditLogEntryIcon.setImageResource(getIconResource(auditLogEntry.getEventType()));\n        _auditLogEntryTitle.setText(EventType.getEventTitleRes(auditLogEntry.getEventType()));\n        _auditLogEntryDescription.setText(getEventTypeDescriptionRes(auditLogEntry.getEventType()));\n\n        _auditLogEntryTimestamp.setText(formatTimestamp(_cardView.getContext(), auditLogEntry.getTimestamp()).toLowerCase());\n\n        if (auditLogEntryModel.getReferencedVaultEntry() != null) {\n            VaultEntry referencedVaultEntry = auditLogEntryModel.getReferencedVaultEntry();\n            _auditLogEntryReference.setText(String.format(\"%s (%s)\", referencedVaultEntry.getIssuer(), referencedVaultEntry.getName()));\n            _auditLogEntryReference.setVisibility(View.VISIBLE);\n        } else if (auditLogEntryModel.getAuditLogEntry().getReference() != null) {\n            _auditLogEntryReference.setText(R.string.audit_log_entry_deleted);\n            _auditLogEntryReference.setVisibility(View.VISIBLE);\n        } else {\n            _auditLogEntryReference.setVisibility(View.GONE);\n        }\n\n        setCardBackgroundColor(auditLogEntry.getEventType());\n    }\n\n    private void setCardBackgroundColor(EventType eventType) {\n        if (eventType == EventType.VAULT_UNLOCK_FAILED_PASSWORD || eventType == EventType.VAULT_UNLOCK_FAILED_BIOMETRICS) {\n            _cardView.setCardBackgroundColor(_errorBackgroundColor);\n            _auditLogEntryIcon.setBackgroundColor(_errorBackgroundColor);\n        } else {\n            _cardView.setCardBackgroundColor(_initialBackgroundColor);\n            _auditLogEntryIcon.setBackgroundColor(_initialIconColor);\n        }\n    }\n\n    private int getEventTypeDescriptionRes(EventType eventType) {\n        switch (eventType) {\n            case VAULT_UNLOCKED:\n                return R.string.event_description_vault_unlocked;\n            case VAULT_BACKUP_CREATED:\n                return R.string.event_description_backup_created;\n            case VAULT_ANDROID_BACKUP_CREATED:\n                return R.string.event_description_android_backup_created;\n            case VAULT_EXPORTED:\n                return R.string.event_description_vault_exported;\n            case ENTRY_SHARED:\n                return R.string.event_description_entry_shared;\n            case VAULT_UNLOCK_FAILED_PASSWORD:\n                return R.string.event_description_vault_unlock_failed_password;\n            case VAULT_UNLOCK_FAILED_BIOMETRICS:\n                return R.string.event_description_vault_unlock_failed_biometrics;\n            default:\n                return R.string.event_unknown;\n        }\n    }\n\n    private int getIconResource(EventType eventType) {\n        switch(eventType) {\n            case VAULT_UNLOCKED:\n                return R.drawable.ic_lock_open;\n            case VAULT_BACKUP_CREATED:\n            case VAULT_ANDROID_BACKUP_CREATED:\n                return R.drawable.ic_folder_zip;\n            case VAULT_EXPORTED:\n                return R.drawable.ic_export_notes;\n            case ENTRY_SHARED:\n                return R.drawable.ic_share;\n            case VAULT_UNLOCK_FAILED_PASSWORD:\n            case VAULT_UNLOCK_FAILED_BIOMETRICS:\n                return R.drawable.ic_lock;\n        }\n\n        return -1;\n    }\n\n    private static String formatTimestamp(Context context, long epochMilli) {\n        LocalDateTime now = LocalDateTime.now();\n        LocalDateTime timestamp = LocalDateTime.ofInstant(Instant.ofEpochMilli(epochMilli), ZoneId.systemDefault());\n\n        long daysBetween = ChronoUnit.DAYS.between(timestamp.toLocalDate(), now.toLocalDate());\n        DateTimeFormatter timeFormatter = DateTimeFormatter.ofPattern(\"h:mm a\");\n\n        if (daysBetween < 1) {\n            String formattedTime = timestamp.format(timeFormatter);\n            return context.getString(R.string.today_at_time, formattedTime);\n        } else if (daysBetween < 7) {\n            DateTimeFormatter dayOfWeekFormatter = DateTimeFormatter.ofPattern(\"EEEE\");\n            String dayOfWeek = timestamp.format(dayOfWeekFormatter);\n            String formattedTime = timestamp.format(timeFormatter);\n            return context.getString(R.string.day_of_week_at_time, dayOfWeek, formattedTime);\n        } else {\n            DateTimeFormatter dateFormatter = DateTimeFormatter.ofLocalizedDate(FormatStyle.MEDIUM);\n            return timestamp.format(dateFormatter);\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/ui/views/EntryAdapter.java",
    "content": "package com.beemdevelopment.aegis.ui.views;\n\nimport static androidx.recyclerview.widget.RecyclerView.NO_POSITION;\n\nimport android.graphics.Typeface;\nimport android.os.Handler;\nimport android.text.SpannableString;\nimport android.text.Spanned;\nimport android.text.style.StyleSpan;\nimport android.view.LayoutInflater;\nimport android.view.MotionEvent;\nimport android.view.View;\nimport android.view.ViewConfiguration;\nimport android.view.ViewGroup;\nimport android.widget.TextView;\n\nimport androidx.annotation.NonNull;\nimport androidx.annotation.Nullable;\nimport androidx.recyclerview.widget.DiffUtil;\nimport androidx.recyclerview.widget.RecyclerView;\n\nimport com.beemdevelopment.aegis.AccountNamePosition;\nimport com.beemdevelopment.aegis.CopyBehavior;\nimport com.beemdevelopment.aegis.Preferences;\nimport com.beemdevelopment.aegis.R;\nimport com.beemdevelopment.aegis.SortCategory;\nimport com.beemdevelopment.aegis.ViewMode;\nimport com.beemdevelopment.aegis.helpers.ItemTouchHelperAdapter;\nimport com.beemdevelopment.aegis.helpers.comparators.FavoriteComparator;\nimport com.beemdevelopment.aegis.otp.HotpInfo;\nimport com.beemdevelopment.aegis.otp.OtpInfo;\nimport com.beemdevelopment.aegis.otp.OtpInfoException;\nimport com.beemdevelopment.aegis.otp.TotpInfo;\nimport com.beemdevelopment.aegis.ui.models.ErrorCardInfo;\nimport com.beemdevelopment.aegis.util.CollectionUtils;\nimport com.beemdevelopment.aegis.vault.VaultEntry;\nimport com.beemdevelopment.aegis.vault.VaultGroup;\n\nimport java.util.ArrayList;\nimport java.util.Arrays;\nimport java.util.Collection;\nimport java.util.Collections;\nimport java.util.Comparator;\nimport java.util.Date;\nimport java.util.HashMap;\nimport java.util.List;\nimport java.util.Map;\nimport java.util.Objects;\nimport java.util.Set;\nimport java.util.TreeSet;\nimport java.util.UUID;\n\npublic class EntryAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> implements ItemTouchHelperAdapter {\n    private EntryListView _view;\n    private EntryList _entryList;\n    private List<VaultEntry> _selectedEntries;\n    private Collection<VaultGroup> _groups;\n    private Map<UUID, Integer> _usageCounts;\n    private Map<UUID, Long> _lastUsedTimestamps;\n    private VaultEntry _focusedEntry;\n    private VaultEntry _clickedEntry;\n    private Preferences.CodeGrouping _codeGroupSize;\n    private AccountNamePosition _accountNamePosition;\n    private boolean _showIcon;\n    private boolean _showNextCode;\n    private boolean _showExpirationState;\n    private boolean _onlyShowNecessaryAccountNames;\n    private boolean _highlightEntry;\n    private boolean _tempHighlightEntry;\n    private boolean _tapToReveal;\n    private int _tapToRevealTime;\n    private CopyBehavior _copyBehavior;\n    private int _searchBehaviorMask;\n    private Set<UUID> _groupFilter;\n    private SortCategory _sortCategory;\n    private ViewMode _viewMode;\n    private String _searchFilter;\n    private boolean _isPeriodUniform = true;\n    private int _uniformPeriod = -1;\n    private Handler _dimHandler;\n    private Handler _doubleTapHandler;\n    private boolean _pauseFocused;\n\n    // keeps track of the EntryHolders that are currently bound\n    private List<EntryHolder> _holders;\n\n    public EntryAdapter(EntryListView view) {\n        _entryList = new EntryList();\n        _selectedEntries = new ArrayList<>();\n        _groupFilter = new TreeSet<>();\n        _holders = new ArrayList<>();\n        _dimHandler = new Handler();\n        _doubleTapHandler = new Handler();\n        _view = view;\n    }\n\n    public void destroy() {\n        for (EntryHolder holder : _holders) {\n            holder.destroy();\n        }\n        _view = null;\n    }\n\n    public void setCodeGroupSize(Preferences.CodeGrouping codeGroupSize) {\n        _codeGroupSize = codeGroupSize;\n    }\n\n    public void setAccountNamePosition(AccountNamePosition accountNamePosition) {\n        _accountNamePosition = accountNamePosition;\n    }\n\n    public void setOnlyShowNecessaryAccountNames(boolean onlyShowNecessaryAccountNames) {\n        _onlyShowNecessaryAccountNames = onlyShowNecessaryAccountNames;\n    }\n\n    public void setShowIcon(boolean showIcon) {\n        _showIcon = showIcon;\n    }\n\n    public void setShowNextCode(boolean showNextCode) {\n        _showNextCode = showNextCode;\n    }\n\n    public void setShowExpirationState(boolean showExpirationState) {\n        _showExpirationState = showExpirationState;\n    }\n\n    public void setTapToReveal(boolean tapToReveal) {\n        _tapToReveal = tapToReveal;\n    }\n\n    public void setTapToRevealTime(int number) {\n        _tapToRevealTime = number;\n    }\n\n    public void setHighlightEntry(boolean highlightEntry) {\n        _highlightEntry = highlightEntry;\n    }\n\n    public void setTempHighlightEntry(boolean highlightEntry) {\n        _tempHighlightEntry = highlightEntry;\n    }\n\n    public void setCopyBehavior(CopyBehavior copyBehavior) { _copyBehavior = copyBehavior; }\n\n    public void setSearchBehaviorMask(int searchBehaviorMask) { _searchBehaviorMask = searchBehaviorMask; }\n\n    public void setPauseFocused(boolean pauseFocused) {\n        _pauseFocused = pauseFocused;\n    }\n\n    public void setErrorCardInfo(ErrorCardInfo info) {\n        if (Objects.equals(info, _entryList.getErrorCardInfo())) {\n            return;\n        }\n\n        replaceEntryList(new EntryList(\n                _entryList.getEntries(),\n                _entryList.getShownEntries(),\n                info\n        ));\n    }\n\n    public VaultEntry getEntryAtPosition(int position) {\n        return _entryList.getShownEntries().get(_entryList.translateEntryPosToIndex(position));\n    }\n\n    public int getEntryPosition(VaultEntry entry) {\n        return _entryList.translateEntryIndexToPos(_entryList.getShownEntries().indexOf(entry));\n    }\n\n    public void setEntries(List<VaultEntry> entries) {\n        // TODO: Move these fields to separate dedicated model for the UI\n        for (VaultEntry entry : entries) {\n            entry.setUsageCount(_usageCounts.containsKey(entry.getUUID()) ? _usageCounts.get(entry.getUUID()) : 0);\n            entry.setLastUsedTimestamp(_lastUsedTimestamps.containsKey(entry.getUUID()) ? _lastUsedTimestamps.get(entry.getUUID()) : 0);\n        }\n\n        replaceEntryList(new EntryList(\n                entries,\n                calculateShownEntries(entries),\n                _entryList.getErrorCardInfo()\n        ));\n    }\n\n    public void clearEntries() {\n        replaceEntryList(new EntryList());\n    }\n\n    public int translateEntryPosToIndex(int position) {\n        return _entryList.translateEntryPosToIndex(position);\n    }\n\n    private boolean isEntryFiltered(VaultEntry entry) {\n        Set<UUID> groups = entry.getGroups();\n        String issuer = entry.getIssuer().toLowerCase();\n        String name = entry.getName().toLowerCase();\n        String note = entry.getNote().toLowerCase();\n\n        if (_searchFilter != null) {\n            String[] tokens = _searchFilter.toLowerCase().split(\"\\\\s+\");\n\n            // Return true if not all tokens match at least one of the relevant fields\n            return !Arrays.stream(tokens)\n                    .allMatch(token ->\n                            ((_searchBehaviorMask & Preferences.SEARCH_IN_ISSUER) != 0 && issuer.contains(token)) ||\n                                    ((_searchBehaviorMask & Preferences.SEARCH_IN_NAME) != 0 && name.contains(token)) ||\n                                    ((_searchBehaviorMask & Preferences.SEARCH_IN_NOTE) != 0 && note.contains(token)) ||\n                                    ((_searchBehaviorMask & Preferences.SEARCH_IN_GROUPS) != 0 && doesAnyGroupMatchSearchFilter(groups, token))\n                    );\n        }\n\n        if (!_groupFilter.isEmpty()) {\n            if (groups.isEmpty() && !_groupFilter.contains(null)) {\n                return true;\n            }\n            if (!groups.isEmpty() && _groupFilter.stream().filter(Objects::nonNull).noneMatch(groups::contains)) {\n                return true;\n            }\n        }\n\n        return false;\n    }\n\n    private boolean doesAnyGroupMatchSearchFilter(Set<UUID> entryGroupUUIDs, String searchFilter) {\n        return _groups.stream()\n                .filter(group -> entryGroupUUIDs.contains(group.getUUID()))\n                .map(VaultGroup::getName)\n                .anyMatch(groupName -> groupName.toLowerCase().contains(searchFilter.toLowerCase()));\n    }\n\n    public void refresh(boolean hard) {\n        if (hard) {\n            refreshEntryList();\n        } else {\n            for (EntryHolder holder : _holders) {\n                holder.refresh();\n                holder.showIcon(_showIcon);\n            }\n        }\n    }\n\n    public void setGroupFilter(@NonNull Set<UUID> groups) {\n        if (_groupFilter.equals(groups)) {\n            return;\n        }\n\n        _groupFilter = groups;\n        refreshEntryList();\n    }\n\n    public void setSortCategory(SortCategory category, boolean apply) {\n        if (_sortCategory == category) {\n            return;\n        }\n\n        _sortCategory = category;\n        if (apply) {\n            refreshEntryList();\n        }\n    }\n\n    public String getSearchFilter() {\n        return _searchFilter;\n    }\n\n    public void setSearchFilter(String search) {\n        String newSearchFilter = (search != null && !search.isEmpty())\n                ? search.toLowerCase().trim() : null;\n\n        if (!Objects.equals(_searchFilter, newSearchFilter)) {\n            _searchFilter = newSearchFilter;\n            refreshEntryList();\n        }\n    }\n\n    private void refreshEntryList() {\n        replaceEntryList(new EntryList(\n                _entryList.getEntries(),\n                calculateShownEntries(_entryList.getEntries()),\n                _entryList.getErrorCardInfo()\n        ));\n    }\n\n    private void replaceEntryList(EntryList newEntryList) {\n        DiffUtil.DiffResult diffRes = DiffUtil.calculateDiff(new DiffCallback(_entryList, newEntryList));\n        _entryList = newEntryList;\n        updatePeriodUniformity();\n\n        // This scroll position trick is required in order to not have the recycler view\n        // jump to some random position after a large change (like resorting entries)\n        // Related: https://issuetracker.google.com/issues/70149059\n        int scrollPos = _view.getScrollPosition();\n        diffRes.dispatchUpdatesTo(this);\n        _view.scrollToPosition(scrollPos);\n        _view.onListChange();\n    }\n\n    private List<VaultEntry> calculateShownEntries(List<VaultEntry> entries) {\n        List<VaultEntry> res = new ArrayList<>();\n        for (VaultEntry entry : entries) {\n            if (!isEntryFiltered(entry)) {\n                res.add(entry);\n            }\n        }\n\n        sortEntries(res, _sortCategory);\n        return res;\n    }\n\n    private static void sortEntries(List<VaultEntry> entries, SortCategory sortCategory) {\n        if (sortCategory != null) {\n            Comparator<VaultEntry> comparator = sortCategory.getComparator();\n            if (comparator != null) {\n                Collections.sort(entries, comparator);\n            }\n        }\n\n        Comparator<VaultEntry> favoriteComparator = new FavoriteComparator();\n        Collections.sort(entries, favoriteComparator);\n    }\n\n    private boolean isEntryDraggable(VaultEntry entry) {\n        return entry != null\n                && isDragAndDropAllowed()\n                && _selectedEntries.size() == 1\n                && !_selectedEntries.get(0).isFavorite()\n                && _selectedEntries.get(0) == entry;\n    }\n\n    public void setViewMode(ViewMode viewMode) {\n        _viewMode = viewMode;\n    }\n\n    public void setUsageCounts(Map<UUID, Integer> usageCounts) { _usageCounts = usageCounts; }\n\n    public Map<UUID, Integer> getUsageCounts() { return _usageCounts; }\n\n    public void setGroups(Collection<VaultGroup> groups) { _groups = groups; }\n\n    public void setLastUsedTimestamps(Map<UUID, Long> lastUsedTimestamps) { _lastUsedTimestamps = lastUsedTimestamps; }\n\n    public Map<UUID, Long> getLastUsedTimestamps() { return _lastUsedTimestamps; }\n\n    public int getShownFavoritesCount() {\n        return (int) _entryList.getShownEntries().stream().filter(VaultEntry::isFavorite).count();\n    }\n\n    @Override\n    public void onItemDismiss(int position) {\n\n    }\n\n    @Override\n    public void onItemDrop(int position) {\n        // moving entries is not allowed when a filter is applied\n        // footer cant be moved, nor can items be moved below it\n        if (!_groupFilter.isEmpty() || _entryList.isPositionFooter(position) || _entryList.isPositionErrorCard(position)) {\n            return;\n        }\n\n        int index = _entryList.translateEntryPosToIndex(position);\n        _view.onEntryDrop(_entryList.getShownEntries().get(index));\n    }\n\n    @Override\n    public void onItemMove(int firstPosition, int secondPosition) {\n        // Moving entries is not allowed when a filter is applied. The footer can't be\n        // moved, nor can items be moved below it\n        if (!_groupFilter.isEmpty()\n                || _entryList.isPositionFooter(firstPosition) || _entryList.isPositionFooter(secondPosition)\n                || _entryList.isPositionErrorCard(firstPosition) || _entryList.isPositionErrorCard(secondPosition)) {\n            return;\n        }\n\n        // Notify the vault about the entry position change first\n        int firstIndex = _entryList.translateEntryPosToIndex(firstPosition);\n        int secondIndex = _entryList.translateEntryPosToIndex(secondPosition);\n        VaultEntry firstEntry = _entryList.getShownEntries().get(firstIndex);\n        VaultEntry secondEntry = _entryList.getShownEntries().get(secondIndex);\n        _view.onEntryMove(firstEntry, secondEntry);\n\n        // Then update the visual end\n        List<VaultEntry> newEntries = new ArrayList<>(_entryList.getEntries());\n        CollectionUtils.move(newEntries, newEntries.indexOf(firstEntry), newEntries.indexOf(secondEntry));\n        replaceEntryList(new EntryList(\n                newEntries,\n                calculateShownEntries(newEntries),\n                _entryList.getErrorCardInfo()\n        ));\n    }\n\n    @Override\n    public int getItemViewType(int position) {\n        if (_entryList.isPositionErrorCard(position)) {\n            return R.layout.card_error;\n        }\n\n        if (_entryList.isPositionFooter(position)) {\n            return R.layout.card_footer;\n        }\n\n        return _viewMode.getLayoutId();\n    }\n\n    @Override\n    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {\n        LayoutInflater inflater = LayoutInflater.from(parent.getContext());\n\n        RecyclerView.ViewHolder holder;\n        View view = inflater.inflate(viewType, parent, false);\n\n        if (viewType == R.layout.card_error) {\n            holder = new ErrorCardHolder(view, Objects.requireNonNull(_entryList.getErrorCardInfo()));\n        }  else if (viewType == R.layout.card_footer) {\n            holder = new FooterView(view);\n        } else {\n            holder = new EntryHolder(view);\n        }\n\n        if (_showIcon && holder instanceof EntryHolder) {\n            _view.setPreloadView(((EntryHolder) holder).getIconView());\n        }\n\n        return holder;\n    }\n\n    @Override\n    public void onViewRecycled(RecyclerView.ViewHolder holder) {\n        if (holder instanceof EntryHolder) {\n            ((EntryHolder) holder).stopRefreshLoop();\n            _holders.remove(holder);\n        }\n    }\n\n    @Override\n    public void onBindViewHolder(final RecyclerView.ViewHolder holder, int position) {\n        if (holder instanceof EntryHolder) {\n            EntryHolder entryHolder = (EntryHolder) holder;\n            int index = _entryList.translateEntryPosToIndex(position);\n            VaultEntry entry = _entryList.getShownEntries().get(index);\n\n            boolean hidden = _tapToReveal && !entry.equals(_focusedEntry);\n            boolean paused = _pauseFocused && entry.equals(_focusedEntry);\n            boolean dimmed = (_highlightEntry || _tempHighlightEntry) && _focusedEntry != null && !_focusedEntry.equals(entry);\n            boolean showProgress = entry.getInfo() instanceof TotpInfo && ((TotpInfo) entry.getInfo()).getPeriod() != getMostFrequentPeriod();\n            boolean showAccountName = true;\n            if (_onlyShowNecessaryAccountNames) {\n                // Only show account name when there's multiple entries found with the same issuer.\n                showAccountName = _entryList.getEntries().stream()\n                        .filter(x -> x.getIssuer().equals(entry.getIssuer()))\n                        .count() > 1;\n            }\n\n            AccountNamePosition accountNamePosition = showAccountName ? _accountNamePosition : AccountNamePosition.HIDDEN;\n            entryHolder.setData(entry, _codeGroupSize, _viewMode, accountNamePosition, _showIcon, showProgress, hidden, paused, dimmed, _showExpirationState, _showNextCode);\n            entryHolder.setFocused(_selectedEntries.contains(entry));\n            entryHolder.setShowDragHandle(isEntryDraggable(entry));\n\n            if (_showIcon) {\n                entryHolder.loadIcon(_view);\n            }\n\n            entryHolder.itemView.setOnClickListener(new View.OnClickListener() {\n                @Override\n                public void onClick(View v) {\n                    boolean handled = false;\n\n                    if (_selectedEntries.isEmpty()) {\n                        if (_highlightEntry || _tempHighlightEntry || _tapToReveal) {\n                            if (_focusedEntry != null && _focusedEntry.equals(entry)) {\n                                resetFocus();\n                            } else {\n                                focusEntry(entry, _tapToRevealTime);\n\n                                // Prevent copying when singletap is set and the entry is being revealed\n                                handled = _copyBehavior == CopyBehavior.SINGLETAP && _tapToReveal;\n                            }\n                        }\n\n                        switch (_copyBehavior) {\n                            case SINGLETAP:\n                                if (!handled) {\n                                    _view.onEntryCopy(entry);\n                                    entryHolder.animateCopyText();\n                                    _clickedEntry = null;\n                                }\n                                break;\n                            case DOUBLETAP:\n                                _doubleTapHandler.postDelayed(() -> _clickedEntry = null, ViewConfiguration.getDoubleTapTimeout());\n\n                                if(entry == _clickedEntry) {\n                                    _view.onEntryCopy(entry);\n                                    entryHolder.animateCopyText();\n                                    _clickedEntry = null;\n                                } else {\n                                    _clickedEntry = entry;\n                                }\n                                break;\n                        }\n\n                        incrementUsageCount(entry);\n                    } else {\n                        if (_selectedEntries.contains(entry)) {\n                            _view.onDeselect(entry);\n                            removeSelectedEntry(entry);\n                            entryHolder.setFocusedAndAnimate(false);\n                        } else {\n                            entryHolder.setFocusedAndAnimate(true);\n                            addSelectedEntry(entry);\n                            _view.onSelect(entry);\n                        }\n                    }\n\n                    if (!handled) {\n                        _view.onEntryClick(entry);\n                    }\n                }\n            });\n            entryHolder.itemView.setOnLongClickListener(new View.OnLongClickListener() {\n                @Override\n                public boolean onLongClick(View v) {\n                    int position = holder.getBindingAdapterPosition();\n                    if (_selectedEntries.isEmpty()) {\n                        entryHolder.setFocusedAndAnimate(true);\n                    }\n\n                    int index = _entryList.translateEntryPosToIndex(position);\n                    boolean returnVal = _view.onLongEntryClick(_entryList.getShownEntries().get(index));\n                    if (_selectedEntries.size() == 0 || isEntryDraggable(entry)) {\n                        _view.startDrag(entryHolder);\n                    }\n\n                    return returnVal;\n                }\n            });\n            entryHolder.itemView.setOnTouchListener(new View.OnTouchListener() {\n                @Override\n                public boolean onTouch(View v, MotionEvent event) {\n                    // Start drag if this is the only item selected\n                    if (event.getActionMasked() == MotionEvent.ACTION_MOVE\n                            && isEntryDraggable(entryHolder.getEntry())) {\n                        _view.startDrag(entryHolder);\n                        return true;\n                    }\n                    return false;\n                }\n            });\n            entryHolder.setOnRefreshClickListener(new View.OnClickListener() {\n                @Override\n                public void onClick(View v) {\n                    // this will only be called if the entry is of type HotpInfo\n                    try {\n                        ((HotpInfo) entry.getInfo()).incrementCounter();\n                        focusEntry(entry, _tapToRevealTime);\n                    } catch (OtpInfoException e) {\n                        throw new RuntimeException(e);\n                    }\n\n                    // notify the listener that the counter has been incremented\n                    // this gives it a chance to save the vault\n                    _view.onEntryChange(entry);\n\n                    // finally, refresh the code in the UI\n                    entryHolder.refreshCode();\n                }\n            });\n\n            _holders.add(entryHolder);\n        } else if (holder instanceof FooterView) {\n            ((FooterView) holder).refresh();\n        }\n    }\n\n    private void updatePeriodUniformity() {\n        int mostFrequentPeriod = getMostFrequentPeriod();\n        boolean uniform = isPeriodUniform();\n        if (uniform == _isPeriodUniform && mostFrequentPeriod == _uniformPeriod) {\n            return;\n        }\n\n        _isPeriodUniform = uniform;\n        _uniformPeriod = mostFrequentPeriod;\n\n        for (EntryHolder holder : _holders) {\n            if ((holder.getEntry().getInfo() instanceof TotpInfo)) {\n                holder.setShowProgress(((TotpInfo) holder.getEntry().getInfo()).getPeriod() != mostFrequentPeriod);\n            }\n        }\n\n        _view.onPeriodUniformityChanged(_isPeriodUniform, _uniformPeriod);\n    }\n\n    public int getMostFrequentPeriod() {\n        List<TotpInfo> infos = new ArrayList<>();\n        for (VaultEntry entry : _entryList.getShownEntries()) {\n            OtpInfo info = entry.getInfo();\n            if (info instanceof TotpInfo) {\n                infos.add((TotpInfo) info);\n            }\n        }\n\n        if (infos.isEmpty()) {\n            return -1;\n        }\n\n        if (infos.size() == 1) {\n            return infos.get(0).getPeriod();\n        }\n\n        Map<Integer, Integer> occurrences = new HashMap<>();\n        for (TotpInfo info : infos) {\n            int period = info.getPeriod();\n            if(occurrences.containsKey(period)) {\n                occurrences.put(period, occurrences.get(period) + 1);\n            } else {\n                occurrences.put(period, 1);\n            }\n        }\n\n        Integer maxValue = 0;\n        Integer maxKey = 0;\n        for (Map.Entry<Integer, Integer> entry : occurrences.entrySet()){\n            if(entry.getValue() > maxValue){\n                maxValue = entry.getValue();\n                maxKey = entry.getKey();\n            }\n        }\n\n        return maxValue > 1 ? maxKey : -1;\n    }\n\n    public void focusEntry(VaultEntry entry, int secondsToFocus) {\n        _focusedEntry = entry;\n        _dimHandler.removeCallbacksAndMessages(null);\n\n        for (EntryHolder holder : _holders) {\n            if (!holder.getEntry().equals(_focusedEntry)) {\n                if (_highlightEntry || _tempHighlightEntry) {\n                    holder.dim();\n                }\n                if (_tapToReveal) {\n                    holder.hideCode();\n                }\n                if (_pauseFocused) {\n                    holder.setPaused(false);\n                }\n            } else {\n                if (_highlightEntry || _tempHighlightEntry) {\n                    holder.highlight();\n                }\n                if (_tapToReveal) {\n                    holder.revealCode();\n                }\n                if (_pauseFocused) {\n                    holder.setPaused(true);\n                }\n            }\n        }\n\n        _dimHandler.postDelayed(this::resetFocus, secondsToFocus * 1000);\n    }\n\n    private void resetFocus() {\n        for (EntryHolder holder : _holders) {\n            if (_focusedEntry != null) {\n                holder.highlight();\n            }\n            if (_tapToReveal) {\n                holder.hideCode();\n            }\n            if (_pauseFocused) {\n                holder.setPaused(false);\n            }\n        }\n\n        _focusedEntry = null;\n        _tempHighlightEntry = false;\n    }\n\n    private void updateDraggableStatus() {\n        for (EntryHolder holder : _holders) {\n            VaultEntry entry = holder.getEntry();\n            if (isEntryDraggable(entry)) {\n                holder.setShowDragHandle(true);\n                _view.setSelectedEntry(entry);\n                break;\n            }\n\n            holder.setShowDragHandle(false);\n        }\n    }\n\n    public void removeSelectedEntry(VaultEntry entry) {\n        _selectedEntries.remove(entry);\n        updateDraggableStatus();\n    }\n\n    public void addSelectedEntry(VaultEntry entry) {\n        if (_focusedEntry != null) {\n            resetFocus();\n        }\n\n        _selectedEntries.add(entry);\n        updateDraggableStatus();\n    }\n\n    public List<VaultEntry> selectAllEntries() {\n        _selectedEntries.clear();\n\n        for (VaultEntry entry: _entryList.getShownEntries()) {\n            for (EntryHolder holder: _holders) {\n                if (holder.getEntry().equals(entry)) {\n                    holder.setFocused(true);\n                }\n            }\n\n            _selectedEntries.add(entry);\n            updateDraggableStatus();\n        }\n\n        return new ArrayList<>(_selectedEntries);\n    }\n\n    public void deselectAllEntries() {\n        for (VaultEntry entry: _selectedEntries) {\n            for (EntryHolder holder : _holders) {\n                if (holder.getEntry().equals(entry)) {\n                    holder.setFocusedAndAnimate(false);\n                    break;\n                }\n            }\n        }\n\n        _selectedEntries.clear();\n\n        updateDraggableStatus();\n    }\n\n    private void incrementUsageCount(VaultEntry entry) {\n        if (!_usageCounts.containsKey(entry.getUUID())) {\n            _usageCounts.put(entry.getUUID(), 1);\n        } else {\n            int usageCount = _usageCounts.get(entry.getUUID());\n            _usageCounts.put(entry.getUUID(), ++usageCount);\n        }\n\n        _lastUsedTimestamps.put(entry.getUUID(), new Date().getTime());\n    }\n\n    public boolean isDragAndDropAllowed() {\n        return _sortCategory == SortCategory.CUSTOM && _groupFilter.isEmpty() && _searchFilter == null;\n    }\n\n    public boolean isPeriodUniform() {\n        return isPeriodUniform(getMostFrequentPeriod());\n    }\n\n    private static boolean isPeriodUniform(int period) {\n        return period != -1;\n    }\n\n    @Override\n    public int getItemCount() {\n        return _entryList.getItemCount();\n    }\n\n    public int getShownEntriesCount() {\n        return _entryList.getShownEntries().size();\n    }\n\n    public boolean isPositionFooter(int position) {\n        return _entryList.isPositionFooter(position);\n    }\n\n    public boolean isPositionErrorCard(int position) {\n        return _entryList.isPositionErrorCard(position);\n    }\n\n    public boolean isErrorCardShown() {\n        return _entryList.isErrorCardShown();\n    }\n\n    private class FooterView extends RecyclerView.ViewHolder {\n        View _footerView;\n\n        public FooterView(@NonNull View itemView) {\n            super(itemView);\n            _footerView = itemView;\n        }\n\n        public void refresh() {\n            int entriesShown = getShownEntriesCount();\n            SpannableString entriesShownSpannable = new SpannableString(_footerView.getResources().getQuantityString(R.plurals.entries_shown, entriesShown, entriesShown));\n\n            String entriesShownString = String.format(\"%d\", entriesShown);\n            int spanStart = entriesShownSpannable.toString().indexOf(entriesShownString);\n            if (spanStart >= 0) {\n                int spanEnd = spanStart + entriesShownString.length();\n                entriesShownSpannable.setSpan(new StyleSpan(Typeface.BOLD), spanStart, spanEnd, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);\n            }\n\n            TextView textView = _footerView.findViewById(R.id.entries_shown_count);\n            textView.setText(entriesShownSpannable);\n        }\n    }\n\n    private static class EntryList {\n        private final List<VaultEntry> _entries;\n        private final List<VaultEntry> _shownEntries;\n        private final ErrorCardInfo _errorCardInfo;\n\n        public EntryList() {\n            this(new ArrayList<>(), new ArrayList<>(), null);\n        }\n\n        public EntryList(\n                @NonNull List<VaultEntry> entries,\n                @NonNull List<VaultEntry> shownEntries,\n                @Nullable ErrorCardInfo errorCardInfo\n        ) {\n            _entries = entries;\n            _shownEntries = shownEntries;\n            _errorCardInfo = errorCardInfo;\n        }\n\n        public List<VaultEntry> getEntries() {\n            return _entries;\n        }\n\n        public List<VaultEntry> getShownEntries() {\n            return _shownEntries;\n        }\n\n        public int getItemCount() {\n            // Always at least one item because of the footer\n            // Two in case there's also an error card\n            int baseCount = 1;\n            if (isErrorCardShown()) {\n                baseCount++;\n            }\n\n            return baseCount + getShownEntries().size();\n        }\n\n        @Nullable\n        public ErrorCardInfo getErrorCardInfo() {\n            return _errorCardInfo;\n        }\n\n        public boolean isErrorCardShown() {\n            return _errorCardInfo != null;\n        }\n\n        public boolean isPositionErrorCard(int position) {\n            return isErrorCardShown() && position == 0;\n        }\n\n        public boolean isPositionFooter(int position) {\n            return position == (getItemCount() - 1);\n        }\n\n        /**\n         * Translates the given entry position in the recycler view, to its index in the shown entries list.\n         */\n        public int translateEntryPosToIndex(int position) {\n            if (position == NO_POSITION) {\n                return NO_POSITION;\n            }\n\n            if (isErrorCardShown()) {\n                position -= 1;\n            }\n\n            return position;\n        }\n\n        /**\n         * Translates the given entry index in the shown entries list, to its position in the recycler view.\n         */\n        public int translateEntryIndexToPos(int index) {\n            if (index == NO_POSITION) {\n                return NO_POSITION;\n            }\n\n            if (isErrorCardShown()) {\n                index += 1;\n            }\n\n            return index;\n        }\n\n    }\n\n    private static class DiffCallback extends DiffUtil.Callback {\n        private final EntryList _old;\n        private final EntryList _new;\n\n        public DiffCallback(EntryList oldList, EntryList newList) {\n            _old = oldList;\n            _new = newList;\n        }\n\n        @Override\n        public int getOldListSize() {\n            return _old.getItemCount();\n        }\n\n        @Override\n        public int getNewListSize() {\n            return _new.getItemCount();\n        }\n\n        @Override\n        public boolean areItemsTheSame(int oldItemPosition, int newItemPosition) {\n            if (_old.isPositionErrorCard(oldItemPosition) != _new.isPositionErrorCard(newItemPosition)\n                    || _old.isPositionFooter(oldItemPosition) != _new.isPositionFooter(newItemPosition)) {\n                return false;\n            }\n\n            if ((_old.isPositionFooter(oldItemPosition) && _new.isPositionFooter(newItemPosition))\n                    || (_old.isPositionErrorCard(oldItemPosition) && _new.isPositionErrorCard(newItemPosition))) {\n                return true;\n            }\n\n            int oldEntryIndex = _old.translateEntryPosToIndex(oldItemPosition);\n            int newEntryIndex = _new.translateEntryPosToIndex(newItemPosition);\n            if (oldEntryIndex < 0 || newEntryIndex < 0) {\n                return false;\n            }\n\n            return _old.getShownEntries().get(oldEntryIndex).getUUID()\n                    .equals(_new.getShownEntries().get(newEntryIndex).getUUID());\n        }\n\n        @Override\n        public boolean areContentsTheSame(int oldItemPosition, int newItemPosition) {\n            if (_old.isPositionFooter(oldItemPosition) && _new.isPositionFooter(newItemPosition)) {\n                return _old.getShownEntries().size() == _new.getShownEntries().size();\n            }\n\n            if (_old.isPositionErrorCard(oldItemPosition) && _new.isPositionErrorCard(newItemPosition)) {\n                return Objects.equals(_old.getErrorCardInfo(), _new.getErrorCardInfo());\n            }\n\n            int oldEntryIndex = _old.translateEntryPosToIndex(oldItemPosition);\n            int newEntryIndex = _new.translateEntryPosToIndex(newItemPosition);\n            return _old.getShownEntries().get(oldEntryIndex)\n                    .equals(_new.getShownEntries().get(newEntryIndex));\n        }\n    }\n\n    public interface Listener {\n        void onEntryClick(VaultEntry entry);\n        boolean onLongEntryClick(VaultEntry entry);\n        void onEntryMove(VaultEntry entry1, VaultEntry entry2);\n        void onEntryDrop(VaultEntry entry);\n        void onEntryChange(VaultEntry entry);\n        void onEntryCopy(VaultEntry entry);\n        void onPeriodUniformityChanged(boolean uniform, int period);\n        void onSelect(VaultEntry entry);\n        void onDeselect(VaultEntry entry);\n        void onListChange();\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/ui/views/EntryHolder.java",
    "content": "package com.beemdevelopment.aegis.ui.views;\n\nimport android.animation.AnimatorSet;\nimport android.animation.ArgbEvaluator;\nimport android.animation.ObjectAnimator;\nimport android.animation.ValueAnimator;\nimport android.graphics.Paint;\nimport android.graphics.Rect;\nimport android.os.Build;\nimport android.os.Handler;\nimport android.text.Spannable;\nimport android.text.SpannableString;\nimport android.text.style.RelativeSizeSpan;\nimport android.view.Gravity;\nimport android.view.View;\nimport android.view.ViewGroup;\nimport android.view.animation.Animation;\nimport android.widget.ImageView;\nimport android.widget.RelativeLayout;\nimport android.widget.TextView;\n\nimport androidx.fragment.app.Fragment;\nimport androidx.recyclerview.widget.RecyclerView;\n\nimport com.beemdevelopment.aegis.AccountNamePosition;\nimport com.beemdevelopment.aegis.Preferences;\nimport com.beemdevelopment.aegis.R;\nimport com.beemdevelopment.aegis.ViewMode;\nimport com.beemdevelopment.aegis.helpers.AnimationsHelper;\nimport com.beemdevelopment.aegis.helpers.CenterVerticalSpan;\nimport com.beemdevelopment.aegis.helpers.SimpleAnimationEndListener;\nimport com.beemdevelopment.aegis.helpers.UiRefresher;\nimport com.beemdevelopment.aegis.otp.HotpInfo;\nimport com.beemdevelopment.aegis.otp.OtpInfo;\nimport com.beemdevelopment.aegis.otp.OtpInfoException;\nimport com.beemdevelopment.aegis.otp.SteamInfo;\nimport com.beemdevelopment.aegis.otp.TotpInfo;\nimport com.beemdevelopment.aegis.otp.YandexInfo;\nimport com.beemdevelopment.aegis.ui.glide.GlideHelper;\nimport com.beemdevelopment.aegis.vault.VaultEntry;\nimport com.bumptech.glide.Glide;\nimport com.google.android.material.card.MaterialCardView;\nimport com.google.android.material.color.MaterialColors;\n\npublic class EntryHolder extends RecyclerView.ViewHolder {\n    private static final float DEFAULT_ALPHA = 1.0f;\n    private static final float DIMMED_ALPHA = 0.2f;\n    private static final char HIDDEN_CHAR = '●';\n\n    private View _favoriteIndicator;\n    private TextView _profileName;\n    private TextView _profileCode;\n    private TextView _nextProfileCode;\n    private TextView _profileIssuer;\n    private TextView _profileCopied;\n    private ImageView _profileDrawable;\n    private VaultEntry _entry;\n    private ImageView _buttonRefresh;\n    private RelativeLayout _description;\n    private ImageView _dragHandle;\n    private ViewMode _viewMode;\n\n    private final ImageView _selected;\n\n    private Preferences.CodeGrouping _codeGrouping = Preferences.CodeGrouping.NO_GROUPING;\n    private AccountNamePosition _accountNamePosition = AccountNamePosition.HIDDEN;\n\n    private boolean _hidden;\n    private boolean _paused;\n    private TotpProgressBar _progressBar;\n    private MaterialCardView _view;\n\n    private UiRefresher _refresher;\n    private Handler _copyAnimationHandler;\n    private Handler _expirationHandler;\n    private AnimatorSet _expirationAnimSet;\n    private boolean _showNextCode;\n    private boolean _showExpirationState;\n\n    private Animation _scaleIn;\n    private Animation _scaleOut;\n\n    public EntryHolder(final View view) {\n        super(view);\n\n        _view = (MaterialCardView) view;\n        _profileName = view.findViewById(R.id.profile_account_name);\n        _profileCode = view.findViewById(R.id.profile_code);\n        _nextProfileCode = view.findViewById(R.id.next_profile_code);\n        _profileIssuer = view.findViewById(R.id.profile_issuer);\n        _profileCopied = view.findViewById(R.id.profile_copied);\n        _description = view.findViewById(R.id.description);\n        _profileDrawable = view.findViewById(R.id.ivTextDrawable);\n        _buttonRefresh = view.findViewById(R.id.buttonRefresh);\n        _selected = view.findViewById(R.id.ivSelected);\n        _dragHandle = view.findViewById(R.id.drag_handle);\n        _favoriteIndicator = view.findViewById(R.id.favorite_indicator);\n\n        _copyAnimationHandler = new Handler();\n        _expirationHandler = new Handler();\n\n        _progressBar = view.findViewById(R.id.progressBar);\n\n        _scaleIn = AnimationsHelper.loadScaledAnimation(view.getContext(), R.anim.item_scale_in);\n        _scaleOut = AnimationsHelper.loadScaledAnimation(view.getContext(), R.anim.item_scale_out);\n\n        _refresher = new UiRefresher(new UiRefresher.Listener() {\n            @Override\n            public void onRefresh() {\n                refreshCode();\n            }\n\n            @Override\n            public void onExpiring() { }\n\n            @Override\n            public long getMillisTillNextRefresh() {\n                return ((TotpInfo) _entry.getInfo()).getMillisTillNextRotation();\n            }\n\n            @Override\n            public long getPeriodMillis() {\n                return ((TotpInfo) _entry.getInfo()).getPeriod() * 1000L;\n            }\n        });\n    }\n\n    public void setData(VaultEntry entry, Preferences.CodeGrouping groupSize, ViewMode viewMode, AccountNamePosition accountNamePosition, boolean showIcon, boolean nonUniform, boolean hidden, boolean paused, boolean dimmed, boolean showExpirationState, boolean showNextCode) {\n        _entry = entry;\n        _hidden = hidden;\n        _paused = paused;\n        _codeGrouping = groupSize;\n        _viewMode = viewMode;\n\n        _accountNamePosition = accountNamePosition;\n        if (viewMode.equals(ViewMode.TILES) && _accountNamePosition == AccountNamePosition.END) {\n            _accountNamePosition = AccountNamePosition.BELOW;\n        }\n\n        _selected.clearAnimation();\n        _selected.setVisibility(View.GONE);\n        _copyAnimationHandler.removeCallbacksAndMessages(null);\n        _expirationHandler.removeCallbacksAndMessages(null);\n        _showNextCode = entry.getInfo() instanceof TotpInfo && showNextCode;\n        _showExpirationState = _entry.getInfo() instanceof TotpInfo && showExpirationState;\n\n        _favoriteIndicator.setVisibility(_entry.isFavorite() ? View.VISIBLE : View.INVISIBLE);\n\n        // only show the progress bar if there is no uniform period and the entry type is TotpInfo\n        setShowProgress(nonUniform);\n\n        // only show the button if this entry is of type HotpInfo\n        _buttonRefresh.setVisibility(entry.getInfo() instanceof HotpInfo ? View.VISIBLE : View.GONE);\n        _nextProfileCode.setVisibility(_showNextCode ? View.VISIBLE : View.GONE);\n\n        String profileIssuer = entry.getIssuer();\n        String profileName = entry.getName();\n        if (!profileIssuer.isEmpty() && !profileName.isEmpty() && _accountNamePosition == AccountNamePosition.END) {\n            profileName = _viewMode.getFormattedAccountName(profileName);\n        }\n        _profileIssuer.setText(profileIssuer);\n        _profileName.setText(profileName);\n        setAccountNameLayout(_accountNamePosition, !profileIssuer.isEmpty() && !profileName.isEmpty());\n\n        if (_hidden) {\n            hideCode();\n        } else if (!_paused) {\n            refreshCode();\n        }\n\n        showIcon(showIcon);\n        itemView.setAlpha(dimmed ? DIMMED_ALPHA : DEFAULT_ALPHA);\n    }\n\n    private void setAccountNameLayout(AccountNamePosition accountNamePosition, Boolean hasBothIssuerAndName) {\n        RelativeLayout.LayoutParams profileNameLayoutParams;\n\n        switch (accountNamePosition) {\n            case HIDDEN:\n                _profileName.setVisibility(View.GONE);\n\n                if (_viewMode == ViewMode.TILES) {\n                    _profileCopied.setGravity(Gravity.CENTER_VERTICAL);\n                    ((RelativeLayout.LayoutParams)_profileCopied.getLayoutParams()).removeRule(RelativeLayout.BELOW);\n                    _profileCopied.getLayoutParams().height = ViewGroup.LayoutParams.MATCH_PARENT;\n                    _profileCopied.setTextSize(14);\n\n                    _profileIssuer.getLayoutParams().height = ViewGroup.LayoutParams.MATCH_PARENT;\n                    _profileIssuer.setGravity(Gravity.CENTER_VERTICAL);\n                    _profileIssuer.setTextSize(14);\n\n                    _profileName.setVisibility(View.GONE);\n                }\n\n                break;\n\n            case BELOW:\n                profileNameLayoutParams = (RelativeLayout.LayoutParams) _profileName.getLayoutParams();\n                profileNameLayoutParams.removeRule(RelativeLayout.END_OF);\n                profileNameLayoutParams.addRule(RelativeLayout.BELOW, R.id.profile_issuer);\n                profileNameLayoutParams.setMarginStart(0);\n                _profileName.setLayoutParams(profileNameLayoutParams);\n                _profileName.setVisibility(View.VISIBLE);\n                break;\n\n            case END:\n            default:\n                profileNameLayoutParams = (RelativeLayout.LayoutParams) _profileName.getLayoutParams();\n                profileNameLayoutParams.addRule(RelativeLayout.END_OF, R.id.profile_issuer);\n                profileNameLayoutParams.removeRule(RelativeLayout.BELOW);\n                if (hasBothIssuerAndName) {\n                    profileNameLayoutParams.setMarginStart(24);\n                }\n                _profileName.setLayoutParams(profileNameLayoutParams);\n                _profileName.setVisibility(View.VISIBLE);\n                break;\n        }\n    }\n\n    public VaultEntry getEntry() {\n        return _entry;\n    }\n\n    public void loadIcon(Fragment fragment) {\n        GlideHelper.loadEntryIcon(Glide.with(fragment), _entry, _profileDrawable);\n    }\n\n    public ImageView getIconView() {\n        return _profileDrawable;\n    }\n\n    public void setOnRefreshClickListener(View.OnClickListener listener) {\n        _buttonRefresh.setOnClickListener(listener);\n    }\n\n    public void setShowDragHandle(boolean showDragHandle) {\n        if (showDragHandle) {\n            _dragHandle.setVisibility(View.VISIBLE);\n        } else {\n            _dragHandle.setVisibility(View.INVISIBLE);\n        }\n    }\n\n    public void setShowProgress(boolean showProgress) {\n        if (_entry.getInfo() instanceof HotpInfo) {\n            showProgress = false;\n        }\n\n        _progressBar.setVisibility(showProgress ? View.VISIBLE : View.GONE);\n        if (showProgress) {\n            _progressBar.setPeriod(((TotpInfo) _entry.getInfo()).getPeriod());\n            startRefreshLoop();\n        } else {\n            stopRefreshLoop();\n        }\n    }\n\n    public void setFocused(boolean focused) {\n        if (focused) {\n            _selected.setVisibility(View.VISIBLE);\n        }\n        _view.setChecked(focused);\n    }\n\n    public void setFocusedAndAnimate(boolean focused) {\n        setFocused(focused);\n\n        if (focused) {\n            _selected.startAnimation(_scaleIn);\n        } else {\n            _selected.startAnimation(_scaleOut);\n            _scaleOut.setAnimationListener(new SimpleAnimationEndListener(animation -> {\n                _selected.setVisibility(View.GONE);\n            }));\n        }\n    }\n\n    public void destroy() {\n        _refresher.destroy();\n    }\n\n    public void startRefreshLoop() {\n        _refresher.start();\n        _progressBar.start();\n    }\n\n    public void stopRefreshLoop() {\n        _refresher.stop();\n        _progressBar.stop();\n    }\n\n    public void refresh() {\n        _progressBar.restart();\n        refreshCode();\n    }\n\n    public void refreshCode() {\n        if (!_hidden && !_paused) {\n            updateCodes();\n            startExpirationAnimation();\n        }\n    }\n\n    private void updateCodes() {\n        _profileCode.setText(getOtp());\n\n        if (_showNextCode) {\n            _nextProfileCode.setText(getOtp(1));\n        }\n    }\n\n    private String getOtp() {\n        return getOtp(0);\n    }\n\n    private String getOtp(int offset) {\n        OtpInfo info = _entry.getInfo();\n\n        // In previous versions of Aegis, it was possible to import entries with an empty\n        // secret. Attempting to generate OTP's for such entries would result in a crash.\n        // In case we encounter an old entry that has this issue, we display \"ERROR\" as\n        // the OTP, instead of crashing.\n        String otp;\n        try {\n            if (info instanceof TotpInfo) {\n                otp = ((TotpInfo)info).getOtp((System.currentTimeMillis() / 1000) + ((long) (offset) * ((TotpInfo) _entry.getInfo()).getPeriod()));\n            } else {\n                otp = info.getOtp();\n            }\n\n            if (!(info instanceof SteamInfo || info instanceof YandexInfo)) {\n                otp = formatCode(otp);\n            }\n        } catch (OtpInfoException e) {\n            otp = _view.getResources().getString(R.string.error_all_caps);\n        }\n\n        return otp;\n    }\n\n    private String formatCode(String code) {\n        int groupSize;\n        StringBuilder sb = new StringBuilder();\n\n        switch (_codeGrouping) {\n            case NO_GROUPING:\n                groupSize = code.length();\n                break;\n            case HALVES:\n                groupSize = (code.length() / 2) + (code.length() % 2);\n                break;\n            default:\n                groupSize = _codeGrouping.getValue();\n                if (groupSize <= 0) {\n                    throw new IllegalArgumentException(\"Code group size cannot be zero or negative\");\n                }\n        }\n\n        for (int i = 0; i < code.length(); i++) {\n            if (i != 0 && i % groupSize == 0) {\n                sb.append(\" \");\n            }\n            sb.append(code.charAt(i));\n        }\n        code = sb.toString();\n\n        return code;\n    }\n\n    public void revealCode() {\n        updateCodes();\n        startExpirationAnimation();\n        _hidden = false;\n    }\n\n    public void hideCode() {\n        String code = getOtp();\n        String hiddenText = code.replaceAll(\"\\\\S\", Character.toString(HIDDEN_CHAR));\n        stopExpirationAnimation();\n\n        updateTextViewWithDots(_profileCode,  hiddenText, code);\n        updateTextViewWithDots(_nextProfileCode,  hiddenText, code);\n\n        _hidden = true;\n    }\n\n    private void updateTextViewWithDots(TextView textView, String hiddenCode, String code) {\n        Paint paint = new Paint();\n        paint.setTextSize(_profileCode.getTextSize());\n\n        // Calculate the difference between the actual code width and the dots width\n        float codeWidth = paint.measureText(code);\n        float dotsWidth = paint.measureText(hiddenCode);\n        float scaleFactor = codeWidth / dotsWidth;\n        scaleFactor = (float)(Math.round(scaleFactor * 10.0) / 10.0);\n        textView.setTextColor(MaterialColors.getColor(textView, R.attr.colorCodeHidden));\n\n        // If scale is higher or equal to 0.8, do nothing and proceed with the normal text rendering\n        if (scaleFactor >= 0.8) {\n            textView.setText(hiddenCode);\n            return;\n        }\n\n        // We need to use an invisible character in order to get the height of the profileCode textview consistent\n        // Tokens without a space (ie Steam TOTP) will get misaligned without this\n        SpannableString dotsString = new SpannableString(\"\\u200B\" + hiddenCode);\n\n        // Only scale the digits/characters, skip the spaces\n        int start = 1;\n        for (int i = 0; i <= dotsString.length(); i++) {\n            if (i == dotsString.length() || dotsString.charAt(i) == ' ') {\n                if (i > start) {\n                    dotsString.setSpan(new RelativeSizeSpan(scaleFactor), start, i, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);\n                }\n\n                start = i + 1;\n            }\n        }\n\n        Rect dotsRectBounds = new Rect();\n        paint.getTextBounds(hiddenCode, 1, hiddenCode.length(), dotsRectBounds);\n\n        // Use custom CenterVerticalSpan to make sure the dots are vertically aligned\n        dotsString.setSpan(new CenterVerticalSpan(dotsRectBounds), 1, dotsString.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);\n        textView.setText(dotsString);\n    }\n\n    public void startExpirationAnimation() {\n        stopExpirationAnimation();\n        if (!_showExpirationState) {\n            return;\n        }\n\n        final int totalStateDuration = 7000;\n        TotpInfo info = (TotpInfo) _entry.getInfo();\n        if (info.getPeriod() * 1000 <= totalStateDuration) {\n            _profileCode.setTextColor(MaterialColors.getColor(_profileCode, com.google.android.material.R.attr.colorError));\n            return;\n        }\n\n        // Workaround for when animations are disabled or Android version being too old\n        float durationScale = AnimationsHelper.Scale.ANIMATOR.getValue(itemView.getContext());\n        if (durationScale == 0.0 || Build.VERSION.SDK_INT < Build.VERSION_CODES.O) {\n            int color = MaterialColors.getColor(_profileCode, com.google.android.material.R.attr.colorError);\n            if (info.getMillisTillNextRotation() < totalStateDuration) {\n                _profileCode.setTextColor(color);\n            } else {\n                _expirationHandler.postDelayed(() -> {\n                    _profileCode.setTextColor(color);\n                }, info.getMillisTillNextRotation() - totalStateDuration);\n            }\n\n            return;\n        }\n\n        final int colorShiftDuration = 300;\n        long delayAnimDuration = info.getPeriod() * 1000L - totalStateDuration - colorShiftDuration;\n        ValueAnimator delayAnim = ValueAnimator.ofFloat(0f, 0f);\n        delayAnim.setDuration((long) (delayAnimDuration / durationScale));\n\n        int colorFrom = _profileCode.getCurrentTextColor();\n        int colorTo = MaterialColors.getColor(_profileCode, com.google.android.material.R.attr.colorError);\n        ValueAnimator colorAnim = ValueAnimator.ofObject(new ArgbEvaluator(), colorFrom, colorTo);\n        colorAnim.setDuration((long) (colorShiftDuration / durationScale));\n        colorAnim.addUpdateListener(a -> _profileCode.setTextColor((int) a.getAnimatedValue()));\n\n        final int blinkDuration = 3000;\n        ValueAnimator delayAnim2 = ValueAnimator.ofFloat(0f, 0f);\n        delayAnim2.setDuration((long) ((totalStateDuration - blinkDuration) / durationScale));\n\n        ObjectAnimator alphaAnim = ObjectAnimator.ofFloat(_profileCode, \"alpha\", 1f, .5f);\n        alphaAnim.setDuration((long) (500 / durationScale));\n        alphaAnim.setRepeatCount(blinkDuration / 500 - 1);\n        alphaAnim.setRepeatMode(ValueAnimator.REVERSE);\n\n        _expirationAnimSet = new AnimatorSet();\n        _expirationAnimSet.playSequentially(delayAnim, colorAnim, delayAnim2, alphaAnim);\n        _expirationAnimSet.start();\n        long currentPlayTime = (info.getPeriod() * 1000L) - info.getMillisTillNextRotation();\n        _expirationAnimSet.setCurrentPlayTime((long) (currentPlayTime / durationScale));\n    }\n\n    private void stopExpirationAnimation() {\n        _expirationHandler.removeCallbacksAndMessages(null);\n        if (_expirationAnimSet != null) {\n            _expirationAnimSet.cancel();\n            _expirationAnimSet = null;\n        }\n\n        int colorTo = MaterialColors.getColor(_profileCode, R.attr.colorCode);\n        _profileCode.setTextColor(colorTo);\n        _profileCode.setAlpha(1f);\n    }\n\n    public void showIcon(boolean show) {\n        if (show) {\n            _profileDrawable.setVisibility(View.VISIBLE);\n        } else {\n            _profileDrawable.setVisibility(View.GONE);\n        }\n    }\n\n    public boolean isHidden() {\n        return _hidden;\n    }\n\n    public void setPaused(boolean paused) {\n        _paused = paused;\n\n        if (_paused) {\n            stopExpirationAnimation();\n        } else if (!_hidden) {\n            updateCodes();\n            startExpirationAnimation();\n        }\n    }\n\n    public void dim() {\n        animateAlphaTo(DIMMED_ALPHA);\n    }\n\n    public void highlight() {\n        animateAlphaTo(DEFAULT_ALPHA);\n    }\n\n    public void animateCopyText() {\n        _copyAnimationHandler.removeCallbacksAndMessages(null);\n\n        Animation slideDownFadeIn = AnimationsHelper.loadScaledAnimation(itemView.getContext(), R.anim.slide_down_fade_in);\n        Animation slideDownFadeOut = AnimationsHelper.loadScaledAnimation(itemView.getContext(), R.anim.slide_down_fade_out);\n        Animation fadeOut = AnimationsHelper.loadScaledAnimation(itemView.getContext(), R.anim.fade_out);\n        Animation fadeIn = AnimationsHelper.loadScaledAnimation(itemView.getContext(), R.anim.fade_in);\n\n        // Use slideDown animation when user is not using Tiles mode\n        if (_viewMode != ViewMode.TILES) {\n            _profileCopied.startAnimation(slideDownFadeIn);\n            View fadeOutView = (_accountNamePosition == AccountNamePosition.BELOW) ? _profileName : _description;\n            fadeOutView.startAnimation(slideDownFadeOut);\n\n            _copyAnimationHandler.postDelayed(() -> {\n                _profileCopied.startAnimation(fadeOut);\n                fadeOutView.startAnimation(fadeIn);\n            }, 3000);\n        } else {\n            View visibleProfileText = _accountNamePosition == AccountNamePosition.BELOW ? _profileName : _profileIssuer;\n\n            _profileCopied.startAnimation(fadeIn);\n            visibleProfileText.startAnimation(fadeOut);\n\n            _copyAnimationHandler.postDelayed(() -> {\n                _profileCopied.startAnimation(fadeOut);\n                visibleProfileText.startAnimation(fadeIn);\n            }, 3000);\n        }\n    }\n\n    private void animateAlphaTo(float alpha) {\n        itemView.animate().alpha(alpha).setDuration(200).start();\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/ui/views/EntryListView.java",
    "content": "package com.beemdevelopment.aegis.ui.views;\n\nimport static androidx.recyclerview.widget.RecyclerView.NO_POSITION;\n\nimport android.annotation.SuppressLint;\nimport android.content.res.TypedArray;\nimport android.graphics.Rect;\nimport android.graphics.drawable.Drawable;\nimport android.os.Bundle;\nimport android.util.TypedValue;\nimport android.view.LayoutInflater;\nimport android.view.MotionEvent;\nimport android.view.View;\nimport android.view.ViewGroup;\nimport android.view.animation.LayoutAnimationController;\nimport android.widget.LinearLayout;\n\nimport androidx.annotation.AttrRes;\nimport androidx.annotation.NonNull;\nimport androidx.annotation.Nullable;\nimport androidx.annotation.StyleRes;\nimport androidx.core.graphics.Insets;\nimport androidx.core.view.ViewCompat;\nimport androidx.core.view.WindowInsetsCompat;\nimport androidx.fragment.app.Fragment;\nimport androidx.recyclerview.widget.GridLayoutManager;\nimport androidx.recyclerview.widget.ItemTouchHelper;\nimport androidx.recyclerview.widget.LinearLayoutManager;\nimport androidx.recyclerview.widget.RecyclerView;\n\nimport com.beemdevelopment.aegis.AccountNamePosition;\nimport com.beemdevelopment.aegis.CopyBehavior;\nimport com.beemdevelopment.aegis.Preferences;\nimport com.beemdevelopment.aegis.R;\nimport com.beemdevelopment.aegis.SortCategory;\nimport com.beemdevelopment.aegis.VibrationPatterns;\nimport com.beemdevelopment.aegis.ViewMode;\nimport com.beemdevelopment.aegis.helpers.AnimationsHelper;\nimport com.beemdevelopment.aegis.helpers.MetricsHelper;\nimport com.beemdevelopment.aegis.helpers.SimpleItemTouchHelperCallback;\nimport com.beemdevelopment.aegis.helpers.UiRefresher;\nimport com.beemdevelopment.aegis.helpers.VibrationHelper;\nimport com.beemdevelopment.aegis.otp.TotpInfo;\nimport com.beemdevelopment.aegis.ui.glide.GlideHelper;\nimport com.beemdevelopment.aegis.ui.models.ErrorCardInfo;\nimport com.beemdevelopment.aegis.vault.VaultEntry;\nimport com.beemdevelopment.aegis.vault.VaultGroup;\nimport com.bumptech.glide.Glide;\nimport com.bumptech.glide.ListPreloader;\nimport com.bumptech.glide.RequestBuilder;\nimport com.bumptech.glide.integration.recyclerview.RecyclerViewPreloader;\nimport com.bumptech.glide.util.ViewPreloadSizeProvider;\nimport com.google.android.material.card.MaterialCardView;\nimport com.google.android.material.shape.CornerFamily;\nimport com.google.android.material.shape.ShapeAppearanceModel;\nimport com.google.common.base.Strings;\n\nimport java.util.ArrayList;\nimport java.util.Collection;\nimport java.util.Collections;\nimport java.util.List;\nimport java.util.Map;\nimport java.util.Set;\nimport java.util.UUID;\n\npublic class EntryListView extends Fragment implements EntryAdapter.Listener {\n    private EntryAdapter _adapter;\n    private Listener _listener;\n    private SimpleItemTouchHelperCallback _touchCallback;\n    private ItemTouchHelper _touchHelper;\n    private VibrationHelper _vibrationHelper;\n\n    private RecyclerView _recyclerView;\n    private RecyclerView.ItemDecoration _itemDecoration;\n    private ViewPreloadSizeProvider<VaultEntry> _preloadSizeProvider;\n    private TotpProgressBar _progressBar;\n    private boolean _showProgress;\n    private ViewMode _viewMode;\n    private LinearLayout _emptyStateView;\n\n    private UiRefresher _refresher;\n\n    @Override\n    public void onCreate(Bundle savedInstanceState) {\n        super.onCreate(savedInstanceState);\n        _adapter = new EntryAdapter(this);\n        _showProgress = false;\n    }\n\n    @Override\n    public void onDestroy() {\n        _adapter.destroy();\n        super.onDestroy();\n    }\n\n    @Override\n    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {\n        View view = inflater.inflate(R.layout.fragment_entry_list_view, container, false);\n        _progressBar = view.findViewById(R.id.progressBar);\n        _vibrationHelper = new VibrationHelper(getContext());\n\n        // set up the recycler view\n        _recyclerView = view.findViewById(R.id.rvKeyProfiles);\n        _recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {\n            @Override\n            public void onScrolled(RecyclerView recyclerView, int dx, int dy) {\n                super.onScrolled(recyclerView, dx, dy);\n                if (_listener != null) {\n                    _listener.onScroll(dx, dy);\n                }\n            }\n        });\n\n        _recyclerView.setOnTouchListener((v, event) -> {\n            if (_listener != null) {\n                _listener.onEntryListTouch();\n            }\n            return false;\n        });\n\n        // set up icon preloading\n        _preloadSizeProvider = new ViewPreloadSizeProvider<>();\n        IconPreloadProvider modelProvider = new IconPreloadProvider();\n        RecyclerViewPreloader<VaultEntry> preloader = new RecyclerViewPreloader<>(Glide.with(this), modelProvider, _preloadSizeProvider, 10);\n        _recyclerView.addOnScrollListener(preloader);\n\n        GridLayoutManager layoutManager = new GridLayoutManager(requireContext(), 1);\n        layoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {\n            @Override\n            public int getSpanSize(int position) {\n                if (_viewMode == ViewMode.TILES\n                        && (_adapter.isPositionFooter(position)\n                        || _adapter.isPositionErrorCard(position))) {\n                    return 2;\n                }\n\n                return 1;\n            }\n        });\n        _recyclerView.setLayoutManager(layoutManager);\n        _touchCallback = new SimpleItemTouchHelperCallback(_adapter);\n        _touchHelper = new ItemTouchHelper(_touchCallback);\n        _touchHelper.attachToRecyclerView(_recyclerView);\n        _recyclerView.setAdapter(_adapter);\n\n        _refresher = new UiRefresher(new UiRefresher.Listener() {\n            @Override\n            public void onRefresh() {\n                refresh(false);\n                 _vibrationHelper.vibratePattern(getContext(), VibrationPatterns.REFRESH_CODE);\n            }\n\n            @Override\n            public void onExpiring() {\n                _vibrationHelper.vibratePattern(getContext(), VibrationPatterns.EXPIRING);\n            }\n\n            @Override\n            public long getMillisTillNextRefresh() {\n                return TotpInfo.getMillisTillNextRotation(_adapter.getMostFrequentPeriod());\n            }\n\n            @Override\n            public long getPeriodMillis() {\n                return _adapter.getMostFrequentPeriod() * 1000L;\n            }\n        });\n\n        final int rvInitialPaddingLeft = _recyclerView.getPaddingLeft();\n        final int rvInitialPaddingTop = _recyclerView.getPaddingTop();\n        final int rvInitialPaddingRight = _recyclerView.getPaddingRight();\n        final int rvInitialPaddingBottom = _recyclerView.getPaddingBottom();\n\n        ViewCompat.setOnApplyWindowInsetsListener(_recyclerView, (targetView, windowInsets) -> {\n            Insets insets = windowInsets.getInsets(WindowInsetsCompat.Type.systemBars() | WindowInsetsCompat.Type.displayCutout());\n            // left and right padding seems to be handled by fitsSystemWindows=\"true\" on the CoordinatorLayout in activity_main.xml\n            targetView.setPadding(\n                    rvInitialPaddingLeft,\n                    rvInitialPaddingTop,\n                    rvInitialPaddingRight,\n                    rvInitialPaddingBottom + insets.bottom\n            );\n            return WindowInsetsCompat.CONSUMED;\n        });\n\n        _emptyStateView = view.findViewById(R.id.vEmptyList);\n        return view;\n    }\n\n    public void setPreloadView(View view) {\n        _preloadSizeProvider.setView(view);\n    }\n\n    public int getScrollPosition() {\n        return ((LinearLayoutManager) _recyclerView.getLayoutManager()).findFirstVisibleItemPosition();\n    }\n\n    public void scrollToPosition(int position) {\n        _recyclerView.getLayoutManager().scrollToPosition(position);\n    }\n\n    @Override\n    public void onDestroyView() {\n        _refresher.destroy();\n        super.onDestroyView();\n    }\n\n    public void onRefreshStop() {\n        _refresher.stop();\n    }\n\n    public void onRefreshStart() {\n        if (_adapter.getMostFrequentPeriod() != -1){\n            _refresher.start();\n        }\n    }\n\n    public void setGroups(Collection<VaultGroup> groups) {\n        _adapter.setGroups(groups);\n        updateDividerDecoration();\n    }\n\n    public void setGroupFilter(Set<UUID> groups) {\n        _adapter.setGroupFilter(groups);\n        _touchCallback.setIsLongPressDragEnabled(_adapter.isDragAndDropAllowed());\n        updateEmptyState();\n        updateDividerDecoration();\n    }\n\n    public void setIsLongPressDragEnabled(boolean enabled) {\n        _touchCallback.setIsLongPressDragEnabled(enabled && _adapter.isDragAndDropAllowed());\n    }\n\n    public void setCopyBehavior(CopyBehavior copyBehavior) {\n        _adapter.setCopyBehavior(copyBehavior);\n    }\n\n    public void setSearchBehaviorMask(int searchBehaviorMask) {\n        _adapter.setSearchBehaviorMask(searchBehaviorMask);\n    }\n\n    public List<VaultEntry> selectAllEntries() {\n        return _adapter.selectAllEntries();\n    }\n\n    public void setActionModeState(boolean enabled, VaultEntry entry) {\n        _touchCallback.setSelectedEntry(entry);\n        _touchCallback.setIsLongPressDragEnabled(enabled && _adapter.isDragAndDropAllowed());\n\n        if (enabled) {\n            _adapter.addSelectedEntry(entry);\n        } else {\n            _adapter.deselectAllEntries();\n        }\n    }\n\n    public void setSortCategory(SortCategory sortCategory, boolean apply) {\n        _adapter.setSortCategory(sortCategory, apply);\n        _touchCallback.setIsLongPressDragEnabled(_adapter.isDragAndDropAllowed());\n        updateDividerDecoration();\n    }\n\n    public void setUsageCounts(Map<UUID, Integer> usageCounts) {\n        _adapter.setUsageCounts(usageCounts);\n    }\n\n    public Map<UUID, Integer> getUsageCounts() {\n        return _adapter.getUsageCounts();\n    }\n\n    public void setLastUsedTimestamps(Map<UUID, Long> lastUsedTimestamps) {\n        _adapter.setLastUsedTimestamps(lastUsedTimestamps);\n    }\n\n    public Map<UUID, Long> getLastUsedTimestamps() {\n        return  _adapter.getLastUsedTimestamps();\n    }\n\n    public void setSearchFilter(String search) {\n        _adapter.setSearchFilter(search);\n        _touchCallback.setIsLongPressDragEnabled(_adapter.isDragAndDropAllowed());\n        updateEmptyState();\n        updateDividerDecoration();\n    }\n\n    public void setSelectedEntry(VaultEntry entry) {\n        _touchCallback.setSelectedEntry(entry);\n    }\n\n    public void setViewMode(ViewMode mode) {\n        _viewMode = mode;\n        updateDividerDecoration();\n        _adapter.setViewMode(_viewMode);\n        if (_viewMode == ViewMode.TILES) {\n            _touchCallback.setDragFlags(ItemTouchHelper.UP | ItemTouchHelper.DOWN | ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT);\n        } else {\n            _touchCallback.setDragFlags(ItemTouchHelper.UP | ItemTouchHelper.DOWN);\n        }\n\n        ((GridLayoutManager)_recyclerView.getLayoutManager()).setSpanCount(mode.getSpanCount());\n    }\n\n    public void startDrag(RecyclerView.ViewHolder viewHolder) {\n        _touchHelper.startDrag(viewHolder);\n    }\n\n    public void refresh(boolean hard) {\n        if (_showProgress) {\n            _progressBar.restart();\n        }\n\n        _adapter.refresh(hard);\n    }\n\n    public void setListener(Listener listener) {\n        _listener = listener;\n    }\n\n    @Override\n    public void onEntryClick(VaultEntry entry) {\n        if (_listener != null) {\n            _listener.onEntryClick(entry);\n        }\n    }\n\n    public boolean onLongEntryClick(VaultEntry entry) {\n        if (_listener != null) {\n            _listener.onLongEntryClick(entry);\n        }\n        return true;\n    }\n\n    @Override\n    public void onEntryMove(VaultEntry entry1, VaultEntry entry2) {\n        if (_listener != null) {\n            _listener.onEntryMove(entry1, entry2);\n        }\n    }\n\n    @Override\n    public void onEntryDrop(VaultEntry entry) {\n        if (_listener != null) {\n            _listener.onEntryDrop(entry);\n        }\n    }\n\n    @Override\n    public void onEntryChange(VaultEntry entry) {\n        if (_listener != null) {\n            _listener.onEntryChange(entry);\n        }\n    }\n\n    @Override\n    public void onEntryCopy(VaultEntry entry) {\n        if (_listener != null) {\n            _listener.onEntryCopy(entry);\n        }\n    }\n\n    @Override\n    public void onSelect(VaultEntry entry) {\n        if (_listener != null) {\n            _listener.onSelect(entry);\n        }\n    }\n\n    @Override\n    public void onDeselect(VaultEntry entry) {\n        if (_listener != null) {\n            _listener.onDeselect(entry);\n        }\n    }\n\n    @Override\n    public void onPeriodUniformityChanged(boolean isUniform, int period) {\n        setShowProgress(isUniform);\n        if (_showProgress) {\n            _progressBar.setVisibility(View.VISIBLE);\n            _progressBar.setPeriod(period);\n            _progressBar.start();\n            onRefreshStart();\n        } else {\n            _progressBar.setVisibility(View.GONE);\n            _progressBar.stop();\n            onRefreshStop();\n        }\n    }\n\n    @Override\n    public void onListChange() {\n        if (_listener != null) {\n            _listener.onListChange();\n        }\n    }\n\n    public void setCodeGroupSize(Preferences.CodeGrouping codeGrouping) {\n        _adapter.setCodeGroupSize(codeGrouping);\n    }\n\n    public void setAccountNamePosition(AccountNamePosition accountNamePosition) {\n        _adapter.setAccountNamePosition(accountNamePosition);\n    }\n\n    public void setOnlyShowNecessaryAccountNames(boolean onlyShowNecessaryAccountNames) {\n        _adapter.setOnlyShowNecessaryAccountNames(onlyShowNecessaryAccountNames);\n    }\n\n    public void setShowIcon(boolean showIcon) {\n        _adapter.setShowIcon(showIcon);\n    }\n\n    public void setShowNextCode(boolean showNextCode) {\n        _adapter.setShowNextCode(showNextCode);\n    }\n\n    public void setShowExpirationState(boolean showExpirationState) {\n        _adapter.setShowExpirationState(showExpirationState);\n    }\n\n    public void setHighlightEntry(boolean highlightEntry) {\n        _adapter.setHighlightEntry(highlightEntry);\n    }\n\n    public void setPauseFocused(boolean pauseFocused) {\n        _adapter.setPauseFocused(pauseFocused);\n    }\n\n    public void setTapToReveal(boolean tapToReveal) {\n        _adapter.setTapToReveal(tapToReveal);\n    }\n\n    public void setTapToRevealTime(int number) {\n        _adapter.setTapToRevealTime(number);\n    }\n\n    public void setErrorCardInfo(ErrorCardInfo info) {\n        _adapter.setErrorCardInfo(info);\n    }\n\n    @SuppressLint(\"ClickableViewAccessibility\")\n    public void onEntryAdded(VaultEntry entry) {\n        int position = _adapter.getEntryPosition(entry);\n        if (position < 0) {\n            return;\n        }\n\n        LinearLayoutManager layoutManager = (LinearLayoutManager) _recyclerView.getLayoutManager();\n        if ((_recyclerView.canScrollVertically(1) && position > layoutManager.findLastCompletelyVisibleItemPosition())\n                || (_recyclerView.canScrollVertically(-1) && position < layoutManager.findFirstCompletelyVisibleItemPosition())) {\n            boolean smoothScroll = !AnimationsHelper.Scale.TRANSITION.isZero(requireContext());\n            RecyclerView.OnScrollListener scrollListener = new RecyclerView.OnScrollListener() {\n                private void handleScroll() {\n                    _recyclerView.removeOnScrollListener(this);\n                    _recyclerView.setOnTouchListener(null);\n                    tempHighlightEntry(entry);\n                }\n\n                @Override\n                public void onScrollStateChanged(@NonNull RecyclerView recyclerView, int newState) {\n                    if (smoothScroll && newState == RecyclerView.SCROLL_STATE_IDLE) {\n                        handleScroll();\n                    }\n                }\n\n                @Override\n                public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) {\n                    if (!smoothScroll) {\n                        handleScroll();\n                    }\n                }\n            };\n            _recyclerView.addOnScrollListener(scrollListener);\n            _recyclerView.setOnTouchListener((v, event) -> {\n                if (event.getAction() == MotionEvent.ACTION_DOWN) {\n                    _recyclerView.removeOnScrollListener(scrollListener);\n                    _recyclerView.stopScroll();\n                    _recyclerView.setOnTouchListener(null);\n                }\n\n                return false;\n            });\n            // We can't easily control the speed of the smooth scroll animation, but we\n            // can at least disable it if animations are disabled\n            if (smoothScroll) {\n                _recyclerView.smoothScrollToPosition(position);\n            } else {\n                _recyclerView.scrollToPosition(position);\n            }\n        } else {\n            tempHighlightEntry(entry);\n        }\n    }\n\n    public void tempHighlightEntry(VaultEntry entry) {\n        _adapter.setTempHighlightEntry(true);\n\n        final int secondsToFocus = 3;\n        _adapter.focusEntry(entry, secondsToFocus);\n    }\n\n    public void setEntries(Collection<VaultEntry> entries) {\n        _adapter.setEntries(new ArrayList<>(entries));\n        updateEmptyState();\n    }\n\n    public void clearEntries() {\n        _adapter.clearEntries();\n        updateEmptyState();\n    }\n\n    public void runEntriesAnimation() {\n        LayoutAnimationController animationController = AnimationsHelper.loadScaledLayoutAnimation(requireContext(), R.anim.layout_animation_fall_down);\n\n        _recyclerView.setLayoutAnimation(animationController);\n        _recyclerView.scheduleLayoutAnimation();\n    }\n\n    private void setShowProgress(boolean showProgress) {\n        _showProgress = showProgress;\n        updateDividerDecoration();\n    }\n\n    private void updateDividerDecoration() {\n        if (_itemDecoration != null) {\n            _recyclerView.removeItemDecoration(_itemDecoration);\n        }\n\n        float offset = _viewMode.getItemOffset();\n        if (_viewMode == ViewMode.TILES) {\n            _itemDecoration = new TileSpaceItemDecoration(offset);\n        } else {\n            _itemDecoration = new VerticalSpaceItemDecoration(offset);\n        }\n\n        _recyclerView.addItemDecoration(_itemDecoration);\n    }\n\n    private void updateEmptyState() {\n        if (_adapter.getShownEntriesCount() > 0) {\n            _recyclerView.setVisibility(View.VISIBLE);\n            _emptyStateView.setVisibility(View.GONE);\n        } else {\n            if (Strings.isNullOrEmpty(_adapter.getSearchFilter())) {\n                _recyclerView.setVisibility(View.GONE);\n                _emptyStateView.setVisibility(View.VISIBLE);\n            }\n        }\n    }\n\n    public interface Listener {\n        void onEntryClick(VaultEntry entry);\n        void onEntryMove(VaultEntry entry1, VaultEntry entry2);\n        void onEntryDrop(VaultEntry entry);\n        void onEntryChange(VaultEntry entry);\n        void onEntryCopy(VaultEntry entry);\n        void onLongEntryClick(VaultEntry entry);\n        void onScroll(int dx, int dy);\n        void onSelect(VaultEntry entry);\n        void onDeselect(VaultEntry entry);\n        void onListChange();\n        void onSaveGroupFilter(Set<UUID> groupFilter);\n        void onEntryListTouch();\n    }\n\n    private class VerticalSpaceItemDecoration extends RecyclerView.ItemDecoration {\n        private final int _offset;\n        private final ShapeAppearanceModel _defaultShapeModel;\n\n        private VerticalSpaceItemDecoration(float offset) {\n            _offset = MetricsHelper.convertDpToPixels(requireContext(), offset);\n\n            int shapeAppearanceId = getStyledAttrs(R.style.Widget_Aegis_EntryCardView,\n                    com.google.android.material.R.attr.shapeAppearance);\n\n            _defaultShapeModel = ShapeAppearanceModel.builder(\n                    requireContext(), shapeAppearanceId, 0).build();\n        }\n\n        @Override\n        public void getItemOffsets(@NonNull Rect outRect, @NonNull View view, @NonNull RecyclerView parent, @NonNull RecyclerView.State state) {\n            int adapterPosition = parent.getChildAdapterPosition(view);\n            if (adapterPosition == NO_POSITION) {\n                return;\n            }\n\n            // The error card and the footer always have a top and bottom margin\n            if (_adapter.isPositionErrorCard(adapterPosition)) {\n                outRect.top = _viewMode == ViewMode.COMPACT ? _offset * 4 : _offset;\n                outRect.bottom = _offset;\n                return;\n            }\n            if (_adapter.isPositionFooter(adapterPosition)) {\n                outRect.top = _offset * 2;\n                outRect.bottom = _offset;\n                return;\n            }\n\n            int entryIndex = _adapter.translateEntryPosToIndex(adapterPosition);\n            // The first entry should have a top margin, but only if the error card is not shown\n            if (entryIndex == 0 && !_adapter.isErrorCardShown()) {\n                outRect.top = _offset;\n            }\n\n            // Only non-favorite entries have a bottom margin, except for the final favorite entry\n            int totalFavorites = _adapter.getShownFavoritesCount();\n            if (totalFavorites == 0\n                    || (entryIndex < _adapter.getShownEntriesCount() && !_adapter.getEntryAtPosition(adapterPosition).isFavorite())\n                    || totalFavorites == entryIndex + 1) {\n                outRect.bottom = _offset;\n            }\n\n            // The last entry should never have a bottom margin\n            if (_adapter.getShownEntriesCount() == entryIndex + 1) {\n                outRect.bottom = 0;\n            }\n\n            decorateFavoriteEntries((MaterialCardView) view, parent);\n        }\n\n        private void decorateFavoriteEntries(@NonNull MaterialCardView view, @NonNull RecyclerView parent) {\n            int adapterPosition = parent.getChildAdapterPosition(view);\n            int entryIndex = _adapter.translateEntryPosToIndex(adapterPosition);\n            int totalFavorites = _adapter.getShownFavoritesCount();\n\n            ShapeAppearanceModel.Builder builder = _defaultShapeModel.toBuilder();\n            if (entryIndex < totalFavorites) {\n                if ((entryIndex == 0 && totalFavorites > 1) || (entryIndex < (totalFavorites - 1))) {\n                    builder.setBottomLeftCorner(CornerFamily.ROUNDED, 0);\n                    builder.setBottomRightCorner(CornerFamily.ROUNDED, 0);\n                }\n                if (entryIndex > 0) {\n                    builder.setTopLeftCorner(CornerFamily.ROUNDED, 0);\n                    builder.setTopRightCorner(CornerFamily.ROUNDED, 0);\n                }\n            }\n\n            view.setShapeAppearanceModel(builder.build());\n            view.setClipToOutline(true);\n        }\n\n        private int getStyledAttrs(@StyleRes int styleId, @AttrRes int attrId) {\n            TypedArray cardAttrs = null;\n            try {\n                cardAttrs = requireContext().obtainStyledAttributes(styleId, new int[]{attrId});\n                TypedValue value = new TypedValue();\n                cardAttrs.getValue(0, value);\n                return value.data;\n            } finally {\n                if (cardAttrs != null) {\n                    cardAttrs.recycle();\n                }\n            }\n        }\n    }\n\n    private class TileSpaceItemDecoration extends RecyclerView.ItemDecoration {\n        private final int _offset;\n\n        private TileSpaceItemDecoration(float offset) {\n            _offset = MetricsHelper.convertDpToPixels(requireContext(), offset);\n        }\n\n        @Override\n        public void getItemOffsets(@NonNull Rect outRect, @NonNull View view, @NonNull RecyclerView parent, @NonNull RecyclerView.State state) {\n            int adapterPosition = parent.getChildAdapterPosition(view);\n            if (adapterPosition == NO_POSITION) {\n                return;\n            }\n\n            outRect.left = _offset;\n            outRect.right = _offset;\n            outRect.top = _offset;\n            outRect.bottom = _offset;\n\n            if (_adapter.isPositionErrorCard(adapterPosition)\n                    || (isInFirstEntryRow(adapterPosition) && !_adapter.isErrorCardShown())\n                    || _adapter.isPositionFooter(adapterPosition)) {\n                outRect.top *= 2;\n            }\n        }\n\n        private boolean isInFirstEntryRow(int pos) {\n            int index = _adapter.translateEntryPosToIndex(pos);\n            return index >= 0 && index < _viewMode.getSpanCount();\n        }\n    }\n\n    private class IconPreloadProvider implements ListPreloader.PreloadModelProvider<VaultEntry> {\n        @NonNull\n        @Override\n        public List<VaultEntry> getPreloadItems(int position) {\n            if (_adapter.getItemViewType(position) == R.layout.card_footer) {\n                return Collections.emptyList();\n            }\n\n            if (_adapter.getItemViewType(position) == R.layout.card_error) {\n                return Collections.emptyList();\n            }\n\n            VaultEntry entry = _adapter.getEntryAtPosition(position);\n            if (!entry.hasIcon()) {\n                return Collections.emptyList();\n            }\n\n            return Collections.singletonList(entry);\n        }\n\n        @Nullable\n        @Override\n        public RequestBuilder<Drawable> getPreloadRequestBuilder(@NonNull VaultEntry entry) {\n            RequestBuilder<Drawable> rb = Glide.with(EntryListView.this)\n                    .load(entry.getIcon());\n            return GlideHelper.setCommonOptions(rb, entry.getIcon().getType());\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/ui/views/ErrorCardHolder.java",
    "content": "package com.beemdevelopment.aegis.ui.views;\n\nimport android.view.View;\nimport android.widget.TextView;\n\nimport androidx.annotation.NonNull;\nimport androidx.recyclerview.widget.RecyclerView;\n\nimport com.beemdevelopment.aegis.R;\nimport com.beemdevelopment.aegis.ui.models.ErrorCardInfo;\nimport com.google.android.material.card.MaterialCardView;\n\npublic class ErrorCardHolder extends RecyclerView.ViewHolder {\n    public ErrorCardHolder(@NonNull View itemView, ErrorCardInfo info) {\n        super(itemView);\n\n        TextView errorTextView = itemView.findViewById(R.id.text_error_bar);\n        errorTextView.setText(info.getMessage());\n\n        MaterialCardView errorCard = itemView.findViewById(R.id.card_error);\n        errorCard.setOnClickListener(info.getListener());\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/ui/views/GroupAdapter.java",
    "content": "package com.beemdevelopment.aegis.ui.views;\n\nimport android.view.LayoutInflater;\nimport android.view.View;\nimport android.view.ViewGroup;\n\nimport androidx.recyclerview.widget.RecyclerView;\n\nimport com.beemdevelopment.aegis.R;\nimport com.beemdevelopment.aegis.helpers.ItemTouchHelperAdapter;\nimport com.beemdevelopment.aegis.util.CollectionUtils;\nimport com.beemdevelopment.aegis.vault.VaultGroup;\n\nimport java.util.ArrayList;\nimport java.util.UUID;\n\npublic class GroupAdapter extends RecyclerView.Adapter<GroupHolder> implements ItemTouchHelperAdapter {\n    private GroupAdapter.Listener _listener;\n    private ArrayList<VaultGroup> _groups;\n\n    public GroupAdapter(GroupAdapter.Listener listener) {\n        _listener = listener;\n        _groups = new ArrayList<>();\n    }\n\n    public void addGroup(VaultGroup group) {\n        _groups.add(group);\n\n        int position = getItemCount() - 1;\n        if (position == 0) {\n            notifyDataSetChanged();\n        } else {\n            notifyItemInserted(position);\n        }\n    }\n\n    public ArrayList<VaultGroup> getGroups() {\n        return _groups;\n    }\n\n    public void replaceGroup(UUID uuid, VaultGroup newGroup) {\n        VaultGroup oldGroup = getGroupByUUID(uuid);\n        int position = _groups.indexOf(oldGroup);\n        _groups.set(position, newGroup);\n        notifyItemChanged(position);\n    }\n\n    public void removeGroup(VaultGroup group) {\n        int position = _groups.indexOf(group);\n        _groups.remove(position);\n        notifyItemRemoved(position);\n    }\n\n    @Override\n    public GroupHolder onCreateViewHolder(ViewGroup parent, int viewType) {\n        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.card_group, parent, false);\n        return new GroupHolder(view);\n    }\n\n    @Override\n    public void onBindViewHolder(GroupHolder holder, int position) {\n        holder.setData(_groups.get(position));\n        holder.setOnEditClickListener(v -> {\n            int position12 = holder.getAdapterPosition();\n            _listener.onEditGroup(_groups.get(position12));\n        });\n        holder.setOnDeleteClickListener(v -> {\n            int position12 = holder.getAdapterPosition();\n            _listener.onRemoveGroup(_groups.get(position12));\n        });\n    }\n\n    @Override\n    public void onItemMove(int firstPosition, int secondPosition) {\n        CollectionUtils.move(_groups, firstPosition, secondPosition);\n        notifyItemMoved(firstPosition, secondPosition);\n    }\n\n    @Override\n    public void onItemDismiss(int position) { }\n\n    @Override\n    public void onItemDrop(int position) { }\n\n    private VaultGroup getGroupByUUID(UUID uuid) {\n        for (VaultGroup group : _groups) {\n            if (group.getUUID().equals(uuid)) {\n                return group;\n            }\n        }\n        return null;\n    }\n\n    @Override\n    public int getItemCount() {\n        return _groups.size();\n    }\n\n    public interface Listener {\n        void onEditGroup(VaultGroup group);\n        void onRemoveGroup(VaultGroup group);\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/ui/views/GroupHolder.java",
    "content": "package com.beemdevelopment.aegis.ui.views;\n\nimport android.view.View;\nimport android.widget.ImageView;\nimport android.widget.TextView;\n\nimport androidx.recyclerview.widget.RecyclerView;\n\nimport com.beemdevelopment.aegis.R;\nimport com.beemdevelopment.aegis.vault.VaultGroup;\n\npublic class GroupHolder extends RecyclerView.ViewHolder {\n    private TextView _slotName;\n    private ImageView _buttonEdit;\n    private ImageView _buttonDelete;\n\n    public GroupHolder(final View view) {\n        super(view);\n        _slotName = view.findViewById(R.id.text_group_name);\n        _buttonEdit = view.findViewById(R.id.button_edit);\n        _buttonDelete = view.findViewById(R.id.button_delete);\n    }\n\n    public void setData(VaultGroup group) {\n        _slotName.setText(group.getName());\n    }\n\n    public void setOnEditClickListener(View.OnClickListener listener) {\n        _buttonEdit.setOnClickListener(listener);\n    }\n\n    public void setOnDeleteClickListener(View.OnClickListener listener) {\n        _buttonDelete.setOnClickListener(listener);\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/ui/views/IconAdapter.java",
    "content": "package com.beemdevelopment.aegis.ui.views;\n\nimport android.content.Context;\nimport android.view.LayoutInflater;\nimport android.view.View;\nimport android.view.ViewGroup;\n\nimport androidx.annotation.NonNull;\nimport androidx.annotation.Nullable;\nimport androidx.recyclerview.widget.RecyclerView;\n\nimport com.beemdevelopment.aegis.R;\nimport com.beemdevelopment.aegis.icons.IconPack;\nimport com.beemdevelopment.aegis.icons.IconType;\n\nimport java.util.ArrayList;\nimport java.util.Collections;\nimport java.util.Comparator;\nimport java.util.List;\nimport java.util.Objects;\n\npublic class IconAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {\n    private final Context _context;\n    private final String _issuer;\n    private final Listener _listener;\n    private IconPack _pack;\n    private List<IconPack.Icon> _icons;\n    private final List<CategoryHeader> _categories;\n    private String _query;\n\n    public IconAdapter(@NonNull Context context, String issuer, @NonNull Listener listener) {\n        _context = context;\n        _issuer = issuer;\n        _listener = listener;\n        _icons = new ArrayList<>();\n        _categories = new ArrayList<>();\n    }\n\n    /**\n     * Loads all icons from the given icon pack into this adapter. Any icons added before this call will be overwritten.\n     */\n    public void loadIcons(IconPack pack, boolean showAddCustom) {\n        _pack = pack;\n        _query = null;\n        _icons = new ArrayList<>(_pack.getIcons());\n        _categories.clear();\n\n        Comparator<IconPack.Icon> iconCategoryComparator = (i1, i2) -> {\n            String c1 = getCategoryString(i1.getCategory());\n            String c2 = getCategoryString(i2.getCategory());\n            return c1.compareTo(c2);\n        };\n        Collections.sort(_icons, iconCategoryComparator.thenComparing(IconPack.Icon::getName));\n\n        long categoryCount = _icons.stream()\n                .map(IconPack.Icon::getCategory)\n                .filter(Objects::nonNull)\n                .distinct()\n                .count();\n\n        List<IconPack.Icon> suggested = pack.getSuggestedIcons(_issuer);\n\n        if (showAddCustom) {\n            suggested.add(0, new DummyIcon(_context.getString(R.string.icon_custom)));\n        }\n\n        if (suggested.size() > 0) {\n            CategoryHeader category = new CategoryHeader(_context.getString(R.string.suggested));\n            category.setIsCollapsed(false);\n            category.getIcons().addAll(suggested);\n            _categories.add(category);\n        }\n\n        CategoryHeader category = null;\n        for (IconPack.Icon icon : _icons) {\n            String iconCategory = getCategoryString(icon.getCategory());\n            if (category == null || !getCategoryString(category.getCategory()).equals(iconCategory)) {\n                boolean collapsed = !(categoryCount == 0 && category == null);\n                category = new CategoryHeader(iconCategory);\n                category.setIsCollapsed(collapsed);\n                _categories.add(category);\n            }\n\n            category.getIcons().add(icon);\n        }\n\n        _icons.addAll(0, suggested);\n        updateCategoryPositions();\n        notifyDataSetChanged();\n    }\n\n    public void setQuery(@Nullable String query) {\n        _query = query;\n\n        if (_query == null) {\n            loadIcons(_pack, false);\n        } else {\n            _icons = _pack.getSuggestedIcons(query);\n            notifyDataSetChanged();\n        }\n    }\n\n    public IconPack.Icon getIconAt(int position) {\n        if (isQueryActive()) {\n            return _icons.get(position);\n        }\n\n        position = translateIconPosition(position);\n        return _icons.get(position);\n    }\n\n    public CategoryHeader getCategoryAt(int position) {\n        return _categories.stream()\n                .filter(c -> c.getPosition() == position)\n                .findFirst()\n                .orElse(null);\n    }\n\n    private String getCategoryString(String category) {\n        return category == null ? _context.getString(R.string.uncategorized) : category;\n    }\n\n    private boolean isCategoryPosition(int position) {\n        if (isQueryActive()) {\n            return false;\n        }\n\n        return getCategoryAt(position) != null;\n    }\n\n    private int translateIconPosition(int position) {\n        int offset = 0;\n        for (CategoryHeader category : _categories) {\n            if (category.getPosition() < position) {\n                offset++;\n                if (category.isCollapsed()) {\n                    offset -= category.getIcons().size();\n                }\n            }\n        }\n\n        return position - offset;\n    }\n\n    private void updateCategoryPositions() {\n        int i = 0;\n        for (CategoryHeader category : _categories) {\n            category.setPosition(i);\n\n            int icons = 0;\n            if (!category.isCollapsed()) {\n                icons = category.getIcons().size();\n            }\n\n            i += 1 + icons;\n        }\n    }\n\n    @NonNull\n    @Override\n    public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {\n        View view = LayoutInflater.from(parent.getContext()).inflate(viewType, parent, false);\n        return viewType == R.layout.card_icon ? new IconHolder(view) : new IconCategoryHolder(view);\n    }\n\n    @Override\n    public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {\n        if (!isCategoryPosition(position)) {\n            IconHolder iconHolder = (IconHolder) holder;\n            IconPack.Icon icon = getIconAt(position);\n            iconHolder.setData(icon);\n            iconHolder.loadIcon(_context);\n            iconHolder.itemView.setOnClickListener(v -> {\n                if (icon instanceof DummyIcon) {\n                    _listener.onCustomSelected();\n                } else {\n                    _listener.onIconSelected(icon);\n                }\n            });\n        } else {\n            IconCategoryHolder categoryHolder = (IconCategoryHolder) holder;\n            CategoryHeader category = getCategoryAt(position);\n            categoryHolder.setData(category);\n            categoryHolder.itemView.setOnClickListener(v -> {\n                boolean collapsed = !category.isCollapsed();\n                categoryHolder.setIsCollapsed(collapsed);\n                category.setIsCollapsed(collapsed);\n\n                int startPosition = category.getPosition() + 1;\n                if (category.isCollapsed()) {\n                    notifyItemRangeRemoved(startPosition, category.getIcons().size());\n                } else {\n                    notifyItemRangeInserted(startPosition, category.getIcons().size());\n                }\n\n                updateCategoryPositions();\n            });\n        }\n    }\n\n    @Override\n    public int getItemCount() {\n        if (isQueryActive()) {\n            return _icons.size();\n        }\n\n        int items = _categories.stream()\n                .filter(c -> !c.isCollapsed())\n                .mapToInt(c -> c.getIcons().size())\n                .sum();\n\n        return items + _categories.size();\n    }\n\n    @Override\n    public int getItemViewType(int position) {\n        if (isCategoryPosition(position)) {\n            return R.layout.card_icon_category;\n        }\n\n        return R.layout.card_icon;\n    }\n\n    private boolean isQueryActive() {\n        return _query != null;\n    }\n\n    public interface Listener {\n        void onIconSelected(IconPack.Icon icon);\n        void onCustomSelected();\n    }\n\n    public static class DummyIcon extends IconPack.Icon {\n        protected DummyIcon(String name) {\n            super(name, null, null, null);\n        }\n\n        @Override\n        public IconType getIconType() {\n            return null;\n        }\n    }\n\n    public static class CategoryHeader {\n        private final String _category;\n        private int _position = -1;\n        private final List<IconPack.Icon> _icons;\n        private boolean _collapsed = true;\n\n        public CategoryHeader(String category) {\n            _category = category;\n            _icons = new ArrayList<>();\n        }\n\n        public String getCategory() {\n            return _category;\n        }\n\n        public int getPosition() {\n            return _position;\n        }\n\n        public void setPosition(int position) {\n            _position = position;\n        }\n\n        public List<IconPack.Icon> getIcons() {\n            return _icons;\n        }\n\n        public boolean isCollapsed() {\n            return _collapsed;\n        }\n\n        public void setIsCollapsed(boolean collapsed) {\n            _collapsed = collapsed;\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/ui/views/IconCategoryHolder.java",
    "content": "package com.beemdevelopment.aegis.ui.views;\n\nimport android.view.View;\nimport android.widget.ImageView;\nimport android.widget.TextView;\n\nimport androidx.recyclerview.widget.RecyclerView;\n\nimport com.beemdevelopment.aegis.R;\n\npublic class IconCategoryHolder extends RecyclerView.ViewHolder {\n    private final TextView _textView;\n    private final ImageView _imgView;\n\n    public IconCategoryHolder(final View view) {\n        super(view);\n        _textView = view.findViewById(R.id.icon_category);\n        _imgView = view.findViewById(R.id.icon_category_indicator);\n    }\n\n    public void setData(IconAdapter.CategoryHeader header) {\n        _textView.setText(header.getCategory());\n        _imgView.setRotation(getRotation(header.isCollapsed()));\n    }\n\n    public void setIsCollapsed(boolean collapsed) {\n        _imgView.animate()\n                .setDuration(200)\n                .rotation(getRotation(collapsed))\n                .start();\n    }\n\n    private static int getRotation(boolean collapsed) {\n        return collapsed ? 90 : 0;\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/ui/views/IconHolder.java",
    "content": "package com.beemdevelopment.aegis.ui.views;\n\nimport android.content.Context;\nimport android.view.View;\nimport android.widget.ImageView;\nimport android.widget.TextView;\n\nimport androidx.recyclerview.widget.RecyclerView;\n\nimport com.beemdevelopment.aegis.R;\nimport com.beemdevelopment.aegis.icons.IconPack;\nimport com.beemdevelopment.aegis.icons.IconType;\nimport com.beemdevelopment.aegis.ui.glide.GlideHelper;\nimport com.bumptech.glide.Glide;\nimport com.google.android.material.color.MaterialColors;\n\nimport java.io.File;\n\npublic class IconHolder extends RecyclerView.ViewHolder {\n    private File _iconFile;\n    private IconType _iconType;\n    private boolean _isCustom;\n\n    private final ImageView _imageView;\n    private final TextView _textView;\n\n    public IconHolder(final View view) {\n        super(view);\n        _imageView = view.findViewById(R.id.icon);\n        _textView = view.findViewById(R.id.icon_name);\n    }\n\n    public void setData(IconPack.Icon icon) {\n        _iconFile = icon.getFile();\n        _iconType = icon.getIconType();\n        _isCustom = icon instanceof IconAdapter.DummyIcon;\n        _textView.setText(icon.getName());\n    }\n\n    public void loadIcon(Context context) {\n        if (_isCustom) {\n            Glide.with(context).clear(_imageView);\n            int tint = MaterialColors.getColor(itemView, com.google.android.material.R.attr.colorOnSurfaceVariant);\n            _imageView.setColorFilter(tint);\n            _imageView.setImageResource(R.drawable.ic_outline_add_24);\n        } else {\n            GlideHelper.loadIconFile(Glide.with(context), _iconFile, _iconType, _imageView);\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/ui/views/IconPackAdapter.java",
    "content": "package com.beemdevelopment.aegis.ui.views;\n\nimport android.view.LayoutInflater;\nimport android.view.View;\nimport android.view.ViewGroup;\n\nimport androidx.annotation.NonNull;\nimport androidx.recyclerview.widget.RecyclerView;\n\nimport com.beemdevelopment.aegis.R;\nimport com.beemdevelopment.aegis.icons.IconPack;\n\nimport java.util.ArrayList;\nimport java.util.List;\n\npublic class IconPackAdapter extends RecyclerView.Adapter<IconPackHolder> {\n    private IconPackAdapter.Listener _listener;\n    private List<IconPack> _iconPacks;\n\n    public IconPackAdapter(IconPackAdapter.Listener listener) {\n        _listener = listener;\n        _iconPacks = new ArrayList<>();\n    }\n\n    public void addIconPack(IconPack pack) {\n        _iconPacks.add(pack);\n\n        int position = getItemCount() - 1;\n        if (position == 0) {\n            notifyDataSetChanged();\n        } else {\n            notifyItemInserted(position);\n        }\n    }\n\n    public void removeIconPack(IconPack pack) {\n        int position = _iconPacks.indexOf(pack);\n        if (position >= 0) {\n            _iconPacks.remove(position);\n            notifyItemRemoved(position);\n        }\n    }\n\n    @NonNull\n    @Override\n    public IconPackHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {\n        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.card_icon_pack, parent, false);\n        return new IconPackHolder(view);\n    }\n\n    @Override\n    public void onBindViewHolder(@NonNull IconPackHolder holder, int position) {\n        holder.setData(_iconPacks.get(position));\n        holder.setOnDeleteClickListener(v -> {\n            int position12 = holder.getAdapterPosition();\n            _listener.onRemoveIconPack(_iconPacks.get(position12));\n        });\n    }\n\n    @Override\n    public int getItemCount() {\n        return _iconPacks.size();\n    }\n\n    public interface Listener {\n        void onRemoveIconPack(IconPack pack);\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/ui/views/IconPackHolder.java",
    "content": "package com.beemdevelopment.aegis.ui.views;\n\nimport android.view.View;\nimport android.widget.ImageView;\nimport android.widget.TextView;\n\nimport androidx.recyclerview.widget.RecyclerView;\n\nimport com.beemdevelopment.aegis.R;\nimport com.beemdevelopment.aegis.icons.IconPack;\n\npublic class IconPackHolder extends RecyclerView.ViewHolder {\n    private final TextView _iconPackName;\n    private final TextView _iconPackInfo;\n    private final ImageView _buttonDelete;\n\n    public IconPackHolder(final View view) {\n        super(view);\n        _iconPackName = view.findViewById(R.id.text_icon_pack_name);\n        _iconPackInfo = view.findViewById(R.id.text_icon_pack_info);\n        _buttonDelete = view.findViewById(R.id.button_delete);\n    }\n\n    public void setData(IconPack pack) {\n        _iconPackName.setText(String.format(\"%s (v%d)\", pack.getName(), pack.getVersion()));\n        _iconPackInfo.setText(itemView.getResources().getQuantityString(R.plurals.icon_pack_info, pack.getIcons().size(), pack.getIcons().size()));\n    }\n\n    public void setOnDeleteClickListener(View.OnClickListener listener) {\n        _buttonDelete.setOnClickListener(listener);\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/ui/views/IconRecyclerView.java",
    "content": "package com.beemdevelopment.aegis.ui.views;\n\nimport android.annotation.SuppressLint;\nimport android.content.Context;\nimport android.content.res.TypedArray;\nimport android.util.AttributeSet;\n\nimport androidx.annotation.NonNull;\nimport androidx.annotation.Nullable;\nimport androidx.recyclerview.widget.GridLayoutManager;\nimport androidx.recyclerview.widget.RecyclerView;\n\n// source (slightly modified for Aegis): https://github.com/chiuki/android-recyclerview/blob/745dc88/app/src/main/java/com/sqisland/android/recyclerview/AutofitRecyclerView.java\npublic class IconRecyclerView extends RecyclerView {\n    private GridLayoutManager _manager;\n    private int _columnWidth = -1;\n    private int _spanCount;\n\n    public IconRecyclerView(@NonNull Context context) {\n        super(context);\n        init(context, null);\n    }\n\n    public IconRecyclerView(@NonNull Context context, @Nullable AttributeSet attrs) {\n        super(context, attrs);\n        init(context, attrs);\n    }\n\n    public IconRecyclerView(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr) {\n        super(context, attrs, defStyleAttr);\n        init(context, attrs);\n    }\n\n    @SuppressLint(\"ResourceType\")\n    private void init(Context context, AttributeSet attrs) {\n        if (attrs != null) {\n            int[] attrsArray = {\n                    android.R.attr.columnWidth\n            };\n            TypedArray array = context.obtainStyledAttributes(attrs, attrsArray);\n            _columnWidth = array.getDimensionPixelSize(0, -1);\n            array.recycle();\n        }\n\n        _manager = new GridLayoutManager(getContext(), 1);\n        setLayoutManager(_manager);\n    }\n\n    @Override\n    protected void onMeasure(int widthSpec, int heightSpec) {\n        super.onMeasure(widthSpec, heightSpec);\n        if (_columnWidth > 0) {\n            _spanCount = Math.max(1, getMeasuredWidth() / _columnWidth);\n            _manager.setSpanCount(_spanCount);\n        }\n    }\n\n    public GridLayoutManager getGridLayoutManager() {\n        return _manager;\n    }\n\n    public int getSpanCount() {\n        return _spanCount;\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/ui/views/ImportEntriesAdapter.java",
    "content": "package com.beemdevelopment.aegis.ui.views;\n\nimport android.view.LayoutInflater;\nimport android.view.View;\nimport android.view.ViewGroup;\n\nimport androidx.annotation.NonNull;\nimport androidx.recyclerview.widget.RecyclerView;\n\nimport com.beemdevelopment.aegis.R;\nimport com.beemdevelopment.aegis.ui.models.ImportEntry;\n\nimport java.util.ArrayList;\nimport java.util.List;\nimport java.util.UUID;\n\npublic class ImportEntriesAdapter extends RecyclerView.Adapter<ImportEntryHolder> {\n    private List<ImportEntry> _entries;\n\n    public ImportEntriesAdapter() {\n        _entries = new ArrayList<>();\n    }\n\n    public void addEntry(ImportEntry entry) {\n        _entries.add(entry);\n\n        int position = getItemCount() - 1;\n        if (position == 0) {\n            notifyDataSetChanged();\n        } else {\n            notifyItemInserted(position);\n        }\n    }\n\n    @NonNull\n    @Override\n    public ImportEntryHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {\n        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.card_import_entry, parent, false);\n        return new ImportEntryHolder(view);\n    }\n\n    @Override\n    public void onBindViewHolder(@NonNull ImportEntryHolder holder, int position) {\n        ImportEntry entry = _entries.get(position);\n        entry.setOnCheckedChangedListener(holder);\n        holder.setData(entry);\n    }\n\n    @Override\n    public void onViewRecycled(@NonNull ImportEntryHolder holder) {\n        holder.getData().setOnCheckedChangedListener(null);\n    }\n\n    @Override\n    public int getItemCount() {\n        return _entries.size();\n    }\n\n    public List<ImportEntry> getCheckedEntries() {\n        List<ImportEntry> entries = new ArrayList<>();\n\n        for (ImportEntry entry : _entries) {\n            if (entry.isChecked()) {\n                entries.add(entry);\n            }\n        }\n\n        return entries;\n    }\n\n    public void setCheckboxStates(List<UUID> uuids, boolean state) {\n        for (ImportEntry entry : _entries) {\n            if(uuids.contains(entry.getEntry().getUUID())) {\n                entry.setIsChecked(state);\n            }\n        }\n    }\n\n    public void toggleCheckboxes() {\n        int checkedEntries = getCheckedEntries().size();\n        if (checkedEntries == 0 || checkedEntries != _entries.size()) {\n            setCheckboxStates(true);\n        } else {\n            setCheckboxStates(false);\n        }\n    }\n\n    private void setCheckboxStates(boolean checked) {\n        for (ImportEntry entry: _entries) {\n            if (entry.isChecked() != checked) {\n                entry.setIsChecked(checked);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/ui/views/ImportEntryHolder.java",
    "content": "package com.beemdevelopment.aegis.ui.views;\n\nimport android.content.Context;\nimport android.view.View;\nimport android.widget.CheckBox;\nimport android.widget.TextView;\n\nimport com.beemdevelopment.aegis.R;\nimport com.beemdevelopment.aegis.ui.models.ImportEntry;\n\nimport androidx.recyclerview.widget.RecyclerView;\n\npublic class ImportEntryHolder extends RecyclerView.ViewHolder implements ImportEntry.Listener {\n    private TextView _issuer;\n    private TextView _accountName;\n    private CheckBox _checkbox;\n\n    private ImportEntry _data;\n\n    public ImportEntryHolder(final View view) {\n        super(view);\n\n        _issuer = view.findViewById(R.id.profile_issuer);\n        _accountName = view.findViewById(R.id.profile_account_name);\n        _checkbox = view.findViewById(R.id.checkbox_import_entry);\n        view.setOnClickListener(v -> _data.setIsChecked(!_data.isChecked()));\n    }\n\n    public void setData(ImportEntry data) {\n        _data = data;\n\n        Context context = itemView.getContext();\n        _issuer.setText(!_data.getEntry().getIssuer().isEmpty() ? _data.getEntry().getIssuer() : context.getString(R.string.unknown_issuer));\n        _accountName.setText(!_data.getEntry().getName().isEmpty() ? _data.getEntry().getName() : context.getString(R.string.unknown_account_name));\n        _checkbox.setChecked(_data.isChecked());\n    }\n\n    public ImportEntry getData() {\n        return _data;\n    }\n\n    @Override\n    public void onCheckedChanged(boolean value) {\n        _checkbox.setChecked(value);\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/ui/views/TotpProgressBar.java",
    "content": "package com.beemdevelopment.aegis.ui.views;\n\nimport android.animation.ObjectAnimator;\nimport android.content.Context;\nimport android.os.Handler;\nimport android.util.AttributeSet;\nimport android.view.animation.LinearInterpolator;\nimport android.widget.ProgressBar;\n\nimport com.beemdevelopment.aegis.helpers.AnimationsHelper;\nimport com.beemdevelopment.aegis.otp.TotpInfo;\n\npublic class TotpProgressBar extends ProgressBar {\n    private int _period = TotpInfo.DEFAULT_PERIOD;\n    private Handler _handler;\n    private float _animDurationScale;\n\n    public TotpProgressBar(Context context) {\n        super(context);\n    }\n\n    public TotpProgressBar(Context context, AttributeSet attrs) {\n        super(context, attrs);\n    }\n\n    public TotpProgressBar(Context context, AttributeSet attrs, int defStyleAttr) {\n        super(context, attrs, defStyleAttr);\n    }\n\n    public TotpProgressBar(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {\n        super(context, attrs, defStyleAttr, defStyleRes);\n    }\n\n    public void setPeriod(int period) {\n        _period = period;\n    }\n\n    public void start() {\n        stop();\n        _handler = new Handler();\n        _animDurationScale = AnimationsHelper.Scale.ANIMATOR.getValue(getContext());\n        refresh();\n    }\n\n    public void stop() {\n        if (_handler != null) {\n            _handler.removeCallbacksAndMessages(null);\n            _handler = null;\n        }\n    }\n\n    public void restart() {\n        stop();\n        start();\n    }\n\n    private void refresh() {\n        // calculate the current progress the bar should start at\n        int maxProgress = getMax();\n        long millisTillRotation = TotpInfo.getMillisTillNextRotation(_period);\n        int currentProgress = (int) (maxProgress * ((float) millisTillRotation / (_period * 1000)));\n\n        // start progress animation, compensating for any changes to the animator duration scale settings\n        float animPart = (float) maxProgress / _period;\n        int animEnd = (int) (Math.floor(currentProgress / animPart) * animPart);\n        int animPartDuration = _animDurationScale > 0 ? (int) (1000 / _animDurationScale) : 0;\n        float animDurationFraction = (float) (currentProgress - animEnd) / animPart;\n        int realAnimDuration = (int) (1000 * animDurationFraction);\n        int animDuration =  (int) (animPartDuration * animDurationFraction);\n\n        ObjectAnimator animation = ObjectAnimator.ofInt(this, \"progress\", currentProgress, animEnd);\n        animation.setDuration(animDuration);\n        animation.setInterpolator(new LinearInterpolator());\n        animation.start();\n\n        // the animation only lasts for (less than) one second, so restart it after that\n        _handler.postDelayed(this::refresh, realAnimDuration);\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/util/ClipboardUtils.java",
    "content": "package com.beemdevelopment.aegis.util;\n\nimport android.content.ClipData;\nimport android.content.ClipboardManager;\nimport android.content.Context;\n\npublic final class ClipboardUtils {\n    public static String readText(Context context) {\n        ClipboardManager clipboard =\n                (ClipboardManager) context.getSystemService(Context.CLIPBOARD_SERVICE);\n\n        if (clipboard == null) {\n            return null;\n        }\n\n        ClipData clip = clipboard.getPrimaryClip();\n        if (clip == null || clip.getItemCount() == 0) {\n            return null;\n        }\n\n        ClipData.Item item = clip.getItemAt(0);\n        CharSequence cs = item.coerceToText(context);\n        if (cs == null) {\n            return null;\n        }\n\n        String text = cs.toString().trim();\n        if (text.isEmpty()) {\n            return null;\n        }\n\n        return text;\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/util/Cloner.java",
    "content": "package com.beemdevelopment.aegis.util;\n\nimport java.io.ByteArrayInputStream;\nimport java.io.ByteArrayOutputStream;\nimport java.io.IOException;\nimport java.io.ObjectInputStream;\nimport java.io.ObjectOutputStream;\nimport java.io.Serializable;\n\npublic class Cloner {\n    private Cloner() {\n\n    }\n\n    /**\n     * Returns an exact clone of the given Serializable object.\n     */\n    @SuppressWarnings(\"unchecked cast\")\n    public static <T extends Serializable> T clone(T obj) {\n        try {\n            ByteArrayOutputStream baos = new ByteArrayOutputStream();\n            ObjectOutputStream oos = new ObjectOutputStream(baos);\n            oos.writeObject(obj);\n\n            ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());\n            ObjectInputStream ois = new ObjectInputStream(bais);\n            return (T) ois.readObject();\n        } catch (ClassNotFoundException | IOException e) {\n            throw new RuntimeException(e);\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/util/CollectionUtils.java",
    "content": "package com.beemdevelopment.aegis.util;\n\nimport java.util.List;\n\npublic class CollectionUtils {\n\n    public static <T> void move(List<T> list, int fromIndex, int toIndex) {\n        if (fromIndex == toIndex) {\n            return;\n        }\n\n        T item = list.remove(fromIndex);\n        list.add(toIndex, item);\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/util/IOUtils.java",
    "content": "package com.beemdevelopment.aegis.util;\n\nimport java.io.ByteArrayOutputStream;\nimport java.io.DataInputStream;\nimport java.io.File;\nimport java.io.FileInputStream;\nimport java.io.IOException;\nimport java.io.InputStream;\nimport java.io.OutputStream;\n\npublic class IOUtils {\n    private IOUtils() {\n\n    }\n\n    public static byte[] readFile(FileInputStream inStream) throws IOException {\n        try (DataInputStream outStream = new DataInputStream(inStream)) {\n            byte[] fileBytes = new byte[(int) inStream.getChannel().size()];\n            outStream.readFully(fileBytes);\n            return fileBytes;\n        }\n    }\n\n    public static byte[] readAll(InputStream inStream) throws IOException {\n        try (ByteArrayOutputStream outStream = new ByteArrayOutputStream()) {\n            copy(inStream, outStream);\n            return outStream.toByteArray();\n        }\n    }\n\n    public static void copy(InputStream inStream, OutputStream outStream) throws IOException {\n        int read;\n        byte[] buf = new byte[4096];\n        while ((read = inStream.read(buf, 0, buf.length)) != -1) {\n            outStream.write(buf, 0, read);\n        }\n    }\n\n    public static void clearDirectory(File dir, boolean deleteRoot) {\n        File[] files = dir.listFiles();\n        if (files != null) {\n            for (File file : files) {\n                if (file.isDirectory()) {\n                    clearDirectory(file, true);\n                } else {\n                    file.delete();\n                }\n            }\n        }\n\n        if (deleteRoot) {\n            dir.delete();\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/util/JsonUtils.java",
    "content": "package com.beemdevelopment.aegis.util;\n\nimport org.json.JSONObject;\n\nimport javax.annotation.Nullable;\n\npublic class JsonUtils {\n    private JsonUtils() {\n\n    }\n\n    @Nullable\n    public static String optString(JSONObject obj, String key) {\n        return obj.isNull(key) ? null : obj.optString(key, null);\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/util/PreferenceParser.java",
    "content": "package com.beemdevelopment.aegis.util;\n\nimport org.xmlpull.v1.XmlPullParser;\nimport org.xmlpull.v1.XmlPullParserException;\n\nimport java.io.IOException;\nimport java.util.ArrayList;\nimport java.util.List;\n\npublic class PreferenceParser {\n    private PreferenceParser() {\n        \n    }\n\n    public static List<XmlEntry> parse(XmlPullParser parser) throws IOException, XmlPullParserException {\n        List<XmlEntry> entries = new ArrayList<>();\n\n        parser.require(XmlPullParser.START_TAG, null, \"map\");\n        while (parser.next() != XmlPullParser.END_TAG) {\n            if (parser.getEventType() != XmlPullParser.START_TAG) {\n                continue;\n            }\n\n            if (!parser.getName().equals(\"string\")) {\n                skip(parser);\n                continue;\n            }\n\n            entries.add(parseEntry(parser));\n        }\n\n        return entries;\n    }\n\n    private static XmlEntry parseEntry(XmlPullParser parser) throws IOException, XmlPullParserException {\n        parser.require(XmlPullParser.START_TAG, null, \"string\");\n        String name = parser.getAttributeValue(null, \"name\");\n        String value = parseText(parser);\n        parser.require(XmlPullParser.END_TAG, null, \"string\");\n\n        XmlEntry entry = new XmlEntry();\n        entry.Name = name;\n        entry.Value = value;\n        return entry;\n    }\n\n    private static String parseText(XmlPullParser parser) throws IOException, XmlPullParserException {\n        String text = \"\";\n        if (parser.next() == XmlPullParser.TEXT) {\n            text = parser.getText();\n            parser.nextTag();\n        }\n        return text;\n    }\n\n    private static void skip(XmlPullParser parser) throws IOException, XmlPullParserException {\n        // source: https://developer.android.com/training/basics/network-ops/xml.html\n        if (parser.getEventType() != XmlPullParser.START_TAG) {\n            throw new IllegalStateException();\n        }\n\n        int depth = 1;\n        while (depth != 0) {\n            switch (parser.next()) {\n                case XmlPullParser.END_TAG:\n                    depth--;\n                    break;\n                case XmlPullParser.START_TAG:\n                    depth++;\n                    break;\n            }\n        }\n    }\n\n    public static class XmlEntry {\n        public String Name;\n        public String Value;\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/util/TimeUtils.java",
    "content": "package com.beemdevelopment.aegis.util;\n\nimport android.annotation.SuppressLint;\nimport android.content.Context;\nimport android.content.res.Resources;\n\nimport androidx.annotation.PluralsRes;\n\nimport java.util.Date;\n\npublic class TimeUtils {\n    private TimeUtils() {\n\n    }\n\n    public static String getElapsedSince(Context context, Date date) {\n        long since = (new Date().getTime() - date.getTime()) / 1000;\n        if (since < 60) {\n            return formatElapsedSince(context, since, \"seconds\");\n        }\n        since /= 60;\n        if (since < 60) {\n            return formatElapsedSince(context, since, \"minutes\");\n        }\n        since /= 60;\n        if (since < 24) {\n            return formatElapsedSince(context, since, \"hours\");\n        }\n        since /= 24;\n        if (since < 365) {\n            return formatElapsedSince(context, since, \"days\");\n        }\n        since /= 365;\n        return formatElapsedSince(context, since, \"years\");\n    }\n\n    @SuppressLint(\"DiscouragedApi\")\n    private static String formatElapsedSince(Context context, long since, String unit) {\n        Resources res = context.getResources();\n        @PluralsRes int id = res.getIdentifier(String.format(\"time_elapsed_%s\", unit), \"plurals\", context.getPackageName());\n        return res.getQuantityString(id, (int) since, (int) since);\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/util/UUIDMap.java",
    "content": "package com.beemdevelopment.aegis.util;\n\nimport androidx.annotation.NonNull;\n\nimport java.io.Serializable;\nimport java.util.ArrayList;\nimport java.util.Collection;\nimport java.util.Collections;\nimport java.util.Iterator;\nimport java.util.LinkedHashMap;\nimport java.util.List;\nimport java.util.Objects;\nimport java.util.UUID;\n\n/**\n * A map data structure abstraction for storing values with a UUID as the key. Keys\n * must be specified by the value itself, instead of separately. It uses a\n * LinkedHashMap internally (a hash map with a separate linked list that maintains\n * the order).\n * @param <T> The type of values in this map\n */\npublic class UUIDMap <T extends UUIDMap.Value> implements Iterable<T>, Serializable {\n    private LinkedHashMap<UUID, T> _map = new LinkedHashMap<>();\n\n    /**\n     * Adds a value to the internal map.\n     * @throws AssertionError if a map value with the UUID of the given value already exists.\n     */\n    public void add(T value) {\n        UUID uuid = value.getUUID();\n        if (_map.containsKey(uuid)) {\n            throw new AssertionError(String.format(\"Existing value found with UUID: %s\", uuid));\n        }\n        _map.put(uuid, value);\n    }\n\n    /**\n     * Removes a value from the internal map.\n     * @throws AssertionError if no map value exists with the UUID of the given value.\n     * @return The old value that is now no longer present in the internal map.\n     */\n    public T remove(T value) {\n        T oldValue = getByUUID(value.getUUID());\n        _map.remove(oldValue.getUUID());\n        return oldValue;\n    }\n\n    /**\n     * Clears the internal map.\n     */\n    public void wipe() {\n        _map.clear();\n    }\n\n    /**\n     * Replaces an old value (with the same UUID as the new given value) in the\n     * internal map with the new given value.\n     * @throws AssertionError if no map value exists with the UUID of the given value.\n     * @return The old value that is now no longer present in the internal map.\n     */\n    public T replace(T newValue) {\n        T oldValue = getByUUID(newValue.getUUID());\n        _map.put(oldValue.getUUID(), newValue);\n        return oldValue;\n    }\n\n    /**\n      * Moves value1 to the position of value2.\n      */\n    public void move(T value1, T value2) {\n        List<T> values = new ArrayList<>(_map.values());\n\n        int vi1 = -1, vi2 = -1;\n        for (int i = 0; i < values.size(); i++) {\n            T value = values.get(i);\n            if (value.getUUID().equals(value1.getUUID())) {\n                vi1 = i;\n            }\n            if (value.getUUID().equals(value2.getUUID())) {\n                vi2 = i;\n            }\n        }\n\n        if (vi1 < 0) {\n            throw new AssertionError(String.format(\"No value found for value1 with UUID: %s\", value1.getUUID()));\n        }\n        if (vi2 < 0) {\n            throw new AssertionError(String.format(\"No value found for value2 with UUID: %s\", value2.getUUID()));\n        }\n\n        CollectionUtils.move(values, vi1, vi2);\n\n        _map.clear();\n        for (T value : values) {\n            _map.put(value.getUUID(), value);\n        }\n    }\n\n    /**\n     * Reports whether the internal map contains a value with the UUID of the given value.\n     */\n    public boolean has(T value) {\n        return has(value.getUUID());\n    }\n\n    /**\n     * Reports whether the internal map contains a value with the given UUID.\n     */\n    public boolean has(UUID uuid) {\n        return _map.containsKey(uuid);\n    }\n\n    /**\n     * Returns a read-only view of the values in the internal map.\n     */\n    public Collection<T> getValues() {\n        return Collections.unmodifiableCollection(_map.values());\n    }\n\n    /**\n     * Retrieves an entry from the internal map that has the given UUID.\n     * @throws AssertionError if no map value exists with the given UUID.\n     */\n    public T getByUUID(UUID uuid) {\n        T value = _map.get(uuid);\n        if (value == null) {\n            throw new AssertionError(String.format(\"No value found with UUID: %s\", uuid));\n        }\n        return value;\n    }\n\n    @NonNull\n    @Override\n    public Iterator<T> iterator() {\n        return _map.values().iterator();\n    }\n\n    public static abstract class Value implements Serializable {\n        private UUID _uuid;\n\n        protected Value(UUID uuid) {\n            _uuid = uuid;\n        }\n\n        protected Value() {\n            this(UUID.randomUUID());\n        }\n\n        @NonNull\n        public final UUID getUUID() {\n            return _uuid;\n        }\n\n        /**\n         * Resets the UUID of this value by generating a new random one.\n         * The caller must ensure that this Value is not in a UUIDMap yet. Otherwise, bad things will happen.\n         */\n        public final void resetUUID() {\n            _uuid = UUID.randomUUID();\n        }\n\n        @Override\n        public boolean equals(Object o) {\n            if (this == o) {\n                return true;\n            }\n\n            if (!(o instanceof Value)) {\n                return false;\n            }\n\n            return Objects.equals(getUUID(), ((Value) o).getUUID());\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/vault/Vault.java",
    "content": "package com.beemdevelopment.aegis.vault;\n\nimport androidx.annotation.Nullable;\n\nimport com.beemdevelopment.aegis.util.UUIDMap;\n\nimport org.json.JSONArray;\nimport org.json.JSONException;\nimport org.json.JSONObject;\n\nimport java.util.Optional;\nimport java.util.UUID;\n\npublic class Vault {\n    private static final int VERSION = 3;\n    private final UUIDMap<VaultEntry> _entries = new UUIDMap<>();\n    private final UUIDMap<VaultGroup> _groups = new UUIDMap<>();\n    private boolean _iconsOptimized = true;\n\n    // Whether we've migrated the group list to the new format while parsing the vault\n    private boolean _isGroupsMigrationFresh = false;\n\n    public JSONObject toJson() {\n        return toJson(null);\n    }\n\n    public JSONObject toJson(@Nullable EntryFilter filter) {\n        try {\n            JSONArray entriesArray = new JSONArray();\n            for (VaultEntry e : _entries) {\n                if (filter == null || filter.includeEntry(e)) {\n                    entriesArray.put(e.toJson());\n                }\n            }\n\n            // Always include all groups, even if they're not assigned to any entry (before or after the entry filter)\n            JSONArray groupsArray = new JSONArray();\n            for (VaultGroup group : _groups) {\n                groupsArray.put(group.toJson());\n            }\n\n            JSONObject obj = new JSONObject();\n            obj.put(\"version\", VERSION);\n            obj.put(\"entries\", entriesArray);\n            obj.put(\"groups\", groupsArray);\n            obj.put(\"icons_optimized\", _iconsOptimized);\n\n            return obj;\n        } catch (JSONException e) {\n            throw new RuntimeException(e);\n        }\n    }\n\n    public static Vault fromJson(JSONObject obj) throws VaultException {\n        Vault vault = new Vault();\n        UUIDMap<VaultEntry> entries = vault.getEntries();\n        UUIDMap<VaultGroup> groups = vault.getGroups();\n\n        try {\n            int ver = obj.getInt(\"version\");\n            if (ver > VERSION) {\n                throw new VaultException(\"Unsupported version\");\n            }\n\n            if (obj.has(\"groups\")) {\n                JSONArray groupsArray = obj.getJSONArray(\"groups\");\n                for (int i = 0; i < groupsArray.length(); i++) {\n                    VaultGroup group = VaultGroup.fromJson(groupsArray.getJSONObject(i));\n                    if (!groups.has(group)) {\n                        groups.add(group);\n                    }\n                }\n            }\n\n            JSONArray array = obj.getJSONArray(\"entries\");\n            for (int i = 0; i < array.length(); i++) {\n                VaultEntry entry = VaultEntry.fromJson(array.getJSONObject(i));\n                if (vault.migrateOldGroup(entry)) {\n                    vault.setGroupsMigrationFresh();\n                }\n\n                // check the vault has a group corresponding to each one the entry claims to be in\n                for (UUID groupUuid: entry.getGroups()) {\n                    if (!groups.has(groupUuid)) {\n                        entry.removeGroup(groupUuid);\n                    }\n                }\n\n                entries.add(entry);\n            }\n\n            if (!obj.optBoolean(\"icons_optimized\")) {\n                vault.setIconsOptimized(false);\n            }\n        } catch (VaultEntryException | JSONException e) {\n            throw new VaultException(e);\n        }\n\n        return vault;\n    }\n\n    private void setGroupsMigrationFresh() {\n        _isGroupsMigrationFresh = true;\n    }\n\n    public boolean isGroupsMigrationFresh() {\n        return _isGroupsMigrationFresh;\n    }\n\n    public void setIconsOptimized(boolean optimized) {\n        _iconsOptimized = optimized;\n    }\n\n    public boolean areIconsOptimized() {\n        return _iconsOptimized;\n    }\n\n    public boolean migrateOldGroup(VaultEntry entry) {\n        if (entry.getOldGroup() != null) {\n            Optional<VaultGroup> optGroup = getGroups().getValues()\n                                                 .stream()\n                                                 .filter(g -> g.getName().equals(entry.getOldGroup()))\n                                                 .findFirst();\n\n            if (optGroup.isPresent()) {\n                entry.addGroup(optGroup.get().getUUID());\n            } else {\n                VaultGroup group = new VaultGroup(entry.getOldGroup());\n                getGroups().add(group);\n                entry.addGroup(group.getUUID());\n            }\n\n            entry.setOldGroup(null);\n            return true;\n        }\n\n        return false;\n    }\n\n    public UUIDMap<VaultEntry> getEntries() {\n        return _entries;\n    }\n\n    public UUIDMap<VaultGroup> getGroups() {\n        return _groups;\n    }\n\n    public interface EntryFilter {\n        boolean includeEntry(VaultEntry entry);\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/vault/VaultBackupManager.java",
    "content": "package com.beemdevelopment.aegis.vault;\n\nimport android.content.ContentResolver;\nimport android.content.Context;\nimport android.content.UriPermission;\nimport android.net.Uri;\nimport android.text.TextUtils;\nimport android.util.Log;\n\nimport androidx.annotation.NonNull;\nimport androidx.documentfile.provider.DocumentFile;\n\nimport com.beemdevelopment.aegis.BackupsVersioningStrategy;\nimport com.beemdevelopment.aegis.Preferences;\nimport com.beemdevelopment.aegis.database.AuditLogRepository;\nimport com.beemdevelopment.aegis.util.IOUtils;\n\nimport java.io.File;\nimport java.io.FileInputStream;\nimport java.io.IOException;\nimport java.io.OutputStream;\nimport java.text.ParseException;\nimport java.text.ParsePosition;\nimport java.text.SimpleDateFormat;\nimport java.util.ArrayList;\nimport java.util.Arrays;\nimport java.util.Calendar;\nimport java.util.Collections;\nimport java.util.Comparator;\nimport java.util.Date;\nimport java.util.List;\nimport java.util.Locale;\nimport java.util.concurrent.ExecutorService;\nimport java.util.concurrent.Executors;\n\npublic class VaultBackupManager {\n    private static final String TAG = VaultBackupManager.class.getSimpleName();\n\n    private static final StrictDateFormat _dateFormat =\n            new StrictDateFormat(\"yyyyMMdd-HHmmss\", Locale.ENGLISH);\n\n    public static final String FILENAME_PREFIX = \"aegis-backup\";\n    public static final String FILENAME_SINGLE = String.format(\"%s.json\", FILENAME_PREFIX);\n\n    private final Context _context;\n    private final Preferences _prefs;\n    private final ExecutorService _executor;\n    private final AuditLogRepository _auditLogRepository;\n\n    public VaultBackupManager(Context context, AuditLogRepository auditLogRepository) {\n        _context = context;\n        _prefs = new Preferences(context);\n        _executor = Executors.newSingleThreadExecutor();\n        _auditLogRepository = auditLogRepository;\n    }\n\n    public void scheduleBackup(File tempFile, BackupsVersioningStrategy strategy, Uri uri, int versionsToKeep) {\n        _executor.execute(() -> {\n            try {\n                createBackup(tempFile, strategy, uri, versionsToKeep);\n                _auditLogRepository.addBackupCreatedEvent();\n                _prefs.setBuiltInBackupResult(new Preferences.BackupResult(null));\n            } catch (VaultRepositoryException | VaultBackupPermissionException e) {\n                e.printStackTrace();\n                _prefs.setBuiltInBackupResult(new Preferences.BackupResult(e));\n            }\n        });\n    }\n\n    private void createBackup(File tempFile, BackupsVersioningStrategy strategy, Uri uri, int versionsToKeep)\n            throws VaultRepositoryException, VaultBackupPermissionException {\n        if (uri == null) {\n            throw new VaultRepositoryException(\"getBackupsLocation returned null\");\n        }\n        if (strategy == BackupsVersioningStrategy.SINGLE_BACKUP) {\n            createBackup(tempFile, uri);\n        } else if (strategy == BackupsVersioningStrategy.MULTIPLE_BACKUPS) {\n            createBackup(tempFile, uri, versionsToKeep);\n        } else {\n            throw new VaultRepositoryException(\"Invalid backups versioning strategy\");\n        }\n    }\n\n    private void createBackup(File tempFile, Uri fileUri)\n            throws VaultRepositoryException, VaultBackupPermissionException {\n        Log.i(TAG, String.format(\"Creating backup at %s\", fileUri));\n        try {\n            if (!hasPermissionsAt(fileUri)) {\n                throw new VaultBackupPermissionException(\"No persisted URI permissions\");\n            }\n            ContentResolver resolver = _context.getContentResolver();\n            try (FileInputStream inStream = new FileInputStream(tempFile);\n                 OutputStream outStream = resolver.openOutputStream(fileUri, \"wt\")\n            ) {\n                if (outStream == null) {\n                    throw new IOException(\"openOutputStream returned null\");\n                }\n                IOUtils.copy(inStream, outStream);\n            } catch (IOException exception) {\n                throw new VaultRepositoryException(exception);\n            }\n        } catch (VaultRepositoryException | VaultBackupPermissionException exception) {\n            Log.e(TAG, String.format(\"Unable to create backup: %s\", exception));\n            throw exception;\n        } finally {\n            tempFile.delete();\n        }\n    }\n\n    private void createBackup(File tempFile, Uri dirUri, int versionsToKeep)\n            throws VaultRepositoryException, VaultBackupPermissionException {\n        FileInfo fileInfo = new FileInfo(FILENAME_PREFIX);\n        DocumentFile dir = DocumentFile.fromTreeUri(_context, dirUri);\n\n        try {\n            Log.i(TAG, String.format(\"Creating backup at %s: %s\", Uri.decode(dir.getUri().toString()), fileInfo.toString()));\n\n            if (!hasPermissionsAt(dirUri)) {\n                throw new VaultBackupPermissionException(\"No persisted URI permissions\");\n            }\n\n            // If we create a file with a name that already exists, SAF will append a number\n            // to the filename and write to that instead. We can't overwrite existing files, so\n            // just avoid that altogether by checking beforehand.\n            if (dir.findFile(fileInfo.toString()) != null) {\n                throw new VaultRepositoryException(\"Backup file already exists\");\n            }\n\n            DocumentFile file = dir.createFile(\"application/json\", fileInfo.toString());\n            if (file == null) {\n                throw new VaultRepositoryException(\"createFile returned null\");\n            }\n\n            try (FileInputStream inStream = new FileInputStream(tempFile);\n                 OutputStream outStream = _context.getContentResolver().openOutputStream(file.getUri())) {\n                if (outStream == null) {\n                    throw new IOException(\"openOutputStream returned null\");\n                }\n                IOUtils.copy(inStream, outStream);\n            } catch (IOException e) {\n                throw new VaultRepositoryException(e);\n            }\n        } catch (VaultRepositoryException | VaultBackupPermissionException e) {\n            Log.e(TAG, String.format(\"Unable to create backup: %s\", e.toString()));\n            throw e;\n        } finally {\n            tempFile.delete();\n        }\n\n        enforceVersioning(dir, versionsToKeep);\n    }\n\n    public boolean hasPermissionsAt(Uri uri) {\n        for (UriPermission perm : _context.getContentResolver().getPersistedUriPermissions()) {\n            if (perm.getUri().equals(uri)) {\n                return perm.isReadPermission() && perm.isWritePermission();\n            }\n        }\n\n        return false;\n    }\n\n    private void enforceVersioning(DocumentFile dir, int versionsToKeep) {\n        if (versionsToKeep <= 0) {\n            return;\n        }\n\n        Log.i(TAG, String.format(\"Scanning directory %s for backup files\", Uri.decode(dir.getUri().toString())));\n\n        List<BackupFile> files = new ArrayList<>();\n        for (DocumentFile docFile : dir.listFiles()) {\n            if (docFile.isFile() && !docFile.isVirtual()) {\n                try {\n                    files.add(new BackupFile(docFile));\n                } catch (ParseException ignored) { }\n            }\n        }\n\n        Log.i(TAG, String.format(\"Found %d backup files, keeping the %d most recent\", files.size(), versionsToKeep));\n\n        Collections.sort(files, new FileComparator());\n        if (files.size() > versionsToKeep) {\n            for (BackupFile file : files.subList(0, files.size() - versionsToKeep)) {\n                Log.i(TAG, String.format(\"Deleting %s\", file.getFile().getName()));\n                if (!file.getFile().delete()) {\n                    Log.e(TAG, String.format(\"Unable to delete %s\", file.getFile().getName()));\n                }\n            }\n        }\n    }\n\n    public static class FileInfo {\n        private String _filename;\n        private String _ext;\n        private Date _date;\n\n        public FileInfo(String filename, String extension, Date date) {\n            _filename = filename;\n            _ext = extension;\n            _date = date;\n        }\n\n        public FileInfo(String filename, Date date) {\n            this(filename, \"json\", date);\n        }\n\n        public FileInfo(String filename) {\n            this(filename, Calendar.getInstance().getTime());\n        }\n\n        public FileInfo(String filename, String extension) {\n            this(filename, extension, Calendar.getInstance().getTime());\n        }\n\n        public static FileInfo parseFilename(String filename) throws ParseException {\n            if (filename == null) {\n                throw new ParseException(\"The filename must not be null\", 0);\n            }\n\n            final String ext = \".json\";\n            if (!filename.endsWith(ext)) {\n                throwBadFormat(filename);\n            }\n            filename = filename.substring(0, filename.length() - ext.length());\n\n            final String delim = \"-\";\n            String[] parts = filename.split(delim);\n            if (parts.length < 3) {\n                throwBadFormat(filename);\n            }\n\n            filename = TextUtils.join(delim, Arrays.copyOf(parts, parts.length - 2));\n            if (!filename.equals(FILENAME_PREFIX)) {\n                throwBadFormat(filename);\n            }\n\n            Date date = _dateFormat.parse(parts[parts.length - 2] + delim + parts[parts.length - 1]);\n            if (date == null) {\n                throwBadFormat(filename);\n            }\n\n            return new FileInfo(filename, date);\n        }\n\n        private static void throwBadFormat(String filename) throws ParseException {\n            throw new ParseException(String.format(\"Bad backup filename format: %s\", filename), 0);\n        }\n\n        public String getFilename() {\n            return _filename;\n        }\n\n        public String getExtension() {\n            return _ext;\n        }\n\n        public Date getDate() {\n            return _date;\n        }\n\n        @NonNull\n        @Override\n        public String toString() {\n            return String.format(\"%s-%s.%s\", _filename, _dateFormat.format(_date), _ext);\n        }\n    }\n\n    private static class BackupFile {\n        private DocumentFile _file;\n        private FileInfo _info;\n\n        public BackupFile(DocumentFile file) throws ParseException {\n            _file = file;\n            _info = FileInfo.parseFilename(file.getName());\n        }\n\n        public DocumentFile getFile() {\n            return _file;\n        }\n\n        public FileInfo getInfo() {\n            return _info;\n        }\n    }\n\n    private static class FileComparator implements Comparator<BackupFile> {\n        @Override\n        public int compare(BackupFile o1, BackupFile o2) {\n            return o1.getInfo().getDate().compareTo(o2.getInfo().getDate());\n        }\n    }\n\n    // https://stackoverflow.com/a/19503019\n    private static class StrictDateFormat extends SimpleDateFormat {\n        public StrictDateFormat(String pattern, Locale locale) {\n            super(pattern, locale);\n            setLenient(false);\n        }\n\n        @Override\n        public Date parse(@NonNull String text, ParsePosition pos) {\n            int posIndex = pos.getIndex();\n            Date d = super.parse(text, pos);\n            if (!isLenient() && d != null) {\n                String format = format(d);\n                if (posIndex + format.length() != text.length() ||\n                        !text.endsWith(format)) {\n                    d = null; // Not exact match\n                }\n            }\n            return d;\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/vault/VaultBackupPermissionException.java",
    "content": "package com.beemdevelopment.aegis.vault;\n\npublic class VaultBackupPermissionException extends Exception {\n    public VaultBackupPermissionException(String message) {\n        super(message);\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/vault/VaultEntry.java",
    "content": "package com.beemdevelopment.aegis.vault;\n\nimport com.beemdevelopment.aegis.otp.GoogleAuthInfo;\nimport com.beemdevelopment.aegis.otp.OtpInfo;\nimport com.beemdevelopment.aegis.otp.OtpInfoException;\nimport com.beemdevelopment.aegis.otp.TotpInfo;\nimport com.beemdevelopment.aegis.util.JsonUtils;\nimport com.beemdevelopment.aegis.util.UUIDMap;\n\nimport org.json.JSONArray;\nimport org.json.JSONException;\nimport org.json.JSONObject;\n\nimport java.util.Objects;\nimport java.util.Set;\nimport java.util.TreeSet;\nimport java.util.UUID;\n\npublic class VaultEntry extends UUIDMap.Value {\n    private String _name = \"\";\n    private String _issuer = \"\";\n    private OtpInfo _info;\n    private VaultEntryIcon _icon;\n    private boolean _isFavorite;\n    private int _usageCount;\n    private long _lastUsedTimestamp;\n    private String _note = \"\";\n    private String _oldGroup;\n    private Set<UUID> _groups = new TreeSet<>();\n\n    private VaultEntry(UUID uuid, OtpInfo info) {\n        super(uuid);\n        _info = info;\n    }\n\n    public VaultEntry(OtpInfo info) {\n        super();\n        _info = info;\n    }\n\n    public VaultEntry(OtpInfo info, String name, String issuer) {\n        this(info);\n        setName(name);\n        setIssuer(issuer);\n    }\n\n    public VaultEntry(GoogleAuthInfo info) {\n        this(info.getOtpInfo(), info.getAccountName(), info.getIssuer());\n    }\n\n    public JSONObject toJson() {\n        JSONObject obj = new JSONObject();\n\n        try {\n            obj.put(\"type\", _info.getTypeId());\n            obj.put(\"uuid\", getUUID().toString());\n            obj.put(\"name\", _name);\n            obj.put(\"issuer\", _issuer);\n            obj.put(\"note\", _note);\n            obj.put(\"favorite\", _isFavorite);\n            VaultEntryIcon.toJson(_icon, obj);\n            obj.put(\"info\", _info.toJson());\n\n            JSONArray groupUuids = new JSONArray();\n            for (UUID uuid : _groups) {\n                groupUuids.put(uuid.toString());\n            }\n            obj.put(\"groups\", groupUuids);\n\n        } catch (JSONException e) {\n            throw new RuntimeException(e);\n        }\n\n        return obj;\n    }\n\n    public static VaultEntry fromJson(JSONObject obj) throws VaultEntryException {\n        try {\n            // if there is no uuid, generate a new one\n            UUID uuid;\n            if (!obj.has(\"uuid\")) {\n                uuid = UUID.randomUUID();\n            } else {\n                uuid = UUID.fromString(obj.getString(\"uuid\"));\n            }\n\n            OtpInfo info = OtpInfo.fromJson(obj.getString(\"type\"), obj.getJSONObject(\"info\"));\n            VaultEntry entry = new VaultEntry(uuid, info);\n            entry.setName(obj.getString(\"name\"));\n            entry.setIssuer(obj.getString(\"issuer\"));\n            entry.setNote(obj.optString(\"note\", \"\"));\n            entry.setIsFavorite(obj.optBoolean(\"favorite\", false));\n\n            // If the entry contains a list of group UUID's, assume conversion from the\n            // old group system has already taken place and ignore the old group field.\n            if (obj.has(\"groups\")) {\n                JSONArray groups = obj.getJSONArray(\"groups\");\n                for (int i = 0; i < groups.length(); i++) {\n                    String groupUuid = groups.getString(i);\n                    entry.addGroup(UUID.fromString(groupUuid));\n                }\n            } else if (obj.has(\"group\")) {\n                entry.setOldGroup(JsonUtils.optString(obj, \"group\"));\n            }\n\n            // Silently ignore any errors that occur when trying to parse the icon of an\n            // entry. This allows us to introduce new icon types in the future (e.g. WebP)\n            // without breaking compatibility with older versions of Aegis.\n            try {\n                VaultEntryIcon icon = VaultEntryIcon.fromJson(obj);\n                entry.setIcon(icon);\n            } catch (VaultEntryIconException ignored) {\n            }\n\n            return entry;\n        } catch (OtpInfoException | JSONException e) {\n            throw new VaultEntryException(e);\n        }\n    }\n\n    public String getName() {\n        return _name;\n    }\n\n    public String getIssuer() {\n        return _issuer;\n    }\n\n    public Set<UUID> getGroups() {\n        return _groups;\n    }\n\n    public VaultEntryIcon getIcon() {\n        return _icon;\n    }\n\n    public OtpInfo getInfo() {\n        return _info;\n    }\n\n    public int getUsageCount() {\n        return _usageCount;\n    }\n\n    public long getLastUsedTimestamp() {\n        return _lastUsedTimestamp;\n    }\n\n    public String getNote() {\n        return _note;\n    }\n\n    public boolean isFavorite() {\n        return _isFavorite;\n    }\n\n    public void setName(String name) {\n        _name = name;\n    }\n\n    public void setIssuer(String issuer) {\n        _issuer = issuer;\n    }\n\n    public void addGroup(UUID group) {\n        if (group == null) {\n            throw new AssertionError(\"Attempt to add null group to entry's group list\");\n        }\n        _groups.add(group);\n    }\n\n    public void removeGroup(UUID group) {\n        _groups.remove(group);\n    }\n\n    public void setGroups(Set<UUID> groups) {\n        if (groups.contains(null)) {\n            throw new AssertionError(\"Attempt to add null group to entry's group list\");\n        }\n        _groups = groups;\n    }\n\n    public void setInfo(OtpInfo info) {\n        _info = info;\n    }\n\n    public void setIcon(VaultEntryIcon icon) {\n        _icon = icon;\n    }\n\n    public boolean hasIcon() {\n        return _icon != null;\n    }\n\n    public void setUsageCount(int usageCount) {\n        _usageCount = usageCount;\n    }\n\n    public void setLastUsedTimestamp(long lastUsedTimestamp) { _lastUsedTimestamp = lastUsedTimestamp; }\n\n    public void setNote(String note) {\n        _note = note;\n    }\n\n    public void setIsFavorite(boolean isFavorite) {\n        _isFavorite = isFavorite;\n    }\n\n    void setOldGroup(String oldGroup) {\n        _oldGroup = oldGroup;\n    }\n\n    String getOldGroup() {\n        return _oldGroup;\n    }\n\n    @Override\n    public boolean equals(Object o) {\n        if (!(o instanceof VaultEntry)) {\n            return false;\n        }\n\n        VaultEntry entry = (VaultEntry) o;\n        return super.equals(entry) && equivalates(entry);\n    }\n\n    /**\n     * Reports whether this entry is equivalent to the given entry. The UUIDs of these\n     * entries are ignored during the comparison, so they are not necessarily the same\n     * instance.\n     */\n    public boolean equivalates(VaultEntry entry) {\n        return getName().equals(entry.getName())\n                && getIssuer().equals(entry.getIssuer())\n                && getInfo().equals(entry.getInfo())\n                && Objects.equals(getIcon(), entry.getIcon())\n                && getNote().equals(entry.getNote())\n                && isFavorite() == entry.isFavorite()\n                && getGroups().equals(entry.getGroups());\n    }\n\n    public boolean hasSameNameAndIssuer(VaultEntry entry) {\n        return getName().equals(entry.getName()) && getIssuer().equals(entry.getIssuer());\n    }\n\n    /**\n     * Reports whether this entry has its values set to the defaults.\n     */\n    public boolean isDefault() {\n        return equivalates(getDefault());\n    }\n\n    public static VaultEntry getDefault() {\n        try {\n            return new VaultEntry(new TotpInfo(null));\n        } catch (OtpInfoException e) {\n            throw new RuntimeException(e);\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/vault/VaultEntryException.java",
    "content": "package com.beemdevelopment.aegis.vault;\n\npublic class VaultEntryException extends Exception {\n    public VaultEntryException(Throwable cause) {\n        super(cause);\n    }\n\n    public VaultEntryException(String message) {\n        super(message);\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/vault/VaultEntryIcon.java",
    "content": "package com.beemdevelopment.aegis.vault;\n\nimport androidx.annotation.NonNull;\nimport androidx.annotation.Nullable;\n\nimport com.beemdevelopment.aegis.encoding.Base64;\nimport com.beemdevelopment.aegis.encoding.EncodingException;\nimport com.beemdevelopment.aegis.encoding.Hex;\nimport com.beemdevelopment.aegis.icons.IconType;\nimport com.beemdevelopment.aegis.util.JsonUtils;\nimport com.google.common.hash.HashCode;\n\nimport org.json.JSONException;\nimport org.json.JSONObject;\n\nimport java.io.Serializable;\nimport java.nio.charset.StandardCharsets;\nimport java.security.MessageDigest;\nimport java.security.NoSuchAlgorithmException;\nimport java.util.Arrays;\n\npublic class VaultEntryIcon implements Serializable {\n    private final byte[] _bytes;\n    private final byte[] _hash;\n    private final IconType _type;\n\n    public static final int MAX_DIMENS = 512;\n\n    public VaultEntryIcon(@NonNull byte[] bytes, @NonNull IconType type) {\n        this(bytes, type, generateHash(bytes, type));\n    }\n\n    VaultEntryIcon(@NonNull byte[] bytes, @NonNull IconType type, @NonNull byte[] hash) {\n        _bytes = bytes;\n        _hash = hash;\n        _type = type;\n    }\n\n    public @NonNull byte[] getBytes() {\n        return _bytes;\n    }\n\n    public @NonNull byte[] getHash() {\n        return _hash;\n    }\n\n    @NonNull\n    public IconType getType() {\n        return _type;\n    }\n\n    @Override\n    public boolean equals(Object o) {\n        if (!(o instanceof VaultEntryIcon)) {\n            return false;\n        }\n\n        VaultEntryIcon entry = (VaultEntryIcon) o;\n        return Arrays.equals(getHash(), entry.getHash());\n    }\n\n    @Override\n    public int hashCode() {\n        return HashCode.fromBytes(_hash).asInt();\n    }\n\n    static void toJson(@Nullable VaultEntryIcon icon, @NonNull JSONObject obj) throws JSONException {\n        obj.put(\"icon\", icon == null ? JSONObject.NULL : Base64.encode(icon.getBytes()));\n        if (icon != null) {\n            obj.put(\"icon_mime\", icon.getType().toMimeType());\n            obj.put(\"icon_hash\", Hex.encode(icon.getHash()));\n        }\n    }\n\n    @Nullable\n    static VaultEntryIcon fromJson(@NonNull JSONObject obj) throws VaultEntryIconException {\n        try {\n            Object icon = obj.get(\"icon\");\n            if (icon == JSONObject.NULL) {\n                return null;\n            }\n\n            String mime = JsonUtils.optString(obj, \"icon_mime\");\n            IconType iconType = mime == null ? IconType.JPEG : IconType.fromMimeType(mime);\n            if (iconType == IconType.INVALID) {\n                throw new VaultEntryIconException(String.format(\"Bad icon MIME type: %s\", mime));\n            }\n\n            byte[] iconBytes = Base64.decode((String) icon);\n            String iconHashStr = JsonUtils.optString(obj, \"icon_hash\");\n            if (iconHashStr != null) {\n                byte[] iconHash = Hex.decode(iconHashStr);\n                return new VaultEntryIcon(iconBytes, iconType, iconHash);\n            }\n\n            return new VaultEntryIcon(iconBytes, iconType);\n        } catch (JSONException | EncodingException e) {\n            throw new VaultEntryIconException(e);\n        }\n    }\n\n    private static @NonNull byte[] generateHash(@NonNull byte[] bytes, @NonNull IconType type) {\n        try {\n            MessageDigest md = MessageDigest.getInstance(\"SHA-256\");\n            md.update(type.toMimeType().getBytes(StandardCharsets.UTF_8));\n            return md.digest(bytes);\n        } catch (NoSuchAlgorithmException e) {\n            throw new RuntimeException(e);\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/vault/VaultEntryIconException.java",
    "content": "package com.beemdevelopment.aegis.vault;\n\npublic class VaultEntryIconException extends Exception {\n    public VaultEntryIconException(Throwable cause) {\n        super(cause);\n    }\n\n    public VaultEntryIconException(String message) {\n        super(message);\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/vault/VaultException.java",
    "content": "package com.beemdevelopment.aegis.vault;\n\npublic class VaultException extends Exception {\n    public VaultException(Throwable cause) {\n        super(cause);\n    }\n\n    public VaultException(String message) {\n        super(message);\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/vault/VaultFile.java",
    "content": "package com.beemdevelopment.aegis.vault;\n\nimport com.beemdevelopment.aegis.crypto.CryptParameters;\nimport com.beemdevelopment.aegis.crypto.CryptResult;\nimport com.beemdevelopment.aegis.crypto.MasterKeyException;\nimport com.beemdevelopment.aegis.encoding.Base64;\nimport com.beemdevelopment.aegis.encoding.EncodingException;\nimport com.beemdevelopment.aegis.vault.slots.SlotList;\nimport com.beemdevelopment.aegis.vault.slots.SlotListException;\n\nimport org.json.JSONException;\nimport org.json.JSONObject;\n\nimport java.nio.charset.StandardCharsets;\n\npublic class VaultFile {\n    public static final byte VERSION = 1;\n\n    private Object _content;\n    private Header _header;\n\n    public VaultFile() {\n\n    }\n\n    private VaultFile(Object content, Header header) {\n        _content = content;\n        _header = header;\n    }\n\n    public Header getHeader() {\n        return _header;\n    }\n\n    public boolean isEncrypted() {\n        return !_header.isEmpty();\n    }\n\n    public JSONObject toJson() {\n        try {\n            JSONObject obj = new JSONObject();\n            obj.put(\"version\", VERSION);\n            obj.put(\"header\", _header.toJson());\n            obj.put(\"db\", _content);\n            return obj;\n        } catch (JSONException e) {\n            throw new RuntimeException(e);\n        }\n    }\n\n    public byte[] toBytes() {\n        JSONObject obj = toJson();\n\n        try {\n            String string = obj.toString(4);\n            return string.getBytes(StandardCharsets.UTF_8);\n        } catch (JSONException e) {\n            throw new RuntimeException(e);\n        }\n    }\n\n    public static VaultFile fromJson(JSONObject obj) throws VaultFileException {\n        try {\n            if (obj.getInt(\"version\") > VERSION) {\n                throw new VaultFileException(\"unsupported version\");\n            }\n\n            Header header = Header.fromJson(obj.getJSONObject(\"header\"));\n            if (!header.isEmpty()) {\n                return new VaultFile(obj.getString(\"db\"), header);\n            }\n\n            return new VaultFile(obj.getJSONObject(\"db\"), header);\n        } catch (JSONException e) {\n            throw new VaultFileException(e);\n        }\n    }\n\n    public static VaultFile fromBytes(byte[] data) throws VaultFileException {\n        try {\n            JSONObject obj = new JSONObject(new String(data, StandardCharsets.UTF_8));\n            return VaultFile.fromJson(obj);\n        } catch (JSONException e) {\n            throw new VaultFileException(e);\n        }\n    }\n\n    public JSONObject getContent() {\n        return (JSONObject) _content;\n    }\n\n    public JSONObject getContent(VaultFileCredentials creds) throws VaultFileException {\n        try {\n            byte[] bytes = Base64.decode((String) _content);\n            CryptResult result = creds.decrypt(bytes, _header.getParams());\n            return new JSONObject(new String(result.getData(), StandardCharsets.UTF_8));\n        } catch (MasterKeyException | JSONException | EncodingException e) {\n            throw new VaultFileException(e);\n        }\n    }\n\n    public void setContent(JSONObject obj) {\n        _content = obj;\n        _header = new Header(null, null);\n    }\n\n    public void setContent(JSONObject obj, VaultFileCredentials creds) throws VaultFileException {\n        try {\n            String string = obj.toString(4);\n            byte[] vaultBytes = string.getBytes(StandardCharsets.UTF_8);\n\n            CryptResult result = creds.encrypt(vaultBytes);\n            _content = Base64.encode(result.getData());\n            _header = new Header(creds.getSlots(), result.getParams());\n        } catch (MasterKeyException | JSONException e) {\n            throw new VaultFileException(e);\n        }\n    }\n\n    /**\n     * Returns a copy of this VaultFile that's suitable for exporting.\n     * In case there's a backup password slot, any regular password slots are stripped.\n     */\n    public VaultFile exportable() {\n        if (!isEncrypted()) {\n            return this;\n        }\n\n        return new VaultFile(_content, new VaultFile.Header(\n                getHeader().getSlots().exportable(),\n                getHeader().getParams()\n        ));\n    }\n\n    public static class Header {\n        private SlotList _slots;\n        private CryptParameters _params;\n\n        public Header(SlotList slots, CryptParameters params) {\n            _slots = slots;\n            _params = params;\n        }\n\n        public static Header fromJson(JSONObject obj) throws VaultFileException {\n            if (obj.isNull(\"slots\") && obj.isNull(\"params\")) {\n                return new Header(null, null);\n            }\n\n            try {\n                SlotList slots = SlotList.fromJson(obj.getJSONArray(\"slots\"));\n                CryptParameters params = CryptParameters.fromJson(obj.getJSONObject(\"params\"));\n                return new Header(slots, params);\n            } catch (SlotListException | JSONException | EncodingException e) {\n                throw new VaultFileException(e);\n            }\n        }\n\n        public JSONObject toJson() {\n            try {\n                JSONObject obj = new JSONObject();\n                obj.put(\"slots\", _slots != null ? _slots.toJson() : JSONObject.NULL);\n                obj.put(\"params\", _params != null ? _params.toJson() : JSONObject.NULL);\n                return obj;\n            } catch (JSONException e) {\n                throw new RuntimeException(e);\n            }\n        }\n\n        public SlotList getSlots() {\n            return _slots;\n        }\n\n        public CryptParameters getParams() {\n            return _params;\n        }\n\n        public boolean isEmpty() {\n            return _slots == null && _params == null;\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/vault/VaultFileCredentials.java",
    "content": "package com.beemdevelopment.aegis.vault;\n\nimport androidx.annotation.NonNull;\n\nimport com.beemdevelopment.aegis.crypto.CryptParameters;\nimport com.beemdevelopment.aegis.crypto.CryptResult;\nimport com.beemdevelopment.aegis.crypto.MasterKey;\nimport com.beemdevelopment.aegis.crypto.MasterKeyException;\nimport com.beemdevelopment.aegis.util.Cloner;\nimport com.beemdevelopment.aegis.vault.slots.SlotList;\n\nimport java.io.Serializable;\n\npublic class VaultFileCredentials implements Serializable {\n    private MasterKey _key;\n    private SlotList _slots;\n\n    public VaultFileCredentials() {\n        _key = MasterKey.generate();\n        _slots = new SlotList();\n    }\n\n    public VaultFileCredentials(MasterKey key, SlotList slots) {\n        _key = key;\n        _slots = slots;\n    }\n\n    public CryptResult encrypt(byte[] bytes) throws MasterKeyException {\n        return _key.encrypt(bytes);\n    }\n\n    public CryptResult decrypt(byte[] bytes, CryptParameters params) throws MasterKeyException {\n        return _key.decrypt(bytes, params);\n    }\n\n    public MasterKey getKey() {\n        return _key;\n    }\n\n    public SlotList getSlots() {\n        return _slots;\n    }\n\n    /**\n     * Returns a copy of these VaultFileCredentials that is suitable for exporting.\n     * In case there's a backup password slot, any regular password slots are stripped.\n     */\n    public VaultFileCredentials exportable() {\n        return new VaultFileCredentials(_key, _slots.exportable());\n    }\n\n    @NonNull\n    @Override\n    public VaultFileCredentials clone() {\n        return Cloner.clone(this);\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/vault/VaultFileException.java",
    "content": "package com.beemdevelopment.aegis.vault;\n\npublic class VaultFileException extends Exception {\n    public VaultFileException(Throwable cause) {\n        super(cause);\n    }\n\n    public VaultFileException(String message) {\n        super(message);\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/vault/VaultGroup.java",
    "content": "package com.beemdevelopment.aegis.vault;\n\nimport com.beemdevelopment.aegis.util.UUIDMap;\n\nimport org.json.JSONException;\nimport org.json.JSONObject;\n\nimport java.util.UUID;\n\npublic class VaultGroup extends UUIDMap.Value {\n    private String _name;\n\n    private VaultGroup(UUID uuid, String name) {\n        super(uuid);\n        _name = name;\n    }\n\n    public VaultGroup(String name) {\n        super();\n        _name = name;\n    }\n\n    public JSONObject toJson() {\n        JSONObject obj = new JSONObject();\n\n        try {\n            obj.put(\"uuid\", getUUID().toString());\n            obj.put(\"name\", _name);\n        } catch (JSONException e) {\n            throw new RuntimeException(e);\n        }\n\n        return obj;\n    }\n\n    public static VaultGroup fromJson(JSONObject obj) throws VaultEntryException {\n        try {\n            UUID uuid = UUID.fromString(obj.getString(\"uuid\"));\n            String groupName = obj.getString(\"name\");\n\n            return new VaultGroup(uuid, groupName);\n        } catch (JSONException e) {\n            throw new VaultEntryException(e);\n        }\n    }\n\n    @Override\n    public boolean equals(Object o) {\n        if (!(o instanceof VaultGroup)) {\n            return false;\n        }\n\n        VaultGroup entry = (VaultGroup) o;\n        return super.equals(entry) && getName().equals(entry.getName());\n    }\n\n    public String getName() {\n        return _name;\n    }\n\n    public void setName(String name) {\n        _name = name;\n    }\n\n    @Override\n    public String toString() {\n        return _name;\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/vault/VaultHtmlExporter.java",
    "content": "package com.beemdevelopment.aegis.vault;\n\nimport android.content.Context;\nimport android.graphics.Bitmap;\nimport android.graphics.Color;\nimport android.util.Base64;\n\nimport com.beemdevelopment.aegis.R;\nimport com.beemdevelopment.aegis.encoding.Base32;\nimport com.beemdevelopment.aegis.encoding.Hex;\nimport com.beemdevelopment.aegis.helpers.QrCodeHelper;\nimport com.beemdevelopment.aegis.otp.GoogleAuthInfo;\nimport com.beemdevelopment.aegis.otp.HotpInfo;\nimport com.beemdevelopment.aegis.otp.MotpInfo;\nimport com.beemdevelopment.aegis.otp.OtpInfo;\nimport com.beemdevelopment.aegis.otp.YandexInfo;\nimport com.google.common.html.HtmlEscapers;\nimport com.google.zxing.WriterException;\n\nimport java.io.ByteArrayOutputStream;\nimport java.io.IOException;\nimport java.io.PrintStream;\nimport java.util.Collection;\n\npublic class VaultHtmlExporter {\n    private VaultHtmlExporter() {\n\n    }\n\n    public static void export(Context context, PrintStream ps, Collection<VaultEntry> entries) throws WriterException, IOException {\n        ps.print(\"<html><head><title>\");\n        ps.print(context.getString(R.string.export_html_title));\n        ps.print(\"</title></head><body>\");\n        ps.print(\"<h1>\");\n        ps.print(context.getString(R.string.export_html_title));\n        ps.print(\"</h1>\");\n        ps.print(\"<table>\");\n        ps.print(\"<tr>\");\n        ps.print(\"<th>Issuer</th>\");\n        ps.print(\"<th>Name</th>\");\n        ps.print(\"<th>Type</th>\");\n        ps.print(\"<th>QR Code</th>\");\n        ps.print(\"<th>UUID</th>\");\n        ps.print(\"<th>Note</th>\");\n        ps.print(\"<th>Favorite</th>\");\n        ps.print(\"<th>Algo</th>\");\n        ps.print(\"<th>Digits</th>\");\n        ps.print(\"<th>Secret</th>\");\n        ps.print(\"<th>Counter</th>\");\n        ps.print(\"<th>PIN</th>\");\n        ps.print(\"</tr>\");\n        for (VaultEntry entry : entries) {\n            ps.print(\"<tr>\");\n            OtpInfo info = entry.getInfo();\n            GoogleAuthInfo gaInfo = new GoogleAuthInfo(info, entry.getName(), entry.getIssuer());\n            appendRow(ps, entry.getIssuer());\n            appendRow(ps, entry.getName());\n            appendRow(ps, info.getType());\n            appendQrRow(ps, gaInfo.getUri().toString());\n            appendRow(ps, entry.getUUID().toString());\n            appendRow(ps, entry.getNote());\n            appendRow(ps, Boolean.toString(entry.isFavorite()));\n            appendRow(ps, info.getAlgorithm(false));\n            appendRow(ps, Integer.toString(info.getDigits()));\n            if (info instanceof MotpInfo) {\n                appendRow(ps, Hex.encode(info.getSecret()));\n            } else {\n                appendRow(ps, Base32.encode(info.getSecret()));\n            }\n            if (info instanceof HotpInfo) {\n                appendRow(ps, Long.toString(((HotpInfo) info).getCounter()));\n            } else {\n                appendRow(ps, \"-\");\n            }\n            if (info instanceof YandexInfo) {\n                appendRow(ps, ((YandexInfo) info).getPin());\n            } else if (info instanceof MotpInfo) {\n                appendRow(ps, ((MotpInfo) info).getPin());\n            } else {\n                appendRow(ps, \"-\");\n            }\n            ps.print(\"</tr>\");\n        }\n        ps.print(\"</table></body>\");\n        ps.print(\"<style>table,td,th{border:1px solid #000;border-collapse:collapse;text-align:center}td:not(.qr),th{padding:1em}</style>\");\n        ps.print(\"</html>\");\n    }\n\n    private static void appendRow(PrintStream ps, String s) {\n        ps.print(\"<td>\");\n        ps.print(escape(s));\n        ps.print(\"</td>\");\n    }\n\n    private static void appendQrRow(PrintStream ps, String s) throws IOException, WriterException {\n        ps.print(\"<td class='qr'><img src=\\\"data:image/png;base64,\");\n        Bitmap bm = QrCodeHelper.encodeToBitmap(s, 256, 256, Color.WHITE);\n        try (ByteArrayOutputStream baos = new ByteArrayOutputStream()) {\n            bm.compress(Bitmap.CompressFormat.PNG, 100, baos);\n            String encoded = Base64.encodeToString(baos.toByteArray(), Base64.DEFAULT);\n            ps.print(encoded);\n        }\n        ps.print(\"\\\"/></td>\");\n    }\n\n    private static String escape(String s) {\n        return HtmlEscapers.htmlEscaper().escape(s);\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/vault/VaultManager.java",
    "content": "package com.beemdevelopment.aegis.vault;\n\nimport android.app.Activity;\nimport android.app.backup.BackupManager;\nimport android.content.ActivityNotFoundException;\nimport android.content.Context;\nimport android.content.Intent;\nimport android.net.Uri;\n\nimport androidx.activity.result.ActivityResultLauncher;\nimport androidx.annotation.NonNull;\nimport androidx.annotation.Nullable;\nimport androidx.fragment.app.Fragment;\n\nimport com.beemdevelopment.aegis.BackupsVersioningStrategy;\nimport com.beemdevelopment.aegis.Preferences;\nimport com.beemdevelopment.aegis.R;\nimport com.beemdevelopment.aegis.crypto.KeyStoreHandle;\nimport com.beemdevelopment.aegis.crypto.KeyStoreHandleException;\nimport com.beemdevelopment.aegis.database.AuditLogRepository;\nimport com.beemdevelopment.aegis.services.NotificationService;\nimport com.beemdevelopment.aegis.ui.dialogs.Dialogs;\n\nimport java.io.File;\nimport java.io.FileOutputStream;\nimport java.io.IOException;\nimport java.io.OutputStream;\nimport java.util.ArrayList;\nimport java.util.List;\n\npublic class VaultManager {\n    private final Context _context;\n    private final Preferences _prefs;\n\n    private VaultRepository _repo;\n\n    private final VaultBackupManager _backups;\n    private final BackupManager _androidBackups;\n\n    private final List<LockListener> _lockListeners;\n    private boolean _blockAutoLock;\n\n    private final AuditLogRepository _auditLogRepository;\n\n    public VaultManager(@NonNull Context context, AuditLogRepository auditLogRepository) {\n        _context = context;\n        _prefs = new Preferences(_context);\n        _backups = new VaultBackupManager(_context, auditLogRepository);\n        _androidBackups = new BackupManager(context);\n        _lockListeners = new ArrayList<>();\n        _auditLogRepository = auditLogRepository;\n    }\n\n    /**\n     * Initializes the vault repository with a new empty vault and the given creds. It can\n     * only be called if isVaultLoaded() returns false.\n     */\n    @NonNull\n    public VaultRepository initNew(@Nullable VaultFileCredentials creds) throws VaultRepositoryException {\n        if (isVaultLoaded()) {\n            throw new IllegalStateException(\"Vault manager is already initialized\");\n        }\n\n        VaultRepository repo = new VaultRepository(_context, new Vault(), creds);\n        repo.save();\n        _repo = repo;\n\n        if (getVault().isEncryptionEnabled()) {\n            startNotificationService();\n        }\n\n        return getVault();\n    }\n\n    /**\n     * Initializes the vault repository by decrypting the given vaultFile with the given\n     * creds. It can only be called if isVaultLoaded() returns false.\n     */\n    @NonNull\n    public VaultRepository loadFrom(@NonNull VaultFile vaultFile, @Nullable VaultFileCredentials creds) throws VaultRepositoryException {\n        if (isVaultLoaded()) {\n            throw new IllegalStateException(\"Vault manager is already initialized\");\n        }\n\n        _repo = VaultRepository.fromFile(_context, vaultFile, creds);\n\n        if (getVault().isEncryptionEnabled()) {\n            startNotificationService();\n        }\n\n        return getVault();\n    }\n\n    @NonNull\n    public VaultRepository loadFrom(@NonNull VaultFile vaultFile) throws VaultRepositoryException {\n        return loadFrom(vaultFile, null);\n    }\n\n    /**\n     * Locks the vault and the app.\n     * @param userInitiated whether or not the user initiated the lock in MainActivity.\n     */\n    public void lock(boolean userInitiated) {\n        _repo = null;\n\n        for (LockListener listener : _lockListeners) {\n            listener.onLocked(userInitiated);\n        }\n\n        stopNotificationService();\n    }\n\n    public void enableEncryption(VaultFileCredentials creds) throws VaultRepositoryException {\n        getVault().setCredentials(creds);\n        saveAndBackup();\n        startNotificationService();\n    }\n\n    public void disableEncryption() throws VaultRepositoryException {\n        getVault().setCredentials(null);\n        save();\n\n        // remove any keys that are stored in the KeyStore\n        try {\n            KeyStoreHandle handle = new KeyStoreHandle();\n            handle.clear();\n        } catch (KeyStoreHandleException e) {\n            // this cleanup operation is not strictly necessary, so we ignore any exceptions here\n            e.printStackTrace();\n        }\n\n        stopNotificationService();\n    }\n\n    public void save() throws VaultRepositoryException {\n        getVault().save();\n    }\n\n    public void saveAndBackup() throws VaultRepositoryException {\n        save();\n\n        boolean backedUp = false;\n        if (getVault().isEncryptionEnabled()) {\n            if (_prefs.isBackupsEnabled()) {\n                backedUp = true;\n                try {\n                    scheduleBackup();\n                } catch (VaultRepositoryException e) {\n                    _prefs.setBuiltInBackupResult(new Preferences.BackupResult(e));\n                }\n            }\n\n            if (_prefs.isAndroidBackupsEnabled()) {\n                backedUp = true;\n                scheduleAndroidBackup();\n            }\n        }\n\n        if (!backedUp) {\n            _prefs.setIsBackupReminderNeeded(true);\n        }\n    }\n\n    public void scheduleBackup() throws VaultRepositoryException {\n        _prefs.setIsBackupReminderNeeded(false);\n\n        try {\n            File dir = new File(_context.getCacheDir(), \"backup\");\n            if (!dir.exists() && !dir.mkdir()) {\n                throw new IOException(String.format(\"Unable to create directory %s\", dir));\n            }\n\n            File tempFile = File.createTempFile(VaultBackupManager.FILENAME_PREFIX, \".json\", dir);\n            try (OutputStream outStream = new FileOutputStream(tempFile)) {\n                _repo.export(outStream);\n            }\n            BackupsVersioningStrategy strategy = _prefs.getBackupVersioningStrategy();\n            Uri uri = _prefs.getBackupsLocation();\n            int versionsToKeep = _prefs.getBackupsVersionCount();\n\n            _backups.scheduleBackup(tempFile, strategy, uri, versionsToKeep);\n        } catch (IOException e) {\n            throw new VaultRepositoryException(e);\n        }\n    }\n\n    public void scheduleAndroidBackup() {\n        _prefs.setIsBackupReminderNeeded(false);\n        _androidBackups.dataChanged();\n    }\n\n    public boolean isAutoLockEnabled(int autoLockType) {\n        return _prefs.isAutoLockTypeEnabled(autoLockType)\n                && isVaultLoaded()\n                && getVault().isEncryptionEnabled();\n    }\n\n    public void registerLockListener(LockListener listener) {\n        _lockListeners.add(listener);\n    }\n\n    public void unregisterLockListener(LockListener listener) {\n        _lockListeners.remove(listener);\n    }\n\n    /**\n     * Sets whether to block automatic lock on minimization. This should only be called\n     * by activities before invoking an intent that shows a DocumentsUI, because that\n     * action leads AppLifecycleObserver to believe that the app has been minimized.\n     */\n    public void setBlockAutoLock(boolean block) {\n        _blockAutoLock = block;\n    }\n\n    /**\n     * Reports whether automatic lock on minimization is currently blocked.\n     */\n    public boolean isAutoLockBlocked() {\n        return _blockAutoLock;\n    }\n\n    public boolean isVaultLoaded() {\n        return _repo != null;\n    }\n\n    public boolean isVaultInitNeeded() {\n        return !isVaultLoaded() && !VaultRepository.fileExists(_context);\n    }\n\n    @NonNull\n    public VaultRepository getVault() {\n        if (!isVaultLoaded()) {\n            throw new IllegalStateException(\"Vault manager is not initialized\");\n        }\n\n        return _repo;\n    }\n\n    /**\n     * Starts an external activity, temporarily blocks automatic lock of Aegis and\n     * shows an error dialog if the target activity is not found.\n     */\n    public void fireIntentLauncher(Activity activity, Intent intent, ActivityResultLauncher<Intent> resultLauncher) {\n        setBlockAutoLock(true);\n\n        try {\n            resultLauncher.launch(intent);\n        } catch (ActivityNotFoundException e) {\n            e.printStackTrace();\n\n            if (isDocsAction(intent.getAction())) {\n                Dialogs.showErrorDialog(activity, R.string.documentsui_error, e);\n            } else {\n                throw e;\n            }\n        }\n    }\n\n    /**\n     * Starts an external activity, temporarily blocks automatic lock of Aegis and\n     * shows an error dialog if the target activity is not found.\n     */\n    public void fireIntentLauncher(Fragment fragment, Intent intent, ActivityResultLauncher<Intent> resultLauncher) {\n        setBlockAutoLock(true);\n\n        try {\n            resultLauncher.launch(intent);\n        } catch (ActivityNotFoundException e) {\n            e.printStackTrace();\n\n            if (isDocsAction(intent.getAction())) {\n                Dialogs.showErrorDialog(fragment.requireContext(), R.string.documentsui_error, e);\n            } else {\n                throw e;\n            }\n        }\n    }\n\n    private void startNotificationService() {\n        // NOTE: Disabled for now. See issue: #1047\n        /*if (PermissionHelper.granted(_context, Manifest.permission.POST_NOTIFICATIONS)) {\n            _context.startService(getNotificationServiceIntent());\n        }*/\n    }\n\n    private void stopNotificationService() {\n        // NOTE: Disabled for now. See issue: #1047\n        //_context.stopService(getNotificationServiceIntent());\n    }\n\n    private Intent getNotificationServiceIntent() {\n        return new Intent(_context, NotificationService.class);\n    }\n\n    private static boolean isDocsAction(@Nullable String action) {\n        return action != null && (action.equals(Intent.ACTION_GET_CONTENT)\n                || action.equals(Intent.ACTION_CREATE_DOCUMENT)\n                || action.equals(Intent.ACTION_OPEN_DOCUMENT)\n                || action.equals(Intent.ACTION_OPEN_DOCUMENT_TREE));\n    }\n\n    public interface LockListener {\n        /**\n         * Called when the vault lock status changes\n         * @param userInitiated whether or not the user initiated the lock in MainActivity.\n         */\n        void onLocked(boolean userInitiated);\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/vault/VaultRepository.java",
    "content": "package com.beemdevelopment.aegis.vault;\n\nimport android.content.Context;\n\nimport androidx.annotation.NonNull;\nimport androidx.annotation.Nullable;\nimport androidx.core.util.AtomicFile;\n\nimport com.beemdevelopment.aegis.otp.GoogleAuthInfo;\nimport com.beemdevelopment.aegis.util.Cloner;\nimport com.beemdevelopment.aegis.util.IOUtils;\nimport com.google.zxing.WriterException;\n\nimport org.json.JSONObject;\n\nimport java.io.ByteArrayInputStream;\nimport java.io.File;\nimport java.io.FileOutputStream;\nimport java.io.IOException;\nimport java.io.InputStream;\nimport java.io.OutputStream;\nimport java.io.PrintStream;\nimport java.nio.charset.StandardCharsets;\nimport java.util.Collection;\nimport java.util.HashSet;\nimport java.util.Set;\nimport java.util.UUID;\nimport java.util.stream.Collectors;\n\npublic class VaultRepository {\n    public static final String FILENAME = \"aegis.json\";\n    public static final String FILENAME_PREFIX_EXPORT = \"aegis-export\";\n    public static final String FILENAME_PREFIX_EXPORT_PLAIN = \"aegis-export-plain\";\n    public static final String FILENAME_PREFIX_EXPORT_URI = \"aegis-export-uri\";\n    public static final String FILENAME_PREFIX_EXPORT_HTML = \"aegis-export-html\";\n\n    @NonNull\n    private final Vault _vault;\n\n    @Nullable\n    private VaultFileCredentials _creds;\n\n    @NonNull\n    private final Context _context;\n\n    public VaultRepository(@NonNull Context context, @NonNull Vault vault, @Nullable VaultFileCredentials creds) {\n        _context = context;\n        _vault = vault;\n        _creds = creds;\n    }\n\n    private static AtomicFile getAtomicFile(Context context) {\n        return new AtomicFile(new File(context.getFilesDir(), FILENAME));\n    }\n\n    public static boolean fileExists(Context context) {\n        File file = getAtomicFile(context).getBaseFile();\n        return file.exists() && file.isFile();\n    }\n\n    public static void deleteFile(Context context) {\n        getAtomicFile(context).delete();\n    }\n\n    public static VaultFile readVaultFile(Context context) throws VaultRepositoryException {\n        AtomicFile file = getAtomicFile(context);\n\n        try {\n            byte[] fileBytes = file.readFully();\n            return VaultFile.fromBytes(fileBytes);\n        } catch (IOException | VaultFileException e) {\n            throw new VaultRepositoryException(e);\n        }\n    }\n\n    public static void writeToFile(Context context, InputStream inStream) throws IOException {\n        AtomicFile file = VaultRepository.getAtomicFile(context);\n\n        FileOutputStream outStream = null;\n        try {\n            outStream = file.startWrite();\n            IOUtils.copy(inStream, outStream);\n            file.finishWrite(outStream);\n        } catch (IOException e) {\n            if (outStream != null) {\n                file.failWrite(outStream);\n            }\n            throw e;\n        }\n    }\n\n    public static VaultRepository fromFile(Context context, VaultFile file, VaultFileCredentials creds) throws VaultRepositoryException {\n        if (file.isEncrypted() && creds == null) {\n            throw new IllegalArgumentException(\"The VaultFile is encrypted but the given VaultFileCredentials is null\");\n        }\n\n        Vault vault;\n        try {\n            JSONObject obj;\n            if (!file.isEncrypted()) {\n                obj = file.getContent();\n            } else {\n                obj = file.getContent(creds);\n            }\n\n            vault = Vault.fromJson(obj);\n        } catch (VaultException | VaultFileException e) {\n            throw new VaultRepositoryException(e);\n        }\n\n        return new VaultRepository(context, vault, creds);\n    }\n\n    void save() throws VaultRepositoryException {\n        try {\n            JSONObject obj = _vault.toJson();\n\n            VaultFile file = new VaultFile();\n            if (isEncryptionEnabled()) {\n                file.setContent(obj, _creds);\n            } else {\n                file.setContent(obj);\n            }\n\n            try {\n                byte[] bytes = file.toBytes();\n                writeToFile(_context, new ByteArrayInputStream(bytes));\n            } catch (IOException e) {\n                throw new VaultRepositoryException(e);\n            }\n        } catch (VaultFileException e) {\n            throw new VaultRepositoryException(e);\n        }\n    }\n\n    /**\n     * Exports the vault by serializing it and writing it to the given OutputStream. If encryption\n     * is enabled, the vault will be encrypted automatically.\n     */\n    public void export(OutputStream stream) throws VaultRepositoryException {\n        export(stream, getCredentials());\n    }\n\n    /**\n     * Exports the vault by serializing it and writing it to the given OutputStream. If creds is\n     * not null, it will be used to encrypt the vault first.\n     */\n    public void export(OutputStream stream, @Nullable VaultFileCredentials creds) throws VaultRepositoryException {\n        exportFiltered(stream, creds, null);\n    }\n\n    /**\n     * Exports the vault by serializing it and writing it to the given OutputStream. If encryption\n     * is enabled, the vault will be encrypted automatically. If filter is not null only specified\n     * entries will be exported\n     */\n    public void exportFiltered(OutputStream stream, @Nullable Vault.EntryFilter filter) throws VaultRepositoryException {\n        exportFiltered(stream, getCredentials(), filter);\n    }\n\n    /**\n     * Exports the vault by serializing it and writing it to the given OutputStream. If creds is\n     * not null, it will be used to encrypt the vault first. If filter is not null only specified\n     * entries will be exported\n     */\n    public void exportFiltered(OutputStream stream, @Nullable VaultFileCredentials creds, @Nullable Vault.EntryFilter filter) throws VaultRepositoryException {\n        if (creds != null) {\n            creds = creds.exportable();\n        }\n\n        try {\n            VaultFile vaultFile = new VaultFile();\n\n            if (creds != null) {\n                vaultFile.setContent(_vault.toJson(filter), creds);\n            } else {\n                vaultFile.setContent(_vault.toJson(filter));\n            }\n\n            byte[] bytes = vaultFile.toBytes();\n            stream.write(bytes);\n        } catch (IOException | VaultFileException e) {\n            throw new VaultRepositoryException(e);\n        }\n    }\n\n    /**\n     * Exports the vault by serializing the list of entries to a newline-separated list of\n     * Google Authenticator URI's and writing it to the given OutputStream.\n     */\n    public void exportGoogleUris(OutputStream outStream, @Nullable Vault.EntryFilter filter) throws VaultRepositoryException {\n        try (PrintStream stream = new PrintStream(outStream, false, StandardCharsets.UTF_8.name())) {\n            for (VaultEntry entry : getEntries()) {\n                if (filter == null || filter.includeEntry(entry)) {\n                    GoogleAuthInfo info = new GoogleAuthInfo(entry.getInfo(), entry.getName(), entry.getIssuer());\n                    stream.println(info.getUri().toString());\n                }\n            }\n        } catch (IOException e) {\n            throw new VaultRepositoryException(e);\n        }\n    }\n\n    /**\n     * Exports the vault by serializing the list of entries to an HTML file containing the Issuer,\n     * Username and QR Code and writing it to the given OutputStream.\n     */\n    public void exportHtml(OutputStream outStream, @Nullable Vault.EntryFilter filter) throws VaultRepositoryException {\n        Collection<VaultEntry> entries = getEntries();\n        if (filter != null) {\n            entries = entries.stream()\n                    .filter(filter::includeEntry)\n                    .collect(Collectors.toList());\n        }\n\n        try (PrintStream ps = new PrintStream(outStream, false, StandardCharsets.UTF_8.name())) {\n            VaultHtmlExporter.export(_context, ps, entries);\n        } catch (WriterException | IOException e) {\n            throw new VaultRepositoryException(e);\n        }\n    }\n\n    public void addEntry(VaultEntry entry) {\n        // Entries added by importing a file may contain an old group that needs to be migrated\n        _vault.migrateOldGroup(entry);\n        _vault.getEntries().add(entry);\n    }\n\n    public boolean hasEntryByUUID(UUID uuid) {\n        return _vault.getEntries().has(uuid);\n    }\n\n    public VaultEntry getEntryByUUID(UUID uuid) {\n        return _vault.getEntries().getByUUID(uuid);\n    }\n\n    public VaultEntry removeEntry(VaultEntry entry) {\n        return _vault.getEntries().remove(entry);\n    }\n\n    /**\n     * Wipes all entries and groups from the vault.\n     */\n    public void wipeContents() {\n        _vault.getEntries().wipe();\n        _vault.getGroups().wipe();\n    }\n\n    public VaultEntry replaceEntry(VaultEntry entry) {\n        return _vault.getEntries().replace(entry);\n    }\n\n    public VaultEntry editEntry(VaultEntry entry, EntryEditor editor) {\n        VaultEntry newEntry = Cloner.clone(entry);\n        editor.edit(newEntry);\n        replaceEntry(newEntry);\n        return newEntry;\n    }\n\n    /**\n     * Moves entry1 to the position of entry2.\n     */\n    public void moveEntry(VaultEntry entry1, VaultEntry entry2) {\n        _vault.getEntries().move(entry1, entry2);\n    }\n\n    public boolean isEntryDuplicate(VaultEntry entry) {\n        return _vault.getEntries().has(entry);\n    }\n\n    public Collection<VaultEntry> getEntries() {\n        return _vault.getEntries().getValues();\n    }\n\n    public void addGroup(VaultGroup group) {\n        _vault.getGroups().add(group);\n    }\n\n    public VaultGroup getGroupByUUID(UUID uuid) {\n        return _vault.getGroups().getByUUID(uuid);\n    }\n\n    @Nullable\n    public VaultGroup findGroupByUUID(UUID uuid) {\n        return _vault.getGroups().has(uuid) ? _vault.getGroups().getByUUID(uuid) : null;\n    }\n\n    @Nullable\n    public VaultGroup findGroupByName(String name) {\n        return _vault.getGroups().getValues()\n                .stream()\n                .filter(g -> g.getName().equals(name))\n                .findFirst()\n                .orElse(null);\n    }\n\n    public void removeGroup(UUID groupUuid) {\n        VaultGroup group = _vault.getGroups().getByUUID(groupUuid);\n        removeGroup(group);\n    }\n\n    public void replaceGroups(Collection<VaultGroup> groups) {\n        _vault.getGroups().wipe();\n        for (VaultGroup group : groups) {\n            _vault.getGroups().add(group);\n        }\n    }\n\n    public void removeGroup(VaultGroup group) {\n        for (VaultEntry entry : getEntries()) {\n            entry.removeGroup(group.getUUID());\n        }\n\n        _vault.getGroups().remove(group);\n    }\n\n    public Collection<VaultGroup> getGroups() {\n        return _vault.getGroups().getValues();\n    }\n\n    public Collection<VaultGroup> getUsedGroups() {\n        Set<UUID> usedGroups = new HashSet<>();\n        for (VaultEntry entry : getEntries()) {\n            usedGroups.addAll(entry.getGroups());\n        }\n\n        return getGroups().stream()\n                .filter(vg -> usedGroups.contains(vg.getUUID()))\n                .collect(Collectors.toList());\n    }\n\n    public boolean isGroupsMigrationFresh() {\n        return _vault.isGroupsMigrationFresh();\n    }\n\n    public boolean areIconsOptimized() {\n        return _vault.areIconsOptimized();\n    }\n\n    public void setIconsOptimized(boolean optimized) {\n        _vault.setIconsOptimized(optimized);\n    }\n\n    public VaultFileCredentials getCredentials() {\n        return _creds == null ? null : _creds.clone();\n    }\n\n    public void setCredentials(VaultFileCredentials creds) {\n        _creds = creds == null ? null : creds.clone();\n    }\n\n    public boolean isEncryptionEnabled() {\n        return _creds != null;\n    }\n\n    public boolean isBackupPasswordSet() {\n        if (!isEncryptionEnabled()) {\n            return false;\n        }\n\n        return getCredentials().getSlots().findBackupPasswordSlots().size() > 0;\n    }\n\n    public interface EntryEditor {\n        void edit(VaultEntry entry);\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/vault/VaultRepositoryException.java",
    "content": "package com.beemdevelopment.aegis.vault;\n\npublic class VaultRepositoryException extends Exception {\n    public VaultRepositoryException(Throwable cause) {\n        super(cause);\n    }\n\n    public VaultRepositoryException(String message) {\n        super(message);\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/vault/slots/BiometricSlot.java",
    "content": "package com.beemdevelopment.aegis.vault.slots;\n\nimport com.beemdevelopment.aegis.crypto.CryptParameters;\n\nimport java.util.UUID;\n\npublic class BiometricSlot extends RawSlot {\n    public BiometricSlot() {\n        super();\n    }\n\n    BiometricSlot(UUID uuid, byte[] key, CryptParameters keyParams) {\n        super(uuid, key, keyParams);\n    }\n\n    @Override\n    public byte getType() {\n        return TYPE_BIOMETRIC;\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/vault/slots/PasswordSlot.java",
    "content": "package com.beemdevelopment.aegis.vault.slots;\n\nimport com.beemdevelopment.aegis.crypto.CryptParameters;\nimport com.beemdevelopment.aegis.crypto.CryptoUtils;\nimport com.beemdevelopment.aegis.crypto.MasterKey;\nimport com.beemdevelopment.aegis.crypto.SCryptParameters;\nimport com.beemdevelopment.aegis.encoding.Hex;\n\nimport org.json.JSONException;\nimport org.json.JSONObject;\n\nimport java.util.UUID;\n\nimport javax.crypto.Cipher;\nimport javax.crypto.SecretKey;\n\npublic class PasswordSlot extends RawSlot {\n    private boolean _repaired;\n    private boolean _isBackup;\n\n    private SCryptParameters _params;\n\n    public PasswordSlot() {\n        super();\n    }\n\n    protected PasswordSlot(UUID uuid, byte[] key, CryptParameters keyParams, SCryptParameters scryptParams, boolean repaired, boolean isBackup) {\n        super(uuid, key, keyParams);\n        _params = scryptParams;\n        _repaired = repaired;\n        _isBackup = isBackup;\n    }\n\n    @Override\n    public JSONObject toJson() {\n        try {\n            JSONObject obj = super.toJson();\n            obj.put(\"n\", _params.getN());\n            obj.put(\"r\", _params.getR());\n            obj.put(\"p\", _params.getP());\n            obj.put(\"salt\", Hex.encode(_params.getSalt()));\n            obj.put(\"repaired\", _repaired);\n            obj.put(\"is_backup\", _isBackup);\n            return obj;\n        } catch (JSONException e) {\n            throw new RuntimeException(e);\n        }\n    }\n\n    public SecretKey deriveKey(char[] password, SCryptParameters params) {\n        SecretKey key = CryptoUtils.deriveKey(password, params);\n        _params = params;\n        return key;\n    }\n\n    public SecretKey deriveKey(char[] password) {\n        return CryptoUtils.deriveKey(password, _params);\n    }\n\n    public SecretKey deriveKey(byte[] data) {\n        return CryptoUtils.deriveKey(data, _params);\n    }\n\n    @Override\n    public void setKey(MasterKey masterKey, Cipher cipher) throws SlotException {\n        super.setKey(masterKey, cipher);\n        _repaired = true;\n    }\n\n    /**\n     * Reports whether this slot was repaired and is no longer affected by issue #95.\n     */\n    public boolean isRepaired() {\n        return _repaired;\n    }\n\n    /**\n     * Reports whether this slot is a backup password slot.\n     */\n    public boolean isBackup() {\n        return _isBackup;\n    }\n\n    public void setIsBackup(boolean isBackup) {\n        _isBackup = isBackup;\n    }\n\n    @Override\n    public byte getType() {\n        return TYPE_PASSWORD;\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/vault/slots/RawSlot.java",
    "content": "package com.beemdevelopment.aegis.vault.slots;\n\nimport com.beemdevelopment.aegis.crypto.CryptParameters;\n\nimport java.util.UUID;\n\npublic class RawSlot extends Slot {\n    public RawSlot() {\n        super();\n    }\n\n    protected RawSlot(UUID uuid, byte[] key, CryptParameters keyParams) {\n        super(uuid, key, keyParams);\n    }\n\n    @Override\n    public byte getType() {\n        return TYPE_RAW;\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/vault/slots/Slot.java",
    "content": "package com.beemdevelopment.aegis.vault.slots;\n\nimport com.beemdevelopment.aegis.crypto.CryptParameters;\nimport com.beemdevelopment.aegis.crypto.CryptResult;\nimport com.beemdevelopment.aegis.crypto.CryptoUtils;\nimport com.beemdevelopment.aegis.crypto.MasterKey;\nimport com.beemdevelopment.aegis.crypto.SCryptParameters;\nimport com.beemdevelopment.aegis.encoding.EncodingException;\nimport com.beemdevelopment.aegis.encoding.Hex;\nimport com.beemdevelopment.aegis.util.UUIDMap;\n\nimport org.json.JSONException;\nimport org.json.JSONObject;\n\nimport java.io.IOException;\nimport java.security.InvalidAlgorithmParameterException;\nimport java.security.InvalidKeyException;\nimport java.security.NoSuchAlgorithmException;\nimport java.util.UUID;\n\nimport javax.crypto.BadPaddingException;\nimport javax.crypto.Cipher;\nimport javax.crypto.IllegalBlockSizeException;\nimport javax.crypto.NoSuchPaddingException;\nimport javax.crypto.SecretKey;\nimport javax.crypto.spec.SecretKeySpec;\n\npublic abstract class Slot extends UUIDMap.Value {\n    public final static byte TYPE_RAW = 0x00;\n    public final static byte TYPE_PASSWORD = 0x01;\n    public final static byte TYPE_BIOMETRIC = 0x02;\n\n    private byte[] _encryptedMasterKey;\n    private CryptParameters _encryptedMasterKeyParams;\n\n    protected Slot() {\n        super();\n    }\n\n    protected Slot(UUID uuid, byte[] key, CryptParameters keyParams) {\n        super(uuid);\n        _encryptedMasterKey = key;\n        _encryptedMasterKeyParams = keyParams;\n    }\n\n    /**\n     * Decrypts the encrypted master key in this slot using the given cipher and returns it.\n     * @throws SlotException if a generic crypto operation error occurred.\n     * @throws SlotIntegrityException if an error occurred while verifying the integrity of the slot.\n     */\n    public MasterKey getKey(Cipher cipher) throws SlotException, SlotIntegrityException {\n        try {\n            CryptResult res = CryptoUtils.decrypt(_encryptedMasterKey, cipher, _encryptedMasterKeyParams);\n            SecretKey key = new SecretKeySpec(res.getData(), \"AES\");\n            return new MasterKey(key);\n        } catch (BadPaddingException e) {\n            throw new SlotIntegrityException(e);\n        } catch (IOException | IllegalBlockSizeException e) {\n            throw new SlotException(e);\n        }\n    }\n\n    /**\n     * Encrypts the given master key using the given cipher and stores the result in this slot.\n     * @throws SlotException if a generic crypto operation error occurred.\n     */\n    public void setKey(MasterKey masterKey, Cipher cipher) throws SlotException {\n        try {\n            byte[] masterKeyBytes = masterKey.getBytes();\n            CryptResult res = CryptoUtils.encrypt(masterKeyBytes, cipher);\n            _encryptedMasterKey = res.getData();\n            _encryptedMasterKeyParams = res.getParams();\n        } catch (BadPaddingException | IllegalBlockSizeException e) {\n            throw new SlotException(e);\n        }\n    }\n\n    public static Cipher createEncryptCipher(SecretKey key) throws SlotException {\n        try {\n            return CryptoUtils.createEncryptCipher(key);\n        } catch (InvalidAlgorithmParameterException\n                | NoSuchPaddingException\n                | NoSuchAlgorithmException\n                | InvalidKeyException e) {\n            throw new SlotException(e);\n        }\n    }\n\n    public Cipher createDecryptCipher(SecretKey key) throws SlotException {\n        try {\n            return CryptoUtils.createDecryptCipher(key, _encryptedMasterKeyParams.getNonce());\n        } catch (InvalidAlgorithmParameterException\n                | NoSuchAlgorithmException\n                | InvalidKeyException\n                | NoSuchPaddingException e) {\n            throw new SlotException(e);\n        }\n    }\n\n    protected byte[] getEncryptedMasterKey() {\n        return _encryptedMasterKey;\n    }\n\n    public JSONObject toJson() {\n        try {\n            JSONObject obj = new JSONObject();\n            obj.put(\"type\", getType());\n            obj.put(\"uuid\", getUUID().toString());\n            obj.put(\"key\", Hex.encode(_encryptedMasterKey));\n            obj.put(\"key_params\", _encryptedMasterKeyParams.toJson());\n            return obj;\n        } catch (JSONException e) {\n            throw new RuntimeException(e);\n        }\n    }\n\n    public static Slot fromJson(JSONObject obj) throws SlotException {\n        Slot slot;\n\n        try {\n            UUID uuid;\n            if (!obj.has(\"uuid\")) {\n                uuid = UUID.randomUUID();\n            } else {\n                uuid = UUID.fromString(obj.getString(\"uuid\"));\n            }\n\n            byte[] key = Hex.decode(obj.getString(\"key\"));\n            CryptParameters keyParams = CryptParameters.fromJson(obj.getJSONObject(\"key_params\"));\n\n            switch (obj.getInt(\"type\")) {\n                case Slot.TYPE_RAW:\n                    slot = new RawSlot(uuid, key, keyParams);\n                    break;\n                case Slot.TYPE_PASSWORD:\n                    SCryptParameters scryptParams = new SCryptParameters(\n                            obj.getInt(\"n\"),\n                            obj.getInt(\"r\"),\n                            obj.getInt(\"p\"),\n                            Hex.decode(obj.getString(\"salt\"))\n                    );\n                    boolean repaired = obj.optBoolean(\"repaired\", false);\n                    boolean isBackup = obj.optBoolean(\"is_backup\", false);\n                    slot = new PasswordSlot(uuid, key, keyParams, scryptParams, repaired, isBackup);\n                    break;\n                case Slot.TYPE_BIOMETRIC:\n                    slot = new BiometricSlot(uuid, key, keyParams);\n                    break;\n                default:\n                    throw new SlotException(\"unrecognized slot type\");\n            }\n        } catch (JSONException | EncodingException e) {\n            throw new SlotException(e);\n        }\n\n        return slot;\n    }\n\n    public abstract byte getType();\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/vault/slots/SlotException.java",
    "content": "package com.beemdevelopment.aegis.vault.slots;\n\npublic class SlotException extends Exception {\n    public SlotException(Throwable cause) {\n        super(cause);\n    }\n\n    public SlotException(String message) {\n        super(message);\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/vault/slots/SlotIntegrityException.java",
    "content": "package com.beemdevelopment.aegis.vault.slots;\n\npublic class SlotIntegrityException extends Exception {\n    public SlotIntegrityException() {\n\n    }\n\n    public SlotIntegrityException(Throwable cause) {\n        super(cause);\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/vault/slots/SlotList.java",
    "content": "package com.beemdevelopment.aegis.vault.slots;\n\nimport com.beemdevelopment.aegis.util.UUIDMap;\n\nimport org.json.JSONArray;\nimport org.json.JSONException;\nimport org.json.JSONObject;\n\nimport java.util.ArrayList;\nimport java.util.List;\nimport java.util.stream.Collectors;\n\npublic class SlotList extends UUIDMap<Slot> {\n    public JSONArray toJson() {\n        JSONArray array = new JSONArray();\n        for (Slot slot : this) {\n            array.put(slot.toJson());\n        }\n\n        return array;\n    }\n\n    public static SlotList fromJson(JSONArray array) throws SlotListException {\n        SlotList slots = new SlotList();\n\n        try {\n            for (int i = 0; i < array.length(); i++) {\n                JSONObject obj = array.getJSONObject(i);\n                Slot slot = Slot.fromJson(obj);\n                slots.add(slot);\n            }\n        } catch (SlotException | JSONException e) {\n            throw new SlotListException(e);\n        }\n\n        return slots;\n    }\n\n    public <T extends Slot> T find(Class<T> type) {\n        for (Slot slot : this) {\n            if (slot.getClass() == type) {\n                return type.cast(slot);\n            }\n        }\n        return null;\n    }\n\n    public <T extends Slot> List<T> findAll(Class<T> type) {\n        ArrayList<T> list = new ArrayList<>();\n        for (Slot slot : this) {\n            if (slot.getClass() == type) {\n                list.add(type.cast(slot));\n            }\n        }\n        return list;\n    }\n\n    public List<PasswordSlot> findBackupPasswordSlots() {\n        return findAll(PasswordSlot.class)\n                .stream()\n                .filter(PasswordSlot::isBackup)\n                .collect(Collectors.toList());\n    }\n\n    public List<PasswordSlot> findRegularPasswordSlots() {\n        return findAll(PasswordSlot.class)\n                .stream()\n                .filter(s -> !s.isBackup())\n                .collect(Collectors.toList());\n    }\n\n    public <T extends Slot> boolean has(Class<T> type) {\n        return find(type) != null;\n    }\n\n    /**\n     * Returns a copy of this SlotList that is suitable for exporting.\n     * Strips biometric slots.\n     * In case there's a backup password slot, any regular password slots are stripped.\n     */\n    public SlotList exportable() {\n        boolean hasBackupSlots = false;\n        for (Slot slot : this) {\n            if (slot instanceof PasswordSlot && ((PasswordSlot) slot).isBackup()) {\n                hasBackupSlots = true;\n                break;\n            }\n        }\n        SlotList slots = new SlotList();\n        for (Slot slot : this) {\n            if (slot instanceof BiometricSlot) {\n                continue;\n            }\n            if (hasBackupSlots && slot instanceof PasswordSlot && !((PasswordSlot) slot).isBackup()) {\n                continue;\n            }\n            slots.add(slot);\n        }\n        return slots;\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/beemdevelopment/aegis/vault/slots/SlotListException.java",
    "content": "package com.beemdevelopment.aegis.vault.slots;\n\npublic class SlotListException extends Exception {\n    public SlotListException(Throwable cause) {\n        super(cause);\n    }\n\n    public SlotListException(String message) {\n        super(message);\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/info/guardianproject/GuardianProjectRSA4096.java",
    "content": "\npackage info.guardianproject;\n\nimport info.guardianproject.trustedintents.ApkSignaturePin;\n\n/**\n * This is the second Guardian Project APK signing key. It was generated since\n * RSA 1024-bit keys are deprecated. So any new Guardian Project app will be\n * signed by this key. It is used to sign these apps:\n * <ul>\n * <li>Checkey</li>\n * <li>Courier</li>\n * </ul>\n *\n * @author hans\n */\npublic final class GuardianProjectRSA4096 extends ApkSignaturePin {\n\n    public GuardianProjectRSA4096() {\n        fingerprints = new String[] {\n                \"f006a20481c71a690de02e385ab0c9fa4ac1245240f68102682703ba0656867a\",\n        };\n        certificates = new byte[][] {\n                {\n                        48, -126, 5, -84, 48, -126, 3, -108, 2, 9, 0, -126, -20, 93, -43, 112, 34,\n                        -87, 29, 48, 13, 6, 9, 42, -122, 72, -122, -9, 13, 1, 1, 5, 5, 0, 48, -127,\n                        -105, 49, 11, 48, 9, 6, 3, 85, 4, 6, 19, 2, 85, 83, 49, 17, 48, 15, 6, 3,\n                        85, 4, 8, 12, 8, 78, 101, 119, 32, 89, 111, 114, 107, 49, 17, 48, 15, 6, 3,\n                        85, 4, 7, 12, 8, 78, 101, 119, 32, 89, 111, 114, 107, 49, 25, 48, 23, 6, 3,\n                        85, 4, 10, 12, 16, 71, 117, 97, 114, 100, 105, 97, 110, 32, 80, 114, 111,\n                        106, 101, 99, 116, 49, 29, 48, 27, 6, 3, 85, 4, 3, 12, 20, 103, 117, 97,\n                        114, 100, 105, 97, 110, 112, 114, 111, 106, 101, 99, 116, 46, 105, 110,\n                        102, 111, 49, 40, 48, 38, 6, 9, 42, -122, 72, -122, -9, 13, 1, 9, 1, 22,\n                        25, 114, 111, 111, 116, 64, 103, 117, 97, 114, 100, 105, 97, 110, 112, 114,\n                        111, 106, 101, 99, 116, 46, 105, 110, 102, 111, 48, 30, 23, 13, 49, 52, 48,\n                        53, 49, 52, 49, 55, 53, 55, 50, 57, 90, 23, 13, 52, 49, 48, 57, 50, 56, 49,\n                        55, 53, 55, 50, 57, 90, 48, -127, -105, 49, 11, 48, 9, 6, 3, 85, 4, 6, 19,\n                        2, 85, 83, 49, 17, 48, 15, 6, 3, 85, 4, 8, 12, 8, 78, 101, 119, 32, 89,\n                        111, 114, 107, 49, 17, 48, 15, 6, 3, 85, 4, 7, 12, 8, 78, 101, 119, 32, 89,\n                        111, 114, 107, 49, 25, 48, 23, 6, 3, 85, 4, 10, 12, 16, 71, 117, 97, 114,\n                        100, 105, 97, 110, 32, 80, 114, 111, 106, 101, 99, 116, 49, 29, 48, 27, 6,\n                        3, 85, 4, 3, 12, 20, 103, 117, 97, 114, 100, 105, 97, 110, 112, 114, 111,\n                        106, 101, 99, 116, 46, 105, 110, 102, 111, 49, 40, 48, 38, 6, 9, 42, -122,\n                        72, -122, -9, 13, 1, 9, 1, 22, 25, 114, 111, 111, 116, 64, 103, 117, 97,\n                        114, 100, 105, 97, 110, 112, 114, 111, 106, 101, 99, 116, 46, 105, 110,\n                        102, 111, 48, -126, 2, 34, 48, 13, 6, 9, 42, -122, 72, -122, -9, 13, 1, 1,\n                        1, 5, 0, 3, -126, 2, 15, 0, 48, -126, 2, 10, 2, -126, 2, 1, 0, -51, 108,\n                        83, -44, 61, 81, 46, 61, 2, -61, 46, 60, 2, -30, 44, 38, -70, -63, -93,\n                        -66, -57, 1, 2, -32, -80, -82, 98, -26, -70, -34, 60, -65, -55, -43, 16,\n                        -63, -89, -104, 50, 108, -26, -2, -3, -55, -77, 47, 75, 89, 99, 12, -32,\n                        32, 120, -26, -81, 54, 95, -57, -114, -100, -39, -110, -4, 120, 90, 90,\n                        -40, -89, -53, 63, -122, -45, -80, 32, -6, -12, -29, -107, 45, 10, -23, 76,\n                        5, 112, -15, -63, 48, 35, -61, 0, -107, -110, 44, -46, -126, -30, -30, -33,\n                        86, 22, 30, 8, -72, 29, 75, 121, 31, -120, 119, 59, -57, 19, -64, 31, 84,\n                        -94, -38, 91, 82, 92, -95, 66, 2, 120, -37, -113, 126, 54, -83, 83, -125,\n                        122, 110, -106, 80, 59, -127, -72, -23, 64, 105, 20, 25, -41, -3, -61, -44,\n                        51, -28, 17, 36, -90, -18, -25, 96, 37, -93, -48, 98, 47, 27, 49, 40, -31,\n                        -62, -102, -49, 28, -55, 50, -38, -70, -83, 101, 97, 96, -122, -114, 18,\n                        47, 119, 117, -7, -55, -64, -1, 96, -120, 61, -89, -70, -7, -89, 113, -41,\n                        88, 27, 26, 95, -52, 53, 59, 7, 11, 79, 86, 31, -109, -21, 120, -15, 38,\n                        106, 33, -121, 82, 18, 45, 32, 49, 93, -26, -74, -104, 4, -122, 96, 39,\n                        126, -24, 16, 119, -45, -119, 110, -31, 55, -109, 53, 53, -11, -58, -124,\n                        -84, 41, -42, 64, 17, -5, -78, -57, -100, 118, -105, -38, -94, 84, -16,\n                        -53, -106, -11, 76, 81, 70, -83, -56, 73, -96, -100, -18, 55, -3, -3, 34,\n                        -97, -62, 59, -17, -79, 91, -9, 122, 95, -108, -121, -76, -62, -72, 61,\n                        -82, 105, -99, -59, 10, 51, 52, 77, -105, -127, 37, 79, 88, -127, 27, 39,\n                        44, 15, 123, -59, -118, -96, 61, -28, 23, -54, 124, 100, 57, 37, 123, -83,\n                        -124, 11, 123, 73, -53, 18, 119, -39, -13, 46, 123, -55, 4, -91, 114, 93,\n                        -116, -98, 21, 95, -30, -82, -108, 87, -65, -8, 30, 67, 14, 22, 79, -64,\n                        86, -128, -83, 74, 69, -42, 9, -18, -120, -52, 7, 62, 78, 88, -53, -125,\n                        41, -122, -91, -34, -110, 111, -118, -25, 25, -83, 90, -95, 84, -121, 95,\n                        72, -53, -14, -14, -48, 65, 4, 23, 99, 56, 23, -20, 9, 46, 63, 83, -26,\n                        -86, 54, -104, 79, 9, 94, -91, -69, 10, -125, -17, -28, -32, -79, 5, -11,\n                        37, 103, -46, -75, 71, -119, 39, 48, -53, -51, 118, 43, 28, 68, 14, -33,\n                        -82, -76, -98, 1, 41, 94, -128, -86, 51, -89, 17, -31, 38, -70, -2, -27,\n                        -105, -87, 103, 93, 19, 73, -106, -82, -76, 110, -48, -124, -51, 92, -91,\n                        -51, 22, 1, -48, 52, -127, -24, 26, -77, 4, 22, 33, 24, -128, -1, 9, -42,\n                        23, -53, 78, 10, -39, -115, -95, 17, 100, 90, 16, -23, -127, -38, 10, -62,\n                        -64, 113, -115, -114, 78, -11, -124, 113, 113, -42, -66, 114, -98, -40,\n                        -41, 2, 3, 1, 0, 1, 48, 13, 6, 9, 42, -122, 72, -122, -9, 13, 1, 1, 5, 5,\n                        0, 3, -126, 2, 1, 0, -54, 125, -113, -9, -45, 82, 2, -79, -87, 31, -17,\n                        -10, 117, 16, 1, 67, -63, 57, -49, -81, -90, 48, 7, -58, 89, -29, 120, 84,\n                        116, 51, 54, -94, 74, -111, -11, 53, -13, 53, -125, -76, -64, 46, -35, 19,\n                        -19, 25, 36, -82, 66, 113, -14, -6, -63, 83, 15, 8, -77, -74, -94, -53,\n                        -35, -61, -75, 52, 13, -128, 9, 96, 66, 46, 46, -57, 24, -28, -39, -46, 96,\n                        -115, -63, 92, -70, 51, 49, -94, 96, 77, 16, 108, -59, -28, 112, -2, -3,\n                        -87, 27, 56, 118, 29, -95, -76, -70, 34, -105, -24, -104, 70, 24, -88, -29,\n                        -28, -101, -98, 24, -48, -32, -111, 97, 61, -70, -21, -111, 70, -55, 68,\n                        -76, 125, -61, 56, -122, 48, -118, 74, 61, -101, -46, -43, -12, -114, -116,\n                        -57, -108, 91, -109, -62, -117, -76, -48, 109, 81, -22, -113, -73, 64, -61,\n                        102, 92, -117, -9, -100, 62, -90, 99, 102, -50, -41, -75, 31, 5, -76, -31,\n                        -85, 118, -57, -21, 102, 71, 41, -34, -45, -92, 88, 82, -95, 65, -100, -31,\n                        -28, -85, -37, 94, -52, 72, 39, 55, -42, 18, 29, 115, 23, -106, -2, -54,\n                        -45, 61, 53, 62, 107, 109, -65, 69, 4, -123, 124, -30, -54, -44, 38, 119,\n                        49, -123, -27, -50, 77, -9, -40, -114, -50, -70, -123, 86, -115, 127, 45,\n                        42, 23, -25, -83, -81, -38, -84, -3, 99, -36, 12, -67, -39, -110, 21, -40,\n                        -128, 6, -96, -24, -116, -62, 63, 127, 39, 57, -83, -63, 0, 127, -12, 73,\n                        85, -41, -101, -70, -48, -94, -94, -73, -38, -115, -62, -34, 62, -92, 96,\n                        16, 6, -19, -84, 38, -93, -117, -52, 32, 92, -21, 123, -117, 81, 50, -71,\n                        103, 121, 127, 4, -3, -40, 62, 100, 22, -123, -68, -69, -54, -127, -67, 50,\n                        -114, 77, -30, 26, -102, 29, 106, 48, 83, 99, 73, 96, 124, -77, 51, 8, 15,\n                        40, 72, -108, 105, 62, 119, -113, -90, 57, -62, 127, -57, -21, -40, -109,\n                        96, 101, 71, -40, -101, 127, 69, 110, 43, 59, -102, -8, -42, -70, -24, 51,\n                        -51, 54, 42, -110, -119, 41, -101, 45, -101, -124, 56, -75, -26, 86, -65,\n                        54, 21, -88, -30, 79, -26, -127, 121, -102, -48, -25, -62, 99, 76, -90,\n                        -48, -37, 123, 9, 67, 51, -41, -116, 29, 69, 88, 93, -42, 23, 73, -112, 24,\n                        -85, 60, 1, 3, -95, 12, -49, -55, 95, 109, -37, 10, -124, 119, -52, -31,\n                        91, 55, -67, 99, 87, -55, 97, 25, -9, -119, -41, -98, 100, -14, 70, -44,\n                        -63, 60, -127, -99, 15, 49, 22, -118, -49, 66, -106, 36, -34, -5, 6, -48,\n                        123, -79, 115, 57, 30, -3, -34, -67, 91, 34, 3, -52, -106, 79, -63, 125,\n                        123, -16, -120, -53, -98, 34, 86, -60, 94, 78, -91, -34, 0, -8, 73, -119,\n                        -87, 12, -101, -112, -10, -79, 10, 105, -82, 120, -106, -9, 99, 57, -63,\n                        -26, 125, -80, 102, -106, -11, -91, -1, 37, 33\n                },\n        };\n    }\n}"
  },
  {
    "path": "app/src/main/java/info/guardianproject/trustedintents/ApkSignaturePin.java",
    "content": "\npackage info.guardianproject.trustedintents;\n\nimport android.content.pm.Signature;\n\nimport java.math.BigInteger;\nimport java.security.MessageDigest;\nimport java.security.NoSuchAlgorithmException;\nimport java.util.Arrays;\n\npublic abstract class ApkSignaturePin {\n\n    protected String[] fingerprints; // hex-encoded SHA-256 hashes of the certs\n    protected byte[][] certificates; // array of DER-encoded X.509 certificates\n    private Signature[] signatures;\n\n    public Signature[] getSignatures() {\n        if (signatures == null) {\n            signatures = new Signature[certificates.length];\n            for (int i = 0; i < certificates.length; i++)\n                signatures[i] = new Signature(certificates[i]);\n        }\n        return signatures;\n    }\n\n    /**\n     * Gets the fingerprint of the first certificate in the signature.\n     *\n     * @param algorithm - Which hash to use (e.g. MD5, SHA1, SHA-256)\n     * @return the fingerprint as hex String\n     */\n    public String getFingerprint(String algorithm) {\n        try {\n            MessageDigest md = MessageDigest.getInstance(algorithm);\n            byte[] hashBytes = md.digest(certificates[0]);\n            BigInteger bi = new BigInteger(1, hashBytes);\n            md.reset();\n            return String.format(\"%0\" + (hashBytes.length << 1) + \"x\", bi);\n        } catch (NoSuchAlgorithmException e) {\n            e.printStackTrace();\n        }\n        return null;\n    }\n\n    /**\n     * Gets the MD5 fingerprint of the first certificate in the signature.\n     *\n     * @return the MD5 sum as hex String\n     */\n    public String getMD5Fingerprint() {\n        return getFingerprint(\"MD5\");\n    }\n\n    /**\n     * Gets the SHA1 fingerprint of the first certificate in the signature.\n     *\n     * @return the SHA1 sum as hex String\n     */\n    public String getSHA1Fingerprint() {\n        return getFingerprint(\"SHA1\");\n    }\n\n    /**\n     * Gets the SHA-256 fingerprint of the first certificate in the signature.\n     *\n     * @return the SHA-256 sum as hex String\n     */\n    public String getSHA256Fingerprint() {\n        return getFingerprint(\"SHA-256\");\n    }\n\n    /**\n     * Compares the calculated SHA-256 cert fingerprint to the stored one.\n     *\n     * @return the result of the comparison\n     */\n    public boolean doFingerprintsMatchCertificates() {\n        if (fingerprints == null || certificates == null)\n            return false;\n        String[] calcedFingerprints = new String[certificates.length];\n        for (int i = 0; i < calcedFingerprints.length; i++)\n            calcedFingerprints[i] = getSHA256Fingerprint();\n        if (fingerprints.length == 0 || calcedFingerprints.length == 0)\n            return false;\n        return Arrays.equals(fingerprints, calcedFingerprints);\n    }\n}"
  },
  {
    "path": "app/src/main/java/info/guardianproject/trustedintents/LICENSE.txt",
    "content": "                  GNU LESSER GENERAL PUBLIC LICENSE\n                       Version 2.1, February 1999\n\n Copyright (C) 1991, 1999 Free Software Foundation, Inc.\n 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\n Everyone is permitted to copy and distribute verbatim copies\n of this license document, but changing it is not allowed.\n\n[This is the first released version of the Lesser GPL.  It also counts\n as the successor of the GNU Library Public License, version 2, hence\n the version number 2.1.]\n\n                            Preamble\n\n  The licenses for most software are designed to take away your\nfreedom to share and change it.  By contrast, the GNU General Public\nLicenses are intended to guarantee your freedom to share and change\nfree software--to make sure the software is free for all its users.\n\n  This license, the Lesser General Public License, applies to some\nspecially designated software packages--typically libraries--of the\nFree Software Foundation and other authors who decide to use it.  You\ncan use it too, but we suggest you first think carefully about whether\nthis license or the ordinary General Public License is the better\nstrategy to use in any particular case, based on the explanations below.\n\n  When we speak of free software, we are referring to freedom of use,\nnot price.  Our General Public Licenses are designed to make sure that\nyou have the freedom to distribute copies of free software (and charge\nfor this service if you wish); that you receive source code or can get\nit if you want it; that you can change the software and use pieces of\nit in new free programs; and that you are informed that you can do\nthese things.\n\n  To protect your rights, we need to make restrictions that forbid\ndistributors to deny you these rights or to ask you to surrender these\nrights.  These restrictions translate to certain responsibilities for\nyou if you distribute copies of the library or if you modify it.\n\n  For example, if you distribute copies of the library, whether gratis\nor for a fee, you must give the recipients all the rights that we gave\nyou.  You must make sure that they, too, receive or can get the source\ncode.  If you link other code with the library, you must provide\ncomplete object files to the recipients, so that they can relink them\nwith the library after making changes to the library and recompiling\nit.  And you must show them these terms so they know their rights.\n\n  We protect your rights with a two-step method: (1) we copyright the\nlibrary, and (2) we offer you this license, which gives you legal\npermission to copy, distribute and/or modify the library.\n\n  To protect each distributor, we want to make it very clear that\nthere is no warranty for the free library.  Also, if the library is\nmodified by someone else and passed on, the recipients should know\nthat what they have is not the original version, so that the original\nauthor's reputation will not be affected by problems that might be\nintroduced by others.\n\f\n  Finally, software patents pose a constant threat to the existence of\nany free program.  We wish to make sure that a company cannot\neffectively restrict the users of a free program by obtaining a\nrestrictive license from a patent holder.  Therefore, we insist that\nany patent license obtained for a version of the library must be\nconsistent with the full freedom of use specified in this license.\n\n  Most GNU software, including some libraries, is covered by the\nordinary GNU General Public License.  This license, the GNU Lesser\nGeneral Public License, applies to certain designated libraries, and\nis quite different from the ordinary General Public License.  We use\nthis license for certain libraries in order to permit linking those\nlibraries into non-free programs.\n\n  When a program is linked with a library, whether statically or using\na shared library, the combination of the two is legally speaking a\ncombined work, a derivative of the original library.  The ordinary\nGeneral Public License therefore permits such linking only if the\nentire combination fits its criteria of freedom.  The Lesser General\nPublic License permits more lax criteria for linking other code with\nthe library.\n\n  We call this license the \"Lesser\" General Public License because it\ndoes Less to protect the user's freedom than the ordinary General\nPublic License.  It also provides other free software developers Less\nof an advantage over competing non-free programs.  These disadvantages\nare the reason we use the ordinary General Public License for many\nlibraries.  However, the Lesser license provides advantages in certain\nspecial circumstances.\n\n  For example, on rare occasions, there may be a special need to\nencourage the widest possible use of a certain library, so that it becomes\na de-facto standard.  To achieve this, non-free programs must be\nallowed to use the library.  A more frequent case is that a free\nlibrary does the same job as widely used non-free libraries.  In this\ncase, there is little to gain by limiting the free library to free\nsoftware only, so we use the Lesser General Public License.\n\n  In other cases, permission to use a particular library in non-free\nprograms enables a greater number of people to use a large body of\nfree software.  For example, permission to use the GNU C Library in\nnon-free programs enables many more people to use the whole GNU\noperating system, as well as its variant, the GNU/Linux operating\nsystem.\n\n  Although the Lesser General Public License is Less protective of the\nusers' freedom, it does ensure that the user of a program that is\nlinked with the Library has the freedom and the wherewithal to run\nthat program using a modified version of the Library.\n\n  The precise terms and conditions for copying, distribution and\nmodification follow.  Pay close attention to the difference between a\n\"work based on the library\" and a \"work that uses the library\".  The\nformer contains code derived from the library, whereas the latter must\nbe combined with the library in order to run.\n\f\n                  GNU LESSER GENERAL PUBLIC LICENSE\n   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION\n\n  0. This License Agreement applies to any software library or other\nprogram which contains a notice placed by the copyright holder or\nother authorized party saying it may be distributed under the terms of\nthis Lesser General Public License (also called \"this License\").\nEach licensee is addressed as \"you\".\n\n  A \"library\" means a collection of software functions and/or data\nprepared so as to be conveniently linked with application programs\n(which use some of those functions and data) to form executables.\n\n  The \"Library\", below, refers to any such software library or work\nwhich has been distributed under these terms.  A \"work based on the\nLibrary\" means either the Library or any derivative work under\ncopyright law: that is to say, a work containing the Library or a\nportion of it, either verbatim or with modifications and/or translated\nstraightforwardly into another language.  (Hereinafter, translation is\nincluded without limitation in the term \"modification\".)\n\n  \"Source code\" for a work means the preferred form of the work for\nmaking modifications to it.  For a library, complete source code means\nall the source code for all modules it contains, plus any associated\ninterface definition files, plus the scripts used to control compilation\nand installation of the library.\n\n  Activities other than copying, distribution and modification are not\ncovered by this License; they are outside its scope.  The act of\nrunning a program using the Library is not restricted, and output from\nsuch a program is covered only if its contents constitute a work based\non the Library (independent of the use of the Library in a tool for\nwriting it).  Whether that is true depends on what the Library does\nand what the program that uses the Library does.\n\n  1. You may copy and distribute verbatim copies of the Library's\ncomplete source code as you receive it, in any medium, provided that\nyou conspicuously and appropriately publish on each copy an\nappropriate copyright notice and disclaimer of warranty; keep intact\nall the notices that refer to this License and to the absence of any\nwarranty; and distribute a copy of this License along with the\nLibrary.\n\n  You may charge a fee for the physical act of transferring a copy,\nand you may at your option offer warranty protection in exchange for a\nfee.\n\f\n  2. You may modify your copy or copies of the Library or any portion\nof it, thus forming a work based on the Library, and copy and\ndistribute such modifications or work under the terms of Section 1\nabove, provided that you also meet all of these conditions:\n\n    a) The modified work must itself be a software library.\n\n    b) You must cause the files modified to carry prominent notices\n    stating that you changed the files and the date of any change.\n\n    c) You must cause the whole of the work to be licensed at no\n    charge to all third parties under the terms of this License.\n\n    d) If a facility in the modified Library refers to a function or a\n    table of data to be supplied by an application program that uses\n    the facility, other than as an argument passed when the facility\n    is invoked, then you must make a good faith effort to ensure that,\n    in the event an application does not supply such function or\n    table, the facility still operates, and performs whatever part of\n    its purpose remains meaningful.\n\n    (For example, a function in a library to compute square roots has\n    a purpose that is entirely well-defined independent of the\n    application.  Therefore, Subsection 2d requires that any\n    application-supplied function or table used by this function must\n    be optional: if the application does not supply it, the square\n    root function must still compute square roots.)\n\nThese requirements apply to the modified work as a whole.  If\nidentifiable sections of that work are not derived from the Library,\nand can be reasonably considered independent and separate works in\nthemselves, then this License, and its terms, do not apply to those\nsections when you distribute them as separate works.  But when you\ndistribute the same sections as part of a whole which is a work based\non the Library, the distribution of the whole must be on the terms of\nthis License, whose permissions for other licensees extend to the\nentire whole, and thus to each and every part regardless of who wrote\nit.\n\nThus, it is not the intent of this section to claim rights or contest\nyour rights to work written entirely by you; rather, the intent is to\nexercise the right to control the distribution of derivative or\ncollective works based on the Library.\n\nIn addition, mere aggregation of another work not based on the Library\nwith the Library (or with a work based on the Library) on a volume of\na storage or distribution medium does not bring the other work under\nthe scope of this License.\n\n  3. You may opt to apply the terms of the ordinary GNU General Public\nLicense instead of this License to a given copy of the Library.  To do\nthis, you must alter all the notices that refer to this License, so\nthat they refer to the ordinary GNU General Public License, version 2,\ninstead of to this License.  (If a newer version than version 2 of the\nordinary GNU General Public License has appeared, then you can specify\nthat version instead if you wish.)  Do not make any other change in\nthese notices.\n\f\n  Once this change is made in a given copy, it is irreversible for\nthat copy, so the ordinary GNU General Public License applies to all\nsubsequent copies and derivative works made from that copy.\n\n  This option is useful when you wish to copy part of the code of\nthe Library into a program that is not a library.\n\n  4. You may copy and distribute the Library (or a portion or\nderivative of it, under Section 2) in object code or executable form\nunder the terms of Sections 1 and 2 above provided that you accompany\nit with the complete corresponding machine-readable source code, which\nmust be distributed under the terms of Sections 1 and 2 above on a\nmedium customarily used for software interchange.\n\n  If distribution of object code is made by offering access to copy\nfrom a designated place, then offering equivalent access to copy the\nsource code from the same place satisfies the requirement to\ndistribute the source code, even though third parties are not\ncompelled to copy the source along with the object code.\n\n  5. A program that contains no derivative of any portion of the\nLibrary, but is designed to work with the Library by being compiled or\nlinked with it, is called a \"work that uses the Library\".  Such a\nwork, in isolation, is not a derivative work of the Library, and\ntherefore falls outside the scope of this License.\n\n  However, linking a \"work that uses the Library\" with the Library\ncreates an executable that is a derivative of the Library (because it\ncontains portions of the Library), rather than a \"work that uses the\nlibrary\".  The executable is therefore covered by this License.\nSection 6 states terms for distribution of such executables.\n\n  When a \"work that uses the Library\" uses material from a header file\nthat is part of the Library, the object code for the work may be a\nderivative work of the Library even though the source code is not.\nWhether this is true is especially significant if the work can be\nlinked without the Library, or if the work is itself a library.  The\nthreshold for this to be true is not precisely defined by law.\n\n  If such an object file uses only numerical parameters, data\nstructure layouts and accessors, and small macros and small inline\nfunctions (ten lines or less in length), then the use of the object\nfile is unrestricted, regardless of whether it is legally a derivative\nwork.  (Executables containing this object code plus portions of the\nLibrary will still fall under Section 6.)\n\n  Otherwise, if the work is a derivative of the Library, you may\ndistribute the object code for the work under the terms of Section 6.\nAny executables containing that work also fall under Section 6,\nwhether or not they are linked directly with the Library itself.\n\f\n  6. As an exception to the Sections above, you may also combine or\nlink a \"work that uses the Library\" with the Library to produce a\nwork containing portions of the Library, and distribute that work\nunder terms of your choice, provided that the terms permit\nmodification of the work for the customer's own use and reverse\nengineering for debugging such modifications.\n\n  You must give prominent notice with each copy of the work that the\nLibrary is used in it and that the Library and its use are covered by\nthis License.  You must supply a copy of this License.  If the work\nduring execution displays copyright notices, you must include the\ncopyright notice for the Library among them, as well as a reference\ndirecting the user to the copy of this License.  Also, you must do one\nof these things:\n\n    a) Accompany the work with the complete corresponding\n    machine-readable source code for the Library including whatever\n    changes were used in the work (which must be distributed under\n    Sections 1 and 2 above); and, if the work is an executable linked\n    with the Library, with the complete machine-readable \"work that\n    uses the Library\", as object code and/or source code, so that the\n    user can modify the Library and then relink to produce a modified\n    executable containing the modified Library.  (It is understood\n    that the user who changes the contents of definitions files in the\n    Library will not necessarily be able to recompile the application\n    to use the modified definitions.)\n\n    b) Use a suitable shared library mechanism for linking with the\n    Library.  A suitable mechanism is one that (1) uses at run time a\n    copy of the library already present on the user's computer system,\n    rather than copying library functions into the executable, and (2)\n    will operate properly with a modified version of the library, if\n    the user installs one, as long as the modified version is\n    interface-compatible with the version that the work was made with.\n\n    c) Accompany the work with a written offer, valid for at\n    least three years, to give the same user the materials\n    specified in Subsection 6a, above, for a charge no more\n    than the cost of performing this distribution.\n\n    d) If distribution of the work is made by offering access to copy\n    from a designated place, offer equivalent access to copy the above\n    specified materials from the same place.\n\n    e) Verify that the user has already received a copy of these\n    materials or that you have already sent this user a copy.\n\n  For an executable, the required form of the \"work that uses the\nLibrary\" must include any data and utility programs needed for\nreproducing the executable from it.  However, as a special exception,\nthe materials to be distributed need not include anything that is\nnormally distributed (in either source or binary form) with the major\ncomponents (compiler, kernel, and so on) of the operating system on\nwhich the executable runs, unless that component itself accompanies\nthe executable.\n\n  It may happen that this requirement contradicts the license\nrestrictions of other proprietary libraries that do not normally\naccompany the operating system.  Such a contradiction means you cannot\nuse both them and the Library together in an executable that you\ndistribute.\n\f\n  7. You may place library facilities that are a work based on the\nLibrary side-by-side in a single library together with other library\nfacilities not covered by this License, and distribute such a combined\nlibrary, provided that the separate distribution of the work based on\nthe Library and of the other library facilities is otherwise\npermitted, and provided that you do these two things:\n\n    a) Accompany the combined library with a copy of the same work\n    based on the Library, uncombined with any other library\n    facilities.  This must be distributed under the terms of the\n    Sections above.\n\n    b) Give prominent notice with the combined library of the fact\n    that part of it is a work based on the Library, and explaining\n    where to find the accompanying uncombined form of the same work.\n\n  8. You may not copy, modify, sublicense, link with, or distribute\nthe Library except as expressly provided under this License.  Any\nattempt otherwise to copy, modify, sublicense, link with, or\ndistribute the Library is void, and will automatically terminate your\nrights under this License.  However, parties who have received copies,\nor rights, from you under this License will not have their licenses\nterminated so long as such parties remain in full compliance.\n\n  9. You are not required to accept this License, since you have not\nsigned it.  However, nothing else grants you permission to modify or\ndistribute the Library or its derivative works.  These actions are\nprohibited by law if you do not accept this License.  Therefore, by\nmodifying or distributing the Library (or any work based on the\nLibrary), you indicate your acceptance of this License to do so, and\nall its terms and conditions for copying, distributing or modifying\nthe Library or works based on it.\n\n  10. Each time you redistribute the Library (or any work based on the\nLibrary), the recipient automatically receives a license from the\noriginal licensor to copy, distribute, link with or modify the Library\nsubject to these terms and conditions.  You may not impose any further\nrestrictions on the recipients' exercise of the rights granted herein.\nYou are not responsible for enforcing compliance by third parties with\nthis License.\n\f\n  11. If, as a consequence of a court judgment or allegation of patent\ninfringement or for any other reason (not limited to patent issues),\nconditions are imposed on you (whether by court order, agreement or\notherwise) that contradict the conditions of this License, they do not\nexcuse you from the conditions of this License.  If you cannot\ndistribute so as to satisfy simultaneously your obligations under this\nLicense and any other pertinent obligations, then as a consequence you\nmay not distribute the Library at all.  For example, if a patent\nlicense would not permit royalty-free redistribution of the Library by\nall those who receive copies directly or indirectly through you, then\nthe only way you could satisfy both it and this License would be to\nrefrain entirely from distribution of the Library.\n\nIf any portion of this section is held invalid or unenforceable under any\nparticular circumstance, the balance of the section is intended to apply,\nand the section as a whole is intended to apply in other circumstances.\n\nIt is not the purpose of this section to induce you to infringe any\npatents or other property right claims or to contest validity of any\nsuch claims; this section has the sole purpose of protecting the\nintegrity of the free software distribution system which is\nimplemented by public license practices.  Many people have made\ngenerous contributions to the wide range of software distributed\nthrough that system in reliance on consistent application of that\nsystem; it is up to the author/donor to decide if he or she is willing\nto distribute software through any other system and a licensee cannot\nimpose that choice.\n\nThis section is intended to make thoroughly clear what is believed to\nbe a consequence of the rest of this License.\n\n  12. If the distribution and/or use of the Library is restricted in\ncertain countries either by patents or by copyrighted interfaces, the\noriginal copyright holder who places the Library under this License may add\nan explicit geographical distribution limitation excluding those countries,\nso that distribution is permitted only in or among countries not thus\nexcluded.  In such case, this License incorporates the limitation as if\nwritten in the body of this License.\n\n  13. The Free Software Foundation may publish revised and/or new\nversions of the Lesser General Public License from time to time.\nSuch new versions will be similar in spirit to the present version,\nbut may differ in detail to address new problems or concerns.\n\nEach version is given a distinguishing version number.  If the Library\nspecifies a version number of this License which applies to it and\n\"any later version\", you have the option of following the terms and\nconditions either of that version or of any later version published by\nthe Free Software Foundation.  If the Library does not specify a\nlicense version number, you may choose any version ever published by\nthe Free Software Foundation.\n\f\n  14. If you wish to incorporate parts of the Library into other free\nprograms whose distribution conditions are incompatible with these,\nwrite to the author to ask for permission.  For software which is\ncopyrighted by the Free Software Foundation, write to the Free\nSoftware Foundation; we sometimes make exceptions for this.  Our\ndecision will be guided by the two goals of preserving the free status\nof all derivatives of our free software and of promoting the sharing\nand reuse of software generally.\n\n                            NO WARRANTY\n\n  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO\nWARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.\nEXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR\nOTHER PARTIES PROVIDE THE LIBRARY \"AS IS\" WITHOUT WARRANTY OF ANY\nKIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\nPURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE\nLIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME\nTHE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.\n\n  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN\nWRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY\nAND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU\nFOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR\nCONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE\nLIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING\nRENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A\nFAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF\nSUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH\nDAMAGES.\n\n                     END OF TERMS AND CONDITIONS\n\f\n           How to Apply These Terms to Your New Libraries\n\n  If you develop a new library, and you want it to be of the greatest\npossible use to the public, we recommend making it free software that\neveryone can redistribute and change.  You can do so by permitting\nredistribution under these terms (or, alternatively, under the terms of the\nordinary General Public License).\n\n  To apply these terms, attach the following notices to the library.  It is\nsafest to attach them to the start of each source file to most effectively\nconvey the exclusion of warranty; and each file should have at least the\n\"copyright\" line and a pointer to where the full notice is found.\n\n    <one line to give the library's name and a brief idea of what it does.>\n    Copyright (C) <year>  <name of author>\n\n    This library is free software; you can redistribute it and/or\n    modify it under the terms of the GNU Lesser General Public\n    License as published by the Free Software Foundation; either\n    version 2.1 of the License, or (at your option) any later version.\n\n    This library is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n    Lesser General Public License for more details.\n\n    You should have received a copy of the GNU Lesser General Public\n    License along with this library; if not, write to the Free Software\n    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\n\nAlso add information on how to contact you by electronic and paper mail.\n\nYou should also get your employer (if you work as a programmer) or your\nschool, if any, to sign a \"copyright disclaimer\" for the library, if\nnecessary.  Here is a sample; alter the names:\n\n  Yoyodyne, Inc., hereby disclaims all copyright interest in the\n  library `Frob' (a library for tweaking knobs) written by James Random Hacker.\n\n  <signature of Ty Coon>, 1 April 1990\n  Ty Coon, President of Vice\n\nThat's all there is to it!\n"
  },
  {
    "path": "app/src/main/java/info/guardianproject/trustedintents/TrustedIntents.java",
    "content": "\npackage info.guardianproject.trustedintents;\n\nimport android.app.Activity;\nimport android.content.ActivityNotFoundException;\nimport android.content.ComponentName;\nimport android.content.Context;\nimport android.content.Intent;\nimport android.content.pm.ActivityInfo;\nimport android.content.pm.PackageInfo;\nimport android.content.pm.PackageManager;\nimport android.content.pm.PackageManager.NameNotFoundException;\nimport android.content.pm.ResolveInfo;\nimport android.content.pm.Signature;\nimport android.text.TextUtils;\nimport android.util.Log;\n\nimport java.lang.reflect.Constructor;\nimport java.security.cert.CertificateException;\nimport java.util.LinkedHashSet;\n\npublic class TrustedIntents {\n\n    private static TrustedIntents instance;\n\n    private static PackageManager pm;\n\n    private final LinkedHashSet<ApkSignaturePin> pinList;\n\n    private TrustedIntents(Context context) {\n        pm = context.getPackageManager();\n        this.pinList = new LinkedHashSet<ApkSignaturePin>();\n    }\n\n    public static TrustedIntents get(Context context) {\n        if (instance == null)\n            instance = new TrustedIntents(context);\n        return instance;\n    }\n\n    /**\n     * Check whether a resolved {@link Activity} is trusted.\n     *\n     * @param resolveInfo the one to check\n     * @return whether the {@code Intent}'s receiver is trusted\n     */\n    public boolean isReceiverTrusted(ResolveInfo resolveInfo) {\n        return isPackageNameTrusted(resolveInfo.activityInfo.packageName);\n    }\n\n    /**\n     * Check whether a resolved {@link Activity} is trusted.\n     *\n     * @param activityInfo the one to check\n     * @return whether the {@code Intent}'s receiver is trusted\n     */\n    public boolean isReceiverTrusted(ActivityInfo activityInfo) {\n        return isPackageNameTrusted(activityInfo.packageName);\n    }\n\n    /**\n     * Check an {@link Intent} is trusted based on the {@code packageName} set\n     * by {@link Intent#setPackage(String)}\n     *\n     * @param intent the one to check\n     * @return whether the {@code Intent}'s receiver is trusted\n     */\n    public boolean isReceiverTrusted(Intent intent) {\n        if (!isIntentSane(intent))\n            return false;\n        String packageName = intent.getPackage();\n        if (TextUtils.isEmpty(packageName)) {\n            packageName = intent.getComponent().getPackageName();\n        }\n        return isPackageNameTrusted(packageName);\n    }\n\n    /**\n     * Check whether a {@code packageName} is trusted.\n     *\n     * @param packageName the one to check\n     * @return whether the {@code packageName} is trusted\n     */\n    public boolean isPackageNameTrusted(String packageName) {\n        try {\n            checkTrustedSigner(packageName);\n        } catch (NameNotFoundException e) {\n            e.printStackTrace();\n            return false;\n        } catch (CertificateException e) {\n            return false;\n        }\n        return true;\n    }\n\n    /**\n     * Returns an {@link Intent} if the sending app is signed by one of\n     * the trusted signing keys as set in {@link #addTrustedSigner(Class)}.\n     *\n     * @returns {@code null} if there is no {@code Intent} or if the\n     * sender is not trusted.\n     * @see #addTrustedSigner(Class)\n     */\n    public Intent getIntentFromTrustedSender(Activity activity) {\n        Intent intent = activity.getIntent();\n        String packageName = getCallingPackageName(activity);\n        if (TextUtils.isEmpty(packageName)) {\n            return null;\n        }\n        if (isPackageNameTrusted(packageName)) {\n            return intent;\n        }\n        return null;\n    }\n\n    /**\n     * Get the package name of the {@link Activity} that sent the\n     * {@link Intent} that started this {@code Activity}.\n     * <p/>\n     * <strong>WARNING</strong>: If the {@code Activity} has\n     * {@code android:launchMode=\"singleInstance\"} or {@code \"singleTask\"}, then\n     * this method will not disconnect because it is not possible to get the\n     * calling {@code Activity}, as set by\n     * {@link Activity#startActivityForResult(Intent, int)}\n     *\n     * @param activity the {@code Activity} to check for the {@code Intent}\n     * @return the package of the sending app or {@code null} if it was not a\n     * {@code ACTION_CONNECT Intent} or the {@code Intent} was not sent\n     * with {@link Activity#startActivityForResult(Intent, int)}\n     */\n    public static String getCallingPackageName(Activity activity) {\n        // getCallingPackage() was unstable until android-18, use this\n        ComponentName componentName = activity.getCallingActivity();\n        if (componentName == null)\n            return null;\n        String packageName = componentName.getPackageName();\n        if (TextUtils.isEmpty(packageName)) {\n            Log.e(activity.getClass().getSimpleName(),\n                    \"Received Intent without sender! The Intent must be sent using startActivityForResult() and received without launchMode singleTask or singleInstance!\");\n        }\n        return packageName;\n    }\n\n    /**\n     * This is used to check whether an {@link Intent} that will be sent is\n     * complete. It should <strong>not</strong> be used with {@code Intent}s\n     * that have been received already.\n     */\n    private boolean isIntentSane(Intent intent) {\n        if (intent == null)\n            return false;\n        if (TextUtils.isEmpty(intent.getPackage())) {\n            ComponentName componentName = intent.getComponent();\n            if (componentName == null || TextUtils.isEmpty(componentName.getPackageName())) {\n                return false;\n            }\n        }\n        return true;\n    }\n\n    /**\n     * Add an APK signature that is always trusted for any packageName.\n     *\n     * @param cls {@link Class} of the {@link ApkSignaturePin} to trust\n     * @return boolean\n     * @throws {@link IllegalArgumentException} the class cannot be instantiated\n     */\n    public boolean addTrustedSigner(Class<? extends ApkSignaturePin> cls) {\n        try {\n            Constructor<? extends ApkSignaturePin> constructor = cls.getConstructor();\n            return pinList.add((ApkSignaturePin) constructor.newInstance((Object[]) null));\n        } catch (Exception e) {\n            e.printStackTrace();\n            throw new IllegalArgumentException(e);\n        }\n    }\n\n    /**\n     * Remove an APK signature from the trusted set.\n     *\n     * @param cls {@link Class} of the {@link ApkSignaturePin} to remove\n     */\n    public boolean removeTrustedSigner(Class<? extends ApkSignaturePin> cls) {\n        for (ApkSignaturePin pin : pinList) {\n            if (pin.getClass().equals(cls)) {\n                return pinList.remove(pin);\n            }\n        }\n        return false;\n    }\n\n    /**\n     * Remove all {@link ApkSignaturePin}s from the trusted set.\n     */\n    public boolean removeAllTrustedSigners() {\n        pinList.clear();\n        return pinList.isEmpty();\n    }\n\n    /**\n     * Check if a {@link ApkSignaturePin} is trusted.\n     *\n     * @param cls {@link Class} of the {@link ApkSignaturePin} to check\n     */\n    public boolean isTrustedSigner(Class<? extends ApkSignaturePin> cls) {\n        for (ApkSignaturePin pin : pinList) {\n            if (pin.getClass().equals(cls)) {\n                return true;\n            }\n        }\n        return false;\n    }\n\n    public void checkTrustedSigner(String packageName)\n            throws NameNotFoundException, CertificateException {\n        PackageInfo packageInfo = pm.getPackageInfo(packageName, PackageManager.GET_SIGNATURES);\n        checkTrustedSigner(packageInfo.signatures);\n    }\n\n    public void checkTrustedSigner(PackageInfo packageInfo)\n            throws NameNotFoundException, CertificateException {\n        checkTrustedSigner(packageInfo.signatures);\n    }\n\n    public void checkTrustedSigner(Signature[] signatures)\n            throws NameNotFoundException, CertificateException {\n        if (signatures == null || signatures.length == 0)\n            throw new CertificateException(\"signatures cannot be null or empty!\");\n        for (int i = 0; i < signatures.length; i++)\n            if (signatures[i] == null || signatures[i].toByteArray().length == 0)\n                throw new CertificateException(\"Certificates cannot be null or empty!\");\n\n        // check whether the APK signer is trusted for all apps\n        for (ApkSignaturePin pin : pinList)\n            if (areSignaturesEqual(signatures, pin.getSignatures()))\n                return; // found a matching trusted APK signer\n\n        throw new CertificateException(\"APK signatures did not match!\");\n    }\n\n    public boolean areSignaturesEqual(Signature[] sigs0, Signature[] sigs1) {\n        // TODO where is Android's implementation of this that I can just call?\n        if (sigs0 == null || sigs1 == null)\n            return false;\n        if (sigs0.length == 0 || sigs1.length == 0)\n            return false;\n        if (sigs0.length != sigs1.length)\n            return false;\n        for (int i = 0; i < sigs0.length; i++)\n            if (!sigs0[i].equals(sigs1[i]))\n                return false;\n        return true;\n    }\n\n    public void startActivity(Context context, Intent intent) throws CertificateException {\n        if (!isIntentSane(intent))\n            throw new ActivityNotFoundException(\"The intent was null or empty!\");\n        String packageName = intent.getPackage();\n        if (TextUtils.isEmpty(packageName)) {\n            packageName = intent.getComponent().getPackageName();\n            intent.setPackage(packageName);\n        }\n        try {\n            checkTrustedSigner(packageName);\n        } catch (NameNotFoundException e) {\n            e.printStackTrace();\n            throw new ActivityNotFoundException(e.getLocalizedMessage());\n        }\n        context.startActivity(intent);\n    }\n}\n"
  },
  {
    "path": "app/src/main/proto/google_auth.proto",
    "content": "syntax = \"proto3\";\n\noption java_package = \"com.beemdevelopment.aegis\";\noption java_outer_classname = \"GoogleAuthProtos\";\n\nmessage MigrationPayload {\n  enum Algorithm {\n    ALGORITHM_UNSPECIFIED = 0;\n    ALGORITHM_SHA1 = 1;\n    ALGORITHM_SHA256 = 2;\n    ALGORITHM_SHA512 = 3;\n    ALGORITHM_MD5 = 4;\n  }\n\n  enum DigitCount {\n    DIGIT_COUNT_UNSPECIFIED = 0;\n    DIGIT_COUNT_SIX = 1;\n    DIGIT_COUNT_EIGHT = 2;\n  }\n\n  enum OtpType {\n    OTP_TYPE_UNSPECIFIED = 0;\n    OTP_TYPE_HOTP = 1;\n    OTP_TYPE_TOTP = 2;\n  }\n\n  message OtpParameters {\n    bytes secret = 1;\n    string name = 2;\n    string issuer = 3;\n    Algorithm algorithm = 4;\n    DigitCount digits = 5;\n    OtpType type = 6;\n    int64 counter = 7;\n  }\n\n  repeated OtpParameters otp_parameters = 1;\n  int32 version = 2;\n  int32 batch_size = 3;\n  optional int32 batch_index = 4;\n  int32 batch_id = 5;\n}\n"
  },
  {
    "path": "app/src/main/res/anim/fade_in.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<set xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:fillAfter=\"true\"\n    android:fillEnabled=\"true\">\n    <translate\n        android:duration=\"0\"\n        android:fromYDelta=\"-100%\"\n        android:toYDelta=\"0\" />\n\n    <alpha\n        android:fromAlpha=\"0.0\"\n        android:toAlpha=\"1.0\"\n        android:duration=\"300\"/>\n</set>"
  },
  {
    "path": "app/src/main/res/anim/fade_out.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<set xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:fillAfter=\"true\"\n    android:fillEnabled=\"true\">\n\n    <alpha\n        android:fromAlpha=\"1.0\"\n        android:toAlpha=\"0.0\"\n        android:duration=\"300\"/>\n</set>"
  },
  {
    "path": "app/src/main/res/anim/item_animation_fall_down.xml",
    "content": "<set xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:duration=\"400\">\n\n    <translate\n        android:fromYDelta=\"-20%\"\n        android:toYDelta=\"0\"\n        android:interpolator=\"@android:anim/decelerate_interpolator\"\n        />\n\n    <alpha\n        android:fromAlpha=\"0\"\n        android:toAlpha=\"1\"\n        android:interpolator=\"@android:anim/decelerate_interpolator\"\n        />\n\n    <scale\n        android:fromXScale=\"105%\"\n        android:fromYScale=\"105%\"\n        android:toXScale=\"100%\"\n        android:toYScale=\"100%\"\n        android:pivotX=\"50%\"\n        android:pivotY=\"50%\"\n        android:interpolator=\"@android:anim/decelerate_interpolator\"\n        />\n\n</set>"
  },
  {
    "path": "app/src/main/res/anim/item_scale_in.xml",
    "content": "<set xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:duration=\"150\">\n\n    <scale\n        android:fromXScale=\"0\"\n        android:fromYScale=\"0\"\n        android:pivotX=\"50%\"\n        android:pivotY=\"50%\"\n        android:toXScale=\"100%\"\n        android:toYScale=\"100%\" />\n</set>"
  },
  {
    "path": "app/src/main/res/anim/item_scale_out.xml",
    "content": "<set xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:duration=\"150\">\n\n    <scale\n        android:fromXScale=\"100%\"\n        android:fromYScale=\"100%\"\n        android:pivotX=\"50%\"\n        android:pivotY=\"50%\"\n        android:toXScale=\"0\"\n        android:toYScale=\"0\" />\n</set>"
  },
  {
    "path": "app/src/main/res/anim/layout_animation_fall_down.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<layoutAnimation\n    xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:animation=\"@anim/item_animation_fall_down\"\n    android:delay=\"15%\"\n    android:animationOrder=\"normal\"\n    />"
  },
  {
    "path": "app/src/main/res/anim/slide_down_fade_in.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<set xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:fillAfter=\"true\"\n    android:fillEnabled=\"true\">\n\n    <translate\n        android:duration=\"300\"\n        android:fromYDelta=\"-200%\"\n        android:toYDelta=\"-100%\" />\n\n    <alpha\n        android:fromAlpha=\"0.0\"\n        android:toAlpha=\"1.0\"\n        android:duration=\"500\"/>\n\n</set>"
  },
  {
    "path": "app/src/main/res/anim/slide_down_fade_out.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<set xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:fillAfter=\"true\"\n    android:fillEnabled=\"true\">\n\n    <translate\n        android:duration=\"300\"\n        android:fromYDelta=\"0\"\n        android:toYDelta=\"100%\" />\n\n    <alpha\n        android:fromAlpha=\"1.0\"\n        android:toAlpha=\"0.0\"\n        android:duration=\"500\"/>\n\n    <alpha\n        android:fromAlpha=\"1.0\"\n        android:toAlpha=\"0.0\"\n        android:duration=\"500\"/>\n\n</set>"
  },
  {
    "path": "app/src/main/res/anim/slide_in_left.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n/* //device/apps/common/res/anim/slide_in_left.xml\n**\n** Copyright 2007, The Android Open Source Project\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**     http://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-->\n<set xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <translate android:fromXDelta=\"-50%p\" android:toXDelta=\"0\"\n        android:duration=\"@android:integer/config_shortAnimTime\"/>\n    <alpha android:fromAlpha=\"0.0\" android:toAlpha=\"1.0\"\n        android:duration=\"@android:integer/config_shortAnimTime\" />\n</set>"
  },
  {
    "path": "app/src/main/res/anim/slide_in_right.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n/* //device/apps/common/res/anim/slide_in_right.xml\n**\n** Copyright 2007, The Android Open Source Project\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**     http://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-->\n<set xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <translate android:fromXDelta=\"50%p\" android:toXDelta=\"0\"\n        android:duration=\"@android:integer/config_shortAnimTime\"/>\n    <alpha android:fromAlpha=\"0.0\" android:toAlpha=\"1.0\"\n        android:duration=\"@android:integer/config_shortAnimTime\" />\n</set>"
  },
  {
    "path": "app/src/main/res/anim/slide_out_left.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n/* //device/apps/common/res/anim/slide_out_left.xml\n**\n** Copyright 2007, The Android Open Source Project\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**     http://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-->\n<set xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <translate android:fromXDelta=\"0\" android:toXDelta=\"-50%p\"\n        android:duration=\"@android:integer/config_shortAnimTime\"/>\n    <alpha android:fromAlpha=\"1.0\" android:toAlpha=\"0.0\"\n        android:duration=\"@android:integer/config_shortAnimTime\" />\n</set>"
  },
  {
    "path": "app/src/main/res/anim/slide_out_right.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n/* //device/apps/common/res/anim/slide_out_right.xml\n**\n** Copyright 2007, The Android Open Source Project\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**     http://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-->\n<set xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <translate android:fromXDelta=\"0\" android:toXDelta=\"50%p\"\n        android:duration=\"@android:integer/config_shortAnimTime\"/>\n    <alpha android:fromAlpha=\"1.0\" android:toAlpha=\"0.0\"\n        android:duration=\"@android:integer/config_shortAnimTime\" />\n</set>"
  },
  {
    "path": "app/src/main/res/drawable/baseline_arrow_right_24.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:tint=\"?attr/colorControlNormal\"\n    android:viewportWidth=\"24\"\n    android:viewportHeight=\"24\">\n    <path\n        android:fillColor=\"@android:color/white\"\n        android:pathData=\"M10,17l5,-5 -5,-5v10z\" />\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/favorite_indicator.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<selector xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <item>\n        <shape android:shape=\"rectangle\">\n            <solid />\n            <stroke android:width=\"1dp\" />\n            <corners android:radius=\"4dp\" />\n        </shape>\n    </item>\n</selector>"
  },
  {
    "path": "app/src/main/res/drawable/ic_aegis_notification.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"36.967148dp\"\n    android:height=\"32.84542dp\"\n    android:viewportWidth=\"36.967148\"\n    android:viewportHeight=\"32.84542\">\n  <path\n      android:pathData=\"m18.4319,9.1137c0.7652,0 1.5304,0.3807 1.9632,1.1419l12.1955,21.4475c0.4015,0.7063 1.1511,1.1423 1.9636,1.1423h0.151c1.7335,0 2.8208,-1.8722 1.9618,-3.3779L20.5038,1.1391c-0.4329,-0.7592 -1.1973,-1.1391 -1.9614,-1.1391 -0.762,0 -1.524,0.3775 -1.9583,1.1331l-16.2803,28.3284c-0.8654,1.5057 0.2215,3.3839 1.9579,3.3839 0.8107,0 1.5593,-0.4346 1.9614,-1.1388l12.2474,-21.4542c0.4336,-0.7592 1.1973,-1.1388 1.9614,-1.1388m-0.3658,8.877c-0.7733,0 -1.5462,0.3838 -1.9847,1.1522 -0.4004,0.701 -0.4008,1.561 -0.0021,2.2624l5.848,10.2845c0.406,0.7144 1.1642,1.1557 1.9861,1.1557h0.0243c1.7544,0 2.8543,-1.8948 1.9844,-3.4184l-5.8716,-10.2842c-0.4385,-0.768 -1.2114,-1.1522 -1.9844,-1.1522m-5.3714,9.4072c-0.7733,0 -1.5462,0.3838 -1.9847,1.1518l-0.0113,0.0205c-0.4004,0.701 -0.4011,1.5611 -0.0021,2.2627l0.4875,0.8569c0.406,0.7144 1.1645,1.1557 1.9861,1.1557h0.0254c1.754,0 2.854,-1.8948 1.9844,-3.4181l-0.5006,-0.8773c-0.4385,-0.7684 -1.2118,-1.1522 -1.9847,-1.1522\"\n      android:strokeWidth=\"0.0352778\"\n      android:fillColor=\"#000000\"\n      android:strokeColor=\"#00000000\"\n      android:fillType=\"nonZero\"/>\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_aegis_quicksettings.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"36.967148dp\"\n    android:height=\"32.84542dp\"\n    android:viewportWidth=\"36.967148\"\n    android:viewportHeight=\"32.84542\">\n  <path\n      android:pathData=\"m18.4319,9.1137c0.7652,0 1.5304,0.3807 1.9632,1.1419l12.1955,21.4475c0.4015,0.7063 1.1511,1.1423 1.9636,1.1423h0.151c1.7335,0 2.8208,-1.8722 1.9618,-3.3779L20.5038,1.1391c-0.4329,-0.7592 -1.1973,-1.1391 -1.9614,-1.1391 -0.762,0 -1.524,0.3775 -1.9583,1.1331l-16.2803,28.3284c-0.8654,1.5057 0.2215,3.3839 1.9579,3.3839 0.8107,0 1.5593,-0.4346 1.9614,-1.1388l12.2474,-21.4542c0.4336,-0.7592 1.1973,-1.1388 1.9614,-1.1388m-0.3658,8.877c-0.7733,0 -1.5462,0.3838 -1.9847,1.1522 -0.4004,0.701 -0.4008,1.561 -0.0021,2.2624l5.848,10.2845c0.406,0.7144 1.1642,1.1557 1.9861,1.1557h0.0243c1.7544,0 2.8543,-1.8948 1.9844,-3.4184l-5.8716,-10.2842c-0.4385,-0.768 -1.2114,-1.1522 -1.9844,-1.1522m-5.3714,9.4072c-0.7733,0 -1.5462,0.3838 -1.9847,1.1518l-0.0113,0.0205c-0.4004,0.701 -0.4011,1.5611 -0.0021,2.2627l0.4875,0.8569c0.406,0.7144 1.1645,1.1557 1.9861,1.1557h0.0254c1.754,0 2.854,-1.8948 1.9844,-3.4181l-0.5006,-0.8773c-0.4385,-0.7684 -1.2118,-1.1522 -1.9847,-1.1522\"\n      android:strokeWidth=\"0.0352778\"\n      android:fillColor=\"#ffffff\"\n      android:strokeColor=\"#ffffff\"\n      android:fillType=\"nonZero\"/>\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_counter_black_24.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:height=\"24dp\"\n    android:width=\"24dp\"\n    android:viewportWidth=\"24\"\n    android:viewportHeight=\"24\"\n    android:tint=\"?attr/colorControlNormal\">\n    <path android:fillColor=\"#000\" android:pathData=\"M4,4H20A2,2 0 0,1 22,6V18A2,2 0 0,1 20,20H4A2,2 0 0,1 2,18V6A2,2 0 0,1 4,4M4,6V18H11V6H4M20,18V6H18.76C19,6.54 18.95,7.07 18.95,7.13C18.88,7.8 18.41,8.5 18.24,8.75L15.91,11.3L19.23,11.28L19.24,12.5L14.04,12.47L14,11.47C14,11.47 17.05,8.24 17.2,7.95C17.34,7.67 17.91,6 16.5,6C15.27,6.05 15.41,7.3 15.41,7.3L13.87,7.31C13.87,7.31 13.88,6.65 14.25,6H13V18H15.58L15.57,17.14L16.54,17.13C16.54,17.13 17.45,16.97 17.46,16.08C17.5,15.08 16.65,15.08 16.5,15.08C16.37,15.08 15.43,15.13 15.43,15.95H13.91C13.91,15.95 13.95,13.89 16.5,13.89C19.1,13.89 18.96,15.91 18.96,15.91C18.96,15.91 19,17.16 17.85,17.63L18.37,18H20M8.92,16H7.42V10.2L5.62,10.76V9.53L8.76,8.41H8.92V16Z\" />\n</vector>"
  },
  {
    "path": "app/src/main/res/drawable/ic_export_notes.xml",
    "content": "<vector android:alpha=\"0.5\" android:height=\"24dp\"\n    android:viewportHeight=\"960\" android:viewportWidth=\"960\"\n    android:width=\"24dp\" xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <path android:fillColor=\"#FF000000\" android:pathData=\"m648,820 l112,-112v92h40v-160L640,640v40h92L620,792l28,28ZM200,840q-33,0 -56.5,-23.5T120,760v-560q0,-33 23.5,-56.5T200,120h560q33,0 56.5,23.5T840,200v268q-19,-9 -39,-15.5t-41,-9.5v-243L200,200v560h242q3,22 9.5,42t15.5,38L200,840ZM200,720v40,-560 243,-3 280ZM280,680h163q3,-21 9.5,-41t14.5,-39L280,600v80ZM280,520h244q32,-30 71.5,-50t84.5,-27v-3L280,440v80ZM280,360h400v-80L280,280v80ZM720,920q-83,0 -141.5,-58.5T520,720q0,-83 58.5,-141.5T720,520q83,0 141.5,58.5T920,720q0,83 -58.5,141.5T720,920Z\"/>\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_filled_star_24.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"24dp\"\n    android:height=\"24dp\"\n    android:viewportWidth=\"960\"\n    android:viewportHeight=\"960\"\n    android:tint=\"?attr/colorControlNormal\">\n    <path android:fillColor=\"@android:color/white\" android:pathData=\"M233,840L298,559L80,370L368,345L480,80L592,345L880,370L662,559L727,840L480,691L233,840Z\"/>\n</vector>"
  },
  {
    "path": "app/src/main/res/drawable/ic_folder_zip.xml",
    "content": "<vector android:alpha=\"0.5\" android:height=\"24dp\"\n    android:viewportHeight=\"960\" android:viewportWidth=\"960\"\n    android:width=\"24dp\" xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <path android:fillColor=\"#FF000000\" android:pathData=\"M640,480v-80h80v80h-80ZM640,560h-80v-80h80v80ZM640,640v-80h80v80h-80ZM447,320l-80,-80L160,240v480h400v-80h80v80h160v-400L640,320v80h-80v-80L447,320ZM160,800q-33,0 -56.5,-23.5T80,720v-480q0,-33 23.5,-56.5T160,160h240l80,80h320q33,0 56.5,23.5T880,320v400q0,33 -23.5,56.5T800,800L160,800ZM160,720v-480,480Z\"/>\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_lock.xml",
    "content": "<vector android:alpha=\"0.5\" android:height=\"24dp\"\n    android:viewportHeight=\"960\" android:viewportWidth=\"960\"\n    android:width=\"24dp\" xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <path android:fillColor=\"#FF000000\" android:pathData=\"M240,880q-33,0 -56.5,-23.5T160,800v-400q0,-33 23.5,-56.5T240,320h40v-80q0,-83 58.5,-141.5T480,40q83,0 141.5,58.5T680,240v80h40q33,0 56.5,23.5T800,400v400q0,33 -23.5,56.5T720,880L240,880ZM240,800h480v-400L240,400v400ZM480,680q33,0 56.5,-23.5T560,600q0,-33 -23.5,-56.5T480,520q-33,0 -56.5,23.5T400,600q0,33 23.5,56.5T480,680ZM360,320h240v-80q0,-50 -35,-85t-85,-35q-50,0 -85,35t-35,85v80ZM240,800v-400,400Z\"/>\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_lock_open.xml",
    "content": "<vector android:alpha=\"0.5\" android:height=\"24dp\"\n    android:viewportHeight=\"960\" android:viewportWidth=\"960\"\n    android:width=\"24dp\" xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <path android:fillColor=\"#FF000000\" android:pathData=\"M240,320h360v-80q0,-50 -35,-85t-85,-35q-50,0 -85,35t-35,85h-80q0,-83 58.5,-141.5T480,40q83,0 141.5,58.5T680,240v80h40q33,0 56.5,23.5T800,400v400q0,33 -23.5,56.5T720,880L240,880q-33,0 -56.5,-23.5T160,800v-400q0,-33 23.5,-56.5T240,320ZM240,800h480v-400L240,400v400ZM480,680q33,0 56.5,-23.5T560,600q0,-33 -23.5,-56.5T480,520q-33,0 -56.5,23.5T400,600q0,33 23.5,56.5T480,680ZM240,800v-400,400Z\"/>\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_outline_add_24.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"24dp\"\n    android:height=\"24dp\"\n    android:tint=\"?attr/colorControlNormal\"\n    android:viewportWidth=\"960\"\n    android:viewportHeight=\"960\">\n    <path\n        android:fillColor=\"@android:color/white\"\n        android:pathData=\"M440,520L200,520L200,440L440,440L440,200L520,200L520,440L760,440L760,520L520,520L520,760L440,760L440,520Z\" />\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_outline_add_photo_alternate_24.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"24dp\"\n    android:height=\"24dp\"\n    android:tint=\"?attr/colorControlNormal\"\n    android:viewportWidth=\"960\"\n    android:viewportHeight=\"960\">\n    <path\n        android:fillColor=\"@android:color/white\"\n        android:pathData=\"M200,840Q167,840 143.5,816.5Q120,793 120,760L120,200Q120,167 143.5,143.5Q167,120 200,120L560,120L560,200L200,200Q200,200 200,200Q200,200 200,200L200,760Q200,760 200,760Q200,760 200,760L760,760Q760,760 760,760Q760,760 760,760L760,400L840,400L840,760Q840,793 816.5,816.5Q793,840 760,840L200,840ZM680,360L680,280L600,280L600,200L680,200L680,120L760,120L760,200L840,200L840,280L760,280L760,360L680,360ZM240,680L720,680L570,480L450,640L360,520L240,680ZM200,200L200,320L200,320L200,400L200,400L200,760Q200,760 200,760Q200,760 200,760L200,760Q200,760 200,760Q200,760 200,760L200,200Q200,200 200,200Q200,200 200,200L200,200Z\" />\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_outline_android_24.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"24dp\"\n    android:height=\"24dp\"\n    android:tint=\"?attr/colorControlNormal\"\n    android:viewportWidth=\"960\"\n    android:viewportHeight=\"960\">\n    <path\n        android:fillColor=\"@android:color/white\"\n        android:pathData=\"M40,720Q49,613 105.5,523Q162,433 256,380L182,252Q176,243 179,233Q182,223 192,218Q200,213 210,216Q220,219 226,228L300,356Q386,320 480,320Q574,320 660,356L734,228Q740,219 750,216Q760,213 768,218Q778,223 781,233Q784,243 778,252L704,380Q798,433 854.5,523Q911,613 920,720L40,720ZM280,610Q301,610 315.5,595.5Q330,581 330,560Q330,539 315.5,524.5Q301,510 280,510Q259,510 244.5,524.5Q230,539 230,560Q230,581 244.5,595.5Q259,610 280,610ZM680,610Q701,610 715.5,595.5Q730,581 730,560Q730,539 715.5,524.5Q701,510 680,510Q659,510 644.5,524.5Q630,539 630,560Q630,581 644.5,595.5Q659,610 680,610Z\" />\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_outline_arrow_left_alt_24.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:tint=\"?attr/colorControlNormal\"\n    android:viewportWidth=\"960\"\n    android:viewportHeight=\"960\">\n    <path\n        android:fillColor=\"@android:color/white\"\n        android:pathData=\"M400,720L160,480L400,240L456,298L314,440L800,440L800,520L314,520L456,662L400,720Z\" />\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_outline_arrow_right_alt_24.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:tint=\"?attr/colorControlNormal\"\n    android:viewportWidth=\"960\"\n    android:viewportHeight=\"960\">\n    <path\n        android:fillColor=\"@android:color/white\"\n        android:pathData=\"M560,720L504,662L646,520L160,520L160,440L646,440L504,298L560,240L800,480L560,720Z\" />\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_outline_brush_24.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"24dp\"\n    android:height=\"24dp\"\n    android:tint=\"?attr/colorControlNormal\"\n    android:viewportWidth=\"960\"\n    android:viewportHeight=\"960\">\n    <path\n        android:fillColor=\"@android:color/white\"\n        android:pathData=\"M240,840Q195,840 151,818Q107,796 80,760Q106,760 133,739.5Q160,719 160,680Q160,630 195,595Q230,560 280,560Q330,560 365,595Q400,630 400,680Q400,746 353,793Q306,840 240,840ZM240,760Q273,760 296.5,736.5Q320,713 320,680Q320,663 308.5,651.5Q297,640 280,640Q263,640 251.5,651.5Q240,663 240,680Q240,703 234.5,722Q229,741 220,758Q225,760 230,760Q235,760 240,760ZM470,600L360,490L718,132Q729,121 745.5,120.5Q762,120 774,132L828,186Q840,198 840,214Q840,230 828,242L470,600ZM280,680Q280,680 280,680Q280,680 280,680Q280,680 280,680Q280,680 280,680Q280,680 280,680Q280,680 280,680Q280,680 280,680Q280,680 280,680Q280,680 280,680Q280,680 280,680Z\" />\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_outline_camera_front_24.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"24dp\"\n    android:height=\"24dp\"\n    android:tint=\"?attr/colorControlNormal\"\n    android:viewportWidth=\"960\"\n    android:viewportHeight=\"960\">\n    <path\n        android:fillColor=\"@android:color/white\"\n        android:pathData=\"M394,900L338,844L382,800L200,800L200,720L382,720L338,676L394,620L534,760L394,900ZM200,680L200,160Q200,127 223.5,103.5Q247,80 280,80L680,80Q713,80 736.5,103.5Q760,127 760,160L760,680L680,680L680,618Q640,589 589.5,574.5Q539,560 480,560Q421,560 370.5,574.5Q320,589 280,618L280,680L280,680L200,680ZM280,526Q328,503 378.5,491.5Q429,480 480,480Q531,480 581.5,491.5Q632,503 680,526L680,160Q680,160 680,160Q680,160 680,160L280,160Q280,160 280,160Q280,160 280,160L280,526ZM560,800L560,720L760,720L760,800L560,800ZM480,440Q430,440 395,405Q360,370 360,320Q360,270 395,235Q430,200 480,200Q530,200 565,235Q600,270 600,320Q600,370 565,405Q530,440 480,440ZM480,360Q497,360 508.5,348.5Q520,337 520,320Q520,303 508.5,291.5Q497,280 480,280Q463,280 451.5,291.5Q440,303 440,320Q440,337 451.5,348.5Q463,360 480,360ZM480,560Q480,560 480,560Q480,560 480,560L480,560L480,560L480,560L480,560L480,560L480,560Q480,560 480,560Q480,560 480,560ZM480,320Q480,320 480,320Q480,320 480,320Q480,320 480,320Q480,320 480,320Q480,320 480,320Q480,320 480,320Q480,320 480,320Q480,320 480,320Z\" />\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_outline_camera_rear_24.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"24dp\"\n    android:height=\"24dp\"\n    android:tint=\"?attr/colorControlNormal\"\n    android:viewportWidth=\"960\"\n    android:viewportHeight=\"960\">\n    <path\n        android:fillColor=\"@android:color/white\"\n        android:pathData=\"M200,680L200,160Q200,127 223.5,103.5Q247,80 280,80L680,80Q713,80 736.5,103.5Q760,127 760,160L760,680L680,680L680,160Q680,160 680,160Q680,160 680,160L280,160Q280,160 280,160Q280,160 280,160L280,680L280,680L200,680ZM480,400Q513,400 536.5,376.5Q560,353 560,320Q560,287 536.5,263.5Q513,240 480,240Q447,240 423.5,263.5Q400,287 400,320Q400,353 423.5,376.5Q447,400 480,400ZM394,900L338,844L382,800L200,800L200,720L382,720L338,676L394,620L534,760L394,900ZM560,800L560,720L760,720L760,800L560,800ZM480,420L480,420Q480,420 480,420Q480,420 480,420L480,420L480,420L480,420L480,420L480,420L480,420Q480,420 480,420Q480,420 480,420Z\" />\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_outline_check_24.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"24dp\"\n    android:height=\"24dp\"\n    android:tint=\"?attr/colorControlNormal\"\n    android:viewportWidth=\"960\"\n    android:viewportHeight=\"960\">\n    <path\n        android:fillColor=\"@android:color/white\"\n        android:pathData=\"M382,720L154,492L211,435L382,606L749,239L806,296L382,720Z\" />\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_outline_close_24.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"24dp\"\n    android:height=\"24dp\"\n    android:tint=\"?attr/colorControlNormal\"\n    android:viewportWidth=\"960\"\n    android:viewportHeight=\"960\">\n    <path\n        android:fillColor=\"@android:color/white\"\n        android:pathData=\"M256,760L200,704L424,480L200,256L256,200L480,424L704,200L760,256L536,480L760,704L704,760L480,536L256,760Z\" />\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_outline_cloud_upload_24.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"24dp\"\n    android:height=\"24dp\"\n    android:tint=\"?attr/colorControlNormal\"\n    android:viewportWidth=\"960\"\n    android:viewportHeight=\"960\">\n    <path\n        android:fillColor=\"@android:color/white\"\n        android:pathData=\"M260,800Q169,800 104.5,737Q40,674 40,583Q40,505 87,444Q134,383 210,366Q235,274 310,217Q385,160 480,160Q597,160 678.5,241.5Q760,323 760,440L760,440L760,440Q829,448 874.5,499.5Q920,551 920,620Q920,695 867.5,747.5Q815,800 740,800L520,800Q487,800 463.5,776.5Q440,753 440,720L440,514L376,576L320,520L480,360L640,520L584,576L520,514L520,720Q520,720 520,720Q520,720 520,720L740,720Q782,720 811,691Q840,662 840,620Q840,578 811,549Q782,520 740,520L680,520L680,440Q680,357 621.5,298.5Q563,240 480,240Q397,240 338.5,298.5Q280,357 280,440L260,440Q202,440 161,481Q120,522 120,580Q120,638 161,679Q202,720 260,720L360,720L360,800L260,800ZM480,520L480,520L480,520Q480,520 480,520Q480,520 480,520L480,520L480,520Q480,520 480,520Q480,520 480,520L480,520Q480,520 480,520Q480,520 480,520L480,520Q480,520 480,520Q480,520 480,520Q480,520 480,520Q480,520 480,520L480,520L480,520Q480,520 480,520Q480,520 480,520Q480,520 480,520Q480,520 480,520L480,520Q480,520 480,520Q480,520 480,520Q480,520 480,520Q480,520 480,520L480,520L480,520Z\" />\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_outline_code_24.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"24dp\"\n    android:height=\"24dp\"\n    android:tint=\"?attr/colorControlNormal\"\n    android:viewportWidth=\"960\"\n    android:viewportHeight=\"960\">\n    <path\n        android:fillColor=\"@android:color/white\"\n        android:pathData=\"M320,720L80,480L320,240L377,297L193,481L376,664L320,720ZM640,720L583,663L767,479L584,296L640,240L880,480L640,720Z\" />\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_outline_construction_24.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"24dp\"\n    android:height=\"24dp\"\n    android:tint=\"?attr/colorControlNormal\"\n    android:viewportWidth=\"960\"\n    android:viewportHeight=\"960\">\n    <path\n        android:fillColor=\"@android:color/white\"\n        android:pathData=\"M756,840L537,621L621,537L840,756L756,840ZM204,840L120,756L396,480L328,412L300,440L249,389L249,471L221,499L100,378L128,350L210,350L160,300L302,158Q322,138 345,129Q368,120 392,120Q416,120 439,129Q462,138 482,158L390,250L440,300L412,328L480,396L570,306Q566,295 563.5,283Q561,271 561,259Q561,200 601.5,159.5Q642,119 701,119Q716,119 729.5,122Q743,125 757,131L658,230L730,302L829,203Q836,217 838.5,230.5Q841,244 841,259Q841,318 800.5,358.5Q760,399 701,399Q689,399 677,397Q665,395 654,390L204,840Z\" />\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_outline_content_copy_24.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:tint=\"?attr/colorControlNormal\"\n    android:viewportWidth=\"960\"\n    android:viewportHeight=\"960\">\n    <path\n        android:fillColor=\"@android:color/white\"\n        android:pathData=\"M360,720Q327,720 303.5,696.5Q280,673 280,640L280,160Q280,127 303.5,103.5Q327,80 360,80L720,80Q753,80 776.5,103.5Q800,127 800,160L800,640Q800,673 776.5,696.5Q753,720 720,720L360,720ZM360,640L720,640Q720,640 720,640Q720,640 720,640L720,160Q720,160 720,160Q720,160 720,160L360,160Q360,160 360,160Q360,160 360,160L360,640Q360,640 360,640Q360,640 360,640ZM200,880Q167,880 143.5,856.5Q120,833 120,800L120,240L200,240L200,800Q200,800 200,800Q200,800 200,800L640,800L640,880L200,880ZM360,640Q360,640 360,640Q360,640 360,640L360,160Q360,160 360,160Q360,160 360,160L360,160Q360,160 360,160Q360,160 360,160L360,640Q360,640 360,640Q360,640 360,640L360,640Z\" />\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_outline_delete_24.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"24dp\"\n    android:height=\"24dp\"\n    android:tint=\"?attr/colorControlNormal\"\n    android:viewportWidth=\"960\"\n    android:viewportHeight=\"960\">\n    <path\n        android:fillColor=\"@android:color/white\"\n        android:pathData=\"M280,840Q247,840 223.5,816.5Q200,793 200,760L200,240L160,240L160,160L360,160L360,120L600,120L600,160L800,160L800,240L760,240L760,760Q760,793 736.5,816.5Q713,840 680,840L280,840ZM680,240L280,240L280,760Q280,760 280,760Q280,760 280,760L680,760Q680,760 680,760Q680,760 680,760L680,240ZM360,680L440,680L440,320L360,320L360,680ZM520,680L600,680L600,320L520,320L520,680ZM280,240L280,240L280,760Q280,760 280,760Q280,760 280,760L280,760Q280,760 280,760Q280,760 280,760L280,240Z\" />\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_outline_description_24.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"24dp\"\n    android:height=\"24dp\"\n    android:tint=\"?attr/colorControlNormal\"\n    android:viewportWidth=\"960\"\n    android:viewportHeight=\"960\">\n    <path\n        android:fillColor=\"@android:color/white\"\n        android:pathData=\"M320,720L640,720L640,640L320,640L320,720ZM320,560L640,560L640,480L320,480L320,560ZM240,880Q207,880 183.5,856.5Q160,833 160,800L160,160Q160,127 183.5,103.5Q207,80 240,80L560,80L800,320L800,800Q800,833 776.5,856.5Q753,880 720,880L240,880ZM520,360L520,160L240,160Q240,160 240,160Q240,160 240,160L240,800Q240,800 240,800Q240,800 240,800L720,800Q720,800 720,800Q720,800 720,800L720,360L520,360ZM240,160L240,160L240,360L240,360L240,160L240,360L240,360L240,800Q240,800 240,800Q240,800 240,800L240,800Q240,800 240,800Q240,800 240,800L240,160Q240,160 240,160Q240,160 240,160Z\" />\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_outline_done_all_24.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"24dp\"\n    android:height=\"24dp\"\n    android:tint=\"?attr/colorControlNormal\"\n    android:viewportWidth=\"960\"\n    android:viewportHeight=\"960\">\n    <path\n        android:fillColor=\"@android:color/white\"\n        android:pathData=\"M268,720L42,494L99,438L269,608L269,608L325,664L268,720ZM494,720L268,494L324,437L494,607L862,239L918,296L494,720ZM494,494L437,438L635,240L692,296L494,494Z\" />\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_outline_edit_24.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"24dp\"\n    android:height=\"24dp\"\n    android:tint=\"?attr/colorControlNormal\"\n    android:viewportWidth=\"960\"\n    android:viewportHeight=\"960\">\n    <path\n        android:fillColor=\"@android:color/white\"\n        android:pathData=\"M200,760L257,760L648,369L591,312L200,703L200,760ZM120,840L120,670L648,143Q660,132 674.5,126Q689,120 705,120Q721,120 736,126Q751,132 762,144L817,200Q829,211 834.5,226Q840,241 840,256Q840,272 834.5,286.5Q829,301 817,313L290,840L120,840ZM760,256L760,256L704,200L704,200L760,256ZM619,341L591,312L591,312L648,369L648,369L619,341Z\" />\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_outline_error_24.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"24dp\"\n    android:height=\"24dp\"\n    android:tint=\"?attr/colorControlNormal\"\n    android:viewportWidth=\"960\"\n    android:viewportHeight=\"960\">\n    <path\n        android:fillColor=\"@android:color/white\"\n        android:pathData=\"M480,680Q497,680 508.5,668.5Q520,657 520,640Q520,623 508.5,611.5Q497,600 480,600Q463,600 451.5,611.5Q440,623 440,640Q440,657 451.5,668.5Q463,680 480,680ZM440,520L520,520L520,280L440,280L440,520ZM480,880Q397,880 324,848.5Q251,817 197,763Q143,709 111.5,636Q80,563 80,480Q80,397 111.5,324Q143,251 197,197Q251,143 324,111.5Q397,80 480,80Q563,80 636,111.5Q709,143 763,197Q817,251 848.5,324Q880,397 880,480Q880,563 848.5,636Q817,709 763,763Q709,817 636,848.5Q563,880 480,880ZM480,800Q614,800 707,707Q800,614 800,480Q800,346 707,253Q614,160 480,160Q346,160 253,253Q160,346 160,480Q160,614 253,707Q346,800 480,800ZM480,480Q480,480 480,480Q480,480 480,480Q480,480 480,480Q480,480 480,480Q480,480 480,480Q480,480 480,480Q480,480 480,480Q480,480 480,480Z\" />\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_outline_expand_more_24.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"24dp\"\n    android:height=\"24dp\"\n    android:tint=\"?attr/colorControlNormal\"\n    android:viewportWidth=\"960\"\n    android:viewportHeight=\"960\">\n    <path\n        android:fillColor=\"@android:color/white\"\n        android:pathData=\"M480,615L240,375L296,319L480,503L664,319L720,375L480,615Z\" />\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_outline_fiber_pin_24.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"24dp\"\n    android:height=\"24dp\"\n    android:tint=\"?attr/colorControlNormal\"\n    android:viewportWidth=\"960\"\n    android:viewportHeight=\"960\">\n    <path\n        android:fillColor=\"@android:color/white\"\n        android:pathData=\"M200,600L260,600L260,520L360,520Q377,520 388.5,508.5Q400,497 400,480L400,400Q400,383 388.5,371.5Q377,360 360,360L200,360L200,600ZM450,600L510,600L510,360L450,360L450,600ZM560,600L610,600L610,460L712,600L760,600L760,360L710,360L710,500L610,360L560,360L560,600ZM260,460L260,420L340,420Q340,420 340,420Q340,420 340,420L340,460Q340,460 340,460Q340,460 340,460L260,460ZM160,800Q127,800 103.5,776.5Q80,753 80,720L80,240Q80,207 103.5,183.5Q127,160 160,160L800,160Q833,160 856.5,183.5Q880,207 880,240L880,720Q880,753 856.5,776.5Q833,800 800,800L160,800ZM160,720L800,720Q800,720 800,720Q800,720 800,720L800,240Q800,240 800,240Q800,240 800,240L160,240Q160,240 160,240Q160,240 160,240L160,720Q160,720 160,720Q160,720 160,720ZM160,720Q160,720 160,720Q160,720 160,720L160,240Q160,240 160,240Q160,240 160,240L160,240Q160,240 160,240Q160,240 160,240L160,720Q160,720 160,720Q160,720 160,720L160,720Z\" />\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_outline_group_24.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"24dp\"\n    android:height=\"24dp\"\n    android:viewportWidth=\"960\"\n    android:viewportHeight=\"960\"\n    android:tint=\"?attr/colorControlNormal\">\n  <path\n      android:fillColor=\"@android:color/white\"\n      android:pathData=\"M40,800L40,688Q40,654 57.5,625.5Q75,597 104,582Q166,551 230,535.5Q294,520 360,520Q426,520 490,535.5Q554,551 616,582Q645,597 662.5,625.5Q680,654 680,688L680,800L40,800ZM760,800L760,680Q760,636 735.5,595.5Q711,555 666,526Q717,532 762,546.5Q807,561 846,582Q882,602 901,626.5Q920,651 920,680L920,800L760,800ZM360,480Q294,480 247,433Q200,386 200,320Q200,254 247,207Q294,160 360,160Q426,160 473,207Q520,254 520,320Q520,386 473,433Q426,480 360,480ZM760,320Q760,386 713,433Q666,480 600,480Q589,480 572,477.5Q555,475 544,472Q571,440 585.5,401Q600,362 600,320Q600,278 585.5,239Q571,200 544,168Q558,163 572,161.5Q586,160 600,160Q666,160 713,207Q760,254 760,320ZM120,720L600,720L600,688Q600,677 594.5,668Q589,659 580,654Q526,627 471,613.5Q416,600 360,600Q304,600 249,613.5Q194,627 140,654Q131,659 125.5,668Q120,677 120,688L120,720ZM360,400Q393,400 416.5,376.5Q440,353 440,320Q440,287 416.5,263.5Q393,240 360,240Q327,240 303.5,263.5Q280,287 280,320Q280,353 303.5,376.5Q327,400 360,400ZM360,720L360,720L360,720Q360,720 360,720Q360,720 360,720Q360,720 360,720Q360,720 360,720Q360,720 360,720Q360,720 360,720Q360,720 360,720Q360,720 360,720L360,720ZM360,320Q360,320 360,320Q360,320 360,320Q360,320 360,320Q360,320 360,320Q360,320 360,320Q360,320 360,320Q360,320 360,320Q360,320 360,320Z\"/>\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_outline_history_24.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"24dp\"\n    android:height=\"24dp\"\n    android:tint=\"?attr/colorControlNormal\"\n    android:viewportWidth=\"960\"\n    android:viewportHeight=\"960\">\n    <path\n        android:fillColor=\"@android:color/white\"\n        android:pathData=\"M480,840Q342,840 239.5,748.5Q137,657 122,520L204,520Q218,624 296.5,692Q375,760 480,760Q597,760 678.5,678.5Q760,597 760,480Q760,363 678.5,281.5Q597,200 480,200Q411,200 351,232Q291,264 250,320L360,320L360,400L120,400L120,160L200,160L200,254Q251,190 324.5,155Q398,120 480,120Q555,120 620.5,148.5Q686,177 734.5,225.5Q783,274 811.5,339.5Q840,405 840,480Q840,555 811.5,620.5Q783,686 734.5,734.5Q686,783 620.5,811.5Q555,840 480,840ZM592,648L440,496L440,280L520,280L520,464L648,592L592,648Z\" />\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_outline_info_24.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"24dp\"\n    android:height=\"24dp\"\n    android:tint=\"?attr/colorControlNormal\"\n    android:viewportWidth=\"960\"\n    android:viewportHeight=\"960\">\n    <path\n        android:fillColor=\"@android:color/white\"\n        android:pathData=\"M440,680L520,680L520,440L440,440L440,680ZM480,360Q497,360 508.5,348.5Q520,337 520,320Q520,303 508.5,291.5Q497,280 480,280Q463,280 451.5,291.5Q440,303 440,320Q440,337 451.5,348.5Q463,360 480,360ZM480,880Q397,880 324,848.5Q251,817 197,763Q143,709 111.5,636Q80,563 80,480Q80,397 111.5,324Q143,251 197,197Q251,143 324,111.5Q397,80 480,80Q563,80 636,111.5Q709,143 763,197Q817,251 848.5,324Q880,397 880,480Q880,563 848.5,636Q817,709 763,763Q709,817 636,848.5Q563,880 480,880ZM480,800Q614,800 707,707Q800,614 800,480Q800,346 707,253Q614,160 480,160Q346,160 253,253Q160,346 160,480Q160,614 253,707Q346,800 480,800ZM480,480Q480,480 480,480Q480,480 480,480Q480,480 480,480Q480,480 480,480Q480,480 480,480Q480,480 480,480Q480,480 480,480Q480,480 480,480Z\" />\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_outline_key_24.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"24dp\"\n    android:height=\"24dp\"\n    android:tint=\"?attr/colorControlNormal\"\n    android:viewportWidth=\"960\"\n    android:viewportHeight=\"960\">\n    <path\n        android:fillColor=\"@android:color/white\"\n        android:pathData=\"M280,560Q247,560 223.5,536.5Q200,513 200,480Q200,447 223.5,423.5Q247,400 280,400Q313,400 336.5,423.5Q360,447 360,480Q360,513 336.5,536.5Q313,560 280,560ZM280,720Q180,720 110,650Q40,580 40,480Q40,380 110,310Q180,240 280,240Q347,240 401.5,273Q456,306 488,360L840,360L960,480L780,660L700,600L620,660L535,600L488,600Q456,654 401.5,687Q347,720 280,720ZM280,640Q336,640 378.5,606Q421,572 435,520L560,520L618,561L700,500L771,555L846,480L806,440L435,440Q421,388 378.5,354Q336,320 280,320Q214,320 167,367Q120,414 120,480Q120,546 167,593Q214,640 280,640Z\" />\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_outline_layers_24.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"24dp\"\n    android:height=\"24dp\"\n    android:tint=\"?attr/colorControlNormal\"\n    android:viewportWidth=\"960\"\n    android:viewportHeight=\"960\">\n    <path\n        android:fillColor=\"@android:color/white\"\n        android:pathData=\"M480,842L120,562L186,512L480,740L774,512L840,562L480,842ZM480,640L120,360L480,80L840,360L480,640ZM480,360L480,360L480,360L480,360L480,360ZM480,538L710,360L480,182L250,360L480,538Z\" />\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_outline_lock_24.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"24dp\"\n    android:height=\"24dp\"\n    android:tint=\"?attr/colorControlNormal\"\n    android:viewportWidth=\"960\"\n    android:viewportHeight=\"960\">\n    <path\n        android:fillColor=\"@android:color/white\"\n        android:pathData=\"M240,880Q207,880 183.5,856.5Q160,833 160,800L160,400Q160,367 183.5,343.5Q207,320 240,320L280,320L280,240Q280,157 338.5,98.5Q397,40 480,40Q563,40 621.5,98.5Q680,157 680,240L680,320L720,320Q753,320 776.5,343.5Q800,367 800,400L800,800Q800,833 776.5,856.5Q753,880 720,880L240,880ZM240,800L720,800Q720,800 720,800Q720,800 720,800L720,400Q720,400 720,400Q720,400 720,400L240,400Q240,400 240,400Q240,400 240,400L240,800Q240,800 240,800Q240,800 240,800ZM480,680Q513,680 536.5,656.5Q560,633 560,600Q560,567 536.5,543.5Q513,520 480,520Q447,520 423.5,543.5Q400,567 400,600Q400,633 423.5,656.5Q447,680 480,680ZM360,320L600,320L600,240Q600,190 565,155Q530,120 480,120Q430,120 395,155Q360,190 360,240L360,320ZM240,800Q240,800 240,800Q240,800 240,800L240,400Q240,400 240,400Q240,400 240,400L240,400Q240,400 240,400Q240,400 240,400L240,800Q240,800 240,800Q240,800 240,800L240,800Z\" />\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_outline_mail_24.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"24dp\"\n    android:height=\"24dp\"\n    android:tint=\"?attr/colorControlNormal\"\n    android:viewportWidth=\"960\"\n    android:viewportHeight=\"960\">\n    <path\n        android:fillColor=\"@android:color/white\"\n        android:pathData=\"M160,800Q127,800 103.5,776.5Q80,753 80,720L80,240Q80,207 103.5,183.5Q127,160 160,160L800,160Q833,160 856.5,183.5Q880,207 880,240L880,720Q880,753 856.5,776.5Q833,800 800,800L160,800ZM480,520L160,320L160,720Q160,720 160,720Q160,720 160,720L800,720Q800,720 800,720Q800,720 800,720L800,320L480,520ZM480,440L800,240L160,240L480,440ZM160,320L160,240L160,240L160,320L160,720Q160,720 160,720Q160,720 160,720L160,720Q160,720 160,720Q160,720 160,720L160,320Z\" />\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_outline_menu_24.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"24dp\"\n    android:height=\"24dp\"\n    android:tint=\"?attr/colorControlNormal\"\n    android:viewportWidth=\"960\"\n    android:viewportHeight=\"960\">\n    <path\n        android:fillColor=\"@android:color/white\"\n        android:pathData=\"M120,720L120,640L840,640L840,720L120,720ZM120,520L120,440L840,440L840,520L120,520ZM120,320L120,240L840,240L840,320L120,320Z\" />\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_outline_more_vert_24.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"24dp\"\n    android:height=\"24dp\"\n    android:tint=\"?attr/colorControlNormal\"\n    android:viewportWidth=\"960\"\n    android:viewportHeight=\"960\">\n    <path\n        android:fillColor=\"@android:color/white\"\n        android:pathData=\"M480,800Q447,800 423.5,776.5Q400,753 400,720Q400,687 423.5,663.5Q447,640 480,640Q513,640 536.5,663.5Q560,687 560,720Q560,753 536.5,776.5Q513,800 480,800ZM480,560Q447,560 423.5,536.5Q400,513 400,480Q400,447 423.5,423.5Q447,400 480,400Q513,400 536.5,423.5Q560,447 560,480Q560,513 536.5,536.5Q513,560 480,560ZM480,320Q447,320 423.5,296.5Q400,273 400,240Q400,207 423.5,183.5Q447,160 480,160Q513,160 536.5,183.5Q560,207 560,240Q560,273 536.5,296.5Q513,320 480,320Z\" />\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_outline_notes_24.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:tint=\"?attr/colorControlNormal\"\n    android:viewportWidth=\"960\"\n    android:viewportHeight=\"960\">\n    <path\n        android:fillColor=\"@android:color/white\"\n        android:pathData=\"M120,720L120,640L600,640L600,720L120,720ZM120,520L120,440L840,440L840,520L120,520ZM120,320L120,240L840,240L840,320L120,320Z\" />\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_outline_package_variant_24.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=\"#000\"\n        android:pathData=\"M2,10.96C1.5,10.68 1.35,10.07 1.63,9.59L3.13,7C3.24,6.8 3.41,6.66 3.6,6.58L11.43,2.18C11.59,2.06 11.79,2 12,2C12.21,2 12.41,2.06 12.57,2.18L20.47,6.62C20.66,6.72 20.82,6.88 20.91,7.08L22.36,9.6C22.64,10.08 22.47,10.69 22,10.96L21,11.54V16.5C21,16.88 20.79,17.21 20.47,17.38L12.57,21.82C12.41,21.94 12.21,22 12,22C11.79,22 11.59,21.94 11.43,21.82L3.53,17.38C3.21,17.21 3,16.88 3,16.5V10.96C2.7,11.13 2.32,11.14 2,10.96M12,4.15V4.15L12,10.85V10.85L17.96,7.5L12,4.15M5,15.91L11,19.29V12.58L5,9.21V15.91M19,15.91V12.69L14,15.59C13.67,15.77 13.3,15.76 13,15.6V19.29L19,15.91M13.85,13.36L20.13,9.73L19.55,8.72L13.27,12.35L13.85,13.36Z\" />\n</vector>"
  },
  {
    "path": "app/src/main/res/drawable/ic_outline_person_24.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"24dp\"\n    android:height=\"24dp\"\n    android:tint=\"?attr/colorControlNormal\"\n    android:viewportWidth=\"960\"\n    android:viewportHeight=\"960\">\n    <path\n        android:fillColor=\"@android:color/white\"\n        android:pathData=\"M480,480Q414,480 367,433Q320,386 320,320Q320,254 367,207Q414,160 480,160Q546,160 593,207Q640,254 640,320Q640,386 593,433Q546,480 480,480ZM160,800L160,688Q160,654 177.5,625.5Q195,597 224,582Q286,551 350,535.5Q414,520 480,520Q546,520 610,535.5Q674,551 736,582Q765,597 782.5,625.5Q800,654 800,688L800,800L160,800ZM240,720L720,720L720,688Q720,677 714.5,668Q709,659 700,654Q646,627 591,613.5Q536,600 480,600Q424,600 369,613.5Q314,627 260,654Q251,659 245.5,668Q240,677 240,688L240,720ZM480,400Q513,400 536.5,376.5Q560,353 560,320Q560,287 536.5,263.5Q513,240 480,240Q447,240 423.5,263.5Q400,287 400,320Q400,353 423.5,376.5Q447,400 480,400ZM480,320Q480,320 480,320Q480,320 480,320Q480,320 480,320Q480,320 480,320Q480,320 480,320Q480,320 480,320Q480,320 480,320Q480,320 480,320ZM480,720L480,720Q480,720 480,720Q480,720 480,720Q480,720 480,720Q480,720 480,720Q480,720 480,720Q480,720 480,720Q480,720 480,720Q480,720 480,720L480,720L480,720Z\" />\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_outline_public_24.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"24dp\"\n    android:height=\"24dp\"\n    android:tint=\"?attr/colorControlNormal\"\n    android:viewportWidth=\"960\"\n    android:viewportHeight=\"960\">\n    <path\n        android:fillColor=\"@android:color/white\"\n        android:pathData=\"M480,880Q397,880 324,848.5Q251,817 197,763Q143,709 111.5,636Q80,563 80,480Q80,397 111.5,324Q143,251 197,197Q251,143 324,111.5Q397,80 480,80Q563,80 636,111.5Q709,143 763,197Q817,251 848.5,324Q880,397 880,480Q880,563 848.5,636Q817,709 763,763Q709,817 636,848.5Q563,880 480,880ZM440,798L440,720Q407,720 383.5,696.5Q360,673 360,640L360,600L168,408Q165,426 162.5,444Q160,462 160,480Q160,601 239.5,692Q319,783 440,798ZM716,696Q736,674 752,648.5Q768,623 778.5,595.5Q789,568 794.5,539Q800,510 800,480Q800,382 745.5,301Q691,220 600,184L600,200Q600,233 576.5,256.5Q553,280 520,280L440,280L440,360Q440,377 428.5,388.5Q417,400 400,400L320,400L320,480L560,480Q577,480 588.5,491.5Q600,503 600,520L600,640L640,640Q666,640 687,655.5Q708,671 716,696Z\" />\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_outline_qr_code_2_24.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"24dp\"\n    android:height=\"24dp\"\n    android:tint=\"?attr/colorControlNormal\"\n    android:viewportWidth=\"960\"\n    android:viewportHeight=\"960\">\n    <path\n        android:fillColor=\"@android:color/white\"\n        android:pathData=\"M520,840L520,760L600,760L600,840L520,840ZM440,760L440,560L520,560L520,760L440,760ZM760,640L760,480L840,480L840,640L760,640ZM680,480L680,400L760,400L760,480L680,480ZM200,560L200,480L280,480L280,560L200,560ZM120,480L120,400L200,400L200,480L120,480ZM480,200L480,120L560,120L560,200L480,200ZM180,300L300,300L300,180L180,180L180,300ZM120,360L120,120L360,120L360,360L120,360ZM180,780L300,780L300,660L180,660L180,780ZM120,840L120,600L360,600L360,840L120,840ZM660,300L780,300L780,180L660,180L660,300ZM600,360L600,120L840,120L840,360L600,360ZM680,840L680,720L600,720L600,640L760,640L760,760L840,760L840,840L680,840ZM520,560L520,480L680,480L680,560L520,560ZM360,560L360,480L280,480L280,400L520,400L520,480L440,480L440,560L360,560ZM400,360L400,200L480,200L480,280L560,280L560,360L400,360ZM210,270L210,210L270,210L270,270L210,270ZM210,750L210,690L270,690L270,750L210,750ZM690,270L690,210L750,210L750,270L690,270Z\" />\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_outline_refresh_24.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"24dp\"\n    android:height=\"24dp\"\n    android:tint=\"?attr/colorControlNormal\"\n    android:viewportWidth=\"960\"\n    android:viewportHeight=\"960\">\n    <path\n        android:fillColor=\"@android:color/white\"\n        android:pathData=\"M480,800Q346,800 253,707Q160,614 160,480Q160,346 253,253Q346,160 480,160Q549,160 612,188.5Q675,217 720,270L720,160L800,160L800,440L520,440L520,360L688,360Q656,304 600.5,272Q545,240 480,240Q380,240 310,310Q240,380 240,480Q240,580 310,650Q380,720 480,720Q557,720 619,676Q681,632 706,560L790,560Q762,666 676,733Q590,800 480,800Z\" />\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_outline_reset_image_24.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"24dp\"\n    android:height=\"24dp\"\n    android:tint=\"?attr/colorControlNormal\"\n    android:viewportWidth=\"960\"\n    android:viewportHeight=\"960\">\n    <path\n        android:fillColor=\"@android:color/white\"\n        android:pathData=\"M120,360L120,120L200,120L200,254Q250,192 322.5,156Q395,120 480,120Q598,120 690.5,187Q783,254 820,360L733,360Q699,288 632,244Q565,200 480,200Q423,200 372.5,221Q322,242 284,280L360,280L360,360L120,360ZM240,720L720,720L570,520L450,680L360,560L240,720ZM200,880Q167,880 143.5,856.5Q120,833 120,800L120,480L200,480L200,800Q200,800 200,800Q200,800 200,800L760,800Q760,800 760,800Q760,800 760,800L760,480L840,480L840,800Q840,833 816.5,856.5Q793,880 760,880L200,880Z\" />\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_outline_sort_24.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:tint=\"?attr/colorControlNormal\"\n    android:viewportWidth=\"960\"\n    android:viewportHeight=\"960\">\n    <path\n        android:fillColor=\"@android:color/white\"\n        android:pathData=\"M120,720L120,640L360,640L360,720L120,720ZM120,520L120,440L600,440L600,520L120,520ZM120,320L120,240L840,240L840,320L120,320Z\" />\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_outline_star_24.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"24dp\"\n    android:height=\"24dp\"\n    android:tint=\"?attr/colorControlNormal\"\n    android:viewportWidth=\"960\"\n    android:viewportHeight=\"960\">\n    <path\n        android:fillColor=\"@android:color/white\"\n        android:pathData=\"M354,673L480,597L606,674L573,530L684,434L538,421L480,285L422,420L276,433L387,530L354,673ZM233,840L298,559L80,370L368,345L480,80L592,345L880,370L662,559L727,840L480,691L233,840ZM480,490L480,490L480,490L480,490L480,490L480,490L480,490L480,490L480,490L480,490L480,490Z\" />\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_outline_touch_app_24.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"24dp\"\n    android:height=\"24dp\"\n    android:tint=\"?attr/colorControlNormal\"\n    android:viewportWidth=\"960\"\n    android:viewportHeight=\"960\">\n    <path\n        android:fillColor=\"@android:color/white\"\n        android:pathData=\"M419,880Q391,880 366.5,868Q342,856 325,834L107,557L126,537Q146,516 174,512Q202,508 226,523L300,568L300,240Q300,223 311.5,211.5Q323,200 340,200Q357,200 369,211.5Q381,223 381,240L381,712L284,652L388,785Q394,792 402,796Q410,800 419,800L640,800Q673,800 696.5,776.5Q720,753 720,720L720,560Q720,543 708.5,531.5Q697,520 680,520L461,520L461,440L680,440Q730,440 765,475Q800,510 800,560L800,720Q800,786 753,833Q706,880 640,880L419,880ZM167,340Q154,318 147,292.5Q140,267 140,240Q140,157 198.5,98.5Q257,40 340,40Q423,40 481.5,98.5Q540,157 540,240Q540,267 533,292.5Q526,318 513,340L444,300Q452,286 456,271.5Q460,257 460,240Q460,190 425,155Q390,120 340,120Q290,120 255,155Q220,190 220,240Q220,257 224,271.5Q228,286 236,300L167,340ZM502,620L502,620L502,620L502,620Q502,620 502,620Q502,620 502,620L502,620Q502,620 502,620Q502,620 502,620L502,620Q502,620 502,620Q502,620 502,620L502,620L502,620L502,620Z\" />\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_outline_warning_24.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"24dp\"\n    android:height=\"24dp\"\n    android:tint=\"?attr/colorControlNormal\"\n    android:viewportWidth=\"960\"\n    android:viewportHeight=\"960\">\n    <path\n        android:fillColor=\"@android:color/white\"\n        android:pathData=\"M40,840L480,80L920,840L40,840ZM178,760L782,760L480,240L178,760ZM480,720Q497,720 508.5,708.5Q520,697 520,680Q520,663 508.5,651.5Q497,640 480,640Q463,640 451.5,651.5Q440,663 440,680Q440,697 451.5,708.5Q463,720 480,720ZM440,600L520,600L520,400L440,400L440,600ZM480,500L480,500L480,500L480,500Z\" />\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_qrcode_scan.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"24dp\"\n    android:height=\"24dp\"\n    android:tint=\"?attr/colorControlNormal\"\n    android:viewportWidth=\"24\"\n    android:viewportHeight=\"24\">\n    <path\n        android:fillColor=\"#000\"\n        android:pathData=\"M4,4H10V10H4V4M20,4V10H14V4H20M14,15H16V13H14V11H16V13H18V11H20V13H18V15H20V18H18V20H16V18H13V20H11V16H14V15M16,15V18H18V15H16M4,20V14H10V20H4M6,6V8H8V6H6M16,6V8H18V6H16M6,16V18H8V16H6M4,11H6V13H4V11M9,11H13V15H11V13H9V11M11,6H13V10H11V6M2,2V6H0V2A2,2 0 0,1 2,0H6V2H2M22,0A2,2 0 0,1 24,2V6H22V2H18V0H22M2,18V22H6V24H2A2,2 0 0,1 0,22V18H2M22,22V18H24V22A2,2 0 0,1 22,24H18V22H22Z\" />\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_share.xml",
    "content": "<vector android:alpha=\"0.5\" android:height=\"24dp\"\n    android:viewportHeight=\"960\" android:viewportWidth=\"960\"\n    android:width=\"24dp\" xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <path android:fillColor=\"#FF000000\" android:pathData=\"M720,880q-50,0 -85,-35t-35,-85q0,-7 1,-14.5t3,-13.5L322,568q-17,15 -38,23.5t-44,8.5q-50,0 -85,-35t-35,-85q0,-50 35,-85t85,-35q23,0 44,8.5t38,23.5l282,-164q-2,-6 -3,-13.5t-1,-14.5q0,-50 35,-85t85,-35q50,0 85,35t35,85q0,50 -35,85t-85,35q-23,0 -44,-8.5T638,288L356,452q2,6 3,13.5t1,14.5q0,7 -1,14.5t-3,13.5l282,164q17,-15 38,-23.5t44,-8.5q50,0 85,35t35,85q0,50 -35,85t-85,35ZM720,240q17,0 28.5,-11.5T760,200q0,-17 -11.5,-28.5T720,160q-17,0 -28.5,11.5T680,200q0,17 11.5,28.5T720,240ZM240,520q17,0 28.5,-11.5T280,480q0,-17 -11.5,-28.5T240,440q-17,0 -28.5,11.5T200,480q0,17 11.5,28.5T240,520ZM720,800q17,0 28.5,-11.5T760,760q0,-17 -11.5,-28.5T720,720q-17,0 -28.5,11.5T680,760q0,17 11.5,28.5T720,800ZM720,200ZM240,480ZM720,760Z\"/>\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_tag_24.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"24dp\"\n    android:height=\"24dp\"\n    android:viewportWidth=\"960\"\n    android:viewportHeight=\"960\">\n  <path\n      android:pathData=\"m240,800 l40,-160L120,640l20,-80h160l40,-160L180,400l20,-80h160l40,-160h80l-40,160h160l40,-160h80l-40,160h160l-20,80L660,400l-40,160h160l-20,80L600,640l-40,160h-80l40,-160L360,640l-40,160h-80ZM380,560h160l40,-160L420,400l-40,160Z\"\n      android:fillColor=\"#e3e3e3\"/>\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_timeline_24.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"24dp\"\n    android:height=\"24dp\"\n    android:viewportWidth=\"960\"\n    android:viewportHeight=\"960\"\n    android:tint=\"?attr/colorControlNormal\">\n  <path\n      android:fillColor=\"@android:color/white\"\n      android:pathData=\"M120,720Q87,720 63.5,696.5Q40,673 40,640Q40,607 63.5,583.5Q87,560 120,560Q126,560 130.5,560Q135,560 140,562L322,380Q320,375 320,370.5Q320,366 320,360Q320,327 343.5,303.5Q367,280 400,280Q433,280 456.5,303.5Q480,327 480,360Q480,362 478,380L580,482Q585,480 589.5,480Q594,480 600,480Q606,480 610.5,480Q615,480 620,482L762,340Q760,335 760,330.5Q760,326 760,320Q760,287 783.5,263.5Q807,240 840,240Q873,240 896.5,263.5Q920,287 920,320Q920,353 896.5,376.5Q873,400 840,400Q834,400 829.5,400Q825,400 820,398L678,540Q680,545 680,549.5Q680,554 680,560Q680,593 656.5,616.5Q633,640 600,640Q567,640 543.5,616.5Q520,593 520,560Q520,554 520,549.5Q520,545 522,540L420,438Q415,440 410.5,440Q406,440 400,440Q398,440 380,438L198,620Q200,625 200,629.5Q200,634 200,640Q200,673 176.5,696.5Q153,720 120,720Z\"/>\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_unselected.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"891.87dp\"\n    android:height=\"896dp\"\n    android:alpha=\"0.5\"\n    android:tint=\"?attr/colorControlNormal\"\n    android:viewportWidth=\"891.87\"\n    android:viewportHeight=\"896\">\n    <path\n        android:fillColor=\"@android:color/white\"\n        android:pathData=\"M443.86,0 L443.41,0 443.22,0 442.9,0 442.84,0c0,0 -0.38,0 -0.51,0L442.26,0 441.81,0 441.68,0 441.3,0 441.24,0C441.11,0 440.98,0 440.98,0L440.72,0 440.28,0 440.21,0c0,0 -0.26,0 -0.45,0L439.64,0 439.25,0 439.19,0C439,0 438.87,0 438.87,0L438.68,0C438.55,0 438.42,0 438.42,0S438.23,0 438.16,0.06L437.72,0.06 437.65,0.06c0,0 -0.32,0 -0.45,0L437.08,0.06 436.69,0.06 436.63,0.06c-0.19,0 -0.32,0 -0.32,0L436.05,0.06c-0.13,0 -0.26,0 -0.26,0L435.67,0.06 435.16,0.06 435.09,0.06c0,0 -0.26,0 -0.38,0.06L434.52,0.13 434.13,0.13 434.07,0.13c-0.13,0 -0.32,0 -0.32,0L433.49,0.13c-0.13,0 -0.26,0 -0.26,0L433.11,0.13 432.6,0.13 432.47,0.13 432.21,0.13c-0.13,0 -0.19,0 -0.19,0L431.57,0.19 431.51,0.19c-0.19,0 -0.32,0 -0.32,0L430.93,0.19c-0.13,0 -0.26,0 -0.26,0L430.48,0.19 430.1,0.19 429.91,0.19c0,0 -0.19,0.06 -0.32,0.06L429.46,0.26 429.01,0.26 428.95,0.26c-0.19,0 -0.26,0 -0.26,0L428.37,0.26c-0.13,0 -0.26,0 -0.26,0L427.99,0.26 427.54,0.32 427.35,0.32 427.09,0.32 426.9,0.32 426.45,0.32 426.32,0.32 426,0.38 425.81,0.38c-0.13,0 -0.26,0 -0.26,0L425.36,0.38 424.98,0.38 424.85,0.38 424.53,0.38C424.47,0.45 424.47,0.45 424.47,0.45L423.96,0.45 423.83,0.45 423.57,0.45 423.32,0.45 422.87,0.51 422.8,0.51c0,0 -0.26,0 -0.38,0L422.36,0.51 421.97,0.51 421.84,0.51C421.72,0.58 421.59,0.58 421.59,0.58L421.27,0.58 420.95,0.58 420.82,0.58 420.37,0.64 420.18,0.64 419.99,0.64c-0.13,0 -0.19,0 -0.19,0L419.41,0.64 419.22,0.7 418.9,0.7 418.71,0.7 418.52,0.7 418.32,0.7 417.88,0.77 417.68,0.77 417.43,0.77 417.24,0.77 416.85,0.83 416.66,0.83 416.47,0.83 416.21,0.83C416.08,0.9 416.02,0.9 416.02,0.9L415.64,0.9 415.32,0.9 415.12,0.9 414.87,0.96 414.68,0.96 414.36,0.96 414.1,1.02 413.91,1.02 413.72,1.02c-0.13,0 -0.19,0 -0.19,0s-0.32,0 -0.45,0.06c0,0 -0.13,0 -0.26,0L412.63,1.09 412.44,1.09 412.05,1.15 411.86,1.15 411.6,1.15 411.41,1.15 411.22,1.22 411.09,1.22c-0.26,0 -0.38,0 -0.58,0.06 0,0 -0.06,0 -0.19,0L410.07,1.28 409.94,1.28 409.49,1.34 409.36,1.34 409.17,1.34c-0.13,0 -0.19,0 -0.26,0.06L408.53,1.41 408.28,1.41 408.02,1.41c0,0 -0.06,0.06 -0.19,0.06L407.57,1.47 407.44,1.47C407.32,1.47 407.12,1.47 407.12,1.47L406.8,1.47 406.61,1.47 406.42,1.54 405.97,1.54c0,0 -0.13,0 -0.13,0.06L405.52,1.6 405.46,1.6c-0.38,0 -0.7,0.06 -1.02,0.06 0,0 -0.06,0 -0.13,0.06L404.12,1.73 403.99,1.73c-0.26,0 -0.45,0 -0.45,0L403.35,1.79 403.03,1.79 402.96,1.86c-0.26,0 -0.45,0 -0.45,0L402.26,1.86c0,0 -0.19,0.06 -0.32,0.06L401.81,1.92c-0.26,0.06 -0.64,0.06 -0.64,0.06L400.85,2.05c-0.13,0 -0.19,0 -0.19,0L400.47,2.05C400.21,2.11 400.02,2.11 400.02,2.11L399.83,2.11c0,0 -0.26,0 -0.38,0.06L399.38,2.18 398.48,2.24 398.42,2.24 398.04,2.3l0,0L397.33,2.37l0,0L396.95,2.43l0,0c-0.32,0 -0.7,0.06 -0.7,0.06L395.92,2.56c-0.32,0 -0.7,0.06 -1.09,0.06l0,0C394.39,2.69 393.94,2.75 393.43,2.82l0,0C393.11,2.88 392.79,2.88 392.4,2.94l0,0C366.68,5.89 341.65,11.01 317.46,18.05c-16.96,5.06 -26.56,22.78 -21.63,39.68 4.1,14.02 16.9,22.98 30.66,22.98 3.01,0 6.08,-0.38 9.09,-1.34C370.52,69.18 406.93,64 443.86,64c17.66,0 32,-14.34 32,-32S461.52,0 443.86,0L443.86,0 443.86,0zM218.84,65.98c-5.89,0 -11.9,1.6 -17.28,5.06C198.8,72.9 196.05,74.69 193.36,76.48L193.36,76.48c-3.71,2.5 -7.36,5.12 -11.01,7.74l0,0C180.69,85.38 179.09,86.59 177.43,87.81l0,0C177.17,88 176.92,88.19 176.6,88.38l0,0c-0.26,0.19 -0.51,0.45 -0.77,0.64L175.76,89.02C174.36,90.05 172.95,91.14 171.54,92.22l0,0C171.35,92.35 171.16,92.48 170.96,92.61l0,0c-0.64,0.51 -1.28,1.02 -1.79,1.47L169.11,94.08C168.85,94.34 168.6,94.53 168.34,94.66L168.34,94.72C168.08,94.91 167.76,95.1 167.57,95.3L167.44,95.36C167.25,95.55 167,95.74 166.74,95.94L166.68,96C166.48,96.19 166.23,96.38 165.97,96.58L165.97,96.64C165.72,96.83 165.46,97.02 165.2,97.22L165.08,97.28C164.88,97.41 164.63,97.6 164.37,97.79L164.31,97.86C164.05,98.05 163.86,98.24 163.6,98.43c0,0.06 0,0.06 0,0.06C163.35,98.69 163.09,98.88 162.84,99.07c0,0.06 -0.06,0.06 -0.06,0.06C162.52,99.33 162.26,99.52 162.07,99.71 162,99.78 161.94,99.78 161.94,99.78 161.68,99.97 161.49,100.1 161.3,100.29c0,0 -0.06,0.06 -0.06,0.13 0,0 -0.13,0.06 -0.26,0.13L160.92,100.61C160.79,100.74 160.66,100.86 160.53,100.93c0,0 -0.06,0.06 -0.13,0.13 0,0 -0.13,0.06 -0.19,0.19 0,0 -0.06,0 -0.13,0.06 0,0 -0.26,0.19 -0.38,0.32 0,0 -0.06,0 -0.13,0.06L159.44,101.89 159.32,101.95C159.19,102.08 159.06,102.14 158.93,102.21L158.8,102.4 158.68,102.53c0,0 -0.06,0.06 -0.19,0.13 0,0 -0.13,0.13 -0.26,0.26 0,0 -0.13,0.06 -0.13,0.13 0,0 -0.13,0.06 -0.19,0.13 0,0 -0.13,0.06 -0.19,0.13 0,0 -0.19,0.19 -0.26,0.26 0,0 -0.13,0.06 -0.19,0.13L157.08,103.74 156.95,103.87C156.82,104 156.76,104.06 156.63,104.13L156.56,104.26 156.31,104.45 156.18,104.51C156.05,104.64 156.05,104.7 155.92,104.77L155.73,104.96c0,0.06 -0.06,0.06 -0.06,0.06L155.48,105.15C155.35,105.28 155.22,105.34 155.22,105.34 155.09,105.41 155.03,105.47 154.96,105.54c0,0 -0.13,0.06 -0.13,0.13L154.64,105.86C154.58,105.92 154.45,105.98 154.39,106.05c0,0 -0.13,0.06 -0.19,0.13L154,106.37 153.88,106.5C153.75,106.56 153.68,106.62 153.62,106.69L153.43,106.88 153.3,107.01C153.24,107.07 153.17,107.14 153.17,107.14 153.04,107.2 152.98,107.26 152.92,107.33L152.72,107.52C152.6,107.58 152.6,107.65 152.6,107.65 152.47,107.71 152.4,107.78 152.4,107.78 152.28,107.9 152.21,107.9 152.21,107.9 152.08,108.03 152.02,108.03 151.89,108.16L151.76,108.29C151.7,108.35 151.64,108.35 151.64,108.35 151.51,108.48 151.44,108.54 151.44,108.54 151.32,108.61 151.19,108.74 151.19,108.74 151.06,108.86 151.06,108.93 151.06,108.93 150.93,108.99 150.87,109.06 150.8,109.12c0,0 -0.13,0.06 -0.13,0.13 0,0 -0.26,0.13 -0.32,0.26 0,0 -0.13,0.06 -0.13,0.13L150.1,109.76 149.97,109.89C149.84,110.02 149.72,110.08 149.65,110.14L149.59,110.27 149.33,110.4C149.27,110.53 149.2,110.53 149.2,110.53 149.08,110.66 148.95,110.72 148.88,110.78L148.76,110.85C148.69,110.98 148.56,111.04 148.56,111.04L148.44,111.17C148.31,111.3 148.18,111.36 148.05,111.49L147.99,111.55 147.8,111.74C147.73,111.81 147.73,111.81 147.73,111.81 147.6,111.94 147.48,112.06 147.35,112.13c0,0.06 0,0.06 0,0.06C147.22,112.32 147.09,112.38 147.03,112.45L146.96,112.51C146.84,112.64 146.71,112.7 146.58,112.83l0,0.06C146.45,112.96 146.32,113.02 146.26,113.15L146.2,113.22C146.07,113.28 145.94,113.34 145.81,113.47l0,0C145.68,113.6 145.56,113.66 145.49,113.73c0,0 -0.06,0.06 -0.06,0.13C145.36,113.92 145.24,114.05 145.11,114.11l0,0.06C144.98,114.24 144.85,114.37 144.85,114.37 144.72,114.5 144.72,114.5 144.72,114.5 144.6,114.62 144.47,114.69 144.34,114.82c0,0 0,0 0,0.06 0,0 -0.26,0.13 -0.32,0.26L143.96,115.14C143.7,115.39 143.44,115.65 143.25,115.84L143.19,115.9C142.93,116.03 142.74,116.22 142.55,116.48L142.48,116.48C142.29,116.74 142.04,116.93 141.78,117.12c0,0.06 0,0.06 0,0.06 -0.26,0.19 -0.51,0.45 -0.77,0.64l0,0.06c-0.26,0.19 -0.51,0.45 -0.7,0.64L140.24,118.53C140.05,118.72 139.86,118.98 139.6,119.17l0,0c-12.1,11.2 -23.62,23.04 -34.37,35.52 -11.65,13.38 -10.11,33.54 3.2,45.18 6.08,5.25 13.5,7.81 20.93,7.81 9.02,0 17.86,-3.78 24.19,-11.07 24.06,-27.78 51.9,-51.9 82.69,-71.68C251.09,115.39 255.32,95.55 245.78,80.7 239.64,71.17 229.33,65.98 218.84,65.98L218.84,65.98zM65.3,243.33c-12.1,0 -23.74,6.91 -29.12,18.69 -17.41,38.27 -29.7,79.3 -35.84,122.43C-2.16,401.92 9.94,418.11 27.48,420.61 29.01,420.8 30.55,420.93 32.02,420.93c15.68,0 29.38,-11.58 31.68,-27.52C68.82,357.12 79.12,321.86 94.36,288.64c7.36,-16.13 0.32,-35.07 -15.74,-42.43C74.26,244.22 69.72,243.33 65.3,243.33L65.3,243.33zM32.08,475.46c-1.47,0 -3.01,0.13 -4.54,0.38C10,478.34 -2.16,494.53 0.4,512 1.24,517.89 2.2,523.78 3.22,529.54l0,0c0.13,0.32 0.13,0.64 0.26,0.96L3.48,530.56c0,0.32 0.13,0.64 0.13,0.96l0,0.06c0.06,0.19 0.13,0.32 0.13,0.32 0,0.19 0,0.13 0,0.19 0,0.13 0.06,0.32 0.13,0.45 0,0.06 0,0.06 0,0.06 0,0.13 0,0.32 0.06,0.45l0,0.06c0.06,0.13 0.06,0.32 0.06,0.45 0,0.06 0,0.06 0,0.06 0.06,0.13 0.13,0.26 0.13,0.45l0,0.06c0.06,0.32 0.13,0.64 0.19,0.96L4.31,535.04c0,0.19 0,0.32 0.06,0.45l0,0c0,0.19 0.06,0.32 0.06,0.45 0,0.06 0,0.13 0,0.13C4.5,536.19 4.5,536.32 4.56,536.45c0,0.06 0,0.06 0,0.06 0,0.19 0.06,0.32 0.13,0.51l0,0.06c0,0.13 0,0.26 0.06,0.38 0,0 0,0.06 0,0.13 0.06,0.13 0.06,0.26 0.13,0.38l0,0.13c0.06,0.13 0.06,0.26 0.06,0.38 0,0 0,0.06 0,0.13 0.06,0.13 0.13,0.26 0.13,0.38l0,0.13C5.14,539.2 5.14,539.33 5.14,539.33 5.2,539.46 5.2,539.52 5.2,539.58c0,0 0,0.19 0.06,0.32l0,0.13C5.33,540.16 5.33,540.22 5.4,540.35l0,0.19c0.06,0.13 0.06,0.19 0.06,0.32 0,0 0,0.06 0.06,0.13 0,0.13 0.06,0.26 0.06,0.38l0.06,0.19c0,0.06 0,0.19 0,0.19 0.06,0.13 0.06,0.19 0.06,0.26 0,0.13 0.06,0.26 0.13,0.38l0,0.19c0,0 0.06,0.19 0.06,0.26l0.06,0.19c0,0.13 0,0.26 0.06,0.32 0,0 0,0.19 0.06,0.26 0,0 0,0.19 0,0.26L6.16,544c0.06,0.13 0.06,0.19 0.06,0.19 0,0.19 0.06,0.32 0.06,0.38 0,0 0.06,0.19 0.06,0.26l0,0.19C6.42,545.15 6.42,545.22 6.42,545.22c0.06,0.13 0.06,0.26 0.06,0.38 0.06,0.06 0.06,0.19 0.06,0.19C6.61,545.86 6.61,545.92 6.61,545.98c0,0.13 0.06,0.13 0.06,0.26l0.06,0.19c0,0.13 0,0.26 0.06,0.38 0,0.06 0.06,0.13 0.06,0.19 0,0 0,0.13 0,0.26l0.06,0.13c0.06,0.13 0.06,0.19 0.06,0.26 0,0.13 0.06,0.26 0.06,0.26C7.06,548.1 7.06,548.1 7.06,548.16c0,0 0.06,0.19 0.06,0.26l0.06,0.19c0,0.13 0,0.26 0.06,0.38 0,0.06 0.06,0.13 0.06,0.19 0,0.13 0,0.19 0.06,0.26l0,0.19C7.44,549.76 7.44,549.95 7.51,550.08c0,0 0,0.06 0.06,0.13 0,0.13 0,0.19 0,0.26l0.06,0.19C7.7,550.78 7.7,550.98 7.76,551.17l0,0c0.06,0.13 0.06,0.19 0.06,0.32l0.06,0.06c0.06,0.32 0.13,0.64 0.19,0.9 0,0.06 0,0.13 0,0.19 0,0 0.06,0.13 0.13,0.26 0,0 0,0.06 0,0.13 0,0 0.06,0.32 0.13,0.45L8.34,553.6c0.06,0.06 0.06,0.13 0.13,0.26l0,0.13c0,0.13 0.06,0.32 0.13,0.45l0,0.19c0,0.06 0.06,0.13 0.06,0.26l0.06,0.06c0.06,0.38 0.13,0.64 0.19,0.96L8.98,556.03c0.06,0.26 0.13,0.58 0.19,0.9 0,0 0.06,0.06 0.06,0.13 0,0 0,0.13 0.06,0.26l0,0.06c0.06,0.19 0.06,0.38 0.13,0.58l0.06,0.06c0,0.13 0,0.19 0.06,0.32l0,0.06c0.06,0.19 0.06,0.38 0.19,0.58 0,0.06 0,0.06 0,0.06 0,0.13 0,0.19 0.06,0.32l0,0.06c0.06,0.19 0.13,0.45 0.19,0.64l0,0c0,0.13 0,0.19 0.06,0.32l0,0.06C10.07,560.64 10.2,560.96 10.26,561.28l0.06,0.06c0.06,0.32 0.13,0.64 0.19,0.96l0.06,0.06c0,0.13 0,0.19 0.06,0.32l0,0c0.06,0.26 0.13,0.45 0.19,0.64l0,0.06c0,0.13 0,0.19 0.06,0.32l0,0.06c0.06,0.32 0.19,0.64 0.26,0.96 0,0 0.06,0 0.06,0.06 0.06,0.32 0.13,0.64 0.26,0.96 0,0 0,0 0,0.06 0.06,0.32 0.19,0.64 0.26,0.96l0,0c0.13,0.38 0.19,0.7 0.26,1.02l0,0c0.06,0.13 0.13,0.26 0.13,0.26 0,0.13 0,0.13 0,0.13C12.18,568.32 12.24,568.64 12.31,568.96c0,0.06 0,0.06 0,0.06C12.44,569.34 12.56,569.6 12.63,569.92l0,0.06C12.69,570.3 12.82,570.62 12.88,570.94l0.06,0.06c0.06,0.32 0.13,0.64 0.26,0.96l0,0.06C13.33,572.42 13.46,572.8 13.59,573.25l0,0.06c0.13,0.32 0.19,0.64 0.32,0.96l0,0.06c0.06,0.32 0.19,0.64 0.32,0.96l0,0c0.06,0.38 0.13,0.7 0.26,1.02l0,0c0.13,0.38 0.19,0.7 0.32,1.02l0,0c0.06,0.13 0.06,0.26 0.06,0.26l0,0.06c0.13,0.38 0.26,0.7 0.32,1.02 0,0 0.06,0 0.06,0.06 0.06,0.26 0.13,0.64 0.26,0.9l0,0.06c0.13,0.32 0.26,0.64 0.32,0.96l0,0.06c0.13,0.32 0.19,0.64 0.32,0.96 0,0 0,0 0,0.06 0,0 0.06,0.19 0.13,0.32l0,0c0.06,0.32 0.19,0.64 0.26,1.02l0,0c0.13,0.32 0.26,0.64 0.38,0.96 0,0 0,0 0,0.06 0.06,0.32 0.19,0.64 0.26,0.96l0,0c0.13,0.32 0.26,0.64 0.38,1.02l0,0c0.13,0.45 0.26,0.9 0.38,1.34l0,0c0.26,0.64 0.45,1.28 0.7,1.92l0,0c0.32,1.15 0.7,2.18 1.09,3.26l0,0c0.13,0.32 0.26,0.7 0.38,1.02l0,0c0.06,0.32 0.19,0.64 0.32,0.96l0,0c4.74,13.76 10.11,27.14 16.13,40.26 5.38,11.71 16.96,18.56 29.06,18.56 4.42,0 9.02,-0.96 13.31,-2.94 16.06,-7.36 23.1,-26.3 15.74,-42.37 -15.23,-33.34 -25.6,-68.54 -30.78,-104.83C61.46,486.98 47.76,475.46 32.08,475.46L32.08,475.46zM129.56,688.64c-7.36,0 -14.85,2.56 -20.93,7.81 -13.31,11.65 -14.72,31.81 -3.2,45.12l0,0.06c0.13,0.13 0.26,0.26 0.32,0.32l0.06,0.06c0.06,0.13 0.19,0.19 0.26,0.32L106.13,742.4c0.13,0.13 0.19,0.26 0.32,0.38l0,0c0.13,0.13 0.19,0.19 0.32,0.32 0,0.06 0,0.06 0,0.06 0.13,0.13 0.26,0.26 0.32,0.38l0,0c0.13,0.13 0.26,0.19 0.38,0.32 0,0.06 0,0.06 0,0.06 0.19,0.26 0.45,0.51 0.64,0.7l0.06,0.06c0.19,0.26 0.38,0.51 0.64,0.7l0,0.06c0.19,0.26 0.45,0.45 0.64,0.7l0.06,0.06c0.19,0.26 0.38,0.45 0.64,0.7l0,0.06c0.26,0.26 0.45,0.45 0.64,0.7l0.06,0.06c0.26,0.26 0.45,0.45 0.7,0.7 0,0 0,0 0,0.06 0.19,0.19 0.45,0.45 0.64,0.7l0,0c0.26,0.26 0.51,0.51 0.7,0.77l0,0c0.26,0.26 0.45,0.51 0.7,0.7l0,0.06c0.26,0.26 0.45,0.51 0.7,0.7l0,0.06c0.19,0.19 0.45,0.45 0.7,0.7l0,0c0.19,0.26 0.45,0.51 0.64,0.77l0,0c0.26,0.26 0.51,0.51 0.7,0.77l0.06,0c0.19,0.26 0.45,0.51 0.64,0.7l0,0c25.28,27.01 53.89,50.82 85.06,70.91 5.38,3.46 11.39,5.06 17.34,5.06 10.5,0 20.8,-5.18 26.94,-14.66 9.54,-14.85 5.25,-34.69 -9.6,-44.22 -30.78,-19.84 -58.69,-43.9 -82.75,-71.62C147.48,692.35 138.58,688.64 129.56,688.64L129.56,688.64zM326.93,815.36c-13.89,0 -26.62,9.02 -30.72,22.98 -4.93,16.96 4.74,34.69 21.7,39.68 0.45,0.13 0.9,0.26 1.34,0.38l0,0c0,0 0.19,0.06 0.32,0.06l0.06,0c0.32,0.13 0.64,0.19 0.9,0.32l0.13,0 0.19,0.06c0.13,0 0.13,0 0.13,0.06 0,0 0.38,0.06 0.58,0.13l0.13,0.06c0,0 0.19,0 0.26,0.06L321.94,879.17c0.13,0.06 0.26,0.13 0.26,0.13L322.58,879.36l0.19,0.06 0.19,0.06 0.26,0.06 0.26,0.06c0.13,0.06 0.19,0.06 0.19,0.06l0.32,0.06c0.06,0.06 0.13,0.06 0.13,0.06l0.38,0.06c0.06,0.06 0.13,0.06 0.13,0.06 0.13,0.06 0.26,0.06 0.38,0.13l0.13,0 0.26,0.06c0.06,0.06 0.13,0.06 0.13,0.06s0.32,0.06 0.45,0.13l0.13,0.06c0,0 0.19,0 0.32,0.06l0.13,0c0.13,0.06 0.26,0.13 0.26,0.13l0.26,0c0,0 0.26,0.06 0.38,0.13l0.13,0.06 0.38,0.06 0,0c0.13,0.06 0.32,0.06 0.45,0.13L328.34,880.96c0,0 0.26,0.06 0.38,0.13l0.13,0c0,0 0.26,0.13 0.38,0.13l0.06,0c0.13,0.06 0.32,0.06 0.32,0.06l0.19,0.06c0.32,0.13 0.58,0.19 0.9,0.26l0.06,0c0.13,0.06 0.26,0.13 0.45,0.13l0,0c0.32,0.06 0.64,0.19 0.64,0.19l0.32,0.06c0.32,0.06 0.64,0.19 0.96,0.26l0.06,0c25.28,6.46 51.46,10.75 78.27,12.61l0,0.06c0.38,0 0.7,0 1.02,0l0,0.06c0,0 1.02,0.06 1.47,0.06l0,0 1.02,0.06 0.06,0c0,0 1.02,0.06 1.47,0.13l0,0 1.02,0.06 0,0c0.32,0 0.7,0 1.02,0.06l0.06,0c0,0 0.26,0 0.45,0l0,0 1.02,0.06 0.06,0c0.32,0 0.64,0 0.96,0.06l0.06,0c0,0 0.32,0 0.51,0l0,0c0,0 0.32,0.06 0.51,0.06l0,0L422.42,895.55l0.06,0c0.32,0 0.64,0 1.02,0.06l0.06,0 0.96,0 0.06,0.06L424.98,895.68l0,0c0.19,0 0.38,0 0.38,0l0.19,0 0.45,0 0.06,0c0.32,0.06 0.64,0.06 0.64,0.06l0.38,0c0.19,0 0.32,0 0.32,0L427.54,895.74c0.19,0 0.32,0.06 0.32,0.06l0.26,0 0.38,0 0.06,0 1.02,0 0.06,0c0.13,0 0.32,0.06 0.32,0.06L430.1,895.87l0.45,0 0.06,0 0.45,0 0.06,0c0,0 0.38,0 0.51,0l0,0 0.45,0.06 0.13,0c0.13,0 0.32,0 0.32,0l0.13,0 0.51,0 0.06,0 0.45,0 0.06,0c0,0 0.32,0 0.45,0l0.13,0L434.58,895.94l0.13,0c0.13,0.06 0.26,0.06 0.26,0.06l0.19,0 0.45,0 0.13,0c0,0 0.26,0 0.38,0l0.13,0c0,0 0.26,0 0.45,0l0.06,0 0.38,0 0.13,0c0.19,0 0.32,0 0.32,0l0.19,0 0.45,0L438.29,896c0,0 0.26,0 0.38,0l0.06,0c0,0 0.32,0 0.51,0l0.13,0 0.32,0 0.13,0c0.19,0 0.32,0 0.32,0L440.34,896l0.38,0 0.13,0c0,0 0.26,0 0.38,0l0.06,0 0.45,0 0.13,0 0.38,0 0.13,0c0.13,0 0.32,0 0.32,0L442.9,896l0.38,0 0.13,0 0.45,0c17.66,0 32,-14.34 32,-32S461.52,832 443.86,832c-36.74,0 -73.09,-5.18 -107.97,-15.36C332.88,815.74 329.88,815.36 326.93,815.36L326.93,815.36zM669.08,765.76c-5.95,0 -11.97,1.66 -17.34,5.12 -30.78,19.97 -64.26,35.26 -99.33,45.57 -16.96,4.99 -26.62,22.72 -21.63,39.74 4.03,13.95 16.83,22.91 30.66,22.91 3.01,0 6.02,-0.38 9.02,-1.28 41.47,-12.22 80.58,-30.34 116.1,-53.31 14.72,-9.54 19.01,-29.31 9.41,-44.1C689.88,770.94 679.57,765.76 669.08,765.76L669.08,765.76zM822.61,588.29c-12.1,0 -23.74,6.98 -29.12,18.75 -15.17,33.34 -35.07,64.26 -59.14,92.03 -11.52,13.38 -10.05,33.6 3.33,45.18 6.08,5.18 13.5,7.74 20.93,7.74 8.96,0 17.86,-3.78 24.19,-11.07 0.13,-0.13 0.19,-0.26 0.32,-0.38l0,0c0.13,-0.13 0.26,-0.26 0.32,-0.38l0,0c0.13,-0.13 0.26,-0.26 0.32,-0.38l0.06,0c0.06,-0.13 0.19,-0.19 0.32,-0.32 0,-0.06 0,-0.06 0,-0.06 0.13,-0.13 0.19,-0.26 0.32,-0.38l0,0c0.06,-0.13 0.19,-0.19 0.32,-0.32 0,-0.06 0,-0.06 0,-0.06 0.13,-0.13 0.26,-0.26 0.32,-0.38l0.06,-0.06c0.06,-0.06 0.13,-0.19 0.13,-0.19 0.13,-0.13 0.13,-0.13 0.13,-0.13 0.13,-0.13 0.26,-0.26 0.38,-0.38l0,-0.06c0.13,-0.06 0.19,-0.19 0.19,-0.19l0.13,-0.19c0.13,-0.13 0.19,-0.19 0.32,-0.32l0,-0.06c0.13,-0.13 0.19,-0.19 0.26,-0.26l0.13,-0.13c0.06,-0.13 0.13,-0.26 0.13,-0.26 0.13,-0.13 0.13,-0.13 0.13,-0.13 0.13,-0.13 0.19,-0.19 0.26,-0.26l0.13,-0.13c0.06,-0.13 0.13,-0.19 0.19,-0.26l0.19,-0.19c0,-0.06 0.13,-0.13 0.13,-0.19l0.13,-0.19c0.13,-0.06 0.13,-0.13 0.13,-0.13 0.13,-0.13 0.19,-0.19 0.19,-0.19s0.19,-0.26 0.26,-0.32c0,0 0.06,-0.06 0.13,-0.13l0.06,-0.13c0.13,-0.19 0.19,-0.26 0.19,-0.26 0.13,-0.13 0.19,-0.19 0.26,-0.26l0.13,-0.19c0.06,-0.06 0.06,-0.13 0.06,-0.13 0.13,-0.13 0.19,-0.19 0.19,-0.19 0.13,-0.13 0.19,-0.19 0.26,-0.26l0.13,-0.19c0.06,-0.06 0.06,-0.13 0.06,-0.13 0.19,-0.13 0.26,-0.26 0.38,-0.38l0.06,-0.13 0.19,-0.19 0.06,-0.06c0.19,-0.26 0.38,-0.51 0.58,-0.7 0,-0.06 0.06,-0.06 0.06,-0.06 0.19,-0.32 0.38,-0.51 0.58,-0.77l0.06,-0.06c0.19,-0.26 0.45,-0.51 0.64,-0.77l0,0c0.45,-0.58 0.83,-1.09 1.28,-1.54l0,0c10.37,-12.99 20.03,-26.5 28.93,-40.58 0,0 0,0 0,-0.06 0.19,-0.26 0.38,-0.51 0.51,-0.83l0.06,0c0.19,-0.32 0.32,-0.58 0.51,-0.83l0.06,-0.06c0.13,-0.26 0.32,-0.58 0.45,-0.83 0,0 0.06,0 0.06,-0.06 0,0 0.13,-0.19 0.13,-0.26l0.06,-0.06c0.13,-0.13 0.19,-0.32 0.32,-0.45l0,-0.06c0.13,-0.13 0.13,-0.19 0.19,-0.32 0,0 0.06,0 0.06,-0.06 0.06,-0.13 0.19,-0.26 0.26,-0.45 0,-0.06 0.06,-0.06 0.06,-0.06 0.06,-0.13 0.13,-0.19 0.19,-0.26l0.06,-0.13c0.06,-0.13 0.13,-0.26 0.19,-0.38l0.13,-0.13c0,-0.13 0.06,-0.19 0.13,-0.26 0,0 0.06,-0.06 0.06,-0.13 0.06,-0.13 0.19,-0.26 0.19,-0.26l0.13,-0.26c0,0 0.13,-0.13 0.13,-0.19l0.06,-0.13c0.13,-0.19 0.19,-0.26 0.19,-0.38l0.19,-0.19c0,-0.06 0.06,-0.13 0.06,-0.19l0.13,-0.13c0.06,-0.19 0.13,-0.26 0.13,-0.26 0.13,-0.13 0.13,-0.26 0.13,-0.26 0.13,-0.13 0.13,-0.19 0.19,-0.26l0.13,-0.19c0,-0.06 0.06,-0.13 0.06,-0.19 0,0 0.13,-0.19 0.26,-0.32l0.06,-0.13c0.06,-0.13 0.06,-0.19 0.13,-0.26l0.06,-0.13c0.13,-0.13 0.19,-0.26 0.26,-0.38 0,0 0.06,-0.06 0.06,-0.13 0,0 0.13,-0.19 0.19,-0.26l0.06,-0.13c0.06,-0.13 0.13,-0.26 0.19,-0.38 0,0 0.06,-0.06 0.06,-0.13 0,0 0.13,-0.13 0.19,-0.26 0,0 0,-0.06 0.06,-0.13 0.06,-0.13 0.13,-0.26 0.19,-0.38l0.06,-0.06c0.06,-0.13 0.13,-0.19 0.19,-0.32l0.06,-0.13c0.06,-0.13 0.19,-0.26 0.19,-0.38 0,0 0.06,0 0.06,-0.06 0,0 0.13,-0.19 0.19,-0.32l0.06,-0.06c0.06,-0.13 0.19,-0.26 0.26,-0.45l0,0c0.06,-0.13 0.19,-0.26 0.19,-0.38l0.06,-0.06c0.19,-0.26 0.32,-0.58 0.51,-0.83l0,-0.06c0.19,-0.26 0.32,-0.58 0.51,-0.83l0,-0.06c0.19,-0.26 0.32,-0.58 0.51,-0.83l0,0c0.19,-0.32 0.32,-0.58 0.51,-0.9l0,0c0.19,-0.32 0.32,-0.58 0.51,-0.9l0,0c6.66,-11.65 12.67,-23.55 18.3,-35.78 7.3,-16.13 0.26,-35.07 -15.87,-42.37C831.51,589.25 827.03,588.29 822.61,588.29L822.61,588.29zM855.57,356.1c-1.47,0 -3.01,0.13 -4.54,0.32 -17.47,2.56 -29.7,18.75 -27.14,36.22C826.52,410.88 827.86,429.5 827.86,448c0,18.11 -1.28,36.35 -3.84,54.27 -2.43,17.47 9.73,33.6 27.26,36.1 1.47,0.19 3.01,0.32 4.48,0.32 15.62,0 29.31,-11.52 31.62,-27.39 0.45,-3.39 0.96,-6.72 1.34,-10.05L888.72,501.18c0,-0.13 0,-0.26 0.06,-0.32L888.79,500.8c0,-0.19 0.06,-0.45 0.06,-0.64L888.85,500.1c0,-0.13 0,-0.19 0,-0.19 0,-0.13 0.06,-0.19 0.06,-0.26 0,0 0,-0.19 0,-0.26C888.98,499.33 888.98,499.2 888.98,499.07L888.98,498.88c0,-0.06 0,-0.13 0.06,-0.26 0,-0.06 0,-0.13 0,-0.19 0,0 0.06,-0.19 0.06,-0.32L889.11,497.98c0,-0.13 0,-0.26 0,-0.38 0,-0.06 0.06,-0.13 0.06,-0.19L889.17,497.22c0,0 0.06,-0.13 0.06,-0.19 0,-0.13 0,-0.26 0,-0.38 0,0 0,-0.06 0,-0.13 0.06,-0.13 0.06,-0.26 0.06,-0.38 0,0 0,-0.06 0,-0.13 0.06,-0.13 0.06,-0.26 0.06,-0.38l0,0c0,-0.19 0,-0.38 0.06,-0.51L889.43,495.04c0,-0.13 0,-0.26 0.06,-0.45l0,0c0,-0.32 0.06,-0.64 0.06,-1.02l0,0c1.02,-9.73 1.66,-19.65 2.05,-29.63l0,0c0,-0.32 0,-0.64 0,-1.02l0,0c0,-0.51 0,-1.02 0.06,-1.41L891.67,461.5c0,-0.32 0,-0.64 0,-1.02l0,0c0,-0.13 0.06,-0.32 0.06,-0.45L891.73,460.03c0,-0.32 0,-0.64 0,-0.96 0,-0.06 0,-0.06 0,-0.06 0,-0.32 0,-0.64 0,-0.96 0,-0.06 0,-0.06 0,-0.06 0,-0.13 0,-0.32 0,-0.45L891.73,457.47c0,-0.32 0,-0.64 0.06,-0.96L891.8,456.51c0,-0.13 0,-0.32 0,-0.45L891.8,456c0,-0.13 0,-0.32 0,-0.45L891.8,455.49c0,-0.13 0,-0.32 0,-0.45L891.8,454.98c0,-0.32 0,-0.64 0,-0.96l0.06,-0.13c0,-0.13 0,-0.26 0,-0.38L891.86,453.5c0,-0.13 0,-0.32 0,-0.51l0,0c0,-0.19 0,-0.32 0,-0.45L891.86,452.42c0,-0.13 0,-0.26 0,-0.38L891.86,451.97c0,0 0,-0.32 0,-0.45 0,0 0,-0.06 0,-0.13 0,-0.13 0,-0.26 0,-0.38L891.86,451.01c0,-0.19 0,-0.32 0,-0.51 0,0 0,0 0,-0.06 0,-0.13 0,-0.26 0,-0.38 0,0 0,-0.06 0,-0.13 0,-0.13 0,-0.26 0,-0.38L891.86,449.47c0,-0.19 0,-0.32 0,-0.32 0,-0.19 0,-0.26 0,-0.26 0,-0.13 0,-0.26 0,-0.38L891.86,448.45c0,-0.13 0,-0.32 0,-0.45l0,0c0,-0.13 0,-0.32 0,-0.45 0,-0.06 0,-0.13 0,-0.13 0,-0.13 0,-0.26 0,-0.38 0,-0.06 0,-0.06 0,-0.06 0,-0.19 0,-0.38 0,-0.51L891.86,446.46c0,-0.19 0,-0.32 0,-0.38L891.86,445.89c0,-0.13 0,-0.26 0,-0.45L891.86,445.38c0,-0.13 0,-0.26 0,-0.38 0,-0.06 0,-0.13 0,-0.13 0,-0.13 0,-0.26 0,-0.38 0,-0.06 0,-0.06 0,-0.06 0,-0.19 0,-0.32 0,-0.51L891.86,443.9c0,-0.19 0,-0.32 0,-0.45L891.86,443.39c0,-0.19 0,-0.32 0,-0.51L891.86,442.82c0,-0.13 0,-0.26 0,-0.38 0,-0.06 0,-0.06 0,-0.06 0,-0.19 -0.06,-0.38 -0.06,-0.51l0,0c0,-0.19 0,-0.32 0,-0.51L891.8,441.28c0,-0.13 0,-0.26 0,-0.38 0,0 0,0 0,-0.06 0,-0.19 0,-0.32 0,-0.45 0,-0.06 0,-0.06 0,-0.06 0,-0.19 0,-0.32 0,-0.45L891.8,439.74c0,-0.32 0,-0.64 -0.06,-0.96L891.73,438.72c0,-0.13 0,-0.32 0,-0.45 0,0 0,0 0,-0.06 0,-0.13 0,-0.32 0,-0.45 0,-0.06 0,-0.06 0,-0.06 0,-0.19 0,-0.32 0,-0.45L891.73,437.25c0,-0.19 0,-0.32 0,-0.51l0,0c0,-0.19 0,-0.32 0,-0.51L891.73,436.16c0,-0.32 -0.06,-0.64 -0.06,-0.96L891.67,435.2c0,-0.13 0,-0.32 0,-0.45 0,0 0,0 0,-0.06 0,-0.13 0,-0.32 0,-0.51l0,0c-0.06,-0.19 -0.06,-0.32 -0.06,-0.45L891.6,433.66c0,-0.32 0,-0.7 0,-1.02L891.6,432.64c0,-0.32 0,-0.64 -0.06,-0.96L891.54,431.62c0,-0.13 0,-0.32 0,-0.45L891.54,431.1c0,-0.32 0,-0.64 -0.06,-1.02l0,0c0,-0.32 0,-0.7 0,-1.02l0,0c0,-0.19 0,-0.38 0,-0.51l0,0c-0.06,-0.38 -0.06,-0.7 -0.06,-1.02L891.41,427.58c-0.45,-9.28 -1.15,-18.5 -2.11,-27.65l0,0c-0.06,-0.51 -0.06,-1.02 -0.13,-1.47l-0.06,0c0,-0.32 0,-0.64 -0.06,-0.96 0,-0.06 0,-0.06 0,-0.06 -0.06,-0.32 -0.06,-0.7 -0.13,-0.96 0,-0.06 0,-0.06 0,-0.06 0,-0.19 -0.06,-0.32 -0.06,-0.45L888.85,395.97c0,-0.19 0,-0.32 -0.06,-0.45 0,0 0,-0.06 0,-0.13 0,-0.13 0,-0.26 -0.06,-0.38 0,0 0,-0.06 0,-0.13 0,-0.13 0,-0.26 0,-0.38l-0.06,-0.06c0,-0.13 0,-0.26 -0.06,-0.45 0,0 0,-0.06 0,-0.13 0,-0.13 0,-0.19 0,-0.32 0,-0.06 0,-0.06 0,-0.06 -0.06,-0.19 -0.06,-0.38 -0.13,-0.51L888.47,392.9c0,-0.13 0,-0.19 0,-0.32l-0.06,-0.19c0,-0.06 0,-0.19 0,-0.19C888.34,392 888.34,391.94 888.34,391.81c0,0 0,-0.13 0,-0.26l-0.06,-0.19c0,-0.06 0,-0.13 0,-0.26 0,-0.06 -0.06,-0.13 -0.06,-0.19 0,-0.13 0,-0.26 0,-0.26 0,-0.19 -0.06,-0.26 -0.06,-0.38 0,-0.06 0,-0.06 0,-0.06 0,-0.19 -0.06,-0.26 -0.06,-0.38L888.08,389.82c0,-0.19 -0.06,-0.38 -0.06,-0.58L888.02,389.18c-0.06,-0.13 -0.06,-0.26 -0.06,-0.32L887.96,388.8c-0.06,-0.38 -0.13,-0.7 -0.13,-1.02L887.83,387.78c-0.19,-1.34 -0.38,-2.82 -0.64,-4.22C884.88,367.55 871.19,356.1 855.57,356.1L855.57,356.1zM757.78,143.04c-7.42,0 -14.91,2.56 -20.93,7.87 -13.38,11.58 -14.72,31.81 -3.2,45.12 24.13,27.78 44.03,58.62 59.39,91.9 5.38,11.78 16.96,18.62 29.06,18.62 4.48,0 9.02,-0.96 13.38,-2.94 16,-7.3 23.04,-26.24 15.74,-42.3 -2.56,-5.63 -5.25,-11.2 -8.06,-16.7l0,0c-0.19,-0.26 -0.32,-0.58 -0.45,-0.9l-0.06,0c-0.06,-0.13 -0.06,-0.19 -0.13,-0.32l0,0c-0.13,-0.19 -0.19,-0.38 -0.32,-0.58L842.2,242.82c0,0 -0.13,-0.19 -0.13,-0.26l-0.06,-0.06c-0.06,-0.19 -0.19,-0.38 -0.26,-0.51L841.68,241.92c0,-0.13 -0.06,-0.19 -0.13,-0.26 0,0 0,-0.06 -0.06,-0.13 -0.06,-0.19 -0.13,-0.32 -0.19,-0.45 0,0 -0.06,-0.06 -0.06,-0.13 0,0 -0.06,-0.13 -0.13,-0.26 0,0 -0.06,-0.06 -0.06,-0.13 -0.06,-0.13 -0.13,-0.26 -0.26,-0.38l-0.06,-0.13c-0.06,-0.13 -0.06,-0.19 -0.13,-0.26 0,0 -0.06,-0.06 -0.06,-0.13 -0.06,-0.13 -0.13,-0.26 -0.19,-0.38L840.34,239.17c-0.06,-0.06 -0.13,-0.13 -0.13,-0.19l-0.13,-0.19c0,-0.06 -0.06,-0.13 -0.06,-0.13 -0.06,-0.19 -0.13,-0.32 -0.19,-0.38L839.7,238.14c0,-0.06 -0.06,-0.13 -0.06,-0.19l-0.06,-0.13c-0.13,-0.19 -0.19,-0.32 -0.26,-0.38l-0.06,-0.19c-0.06,-0.06 -0.06,-0.13 -0.13,-0.26L839.06,236.86c-0.06,-0.13 -0.13,-0.26 -0.19,-0.38 -0.06,-0.06 -0.06,-0.06 -0.06,-0.06 -0.06,-0.19 -0.13,-0.26 -0.13,-0.26 -0.06,-0.13 -0.13,-0.19 -0.13,-0.19 -0.06,-0.13 -0.13,-0.26 -0.19,-0.38L838.36,235.52c-0.06,-0.13 -0.13,-0.19 -0.13,-0.26l-0.13,-0.19c0,-0.06 -0.13,-0.19 -0.13,-0.32l-0.13,-0.13c0,-0.13 -0.06,-0.19 -0.13,-0.32l-0.06,-0.13c-0.06,-0.13 -0.13,-0.26 -0.19,-0.32 0,0 -0.06,-0.06 -0.06,-0.13 -0.06,-0.13 -0.13,-0.19 -0.19,-0.32L837.14,233.34c-0.06,-0.13 -0.13,-0.26 -0.19,-0.38l-0.06,-0.06c-0.06,-0.13 -0.13,-0.19 -0.19,-0.32 0,0 0,-0.06 -0.06,-0.13 -0.06,-0.13 -0.13,-0.26 -0.19,-0.38l0,0c-0.06,-0.13 -0.13,-0.26 -0.26,-0.38 0,0 0,-0.06 0,-0.13 -0.13,-0.13 -0.13,-0.26 -0.26,-0.38l0,0c-0.06,-0.13 -0.13,-0.26 -0.19,-0.38 0,0 -0.06,-0.06 -0.06,-0.13 -0.13,-0.26 -0.32,-0.51 -0.45,-0.83L835.22,229.82c-0.13,-0.26 -0.26,-0.51 -0.45,-0.83l-0.06,-0.06c-0.13,-0.26 -0.26,-0.51 -0.45,-0.83l0,0c-0.19,-0.32 -0.32,-0.58 -0.51,-0.9l0,0c-0.19,-0.32 -0.32,-0.58 -0.51,-0.9l0,0c-0.19,-0.32 -0.32,-0.58 -0.51,-0.9l0,0c-12.42,-21.76 -26.69,-42.3 -42.43,-61.57l0,0c-0.26,-0.26 -0.45,-0.51 -0.64,-0.77l-0.06,0c-0.19,-0.26 -0.45,-0.51 -0.64,-0.77L788.95,162.37c-0.13,-0.13 -0.19,-0.26 -0.32,-0.38l0,0c-0.13,-0.06 -0.19,-0.19 -0.32,-0.32l-0.06,-0.06c-0.06,-0.13 -0.13,-0.26 -0.26,-0.32L787.99,161.28c-0.13,-0.13 -0.19,-0.26 -0.32,-0.38l-0.06,-0.06c-0.06,-0.06 -0.13,-0.19 -0.13,-0.19 -0.13,-0.13 -0.13,-0.13 -0.13,-0.13 -0.13,-0.13 -0.26,-0.26 -0.32,-0.38l-0.06,-0.06c-0.13,-0.06 -0.13,-0.19 -0.13,-0.19 -0.13,-0.13 -0.19,-0.13 -0.19,-0.13 -0.06,-0.13 -0.19,-0.26 -0.26,-0.38 0,0 -0.06,-0.06 -0.13,-0.13l-0.19,-0.19c0,-0.06 -0.06,-0.06 -0.06,-0.06 -0.13,-0.19 -0.19,-0.26 -0.32,-0.38l-0.06,-0.13c0,0 -0.13,-0.13 -0.19,-0.19l-0.13,-0.19c-0.06,-0.06 -0.13,-0.13 -0.19,-0.19l-0.19,-0.19c-0.06,-0.06 -0.13,-0.13 -0.13,-0.19l-0.13,-0.19c-0.06,-0.06 -0.13,-0.06 -0.13,-0.06 -0.13,-0.19 -0.19,-0.26 -0.32,-0.38 0,0 -0.06,-0.06 -0.06,-0.13l-0.19,-0.19c-0.06,-0.06 -0.06,-0.06 -0.06,-0.06 -0.13,-0.19 -0.26,-0.32 -0.38,-0.45L783.51,156.03c0,0 -0.13,-0.13 -0.26,-0.19L783.25,155.84c-0.13,-0.19 -0.26,-0.32 -0.38,-0.45l-0.06,-0.06c-0.06,-0.06 -0.13,-0.19 -0.13,-0.19l-0.06,-0.06c-0.32,-0.38 -0.64,-0.7 -0.96,-1.09C775.57,146.75 766.68,143.04 757.78,143.04L757.78,143.04zM560.34,16.51c-13.82,0 -26.62,9.15 -30.66,23.04 -4.93,17.02 4.8,34.75 21.82,39.68 35.07,10.24 68.48,25.41 99.39,45.25 5.38,3.46 11.39,5.06 17.28,5.06 10.56,0 20.86,-5.18 27.01,-14.66 9.47,-14.85 5.25,-34.62 -9.6,-44.16 -1.15,-0.77 -2.37,-1.47 -3.58,-2.3l0,0c-0.32,-0.13 -0.58,-0.32 -0.83,-0.51l-0.06,0c-0.26,-0.19 -0.58,-0.38 -0.83,-0.51l-0.06,-0.06c-0.26,-0.19 -0.58,-0.32 -0.83,-0.51l-0.06,-0.06L679.06,66.69l-0.06,-0.06c-0.19,-0.13 -0.32,-0.26 -0.51,-0.32l-0.06,-0.06c-0.13,-0.06 -0.19,-0.13 -0.19,-0.13 -0.13,-0.06 -0.19,-0.06 -0.19,-0.06 -0.13,-0.13 -0.26,-0.19 -0.38,-0.26 0,0 -0.13,-0.06 -0.13,-0.13 0,0 -0.13,-0.06 -0.26,-0.13l-0.13,-0.06c-0.13,-0.06 -0.26,-0.13 -0.38,-0.19L676.69,65.28c-0.13,-0.13 -0.13,-0.13 -0.13,-0.13 -0.13,-0.13 -0.26,-0.13 -0.26,-0.13l-0.19,-0.13c0,0 -0.19,-0.13 -0.32,-0.26l-0.19,-0.06c-0.06,-0.06 -0.13,-0.06 -0.13,-0.06 -0.13,-0.13 -0.19,-0.13 -0.19,-0.13 -0.13,-0.13 -0.26,-0.19 -0.38,-0.26l-0.13,-0.06C674.71,64 674.64,63.94 674.58,63.87l-0.13,0c-0.13,-0.13 -0.26,-0.19 -0.38,-0.26L673.94,63.55c-0.06,-0.06 -0.13,-0.13 -0.26,-0.19l-0.13,-0.06c-0.13,-0.06 -0.26,-0.13 -0.38,-0.19l-0.06,-0.06c-0.13,-0.06 -0.19,-0.13 -0.32,-0.19l-0.13,-0.06c-0.13,-0.06 -0.26,-0.19 -0.26,-0.19l-0.19,-0.06c-0.06,-0.06 -0.19,-0.13 -0.19,-0.13 -0.13,-0.13 -0.19,-0.13 -0.19,-0.13 -0.32,-0.19 -0.58,-0.32 -0.83,-0.45 0,-0.06 0,-0.06 0,-0.06 -0.32,-0.19 -0.58,-0.32 -0.83,-0.51l-0.06,0c-0.19,-0.13 -0.32,-0.19 -0.45,-0.26l0,0c0,0 -0.26,-0.19 -0.38,-0.26l-0.06,0c0,0 -0.26,-0.19 -0.38,-0.26l0,0c-0.19,-0.06 -0.32,-0.19 -0.45,-0.26l-0.06,0c0,0 -0.26,-0.19 -0.38,-0.26l0,0c0,0 -0.32,-0.19 -0.45,-0.26l0,0c-0.45,-0.26 -0.9,-0.51 -1.34,-0.77l0,0c-0.26,-0.19 -0.58,-0.32 -0.9,-0.51l0,0c-30.02,-17.15 -62.27,-30.85 -96.13,-40.77C566.36,16.96 563.35,16.51 560.34,16.51L560.34,16.51z\" />\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/item_selected.xml",
    "content": "<vector android:height=\"60dp\" android:tint=\"#F7F7F7\"\n    android:viewportHeight=\"24.0\" android:viewportWidth=\"24.0\"\n    android:width=\"60dp\" xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <group\n        android:scaleX=\"0.5\"\n        android:scaleY=\"0.5\"\n        android:pivotX=\"12\"\n        android:pivotY=\"12\"\n        >\n        <path android:fillColor=\"#FF000000\" android:pathData=\"M9,16.17L4.83,12l-1.42,1.41L9,19 21,7l-1.41,-1.41z\"/>\n    </group>\n</vector>"
  },
  {
    "path": "app/src/main/res/drawable/progress_horizontal.xml",
    "content": "<layer-list xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <item android:id=\"@android:id/progress\">\n        <scale android:scaleWidth=\"100%\">\n            <shape>\n                <solid android:color=\"?attr/colorProgressbar\"/>\n                <corners\n                    android:topLeftRadius=\"0dp\"\n                    android:topRightRadius=\"2dp\"\n                    android:bottomLeftRadius=\"0dp\"\n                    android:bottomRightRadius=\"2dp\" />\n            </shape>\n        </scale>\n    </item>\n</layer-list>"
  },
  {
    "path": "app/src/main/res/drawable/rounded_popup.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<shape xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <solid android:color=\"?attr/colorSurfaceContainerHigh\"/>\n    <corners android:radius=\"4dp\"/>\n    <padding android:left=\"4dp\" android:top=\"4dp\" android:right=\"4dp\" android:bottom=\"4dp\"/>\n</shape>\n"
  },
  {
    "path": "app/src/main/res/layout/activity_about.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<androidx.coordinatorlayout.widget.CoordinatorLayout 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:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\"\n    android:fitsSystemWindows=\"true\"\n    tools:context=\"com.beemdevelopment.aegis.ui.AboutActivity\">\n    <com.google.android.material.appbar.AppBarLayout\n        android:id=\"@+id/app_bar_layout\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:fitsSystemWindows=\"true\">\n        <com.google.android.material.appbar.MaterialToolbar\n            android:id=\"@+id/toolbar\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"?attr/actionBarSize\" />\n    </com.google.android.material.appbar.AppBarLayout>\n    <ScrollView\n        android:id=\"@+id/about_scroll_view\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:clipToPadding=\"false\"\n        android:isScrollContainer=\"true\"\n        app:layout_behavior=\"@string/appbar_scrolling_view_behavior\">\n        <include layout=\"@layout/content_about\" />\n    </ScrollView>\n</androidx.coordinatorlayout.widget.CoordinatorLayout>\n"
  },
  {
    "path": "app/src/main/res/layout/activity_assign_icons.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<androidx.coordinatorlayout.widget.CoordinatorLayout 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:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\"\n    android:fitsSystemWindows=\"true\"\n    tools:context=\"com.beemdevelopment.aegis.ui.AssignIconsActivity\">\n\n    <com.google.android.material.appbar.AppBarLayout\n        android:id=\"@+id/app_bar_layout\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:fitsSystemWindows=\"true\">\n        <androidx.appcompat.widget.Toolbar\n            android:id=\"@+id/toolbar\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"?attr/actionBarSize\" />\n    </com.google.android.material.appbar.AppBarLayout>\n\n    <androidx.recyclerview.widget.RecyclerView\n        android:id=\"@+id/list_assign_icons\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:scrollbars=\"vertical\"\n        app:layout_behavior=\"@string/appbar_scrolling_view_behavior\"/>\n</androidx.coordinatorlayout.widget.CoordinatorLayout>"
  },
  {
    "path": "app/src/main/res/layout/activity_auth.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<ScrollView xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:tools=\"http://schemas.android.com/tools\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\"\n    android:fillViewport=\"true\"\n    android:fitsSystemWindows=\"true\"\n    tools:context=\"com.beemdevelopment.aegis.ui.AuthActivity\">\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=\"0dp\"\n            android:layout_weight=\"1\"\n            android:paddingHorizontal=\"48dp\"\n            android:paddingTop=\"48dp\"\n            android:orientation=\"vertical\">\n\n            <ImageView\n                android:layout_width=\"100dp\"\n                android:layout_height=\"100dp\"\n                android:layout_marginBottom=\"20dp\"\n                app:srcCompat=\"@drawable/ic_aegis_iconx\" />\n\n            <TextView\n                android:layout_width=\"match_parent\"\n                android:layout_height=\"wrap_content\"\n                android:fontFamily=\"sans-serif-light\"\n                android:singleLine=\"false\"\n                android:text=\"@string/authentication_multiline\"\n                android:textStyle=\"bold\"\n                android:textSize=\"32sp\"/>\n\n            <LinearLayout\n                android:layout_width=\"match_parent\"\n                android:layout_height=\"match_parent\"\n                android:layout_marginTop=\"12dp\"\n                android:orientation=\"vertical\">\n\n                <com.google.android.material.textfield.TextInputLayout\n                    android:id=\"@+id/layout_standard\"\n                    android:layout_width=\"match_parent\"\n                    android:layout_height=\"wrap_content\"\n                    android:paddingBottom=\"12dp\"\n                    app:hintEnabled=\"false\"\n                    app:passwordToggleEnabled=\"true\"\n                    app:passwordToggleTint=\"?attr/colorOnSurface\"\n                    android:visibility=\"visible\">\n\n                    <com.google.android.material.textfield.TextInputEditText\n                        android:id=\"@+id/text_password\"\n                        android:layout_width=\"match_parent\"\n                        android:layout_height=\"wrap_content\"\n                        android:hint=\"@string/password\"\n                        android:inputType=\"textPassword\"/>\n                </com.google.android.material.textfield.TextInputLayout>\n\n                <com.google.android.material.textfield.TextInputLayout\n                    android:id=\"@+id/layout_no_autofill\"\n                    android:layout_width=\"match_parent\"\n                    android:layout_height=\"wrap_content\"\n                    android:paddingBottom=\"12dp\"\n                    app:hintEnabled=\"false\"\n                    app:passwordToggleEnabled=\"true\"\n                    app:passwordToggleTint=\"?attr/colorOnSurface\"\n                    android:visibility=\"gone\">\n\n                    <com.beemdevelopment.aegis.ui.components.NoAutofillEditText\n                        android:id=\"@+id/text_password_no_autofill\"\n                        android:layout_width=\"match_parent\"\n                        android:layout_height=\"wrap_content\"\n                        android:hint=\"@string/password\"\n                        android:inputType=\"numberPassword\"/>\n                </com.google.android.material.textfield.TextInputLayout>\n\n                <LinearLayout\n                    android:layout_width=\"match_parent\"\n                    android:layout_height=\"wrap_content\"\n                    android:orientation=\"horizontal\"\n                    android:paddingBottom=\"25dp\">\n\n                    <Button\n                        android:id=\"@+id/button_decrypt\"\n                        android:layout_width=\"match_parent\"\n                        android:layout_height=\"wrap_content\"\n                        android:minWidth=\"125dp\"\n                        android:text=\"@string/unlock\" />\n\n                </LinearLayout>\n\n                <TextView\n                    android:id=\"@+id/button_biometrics\"\n                    android:layout_width=\"wrap_content\"\n                    android:layout_height=\"wrap_content\"\n                    android:layout_gravity=\"center\"\n                    android:minWidth=\"125dp\"\n                    android:text=\"@string/auth_use_biometrics\"\n                    android:visibility=\"gone\" />\n\n                <LinearLayout\n                    android:id=\"@+id/box_biometric_info\"\n                    android:layout_width=\"match_parent\"\n                    android:layout_height=\"wrap_content\"\n                    android:orientation=\"horizontal\"\n                    android:visibility=\"gone\">\n                    <TextView\n                        android:layout_width=\"match_parent\"\n                        android:layout_height=\"wrap_content\"\n                        android:gravity=\"center\"\n                        android:text=\"@string/invalidated_biometrics\" />\n                </LinearLayout>\n            </LinearLayout>\n\n        </LinearLayout>\n\n        <TextView\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:layout_gravity=\"bottom|center\"\n            android:text=\"@string/app_name_full\"\n            android:textSize=\"15sp\"\n            android:textAllCaps=\"true\"\n            android:textStyle=\"bold\"\n            android:textColor=\"?attr/colorOnSurfaceDim\"\n            android:paddingVertical=\"50dp\" />\n    </LinearLayout>\n</ScrollView>\n"
  },
  {
    "path": "app/src/main/res/layout/activity_edit_entry.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<androidx.coordinatorlayout.widget.CoordinatorLayout\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    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\"\n    android:fitsSystemWindows=\"true\"\n    tools:context=\"com.beemdevelopment.aegis.ui.EditEntryActivity\">\n    <com.google.android.material.appbar.AppBarLayout\n        android:id=\"@+id/app_bar_layout\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:fitsSystemWindows=\"true\">\n        <com.google.android.material.appbar.MaterialToolbar\n            android:id=\"@+id/toolbar\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"?attr/actionBarSize\" />\n    </com.google.android.material.appbar.AppBarLayout>\n    <FrameLayout\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\"\n        android:layout_marginTop=\"?attr/actionBarSize\">\n        <androidx.core.widget.NestedScrollView\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"match_parent\"\n            android:clipToPadding=\"false\"\n            android:isScrollContainer=\"true\"\n            app:layout_behavior=\"@string/appbar_scrolling_view_behavior\">\n            <LinearLayout\n                android:layout_width=\"match_parent\"\n                android:layout_height=\"wrap_content\"\n                android:orientation=\"vertical\"\n                android:descendantFocusability=\"beforeDescendants\"\n                android:focusableInTouchMode=\"true\">\n\n                <RelativeLayout\n                    android:layout_width=\"match_parent\"\n                    android:layout_height=\"250dp\">\n\n                    <com.google.android.material.imageview.ShapeableImageView\n                        android:id=\"@+id/profile_drawable\"\n                        android:layout_width=\"100dp\"\n                        android:layout_height=\"100dp\"\n                        android:layout_centerHorizontal=\"true\"\n                        android:layout_centerVertical=\"true\"\n                        app:shapeAppearanceOverlay=\"@style/ShapeAppearanceOverlay.Aegis.ImageView.Circle\" />\n\n                    <com.avito.android.krop.KropView\n                        android:id=\"@+id/krop_view\"\n                        android:layout_width=\"wrap_content\"\n                        android:layout_height=\"wrap_content\"\n                        android:layout_centerInParent=\"true\"\n                        android:visibility=\"invisible\"\n                        app:krop_aspectX=\"1\"\n                        app:krop_aspectY=\"1\"\n                        app:krop_offset=\"70dp\"\n                        app:krop_overlayColor=\"#aadddddd\">\n\n                        <ImageView\n                            android:id=\"@+id/iv_saveImage\"\n                            android:layout_width=\"wrap_content\"\n                            android:layout_height=\"wrap_content\"\n                            android:layout_gravity=\"bottom|end\"\n                            android:layout_margin=\"15dp\"\n                            android:src=\"@drawable/ic_outline_check_24\"\n                            app:tint=\"?attr/colorOnSurface\" />\n\n                    </com.avito.android.krop.KropView>\n\n                </RelativeLayout>\n                <com.google.android.material.divider.MaterialDivider\n                    android:layout_width=\"match_parent\"\n                    android:layout_height=\"wrap_content\" />\n                <LinearLayout\n                    android:id=\"@+id/layout_basic\"\n                    android:layout_width=\"match_parent\"\n                    android:layout_height=\"wrap_content\"\n                    android:orientation=\"vertical\"\n                    android:layout_margin=\"10dp\">\n                    <LinearLayout\n                        android:layout_width=\"match_parent\"\n                        android:layout_height=\"wrap_content\"\n                        android:orientation=\"horizontal\">\n                        <ImageView\n                            android:layout_width=\"wrap_content\"\n                            android:layout_height=\"wrap_content\"\n                            android:src=\"@drawable/ic_outline_person_24\"\n                            app:tint=\"?attr/colorOnSurface\"\n                            android:layout_marginStart=\"5dp\"\n                            android:layout_marginEnd=\"15dp\"\n                            android:layout_gravity=\"center_vertical\"/>\n                        <com.google.android.material.textfield.TextInputLayout\n                            android:hint=\"@string/name\"\n                            android:layout_width=\"0dp\"\n                            android:layout_height=\"wrap_content\"\n                            android:layout_weight=\"1\">\n                            <com.google.android.material.textfield.TextInputEditText\n                                android:id=\"@+id/text_name\"\n                                android:layout_width=\"match_parent\"\n                                android:layout_height=\"wrap_content\"\n                                android:inputType=\"textCapSentences\"/>\n                        </com.google.android.material.textfield.TextInputLayout>\n                    </LinearLayout>\n                    <LinearLayout\n                        android:layout_width=\"match_parent\"\n                        android:layout_height=\"match_parent\"\n                        android:orientation=\"horizontal\"\n                        android:layout_marginTop=\"10dp\"\n                        android:layout_marginStart=\"44.5dp\">\n                        <com.google.android.material.textfield.TextInputLayout\n                            android:hint=\"@string/issuer\"\n                            android:layout_width=\"0dp\"\n                            android:layout_height=\"match_parent\"\n                            android:layout_weight=\"1\">\n                            <com.google.android.material.textfield.TextInputEditText\n                                android:id=\"@+id/text_issuer\"\n                                android:maxLines=\"1\"\n                                android:layout_width=\"match_parent\"\n                                android:layout_height=\"wrap_content\"\n                                android:inputType=\"textCapSentences\"/>\n                        </com.google.android.material.textfield.TextInputLayout>\n                    </LinearLayout>\n\n                    <LinearLayout\n                        android:layout_width=\"match_parent\"\n                        android:layout_height=\"wrap_content\"\n                        android:layout_marginTop=\"10dp\"\n                        android:orientation=\"horizontal\">\n                        <ImageView\n                            android:layout_width=\"wrap_content\"\n                            android:layout_height=\"wrap_content\"\n                            android:src=\"@drawable/ic_outline_group_24\"\n                            app:tint=\"?attr/colorOnSurface\"\n                            android:layout_marginStart=\"5dp\"\n                            android:layout_marginEnd=\"15dp\"\n                            android:layout_gravity=\"center_vertical\"/>\n                        <com.google.android.material.textfield.TextInputLayout\n                            android:id=\"@+id/text_group_layout\"\n                            android:hint=\"@string/group\"\n                            android:layout_width=\"0dp\"\n                            android:layout_height=\"wrap_content\"\n                            android:layout_weight=\"1\">\n                            <com.google.android.material.textfield.TextInputEditText\n                                android:id=\"@+id/text_group\"\n                                android:layout_width=\"match_parent\"\n                                android:layout_height=\"wrap_content\"\n                                android:cursorVisible=\"false\"\n                                android:inputType=\"none\"/>\n                        </com.google.android.material.textfield.TextInputLayout>\n                    </LinearLayout>\n\n                    <LinearLayout\n                        android:layout_width=\"match_parent\"\n                        android:layout_height=\"wrap_content\"\n                        android:layout_marginTop=\"10dp\"\n                        android:orientation=\"horizontal\">\n                        <ImageView\n                            android:layout_width=\"wrap_content\"\n                            android:layout_height=\"wrap_content\"\n                            android:src=\"@drawable/ic_outline_notes_24\"\n                            app:tint=\"?attr/colorOnSurface\"\n                            android:layout_marginStart=\"5dp\"\n                            android:layout_marginEnd=\"15dp\"\n                            android:layout_gravity=\"center_vertical\"/>\n                        <com.google.android.material.textfield.TextInputLayout\n                            android:hint=\"@string/note\"\n                            android:layout_width=\"0dp\"\n                            android:layout_height=\"wrap_content\"\n                            android:layout_weight=\"1\">\n                            <com.google.android.material.textfield.TextInputEditText\n                                android:id=\"@+id/text_note\"\n                                android:layout_width=\"match_parent\"\n                                android:layout_height=\"wrap_content\"\n                                android:inputType=\"text|textMultiLine|textCapSentences\"/>\n                        </com.google.android.material.textfield.TextInputLayout>\n                    </LinearLayout>\n                    <LinearLayout\n                        android:id=\"@+id/layout_secret\"\n                        android:layout_width=\"match_parent\"\n                        android:layout_height=\"wrap_content\"\n                        android:layout_marginTop=\"10dp\"\n                        android:orientation=\"horizontal\">\n                        <ImageView\n                            android:layout_width=\"wrap_content\"\n                            android:layout_height=\"wrap_content\"\n                            android:src=\"@drawable/ic_outline_key_24\"\n                            app:tint=\"?attr/colorOnSurface\"\n                            android:layout_marginStart=\"5dp\"\n                            android:layout_marginEnd=\"15dp\"\n                            android:layout_gravity=\"center_vertical\"/>\n\n                        <com.google.android.material.textfield.TextInputLayout\n                            android:layout_width=\"0dp\"\n                            android:layout_height=\"wrap_content\"\n                            android:layout_weight=\"1\"\n                            app:passwordToggleTint=\"?attr/colorOnSurface\"\n                            app:passwordToggleEnabled=\"true\">\n\n                            <com.beemdevelopment.aegis.ui.components.NoAutofillEditText\n                                android:id=\"@+id/text_secret\"\n                                android:layout_width=\"match_parent\"\n                                android:layout_height=\"wrap_content\"\n                                android:hint=\"@string/secret\"\n                                android:inputType=\"textPassword|textMultiLine\"/>\n                        </com.google.android.material.textfield.TextInputLayout>\n                    </LinearLayout>\n                    <LinearLayout\n                        android:id=\"@+id/layout_pin\"\n                        android:visibility=\"gone\"\n                        android:layout_width=\"match_parent\"\n                        android:layout_height=\"wrap_content\"\n                        android:layout_marginTop=\"10dp\"\n                        android:orientation=\"horizontal\"\n                        tools:visibility=\"visible\">\n                        <ImageView\n                            android:layout_width=\"wrap_content\"\n                            android:layout_height=\"wrap_content\"\n                            android:src=\"@drawable/ic_outline_fiber_pin_24\"\n                            app:tint=\"?attr/colorOnSurface\"\n                            android:layout_marginStart=\"5dp\"\n                            android:layout_marginEnd=\"15dp\"\n                            android:layout_gravity=\"center_vertical\"/>\n\n                        <com.google.android.material.textfield.TextInputLayout\n                            android:layout_width=\"0dp\"\n                            android:layout_height=\"wrap_content\"\n                            android:layout_weight=\"1\"\n                            app:passwordToggleTint=\"?attr/colorOnSurface\"\n                            app:passwordToggleEnabled=\"true\">\n\n                            <com.google.android.material.textfield.TextInputEditText\n                                android:id=\"@+id/text_pin\"\n                                android:maxLength=\"16\"\n                                android:layout_width=\"match_parent\"\n                                android:layout_height=\"wrap_content\"\n                                android:inputType=\"numberPassword\"/>\n                        </com.google.android.material.textfield.TextInputLayout>\n                    </LinearLayout>\n                </LinearLayout>\n\n                <RelativeLayout\n                    android:foreground=\"?android:attr/selectableItemBackground\"\n                    android:layout_width=\"match_parent\"\n                    android:layout_height=\"wrap_content\"\n                    android:id=\"@+id/accordian_header\"\n                    android:focusable=\"true\"\n                    android:clickable=\"true\">\n\n                    <ImageView\n                        android:id=\"@+id/down_btn\"\n                        android:layout_width=\"wrap_content\"\n                        android:layout_height=\"wrap_content\"\n                        android:layout_alignParentStart=\"true\"\n                        android:layout_centerVertical=\"true\"\n                        android:layout_marginStart=\"14dp\"\n                        android:src=\"@drawable/ic_outline_expand_more_24\"\n                        app:tint=\"?attr/colorOnSurface\" />\n\n                    <TextView\n                        android:id=\"@+id/accordian_title\"\n                        android:layout_width=\"wrap_content\"\n                        android:layout_height=\"wrap_content\"\n                        android:layout_alignParentTop=\"true\"\n                        android:layout_toEndOf=\"@+id/down_btn\"\n                        android:padding=\"16dp\"\n                        android:text=\"@string/advanced\"\n                        android:textStyle=\"bold\" />\n\n                </RelativeLayout>\n                <LinearLayout\n                    android:id=\"@+id/layout_advanced\"\n                    android:layout_width=\"match_parent\"\n                    android:layout_height=\"wrap_content\"\n                    android:orientation=\"vertical\"\n                    android:visibility=\"gone\"\n                    android:alpha=\"0\"\n                    android:layout_marginHorizontal=\"10dp\">\n                    <LinearLayout\n                        android:id=\"@+id/layout_type_algo\"\n                        android:layout_width=\"match_parent\"\n                        android:layout_height=\"wrap_content\"\n                        android:layout_marginTop=\"10dp\"\n                        android:orientation=\"horizontal\">\n                        <ImageView\n                            android:layout_width=\"wrap_content\"\n                            android:layout_height=\"wrap_content\"\n                            android:src=\"@drawable/ic_outline_info_24\"\n                            app:tint=\"?attr/colorOnSurface\"\n                            android:layout_marginStart=\"5dp\"\n                            android:layout_marginEnd=\"15dp\"\n                            android:layout_gravity=\"center_vertical\"/>\n\n                        <LinearLayout\n                            android:layout_width=\"0dp\"\n                            android:layout_height=\"wrap_content\"\n                            android:layout_weight=\"1\"\n                            android:orientation=\"horizontal\">\n\n                            <com.google.android.material.textfield.TextInputLayout\n                                android:layout_width=\"0dp\"\n                                android:layout_height=\"wrap_content\"\n                                android:layout_marginEnd=\"5dp\"\n                                android:layout_weight=\"2\"\n                                android:hint=\"@string/type\"\n                                style=\"?attr/dropdownStyle\">\n                                <AutoCompleteTextView\n                                    android:id=\"@+id/dropdown_type\"\n                                    android:layout_width=\"match_parent\"\n                                    android:layout_height=\"wrap_content\"\n                                    android:inputType=\"none\"/>\n                            </com.google.android.material.textfield.TextInputLayout>\n                            <com.google.android.material.textfield.TextInputLayout\n                                android:id=\"@+id/dropdown_algo_layout\"\n                                android:layout_width=\"0dp\"\n                                android:layout_height=\"wrap_content\"\n                                android:layout_marginStart=\"5dp\"\n                                android:layout_weight=\"2\"\n                                android:hint=\"@string/algorithm_hint\"\n                                style=\"?attr/dropdownStyle\">\n                                <AutoCompleteTextView\n                                    android:id=\"@+id/dropdown_algo\"\n                                    android:layout_width=\"match_parent\"\n                                    android:layout_height=\"wrap_content\"\n                                    android:inputType=\"none\" />\n                            </com.google.android.material.textfield.TextInputLayout>\n                        </LinearLayout>\n                    </LinearLayout>\n                    <LinearLayout\n                        android:layout_width=\"match_parent\"\n                        android:layout_height=\"wrap_content\"\n                        android:orientation=\"horizontal\"\n                        android:layout_marginTop=\"10dp\"\n                        android:layout_marginStart=\"44.5dp\">\n                        <com.google.android.material.textfield.TextInputLayout\n                            android:id=\"@+id/text_period_counter_layout\"\n                            android:hint=\"@string/period_hint\"\n                            android:layout_width=\"0dp\"\n                            android:layout_height=\"wrap_content\"\n                            android:layout_marginEnd=\"5dp\"\n                            android:layout_weight=\"1\">\n                            <com.google.android.material.textfield.TextInputEditText\n                                android:id=\"@+id/text_period_counter\"\n                                android:layout_width=\"match_parent\"\n                                android:layout_height=\"wrap_content\"\n                                android:inputType=\"text\"/>\n                        </com.google.android.material.textfield.TextInputLayout>\n                        <com.google.android.material.textfield.TextInputLayout\n                            android:id=\"@+id/text_digits_layout\"\n                            android:hint=\"@string/digits\"\n                            android:layout_width=\"0dp\"\n                            android:layout_height=\"match_parent\"\n                            android:layout_marginStart=\"5dp\"\n                            android:layout_weight=\"1\">\n                            <com.google.android.material.textfield.TextInputEditText\n                                android:id=\"@+id/text_digits\"\n                                android:layout_width=\"match_parent\"\n                                android:layout_height=\"wrap_content\"\n                                android:inputType=\"text\"/>\n                        </com.google.android.material.textfield.TextInputLayout>\n                    </LinearLayout>\n                    <LinearLayout\n                        android:id=\"@+id/layout_usage_count\"\n                        android:layout_width=\"match_parent\"\n                        android:layout_height=\"wrap_content\"\n                        android:layout_marginTop=\"10dp\"\n                        android:weightSum=\"2\"\n                        android:orientation=\"horizontal\">\n                        <ImageView\n                            android:layout_width=\"wrap_content\"\n                            android:layout_height=\"wrap_content\"\n                            android:src=\"@drawable/ic_counter_black_24\"\n                            app:tint=\"?attr/colorOnSurface\"\n                            android:layout_marginStart=\"5dp\"\n                            android:layout_marginEnd=\"15dp\"\n                            android:layout_gravity=\"center_vertical\"/>\n\n                        <LinearLayout\n                            android:layout_width=\"0dp\"\n                            android:layout_height=\"wrap_content\"\n                            android:layout_weight=\"1\"\n                            android:orientation=\"horizontal\">\n\n                            <com.google.android.material.textfield.TextInputLayout\n                                android:hint=\"@string/usage_count\"\n                                android:layout_width=\"match_parent\"\n                                android:layout_height=\"wrap_content\"\n                                android:layout_marginEnd=\"5dp\">\n                                <com.google.android.material.textfield.TextInputEditText\n                                    android:id=\"@+id/text_usage_count\"\n                                    android:layout_width=\"match_parent\"\n                                    android:layout_height=\"wrap_content\"\n                                    android:enabled=\"false\"\n                                    android:inputType=\"number\"/>\n                            </com.google.android.material.textfield.TextInputLayout>\n                        </LinearLayout>\n                    </LinearLayout>\n                    <TextView\n                        android:id=\"@+id/text_last_used\"\n                        android:layout_width=\"wrap_content\"\n                        android:layout_height=\"wrap_content\"\n                        android:paddingTop=\"16dp\"\n                        android:paddingBottom=\"16dp\"\n                        android:layout_centerInParent=\"true\"\n                        android:layout_gravity=\"bottom|center\"\n                        android:textSize=\"14sp\" />\n                </LinearLayout>\n\n            </LinearLayout>\n        </androidx.core.widget.NestedScrollView>\n    </FrameLayout>\n\n</androidx.coordinatorlayout.widget.CoordinatorLayout>\n"
  },
  {
    "path": "app/src/main/res/layout/activity_groups.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<androidx.coordinatorlayout.widget.CoordinatorLayout 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:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\"\n    android:fitsSystemWindows=\"true\"\n    tools:context=\"com.beemdevelopment.aegis.ui.GroupManagerActivity\">\n\n    <com.google.android.material.appbar.AppBarLayout\n        android:id=\"@+id/app_bar_layout\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:fitsSystemWindows=\"true\">\n        <com.google.android.material.appbar.MaterialToolbar\n            android:id=\"@+id/toolbar\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"?attr/actionBarSize\" />\n    </com.google.android.material.appbar.AppBarLayout>\n\n    <androidx.recyclerview.widget.RecyclerView\n        android:id=\"@+id/list_groups\"\n        android:layout_height=\"match_parent\"\n        android:layout_width=\"match_parent\"\n        app:layout_behavior=\"com.google.android.material.appbar.AppBarLayout$ScrollingViewBehavior\" />\n\n    <LinearLayout\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\"\n        android:gravity=\"center|fill_vertical\"\n        android:id=\"@+id/vEmptyList\"\n        android:visibility=\"gone\"\n        android:orientation=\"vertical\">\n\n        <LinearLayout\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"0dp\"\n            android:layout_weight=\"1\"\n            android:gravity=\"center\"\n            android:orientation=\"vertical\"\n            android:paddingBottom=\"150dp\">\n\n            <ImageView\n                android:id=\"@+id/imageView\"\n                android:layout_width=\"50dp\"\n                android:layout_height=\"50dp\"\n                android:src=\"@drawable/ic_outline_layers_24\" />\n\n            <TextView\n                android:id=\"@+id/textView\"\n                android:layout_width=\"wrap_content\"\n                android:layout_height=\"wrap_content\"\n                android:text=\"@string/empty_group_list_title\"\n                android:paddingTop=\"17dp\"\n                android:textSize=\"18sp\" />\n\n            <TextView\n                android:id=\"@+id/textView5\"\n                android:layout_width=\"300dp\"\n                android:layout_height=\"wrap_content\"\n                android:lineSpacingExtra=\"5dp\"\n                android:paddingTop=\"7dp\"\n                android:text=\"@string/empty_group_list\"\n                android:textAlignment=\"center\" />\n        </LinearLayout>\n    </LinearLayout>\n\n</androidx.coordinatorlayout.widget.CoordinatorLayout>\n"
  },
  {
    "path": "app/src/main/res/layout/activity_import_entries.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<androidx.coordinatorlayout.widget.CoordinatorLayout 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:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\"\n    android:fitsSystemWindows=\"true\"\n    android:id=\"@+id/importEntriesRootView\"\n    tools:context=\"com.beemdevelopment.aegis.ui.ImportEntriesActivity\">\n\n    <com.google.android.material.appbar.AppBarLayout\n        android:id=\"@+id/app_bar_layout\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:fitsSystemWindows=\"true\">\n        <com.google.android.material.appbar.MaterialToolbar\n            android:id=\"@+id/toolbar\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"?attr/actionBarSize\" />\n    </com.google.android.material.appbar.AppBarLayout>\n\n    <androidx.recyclerview.widget.RecyclerView\n        android:id=\"@+id/list_entries\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\"\n        android:clipToPadding=\"false\"\n        android:scrollbars=\"vertical\"\n        app:layout_behavior=\"@string/appbar_scrolling_view_behavior\"/>\n\n    <com.google.android.material.floatingactionbutton.FloatingActionButton\n        android:id=\"@+id/fab\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:layout_gravity=\"bottom|end\"\n        android:layout_margin=\"@dimen/fab_margin\"\n        android:src=\"@drawable/ic_outline_check_24\" />\n</androidx.coordinatorlayout.widget.CoordinatorLayout>\n"
  },
  {
    "path": "app/src/main/res/layout/activity_intro.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<androidx.constraintlayout.widget.ConstraintLayout\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    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\"\n    android:fitsSystemWindows=\"true\"\n    tools:context=\"com.beemdevelopment.aegis.ui.IntroActivity\">\n    <androidx.viewpager2.widget.ViewPager2\n        android:id=\"@+id/pager\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"0dp\"\n        app:layout_constraintTop_toTopOf=\"parent\"\n        app:layout_constraintStart_toStartOf=\"parent\"\n        app:layout_constraintBottom_toTopOf=\"@+id/btnPrevious\" />\n    <com.google.android.material.button.MaterialButton\n        android:id=\"@+id/btnPrevious\"\n        android:layout_width=\"65dp\"\n        android:layout_height=\"65dp\"\n        android:layout_marginVertical=\"10dp\"\n        android:layout_marginHorizontal=\"20dp\"\n        android:visibility=\"invisible\"\n        app:icon=\"@drawable/ic_outline_arrow_left_alt_24\"\n        app:iconSize=\"30dp\"\n        app:iconGravity=\"textStart\"\n        app:iconPadding=\"0dp\"\n        app:layout_constraintBottom_toBottomOf=\"parent\"\n        app:layout_constraintStart_toStartOf=\"parent\"\n        style=\"@style/Widget.Material3.Button.IconButton.Filled.Tonal\" />\n    <com.beemdevelopment.aegis.ui.intro.SlideIndicator\n        android:id=\"@+id/slideIndicator\"\n        android:layout_width=\"0dp\"\n        android:layout_height=\"65dp\"\n        android:layout_marginBottom=\"10dp\"\n        app:layout_constraintStart_toEndOf=\"@+id/btnPrevious\"\n        app:layout_constraintEnd_toStartOf=\"@+id/btnNext\"\n        app:layout_constraintBottom_toBottomOf=\"parent\" />\n    <com.google.android.material.button.MaterialButton\n        android:id=\"@+id/btnNext\"\n        android:layout_width=\"65dp\"\n        android:layout_height=\"65dp\"\n        android:layout_marginVertical=\"10dp\"\n        android:layout_marginHorizontal=\"20dp\"\n        app:icon=\"@drawable/ic_outline_arrow_right_alt_24\"\n        app:iconSize=\"30dp\"\n        app:iconGravity=\"textStart\"\n        app:iconPadding=\"0dp\"\n        app:layout_constraintBottom_toBottomOf=\"parent\"\n        app:layout_constraintEnd_toEndOf=\"parent\"\n        style=\"@style/Widget.Material3.Button.IconButton.Filled.Tonal\" />\n</androidx.constraintlayout.widget.ConstraintLayout>\n"
  },
  {
    "path": "app/src/main/res/layout/activity_main.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<androidx.coordinatorlayout.widget.CoordinatorLayout 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:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\"\n    android:fitsSystemWindows=\"true\"\n    tools:context=\"com.beemdevelopment.aegis.ui.MainActivity\">\n\n    <com.google.android.material.appbar.AppBarLayout\n        android:id=\"@+id/app_bar_layout\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:fitsSystemWindows=\"true\"\n        app:liftOnScroll=\"true\"\n        app:liftOnScrollTargetViewId=\"@+id/rvKeyProfiles\">\n\n        <com.google.android.material.appbar.MaterialToolbar\n            android:id=\"@+id/toolbar\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"?attr/actionBarSize\" />\n\n        <HorizontalScrollView\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"wrap_content\"\n            android:layout_marginBottom=\"0dp\"\n            android:paddingTop=\"0dp\"\n            android:paddingBottom=\"0dp\"\n            android:scrollbars=\"none\">\n\n            <LinearLayout\n                android:layout_width=\"wrap_content\"\n                android:layout_height=\"match_parent\"\n                android:orientation=\"horizontal\"\n                android:paddingStart=\"12dp\"\n                android:paddingEnd=\"12dp\">\n\n                <com.google.android.material.chip.ChipGroup\n                    android:id=\"@+id/groupChipGroup\"\n                    android:layout_width=\"match_parent\"\n                    android:layout_height=\"wrap_content\"\n                    app:selectionRequired=\"true\"/>\n            </LinearLayout>\n        </HorizontalScrollView>\n    </com.google.android.material.appbar.AppBarLayout>\n\n\n    <LinearLayout\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\"\n        android:orientation=\"vertical\"\n        app:layout_behavior=\"@string/appbar_scrolling_view_behavior\">\n\n        <fragment\n            android:id=\"@+id/key_profiles\"\n            android:name=\"com.beemdevelopment.aegis.ui.views.EntryListView\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"fill_parent\"\n            app:layout_behavior=\"@string/appbar_scrolling_view_behavior\" />\n    </LinearLayout>\n\n</androidx.coordinatorlayout.widget.CoordinatorLayout>\n"
  },
  {
    "path": "app/src/main/res/layout/activity_preferences.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    android:orientation=\"vertical\"\n    android:fitsSystemWindows=\"true\">\n    <com.google.android.material.appbar.AppBarLayout\n        android:id=\"@+id/app_bar_layout\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:fitsSystemWindows=\"true\">\n        <com.google.android.material.appbar.MaterialToolbar\n            android:id=\"@+id/toolbar\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"?attr/actionBarSize\" />\n    </com.google.android.material.appbar.AppBarLayout>\n    <FrameLayout\n        android:id=\"@+id/content\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\"\n        android:isScrollContainer=\"true\"\n        app:layout_behavior=\"@string/appbar_scrolling_view_behavior\" />\n</androidx.coordinatorlayout.widget.CoordinatorLayout>\n"
  },
  {
    "path": "app/src/main/res/layout/activity_scanner.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<androidx.coordinatorlayout.widget.CoordinatorLayout\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    xmlns:tools=\"http://schemas.android.com/tools\"\n    xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\"\n    android:fitsSystemWindows=\"true\"\n    tools:context=\"com.beemdevelopment.aegis.ui.ScannerActivity\">\n\n    <com.google.android.material.appbar.AppBarLayout\n        android:id=\"@+id/app_bar_layout\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:background=\"@android:color/transparent\"\n        android:translationZ=\"0.1dp\"\n        app:elevation=\"0dp\"\n        android:fitsSystemWindows=\"true\">\n        <com.google.android.material.appbar.MaterialToolbar\n            android:id=\"@+id/toolbar\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"?attr/actionBarSize\"\n            app:titleTextColor=\"?attr/colorOnDark\" />\n    </com.google.android.material.appbar.AppBarLayout>\n\n    <androidx.camera.view.PreviewView\n        android:id=\"@+id/preview_view\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\" />\n\n</androidx.coordinatorlayout.widget.CoordinatorLayout>\n"
  },
  {
    "path": "app/src/main/res/layout/activity_share_entry.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<androidx.coordinatorlayout.widget.CoordinatorLayout\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    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\"\n    android:fitsSystemWindows=\"true\"\n    tools:context=\"com.beemdevelopment.aegis.ui.TransferEntriesActivity\">\n\n    <com.google.android.material.appbar.AppBarLayout\n        android:id=\"@+id/app_bar_layout\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:fitsSystemWindows=\"true\">\n\n        <com.google.android.material.appbar.MaterialToolbar\n            android:id=\"@+id/toolbar\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"?attr/actionBarSize\" />\n\n    </com.google.android.material.appbar.AppBarLayout>\n\n    <androidx.constraintlayout.widget.ConstraintLayout\n        android:id=\"@+id/layoutShareEntry\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\"\n        android:layout_marginTop=\"?attr/actionBarSize\"\n        android:paddingHorizontal=\"30dp\">\n\n        <TextView\n            android:id=\"@+id/tvDescription\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:gravity=\"center\"\n            android:text=\"@string/transfer_entry_description\"\n            app:layout_constraintBottom_toTopOf=\"@+id/ivQrCode\"\n            app:layout_constraintEnd_toEndOf=\"parent\"\n            app:layout_constraintStart_toStartOf=\"parent\"\n            app:layout_constraintTop_toTopOf=\"parent\" />\n\n        <com.google.android.material.imageview.ShapeableImageView\n            android:id=\"@+id/ivQrCode\"\n            android:layout_width=\"0dp\"\n            android:layout_height=\"0dp\"\n            app:layout_constraintBottom_toBottomOf=\"parent\"\n            app:layout_constraintDimensionRatio=\"1:1\"\n            app:layout_constraintEnd_toEndOf=\"parent\"\n            app:layout_constraintStart_toStartOf=\"parent\"\n            app:layout_constraintTop_toTopOf=\"parent\"\n            app:layout_constraintVertical_bias=\"0.3\"\n            app:shapeAppearanceOverlay=\"@style/ShapeAppearanceOverlay.Aegis.ImageView.Rounded\" />\n\n        <TextView\n            android:id=\"@+id/tvIssuer\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:layout_marginTop=\"20dp\"\n            android:textSize=\"18sp\"\n            android:textStyle=\"bold\"\n            app:layout_constraintEnd_toEndOf=\"parent\"\n            app:layout_constraintStart_toStartOf=\"parent\"\n            app:layout_constraintTop_toBottomOf=\"@+id/ivQrCode\"\n            tools:text=\"Issuer\" />\n\n        <TextView\n            android:id=\"@+id/tvAccountName\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:layout_marginTop=\"4dp\"\n            app:layout_constraintEnd_toEndOf=\"parent\"\n            app:layout_constraintStart_toStartOf=\"parent\"\n            app:layout_constraintTop_toBottomOf=\"@+id/tvIssuer\"\n            tools:text=\"Accountname\" />\n\n        <Button\n            android:id=\"@+id/btnCopyClipboard\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:text=\"@string/copy_uri\"\n            android:textAllCaps=\"false\"\n            android:visibility=\"invisible\"\n            app:layout_constraintBottom_toTopOf=\"@id/tvEntriesCount\"\n            app:layout_constraintEnd_toEndOf=\"parent\"\n            app:layout_constraintHorizontal_bias=\"0.497\"\n            app:layout_constraintStart_toStartOf=\"parent\"\n            app:layout_constraintTop_toBottomOf=\"@id/tvAccountName\"\n            app:layout_constraintVertical_bias=\"0.134\" />\n\n        <Button\n            android:id=\"@+id/btnNext\"\n            style=\"@style/Widget.Material3.Button.TextButton\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:layout_marginBottom=\"4dp\"\n            android:text=\"@string/next\"\n            android:textAllCaps=\"false\"\n            app:layout_constraintBottom_toBottomOf=\"parent\"\n            app:layout_constraintEnd_toEndOf=\"parent\" />\n\n        <Button\n            android:id=\"@+id/btnPrevious\"\n            style=\"@style/Widget.Material3.Button.TextButton\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:layout_marginEnd=\"4dp\"\n            android:layout_marginBottom=\"4dp\"\n            android:text=\"@string/previous\"\n            android:textAllCaps=\"false\"\n            android:visibility=\"invisible\"\n            app:layout_constraintBottom_toBottomOf=\"parent\"\n            app:layout_constraintStart_toStartOf=\"parent\" />\n\n        <TextView\n            android:id=\"@+id/tvEntriesCount\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:layout_marginBottom=\"20dp\"\n            app:layout_constraintBottom_toBottomOf=\"parent\"\n            app:layout_constraintEnd_toEndOf=\"@+id/btnNext\"\n            app:layout_constraintStart_toStartOf=\"@+id/btnPrevious\" />\n\n        <TextView\n            android:id=\"@+id/textView3\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:text=\"@string/transfer_entry_brightness\"\n            app:layout_constraintBottom_toTopOf=\"@+id/tvEntriesCount\"\n            app:layout_constraintEnd_toEndOf=\"parent\"\n            app:layout_constraintStart_toStartOf=\"parent\"\n            app:layout_constraintTop_toBottomOf=\"@+id/btnCopyClipboard\" />\n\n    </androidx.constraintlayout.widget.ConstraintLayout>\n\n</androidx.coordinatorlayout.widget.CoordinatorLayout>\n"
  },
  {
    "path": "app/src/main/res/layout/card_assign_icon_entry.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<com.google.android.material.card.MaterialCardView\n    xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"wrap_content\"\n    android:elevation=\"0dp\"\n    android:clickable=\"true\"\n    android:focusable=\"true\"\n    app:checkedIcon=\"@null\"\n    app:cardElevation=\"0dp\"\n    style=\"@style/Widget.Aegis.EntryCardView\">\n\n    <LinearLayout\n        android:layout_width=\"match_parent\"\n        android:background=\"?attr/colorSurfaceContainerLow\"\n        android:id=\"@+id/rlCardEntry\"\n        android:layout_height=\"wrap_content\"\n        android:orientation=\"vertical\"\n        android:paddingTop=\"10dp\"\n        android:paddingBottom=\"10dp\"\n        android:paddingStart=\"14dp\">\n\n        <!-- Title -->\n        <TextView\n            android:id=\"@+id/tvIssuer\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"wrap_content\"\n            android:maxLines=\"1\"\n            android:ellipsize=\"end\"\n            android:text=\"Issuer\"\n            android:textStyle=\"bold\"\n            android:textSize=\"18sp\"/>\n        <TextView\n            android:id=\"@+id/tvAccountName\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"wrap_content\"\n            android:maxLines=\"1\"\n            android:ellipsize=\"end\"\n            android:text=\"AccountName\"\n            android:textSize=\"14sp\"\n            android:layout_marginBottom=\"8dp\"/>\n\n        <!-- Row with 3 columns -->\n        <LinearLayout\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"wrap_content\"\n            android:orientation=\"horizontal\">\n\n            <com.google.android.material.imageview.ShapeableImageView\n                android:id=\"@+id/ivOldImage\"\n                android:layout_width=\"60dp\"\n                android:layout_height=\"60dp\"\n                android:layout_gravity=\"center_vertical\"\n                app:shapeAppearanceOverlay=\"@style/ShapeAppearanceOverlay.Aegis.ImageView.Circle\" />\n\n            <ImageView\n                android:layout_width=\"32dp\"\n                android:layout_height=\"32dp\"\n                android:alpha=\"0.7\"\n                android:src=\"@drawable/baseline_arrow_right_24\"\n                android:layout_marginStart=\"5dp\"\n                android:layout_marginEnd=\"15dp\"\n                android:layout_gravity=\"center_vertical\"/>\n\n            <com.google.android.material.imageview.ShapeableImageView\n                android:id=\"@+id/ivNewImage\"\n                android:layout_width=\"60dp\"\n                android:layout_height=\"60dp\"\n                android:layout_gravity=\"center_vertical\"\n                app:shapeAppearanceOverlay=\"@style/ShapeAppearanceOverlay.Aegis.ImageView.Circle\" />\n\n            <View\n                android:layout_width=\"0dp\"\n                android:layout_height=\"1dp\"\n                android:layout_weight=\"1\" />\n\n            <ImageView\n                android:id=\"@+id/btnReset\"\n                android:layout_width=\"wrap_content\"\n                android:layout_height=\"wrap_content\"\n                android:clickable=\"true\"\n                android:focusable=\"true\"\n                android:src=\"@drawable/ic_outline_reset_image_24\"\n                android:paddingStart=\"15dp\"\n                android:paddingEnd=\"15dp\"\n                android:paddingTop=\"12.5dp\"\n                android:paddingBottom=\"12.5dp\"\n                android:foreground=\"?android:attr/selectableItemBackground\"\n                android:layout_gravity=\"center_vertical\"/>\n\n        </LinearLayout>\n\n\n    </LinearLayout>\n</com.google.android.material.card.MaterialCardView>\n"
  },
  {
    "path": "app/src/main/res/layout/card_audit_log.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<com.google.android.material.card.MaterialCardView 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:layout_width=\"match_parent\"\n    android:layout_height=\"wrap_content\"\n    android:foreground=\"?android:attr/selectableItemBackground\"\n    android:clickable=\"true\"\n    android:focusable=\"true\"\n    android:orientation=\"horizontal\"\n    app:cardElevation=\"0dp\"\n    style=\"@style/Widget.Aegis.EntryCardView\">\n    <LinearLayout\n        android:layout_weight=\"1\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:orientation=\"horizontal\"\n        android:layout_gravity=\"center_vertical\">\n        <RelativeLayout\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"match_parent\"\n            android:paddingTop=\"12dp\"\n            android:paddingStart=\"14dp\">\n\n            <com.google.android.material.imageview.ShapeableImageView\n                android:id=\"@+id/iv_icon_view\"\n                android:layout_width=\"45dp\"\n                android:layout_height=\"45dp\"\n                android:layout_alignParentStart=\"true\"\n                android:background=\"?attr/colorTertiaryContainer\"\n                android:cropToPadding=\"true\"\n                android:padding=\"2dp\"\n                android:scaleType=\"centerInside\"\n                android:src=\"@drawable/ic_lock_open\"\n                app:shapeAppearanceOverlay=\"@style/ShapeAppearanceOverlay.Aegis.ImageView.Rounded\" />\n\n        </RelativeLayout>\n\n        <RelativeLayout\n            android:layout_width=\"0dp\"\n            android:layout_height=\"wrap_content\"\n            android:layout_weight=\"1\"\n            android:gravity=\"bottom\"\n            android:id=\"@+id/relativeLayout\"\n            android:paddingTop=\"16dp\"\n            android:paddingBottom=\"16dp\"\n            android:paddingEnd=\"12dp\"\n            android:paddingLeft=\"12dp\"\n            android:paddingRight=\"12dp\"\n            android:paddingStart=\"12dp\">\n\n            <RelativeLayout\n                android:layout_width=\"wrap_content\"\n                android:layout_height=\"wrap_content\"\n                android:id=\"@+id/description\">\n\n                <TextView\n                    android:layout_width=\"wrap_content\"\n                    android:layout_height=\"wrap_content\"\n                    android:id=\"@+id/text_audit_log_title\"\n                    android:text=\"@string/issuer\"\n                    android:textStyle=\"bold\"\n                    android:includeFontPadding=\"false\"\n                    android:textSize=\"16sp\"\n                    android:ellipsize=\"end\"\n                    android:maxLines=\"1\"/>\n\n\n            </RelativeLayout>\n\n            <TextView\n                android:layout_width=\"wrap_content\"\n                android:layout_height=\"wrap_content\"\n                android:id=\"@+id/text_audit_log_description\"\n                android:layoutDirection=\"ltr\"\n                android:layout_below=\"@id/description\"\n                android:includeFontPadding=\"false\"\n                tools:text=\"The vault has been succesfully unlocked\"\n                android:layout_alignParentStart=\"true\"\n                android:layout_marginTop=\"4dp\"\n                android:textStyle=\"normal\"/>\n\n            <TextView\n                android:layout_width=\"wrap_content\"\n                android:layout_height=\"wrap_content\"\n                android:id=\"@+id/text_audit_log_reference\"\n                android:layoutDirection=\"ltr\"\n                android:layout_below=\"@id/text_audit_log_description\"\n                android:includeFontPadding=\"false\"\n                tools:text=\"Aegis (authenticator)\"\n                android:layout_alignParentStart=\"true\"\n                android:layout_marginTop=\"4dp\"\n                android:textStyle=\"italic\"/>\n\n            <TextView\n                android:layout_width=\"wrap_content\"\n                android:layout_height=\"wrap_content\"\n                android:id=\"@+id/text_audit_log_timestamp\"\n                android:layoutDirection=\"ltr\"\n                android:layout_below=\"@id/text_audit_log_reference\"\n                android:includeFontPadding=\"false\"\n                tools:text=\"Today at 5:59 PM\"\n                android:textSize=\"12sp\"\n                android:layout_alignParentStart=\"true\"\n                android:textColor=\"?attr/colorOutline\"\n                android:layout_marginTop=\"8dp\"\n                android:textStyle=\"normal\"/>\n\n        </RelativeLayout>\n    </LinearLayout>\n</com.google.android.material.card.MaterialCardView>\n"
  },
  {
    "path": "app/src/main/res/layout/card_entry.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<com.google.android.material.card.MaterialCardView\n    xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:tools=\"http://schemas.android.com/tools\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"wrap_content\"\n    android:elevation=\"0dp\"\n    android:clickable=\"true\"\n    android:focusable=\"true\"\n    android:checkable=\"true\"\n    app:checkedIcon=\"@null\"\n    app:cardElevation=\"0dp\"\n    style=\"@style/Widget.Aegis.EntryCardView\">\n\n    <LinearLayout\n        android:orientation=\"horizontal\"\n        android:id=\"@+id/rlCardEntry\"\n        android:paddingTop=\"8dp\"\n        android:paddingBottom=\"8dp\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\">\n\n        <View\n            android:id=\"@+id/favorite_indicator\"\n            android:layout_width=\"15dp\"\n            android:layout_height=\"match_parent\"\n            android:layout_marginStart=\"-11dp\"\n            android:backgroundTint=\"?attr/colorFavorite\"\n            android:background=\"@drawable/favorite_indicator\" />\n\n        <RelativeLayout\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"match_parent\"\n            android:paddingStart=\"14dp\">\n\n            <com.google.android.material.imageview.ShapeableImageView\n                android:id=\"@+id/ivTextDrawable\"\n                android:layout_width=\"60dp\"\n                android:layout_height=\"60dp\"\n                android:layout_centerVertical=\"true\"\n                android:layout_alignParentStart=\"true\"\n                app:shapeAppearanceOverlay=\"@style/ShapeAppearanceOverlay.Aegis.ImageView.Circle\" />\n\n            <com.google.android.material.imageview.ShapeableImageView\n                android:id=\"@+id/ivSelected\"\n                android:layout_width=\"60dp\"\n                android:layout_height=\"60dp\"\n                android:layout_alignParentStart=\"true\"\n                android:layout_centerVertical=\"true\"\n                android:src=\"@drawable/item_selected\"\n                android:visibility=\"gone\"\n                android:background=\"?attr/colorPrimaryAlternative\"\n                app:shapeAppearanceOverlay=\"@style/ShapeAppearanceOverlay.Aegis.ImageView.Circle\" />\n        </RelativeLayout>\n\n        <RelativeLayout\n            android:layout_width=\"0dp\"\n            android:layout_height=\"wrap_content\"\n            android:layout_weight=\"1\"\n            android:gravity=\"bottom\"\n            android:id=\"@+id/relativeLayout\"\n            android:paddingTop=\"18dp\"\n            android:paddingBottom=\"16dp\"\n            android:paddingEnd=\"16dp\"\n            android:paddingLeft=\"16dp\"\n            android:paddingRight=\"16dp\"\n            android:paddingStart=\"16dp\">\n\n            <RelativeLayout\n                android:layout_width=\"wrap_content\"\n                android:layout_height=\"wrap_content\"\n                android:id=\"@+id/description\"\n                android:layout_alignStart=\"@+id/profile_codes_layout\">\n\n                <TextView\n                    android:layout_width=\"wrap_content\"\n                    android:layout_height=\"wrap_content\"\n                    android:id=\"@+id/profile_issuer\"\n                    android:text=\"@string/issuer\"\n                    android:textStyle=\"bold\"\n                    android:includeFontPadding=\"false\"\n                    android:textSize=\"16sp\"\n                    android:ellipsize=\"end\"\n                    android:maxLines=\"1\"/>\n\n                <TextView\n                    android:id=\"@+id/profile_account_name\"\n                    android:layout_width=\"wrap_content\"\n                    android:layout_height=\"wrap_content\"\n                    android:layout_toEndOf=\"@id/profile_issuer\"\n                    android:ellipsize=\"end\"\n                    android:includeFontPadding=\"false\"\n                    android:maxLines=\"1\"\n                    android:textSize=\"16sp\"\n                    tools:text=\" - AccountName\" />\n\n            </RelativeLayout>\n\n            <TextView\n                android:id=\"@+id/profile_copied\"\n                android:layout_width=\"wrap_content\"\n                android:layout_height=\"wrap_content\"\n                android:includeFontPadding=\"false\"\n                android:maxLines=\"1\"\n                android:text=\"@string/copied\"\n                android:layout_alignStart=\"@+id/description\"\n                android:layout_below=\"@id/description\"\n                android:textSize=\"16sp\"\n                android:visibility=\"invisible\" />\n\n            <LinearLayout\n                android:orientation=\"vertical\"\n                android:layout_marginBottom=\"0dp\"\n                android:paddingBottom=\"0dp\"\n                android:id=\"@+id/profile_codes_layout\"\n                android:layout_below=\"@id/description\"\n                android:layout_width=\"match_parent\"\n                android:layout_height=\"match_parent\">\n\n                <TextView\n                    android:layout_width=\"wrap_content\"\n                    android:layout_height=\"wrap_content\"\n                    android:textAppearance=\"?android:attr/textAppearanceMedium\"\n                    android:fontFamily=\"sans-serif-light\"\n                    tools:text=\"012 345\"\n                    android:id=\"@+id/profile_code\"\n                    android:layoutDirection=\"ltr\"\n                    android:textSize=\"34sp\"\n                    android:layout_below=\"@id/description\"\n                    android:textColor=\"?attr/colorCode\"\n                    android:includeFontPadding=\"false\"\n                    android:fallbackLineSpacing=\"false\"\n                    android:layout_alignParentStart=\"true\"\n                    android:layout_marginTop=\"0dp\"\n                    android:textStyle=\"normal|bold\"/>\n\n                <TextView\n                    android:id=\"@+id/next_profile_code\"\n                    android:layout_width=\"match_parent\"\n                    android:layout_height=\"wrap_content\"\n                    android:layout_marginTop=\"0dp\"\n                    android:paddingTop=\"0dp\"\n                    android:paddingStart=\"2dp\"\n                    android:layout_alignParentStart=\"true\"\n                    android:textColor=\"?attr/colorOnSurfaceDim\"\n                    android:textSize=\"20sp\"\n                    android:textStyle=\"normal|bold\"\n                    android:includeFontPadding=\"false\"\n                    android:fallbackLineSpacing=\"false\"\n                    tools:text=\"412 643\"/>\n            </LinearLayout>\n\n        </RelativeLayout>\n\n        <LinearLayout\n            android:orientation=\"horizontal\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"match_parent\">\n\n            <ImageView\n                android:id=\"@+id/buttonRefresh\"\n                android:visibility=\"gone\"\n                android:layout_width=\"wrap_content\"\n                android:layout_height=\"wrap_content\"\n                android:layout_gravity=\"center_vertical\"\n                android:layout_marginStart=\"16dp\"\n                android:layout_marginEnd=\"4dp\"\n                android:padding=\"8dp\"\n                android:clickable=\"true\"\n                android:focusable=\"true\"\n                android:src=\"@drawable/ic_outline_refresh_24\"\n                app:tint=\"?attr/colorOnSurface\"\n                android:background=\"?android:attr/selectableItemBackground\" />\n\n            <ImageView\n                android:id=\"@+id/drag_handle\"\n                android:layout_width=\"24dp\"\n                android:layout_height=\"24dp\"\n                android:layout_gravity=\"center_vertical\"\n                android:layout_marginEnd=\"-12dp\"\n                android:visibility=\"invisible\"\n                android:scaleType=\"fitXY\"\n                android:src=\"@drawable/ic_outline_menu_24\" />\n\n        </LinearLayout>\n\n    </LinearLayout>\n\n    <LinearLayout\n        android:orientation=\"horizontal\"\n        android:padding=\"0dp\"\n        android:layout_margin=\"0dp\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\">\n\n        <com.beemdevelopment.aegis.ui.views.TotpProgressBar\n            style=\"?android:attr/progressBarStyleHorizontal\"\n            android:progressDrawable=\"@drawable/progress_horizontal\"\n            android:layout_width=\"0dp\"\n            android:layout_height=\"4dp\"\n            android:id=\"@+id/progressBar\"\n            android:max=\"5000\"\n            android:layout_weight=\"1\"/>\n    </LinearLayout>\n\n</com.google.android.material.card.MaterialCardView>\n"
  },
  {
    "path": "app/src/main/res/layout/card_entry_compact.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<com.google.android.material.card.MaterialCardView\n    xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:tools=\"http://schemas.android.com/tools\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"wrap_content\"\n    android:elevation=\"0dp\"\n    android:clickable=\"true\"\n    android:focusable=\"true\"\n    android:checkable=\"true\"\n    app:checkedIcon=\"@null\"\n    app:cardElevation=\"0dp\"\n    style=\"@style/Widget.Aegis.CompactEntryCardView\">\n\n    <LinearLayout\n        android:orientation=\"horizontal\"\n        android:id=\"@+id/rlCardEntry\"\n        android:paddingTop=\"3dp\"\n        android:paddingBottom=\"3dp\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\">\n\n        <View\n            android:id=\"@+id/favorite_indicator\"\n            android:layout_width=\"15dp\"\n            android:layout_height=\"match_parent\"\n            android:layout_marginStart=\"-11dp\"\n            android:layout_marginBottom=\"8dp\"\n            android:layout_marginTop=\"8dp\"\n            android:backgroundTint=\"?attr/colorFavorite\"\n            android:background=\"@drawable/favorite_indicator\" />\n\n        <RelativeLayout\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"match_parent\"\n            android:paddingStart=\"12dp\">\n\n            <com.google.android.material.imageview.ShapeableImageView\n                android:id=\"@+id/ivTextDrawable\"\n                android:layout_width=\"45dp\"\n                android:layout_height=\"45dp\"\n                android:layout_alignParentStart=\"true\"\n                android:layout_centerVertical=\"true\"\n                app:shapeAppearanceOverlay=\"@style/ShapeAppearanceOverlay.Aegis.ImageView.Circle\" />\n\n            <com.google.android.material.imageview.ShapeableImageView\n                android:id=\"@+id/ivSelected\"\n                android:layout_width=\"45dp\"\n                android:layout_height=\"45dp\"\n                android:layout_alignParentStart=\"true\"\n                android:layout_centerVertical=\"true\"\n                android:src=\"@drawable/item_selected\"\n                android:visibility=\"gone\"\n                android:background=\"?attr/colorPrimaryAlternative\"\n                app:shapeAppearanceOverlay=\"@style/ShapeAppearanceOverlay.Aegis.ImageView.Circle\" />\n        </RelativeLayout>\n\n        <RelativeLayout\n            android:layout_width=\"0dp\"\n            android:layout_height=\"wrap_content\"\n            android:layout_weight=\"1\"\n            android:gravity=\"bottom\"\n            android:id=\"@+id/relativeLayout\"\n            android:paddingTop=\"12dp\"\n            android:paddingBottom=\"8dp\"\n            android:paddingEnd=\"8dp\"\n            android:paddingLeft=\"8dp\"\n            android:paddingRight=\"8dp\"\n            android:paddingStart=\"8dp\">\n\n        <TextView\n            android:id=\"@+id/profile_copied\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:includeFontPadding=\"false\"\n            android:maxLines=\"1\"\n            android:text=\"@string/copied\"\n            android:layout_alignStart=\"@+id/description\"\n            android:layout_below=\"@id/description\"\n            android:textSize=\"13sp\"\n            android:visibility=\"invisible\" />\n\n        <RelativeLayout\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:id=\"@+id/description\"\n            android:layout_alignStart=\"@+id/profile_codes_layout\">\n\n            <TextView\n                android:layout_width=\"wrap_content\"\n                android:layout_height=\"wrap_content\"\n                android:id=\"@+id/profile_issuer\"\n                android:text=\"@string/issuer\"\n                android:textStyle=\"bold\"\n                android:includeFontPadding=\"false\"\n                android:fallbackLineSpacing=\"false\"\n                android:textSize=\"13sp\"\n                android:ellipsize=\"end\"\n                android:maxLines=\"1\"/>\n\n            <TextView\n                android:id=\"@+id/profile_account_name\"\n                android:layout_width=\"wrap_content\"\n                android:layout_height=\"wrap_content\"\n                android:layout_toEndOf=\"@id/profile_issuer\"\n                android:ellipsize=\"end\"\n                android:includeFontPadding=\"false\"\n                android:maxLines=\"1\"\n                android:textSize=\"13sp\"\n                tools:text=\" - AccountName\" />\n        </RelativeLayout>\n\n\n            <LinearLayout\n                android:orientation=\"vertical\"\n                android:layout_marginBottom=\"0dp\"\n                android:paddingBottom=\"0dp\"\n                android:id=\"@+id/profile_codes_layout\"\n                android:layout_below=\"@id/description\"\n                android:layout_marginStart=\"6dp\"\n                android:layout_width=\"match_parent\"\n                android:layout_height=\"match_parent\">\n\n                <TextView\n                    android:layout_width=\"wrap_content\"\n                    android:layout_height=\"wrap_content\"\n                    android:textAppearance=\"?android:attr/textAppearanceMedium\"\n                    android:fontFamily=\"sans-serif-light\"\n                    tools:text=\"012 345\"\n                    android:id=\"@+id/profile_code\"\n                    android:layoutDirection=\"ltr\"\n                    android:layout_below=\"@id/description\"\n                    android:includeFontPadding=\"false\"\n                    android:fallbackLineSpacing=\"false\"\n                    android:textSize=\"26sp\"\n                    android:textColor=\"?attr/colorCode\"\n                    android:layout_alignParentStart=\"true\"\n                    android:layout_marginTop=\"0dp\"\n                    android:textStyle=\"normal|bold\"/>\n\n                <TextView\n                    android:id=\"@+id/next_profile_code\"\n                    android:layout_width=\"match_parent\"\n                    android:layout_height=\"wrap_content\"\n                    android:letterSpacing=\"-0.01\"\n                    android:layout_marginTop=\"0dp\"\n                    android:paddingTop=\"0dp\"\n                    android:paddingStart=\"2dp\"\n                    android:textColor=\"?attr/colorOnSurfaceDim\"\n                    android:textSize=\"16sp\"\n                    android:textStyle=\"normal|bold\"\n                    android:fallbackLineSpacing=\"false\"\n                    android:includeFontPadding=\"false\"\n                    tools:text=\"412 643\"/>\n            </LinearLayout>\n\n\n\n        </RelativeLayout>\n\n        <LinearLayout\n            android:orientation=\"horizontal\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"match_parent\">\n\n            <ImageView\n                android:id=\"@+id/buttonRefresh\"\n                android:visibility=\"gone\"\n                android:layout_width=\"wrap_content\"\n                android:layout_height=\"wrap_content\"\n                android:layout_gravity=\"center_vertical\"\n                android:layout_marginStart=\"8dp\"\n                android:layout_marginEnd=\"0dp\"\n                android:padding=\"8dp\"\n                android:clickable=\"true\"\n                android:focusable=\"true\"\n                android:src=\"@drawable/ic_outline_refresh_24\"\n                android:background=\"?android:attr/selectableItemBackground\" />\n\n            <ImageView\n                android:id=\"@+id/drag_handle\"\n                android:layout_width=\"24dp\"\n                android:layout_height=\"24dp\"\n                android:layout_gravity=\"center_vertical\"\n                android:layout_marginEnd=\"-12dp\"\n                android:visibility=\"invisible\"\n                android:scaleType=\"fitXY\"\n                android:src=\"@drawable/ic_outline_menu_24\" />\n\n        </LinearLayout>\n\n    </LinearLayout>\n\n    <LinearLayout\n        android:orientation=\"horizontal\"\n        android:padding=\"0dp\"\n        android:layout_margin=\"0dp\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\">\n\n        <com.beemdevelopment.aegis.ui.views.TotpProgressBar\n            style=\"?android:attr/progressBarStyleHorizontal\"\n            android:progressDrawable=\"@drawable/progress_horizontal\"\n            android:layout_width=\"0dp\"\n            android:layout_height=\"3dp\"\n            android:id=\"@+id/progressBar\"\n            android:max=\"5000\"\n            android:layout_weight=\"1\"/>\n    </LinearLayout>\n\n</com.google.android.material.card.MaterialCardView>\n"
  },
  {
    "path": "app/src/main/res/layout/card_entry_small.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<com.google.android.material.card.MaterialCardView\n    xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:tools=\"http://schemas.android.com/tools\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"wrap_content\"\n    android:elevation=\"0dp\"\n    android:clickable=\"true\"\n    android:focusable=\"true\"\n    android:checkable=\"true\"\n    app:checkedIcon=\"@null\"\n    app:cardElevation=\"0dp\"\n    style=\"@style/Widget.Aegis.EntryCardView\">\n\n    <LinearLayout\n        android:orientation=\"horizontal\"\n        android:id=\"@+id/rlCardEntry\"\n        android:paddingTop=\"5dp\"\n        android:paddingBottom=\"5dp\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\">\n\n        <View\n            android:id=\"@+id/favorite_indicator\"\n            android:layout_width=\"15dp\"\n            android:layout_height=\"match_parent\"\n            android:layout_marginStart=\"-11dp\"\n            android:layout_marginTop=\"4dp\"\n            android:layout_marginBottom=\"4dp\"\n            android:backgroundTint=\"?attr/colorFavorite\"\n            android:background=\"@drawable/favorite_indicator\" />\n\n        <RelativeLayout\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"match_parent\"\n            android:paddingStart=\"14dp\">\n\n            <com.google.android.material.imageview.ShapeableImageView\n                android:id=\"@+id/ivTextDrawable\"\n                android:layout_width=\"45dp\"\n                android:layout_height=\"45dp\"\n                android:layout_centerVertical=\"true\"\n                android:layout_alignParentStart=\"true\"\n                app:shapeAppearanceOverlay=\"@style/ShapeAppearanceOverlay.Aegis.ImageView.Circle\" />\n\n            <com.google.android.material.imageview.ShapeableImageView\n                android:id=\"@+id/ivSelected\"\n                android:layout_width=\"45dp\"\n                android:layout_height=\"45dp\"\n                android:layout_alignParentStart=\"true\"\n                android:layout_centerVertical=\"true\"\n                android:src=\"@drawable/item_selected\"\n                android:visibility=\"gone\"\n                android:background=\"?attr/colorPrimaryAlternative\"\n                app:shapeAppearanceOverlay=\"@style/ShapeAppearanceOverlay.Aegis.ImageView.Circle\" />\n        </RelativeLayout>\n\n        <RelativeLayout\n            android:layout_width=\"0dp\"\n            android:layout_height=\"wrap_content\"\n            android:layout_weight=\"1\"\n            android:gravity=\"bottom\"\n            android:id=\"@+id/relativeLayout\"\n            android:paddingTop=\"8dp\"\n            android:paddingBottom=\"8dp\"\n            android:paddingEnd=\"8dp\"\n            android:paddingLeft=\"8dp\"\n            android:paddingRight=\"8dp\"\n            android:paddingStart=\"8dp\">\n\n        <TextView\n            android:id=\"@+id/profile_copied\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:includeFontPadding=\"false\"\n            android:maxLines=\"1\"\n            android:text=\"@string/copied\"\n            android:layout_alignStart=\"@+id/description\"\n            android:layout_below=\"@id/description\"\n            android:textSize=\"13sp\"\n            android:visibility=\"invisible\" />\n\n        <RelativeLayout\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:id=\"@+id/description\"\n            android:layout_alignStart=\"@+id/profile_codes_layout\">\n\n            <TextView\n                android:layout_width=\"wrap_content\"\n                android:layout_height=\"wrap_content\"\n                android:id=\"@+id/profile_issuer\"\n                android:text=\"@string/issuer\"\n                android:textStyle=\"bold\"\n                android:includeFontPadding=\"false\"\n                android:textSize=\"13sp\"\n                android:ellipsize=\"end\"\n                android:maxLines=\"1\"/>\n\n            <TextView\n                android:id=\"@+id/profile_account_name\"\n                android:layout_width=\"wrap_content\"\n                android:layout_height=\"wrap_content\"\n                android:layout_toEndOf=\"@id/profile_issuer\"\n                android:ellipsize=\"end\"\n                android:includeFontPadding=\"false\"\n                android:maxLines=\"1\"\n                android:textSize=\"13sp\"\n                tools:text=\" - AccountName\" />\n        </RelativeLayout>\n\n            <LinearLayout\n                android:orientation=\"vertical\"\n                android:layout_marginBottom=\"0dp\"\n                android:paddingBottom=\"0dp\"\n                android:id=\"@+id/profile_codes_layout\"\n                android:layout_below=\"@id/description\"\n                android:layout_marginStart=\"6dp\"\n                android:layout_width=\"match_parent\"\n                android:layout_height=\"match_parent\">\n\n                <TextView\n                    android:layout_width=\"wrap_content\"\n                    android:layout_height=\"wrap_content\"\n                    android:textAppearance=\"?android:attr/textAppearanceMedium\"\n                    android:fontFamily=\"sans-serif-light\"\n                    tools:text=\"012 345\"\n                    android:id=\"@+id/profile_code\"\n                    android:layoutDirection=\"ltr\"\n                    android:layout_below=\"@id/description\"\n                    android:includeFontPadding=\"false\"\n                    android:fallbackLineSpacing=\"false\"\n                    android:textSize=\"26sp\"\n                    android:textColor=\"?attr/colorCode\"\n                    android:layout_alignParentStart=\"true\"\n                    android:layout_marginTop=\"0dp\"\n                    android:textStyle=\"normal|bold\"/>\n\n                <TextView\n                    android:id=\"@+id/next_profile_code\"\n                    android:layout_width=\"match_parent\"\n                    android:layout_height=\"wrap_content\"\n                    android:letterSpacing=\"-0.01\"\n                    android:layout_marginTop=\"0dp\"\n                    android:paddingTop=\"0dp\"\n                    android:paddingStart=\"2dp\"\n                    android:textColor=\"?attr/colorOnSurfaceDim\"\n                    android:textSize=\"16sp\"\n                    android:textStyle=\"normal|bold\"\n                    android:fallbackLineSpacing=\"false\"\n                    android:includeFontPadding=\"false\"\n                    tools:text=\"412 643\"/>\n            </LinearLayout>\n\n        </RelativeLayout>\n\n        <LinearLayout\n            android:orientation=\"horizontal\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"match_parent\">\n\n            <ImageView\n                android:id=\"@+id/buttonRefresh\"\n                android:visibility=\"gone\"\n                android:layout_width=\"wrap_content\"\n                android:layout_height=\"wrap_content\"\n                android:layout_gravity=\"center_vertical\"\n                android:layout_marginStart=\"8dp\"\n                android:layout_marginEnd=\"0dp\"\n                android:padding=\"8dp\"\n                android:clickable=\"true\"\n                android:focusable=\"true\"\n                android:src=\"@drawable/ic_outline_refresh_24\"\n                android:background=\"?android:attr/selectableItemBackground\" />\n\n            <ImageView\n                android:id=\"@+id/drag_handle\"\n                android:layout_width=\"24dp\"\n                android:layout_height=\"24dp\"\n                android:layout_gravity=\"center_vertical\"\n                android:layout_marginEnd=\"-12dp\"\n                android:visibility=\"invisible\"\n                android:scaleType=\"fitXY\"\n                android:src=\"@drawable/ic_outline_menu_24\" />\n\n        </LinearLayout>\n\n    </LinearLayout>\n\n    <LinearLayout\n        android:orientation=\"horizontal\"\n        android:padding=\"0dp\"\n        android:layout_margin=\"0dp\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\">\n\n        <com.beemdevelopment.aegis.ui.views.TotpProgressBar\n            style=\"?android:attr/progressBarStyleHorizontal\"\n            android:progressDrawable=\"@drawable/progress_horizontal\"\n            android:layout_width=\"0dp\"\n            android:layout_height=\"3dp\"\n            android:id=\"@+id/progressBar\"\n            android:max=\"5000\"\n            android:layout_weight=\"1\"/>\n    </LinearLayout>\n</com.google.android.material.card.MaterialCardView>\n"
  },
  {
    "path": "app/src/main/res/layout/card_entry_tile.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<com.google.android.material.card.MaterialCardView\n    xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:tools=\"http://schemas.android.com/tools\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"wrap_content\"\n    android:elevation=\"0dp\"\n    android:clickable=\"true\"\n    android:focusable=\"true\"\n    android:checkable=\"true\"\n    app:checkedIcon=\"@null\"\n    app:cardElevation=\"0dp\"\n    style=\"@style/Widget.Aegis.EntryCardView\">\n\n    <LinearLayout\n        android:orientation=\"horizontal\"\n        android:id=\"@+id/rlCardEntry\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\">\n\n        <View\n            android:id=\"@+id/favorite_indicator\"\n            android:layout_width=\"15dp\"\n            android:layout_height=\"match_parent\"\n            android:layout_marginStart=\"-11dp\"\n            android:backgroundTint=\"?attr/colorFavorite\"\n            android:background=\"@drawable/favorite_indicator\" />\n\n        <RelativeLayout\n            android:layout_width=\"0dp\"\n            android:layout_height=\"wrap_content\"\n            android:layout_weight=\"1\"\n            android:gravity=\"bottom\"\n            android:id=\"@+id/relativeLayout\"\n            android:paddingTop=\"12dp\"\n            android:paddingBottom=\"8dp\"\n            android:paddingLeft=\"8dp\"\n            android:paddingStart=\"8dp\">\n\n            <RelativeLayout\n                android:id=\"@+id/layoutImage\"\n                android:orientation=\"horizontal\"\n                android:layout_width=\"wrap_content\"\n                android:layout_height=\"match_parent\">\n\n                    <com.google.android.material.imageview.ShapeableImageView\n                        android:id=\"@+id/ivTextDrawable\"\n                        android:layout_width=\"24dp\"\n                        android:layout_height=\"24dp\"\n                        android:layout_marginEnd=\"6dp\"\n                        android:layout_alignParentStart=\"true\"\n                        app:shapeAppearanceOverlay=\"@style/ShapeAppearanceOverlay.Aegis.ImageView.Circle\" />\n\n                    <com.google.android.material.imageview.ShapeableImageView\n                        android:id=\"@+id/ivSelected\"\n                        android:layout_width=\"24dp\"\n                        android:layout_height=\"24dp\"\n                        android:layout_marginEnd=\"6dp\"\n                        android:layout_alignParentStart=\"true\"\n                        android:src=\"@drawable/item_selected\"\n                        android:visibility=\"gone\"\n                        android:background=\"?attr/colorPrimaryAlternative\"\n                        app:shapeAppearanceOverlay=\"@style/ShapeAppearanceOverlay.Aegis.ImageView.Circle\" />\n            </RelativeLayout>\n\n            <RelativeLayout\n                android:layout_width=\"fill_parent\"\n                android:layout_height=\"24dp\"\n                android:id=\"@+id/description\"\n                android:layout_toEndOf=\"@id/layoutImage\">\n\n                <TextView\n                    android:layout_width=\"wrap_content\"\n                    android:layout_height=\"wrap_content\"\n                    android:id=\"@+id/profile_issuer\"\n                    android:text=\"@string/issuer\"\n                    android:textStyle=\"bold\"\n                    android:includeFontPadding=\"false\"\n                    android:textSize=\"11sp\"\n                    android:ellipsize=\"end\"\n                    android:maxLines=\"1\"/>\n                <TextView\n                    android:id=\"@+id/profile_copied\"\n                    android:layout_width=\"wrap_content\"\n                    android:layout_height=\"wrap_content\"\n                    android:layout_below=\"@id/profile_issuer\"\n                    android:maxLines=\"1\"\n                    android:includeFontPadding=\"false\"\n                    android:visibility=\"invisible\"\n                    android:text=\"@string/copied\"\n                    android:textSize=\"9sp\" />\n                <TextView\n                    android:id=\"@+id/profile_account_name\"\n                    android:layout_width=\"wrap_content\"\n                    android:layout_height=\"wrap_content\"\n                    android:layout_below=\"@id/profile_issuer\"\n                    android:ellipsize=\"end\"\n                    android:includeFontPadding=\"false\"\n                    android:maxLines=\"1\"\n                    android:textSize=\"9sp\"\n                    tools:text=\" - AccountName\" />\n            </RelativeLayout>\n\n            <LinearLayout\n                android:orientation=\"vertical\"\n                android:layout_marginBottom=\"0dp\"\n                android:paddingBottom=\"0dp\"\n                android:id=\"@+id/profile_codes_layout\"\n                android:layout_below=\"@id/description\"\n                android:layout_width=\"match_parent\"\n                android:layout_height=\"match_parent\">\n\n                <TextView\n                    android:layout_width=\"wrap_content\"\n                    android:layout_height=\"wrap_content\"\n                    android:textAppearance=\"?android:attr/textAppearanceMedium\"\n                    android:fontFamily=\"sans-serif-light\"\n                    tools:text=\"012 345\"\n                    android:id=\"@+id/profile_code\"\n                    android:layoutDirection=\"ltr\"\n                    android:layout_below=\"@id/description\"\n                    android:includeFontPadding=\"false\"\n                    android:fallbackLineSpacing=\"false\"\n                    android:textSize=\"26sp\"\n                    android:textColor=\"?attr/colorCode\"\n                    android:layout_alignParentStart=\"true\"\n                    android:layout_marginTop=\"10dp\"\n                    android:textStyle=\"normal|bold\"/>\n\n                <TextView\n                    android:id=\"@+id/next_profile_code\"\n                    android:layout_width=\"match_parent\"\n                    android:layout_height=\"wrap_content\"\n                    android:letterSpacing=\"-0.01\"\n                    android:layout_marginTop=\"0dp\"\n                    android:paddingTop=\"0dp\"\n                    android:paddingStart=\"2dp\"\n                    android:textColor=\"?attr/colorOnSurfaceDim\"\n                    android:textSize=\"16sp\"\n                    android:textStyle=\"normal|bold\"\n                    android:includeFontPadding=\"false\"\n                    android:fallbackLineSpacing=\"false\"\n                    tools:text=\"412 643\"/>\n            </LinearLayout>\n\n        </RelativeLayout>\n\n        <LinearLayout\n            android:orientation=\"horizontal\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"match_parent\">\n\n            <ImageView\n                android:id=\"@+id/buttonRefresh\"\n                android:visibility=\"gone\"\n                android:layout_width=\"wrap_content\"\n                android:layout_height=\"wrap_content\"\n                android:layout_gravity=\"center_vertical\"\n                android:layout_marginStart=\"8dp\"\n                android:layout_marginEnd=\"0dp\"\n                android:padding=\"8dp\"\n                android:clickable=\"true\"\n                android:focusable=\"true\"\n                android:src=\"@drawable/ic_outline_refresh_24\"\n                android:background=\"?android:attr/selectableItemBackground\" />\n\n            <ImageView\n                android:id=\"@+id/drag_handle\"\n                android:layout_width=\"24dp\"\n                android:layout_height=\"24dp\"\n                android:layout_gravity=\"center_vertical\"\n                android:layout_marginEnd=\"-12dp\"\n                android:visibility=\"invisible\"\n                android:scaleType=\"fitXY\"\n                android:src=\"@drawable/ic_outline_menu_24\" />\n\n        </LinearLayout>\n\n    </LinearLayout>\n\n    <LinearLayout\n        android:orientation=\"horizontal\"\n        android:padding=\"0dp\"\n        android:layout_margin=\"0dp\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\">\n\n        <com.beemdevelopment.aegis.ui.views.TotpProgressBar\n            style=\"?android:attr/progressBarStyleHorizontal\"\n            android:progressDrawable=\"@drawable/progress_horizontal\"\n            android:layout_width=\"0dp\"\n            android:layout_height=\"3dp\"\n            android:id=\"@+id/progressBar\"\n            android:max=\"5000\"\n            android:layout_weight=\"1\"/>\n    </LinearLayout>\n\n</com.google.android.material.card.MaterialCardView>\n"
  },
  {
    "path": "app/src/main/res/layout/card_error.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<com.google.android.material.card.MaterialCardView\n    xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    android:id=\"@+id/card_error\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"wrap_content\"\n    android:orientation=\"horizontal\"\n    android:clickable=\"true\"\n    android:focusable=\"true\"\n    android:paddingHorizontal=\"10dp\"\n    android:paddingVertical=\"10dp\"\n    style=\"@style/Widget.Aegis.ErrorCardView\">\n    <LinearLayout\n        android:paddingHorizontal=\"16dp\"\n        android:paddingVertical=\"16dp\"\n        android:gravity=\"center_vertical\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\">\n    <ImageView\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        app:tint=\"?attr/colorOnErrorContainer\"\n        android:src=\"@drawable/ic_outline_error_24\" />\n    <TextView\n        android:id=\"@+id/text_error_bar\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:textColor=\"?attr/colorOnErrorContainer\"\n        android:textStyle=\"bold\"\n        android:layout_marginStart=\"5dp\" />\n    </LinearLayout>\n</com.google.android.material.card.MaterialCardView>\n"
  },
  {
    "path": "app/src/main/res/layout/card_footer.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<RelativeLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"wrap_content\">\n\n    <TextView\n        android:id=\"@+id/entries_shown_count\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:padding=\"4dp\"\n        android:layout_centerInParent=\"true\"\n        android:textSize=\"14sp\" />\n\n</RelativeLayout>"
  },
  {
    "path": "app/src/main/res/layout/card_group.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"wrap_content\"\n    android:background=\"?android:attr/colorBackground\"\n    android:orientation=\"horizontal\">\n\n    <LinearLayout\n        android:layout_width=\"0dp\"\n        android:layout_height=\"wrap_content\"\n        android:layout_weight=\"1\"\n        android:baselineAligned=\"false\"\n        android:clickable=\"true\"\n        android:focusable=\"true\"\n        android:orientation=\"horizontal\"\n        android:paddingStart=\"10dp\"\n        android:paddingEnd=\"10dp\"\n        android:paddingTop=\"12.5dp\"\n        android:paddingBottom=\"12.5dp\"\n        android:background=\"?android:attr/selectableItemBackground\">\n\n        <TextView\n            android:id=\"@+id/text_group_name\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"wrap_content\"\n            android:text=\"@string/group_name_hint\"\n            android:textAppearance=\"?android:attr/textAppearanceMedium\"\n            android:textColor=\"?android:attr/textColorPrimary\" />\n\n    </LinearLayout>\n\n    <ImageView\n        android:id=\"@+id/button_edit\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"match_parent\"\n        android:clickable=\"true\"\n        android:contentDescription=\"@string/rename_group\"\n        android:focusable=\"true\"\n        android:background=\"?android:attr/selectableItemBackground\"\n        android:paddingStart=\"15dp\"\n        android:paddingTop=\"12.5dp\"\n        android:paddingEnd=\"15dp\"\n        android:paddingBottom=\"12.5dp\"\n        android:src=\"@drawable/ic_outline_edit_24\" />\n\n    <View\n        android:layout_width=\"1dp\"\n        android:layout_height=\"match_parent\"\n        android:background=\"@android:color/darker_gray\"\n        android:paddingStart=\"15dp\"\n        android:paddingEnd=\"15dp\"\n        android:layout_marginTop=\"12.5dp\"\n        android:layout_marginBottom=\"12.5dp\" />\n\n    <ImageView\n        android:id=\"@+id/button_delete\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"match_parent\"\n        android:clickable=\"true\"\n        android:contentDescription=\"@string/remove_group\"\n        android:focusable=\"true\"\n        android:background=\"?android:attr/selectableItemBackground\"\n        android:paddingStart=\"15dp\"\n        android:paddingTop=\"12.5dp\"\n        android:paddingEnd=\"15dp\"\n        android:paddingBottom=\"12.5dp\"\n        android:src=\"@drawable/ic_outline_delete_24\"\n        app:tint=\"?attr/colorError\" />\n\n</LinearLayout>\n"
  },
  {
    "path": "app/src/main/res/layout/card_icon.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:padding=\"5dp\"\n    android:layout_width=\"75dp\"\n    android:layout_height=\"wrap_content\"\n    android:clickable=\"true\"\n    android:focusable=\"true\"\n    android:background=\"?android:attr/selectableItemBackground\"\n    android:orientation=\"vertical\">\n    <ImageView\n        android:id=\"@+id/icon\"\n        android:layout_height=\"75dp\"\n        android:layout_width=\"match_parent\"/>\n    <TextView\n        android:id=\"@+id/icon_name\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:gravity=\"center\" />\n</LinearLayout>\n"
  },
  {
    "path": "app/src/main/res/layout/card_icon_category.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    android:paddingVertical=\"5dp\"\n    android:paddingStart=\"5dp\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"wrap_content\"\n    android:orientation=\"horizontal\"\n    android:clickable=\"true\"\n    android:focusable=\"true\"\n    android:background=\"?android:attr/selectableItemBackground\">\n    <TextView\n        android:id=\"@+id/icon_category\"\n        android:layout_width=\"0dp\"\n        android:layout_height=\"wrap_content\"\n        android:layout_weight=\"1\"\n        android:textSize=\"15sp\" />\n    <ImageView\n        android:id=\"@+id/icon_category_indicator\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:src=\"@drawable/ic_outline_expand_more_24\"\n        app:tint=\"?attr/colorOnSurfaceVariant\"\n        android:layout_gravity=\"center_vertical\" />\n</LinearLayout>\n"
  },
  {
    "path": "app/src/main/res/layout/card_icon_pack.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\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\n    <LinearLayout\n        android:id=\"@+id/button_edit\"\n        android:layout_width=\"0dp\"\n        android:layout_height=\"wrap_content\"\n        android:layout_weight=\"1\"\n        android:clickable=\"true\"\n        android:focusable=\"true\"\n        android:orientation=\"horizontal\"\n        android:paddingStart=\"10dp\"\n        android:paddingEnd=\"10dp\"\n        android:paddingTop=\"12.5dp\"\n        android:paddingBottom=\"12.5dp\"\n        android:foreground=\"?android:attr/selectableItemBackground\">\n\n        <LinearLayout\n            android:layout_width=\"0dp\"\n            android:layout_height=\"wrap_content\"\n            android:layout_weight=\"1\"\n            android:orientation=\"vertical\">\n\n            <TextView\n                android:id=\"@+id/text_icon_pack_name\"\n                android:layout_width=\"wrap_content\"\n                android:layout_height=\"wrap_content\"\n                android:textSize=\"16sp\"\n                android:textColor=\"?android:attr/textColorPrimary\" />\n\n            <TextView\n                android:id=\"@+id/text_icon_pack_info\"\n                android:layout_width=\"wrap_content\"\n                android:layout_height=\"wrap_content\"\n                android:textSize=\"14sp\"\n                android:textAppearance=\"@style/TextAppearance.Material3.BodySmall\" />\n\n        </LinearLayout>\n\n    </LinearLayout>\n\n    <View\n        android:layout_width=\"1dp\"\n        android:layout_height=\"match_parent\"\n        android:background=\"@android:color/darker_gray\"\n        android:paddingStart=\"15dp\"\n        android:paddingEnd=\"15dp\"\n        android:layout_marginTop=\"12.5dp\"\n        android:layout_marginBottom=\"12.5dp\"/>\n\n    <ImageView\n        android:id=\"@+id/button_delete\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"match_parent\"\n        android:clickable=\"true\"\n        android:focusable=\"true\"\n        android:foreground=\"?android:attr/selectableItemBackground\"\n        android:paddingStart=\"15dp\"\n        android:paddingTop=\"12.5dp\"\n        android:paddingEnd=\"15dp\"\n        android:paddingBottom=\"12.5dp\"\n        android:src=\"@drawable/ic_outline_delete_24\" />\n\n</LinearLayout>\n"
  },
  {
    "path": "app/src/main/res/layout/card_import_entry.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\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:foreground=\"?android:attr/selectableItemBackground\"\n    android:clickable=\"true\"\n    android:focusable=\"true\"\n    android:orientation=\"horizontal\">\n    <LinearLayout\n        android:layout_weight=\"1\"\n        android:layout_width=\"0dp\"\n        android:layout_height=\"wrap_content\"\n        android:orientation=\"vertical\"\n        android:padding=\"16dp\"\n        android:layout_gravity=\"center_vertical\">\n        <TextView\n            android:id=\"@+id/profile_issuer\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:fontFamily=\"sans-serif-light\"\n            android:textAppearance=\"?android:attr/textAppearanceMedium\"\n            android:textSize=\"18sp\"\n            android:textStyle=\"normal|bold\"\n            android:gravity=\"center_vertical\"\n            tools:text=\"@string/issuer\" />\n        <TextView\n            android:id=\"@+id/profile_account_name\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:layout_marginTop=\"2dp\"\n            android:ellipsize=\"end\"\n            android:maxLines=\"1\"\n            android:textSize=\"14sp\"\n            tools:text=\"AccountName\" />\n    </LinearLayout>\n    <CheckBox\n        android:id=\"@+id/checkbox_import_entry\"\n        android:clickable=\"false\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:layout_gravity=\"center_vertical\"/>\n</LinearLayout>\n"
  },
  {
    "path": "app/src/main/res/layout/card_importer.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<CheckedTextView\n    xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\"\n    android:gravity=\"center_vertical\"\n    android:checkMark=\"?android:attr/listChoiceIndicatorSingle\">\n</CheckedTextView>\n"
  },
  {
    "path": "app/src/main/res/layout/chip_group_filter.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<com.google.android.material.chip.Chip xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    style=\"@style/Widget.Material3.Chip.Filter\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\" />"
  },
  {
    "path": "app/src/main/res/layout/content_about.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout 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:orientation=\"vertical\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"wrap_content\"\n    android:padding=\"8dp\"\n    app:cardUseCompatPadding=\"true\">\n\n    <com.google.android.material.card.MaterialCardView\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:layout_marginBottom=\"8dp\"\n        app:cardUseCompatPadding=\"true\"\n        style=\"?attr/materialCardViewOutlinedStyle\">\n\n        <LinearLayout\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"wrap_content\"\n            android:paddingBottom=\"8dp\"\n            android:orientation=\"vertical\">\n\n            <LinearLayout\n                android:layout_width=\"match_parent\"\n                android:layout_height=\"wrap_content\"\n                android:orientation=\"horizontal\"\n                android:background=\"?attr/selectableItemBackground\"\n                android:padding=\"16dp\">\n\n                <ImageView\n                    android:layout_width=\"35dp\"\n                    android:layout_height=\"35dp\"\n                    android:layout_gravity=\"center_vertical\"\n                    android:src=\"@mipmap/ic_launcher\"\n                    tools:ignore=\"ContentDescription\" />\n\n                <TextView\n                    android:layout_width=\"wrap_content\"\n                    android:layout_height=\"wrap_content\"\n                    android:layout_gravity=\"center_vertical\"\n                    android:paddingLeft=\"16dp\"\n                    android:paddingRight=\"16dp\"\n                    android:text=\"@string/app_name_full\"\n                    android:textAppearance=\"@style/TextAppearance.AppCompat.Headline\" />\n\n            </LinearLayout>\n\n            <LinearLayout\n                android:id=\"@+id/btn_app_version\"\n                android:layout_width=\"match_parent\"\n                android:layout_height=\"wrap_content\"\n                android:background=\"?attr/selectableItemBackground\"\n                android:clickable=\"true\"\n                android:gravity=\"center_vertical\"\n                android:orientation=\"horizontal\"\n                android:paddingLeft=\"16dp\"\n                android:paddingRight=\"16dp\"\n                android:focusable=\"true\">\n\n                <ImageView\n                    android:layout_width=\"wrap_content\"\n                    android:layout_height=\"wrap_content\"\n                    android:importantForAccessibility=\"no\"\n                    android:src=\"@drawable/ic_outline_info_24\" />\n\n                <LinearLayout\n                    android:layout_width=\"match_parent\"\n                    android:layout_height=\"wrap_content\"\n                    android:layout_marginStart=\"28dp\"\n                    android:orientation=\"vertical\"\n                    android:paddingTop=\"8dp\"\n                    android:paddingBottom=\"8dp\">\n\n                    <TextView\n                        android:layout_width=\"wrap_content\"\n                        android:layout_height=\"wrap_content\"\n                        android:text=\"@string/version\"\n                        android:textAppearance=\"@style/TextAppearance.AppCompat.Subhead\" />\n\n                    <TextView\n                        android:id=\"@+id/app_version\"\n                        android:layout_width=\"wrap_content\"\n                        android:layout_height=\"wrap_content\"\n                        android:text=\"0.0.0 (0)\"\n                        android:textAppearance=\"@style/TextAppearance.AppCompat.Caption\"\n                        tools:ignore=\"HardcodedText\" />\n                </LinearLayout>\n\n            </LinearLayout>\n\n            <LinearLayout\n                android:id=\"@+id/btn_changelog\"\n                android:layout_width=\"match_parent\"\n                android:layout_height=\"wrap_content\"\n                android:background=\"?attr/selectableItemBackground\"\n                android:clickable=\"true\"\n                android:gravity=\"center_vertical\"\n                android:orientation=\"horizontal\"\n                android:paddingLeft=\"16dp\"\n                android:paddingRight=\"16dp\"\n                android:focusable=\"true\">\n\n                <ImageView\n                    android:layout_width=\"wrap_content\"\n                    android:layout_height=\"wrap_content\"\n                    android:importantForAccessibility=\"no\"\n                    android:src=\"@drawable/ic_outline_history_24\" />\n\n                <LinearLayout\n                    android:layout_width=\"match_parent\"\n                    android:layout_height=\"wrap_content\"\n                    android:layout_marginStart=\"28dp\"\n                    android:orientation=\"vertical\"\n                    android:paddingTop=\"8dp\"\n                    android:paddingBottom=\"8dp\">\n\n                    <TextView\n                        android:layout_width=\"wrap_content\"\n                        android:layout_height=\"wrap_content\"\n                        android:text=\"@string/changelog\"\n                        android:textAppearance=\"@style/TextAppearance.AppCompat.Subhead\" />\n\n                    <TextView\n                        android:layout_width=\"wrap_content\"\n                        android:layout_height=\"wrap_content\"\n                        android:text=\"@string/whats_new\"\n                        android:textAppearance=\"@style/TextAppearance.AppCompat.Caption\" />\n                </LinearLayout>\n            </LinearLayout>\n\n            <LinearLayout\n                android:id=\"@+id/btn_github\"\n                android:layout_width=\"match_parent\"\n                android:layout_height=\"wrap_content\"\n                android:background=\"?attr/selectableItemBackground\"\n                android:clickable=\"true\"\n                android:gravity=\"center_vertical\"\n                android:orientation=\"horizontal\"\n                android:paddingLeft=\"16dp\"\n                android:paddingRight=\"16dp\"\n                android:focusable=\"true\">\n\n                <ImageView\n                    android:layout_width=\"wrap_content\"\n                    android:layout_height=\"wrap_content\"\n                    android:importantForAccessibility=\"no\"\n                    android:src=\"@drawable/ic_outline_code_24\" />\n\n                <LinearLayout\n                    android:layout_width=\"match_parent\"\n                    android:layout_height=\"wrap_content\"\n                    android:layout_marginStart=\"28dp\"\n                    android:orientation=\"vertical\"\n                    android:paddingTop=\"8dp\"\n                    android:paddingBottom=\"8dp\">\n\n                    <TextView\n                        android:layout_width=\"wrap_content\"\n                        android:layout_height=\"wrap_content\"\n                        android:text=\"@string/github\"\n                        android:textAppearance=\"@style/TextAppearance.AppCompat.Subhead\" />\n\n                    <TextView\n                        android:layout_width=\"wrap_content\"\n                        android:layout_height=\"wrap_content\"\n                        android:text=\"@string/github_description\"\n                        android:textAppearance=\"@style/TextAppearance.AppCompat.Caption\" />\n                </LinearLayout>\n            </LinearLayout>\n\n            <LinearLayout\n                android:id=\"@+id/btn_license\"\n                android:layout_width=\"match_parent\"\n                android:layout_height=\"wrap_content\"\n                android:background=\"?attr/selectableItemBackground\"\n                android:clickable=\"true\"\n                android:gravity=\"center_vertical\"\n                android:orientation=\"horizontal\"\n                android:paddingLeft=\"16dp\"\n                android:paddingRight=\"16dp\"\n                android:focusable=\"true\">\n\n                <ImageView\n                    android:layout_width=\"wrap_content\"\n                    android:layout_height=\"wrap_content\"\n                    android:importantForAccessibility=\"no\"\n                    android:src=\"@drawable/ic_outline_description_24\" />\n\n                <LinearLayout\n                    android:layout_width=\"match_parent\"\n                    android:layout_height=\"wrap_content\"\n                    android:layout_marginStart=\"28dp\"\n                    android:orientation=\"vertical\"\n                    android:paddingTop=\"8dp\"\n                    android:paddingBottom=\"8dp\">\n\n                    <TextView\n                        android:layout_width=\"wrap_content\"\n                        android:layout_height=\"wrap_content\"\n                        android:text=\"@string/license\"\n                        android:textAppearance=\"@style/TextAppearance.AppCompat.Subhead\" />\n\n                    <TextView\n                        android:layout_width=\"wrap_content\"\n                        android:layout_height=\"wrap_content\"\n                        android:text=\"@string/license_description\"\n                        android:textAppearance=\"@style/TextAppearance.AppCompat.Caption\" />\n                </LinearLayout>\n\n            </LinearLayout>\n\n            <LinearLayout\n                android:id=\"@+id/btn_third_party_licenses\"\n                android:layout_width=\"match_parent\"\n                android:layout_height=\"wrap_content\"\n                android:background=\"?attr/selectableItemBackground\"\n                android:clickable=\"true\"\n                android:gravity=\"center_vertical\"\n                android:orientation=\"horizontal\"\n                android:paddingLeft=\"16dp\"\n                android:paddingRight=\"16dp\"\n                android:focusable=\"true\">\n\n                <ImageView\n                    android:layout_width=\"wrap_content\"\n                    android:layout_height=\"wrap_content\"\n                    android:importantForAccessibility=\"no\"\n                    android:src=\"@drawable/ic_outline_description_24\" />\n\n                <LinearLayout\n                    android:layout_width=\"match_parent\"\n                    android:layout_height=\"wrap_content\"\n                    android:layout_marginStart=\"28dp\"\n                    android:orientation=\"vertical\"\n                    android:paddingTop=\"8dp\"\n                    android:paddingBottom=\"8dp\">\n\n                    <TextView\n                        android:layout_width=\"wrap_content\"\n                        android:layout_height=\"wrap_content\"\n                        android:text=\"@string/third_party_licenses\"\n                        android:textAppearance=\"@style/TextAppearance.AppCompat.Subhead\" />\n\n                    <TextView\n                        android:layout_width=\"wrap_content\"\n                        android:layout_height=\"wrap_content\"\n                        android:text=\"@string/third_party_licenses_description\"\n                        android:textAppearance=\"@style/TextAppearance.AppCompat.Caption\" />\n                </LinearLayout>\n\n            </LinearLayout>\n\n        </LinearLayout>\n\n    </com.google.android.material.card.MaterialCardView>\n\n    <com.google.android.material.card.MaterialCardView\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:layout_marginBottom=\"8dp\"\n        app:cardUseCompatPadding=\"true\"\n        style=\"?attr/materialCardViewOutlinedStyle\">\n\n        <LinearLayout\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"wrap_content\"\n            android:paddingBottom=\"8dp\"\n            android:orientation=\"vertical\">\n\n            <TextView\n                android:layout_width=\"wrap_content\"\n                android:layout_height=\"wrap_content\"\n                android:layout_gravity=\"start|center_vertical\"\n                android:paddingLeft=\"16dp\"\n                android:paddingTop=\"24dp\"\n                android:paddingRight=\"16dp\"\n                android:paddingBottom=\"16dp\"\n                android:text=\"@string/org_name_full\"\n                android:textAppearance=\"@style/TextAppearance.AppCompat.Body2\"\n                android:textColor=\"?android:textColorSecondary\" />\n\n            <LinearLayout\n                android:id=\"@+id/btn_alexander\"\n                android:layout_width=\"match_parent\"\n                android:layout_height=\"wrap_content\"\n                android:background=\"?attr/selectableItemBackground\"\n                android:clickable=\"true\"\n                android:gravity=\"center_vertical\"\n                android:minHeight=\"@dimen/list_item_height\"\n                android:orientation=\"horizontal\"\n                android:paddingLeft=\"16dp\"\n                android:paddingRight=\"16dp\"\n                android:focusable=\"true\">\n\n                <ImageView\n                    android:layout_width=\"wrap_content\"\n                    android:layout_height=\"wrap_content\"\n                    android:importantForAccessibility=\"no\"\n                    android:src=\"@drawable/ic_outline_person_24\" />\n\n                <LinearLayout\n                    android:layout_width=\"match_parent\"\n                    android:layout_height=\"wrap_content\"\n                    android:layout_marginStart=\"28dp\"\n                    android:orientation=\"vertical\"\n                    android:paddingTop=\"8dp\"\n                    android:paddingBottom=\"8dp\">\n\n                    <TextView\n                        android:layout_width=\"wrap_content\"\n                        android:layout_height=\"wrap_content\"\n                        android:text=\"@string/author_alex\"\n                        android:textAppearance=\"@style/TextAppearance.AppCompat.Subhead\" />\n\n                    <TextView\n                        android:layout_width=\"wrap_content\"\n                        android:layout_height=\"wrap_content\"\n                        android:text=\"@string/country_netherlands\"\n                        android:textAppearance=\"@style/TextAppearance.AppCompat.Caption\" />\n\n                </LinearLayout>\n\n            </LinearLayout>\n\n            <LinearLayout\n                android:id=\"@+id/btn_michael\"\n                android:layout_width=\"match_parent\"\n                android:layout_height=\"wrap_content\"\n                android:background=\"?attr/selectableItemBackground\"\n                android:clickable=\"true\"\n                android:gravity=\"center_vertical\"\n                android:minHeight=\"@dimen/list_item_height\"\n                android:orientation=\"horizontal\"\n                android:paddingLeft=\"16dp\"\n                android:paddingRight=\"16dp\"\n                android:focusable=\"true\">\n\n                <ImageView\n                    android:layout_width=\"wrap_content\"\n                    android:layout_height=\"wrap_content\"\n                    android:importantForAccessibility=\"no\"\n                    android:src=\"@drawable/ic_outline_person_24\" />\n\n                <LinearLayout\n                    android:layout_width=\"match_parent\"\n                    android:layout_height=\"wrap_content\"\n                    android:layout_marginStart=\"28dp\"\n                    android:orientation=\"vertical\"\n                    android:paddingTop=\"8dp\"\n                    android:paddingBottom=\"8dp\">\n\n                    <TextView\n                        android:layout_width=\"wrap_content\"\n                        android:layout_height=\"wrap_content\"\n                        android:text=\"@string/author_michael\"\n                        android:textAppearance=\"@style/TextAppearance.AppCompat.Subhead\" />\n\n                    <TextView\n                        android:layout_width=\"wrap_content\"\n                        android:layout_height=\"wrap_content\"\n                        android:text=\"@string/country_netherlands\"\n                        android:textAppearance=\"@style/TextAppearance.AppCompat.Caption\" />\n\n                </LinearLayout>\n\n            </LinearLayout>\n\n            <LinearLayout\n                android:id=\"@+id/btn_email\"\n                android:layout_width=\"match_parent\"\n                android:layout_height=\"wrap_content\"\n                android:background=\"?attr/selectableItemBackground\"\n                android:clickable=\"true\"\n                android:gravity=\"center_vertical\"\n                android:minHeight=\"@dimen/list_item_height\"\n                android:orientation=\"horizontal\"\n                android:paddingLeft=\"16dp\"\n                android:paddingRight=\"16dp\"\n                android:focusable=\"true\">\n\n                <ImageView\n                    android:layout_width=\"wrap_content\"\n                    android:layout_height=\"wrap_content\"\n                    android:importantForAccessibility=\"no\"\n                    android:src=\"@drawable/ic_outline_mail_24\" />\n\n                <TextView\n                    android:layout_width=\"wrap_content\"\n                    android:layout_height=\"wrap_content\"\n                    android:layout_marginStart=\"28dp\"\n                    android:paddingTop=\"8dp\"\n                    android:paddingBottom=\"8dp\"\n                    android:text=\"@string/email_us\"\n                    android:textAppearance=\"@style/TextAppearance.AppCompat.Subhead\" />\n\n            </LinearLayout>\n\n            <LinearLayout\n                android:id=\"@+id/btn_website\"\n                android:layout_width=\"match_parent\"\n                android:layout_height=\"wrap_content\"\n                android:background=\"?attr/selectableItemBackground\"\n                android:clickable=\"true\"\n                android:gravity=\"center_vertical\"\n                android:minHeight=\"@dimen/list_item_height\"\n                android:orientation=\"horizontal\"\n                android:paddingLeft=\"16dp\"\n                android:paddingRight=\"16dp\"\n                android:focusable=\"true\">\n\n                <ImageView\n                    android:layout_width=\"wrap_content\"\n                    android:layout_height=\"wrap_content\"\n                    android:importantForAccessibility=\"no\"\n                    android:src=\"@drawable/ic_outline_public_24\" />\n\n                <TextView\n                    android:layout_width=\"wrap_content\"\n                    android:layout_height=\"wrap_content\"\n                    android:layout_marginStart=\"28dp\"\n                    android:paddingTop=\"8dp\"\n                    android:paddingBottom=\"8dp\"\n                    android:text=\"@string/visit_website\"\n                    android:textAppearance=\"@style/TextAppearance.AppCompat.Subhead\" />\n\n            </LinearLayout>\n\n        </LinearLayout>\n    </com.google.android.material.card.MaterialCardView>\n\n    <com.google.android.material.card.MaterialCardView\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:layout_marginBottom=\"8dp\"\n        app:cardUseCompatPadding=\"true\"\n        style=\"?attr/materialCardViewOutlinedStyle\">\n\n        <LinearLayout\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"wrap_content\"\n            android:paddingBottom=\"8dp\"\n            android:orientation=\"vertical\">\n\n            <TextView\n                android:layout_width=\"wrap_content\"\n                android:layout_height=\"wrap_content\"\n                android:layout_gravity=\"start|center_vertical\"\n                android:paddingLeft=\"16dp\"\n                android:paddingTop=\"24dp\"\n                android:paddingRight=\"16dp\"\n                android:paddingBottom=\"16dp\"\n                android:text=\"@string/about_support\"\n                android:textAppearance=\"@style/TextAppearance.AppCompat.Body2\"\n                android:textColor=\"?android:textColorSecondary\" />\n\n            <LinearLayout\n                android:id=\"@+id/btn_rate\"\n                android:layout_width=\"match_parent\"\n                android:layout_height=\"wrap_content\"\n                android:background=\"?attr/selectableItemBackground\"\n                android:clickable=\"true\"\n                android:gravity=\"center_vertical\"\n                android:minHeight=\"@dimen/list_item_height\"\n                android:orientation=\"horizontal\"\n                android:paddingLeft=\"16dp\"\n                android:paddingRight=\"16dp\"\n                android:focusable=\"true\">\n\n                <ImageView\n                    android:layout_width=\"wrap_content\"\n                    android:layout_height=\"wrap_content\"\n                    android:importantForAccessibility=\"no\"\n                    android:src=\"@drawable/ic_outline_star_24\" />\n\n                <LinearLayout\n                    android:layout_width=\"match_parent\"\n                    android:layout_height=\"wrap_content\"\n                    android:layout_marginStart=\"28dp\"\n                    android:orientation=\"vertical\"\n                    android:paddingTop=\"8dp\"\n                    android:paddingBottom=\"8dp\">\n\n                    <TextView\n                        android:layout_width=\"wrap_content\"\n                        android:layout_height=\"wrap_content\"\n                        android:text=\"@string/support_rate\"\n                        android:textAppearance=\"@style/TextAppearance.AppCompat.Subhead\" />\n\n                    <TextView\n                        android:layout_width=\"wrap_content\"\n                        android:layout_height=\"wrap_content\"\n                        android:text=\"@string/support_rate_description\"\n                        android:textAppearance=\"@style/TextAppearance.AppCompat.Caption\" />\n\n                </LinearLayout>\n\n            </LinearLayout>\n\n        </LinearLayout>\n    </com.google.android.material.card.MaterialCardView>\n\n</LinearLayout>\n"
  },
  {
    "path": "app/src/main/res/layout/dialog_add_entry.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout\n    xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\"\n    android:orientation=\"vertical\">\n    <com.google.android.material.bottomsheet.BottomSheetDragHandleView\n        android:id=\"@+id/drag_handle\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\" />\n    <TextView\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:gravity=\"center\"\n        android:text=\"@string/add_new_entry\"\n        android:textSize=\"20sp\" />\n    <LinearLayout\n        android:id=\"@+id/fab_scan\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"65dp\"\n        android:paddingHorizontal=\"15dp\"\n        android:paddingTop=\"15dp\"\n        android:paddingBottom=\"7.5dp\"\n        android:orientation=\"horizontal\"\n        android:clickable=\"true\"\n        android:focusable=\"true\"\n        android:background=\"?android:attr/selectableItemBackground\">\n        <ImageView\n            android:layout_width=\"25dp\"\n            android:layout_height=\"match_parent\"\n            android:src=\"@drawable/ic_qrcode_scan\"\n            app:tint=\"?attr/colorOnSurfaceVariant\" />\n        <TextView\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"match_parent\"\n            android:text=\"@string/scan\"\n            android:textSize=\"17sp\"\n            android:gravity=\"center_vertical\"\n            android:layout_marginStart=\"20dp\" />\n    </LinearLayout>\n    <LinearLayout\n        android:id=\"@+id/fab_scan_image\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"65dp\"\n        android:paddingHorizontal=\"15dp\"\n        android:paddingTop=\"7.5dp\"\n        android:paddingBottom=\"7.5dp\"\n        android:orientation=\"horizontal\"\n        android:clickable=\"true\"\n        android:focusable=\"true\"\n        android:background=\"?android:attr/selectableItemBackground\">\n        <ImageView\n            android:layout_width=\"25dp\"\n            android:layout_height=\"match_parent\"\n            android:src=\"@drawable/ic_outline_add_photo_alternate_24\"\n            app:tint=\"?attr/colorOnSurfaceVariant\" />\n        <TextView\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"match_parent\"\n            android:text=\"@string/scan_image\"\n            android:textSize=\"17sp\"\n            android:gravity=\"center_vertical\"\n            android:layout_marginStart=\"20dp\" />\n    </LinearLayout>\n    <LinearLayout\n        android:id=\"@+id/fab_enter\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"65dp\"\n        android:paddingHorizontal=\"15dp\"\n        android:paddingTop=\"7.5dp\"\n        android:paddingBottom=\"15dp\"\n        android:orientation=\"horizontal\"\n        android:clickable=\"true\"\n        android:focusable=\"true\"\n        android:background=\"?android:attr/selectableItemBackground\">\n        <ImageView\n            android:layout_width=\"25dp\"\n            android:layout_height=\"match_parent\"\n            android:src=\"@drawable/ic_outline_edit_24\"\n            app:tint=\"?attr/colorOnSurfaceVariant\" />\n        <TextView\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"match_parent\"\n            android:text=\"@string/enter_manually\"\n            android:textSize=\"17sp\"\n            android:gravity=\"center_vertical\"\n            android:layout_marginStart=\"20dp\" />\n    </LinearLayout>\n</LinearLayout>\n"
  },
  {
    "path": "app/src/main/res/layout/dialog_backups_versioning_strategy.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\"\n    android:paddingStart=\"20dp\"\n    android:paddingTop=\"20dp\"\n    android:paddingEnd=\"20dp\"\n    android:orientation=\"vertical\">\n\n    <RadioGroup\n        android:id=\"@+id/radio_group\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\">\n\n        <RadioButton\n            android:id=\"@+id/keep_x_versions_button\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"wrap_content\"\n            android:text=\"@string/pref_backups_versioning_strategy_keep_x_versions\" />\n\n        <RadioButton\n            android:id=\"@+id/single_backup_button\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"wrap_content\"\n            android:text=\"@string/pref_backups_versioning_strategy_single_backup\" />\n\n    </RadioGroup>\n\n    <TextView\n        android:id=\"@+id/warning_text\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:paddingStart=\"5dp\"\n        android:paddingEnd=\"5dp\"\n        android:text=\"@string/pref_backups_versioning_strategy_single_backup_warning\"\n        android:textColor=\"?attr/colorError\" />\n\n    <CheckBox\n        android:id=\"@+id/risk_accept\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:text=\"@string/understand_risk_accept\" />\n\n</LinearLayout>"
  },
  {
    "path": "app/src/main/res/layout/dialog_checkbox.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:orientation=\"vertical\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\"\n    android:paddingStart=\"20dp\"\n    android:paddingEnd=\"20dp\"\n    android:paddingTop=\"20dp\">\n    <CheckBox\n        android:id=\"@+id/checkbox\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\">\n        <requestFocus/>\n    </CheckBox>\n</LinearLayout>\n"
  },
  {
    "path": "app/src/main/res/layout/dialog_delete_entry.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<ScrollView\n    xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\" >\n    <LinearLayout\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:paddingStart=\"25dp\"\n        android:paddingBottom=\"10dp\"\n        android:paddingEnd=\"25dp\"\n        android:paddingTop=\"10dp\"\n        android:orientation=\"vertical\">\n        <TextView\n            android:id=\"@+id/text_message\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:textSize=\"16sp\"/>\n        <TextView\n            android:id=\"@+id/text_explanation\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:layout_marginTop=\"10dp\"\n            android:textSize=\"16sp\"/>\n    </LinearLayout>\n</ScrollView>\n"
  },
  {
    "path": "app/src/main/res/layout/dialog_duplicate_entry.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout\n    xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"wrap_content\"\n    android:orientation=\"vertical\"\n    android:padding=\"20dp\">\n\n    <TextView\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:gravity=\"center\"\n        android:paddingTop=\"16dp\"\n        android:text=\"@string/dialog_duplicate_entry_title\"\n        android:textSize=\"20sp\" />\n\n    <TextView\n        android:id=\"@+id/duplicate_warning_text\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:text=\"@string/dialog_duplicate_entry_message\"\n        android:textSize=\"16sp\"\n        android:textColor=\"?android:attr/textColorPrimary\"\n        android:paddingTop=\"10dp\"\n        android:paddingBottom=\"20dp\" />\n\n    <LinearLayout\n        android:id=\"@+id/overwrite_entry\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:orientation=\"horizontal\"\n        android:paddingVertical=\"15dp\"\n        android:paddingHorizontal=\"10dp\"\n        android:background=\"?android:attr/selectableItemBackground\"\n        android:clickable=\"true\"\n        android:focusable=\"true\">\n\n        <ImageView\n            android:layout_width=\"24dp\"\n            android:layout_height=\"24dp\"\n            android:layout_gravity=\"center_vertical\"\n            android:src=\"@drawable/ic_outline_brush_24\"\n            app:tint=\"?attr/colorOnSurfaceVariant\" />\n\n        <LinearLayout\n            android:layout_width=\"0dp\"\n            android:layout_height=\"wrap_content\"\n            android:layout_weight=\"1\"\n            android:orientation=\"vertical\"\n            android:layout_marginStart=\"16dp\">\n\n            <TextView\n                android:layout_width=\"wrap_content\"\n                android:layout_height=\"wrap_content\"\n                android:text=\"@string/dialog_duplicate_entry_overwrite_title\"\n                android:textSize=\"17sp\"\n                android:textStyle=\"bold\" />\n\n            <TextView\n                android:layout_width=\"wrap_content\"\n                android:layout_height=\"wrap_content\"\n                android:text=\"@string/dialog_duplicate_entry_overwrite_subtitle\"\n                android:textSize=\"14sp\"\n                android:textColor=\"?attr/colorOnSurfaceVariant\" />\n        </LinearLayout>\n    </LinearLayout>\n\n    <LinearLayout\n        android:id=\"@+id/create_new_entry\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:orientation=\"horizontal\"\n        android:paddingVertical=\"15dp\"\n        android:paddingHorizontal=\"10dp\"\n        android:background=\"?android:attr/selectableItemBackground\"\n        android:clickable=\"true\"\n        android:focusable=\"true\">\n\n        <ImageView\n            android:layout_width=\"24dp\"\n            android:layout_height=\"24dp\"\n            android:layout_gravity=\"center_vertical\"\n            android:src=\"@drawable/ic_tag_24\"\n            app:tint=\"?attr/colorOnSurfaceVariant\" />\n\n        <LinearLayout\n            android:layout_width=\"0dp\"\n            android:layout_height=\"wrap_content\"\n            android:layout_weight=\"1\"\n            android:orientation=\"vertical\"\n            android:layout_marginStart=\"16dp\">\n\n            <TextView\n                android:layout_width=\"wrap_content\"\n                android:layout_height=\"wrap_content\"\n                android:text=\"@string/dialog_duplicate_entry_suffix_title\"\n                android:textSize=\"17sp\"\n                android:textStyle=\"bold\" />\n\n            <TextView\n                android:id=\"@+id/duplicate_suffix_subtitle\"\n                android:layout_width=\"wrap_content\"\n                android:layout_height=\"wrap_content\"\n                android:text=\"@string/dialog_duplicate_entry_suffix_subtitle\"\n                android:textSize=\"14sp\"\n                android:textColor=\"?attr/colorOnSurfaceVariant\" />\n        </LinearLayout>\n    </LinearLayout>\n\n    <LinearLayout\n        android:id=\"@+id/cancel_save\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:orientation=\"horizontal\"\n        android:paddingVertical=\"15dp\"\n        android:paddingHorizontal=\"10dp\"\n        android:background=\"?android:attr/selectableItemBackground\"\n        android:clickable=\"true\"\n        android:focusable=\"true\">\n\n        <ImageView\n            android:layout_width=\"24dp\"\n            android:layout_height=\"24dp\"\n            android:layout_gravity=\"center_vertical\"\n            android:src=\"@drawable/ic_outline_close_24\"\n            app:tint=\"?attr/colorOnSurfaceVariant\" />\n\n        <LinearLayout\n            android:layout_width=\"0dp\"\n            android:layout_height=\"wrap_content\"\n            android:layout_weight=\"1\"\n            android:orientation=\"vertical\"\n            android:layout_marginStart=\"16dp\">\n\n            <TextView\n                android:layout_width=\"wrap_content\"\n                android:layout_height=\"wrap_content\"\n                android:text=\"@string/dialog_duplicate_entry_cancel_title\"\n                android:textSize=\"17sp\"\n                android:textStyle=\"bold\" />\n\n            <TextView\n                android:layout_width=\"wrap_content\"\n                android:layout_height=\"wrap_content\"\n                android:text=\"@string/dialog_duplicate_entry_cancel_subtitle\"\n                android:textSize=\"14sp\"\n                android:textColor=\"?attr/colorOnSurfaceVariant\" />\n        </LinearLayout>\n    </LinearLayout>\n</LinearLayout>\n"
  },
  {
    "path": "app/src/main/res/layout/dialog_error.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:orientation=\"vertical\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\"\n    android:paddingStart=\"25dp\"\n    android:paddingBottom=\"10dp\"\n    android:paddingEnd=\"25dp\"\n    android:paddingTop=\"10dp\">\n    <TextView\n        android:id=\"@+id/error_message\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"/>\n    <TextView\n        android:id=\"@+id/error_details\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:visibility=\"gone\"\n        android:layout_marginTop=\"10dp\"\n        android:textStyle=\"italic\"/>\n</LinearLayout>\n"
  },
  {
    "path": "app/src/main/res/layout/dialog_export.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<ScrollView\n    xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\">\n    <LinearLayout\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:orientation=\"vertical\"\n        android:paddingBottom=\"10dp\"\n        android:paddingTop=\"10dp\">\n        <TextView\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"wrap_content\"\n            android:layout_marginStart=\"25dp\"\n            android:layout_marginEnd=\"25dp\"\n            android:text=\"@string/export_help\" />\n        <com.google.android.material.textfield.TextInputLayout\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"wrap_content\"\n            android:layout_marginStart=\"25dp\"\n            android:layout_marginEnd=\"25dp\"\n            android:layout_marginTop=\"15dp\"\n            android:hint=\"@string/export_format_hint\"\n            style=\"?attr/dropdownStyle\">\n            <AutoCompleteTextView\n                android:id=\"@+id/dropdown_export_format\"\n                android:layout_width=\"match_parent\"\n                android:layout_height=\"wrap_content\"\n                android:inputType=\"none\" />\n        </com.google.android.material.textfield.TextInputLayout>\n        <CheckBox\n            android:id=\"@+id/checkbox_export_encrypt\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"wrap_content\"\n            android:layout_marginStart=\"20dp\"\n            android:layout_marginEnd=\"20dp\"\n            android:layout_marginTop=\"5dp\"\n            android:text=\"@string/export_encrypted\"\n            android:checked=\"true\" />\n        <TextView\n            android:id=\"@+id/text_separate_password\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:layout_marginStart=\"25dp\"\n            android:layout_marginEnd=\"25dp\"\n            android:layout_marginTop=\"5dp\"\n            android:textStyle=\"italic\"\n            android:text=\"@string/export_warning_password\" />\n        <TextView\n            android:id=\"@+id/text_export_warning\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"wrap_content\"\n            android:layout_marginStart=\"25dp\"\n            android:layout_marginEnd=\"25dp\"\n            android:layout_marginTop=\"5dp\"\n            android:text=\"@string/export_warning_unencrypted\"\n            android:textColor=\"?attr/colorError\"\n            android:visibility=\"gone\" />\n        <CheckBox\n            android:id=\"@+id/checkbox_accept\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"wrap_content\"\n            android:layout_marginStart=\"20dp\"\n            android:layout_marginEnd=\"20dp\"\n            android:layout_marginTop=\"5dp\"\n            android:text=\"@string/understand_risk_accept\"\n            android:checked=\"false\"\n            android:visibility=\"gone\" />\n\n        <CheckBox\n            android:id=\"@+id/export_selected_groups\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"wrap_content\"\n            android:layout_marginStart=\"20dp\"\n            android:layout_marginEnd=\"20dp\"\n            android:layout_marginTop=\"5dp\"\n            android:text=\"@string/export_all_groups\"\n            android:checked=\"true\"\n            android:visibility=\"gone\" />\n\n        <com.google.android.material.textfield.TextInputLayout\n            android:id=\"@+id/group_selection_layout\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"wrap_content\"\n            android:layout_marginStart=\"25dp\"\n            android:layout_marginEnd=\"25dp\"\n            android:layout_marginTop=\"15dp\"\n            android:hint=\"@string/export_choose_groups\"\n            android:visibility=\"gone\"\n            style=\"?attr/dropdownStyle\">\n\n            <com.beemdevelopment.aegis.ui.components.DropdownCheckBoxes\n                android:id=\"@+id/group_selection_dropdown\"\n                android:layout_width=\"match_parent\"\n                android:layout_height=\"wrap_content\"\n                app:allow_filtering=\"false\" />\n        </com.google.android.material.textfield.TextInputLayout>\n    </LinearLayout>\n</ScrollView>\n"
  },
  {
    "path": "app/src/main/res/layout/dialog_icon_picker.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout\n    xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\"\n    android:orientation=\"vertical\"\n    app:layout_behavior=\"com.google.android.material.bottomsheet.BottomSheetBehavior\">\n    <RelativeLayout\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\">\n        <LinearLayout\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"wrap_content\"\n            android:orientation=\"vertical\">\n            <com.google.android.material.bottomsheet.BottomSheetDragHandleView\n                android:id=\"@+id/drag_handle\"\n                android:layout_width=\"match_parent\"\n                android:layout_height=\"wrap_content\" />\n            <TextView\n                android:layout_width=\"match_parent\"\n                android:layout_height=\"wrap_content\"\n                android:gravity=\"center\"\n                android:text=\"@string/pick_icon\"\n                android:textSize=\"20sp\" />\n            <TextView\n                android:id=\"@+id/text_icon_pack\"\n                android:paddingTop=\"2dp\"\n                android:paddingBottom=\"16dp\"\n                android:textSize=\"13sp\"\n                android:layout_width=\"match_parent\"\n                android:layout_height=\"wrap_content\"\n                android:gravity=\"center\"\n                android:textAppearance=\"@style/TextAppearance.AppCompat.Caption\" />\n        </LinearLayout>\n        <ImageButton\n            android:id=\"@+id/btn_icon_pack\"\n            android:layout_width=\"18dp\"\n            android:layout_height=\"18dp\"\n            android:layout_alignParentEnd=\"true\"\n            android:layout_marginEnd=\"5dp\"\n            android:layout_marginTop=\"12dp\"\n            android:scaleType=\"centerCrop\"\n            android:background=\"?selectableItemBackgroundBorderless\"\n            android:src=\"@drawable/ic_outline_more_vert_24\"\n            app:tint=\"?attr/colorOnSurfaceVariant\" />\n    </RelativeLayout>\n    <LinearLayout\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\"\n        android:paddingHorizontal=\"15dp\"\n        android:orientation=\"vertical\">\n        <com.google.android.material.textfield.TextInputLayout\n            android:hint=\"@string/search\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"wrap_content\"\n            android:layout_marginTop=\"10dp\"\n            app:endIconMode=\"clear_text\">\n            <com.google.android.material.textfield.TextInputEditText\n                android:id=\"@+id/text_search_icon\"\n                android:layout_width=\"match_parent\"\n                android:layout_height=\"wrap_content\"\n                android:inputType=\"text\"/>\n        </com.google.android.material.textfield.TextInputLayout>\n        <com.beemdevelopment.aegis.ui.views.IconRecyclerView\n            android:id=\"@+id/list_icons\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"0dp\"\n            android:layout_weight=\"1\"\n            android:scrollbars=\"vertical\"\n            android:layout_marginTop=\"10dp\"\n            android:columnWidth=\"75dp\" />\n    </LinearLayout>\n</LinearLayout>\n"
  },
  {
    "path": "app/src/main/res/layout/dialog_importers.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout\n    xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\"\n    android:orientation=\"vertical\"\n    android:paddingStart=\"25dp\"\n    android:paddingBottom=\"10dp\"\n    android:paddingEnd=\"25dp\"\n    android:paddingTop=\"10dp\">\n    <ListView\n        android:id=\"@+id/list_importers\"\n        android:layout_weight=\"1\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"0dp\"\n        android:layout_marginTop=\"10dp\"\n        android:choiceMode=\"singleChoice\"\n        android:divider=\"@null\" />\n    <TextView\n        android:id=\"@+id/text_importer_help\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:layout_marginTop=\"10dp\" />\n</LinearLayout>\n"
  },
  {
    "path": "app/src/main/res/layout/dialog_number_picker.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout\n    xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"wrap_content\"\n    android:layout_marginTop=\"20dp\"\n    android:orientation=\"horizontal\">\n\n    <NumberPicker\n        android:id=\"@+id/numberPicker\"\n        android:layout_width=\"0dp\"\n        android:layout_height=\"wrap_content\"\n        android:layout_weight=\"1\"/>\n</LinearLayout>\n"
  },
  {
    "path": "app/src/main/res/layout/dialog_password.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<ScrollView\n    xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\">\n    <LinearLayout\n        android:orientation=\"vertical\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:paddingStart=\"20dp\"\n        android:paddingBottom=\"10dp\"\n        android:paddingEnd=\"20dp\"\n        android:paddingTop=\"10dp\">\n        <TextView\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"wrap_content\"\n            android:text=\"@string/authentication_method_password_explanation\"\n            android:textColor=\"?attr/colorError\"\n            android:textStyle=\"bold\"\n            android:layout_marginStart=\"5dp\"\n            android:layout_marginEnd=\"5dp\"\n            android:layout_marginBottom=\"10dp\" />\n\n        <com.google.android.material.textfield.TextInputLayout\n            android:id=\"@+id/text_password_wrapper\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"wrap_content\">\n\n            <com.google.android.material.textfield.TextInputEditText\n                android:id=\"@+id/text_password\"\n                android:hint=\"@string/password\"\n                android:inputType=\"textPassword\"\n                android:layout_width=\"match_parent\"\n                android:layout_height=\"wrap_content\">\n                <requestFocus/>\n            </com.google.android.material.textfield.TextInputEditText>\n        </com.google.android.material.textfield.TextInputLayout>\n\n        <com.google.android.material.textfield.TextInputLayout\n            android:id=\"@+id/text_password_confirm_wrapper\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"wrap_content\"\n            android:layout_marginTop=\"10dp\">\n\n            <com.google.android.material.textfield.TextInputEditText\n                android:hint=\"@string/confirm_password\"\n                android:id=\"@+id/text_password_confirm\"\n                android:inputType=\"textPassword\"\n                android:layout_width=\"match_parent\"\n                android:layout_height=\"wrap_content\" />\n        </com.google.android.material.textfield.TextInputLayout>\n\n        <ProgressBar\n            android:id=\"@+id/progressBar\"\n            android:progressDrawable=\"@drawable/progress_horizontal\"\n            style=\"?android:attr/progressBarStyleHorizontal\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"wrap_content\"\n            android:layout_marginTop=\"10dp\"\n            android:max=\"4\"\n            android:paddingStart=\"4dp\"\n            android:paddingEnd=\"3.5dp\" />\n        <TextView\n            android:id=\"@+id/text_password_strength\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:layout_gravity=\"end\" />\n\n        <CheckBox\n            android:id=\"@+id/check_toggle_visibility\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"wrap_content\"\n            android:layout_marginTop=\"5dp\"\n            android:text=\"@string/show_password\" />\n\n        <TextView\n            android:id=\"@+id/text_password_hint\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:layout_gravity=\"end\" />\n    </LinearLayout>\n</ScrollView>\n"
  },
  {
    "path": "app/src/main/res/layout/dialog_plaintext_warning.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout\n    xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\"\n    android:orientation=\"vertical\"\n    android:paddingBottom=\"10dp\"\n    android:paddingTop=\"10dp\">\n    <TextView\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:layout_marginStart=\"25dp\"\n        android:layout_marginEnd=\"25dp\"\n        android:text=\"@string/backup_plaintext_warning_explanation\" />\n\n    <CheckBox\n        android:id=\"@+id/checkbox_plaintext_warning\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:layout_marginStart=\"20dp\"\n        android:layout_marginEnd=\"20dp\"\n        android:layout_marginTop=\"5dp\"\n        android:text=\"@string/pref_show_plaintext_warning_hint\"\n        android:checked=\"true\" />\n\n</LinearLayout>\n"
  },
  {
    "path": "app/src/main/res/layout/dialog_progress.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\"\n    android:orientation=\"horizontal\"\n    android:padding=\"20dp\">\n    <com.google.android.material.progressindicator.CircularProgressIndicator\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:layout_gravity=\"center_vertical\"\n        android:indeterminate=\"true\" />\n    <TextView\n        android:id=\"@+id/text_progress\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:layout_gravity=\"center_vertical\"\n        android:layout_marginStart=\"15dp\" />\n</LinearLayout>\n"
  },
  {
    "path": "app/src/main/res/layout/dialog_select_group.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<ScrollView\n    xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\">\n    <LinearLayout\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:orientation=\"vertical\"\n        android:paddingBottom=\"10dp\"\n        android:paddingTop=\"10dp\">\n        <TextView\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"wrap_content\"\n            android:layout_marginStart=\"25dp\"\n            android:layout_marginEnd=\"25dp\"\n            android:text=\"@string/assign_groups_dialog_summary\" />\n\n        <com.google.android.material.textfield.TextInputLayout\n            android:id=\"@+id/group_selection_layout\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"wrap_content\"\n            android:layout_marginStart=\"25dp\"\n            android:layout_marginEnd=\"25dp\"\n            android:layout_marginTop=\"15dp\"\n            android:hint=\"@string/assign_groups_dialog_dropdown\"\n            style=\"?attr/dropdownStyle\">\n            <AutoCompleteTextView\n                android:id=\"@+id/group_selection_dropdown\"\n                android:layout_width=\"match_parent\"\n                android:layout_height=\"wrap_content\"\n                android:inputType=\"none\" />\n        </com.google.android.material.textfield.TextInputLayout>\n\n        <com.google.android.material.textfield.TextInputLayout\n            android:id=\"@+id/text_group_name_layout\"\n            android:hint=\"@string/group_name_hint\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"wrap_content\"\n            android:layout_marginStart=\"25dp\"\n            android:layout_marginEnd=\"25dp\"\n            android:layout_marginTop=\"10dp\"\n            android:visibility=\"gone\">\n            <com.google.android.material.textfield.TextInputEditText\n                android:id=\"@+id/text_group_name\"\n                android:layout_width=\"match_parent\"\n                android:layout_height=\"wrap_content\"\n                android:inputType=\"textCapSentences\"/>\n        </com.google.android.material.textfield.TextInputLayout>\n\n    </LinearLayout>\n</ScrollView>\n"
  },
  {
    "path": "app/src/main/res/layout/dialog_select_groups.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<androidx.constraintlayout.widget.ConstraintLayout\n    xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    app:layout_behavior=\"com.google.android.material.bottomsheet.BottomSheetBehavior\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"wrap_content\">\n\n    <com.google.android.material.bottomsheet.BottomSheetDragHandleView\n        android:id=\"@+id/drag_handle\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        app:layout_constraintStart_toStartOf=\"parent\"\n        app:layout_constraintEnd_toEndOf=\"parent\"\n        app:layout_constraintTop_toTopOf=\"parent\" />\n\n    <TextView\n        android:id=\"@+id/text_title\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:gravity=\"center\"\n        android:text=\"@string/groups\"\n        android:textSize=\"20sp\"\n        app:layout_constraintTop_toBottomOf=\"@+id/drag_handle\"\n        app:layout_constraintEnd_toEndOf=\"parent\"\n        app:layout_constraintStart_toStartOf=\"parent\" />\n\n    <TextView\n        android:id=\"@+id/addGroupInfo\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:layout_marginHorizontal=\"8dp\"\n        android:padding=\"8dp\"\n        android:text=\"@string/no_group_selection\"\n        app:layout_constraintTop_toBottomOf=\"@+id/text_title\"\n        app:layout_constraintEnd_toEndOf=\"parent\"\n        app:layout_constraintStart_toStartOf=\"parent\"\n        android:visibility=\"gone\"/>\n\n    <LinearLayout\n        android:id=\"@+id/addGroup\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:layout_marginHorizontal=\"8dp\"\n        android:layout_marginTop=\"15dp\"\n        android:background=\"?android:attr/selectableItemBackground\"\n        android:gravity=\"center\"\n        android:orientation=\"horizontal\"\n        android:padding=\"8dp\"\n        app:layout_constraintTop_toBottomOf=\"@+id/addGroupInfo\"\n        app:layout_constraintEnd_toEndOf=\"parent\"\n        app:layout_constraintStart_toStartOf=\"parent\"\n        android:visibility=\"gone\">\n\n        <ImageView\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:contentDescription=\"@string/new_group\"\n            android:src=\"@drawable/ic_outline_add_24\" />\n\n        <TextView\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"wrap_content\"\n            android:layout_marginStart=\"10dp\"\n            android:text=\"@string/new_group\"\n            android:textAppearance=\"@style/TextAppearance.AppCompat.Body1\" />\n    </LinearLayout>\n\n    <androidx.core.widget.NestedScrollView\n        android:id=\"@+id/scrollView\"\n        android:layout_marginTop=\"15dp\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"0dp\"\n        android:minWidth=\"150dp\"\n        app:layout_constraintHeight_default=\"wrap\"\n        app:layout_constraintTop_toBottomOf=\"@+id/addGroup\"\n        app:layout_constraintEnd_toEndOf=\"parent\"\n        app:layout_constraintStart_toStartOf=\"parent\">\n\n        <LinearLayout\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"wrap_content\"\n            android:minHeight=\"150dp\"\n            android:orientation=\"vertical\">\n\n            <com.google.android.material.chip.ChipGroup\n                android:id=\"@+id/groupChipGroup\"\n                android:paddingStart=\"8dp\"\n                android:layout_width=\"match_parent\"\n                android:layout_height=\"wrap_content\">\n            </com.google.android.material.chip.ChipGroup>\n        </LinearLayout>\n\n    </androidx.core.widget.NestedScrollView>\n\n    <LinearLayout\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        app:layout_constraintTop_toBottomOf=\"@+id/scrollView\"\n        app:layout_constraintEnd_toEndOf=\"parent\"\n        android:orientation=\"horizontal\">\n        <Button\n            android:id=\"@+id/btnClear\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:text=\"@string/clear\"\n            style=\"@style/Widget.Material3.Button.TextButton\" />\n\n        <Button\n            android:id=\"@+id/btnSave\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:text=\"@string/save\"\n            style=\"@style/Widget.Material3.Button.TextButton\" />\n    </LinearLayout>\n\n</androidx.constraintlayout.widget.ConstraintLayout>\n"
  },
  {
    "path": "app/src/main/res/layout/dialog_text_input.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:orientation=\"vertical\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\"\n    android:paddingStart=\"20dp\"\n    android:paddingEnd=\"20dp\"\n    android:paddingTop=\"20dp\">\n    <com.google.android.material.textfield.TextInputLayout\n        android:id=\"@+id/text_input_layout\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\">\n        <com.google.android.material.textfield.TextInputEditText\n            android:id=\"@+id/text_input\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"wrap_content\"\n            android:inputType=\"textCapSentences\"/>\n    </com.google.android.material.textfield.TextInputLayout>\n</LinearLayout>\n"
  },
  {
    "path": "app/src/main/res/layout/dialog_time_sync.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:orientation=\"vertical\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\"\n    android:paddingBottom=\"10dp\"\n    android:paddingTop=\"10dp\">\n    <TextView\n        android:layout_marginStart=\"25dp\"\n        android:layout_marginEnd=\"25dp\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:text=\"@string/time_sync_warning_message\"/>\n    <CheckBox\n        android:id=\"@+id/check_warning_disable\"\n        android:layout_marginStart=\"20dp\"\n        android:layout_marginEnd=\"20dp\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:layout_marginTop=\"10dp\"\n        android:text=\"@string/time_sync_warning_disable\"/>\n</LinearLayout>\n"
  },
  {
    "path": "app/src/main/res/layout/dialog_web_view.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<FrameLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\"\n    android:paddingLeft=\"16dp\"\n    android:paddingRight=\"16dp\">\n\n    <WebView\n        android:id=\"@+id/web_view\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:scrollbars=\"none\" />\n\n</FrameLayout>"
  },
  {
    "path": "app/src/main/res/layout/dropdown_checkbox.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<androidx.appcompat.widget.LinearLayoutCompat xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\">\n\n    <CheckBox\n        android:id=\"@+id/checkbox_in_dropdown\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\" />\n\n</androidx.appcompat.widget.LinearLayoutCompat>"
  },
  {
    "path": "app/src/main/res/layout/dropdown_list_item.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<TextView xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"wrap_content\"\n    android:padding=\"16dp\"\n    android:ellipsize=\"end\"\n    android:maxLines=\"1\"\n    android:textAppearance=\"?attr/textAppearanceSubtitle1\"/>\n"
  },
  {
    "path": "app/src/main/res/layout/fab_menu.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\"\n    android:fitsSystemWindows=\"true\"\n    android:clipChildren=\"false\"\n    android:clipToPadding=\"false\">\n\n    <LinearLayout\n        android:id=\"@+id/fab_menu_items_container\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:layout_gravity=\"bottom|end\"\n        android:layout_marginHorizontal=\"@dimen/fab_margin\"\n        android:layout_marginBottom=\"75dp\"\n        android:clipChildren=\"false\"\n        android:clipToPadding=\"false\"\n        android:orientation=\"vertical\"\n        android:visibility=\"gone\">\n\n        <com.google.android.material.card.MaterialCardView\n            android:id=\"@+id/fab_menu_item_scan\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:layout_gravity=\"end\"\n            android:layout_marginBottom=\"6dp\"\n            app:cardCornerRadius=\"100dp\"\n            app:cardElevation=\"6dp\"\n            app:contentPadding=\"6dp\"\n            app:strokeWidth=\"0dp\">\n\n            <LinearLayout\n                android:layout_width=\"wrap_content\"\n                android:layout_height=\"48dp\"\n                android:gravity=\"center_vertical\"\n                android:orientation=\"horizontal\"\n                android:paddingHorizontal=\"16dp\">\n\n                <ImageView\n                    android:layout_width=\"@dimen/fab_menu_item_image_size\"\n                    android:layout_height=\"@dimen/fab_menu_item_image_size\"\n                    android:src=\"@drawable/ic_qrcode_scan\" />\n\n                <Space\n                    android:layout_width=\"12dp\"\n                    android:layout_height=\"0dp\" />\n\n                <TextView\n                    android:layout_width=\"wrap_content\"\n                    android:layout_height=\"wrap_content\"\n                    android:text=\"@string/scan\"\n                    android:textAppearance=\"?attr/textAppearanceLargePopupMenu\" />\n\n            </LinearLayout>\n        </com.google.android.material.card.MaterialCardView>\n\n        <com.google.android.material.card.MaterialCardView\n            android:id=\"@+id/fab_menu_item_scan_image\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:layout_gravity=\"end\"\n            android:layout_marginBottom=\"6dp\"\n            app:cardCornerRadius=\"100dp\"\n            app:cardElevation=\"6dp\"\n            app:contentPadding=\"6dp\"\n            app:strokeWidth=\"0dp\">\n\n            <LinearLayout\n                android:layout_width=\"wrap_content\"\n                android:layout_height=\"48dp\"\n                android:gravity=\"center_vertical\"\n                android:orientation=\"horizontal\"\n                android:paddingHorizontal=\"16dp\">\n\n                <ImageView\n                    android:layout_width=\"@dimen/fab_menu_item_image_size\"\n                    android:layout_height=\"@dimen/fab_menu_item_image_size\"\n                    android:src=\"@drawable/ic_outline_add_photo_alternate_24\" />\n\n                <Space\n                    android:layout_width=\"12dp\"\n                    android:layout_height=\"0dp\" />\n\n                <TextView\n                    android:layout_width=\"wrap_content\"\n                    android:layout_height=\"wrap_content\"\n                    android:text=\"@string/scan_image\"\n                    android:textAppearance=\"?attr/textAppearanceLargePopupMenu\" />\n\n            </LinearLayout>\n        </com.google.android.material.card.MaterialCardView>\n\n        <com.google.android.material.card.MaterialCardView\n            android:id=\"@+id/fab_menu_item_enter\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:layout_gravity=\"end\"\n            android:layout_marginBottom=\"6dp\"\n            app:cardCornerRadius=\"100dp\"\n            app:cardElevation=\"6dp\"\n            app:contentPadding=\"6dp\"\n            app:strokeWidth=\"0dp\">\n\n            <LinearLayout\n                android:layout_width=\"wrap_content\"\n                android:layout_height=\"48dp\"\n                android:gravity=\"center_vertical\"\n                android:orientation=\"horizontal\"\n                android:paddingHorizontal=\"16dp\">\n\n                <ImageView\n                    android:layout_width=\"@dimen/fab_menu_item_image_size\"\n                    android:layout_height=\"@dimen/fab_menu_item_image_size\"\n                    android:src=\"@drawable/ic_outline_edit_24\" />\n\n                <Space\n                    android:layout_width=\"12dp\"\n                    android:layout_height=\"0dp\" />\n\n                <TextView\n                    android:layout_width=\"wrap_content\"\n                    android:layout_height=\"wrap_content\"\n                    android:text=\"@string/enter_manually\"\n                    android:textAppearance=\"?attr/textAppearanceLargePopupMenu\" />\n\n            </LinearLayout>\n        </com.google.android.material.card.MaterialCardView>\n\n    </LinearLayout>\n\n    <com.google.android.material.floatingactionbutton.FloatingActionButton\n        android:id=\"@+id/fab\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:layout_gravity=\"bottom|end\"\n        android:layout_margin=\"@dimen/fab_margin\"\n        android:contentDescription=\"@string/add_new_entry\"\n        android:src=\"@drawable/ic_outline_add_24\" />\n\n</androidx.coordinatorlayout.widget.CoordinatorLayout>\n"
  },
  {
    "path": "app/src/main/res/layout/fragment_audit_log.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\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=\"match_parent\"\n        android:gravity=\"center|fill_vertical\"\n        android:visibility=\"gone\"\n        android:id=\"@+id/vEmptyList\"\n        android:orientation=\"vertical\">\n\n        <LinearLayout\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"match_parent\"\n            android:layout_weight=\"1\"\n            android:gravity=\"center\"\n            android:orientation=\"vertical\"\n            android:paddingBottom=\"150dp\">\n\n            <ImageView\n                android:id=\"@+id/imageView\"\n                android:layout_width=\"75dp\"\n                android:layout_height=\"75dp\"\n                android:src=\"@drawable/ic_timeline_24\" />\n\n            <TextView\n                android:layout_width=\"wrap_content\"\n                android:layout_height=\"wrap_content\"\n                android:text=\"@string/no_events_title\"\n                android:paddingTop=\"17dp\"\n                android:textSize=\"18sp\" />\n\n            <TextView\n                android:id=\"@+id/txt_no_audit_logs\"\n                android:layout_width=\"300dp\"\n                android:layout_height=\"wrap_content\"\n                android:lineSpacingExtra=\"5dp\"\n                android:paddingTop=\"7dp\"\n                android:text=\"@string/no_events_description\"\n                android:textAlignment=\"center\" />\n        </LinearLayout>\n\n    </LinearLayout>\n\n    <androidx.recyclerview.widget.RecyclerView\n        android:id=\"@+id/list_audit_log\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\"\n        android:scrollbars=\"vertical\"\n        android:scrollbarStyle=\"outsideOverlay\"\n        android:clipToPadding=\"false\"\n        app:layout_behavior=\"com.google.android.material.appbar.AppBarLayout$ScrollingViewBehavior\" />\n\n</androidx.coordinatorlayout.widget.CoordinatorLayout>\n"
  },
  {
    "path": "app/src/main/res/layout/fragment_done_slide.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<androidx.constraintlayout.widget.ConstraintLayout\n    xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\"\n    android:padding=\"32dp\">\n\n    <TextView\n        android:id=\"@+id/titleText\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:text=\"@string/setup_completed\"\n        android:textAlignment=\"center\"\n        android:textSize=\"24sp\"\n        android:layout_marginTop=\"30dp\"\n        android:textStyle=\"bold\"\n        app:layout_constraintStart_toStartOf=\"parent\"\n        app:layout_constraintTop_toTopOf=\"parent\" />\n\n    <ImageView\n        android:layout_width=\"210dp\"\n        android:layout_height=\"210dp\"\n        android:layout_marginTop=\"60dp\"\n        android:adjustViewBounds=\"true\"\n        android:src=\"@drawable/app_icon\"\n        app:layout_constraintStart_toStartOf=\"parent\"\n        app:layout_constraintEnd_toEndOf=\"parent\"\n        app:layout_constraintTop_toBottomOf=\"@+id/titleText\"/>\n\n    <TextView\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:text=\"@string/setup_completed_description\"\n        android:textAlignment=\"center\"\n        android:textSize=\"16sp\"\n        app:layout_constraintStart_toStartOf=\"parent\"\n        app:layout_constraintBottom_toBottomOf=\"parent\" />\n\n</androidx.constraintlayout.widget.ConstraintLayout>\n"
  },
  {
    "path": "app/src/main/res/layout/fragment_entry_list_view.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\"\n    android:orientation=\"vertical\">\n\n    <com.beemdevelopment.aegis.ui.views.TotpProgressBar\n        style=\"?android:attr/progressBarStyleHorizontal\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"4dp\"\n        android:progressDrawable=\"@drawable/progress_horizontal\"\n        android:id=\"@+id/progressBar\"\n        android:visibility=\"gone\"\n        android:max=\"5000\"/>\n\n    <androidx.recyclerview.widget.RecyclerView\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"0dp\"\n        android:paddingHorizontal=\"8dp\"\n        android:scrollbars=\"vertical\"\n        android:scrollbarStyle=\"outsideOverlay\"\n        android:clipToPadding=\"false\"\n        android:id=\"@+id/rvKeyProfiles\"\n        android:layout_weight=\"1\"/>\n\n    <LinearLayout\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\"\n        android:gravity=\"center|fill_vertical\"\n        android:id=\"@+id/vEmptyList\"\n        android:orientation=\"vertical\">\n\n        <LinearLayout\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"match_parent\"\n            android:layout_weight=\"1\"\n            android:gravity=\"center\"\n            android:orientation=\"vertical\"\n            android:paddingBottom=\"150dp\">\n\n            <ImageView\n                android:id=\"@+id/imageView\"\n                android:layout_width=\"50dp\"\n                android:layout_height=\"50dp\"\n                android:src=\"@drawable/ic_qrcode_scan\" />\n\n            <TextView\n                android:id=\"@+id/textView\"\n                android:layout_width=\"wrap_content\"\n                android:layout_height=\"wrap_content\"\n                android:text=\"@string/empty_list_title\"\n                android:paddingTop=\"17dp\"\n                android:textSize=\"18sp\" />\n\n            <TextView\n                android:id=\"@+id/textView5\"\n                android:layout_width=\"300dp\"\n                android:layout_height=\"wrap_content\"\n                android:lineSpacingExtra=\"5dp\"\n                android:paddingTop=\"7dp\"\n                android:text=\"@string/empty_list\"\n                android:textAlignment=\"center\" />\n        </LinearLayout>\n\n    </LinearLayout>\n</LinearLayout>\n"
  },
  {
    "path": "app/src/main/res/layout/fragment_icon_packs.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\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=\"match_parent\"\n        android:gravity=\"center|fill_vertical\"\n        android:id=\"@+id/vEmptyList\"\n        android:orientation=\"vertical\">\n\n        <LinearLayout\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"match_parent\"\n            android:layout_weight=\"1\"\n            android:gravity=\"center\"\n            android:orientation=\"vertical\"\n            android:paddingBottom=\"150dp\">\n\n            <ImageView\n                android:id=\"@+id/imageView\"\n                android:layout_width=\"75dp\"\n                android:layout_height=\"75dp\"\n                android:src=\"@drawable/ic_outline_package_variant_24\" />\n\n            <TextView\n                android:layout_width=\"wrap_content\"\n                android:layout_height=\"wrap_content\"\n                android:text=\"@string/no_icon_packs_title\"\n                android:paddingTop=\"17dp\"\n                android:textSize=\"18sp\" />\n\n            <TextView\n                android:id=\"@+id/txt_no_icon_packs\"\n                android:layout_width=\"300dp\"\n                android:layout_height=\"wrap_content\"\n                android:lineSpacingExtra=\"5dp\"\n                android:paddingTop=\"7dp\"\n                android:text=\"@string/no_icon_packs\"\n                android:textAlignment=\"center\" />\n        </LinearLayout>\n\n    </LinearLayout>\n\n    <androidx.recyclerview.widget.RecyclerView\n        android:id=\"@+id/list_icon_packs\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\"\n        app:layout_behavior=\"com.google.android.material.appbar.AppBarLayout$ScrollingViewBehavior\" />\n\n    <com.google.android.material.floatingactionbutton.FloatingActionButton\n        android:id=\"@+id/fab\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:layout_gravity=\"bottom|end\"\n        android:layout_margin=\"@dimen/fab_margin\"\n        android:src=\"@drawable/ic_outline_add_24\">\n    </com.google.android.material.floatingactionbutton.FloatingActionButton>\n\n</androidx.coordinatorlayout.widget.CoordinatorLayout>\n"
  },
  {
    "path": "app/src/main/res/layout/fragment_security_picker_slide.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<androidx.core.widget.NestedScrollView\n    xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\">\n\n    <LinearLayout\n        android:id=\"@+id/main\"\n        android:orientation=\"vertical\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:padding=\"32dp\">\n\n        <TextView\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"wrap_content\"\n            android:text=\"@string/choose_authentication_method\"\n            android:textAlignment=\"center\"\n            android:textSize=\"24sp\"\n            android:layout_marginTop=\"30dp\"\n            android:textStyle=\"bold\" />\n\n        <LinearLayout\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"match_parent\"\n            android:layout_marginTop=\"24dp\"\n            android:orientation=\"vertical\">\n\n            <TextView\n                android:layout_width=\"match_parent\"\n                android:layout_height=\"wrap_content\"\n                android:text=\"@string/authentication_method_explanation\"/>\n\n            <RadioGroup\n                android:id=\"@+id/rg_authenticationMethod\"\n                android:layout_width=\"match_parent\"\n                android:layout_height=\"wrap_content\"\n                android:layout_marginTop=\"24dp\">\n\n                <RadioButton\n                    android:id=\"@+id/rb_none\"\n                    android:layout_width=\"wrap_content\"\n                    android:layout_height=\"wrap_content\"\n                    android:text=\"@string/authentication_method_none\"\n                    android:textSize=\"16sp\" />\n\n                <TextView\n                    android:layout_width=\"match_parent\"\n                    android:layout_height=\"wrap_content\"\n                    android:layout_marginStart=\"32dp\"\n                    android:layout_marginTop=\"-5dp\"\n                    android:text=\"@string/authentication_method_none_description\" />\n\n                <RadioButton\n                    android:id=\"@+id/rb_password\"\n                    android:layout_width=\"match_parent\"\n                    android:layout_height=\"wrap_content\"\n                    android:checked=\"true\"\n                    android:text=\"@string/authentication_method_password\"\n                    android:textSize=\"16sp\" />\n\n                <TextView\n                    android:layout_width=\"match_parent\"\n                    android:layout_height=\"wrap_content\"\n                    android:layout_marginStart=\"32dp\"\n                    android:layout_marginTop=\"-5dp\"\n                    android:text=\"@string/authentication_method_password_description\" />\n\n                <RadioButton\n                    android:id=\"@+id/rb_biometrics\"\n                    android:enabled=\"false\"\n                    android:layout_width=\"match_parent\"\n                    android:layout_height=\"wrap_content\"\n                    android:text=\"@string/authentication_method_biometrics\"\n                    android:textSize=\"16sp\" />\n\n                <TextView\n                    android:id=\"@+id/text_rb_biometrics\"\n                    android:enabled=\"false\"\n                    android:layout_width=\"match_parent\"\n                    android:layout_height=\"wrap_content\"\n                    android:layout_marginStart=\"32dp\"\n                    android:layout_marginTop=\"-5dp\"\n\n                    android:text=\"@string/authentication_method_biometrics_description\" />\n\n            </RadioGroup>\n\n        </LinearLayout>\n\n    </LinearLayout>\n</androidx.core.widget.NestedScrollView>"
  },
  {
    "path": "app/src/main/res/layout/fragment_security_setup_slide.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<androidx.core.widget.NestedScrollView\n    xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\">\n\n    <LinearLayout\n        android:id=\"@+id/main\"\n        android:orientation=\"vertical\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:padding=\"32dp\">\n\n        <TextView\n            android:id=\"@+id/textView2\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"wrap_content\"\n            android:text=\"@string/choose_authentication_method\"\n            android:textAlignment=\"center\"\n            android:textSize=\"24sp\"\n            android:layout_marginTop=\"30dp\"\n            android:textStyle=\"bold\" />\n\n        <TextView\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"wrap_content\"\n            android:text=\"@string/authentication_method_password_explanation\"\n            android:textColor=\"?attr/colorError\"\n            android:textStyle=\"bold\"\n            android:layout_marginTop=\"24dp\" />\n\n        <LinearLayout\n            android:orientation=\"vertical\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"wrap_content\"\n            android:layout_marginTop=\"24dp\">\n\n            <com.google.android.material.textfield.TextInputLayout\n                android:id=\"@+id/text_password_wrapper\"\n                android:layout_width=\"match_parent\"\n                android:layout_height=\"wrap_content\">\n\n                <com.google.android.material.textfield.TextInputEditText\n                    android:id=\"@+id/text_password\"\n                    android:hint=\"@string/set_password\"\n                    android:inputType=\"textPassword\"\n                    android:layout_width=\"match_parent\"\n                    android:layout_height=\"wrap_content\"/>\n            </com.google.android.material.textfield.TextInputLayout>\n\n            <com.google.android.material.textfield.TextInputLayout\n                android:id=\"@+id/text_password_confirm_wrapper\"\n                android:layout_width=\"match_parent\"\n                android:layout_height=\"wrap_content\"\n                android:layout_marginTop=\"10dp\">\n\n                <com.google.android.material.textfield.TextInputEditText\n                    android:hint=\"@string/set_password_confirm\"\n                    android:id=\"@+id/text_password_confirm\"\n                    android:inputType=\"textPassword\"\n                    android:layout_width=\"match_parent\"\n                    android:layout_height=\"wrap_content\" />\n            </com.google.android.material.textfield.TextInputLayout>\n\n            <ProgressBar\n                android:id=\"@+id/progressBar\"\n                android:progressDrawable=\"@drawable/progress_horizontal\"\n                style=\"?android:attr/progressBarStyleHorizontal\"\n                android:layout_width=\"match_parent\"\n                android:layout_height=\"wrap_content\"\n                android:layout_marginTop=\"10dp\"\n                android:max=\"4\"\n                android:paddingStart=\"4dp\"\n                android:paddingEnd=\"3.5dp\" />\n            <TextView\n                android:id=\"@+id/text_password_strength\"\n                android:layout_width=\"wrap_content\"\n                android:layout_height=\"wrap_content\"\n                android:layout_gravity=\"end\" />\n\n            <CheckBox\n                android:id=\"@+id/check_toggle_visibility\"\n                android:layout_width=\"match_parent\"\n                android:layout_height=\"wrap_content\"\n                android:layout_marginTop=\"5dp\"\n                android:text=\"@string/show_password\" />\n\n        </LinearLayout>\n\n    </LinearLayout>\n\n</androidx.core.widget.NestedScrollView>\n"
  },
  {
    "path": "app/src/main/res/layout/fragment_welcome_slide.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<androidx.constraintlayout.widget.ConstraintLayout\n    xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\"\n    android:padding=\"32dp\">\n\n    <TextView\n        android:id=\"@+id/titleText\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:text=\"@string/welcome\"\n        android:textAlignment=\"center\"\n        android:textSize=\"24sp\"\n        android:layout_marginTop=\"30dp\"\n        android:textStyle=\"bold\"\n        app:layout_constraintStart_toStartOf=\"parent\"\n        app:layout_constraintTop_toTopOf=\"parent\" />\n\n    <TextView\n        android:id=\"@+id/descriptionText\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:text=\"@string/app_description\"\n        android:textAlignment=\"center\"\n        android:textSize=\"16sp\"\n        android:layout_marginTop=\"10dp\"\n        app:layout_constraintStart_toStartOf=\"parent\"\n        app:layout_constraintEnd_toEndOf=\"parent\"\n        app:layout_constraintTop_toBottomOf=\"@+id/titleText\" />\n\n    <ImageView\n        android:id=\"@+id/imgLogo\"\n        android:layout_width=\"210dp\"\n        android:layout_height=\"210dp\"\n        android:layout_marginTop=\"60dp\"\n        android:adjustViewBounds=\"true\"\n        android:src=\"@drawable/app_icon\"\n        app:layout_constraintStart_toStartOf=\"parent\"\n        app:layout_constraintEnd_toEndOf=\"parent\"\n        app:layout_constraintTop_toBottomOf=\"@+id/descriptionText\"/>\n\n    <Button\n        android:id=\"@+id/btnImport\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:layout_marginBottom=\"5dp\"\n        android:text=\"@string/import_vault\"\n        android:textSize=\"11sp\"\n        android:layout_marginVertical=\"10dp\"\n        app:layout_constraintStart_toStartOf=\"parent\"\n        app:layout_constraintEnd_toEndOf=\"parent\"\n        app:layout_constraintBottom_toTopOf=\"@+id/txtImportHelp\"\n        style=\"@style/Widget.Material3.Button.TonalButton\" />\n\n    <TextView\n        android:id=\"@+id/txtImportHelp\"\n        android:layout_width=\"0dp\"\n        android:layout_height=\"wrap_content\"\n        android:text=\"@string/import_vault_hint\"\n        android:textSize=\"11sp\"\n        android:textAlignment=\"center\"\n        app:layout_constraintStart_toStartOf=\"parent\"\n        app:layout_constraintEnd_toEndOf=\"parent\"\n        app:layout_constraintBottom_toBottomOf=\"parent\"\n        app:layout_constraintWidth_percent=\"0.9\" />\n\n</androidx.constraintlayout.widget.ConstraintLayout>\n"
  },
  {
    "path": "app/src/main/res/layout/popup_password.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:orientation=\"vertical\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\"\n    android:background=\"@drawable/rounded_popup\">\n    <TextView\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:layout_margin=\"5dp\"\n        android:text=\"@string/password_reminder\"\n        android:textColor=\"?attr/colorOnSurface\" />\n</LinearLayout>\n"
  },
  {
    "path": "app/src/main/res/layout/scrim_layout.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\">\n\n    <View\n        android:id=\"@+id/scrim\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\"\n        android:background=\"#000000\"\n        android:alpha=\"0\"\n        android:clickable=\"true\"\n        android:focusable=\"true\"\n        android:visibility=\"gone\" />\n\n</androidx.coordinatorlayout.widget.CoordinatorLayout>\n"
  },
  {
    "path": "app/src/main/res/layout/view_preference_switch.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<com.google.android.material.materialswitch.MaterialSwitch\n    xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:id=\"@+id/switchWidget\"\n    android:layout_width=\"wrap_content\"\n    android:layout_height=\"wrap_content\"\n    android:focusable=\"false\"\n    android:clickable=\"false\"\n    android:background=\"@null\" />\n"
  },
  {
    "path": "app/src/main/res/menu/menu_action_mode.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    <item\n        android:id=\"@+id/action_toggle_favorite\"\n        android:orderInCategory=\"70\"\n        android:icon=\"@drawable/ic_outline_star_24\"\n        android:title=\"@string/favorite\"\n        app:showAsAction=\"always\" />\n    <item\n        android:id=\"@+id/action_copy\"\n        android:orderInCategory=\"80\"\n        android:icon=\"@drawable/ic_outline_content_copy_24\"\n        android:title=\"@string/copy\"\n        app:showAsAction=\"always\" />\n\n    <item\n        android:id=\"@+id/action_edit\"\n        android:orderInCategory=\"90\"\n        android:icon=\"@drawable/ic_outline_edit_24\"\n        android:title=\"@string/edit\"\n        app:showAsAction=\"always\" />\n\n    <item\n        android:id=\"@+id/action_select_all\"\n        android:title=\"@string/select_all\"\n        android:orderInCategory=\"95\"\n        app:showAsAction=\"never\"/>\n\n    <item\n        android:id=\"@+id/action_assign_icons\"\n        android:title=\"@string/assign_icons\"\n        android:orderInCategory=\"100\"\n        app:showAsAction=\"never\"/>\n\n    <item\n        android:id=\"@+id/action_assign_groups\"\n        android:title=\"@string/assign_groups\"\n        android:orderInCategory=\"100\"\n        app:showAsAction=\"never\"/>\n\n    <item\n        android:id=\"@+id/action_share_qr\"\n        android:title=\"@string/action_transfer\"\n        android:orderInCategory=\"110\"\n        android:icon=\"@drawable/ic_outline_qr_code_2_24\"\n        app:showAsAction=\"always\"/>\n\n    <item\n        android:id=\"@+id/action_delete\"\n        android:title=\"@string/action_delete\"\n        android:orderInCategory=\"400\"\n        android:icon=\"@drawable/ic_outline_delete_24\"\n        app:showAsAction=\"ifRoom\"/>\n</menu>"
  },
  {
    "path": "app/src/main/res/menu/menu_assign_icons.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    xmlns:tools=\"http://schemas.android.com/tools\"\n    tools:context=\"com.beemdevelopment.aegis.ui.AssignIconsActivity\">\n    <item\n        android:id=\"@+id/action_save\"\n        app:showAsAction=\"always\"\n        android:title=\"@string/save\"/>\n</menu>\n"
  },
  {
    "path": "app/src/main/res/menu/menu_edit.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    xmlns:tools=\"http://schemas.android.com/tools\"\n    tools:context=\"com.beemdevelopment.aegis.ui.EditEntryActivity\">\n    <item\n        android:id=\"@+id/action_save\"\n        app:showAsAction=\"ifRoom\"\n        android:title=\"@string/save\"/>\n    <item\n        android:id=\"@+id/action_edit_icon\"\n        android:title=\"@string/action_edit_icon\"\n        app:showAsAction=\"never\"/>\n    <item\n        android:id=\"@+id/action_reset_usage_count\"\n        android:title=\"@string/action_reset_usage_count\"\n        app:showAsAction=\"never\"/>\n    <item\n        android:id=\"@+id/action_default_icon\"\n        android:title=\"@string/action_default_icon\"\n        app:showAsAction=\"never\"/>\n    <item\n        android:id=\"@+id/action_delete\"\n        android:title=\"@string/action_delete\"\n        app:showAsAction=\"never\"/>\n</menu>\n"
  },
  {
    "path": "app/src/main/res/menu/menu_groups.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    xmlns:tools=\"http://schemas.android.com/tools\"\n    tools:context=\"com.beemdevelopment.aegis.ui.GroupManagerActivity\">\n    <item\n        android:id=\"@+id/action_delete_unused_groups\"\n        app:showAsAction=\"collapseActionView\"\n        android:title=\"@string/remove_unused_groups\"/>\n    <item\n        android:id=\"@+id/action_save\"\n        app:showAsAction=\"ifRoom\"\n        android:title=\"@string/save\"/>\n</menu>\n"
  },
  {
    "path": "app/src/main/res/menu/menu_import_entries.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    <item android:id=\"@+id/toggle_checkboxes\"\n        android:icon=\"@drawable/ic_outline_done_all_24\"\n        android:title=\"@string/toggle_checkboxes\"\n        app:showAsAction=\"always\" />\n    <item android:id=\"@+id/toggle_wipe_vault\"\n        android:title=\"@string/dialog_wipe_entries_checkbox\"\n        android:checkable=\"true\"\n        app:showAsAction=\"never\" />\n</menu>\n"
  },
  {
    "path": "app/src/main/res/menu/menu_main.xml",
    "content": "<menu 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    tools:context=\"com.beemdevelopment.aegis.ui.MainActivity\">\n    <item\n        android:id=\"@+id/mi_search\"\n        android:title=\"@string/search\"\n        app:showAsAction=\"always\"\n        app:actionViewClass=\"androidx.appcompat.widget.SearchView\"/>\n    <item\n        android:id=\"@+id/action_lock\"\n        android:icon=\"@drawable/ic_outline_lock_24\"\n        app:showAsAction=\"ifRoom\"\n        android:title=\"@string/lock\"/>\n    <item\n        android:id=\"@+id/action_sort\"\n        android:icon=\"@drawable/ic_outline_sort_24\"\n        app:showAsAction=\"always\"\n        android:title=\"@string/sort\">\n        <menu>\n            <group\n                android:id=\"@+id/action_sort_category\"\n                android:checkableBehavior=\"single\">\n                <item\n                    android:id=\"@+id/menu_sort_custom\"\n                    android:title=\"@string/sort_custom\"\n                    android:checked=\"true\" />\n                <item\n                    android:id=\"@+id/menu_sort_alphabetically_name\"\n                    android:title=\"@string/sort_alphabetically_name\"/>\n                <item\n                    android:id=\"@+id/menu_sort_alphabetically_name_reverse\"\n                    android:title=\"@string/sort_alphabetically_name_reverse\"/>\n                <item\n                    android:id=\"@+id/menu_sort_alphabetically\"\n                    android:title=\"@string/sort_alphabetically\"/>\n                <item\n                    android:id=\"@+id/menu_sort_alphabetically_reverse\"\n                    android:title=\"@string/sort_alphabetically_reverse\"/>\n                <item\n                    android:id=\"@+id/menu_sort_usage_count\"\n                    android:title=\"@string/sort_usage_count\"/>\n                <item\n                    android:id=\"@+id/menu_sort_last_used\"\n                    android:title=\"@string/sort_last_used\"/>\n            </group>\n        </menu>\n    </item>\n    <item\n        android:id=\"@+id/action_settings\"\n        android:orderInCategory=\"100\"\n        android:title=\"@string/action_settings\"\n        app:showAsAction=\"never\" />\n    <item\n        android:id=\"@+id/action_about\"\n        android:orderInCategory=\"110\"\n        android:title=\"@string/action_about\"\n        app:showAsAction=\"never\" />\n</menu>\n"
  },
  {
    "path": "app/src/main/res/menu/menu_scanner.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<menu\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    tools:context=\"com.beemdevelopment.aegis.ui.ScannerActivity\">\n    <item\n        android:id=\"@+id/action_camera\"\n        android:icon=\"@drawable/ic_outline_camera_front_24\"\n        android:title=\"@string/switch_camera\"\n        app:iconTint=\"?attr/colorOnDark\"\n        app:showAsAction=\"always\" />\n</menu>\n"
  },
  {
    "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=\"@mipmap/ic_launcher_background\"/>\n    <foreground android:drawable=\"@mipmap/ic_launcher_foreground\"/>\n</adaptive-icon>"
  },
  {
    "path": "app/src/main/res/mipmap-anydpi-v26/ic_launcher_debug.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=\"@mipmap/ic_launcher_background\"/>\n    <foreground android:drawable=\"@mipmap/ic_launcher_debug_foreground\"/>\n</adaptive-icon>"
  },
  {
    "path": "app/src/main/res/mipmap-anydpi-v26/ic_launcher_debug_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=\"@mipmap/ic_launcher_background\"/>\n    <foreground android:drawable=\"@mipmap/ic_launcher_debug_foreground\"/>\n</adaptive-icon>"
  },
  {
    "path": "app/src/main/res/mipmap-anydpi-v33/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=\"@mipmap/ic_launcher_background\"/>\n    <foreground android:drawable=\"@mipmap/ic_launcher_foreground\"/>\n\n    <monochrome android:drawable=\"@mipmap/ic_launcher_monochrome\" />\n</adaptive-icon>"
  },
  {
    "path": "app/src/main/res/mipmap-anydpi-v33/ic_launcher_debug.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=\"@mipmap/ic_launcher_background\"/>\n    <foreground android:drawable=\"@mipmap/ic_launcher_debug_foreground\"/>\n\n    <monochrome android:drawable=\"@mipmap/ic_launcher_monochrome\" />\n</adaptive-icon>"
  },
  {
    "path": "app/src/main/res/raw/aboutlibraries.json",
    "content": "{\n    \"metadata\": {\n        \"generated\": \"2025-05-23T11:52:25.992Z\"\n    },\n    \"libraries\": [\n        {\n            \"uniqueId\": \"androidx.activity:activity\",\n            \"funding\": [\n                \n            ],\n            \"developers\": [\n                {\n                    \"name\": \"The Android Open Source Project\"\n                }\n            ],\n            \"artifactVersion\": \"1.10.1\",\n            \"description\": \"Provides the base Activity subclass and the relevant hooks to build a composable structure on top.\",\n            \"scm\": {\n                \"connection\": \"scm:git:https://android.googlesource.com/platform/frameworks/support\",\n                \"url\": \"https://cs.android.com/androidx/platform/frameworks/support\"\n            },\n            \"name\": \"Activity\",\n            \"website\": \"https://developer.android.com/jetpack/androidx/releases/activity#1.10.1\",\n            \"licenses\": [\n                \"Apache-2.0\"\n            ],\n            \"organization\": {\n                \"name\": \"The Android Open Source Project\"\n            }\n        },\n        {\n            \"uniqueId\": \"androidx.activity:activity-ktx\",\n            \"funding\": [\n                \n            ],\n            \"developers\": [\n                {\n                    \"name\": \"The Android Open Source Project\"\n                }\n            ],\n            \"artifactVersion\": \"1.10.1\",\n            \"description\": \"Kotlin extensions for 'activity' artifact\",\n            \"scm\": {\n                \"connection\": \"scm:git:https://android.googlesource.com/platform/frameworks/support\",\n                \"url\": \"https://cs.android.com/androidx/platform/frameworks/support\"\n            },\n            \"name\": \"Activity Kotlin Extensions\",\n            \"website\": \"https://developer.android.com/jetpack/androidx/releases/activity#1.10.1\",\n            \"licenses\": [\n                \"Apache-2.0\"\n            ],\n            \"organization\": {\n                \"name\": \"The Android Open Source Project\"\n            }\n        },\n        {\n            \"uniqueId\": \"androidx.annotation:annotation-experimental\",\n            \"funding\": [\n                \n            ],\n            \"developers\": [\n                {\n                    \"name\": \"The Android Open Source Project\"\n                }\n            ],\n            \"artifactVersion\": \"1.4.1\",\n            \"description\": \"Java annotation for use on unstable Android API surfaces. When used in conjunction with the Experimental annotation lint checks, this annotation provides functional parity with Kotlin's Experimental annotation.\",\n            \"scm\": {\n                \"connection\": \"scm:git:https://android.googlesource.com/platform/frameworks/support\",\n                \"url\": \"https://cs.android.com/androidx/platform/frameworks/support\"\n            },\n            \"name\": \"Experimental annotation\",\n            \"website\": \"https://developer.android.com/jetpack/androidx/releases/annotation#1.4.1\",\n            \"licenses\": [\n                \"Apache-2.0\"\n            ],\n            \"organization\": {\n                \"name\": \"The Android Open Source Project\"\n            }\n        },\n        {\n            \"uniqueId\": \"androidx.annotation:annotation-jvm\",\n            \"funding\": [\n                \n            ],\n            \"developers\": [\n                {\n                    \"name\": \"The Android Open Source Project\"\n                }\n            ],\n            \"artifactVersion\": \"1.9.1\",\n            \"description\": \"Provides source annotations for tooling and readability.\",\n            \"scm\": {\n                \"connection\": \"scm:git:https://android.googlesource.com/platform/frameworks/support\",\n                \"url\": \"https://cs.android.com/androidx/platform/frameworks/support\"\n            },\n            \"name\": \"Annotation\",\n            \"website\": \"https://developer.android.com/jetpack/androidx/releases/annotation#1.9.1\",\n            \"licenses\": [\n                \"Apache-2.0\"\n            ],\n            \"organization\": {\n                \"name\": \"The Android Open Source Project\"\n            }\n        },\n        {\n            \"uniqueId\": \"androidx.appcompat:appcompat\",\n            \"funding\": [\n                \n            ],\n            \"developers\": [\n                {\n                    \"name\": \"The Android Open Source Project\"\n                }\n            ],\n            \"artifactVersion\": \"1.7.0\",\n            \"description\": \"Provides backwards-compatible implementations of UI-related Android SDK functionality, including dark mode and Material theming.\",\n            \"scm\": {\n                \"connection\": \"scm:git:https://android.googlesource.com/platform/frameworks/support\",\n                \"url\": \"https://cs.android.com/androidx/platform/frameworks/support\"\n            },\n            \"name\": \"AppCompat\",\n            \"website\": \"https://developer.android.com/jetpack/androidx/releases/appcompat#1.7.0\",\n            \"licenses\": [\n                \"Apache-2.0\"\n            ],\n            \"organization\": {\n                \"name\": \"The Android Open Source Project\"\n            }\n        },\n        {\n            \"uniqueId\": \"androidx.appcompat:appcompat-resources\",\n            \"funding\": [\n                \n            ],\n            \"developers\": [\n                {\n                    \"name\": \"The Android Open Source Project\"\n                }\n            ],\n            \"artifactVersion\": \"1.7.0\",\n            \"description\": \"Provides backward-compatible implementations of resource-related Android SDKfunctionality, including color state list theming.\",\n            \"scm\": {\n                \"connection\": \"scm:git:https://android.googlesource.com/platform/frameworks/support\",\n                \"url\": \"https://cs.android.com/androidx/platform/frameworks/support\"\n            },\n            \"name\": \"AppCompat Resources\",\n            \"website\": \"https://developer.android.com/jetpack/androidx/releases/appcompat#1.7.0\",\n            \"licenses\": [\n                \"Apache-2.0\"\n            ],\n            \"organization\": {\n                \"name\": \"The Android Open Source Project\"\n            }\n        },\n        {\n            \"uniqueId\": \"androidx.arch.core:core-common\",\n            \"funding\": [\n                \n            ],\n            \"developers\": [\n                {\n                    \"name\": \"The Android Open Source Project\"\n                }\n            ],\n            \"artifactVersion\": \"2.2.0\",\n            \"description\": \"Android Arch-Common\",\n            \"scm\": {\n                \"connection\": \"scm:git:https://android.googlesource.com/platform/frameworks/support\",\n                \"url\": \"https://cs.android.com/androidx/platform/frameworks/support\"\n            },\n            \"name\": \"Android Arch-Common\",\n            \"website\": \"https://developer.android.com/jetpack/androidx/releases/arch-core#2.2.0\",\n            \"licenses\": [\n                \"Apache-2.0\"\n            ]\n        },\n        {\n            \"uniqueId\": \"androidx.arch.core:core-runtime\",\n            \"funding\": [\n                \n            ],\n            \"developers\": [\n                {\n                    \"name\": \"The Android Open Source Project\"\n                }\n            ],\n            \"artifactVersion\": \"2.2.0\",\n            \"description\": \"Android Arch-Runtime\",\n            \"scm\": {\n                \"connection\": \"scm:git:https://android.googlesource.com/platform/frameworks/support\",\n                \"url\": \"https://cs.android.com/androidx/platform/frameworks/support\"\n            },\n            \"name\": \"Android Arch-Runtime\",\n            \"website\": \"https://developer.android.com/jetpack/androidx/releases/arch-core#2.2.0\",\n            \"licenses\": [\n                \"Apache-2.0\"\n            ]\n        },\n        {\n            \"uniqueId\": \"androidx.biometric:biometric\",\n            \"funding\": [\n                \n            ],\n            \"developers\": [\n                {\n                    \"name\": \"The Android Open Source Project\"\n                }\n            ],\n            \"artifactVersion\": \"1.1.0\",\n            \"description\": \"The Biometric library is a static library that you can add to your Android application. It invokes BiometricPrompt on devices running P and greater, and on older devices will show a compat dialog. Compatible on devices running API 14 or later.\",\n            \"scm\": {\n                \"connection\": \"scm:git:https://android.googlesource.com/platform/frameworks/support\",\n                \"url\": \"https://cs.android.com/androidx/platform/frameworks/support\"\n            },\n            \"name\": \"Biometric\",\n            \"website\": \"https://developer.android.com/jetpack/androidx/releases/biometric#1.1.0\",\n            \"licenses\": [\n                \"Apache-2.0\"\n            ]\n        },\n        {\n            \"uniqueId\": \"androidx.camera:camera-camera2\",\n            \"funding\": [\n                \n            ],\n            \"developers\": [\n                {\n                    \"name\": \"The Android Open Source Project\"\n                }\n            ],\n            \"artifactVersion\": \"1.4.2\",\n            \"description\": \"Camera2 implementation and extensions for the Jetpack Camera Library, a library providing a consistent and reliable camera foundation that enables great camera driven experiences across all of Android.\",\n            \"scm\": {\n                \"connection\": \"scm:git:https://android.googlesource.com/platform/frameworks/support\",\n                \"url\": \"https://cs.android.com/androidx/platform/frameworks/support\"\n            },\n            \"name\": \"Camera2\",\n            \"website\": \"https://developer.android.com/jetpack/androidx/releases/camera#1.4.2\",\n            \"licenses\": [\n                \"Apache-2.0\"\n            ],\n            \"organization\": {\n                \"name\": \"The Android Open Source Project\"\n            }\n        },\n        {\n            \"uniqueId\": \"androidx.camera:camera-core\",\n            \"funding\": [\n                \n            ],\n            \"developers\": [\n                {\n                    \"name\": \"The Android Open Source Project\"\n                }\n            ],\n            \"artifactVersion\": \"1.4.2\",\n            \"description\": \"Core components for the Jetpack Camera Library, a library providing a consistent and reliable camera foundation that enables great camera driven experiences across all of Android.\",\n            \"scm\": {\n                \"connection\": \"scm:git:https://android.googlesource.com/platform/frameworks/support\",\n                \"url\": \"https://cs.android.com/androidx/platform/frameworks/support\"\n            },\n            \"name\": \"Camera Core\",\n            \"website\": \"https://developer.android.com/jetpack/androidx/releases/camera#1.4.2\",\n            \"licenses\": [\n                \"Apache-2.0\",\n                \"44d1a25c593283261968a15c8cc213cd\"\n            ],\n            \"organization\": {\n                \"name\": \"The Android Open Source Project\"\n            }\n        },\n        {\n            \"uniqueId\": \"androidx.camera:camera-lifecycle\",\n            \"funding\": [\n                \n            ],\n            \"developers\": [\n                {\n                    \"name\": \"The Android Open Source Project\"\n                }\n            ],\n            \"artifactVersion\": \"1.4.2\",\n            \"description\": \"Lifecycle components for the Jetpack Camera Library, a library providing a consistent and reliable camera foundation that enables great camera driven experiences across all of Android.\",\n            \"scm\": {\n                \"connection\": \"scm:git:https://android.googlesource.com/platform/frameworks/support\",\n                \"url\": \"https://cs.android.com/androidx/platform/frameworks/support\"\n            },\n            \"name\": \"Camera Lifecycle\",\n            \"website\": \"https://developer.android.com/jetpack/androidx/releases/camera#1.4.2\",\n            \"licenses\": [\n                \"Apache-2.0\"\n            ],\n            \"organization\": {\n                \"name\": \"The Android Open Source Project\"\n            }\n        },\n        {\n            \"uniqueId\": \"androidx.camera:camera-video\",\n            \"funding\": [\n                \n            ],\n            \"developers\": [\n                {\n                    \"name\": \"The Android Open Source Project\"\n                }\n            ],\n            \"artifactVersion\": \"1.4.2\",\n            \"description\": \"Video components for the Jetpack Camera Library, a library providing a consistent and reliable camera foundation that enables great camera driven experiences across all of Android.\",\n            \"scm\": {\n                \"connection\": \"scm:git:https://android.googlesource.com/platform/frameworks/support\",\n                \"url\": \"https://cs.android.com/androidx/platform/frameworks/support\"\n            },\n            \"name\": \"Camera Video\",\n            \"website\": \"https://developer.android.com/jetpack/androidx/releases/camera#1.4.2\",\n            \"licenses\": [\n                \"Apache-2.0\"\n            ],\n            \"organization\": {\n                \"name\": \"The Android Open Source Project\"\n            }\n        },\n        {\n            \"uniqueId\": \"androidx.camera:camera-view\",\n            \"funding\": [\n                \n            ],\n            \"developers\": [\n                {\n                    \"name\": \"The Android Open Source Project\"\n                }\n            ],\n            \"artifactVersion\": \"1.4.2\",\n            \"description\": \"UI tools for the Jetpack Camera Library, a library providing a consistent and reliable camera foundation that enables great camera driven experiences across all of Android.\",\n            \"scm\": {\n                \"connection\": \"scm:git:https://android.googlesource.com/platform/frameworks/support\",\n                \"url\": \"https://cs.android.com/androidx/platform/frameworks/support\"\n            },\n            \"name\": \"Camera View\",\n            \"website\": \"https://developer.android.com/jetpack/androidx/releases/camera#1.4.2\",\n            \"licenses\": [\n                \"Apache-2.0\"\n            ],\n            \"organization\": {\n                \"name\": \"The Android Open Source Project\"\n            }\n        },\n        {\n            \"uniqueId\": \"androidx.cardview:cardview\",\n            \"funding\": [\n                \n            ],\n            \"developers\": [\n                {\n                    \"name\": \"The Android Open Source Project\"\n                }\n            ],\n            \"artifactVersion\": \"1.0.0\",\n            \"description\": \"Android Support CardView v7\",\n            \"scm\": {\n                \"connection\": \"scm:git:https://android.googlesource.com/platform/frameworks/support\",\n                \"url\": \"http://source.android.com\"\n            },\n            \"name\": \"Support CardView v7\",\n            \"website\": \"http://developer.android.com/tools/extras/support-library.html\",\n            \"licenses\": [\n                \"Apache-2.0\"\n            ]\n        },\n        {\n            \"uniqueId\": \"androidx.collection:collection-jvm\",\n            \"funding\": [\n                \n            ],\n            \"developers\": [\n                {\n                    \"name\": \"The Android Open Source Project\"\n                }\n            ],\n            \"artifactVersion\": \"1.4.2\",\n            \"description\": \"Standalone efficient collections.\",\n            \"scm\": {\n                \"connection\": \"scm:git:https://android.googlesource.com/platform/frameworks/support\",\n                \"url\": \"https://cs.android.com/androidx/platform/frameworks/support\"\n            },\n            \"name\": \"collections\",\n            \"website\": \"https://developer.android.com/jetpack/androidx/releases/collection#1.4.2\",\n            \"licenses\": [\n                \"Apache-2.0\"\n            ],\n            \"organization\": {\n                \"name\": \"The Android Open Source Project\"\n            }\n        },\n        {\n            \"uniqueId\": \"androidx.collection:collection-ktx\",\n            \"funding\": [\n                \n            ],\n            \"developers\": [\n                {\n                    \"name\": \"The Android Open Source Project\"\n                }\n            ],\n            \"artifactVersion\": \"1.4.2\",\n            \"description\": \"Kotlin extensions for 'collection' artifact\",\n            \"scm\": {\n                \"connection\": \"scm:git:https://android.googlesource.com/platform/frameworks/support\",\n                \"url\": \"https://cs.android.com/androidx/platform/frameworks/support\"\n            },\n            \"name\": \"Collections Kotlin Extensions\",\n            \"website\": \"https://developer.android.com/jetpack/androidx/releases/collection#1.4.2\",\n            \"licenses\": [\n                \"Apache-2.0\"\n            ],\n            \"organization\": {\n                \"name\": \"The Android Open Source Project\"\n            }\n        },\n        {\n            \"uniqueId\": \"androidx.concurrent:concurrent-futures\",\n            \"funding\": [\n                \n            ],\n            \"developers\": [\n                {\n                    \"name\": \"The Android Open Source Project\"\n                }\n            ],\n            \"artifactVersion\": \"1.1.0\",\n            \"description\": \"Androidx implementation of Guava's ListenableFuture\",\n            \"scm\": {\n                \"connection\": \"scm:git:https://android.googlesource.com/platform/frameworks/support\",\n                \"url\": \"http://source.android.com\"\n            },\n            \"name\": \"AndroidX Futures\",\n            \"website\": \"https://developer.android.com/topic/libraries/architecture/index.html\",\n            \"licenses\": [\n                \"Apache-2.0\"\n            ]\n        },\n        {\n            \"uniqueId\": \"androidx.concurrent:concurrent-futures-ktx\",\n            \"funding\": [\n                \n            ],\n            \"developers\": [\n                {\n                    \"name\": \"The Android Open Source Project\"\n                }\n            ],\n            \"artifactVersion\": \"1.1.0\",\n            \"description\": \"Kotlin Extensions for Androidx implementation of Guava's ListenableFuture\",\n            \"scm\": {\n                \"connection\": \"scm:git:https://android.googlesource.com/platform/frameworks/support\",\n                \"url\": \"http://source.android.com\"\n            },\n            \"name\": \"AndroidX Futures Kotlin Extensions\",\n            \"website\": \"https://developer.android.com/topic/libraries/architecture/index.html\",\n            \"licenses\": [\n                \"Apache-2.0\"\n            ]\n        },\n        {\n            \"uniqueId\": \"androidx.constraintlayout:constraintlayout\",\n            \"funding\": [\n                \n            ],\n            \"developers\": [\n                {\n                    \"name\": \"The Android Open Source Project\"\n                }\n            ],\n            \"artifactVersion\": \"2.2.1\",\n            \"description\": \"This library offers a flexible and adaptable way to position and animate widgets\",\n            \"scm\": {\n                \"connection\": \"scm:git:https://android.googlesource.com/platform/frameworks/support\",\n                \"url\": \"https://cs.android.com/androidx/platform/frameworks/support\"\n            },\n            \"name\": \"ConstraintLayout\",\n            \"website\": \"https://developer.android.com/jetpack/androidx/releases/constraintlayout#2.2.1\",\n            \"licenses\": [\n                \"Apache-2.0\"\n            ],\n            \"organization\": {\n                \"name\": \"The Android Open Source Project\"\n            }\n        },\n        {\n            \"uniqueId\": \"androidx.constraintlayout:constraintlayout-core\",\n            \"funding\": [\n                \n            ],\n            \"developers\": [\n                {\n                    \"name\": \"The Android Open Source Project\"\n                }\n            ],\n            \"artifactVersion\": \"1.1.1\",\n            \"description\": \"This library contains engines and algorithms for constraint based layout and complex animations (it is used by the ConstraintLayout library)\",\n            \"scm\": {\n                \"connection\": \"scm:git:https://android.googlesource.com/platform/frameworks/support\",\n                \"url\": \"https://cs.android.com/androidx/platform/frameworks/support\"\n            },\n            \"name\": \"ConstraintLayout Core\",\n            \"website\": \"https://developer.android.com/jetpack/androidx/releases/constraintlayout#1.1.1\",\n            \"licenses\": [\n                \"Apache-2.0\"\n            ],\n            \"organization\": {\n                \"name\": \"The Android Open Source Project\"\n            }\n        },\n        {\n            \"uniqueId\": \"androidx.coordinatorlayout:coordinatorlayout\",\n            \"funding\": [\n                \n            ],\n            \"developers\": [\n                {\n                    \"name\": \"The Android Open Source Project\"\n                }\n            ],\n            \"artifactVersion\": \"1.1.0\",\n            \"description\": \"The Support Library is a static library that you can add to your Android application in order to use APIs that are either not available for older platform versions or utility APIs that aren't a part of the framework APIs. Compatible on devices running API 14 or later.\",\n            \"scm\": {\n                \"connection\": \"scm:git:https://android.googlesource.com/platform/frameworks/support\",\n                \"url\": \"http://source.android.com\"\n            },\n            \"name\": \"Support Coordinator Layout\",\n            \"website\": \"https://developer.android.com/jetpack/androidx\",\n            \"licenses\": [\n                \"Apache-2.0\"\n            ]\n        },\n        {\n            \"uniqueId\": \"androidx.core:core\",\n            \"funding\": [\n                \n            ],\n            \"developers\": [\n                {\n                    \"name\": \"The Android Open Source Project\"\n                }\n            ],\n            \"artifactVersion\": \"1.16.0\",\n            \"description\": \"Provides backward-compatible implementations of Android platform APIs and features.\",\n            \"scm\": {\n                \"connection\": \"scm:git:https://android.googlesource.com/platform/frameworks/support\",\n                \"url\": \"https://cs.android.com/androidx/platform/frameworks/support\"\n            },\n            \"name\": \"Core\",\n            \"website\": \"https://developer.android.com/jetpack/androidx/releases/core#1.16.0\",\n            \"licenses\": [\n                \"Apache-2.0\"\n            ],\n            \"organization\": {\n                \"name\": \"The Android Open Source Project\"\n            }\n        },\n        {\n            \"uniqueId\": \"androidx.core:core-ktx\",\n            \"funding\": [\n                \n            ],\n            \"developers\": [\n                {\n                    \"name\": \"The Android Open Source Project\"\n                }\n            ],\n            \"artifactVersion\": \"1.16.0\",\n            \"description\": \"Kotlin extensions for 'core' artifact\",\n            \"scm\": {\n                \"connection\": \"scm:git:https://android.googlesource.com/platform/frameworks/support\",\n                \"url\": \"https://cs.android.com/androidx/platform/frameworks/support\"\n            },\n            \"name\": \"Core Kotlin Extensions\",\n            \"website\": \"https://developer.android.com/jetpack/androidx/releases/core#1.16.0\",\n            \"licenses\": [\n                \"Apache-2.0\"\n            ],\n            \"organization\": {\n                \"name\": \"The Android Open Source Project\"\n            }\n        },\n        {\n            \"uniqueId\": \"androidx.core:core-viewtree\",\n            \"funding\": [\n                \n            ],\n            \"developers\": [\n                {\n                    \"name\": \"The Android Open Source Project\"\n                }\n            ],\n            \"artifactVersion\": \"1.0.0\",\n            \"description\": \"Provides ViewTree extensions packaged for use by other core androidx libraries\",\n            \"scm\": {\n                \"connection\": \"scm:git:https://android.googlesource.com/platform/frameworks/support\",\n                \"url\": \"https://cs.android.com/androidx/platform/frameworks/support\"\n            },\n            \"name\": \"androidx.core:core-viewtree\",\n            \"website\": \"https://developer.android.com/jetpack/androidx/releases/core#1.0.0\",\n            \"licenses\": [\n                \"Apache-2.0\"\n            ],\n            \"organization\": {\n                \"name\": \"The Android Open Source Project\"\n            }\n        },\n        {\n            \"uniqueId\": \"androidx.cursoradapter:cursoradapter\",\n            \"funding\": [\n                \n            ],\n            \"developers\": [\n                {\n                    \"name\": \"The Android Open Source Project\"\n                }\n            ],\n            \"artifactVersion\": \"1.0.0\",\n            \"description\": \"The Support Library is a static library that you can add to your Android application in order to use APIs that are either not available for older platform versions or utility APIs that aren't a part of the framework APIs. Compatible on devices running API 14 or later.\",\n            \"scm\": {\n                \"connection\": \"scm:git:https://android.googlesource.com/platform/frameworks/support\",\n                \"url\": \"http://source.android.com\"\n            },\n            \"name\": \"Support Cursor Adapter\",\n            \"website\": \"http://developer.android.com/tools/extras/support-library.html\",\n            \"licenses\": [\n                \"Apache-2.0\"\n            ]\n        },\n        {\n            \"uniqueId\": \"androidx.customview:customview\",\n            \"funding\": [\n                \n            ],\n            \"developers\": [\n                {\n                    \"name\": \"The Android Open Source Project\"\n                }\n            ],\n            \"artifactVersion\": \"1.1.0\",\n            \"description\": \"The Support Library is a static library that you can add to your Android application in order to use APIs that are either not available for older platform versions or utility APIs that aren't a part of the framework APIs. Compatible on devices running API 14 or later.\",\n            \"scm\": {\n                \"connection\": \"scm:git:https://android.googlesource.com/platform/frameworks/support\",\n                \"url\": \"http://source.android.com\"\n            },\n            \"name\": \"Support Custom View\",\n            \"website\": \"https://developer.android.com/jetpack/androidx\",\n            \"licenses\": [\n                \"Apache-2.0\"\n            ]\n        },\n        {\n            \"uniqueId\": \"androidx.customview:customview-poolingcontainer\",\n            \"funding\": [\n                \n            ],\n            \"developers\": [\n                {\n                    \"name\": \"The Android Open Source Project\"\n                }\n            ],\n            \"artifactVersion\": \"1.0.0\",\n            \"description\": \"Utilities for listening to the lifecycle of containers that manage their child Views' lifecycle, such as RecyclerView\",\n            \"scm\": {\n                \"connection\": \"scm:git:https://android.googlesource.com/platform/frameworks/support\",\n                \"url\": \"https://cs.android.com/androidx/platform/frameworks/support\"\n            },\n            \"name\": \"androidx.customview:poolingcontainer\",\n            \"website\": \"https://developer.android.com/jetpack/androidx/releases/customview#1.0.0\",\n            \"licenses\": [\n                \"Apache-2.0\"\n            ]\n        },\n        {\n            \"uniqueId\": \"androidx.databinding:viewbinding\",\n            \"funding\": [\n                \n            ],\n            \"developers\": [\n                \n            ],\n            \"artifactVersion\": \"8.5.2\",\n            \"description\": \"\",\n            \"name\": \"androidx.databinding:viewbinding\",\n            \"licenses\": [\n                \"Apache-2.0\"\n            ]\n        },\n        {\n            \"uniqueId\": \"androidx.documentfile:documentfile\",\n            \"funding\": [\n                \n            ],\n            \"developers\": [\n                {\n                    \"name\": \"The Android Open Source Project\"\n                }\n            ],\n            \"artifactVersion\": \"1.1.0\",\n            \"description\": \"The Support Library is a static library that you can add to your Android application in order to use APIs that are either not available for older platform versions or utility APIs that aren't a part of the framework APIs. Compatible on devices running API 14 or later.\",\n            \"scm\": {\n                \"connection\": \"scm:git:https://android.googlesource.com/platform/frameworks/support\",\n                \"url\": \"https://cs.android.com/androidx/platform/frameworks/support\"\n            },\n            \"name\": \"Document File\",\n            \"website\": \"https://developer.android.com/jetpack/androidx/releases/documentfile#1.1.0\",\n            \"licenses\": [\n                \"Apache-2.0\"\n            ],\n            \"organization\": {\n                \"name\": \"The Android Open Source Project\"\n            }\n        },\n        {\n            \"uniqueId\": \"androidx.drawerlayout:drawerlayout\",\n            \"funding\": [\n                \n            ],\n            \"developers\": [\n                {\n                    \"name\": \"The Android Open Source Project\"\n                }\n            ],\n            \"artifactVersion\": \"1.1.1\",\n            \"description\": \"The Support Library is a static library that you can add to your Android application in order to use APIs that are either not available for older platform versions or utility APIs that aren't a part of the framework APIs. Compatible on devices running API 14 or later.\",\n            \"scm\": {\n                \"connection\": \"scm:git:https://android.googlesource.com/platform/frameworks/support\",\n                \"url\": \"http://source.android.com\"\n            },\n            \"name\": \"Support Drawer Layout\",\n            \"website\": \"https://developer.android.com/jetpack/androidx\",\n            \"licenses\": [\n                \"Apache-2.0\"\n            ]\n        },\n        {\n            \"uniqueId\": \"androidx.dynamicanimation:dynamicanimation\",\n            \"funding\": [\n                \n            ],\n            \"developers\": [\n                {\n                    \"name\": \"The Android Open Source Project\"\n                }\n            ],\n            \"artifactVersion\": \"1.0.0\",\n            \"description\": \"Physics-based animation in support library, where the animations are driven by physics force. You can use this Animation library to create smooth and realistic animations.\",\n            \"scm\": {\n                \"connection\": \"scm:git:https://android.googlesource.com/platform/frameworks/support\",\n                \"url\": \"http://source.android.com\"\n            },\n            \"name\": \"Support DynamicAnimation\",\n            \"website\": \"http://developer.android.com/tools/extras/support-library.html\",\n            \"licenses\": [\n                \"Apache-2.0\"\n            ]\n        },\n        {\n            \"uniqueId\": \"androidx.emoji2:emoji2\",\n            \"funding\": [\n                \n            ],\n            \"developers\": [\n                {\n                    \"name\": \"The Android Open Source Project\"\n                }\n            ],\n            \"artifactVersion\": \"1.3.0\",\n            \"description\": \"Core library to enable emoji compatibility in Kitkat and newer devices to avoid the empty emoji characters.\",\n            \"scm\": {\n                \"connection\": \"scm:git:https://android.googlesource.com/platform/frameworks/support\",\n                \"url\": \"https://cs.android.com/androidx/platform/frameworks/support\"\n            },\n            \"name\": \"Android Emoji2 Compat\",\n            \"website\": \"https://developer.android.com/jetpack/androidx/releases/emoji2#1.3.0\",\n            \"licenses\": [\n                \"Apache-2.0\"\n            ]\n        },\n        {\n            \"uniqueId\": \"androidx.emoji2:emoji2-views-helper\",\n            \"funding\": [\n                \n            ],\n            \"developers\": [\n                {\n                    \"name\": \"The Android Open Source Project\"\n                }\n            ],\n            \"artifactVersion\": \"1.3.0\",\n            \"description\": \"View helpers for Emoji2\",\n            \"scm\": {\n                \"connection\": \"scm:git:https://android.googlesource.com/platform/frameworks/support\",\n                \"url\": \"https://cs.android.com/androidx/platform/frameworks/support\"\n            },\n            \"name\": \"Android Emoji2 Compat view helpers\",\n            \"website\": \"https://developer.android.com/jetpack/androidx/releases/emoji2#1.3.0\",\n            \"licenses\": [\n                \"Apache-2.0\"\n            ]\n        },\n        {\n            \"uniqueId\": \"androidx.exifinterface:exifinterface\",\n            \"funding\": [\n                \n            ],\n            \"developers\": [\n                {\n                    \"name\": \"The Android Open Source Project\"\n                }\n            ],\n            \"artifactVersion\": \"1.3.6\",\n            \"description\": \"Android Support ExifInterface\",\n            \"scm\": {\n                \"connection\": \"scm:git:https://android.googlesource.com/platform/frameworks/support\",\n                \"url\": \"https://cs.android.com/androidx/platform/frameworks/support\"\n            },\n            \"name\": \"Support ExifInterface\",\n            \"website\": \"https://developer.android.com/jetpack/androidx/releases/exifinterface#1.3.6\",\n            \"licenses\": [\n                \"Apache-2.0\"\n            ]\n        },\n        {\n            \"uniqueId\": \"androidx.fragment:fragment\",\n            \"funding\": [\n                \n            ],\n            \"developers\": [\n                {\n                    \"name\": \"The Android Open Source Project\"\n                }\n            ],\n            \"artifactVersion\": \"1.6.2\",\n            \"description\": \"The Support Library is a static library that you can add to your Android application in order to use APIs that are either not available for older platform versions or utility APIs that aren't a part of the framework APIs. Compatible on devices running API 14 or later.\",\n            \"scm\": {\n                \"connection\": \"scm:git:https://android.googlesource.com/platform/frameworks/support\",\n                \"url\": \"https://cs.android.com/androidx/platform/frameworks/support\"\n            },\n            \"name\": \"Support fragment\",\n            \"website\": \"https://developer.android.com/jetpack/androidx/releases/fragment#1.6.2\",\n            \"licenses\": [\n                \"Apache-2.0\"\n            ]\n        },\n        {\n            \"uniqueId\": \"androidx.fragment:fragment-ktx\",\n            \"funding\": [\n                \n            ],\n            \"developers\": [\n                {\n                    \"name\": \"The Android Open Source Project\"\n                }\n            ],\n            \"artifactVersion\": \"1.6.2\",\n            \"description\": \"Kotlin extensions for 'fragment' artifact\",\n            \"scm\": {\n                \"connection\": \"scm:git:https://android.googlesource.com/platform/frameworks/support\",\n                \"url\": \"https://cs.android.com/androidx/platform/frameworks/support\"\n            },\n            \"name\": \"Fragment Kotlin Extensions\",\n            \"website\": \"https://developer.android.com/jetpack/androidx/releases/fragment#1.6.2\",\n            \"licenses\": [\n                \"Apache-2.0\"\n            ]\n        },\n        {\n            \"uniqueId\": \"androidx.interpolator:interpolator\",\n            \"funding\": [\n                \n            ],\n            \"developers\": [\n                {\n                    \"name\": \"The Android Open Source Project\"\n                }\n            ],\n            \"artifactVersion\": \"1.0.0\",\n            \"description\": \"The Support Library is a static library that you can add to your Android application in order to use APIs that are either not available for older platform versions or utility APIs that aren't a part of the framework APIs. Compatible on devices running API 14 or later.\",\n            \"scm\": {\n                \"connection\": \"scm:git:https://android.googlesource.com/platform/frameworks/support\",\n                \"url\": \"http://source.android.com\"\n            },\n            \"name\": \"Support Interpolators\",\n            \"website\": \"http://developer.android.com/tools/extras/support-library.html\",\n            \"licenses\": [\n                \"Apache-2.0\"\n            ]\n        },\n        {\n            \"uniqueId\": \"androidx.legacy:legacy-support-core-utils\",\n            \"funding\": [\n                \n            ],\n            \"developers\": [\n                {\n                    \"name\": \"The Android Open Source Project\"\n                }\n            ],\n            \"artifactVersion\": \"1.0.0\",\n            \"description\": \"The Support Library is a static library that you can add to your Android application in order to use APIs that are either not available for older platform versions or utility APIs that aren't a part of the framework APIs. Compatible on devices running API 14 or later.\",\n            \"scm\": {\n                \"connection\": \"scm:git:https://android.googlesource.com/platform/frameworks/support\",\n                \"url\": \"http://source.android.com\"\n            },\n            \"name\": \"Support core utils\",\n            \"website\": \"http://developer.android.com/tools/extras/support-library.html\",\n            \"licenses\": [\n                \"Apache-2.0\"\n            ]\n        },\n        {\n            \"uniqueId\": \"androidx.lifecycle:lifecycle-common-jvm\",\n            \"funding\": [\n                \n            ],\n            \"developers\": [\n                {\n                    \"name\": \"The Android Open Source Project\"\n                }\n            ],\n            \"artifactVersion\": \"2.9.0\",\n            \"description\": \"Android Lifecycle-Common\",\n            \"scm\": {\n                \"connection\": \"scm:git:https://android.googlesource.com/platform/frameworks/support\",\n                \"url\": \"https://cs.android.com/androidx/platform/frameworks/support\"\n            },\n            \"name\": \"Lifecycle-Common\",\n            \"website\": \"https://developer.android.com/jetpack/androidx/releases/lifecycle#2.9.0\",\n            \"licenses\": [\n                \"Apache-2.0\"\n            ],\n            \"organization\": {\n                \"name\": \"The Android Open Source Project\"\n            }\n        },\n        {\n            \"uniqueId\": \"androidx.lifecycle:lifecycle-livedata\",\n            \"funding\": [\n                \n            ],\n            \"developers\": [\n                {\n                    \"name\": \"The Android Open Source Project\"\n                }\n            ],\n            \"artifactVersion\": \"2.9.0\",\n            \"description\": \"Android Lifecycle LiveData\",\n            \"scm\": {\n                \"connection\": \"scm:git:https://android.googlesource.com/platform/frameworks/support\",\n                \"url\": \"https://cs.android.com/androidx/platform/frameworks/support\"\n            },\n            \"name\": \"Lifecycle LiveData\",\n            \"website\": \"https://developer.android.com/jetpack/androidx/releases/lifecycle#2.9.0\",\n            \"licenses\": [\n                \"Apache-2.0\"\n            ],\n            \"organization\": {\n                \"name\": \"The Android Open Source Project\"\n            }\n        },\n        {\n            \"uniqueId\": \"androidx.lifecycle:lifecycle-livedata-core\",\n            \"funding\": [\n                \n            ],\n            \"developers\": [\n                {\n                    \"name\": \"The Android Open Source Project\"\n                }\n            ],\n            \"artifactVersion\": \"2.9.0\",\n            \"description\": \"Android Lifecycle LiveData Core\",\n            \"scm\": {\n                \"connection\": \"scm:git:https://android.googlesource.com/platform/frameworks/support\",\n                \"url\": \"https://cs.android.com/androidx/platform/frameworks/support\"\n            },\n            \"name\": \"Lifecycle LiveData Core\",\n            \"website\": \"https://developer.android.com/jetpack/androidx/releases/lifecycle#2.9.0\",\n            \"licenses\": [\n                \"Apache-2.0\"\n            ],\n            \"organization\": {\n                \"name\": \"The Android Open Source Project\"\n            }\n        },\n        {\n            \"uniqueId\": \"androidx.lifecycle:lifecycle-livedata-core-ktx\",\n            \"funding\": [\n                \n            ],\n            \"developers\": [\n                {\n                    \"name\": \"The Android Open Source Project\"\n                }\n            ],\n            \"artifactVersion\": \"2.9.0\",\n            \"description\": \"Kotlin extensions for 'livedata-core' artifact\",\n            \"scm\": {\n                \"connection\": \"scm:git:https://android.googlesource.com/platform/frameworks/support\",\n                \"url\": \"https://cs.android.com/androidx/platform/frameworks/support\"\n            },\n            \"name\": \"LiveData Core Kotlin Extensions\",\n            \"website\": \"https://developer.android.com/jetpack/androidx/releases/lifecycle#2.9.0\",\n            \"licenses\": [\n                \"Apache-2.0\"\n            ],\n            \"organization\": {\n                \"name\": \"The Android Open Source Project\"\n            }\n        },\n        {\n            \"uniqueId\": \"androidx.lifecycle:lifecycle-livedata-ktx\",\n            \"funding\": [\n                \n            ],\n            \"developers\": [\n                {\n                    \"name\": \"The Android Open Source Project\"\n                }\n            ],\n            \"artifactVersion\": \"2.9.0\",\n            \"description\": \"Kotlin extensions for 'livedata' artifact\",\n            \"scm\": {\n                \"connection\": \"scm:git:https://android.googlesource.com/platform/frameworks/support\",\n                \"url\": \"https://cs.android.com/androidx/platform/frameworks/support\"\n            },\n            \"name\": \"LiveData Kotlin Extensions\",\n            \"website\": \"https://developer.android.com/jetpack/androidx/releases/lifecycle#2.9.0\",\n            \"licenses\": [\n                \"Apache-2.0\"\n            ],\n            \"organization\": {\n                \"name\": \"The Android Open Source Project\"\n            }\n        },\n        {\n            \"uniqueId\": \"androidx.lifecycle:lifecycle-process\",\n            \"funding\": [\n                \n            ],\n            \"developers\": [\n                {\n                    \"name\": \"The Android Open Source Project\"\n                }\n            ],\n            \"artifactVersion\": \"2.9.0\",\n            \"description\": \"Android Lifecycle Process\",\n            \"scm\": {\n                \"connection\": \"scm:git:https://android.googlesource.com/platform/frameworks/support\",\n                \"url\": \"https://cs.android.com/androidx/platform/frameworks/support\"\n            },\n            \"name\": \"Lifecycle Process\",\n            \"website\": \"https://developer.android.com/jetpack/androidx/releases/lifecycle#2.9.0\",\n            \"licenses\": [\n                \"Apache-2.0\"\n            ],\n            \"organization\": {\n                \"name\": \"The Android Open Source Project\"\n            }\n        },\n        {\n            \"uniqueId\": \"androidx.lifecycle:lifecycle-runtime-android\",\n            \"funding\": [\n                \n            ],\n            \"developers\": [\n                {\n                    \"name\": \"The Android Open Source Project\"\n                }\n            ],\n            \"artifactVersion\": \"2.9.0\",\n            \"description\": \"Android Lifecycle Runtime\",\n            \"scm\": {\n                \"connection\": \"scm:git:https://android.googlesource.com/platform/frameworks/support\",\n                \"url\": \"https://cs.android.com/androidx/platform/frameworks/support\"\n            },\n            \"name\": \"Lifecycle Runtime\",\n            \"website\": \"https://developer.android.com/jetpack/androidx/releases/lifecycle#2.9.0\",\n            \"licenses\": [\n                \"Apache-2.0\"\n            ],\n            \"organization\": {\n                \"name\": \"The Android Open Source Project\"\n            }\n        },\n        {\n            \"uniqueId\": \"androidx.lifecycle:lifecycle-runtime-ktx-android\",\n            \"funding\": [\n                \n            ],\n            \"developers\": [\n                {\n                    \"name\": \"The Android Open Source Project\"\n                }\n            ],\n            \"artifactVersion\": \"2.9.0\",\n            \"description\": \"Kotlin extensions for 'lifecycle' artifact\",\n            \"scm\": {\n                \"connection\": \"scm:git:https://android.googlesource.com/platform/frameworks/support\",\n                \"url\": \"https://cs.android.com/androidx/platform/frameworks/support\"\n            },\n            \"name\": \"Lifecycle Kotlin Extensions\",\n            \"website\": \"https://developer.android.com/jetpack/androidx/releases/lifecycle#2.9.0\",\n            \"licenses\": [\n                \"Apache-2.0\"\n            ],\n            \"organization\": {\n                \"name\": \"The Android Open Source Project\"\n            }\n        },\n        {\n            \"uniqueId\": \"androidx.lifecycle:lifecycle-viewmodel\",\n            \"funding\": [\n                \n            ],\n            \"developers\": [\n                {\n                    \"name\": \"The Android Open Source Project\"\n                }\n            ],\n            \"artifactVersion\": \"2.9.0\",\n            \"description\": \"Android Lifecycle ViewModel\",\n            \"scm\": {\n                \"connection\": \"scm:git:https://android.googlesource.com/platform/frameworks/support\",\n                \"url\": \"https://cs.android.com/androidx/platform/frameworks/support\"\n            },\n            \"name\": \"Lifecycle ViewModel\",\n            \"website\": \"https://developer.android.com/jetpack/androidx/releases/lifecycle#2.9.0\",\n            \"licenses\": [\n                \"Apache-2.0\"\n            ],\n            \"organization\": {\n                \"name\": \"The Android Open Source Project\"\n            }\n        },\n        {\n            \"uniqueId\": \"androidx.lifecycle:lifecycle-viewmodel-ktx\",\n            \"funding\": [\n                \n            ],\n            \"developers\": [\n                {\n                    \"name\": \"The Android Open Source Project\"\n                }\n            ],\n            \"artifactVersion\": \"2.9.0\",\n            \"description\": \"Kotlin extensions for 'viewmodel' artifact\",\n            \"scm\": {\n                \"connection\": \"scm:git:https://android.googlesource.com/platform/frameworks/support\",\n                \"url\": \"https://cs.android.com/androidx/platform/frameworks/support\"\n            },\n            \"name\": \"Lifecycle ViewModel Kotlin Extensions\",\n            \"website\": \"https://developer.android.com/jetpack/androidx/releases/lifecycle#2.9.0\",\n            \"licenses\": [\n                \"Apache-2.0\"\n            ],\n            \"organization\": {\n                \"name\": \"The Android Open Source Project\"\n            }\n        },\n        {\n            \"uniqueId\": \"androidx.lifecycle:lifecycle-viewmodel-savedstate\",\n            \"funding\": [\n                \n            ],\n            \"developers\": [\n                {\n                    \"name\": \"The Android Open Source Project\"\n                }\n            ],\n            \"artifactVersion\": \"2.9.0\",\n            \"description\": \"Android Lifecycle ViewModel\",\n            \"scm\": {\n                \"connection\": \"scm:git:https://android.googlesource.com/platform/frameworks/support\",\n                \"url\": \"https://cs.android.com/androidx/platform/frameworks/support\"\n            },\n            \"name\": \"Lifecycle ViewModel with SavedState\",\n            \"website\": \"https://developer.android.com/jetpack/androidx/releases/lifecycle#2.9.0\",\n            \"licenses\": [\n                \"Apache-2.0\"\n            ],\n            \"organization\": {\n                \"name\": \"The Android Open Source Project\"\n            }\n        },\n        {\n            \"uniqueId\": \"androidx.loader:loader\",\n            \"funding\": [\n                \n            ],\n            \"developers\": [\n                {\n                    \"name\": \"The Android Open Source Project\"\n                }\n            ],\n            \"artifactVersion\": \"1.0.0\",\n            \"description\": \"The Support Library is a static library that you can add to your Android application in order to use APIs that are either not available for older platform versions or utility APIs that aren't a part of the framework APIs. Compatible on devices running API 14 or later.\",\n            \"scm\": {\n                \"connection\": \"scm:git:https://android.googlesource.com/platform/frameworks/support\",\n                \"url\": \"http://source.android.com\"\n            },\n            \"name\": \"Support loader\",\n            \"website\": \"http://developer.android.com/tools/extras/support-library.html\",\n            \"licenses\": [\n                \"Apache-2.0\"\n            ]\n        },\n        {\n            \"uniqueId\": \"androidx.localbroadcastmanager:localbroadcastmanager\",\n            \"funding\": [\n                \n            ],\n            \"developers\": [\n                {\n                    \"name\": \"The Android Open Source Project\"\n                }\n            ],\n            \"artifactVersion\": \"1.0.0\",\n            \"description\": \"The Support Library is a static library that you can add to your Android application in order to use APIs that are either not available for older platform versions or utility APIs that aren't a part of the framework APIs. Compatible on devices running API 14 or later.\",\n            \"scm\": {\n                \"connection\": \"scm:git:https://android.googlesource.com/platform/frameworks/support\",\n                \"url\": \"http://source.android.com\"\n            },\n            \"name\": \"Support Local Broadcast Manager\",\n            \"website\": \"http://developer.android.com/tools/extras/support-library.html\",\n            \"licenses\": [\n                \"Apache-2.0\"\n            ]\n        },\n        {\n            \"uniqueId\": \"androidx.multidex:multidex\",\n            \"funding\": [\n                \n            ],\n            \"developers\": [\n                {\n                    \"name\": \"The Android Open Source Project\"\n                }\n            ],\n            \"artifactVersion\": \"2.0.1\",\n            \"description\": \"Library for legacy multi-dex support\",\n            \"scm\": {\n                \"connection\": \"scm:git:https://android.googlesource.com/platform/frameworks/multidex\",\n                \"url\": \"http://source.android.com\"\n            },\n            \"name\": \"Android Multi-Dex Library\",\n            \"licenses\": [\n                \"Apache-2.0\"\n            ]\n        },\n        {\n            \"uniqueId\": \"androidx.navigation:navigation-common\",\n            \"funding\": [\n                \n            ],\n            \"developers\": [\n                {\n                    \"name\": \"The Android Open Source Project\"\n                }\n            ],\n            \"artifactVersion\": \"2.7.7\",\n            \"description\": \"Android Navigation-Common\",\n            \"scm\": {\n                \"connection\": \"scm:git:https://android.googlesource.com/platform/frameworks/support\",\n                \"url\": \"https://cs.android.com/androidx/platform/frameworks/support\"\n            },\n            \"name\": \"Navigation Common\",\n            \"website\": \"https://developer.android.com/jetpack/androidx/releases/navigation#2.7.7\",\n            \"licenses\": [\n                \"Apache-2.0\"\n            ]\n        },\n        {\n            \"uniqueId\": \"androidx.navigation:navigation-fragment\",\n            \"funding\": [\n                \n            ],\n            \"developers\": [\n                {\n                    \"name\": \"The Android Open Source Project\"\n                }\n            ],\n            \"artifactVersion\": \"2.7.7\",\n            \"description\": \"Android Navigation-Fragment\",\n            \"scm\": {\n                \"connection\": \"scm:git:https://android.googlesource.com/platform/frameworks/support\",\n                \"url\": \"https://cs.android.com/androidx/platform/frameworks/support\"\n            },\n            \"name\": \"Navigation Fragment\",\n            \"website\": \"https://developer.android.com/jetpack/androidx/releases/navigation#2.7.7\",\n            \"licenses\": [\n                \"Apache-2.0\"\n            ]\n        },\n        {\n            \"uniqueId\": \"androidx.navigation:navigation-runtime\",\n            \"funding\": [\n                \n            ],\n            \"developers\": [\n                {\n                    \"name\": \"The Android Open Source Project\"\n                }\n            ],\n            \"artifactVersion\": \"2.7.7\",\n            \"description\": \"Android Navigation-Runtime\",\n            \"scm\": {\n                \"connection\": \"scm:git:https://android.googlesource.com/platform/frameworks/support\",\n                \"url\": \"https://cs.android.com/androidx/platform/frameworks/support\"\n            },\n            \"name\": \"Navigation Runtime\",\n            \"website\": \"https://developer.android.com/jetpack/androidx/releases/navigation#2.7.7\",\n            \"licenses\": [\n                \"Apache-2.0\"\n            ]\n        },\n        {\n            \"uniqueId\": \"androidx.preference:preference\",\n            \"funding\": [\n                \n            ],\n            \"developers\": [\n                {\n                    \"name\": \"The Android Open Source Project\"\n                }\n            ],\n            \"artifactVersion\": \"1.2.1\",\n            \"description\": \"AndroidX Preference\",\n            \"scm\": {\n                \"connection\": \"scm:git:https://android.googlesource.com/platform/frameworks/support\",\n                \"url\": \"https://cs.android.com/androidx/platform/frameworks/support\"\n            },\n            \"name\": \"AndroidX Preference\",\n            \"website\": \"https://developer.android.com/jetpack/androidx/releases/preference#1.2.1\",\n            \"licenses\": [\n                \"Apache-2.0\"\n            ]\n        },\n        {\n            \"uniqueId\": \"androidx.print:print\",\n            \"funding\": [\n                \n            ],\n            \"developers\": [\n                {\n                    \"name\": \"The Android Open Source Project\"\n                }\n            ],\n            \"artifactVersion\": \"1.0.0\",\n            \"description\": \"The Support Library is a static library that you can add to your Android application in order to use APIs that are either not available for older platform versions or utility APIs that aren't a part of the framework APIs. Compatible on devices running API 14 or later.\",\n            \"scm\": {\n                \"connection\": \"scm:git:https://android.googlesource.com/platform/frameworks/support\",\n                \"url\": \"http://source.android.com\"\n            },\n            \"name\": \"Support Print\",\n            \"website\": \"http://developer.android.com/tools/extras/support-library.html\",\n            \"licenses\": [\n                \"Apache-2.0\"\n            ]\n        },\n        {\n            \"uniqueId\": \"androidx.profileinstaller:profileinstaller\",\n            \"funding\": [\n                \n            ],\n            \"developers\": [\n                {\n                    \"name\": \"The Android Open Source Project\"\n                }\n            ],\n            \"artifactVersion\": \"1.4.0\",\n            \"description\": \"Allows libraries to prepopulate ahead of time compilation traces to be read by ART\",\n            \"scm\": {\n                \"connection\": \"scm:git:https://android.googlesource.com/platform/frameworks/support\",\n                \"url\": \"https://cs.android.com/androidx/platform/frameworks/support\"\n            },\n            \"name\": \"Profile Installer\",\n            \"website\": \"https://developer.android.com/jetpack/androidx/releases/profileinstaller#1.4.0\",\n            \"licenses\": [\n                \"Apache-2.0\"\n            ],\n            \"organization\": {\n                \"name\": \"The Android Open Source Project\"\n            }\n        },\n        {\n            \"uniqueId\": \"androidx.recyclerview:recyclerview\",\n            \"funding\": [\n                \n            ],\n            \"developers\": [\n                {\n                    \"name\": \"The Android Open Source Project\"\n                }\n            ],\n            \"artifactVersion\": \"1.4.0\",\n            \"description\": \"Android Support RecyclerView\",\n            \"scm\": {\n                \"connection\": \"scm:git:https://android.googlesource.com/platform/frameworks/support\",\n                \"url\": \"https://cs.android.com/androidx/platform/frameworks/support\"\n            },\n            \"name\": \"RecyclerView\",\n            \"website\": \"https://developer.android.com/jetpack/androidx/releases/recyclerview#1.4.0\",\n            \"licenses\": [\n                \"Apache-2.0\"\n            ],\n            \"organization\": {\n                \"name\": \"The Android Open Source Project\"\n            }\n        },\n        {\n            \"uniqueId\": \"androidx.resourceinspection:resourceinspection-annotation\",\n            \"funding\": [\n                \n            ],\n            \"developers\": [\n                {\n                    \"name\": \"The Android Open Source Project\"\n                }\n            ],\n            \"artifactVersion\": \"1.0.1\",\n            \"description\": \"Annotation processors for Android resource and layout inspection\",\n            \"scm\": {\n                \"connection\": \"scm:git:https://android.googlesource.com/platform/frameworks/support\",\n                \"url\": \"https://cs.android.com/androidx/platform/frameworks/support\"\n            },\n            \"name\": \"Android Resource Inspection - Annotations\",\n            \"website\": \"https://developer.android.com/jetpack/androidx/releases/resourceinspection#1.0.1\",\n            \"licenses\": [\n                \"Apache-2.0\"\n            ]\n        },\n        {\n            \"uniqueId\": \"androidx.room:room-common-jvm\",\n            \"funding\": [\n                \n            ],\n            \"developers\": [\n                {\n                    \"name\": \"The Android Open Source Project\"\n                }\n            ],\n            \"artifactVersion\": \"2.7.1\",\n            \"description\": \"Android Room-Common\",\n            \"scm\": {\n                \"connection\": \"scm:git:https://android.googlesource.com/platform/frameworks/support\",\n                \"url\": \"https://cs.android.com/androidx/platform/frameworks/support\"\n            },\n            \"name\": \"Room-Common\",\n            \"website\": \"https://developer.android.com/jetpack/androidx/releases/room#2.7.1\",\n            \"licenses\": [\n                \"Apache-2.0\"\n            ],\n            \"organization\": {\n                \"name\": \"The Android Open Source Project\"\n            }\n        },\n        {\n            \"uniqueId\": \"androidx.room:room-runtime-android\",\n            \"funding\": [\n                \n            ],\n            \"developers\": [\n                {\n                    \"name\": \"The Android Open Source Project\"\n                }\n            ],\n            \"artifactVersion\": \"2.7.1\",\n            \"description\": \"Android Room-Runtime\",\n            \"scm\": {\n                \"connection\": \"scm:git:https://android.googlesource.com/platform/frameworks/support\",\n                \"url\": \"https://cs.android.com/androidx/platform/frameworks/support\"\n            },\n            \"name\": \"Room-Runtime\",\n            \"website\": \"https://developer.android.com/jetpack/androidx/releases/room#2.7.1\",\n            \"licenses\": [\n                \"Apache-2.0\"\n            ],\n            \"organization\": {\n                \"name\": \"The Android Open Source Project\"\n            }\n        },\n        {\n            \"uniqueId\": \"androidx.savedstate:savedstate\",\n            \"funding\": [\n                \n            ],\n            \"developers\": [\n                {\n                    \"name\": \"The Android Open Source Project\"\n                }\n            ],\n            \"artifactVersion\": \"1.3.0\",\n            \"description\": \"Android Lifecycle Saved State\",\n            \"scm\": {\n                \"connection\": \"scm:git:https://android.googlesource.com/platform/frameworks/support\",\n                \"url\": \"https://cs.android.com/androidx/platform/frameworks/support\"\n            },\n            \"name\": \"Saved State\",\n            \"website\": \"https://developer.android.com/jetpack/androidx/releases/savedstate#1.3.0\",\n            \"licenses\": [\n                \"Apache-2.0\"\n            ],\n            \"organization\": {\n                \"name\": \"The Android Open Source Project\"\n            }\n        },\n        {\n            \"uniqueId\": \"androidx.savedstate:savedstate-ktx\",\n            \"funding\": [\n                \n            ],\n            \"developers\": [\n                {\n                    \"name\": \"The Android Open Source Project\"\n                }\n            ],\n            \"artifactVersion\": \"1.3.0\",\n            \"description\": \"Kotlin extensions for 'savedstate' artifact\",\n            \"scm\": {\n                \"connection\": \"scm:git:https://android.googlesource.com/platform/frameworks/support\",\n                \"url\": \"https://cs.android.com/androidx/platform/frameworks/support\"\n            },\n            \"name\": \"SavedState Kotlin Extensions\",\n            \"website\": \"https://developer.android.com/jetpack/androidx/releases/savedstate#1.3.0\",\n            \"licenses\": [\n                \"Apache-2.0\"\n            ],\n            \"organization\": {\n                \"name\": \"The Android Open Source Project\"\n            }\n        },\n        {\n            \"uniqueId\": \"androidx.slidingpanelayout:slidingpanelayout\",\n            \"funding\": [\n                \n            ],\n            \"developers\": [\n                {\n                    \"name\": \"The Android Open Source Project\"\n                }\n            ],\n            \"artifactVersion\": \"1.2.0\",\n            \"description\": \"SlidingPaneLayout offers a responsive, two pane layout that automatically switches between overlapping panes on smaller devices to a side by side view on larger devices.\",\n            \"scm\": {\n                \"connection\": \"scm:git:https://android.googlesource.com/platform/frameworks/support\",\n                \"url\": \"https://cs.android.com/androidx/platform/frameworks/support\"\n            },\n            \"name\": \"Support Sliding Pane Layout\",\n            \"website\": \"https://developer.android.com/jetpack/androidx/releases/slidingpanelayout#1.2.0\",\n            \"licenses\": [\n                \"Apache-2.0\"\n            ]\n        },\n        {\n            \"uniqueId\": \"androidx.sqlite:sqlite-android\",\n            \"funding\": [\n                \n            ],\n            \"developers\": [\n                {\n                    \"name\": \"The Android Open Source Project\"\n                }\n            ],\n            \"artifactVersion\": \"2.5.0\",\n            \"description\": \"SQLite API\",\n            \"scm\": {\n                \"connection\": \"scm:git:https://android.googlesource.com/platform/frameworks/support\",\n                \"url\": \"https://cs.android.com/androidx/platform/frameworks/support\"\n            },\n            \"name\": \"SQLite\",\n            \"website\": \"https://developer.android.com/jetpack/androidx/releases/sqlite#2.5.0\",\n            \"licenses\": [\n                \"Apache-2.0\"\n            ],\n            \"organization\": {\n                \"name\": \"The Android Open Source Project\"\n            }\n        },\n        {\n            \"uniqueId\": \"androidx.sqlite:sqlite-framework-android\",\n            \"funding\": [\n                \n            ],\n            \"developers\": [\n                {\n                    \"name\": \"The Android Open Source Project\"\n                }\n            ],\n            \"artifactVersion\": \"2.5.0\",\n            \"description\": \"The implementation of SQLite library using the framework code.\",\n            \"scm\": {\n                \"connection\": \"scm:git:https://android.googlesource.com/platform/frameworks/support\",\n                \"url\": \"https://cs.android.com/androidx/platform/frameworks/support\"\n            },\n            \"name\": \"SQLite Framework Integration\",\n            \"website\": \"https://developer.android.com/jetpack/androidx/releases/sqlite#2.5.0\",\n            \"licenses\": [\n                \"Apache-2.0\"\n            ],\n            \"organization\": {\n                \"name\": \"The Android Open Source Project\"\n            }\n        },\n        {\n            \"uniqueId\": \"androidx.startup:startup-runtime\",\n            \"funding\": [\n                \n            ],\n            \"developers\": [\n                {\n                    \"name\": \"The Android Open Source Project\"\n                }\n            ],\n            \"artifactVersion\": \"1.1.1\",\n            \"description\": \"Android App Startup Runtime\",\n            \"scm\": {\n                \"connection\": \"scm:git:https://android.googlesource.com/platform/frameworks/support\",\n                \"url\": \"https://cs.android.com/androidx/platform/frameworks/support\"\n            },\n            \"name\": \"Android App Startup Runtime\",\n            \"website\": \"https://developer.android.com/jetpack/androidx/releases/startup#1.1.1\",\n            \"licenses\": [\n                \"Apache-2.0\"\n            ]\n        },\n        {\n            \"uniqueId\": \"androidx.test.espresso:espresso-contrib\",\n            \"funding\": [\n                \n            ],\n            \"developers\": [\n                {\n                    \"name\": \"The Android Open Source Project\"\n                }\n            ],\n            \"artifactVersion\": \"3.6.1\",\n            \"description\": \"The AndroidX Test Library provides an extensive framework for testing Android apps\",\n            \"name\": \"AndroidX Test Library\",\n            \"website\": \"https://developer.android.com/testing\",\n            \"licenses\": [\n                \"Apache-2.0\"\n            ]\n        },\n        {\n            \"uniqueId\": \"androidx.test.ext:junit\",\n            \"funding\": [\n                \n            ],\n            \"developers\": [\n                {\n                    \"name\": \"The Android Open Source Project\"\n                }\n            ],\n            \"artifactVersion\": \"1.2.1\",\n            \"description\": \"The AndroidX Test Library provides an extensive framework for testing Android apps\",\n            \"name\": \"AndroidX Test Library\",\n            \"website\": \"https://developer.android.com/testing\",\n            \"licenses\": [\n                \"Apache-2.0\"\n            ]\n        },\n        {\n            \"uniqueId\": \"androidx.test.services:storage\",\n            \"funding\": [\n                \n            ],\n            \"developers\": [\n                {\n                    \"name\": \"The Android Open Source Project\"\n                }\n            ],\n            \"artifactVersion\": \"1.5.0\",\n            \"description\": \"The AndroidX Test Library provides an extensive framework for testing Android apps\",\n            \"name\": \"AndroidX Test Library\",\n            \"website\": \"https://developer.android.com/testing\",\n            \"licenses\": [\n                \"Apache-2.0\"\n            ]\n        },\n        {\n            \"uniqueId\": \"androidx.test:core\",\n            \"funding\": [\n                \n            ],\n            \"developers\": [\n                {\n                    \"name\": \"The Android Open Source Project\"\n                }\n            ],\n            \"artifactVersion\": \"1.6.1\",\n            \"description\": \"The AndroidX Test Library provides an extensive framework for testing Android apps\",\n            \"name\": \"AndroidX Test Library\",\n            \"website\": \"https://developer.android.com/testing\",\n            \"licenses\": [\n                \"Apache-2.0\"\n            ]\n        },\n        {\n            \"uniqueId\": \"androidx.tracing:tracing\",\n            \"funding\": [\n                \n            ],\n            \"developers\": [\n                {\n                    \"name\": \"The Android Open Source Project\"\n                }\n            ],\n            \"artifactVersion\": \"1.2.0\",\n            \"description\": \"Android Tracing\",\n            \"scm\": {\n                \"connection\": \"scm:git:https://android.googlesource.com/platform/frameworks/support\",\n                \"url\": \"https://cs.android.com/androidx/platform/frameworks/support\"\n            },\n            \"name\": \"Android Tracing\",\n            \"website\": \"https://developer.android.com/jetpack/androidx/releases/tracing#1.2.0\",\n            \"licenses\": [\n                \"Apache-2.0\"\n            ]\n        },\n        {\n            \"uniqueId\": \"androidx.tracing:tracing-ktx\",\n            \"funding\": [\n                \n            ],\n            \"developers\": [\n                {\n                    \"name\": \"The Android Open Source Project\"\n                }\n            ],\n            \"artifactVersion\": \"1.2.0\",\n            \"description\": \"Android Tracing\",\n            \"scm\": {\n                \"connection\": \"scm:git:https://android.googlesource.com/platform/frameworks/support\",\n                \"url\": \"https://cs.android.com/androidx/platform/frameworks/support\"\n            },\n            \"name\": \"Android Tracing Runtime Kotlin Extensions\",\n            \"website\": \"https://developer.android.com/jetpack/androidx/releases/tracing#1.2.0\",\n            \"licenses\": [\n                \"Apache-2.0\"\n            ]\n        },\n        {\n            \"uniqueId\": \"androidx.transition:transition\",\n            \"funding\": [\n                \n            ],\n            \"developers\": [\n                {\n                    \"name\": \"The Android Open Source Project\"\n                }\n            ],\n            \"artifactVersion\": \"1.5.0\",\n            \"description\": \"Android Transition Support Library\",\n            \"scm\": {\n                \"connection\": \"scm:git:https://android.googlesource.com/platform/frameworks/support\",\n                \"url\": \"https://cs.android.com/androidx/platform/frameworks/support\"\n            },\n            \"name\": \"Transition\",\n            \"website\": \"https://developer.android.com/jetpack/androidx/releases/transition#1.5.0\",\n            \"licenses\": [\n                \"Apache-2.0\"\n            ],\n            \"organization\": {\n                \"name\": \"The Android Open Source Project\"\n            }\n        },\n        {\n            \"uniqueId\": \"androidx.vectordrawable:vectordrawable\",\n            \"funding\": [\n                \n            ],\n            \"developers\": [\n                {\n                    \"name\": \"The Android Open Source Project\"\n                }\n            ],\n            \"artifactVersion\": \"1.1.0\",\n            \"description\": \"Android Support VectorDrawable\",\n            \"scm\": {\n                \"connection\": \"scm:git:https://android.googlesource.com/platform/frameworks/support\",\n                \"url\": \"http://source.android.com\"\n            },\n            \"name\": \"Support VectorDrawable\",\n            \"website\": \"https://developer.android.com/jetpack/androidx\",\n            \"licenses\": [\n                \"Apache-2.0\"\n            ]\n        },\n        {\n            \"uniqueId\": \"androidx.vectordrawable:vectordrawable-animated\",\n            \"funding\": [\n                \n            ],\n            \"developers\": [\n                {\n                    \"name\": \"The Android Open Source Project\"\n                }\n            ],\n            \"artifactVersion\": \"1.1.0\",\n            \"description\": \"Android Support AnimatedVectorDrawable\",\n            \"scm\": {\n                \"connection\": \"scm:git:https://android.googlesource.com/platform/frameworks/support\",\n                \"url\": \"http://source.android.com\"\n            },\n            \"name\": \"Support AnimatedVectorDrawable\",\n            \"website\": \"https://developer.android.com/jetpack/androidx\",\n            \"licenses\": [\n                \"Apache-2.0\"\n            ]\n        },\n        {\n            \"uniqueId\": \"androidx.versionedparcelable:versionedparcelable\",\n            \"funding\": [\n                \n            ],\n            \"developers\": [\n                {\n                    \"name\": \"The Android Open Source Project\"\n                }\n            ],\n            \"artifactVersion\": \"1.1.1\",\n            \"description\": \"Provides a stable but relatively compact binary serialization format that can be passed across processes or persisted safely.\",\n            \"scm\": {\n                \"connection\": \"scm:git:https://android.googlesource.com/platform/frameworks/support\",\n                \"url\": \"http://source.android.com\"\n            },\n            \"name\": \"VersionedParcelable\",\n            \"website\": \"http://developer.android.com/tools/extras/support-library.html\",\n            \"licenses\": [\n                \"Apache-2.0\"\n            ]\n        },\n        {\n            \"uniqueId\": \"androidx.viewpager2:viewpager2\",\n            \"funding\": [\n                \n            ],\n            \"developers\": [\n                {\n                    \"name\": \"The Android Open Source Project\"\n                }\n            ],\n            \"artifactVersion\": \"1.1.0\",\n            \"description\": \"AndroidX Widget ViewPager2\",\n            \"scm\": {\n                \"connection\": \"scm:git:https://android.googlesource.com/platform/frameworks/support\",\n                \"url\": \"https://cs.android.com/androidx/platform/frameworks/support\"\n            },\n            \"name\": \"ViewPager2\",\n            \"website\": \"https://developer.android.com/jetpack/androidx/releases/viewpager2#1.1.0\",\n            \"licenses\": [\n                \"Apache-2.0\"\n            ],\n            \"organization\": {\n                \"name\": \"The Android Open Source Project\"\n            }\n        },\n        {\n            \"uniqueId\": \"androidx.viewpager:viewpager\",\n            \"funding\": [\n                \n            ],\n            \"developers\": [\n                {\n                    \"name\": \"The Android Open Source Project\"\n                }\n            ],\n            \"artifactVersion\": \"1.0.0\",\n            \"description\": \"The Support Library is a static library that you can add to your Android application in order to use APIs that are either not available for older platform versions or utility APIs that aren't a part of the framework APIs. Compatible on devices running API 14 or later.\",\n            \"scm\": {\n                \"connection\": \"scm:git:https://android.googlesource.com/platform/frameworks/support\",\n                \"url\": \"http://source.android.com\"\n            },\n            \"name\": \"Support View Pager\",\n            \"website\": \"http://developer.android.com/tools/extras/support-library.html\",\n            \"licenses\": [\n                \"Apache-2.0\"\n            ]\n        },\n        {\n            \"uniqueId\": \"androidx.window:window\",\n            \"funding\": [\n                \n            ],\n            \"developers\": [\n                {\n                    \"name\": \"The Android Open Source Project\"\n                }\n            ],\n            \"artifactVersion\": \"1.0.0\",\n            \"description\": \"WindowManager Jetpack library. Currently only provides additional functionality on foldable devices.\",\n            \"scm\": {\n                \"connection\": \"scm:git:https://android.googlesource.com/platform/frameworks/support\",\n                \"url\": \"https://cs.android.com/androidx/platform/frameworks/support\"\n            },\n            \"name\": \"Jetpack WindowManager Library\",\n            \"website\": \"https://developer.android.com/jetpack/androidx/releases/window#1.0.0\",\n            \"licenses\": [\n                \"Apache-2.0\"\n            ]\n        },\n        {\n            \"uniqueId\": \"com.almworks.sqlite4java:sqlite4java\",\n            \"funding\": [\n                \n            ],\n            \"developers\": [\n                {\n                    \"name\": \"Igor Sereda\"\n                },\n                {\n                    \"name\": \"Eugene Vagin\"\n                },\n                {\n                    \"name\": \"Dmitry Peshehonov\"\n                }\n            ],\n            \"artifactVersion\": \"1.0.392\",\n            \"description\": \"Minimalistic high-performance Java wrapper for SQLite\",\n            \"scm\": {\n                \"connection\": \"scm:svn:http://sqlite4java.googlecode.com/svn/trunk/\",\n                \"url\": \"http://sqlite4java.googlecode.com/svn/trunk/\",\n                \"developerConnection\": \"scm:svn:https://sqlite4java.googlecode.com/svn/trunk/\"\n            },\n            \"name\": \"sqlite4java\",\n            \"website\": \"http://code.google.com/p/sqlite4java\",\n            \"licenses\": [\n                \"Apache-2.0\"\n            ],\n            \"organization\": {\n                \"url\": \"http://almworks.com\",\n                \"name\": \"ALM Works\"\n            }\n        },\n        {\n            \"uniqueId\": \"com.amulyakhare:com.amulyakhare.textdrawable\",\n            \"funding\": [\n                \n            ],\n            \"developers\": [\n                \n            ],\n            \"artifactVersion\": \"1.0.1\",\n            \"description\": \"This light-weight library provides images with letter/text like the Gmail app. It extends the Drawable class thus can be used with existing/custom/network ImageView classes. Also included is a fluent interface for creating drawables and a customizable ColorGenerator.\",\n            \"name\": \"textdrawable\",\n            \"licenses\": [\n                \"MIT\"\n            ]\n        },\n        {\n            \"uniqueId\": \"com.caverock:androidsvg-aar\",\n            \"funding\": [\n                \n            ],\n            \"developers\": [\n                {\n                    \"name\": \"Paul LeBeau\"\n                }\n            ],\n            \"artifactVersion\": \"1.4\",\n            \"description\": \"SVG rendering library for Android.\",\n            \"scm\": {\n                \"connection\": \"https://github.com/BigBadaboom/androidsvg.git\",\n                \"url\": \"https://github.com/BigBadaboom/androidsvg\",\n                \"developerConnection\": \"https://github.com/BigBadaboom/androidsvg.git\"\n            },\n            \"name\": \"AndroidSVG\",\n            \"website\": \"https://github.com/BigBadaboom/androidsvg\",\n            \"licenses\": [\n                \"Apache-2.0\"\n            ]\n        },\n        {\n            \"uniqueId\": \"com.github.avito-tech:krop\",\n            \"funding\": [\n                \n            ],\n            \"developers\": [\n                \n            ],\n            \"artifactVersion\": \"0.52\",\n            \"description\": \"\",\n            \"name\": \"com.github.avito-tech:krop\",\n            \"licenses\": [\n                \"MIT\"\n            ]\n        },\n        {\n            \"uniqueId\": \"com.github.bumptech.glide:annotations\",\n            \"funding\": [\n                \n            ],\n            \"developers\": [\n                {\n                    \"name\": \"Sam Judd\"\n                }\n            ],\n            \"artifactVersion\": \"4.16.0\",\n            \"description\": \"A set of annotations for configuring Glide.\",\n            \"scm\": {\n                \"connection\": \"scm:git@github.com:bumptech/glide.git\",\n                \"url\": \"https://github.com/bumptech/glide\",\n                \"developerConnection\": \"scm:git@github.com:bumptech/glide.git\"\n            },\n            \"name\": \"Glide Annotations\",\n            \"website\": \"https://github.com/bumptech/glide\",\n            \"licenses\": [\n                \"Apache-2.0\",\n                \"BSD-2-Clause\"\n            ]\n        },\n        {\n            \"uniqueId\": \"com.github.bumptech.glide:disklrucache\",\n            \"funding\": [\n                \n            ],\n            \"developers\": [\n                {\n                    \"name\": \"Sam Judd\"\n                }\n            ],\n            \"artifactVersion\": \"4.16.0\",\n            \"description\": \"A cache that uses a bounded amount of space on a filesystem. Based on Jake Wharton's tailored for Glide.\",\n            \"scm\": {\n                \"connection\": \"scm:git@github.com:bumptech/glide.git\",\n                \"url\": \"https://github.com/bumptech/glide\",\n                \"developerConnection\": \"scm:git@github.com:bumptech/glide.git\"\n            },\n            \"name\": \"Glide Disk LRU Cache Library\",\n            \"website\": \"https://github.com/bumptech/glide\",\n            \"licenses\": [\n                \"Apache-2.0\",\n                \"BSD-2-Clause\"\n            ]\n        },\n        {\n            \"uniqueId\": \"com.github.bumptech.glide:gifdecoder\",\n            \"funding\": [\n                \n            ],\n            \"developers\": [\n                {\n                    \"name\": \"Sam Judd\"\n                }\n            ],\n            \"artifactVersion\": \"4.16.0\",\n            \"description\": \"Implementation of GifDecoder that is more memory efficient to animate for Android devices.\",\n            \"scm\": {\n                \"connection\": \"scm:git@github.com:bumptech/glide.git\",\n                \"url\": \"https://github.com/bumptech/glide\",\n                \"developerConnection\": \"scm:git@github.com:bumptech/glide.git\"\n            },\n            \"name\": \"Glide GIF Decoder Library\",\n            \"website\": \"https://github.com/bumptech/glide\",\n            \"licenses\": [\n                \"Apache-2.0\",\n                \"BSD-2-Clause\"\n            ]\n        },\n        {\n            \"uniqueId\": \"com.github.bumptech.glide:glide\",\n            \"funding\": [\n                \n            ],\n            \"developers\": [\n                {\n                    \"name\": \"Sam Judd\"\n                }\n            ],\n            \"artifactVersion\": \"4.16.0\",\n            \"description\": \"A fast and efficient image loading library for Android focused on smooth scrolling.\",\n            \"scm\": {\n                \"connection\": \"scm:git@github.com:bumptech/glide.git\",\n                \"url\": \"https://github.com/bumptech/glide\",\n                \"developerConnection\": \"scm:git@github.com:bumptech/glide.git\"\n            },\n            \"name\": \"Glide\",\n            \"website\": \"https://github.com/bumptech/glide\",\n            \"licenses\": [\n                \"Apache-2.0\",\n                \"BSD-2-Clause\"\n            ]\n        },\n        {\n            \"uniqueId\": \"com.github.bumptech.glide:recyclerview-integration\",\n            \"funding\": [\n                \n            ],\n            \"developers\": [\n                {\n                    \"name\": \"Sam Judd\"\n                }\n            ],\n            \"artifactVersion\": \"4.16.0\",\n            \"description\": \"An integration library to display images in RecyclerView.\",\n            \"scm\": {\n                \"connection\": \"scm:git@github.com:bumptech/glide.git\",\n                \"url\": \"https://github.com/bumptech/glide\",\n                \"developerConnection\": \"scm:git@github.com:bumptech/glide.git\"\n            },\n            \"name\": \"Glide RecyclerView Integration\",\n            \"website\": \"https://github.com/bumptech/glide\",\n            \"licenses\": [\n                \"Apache-2.0\",\n                \"BSD-2-Clause\"\n            ]\n        },\n        {\n            \"uniqueId\": \"com.github.topjohnwu.libsu:core\",\n            \"funding\": [\n                \n            ],\n            \"developers\": [\n                \n            ],\n            \"artifactVersion\": \"6.0.0\",\n            \"description\": \"\",\n            \"name\": \"com.github.topjohnwu.libsu:core\",\n            \"licenses\": [\n                \"Apache-2.0\"\n            ]\n        },\n        {\n            \"uniqueId\": \"com.github.topjohnwu.libsu:io\",\n            \"funding\": [\n                \n            ],\n            \"developers\": [\n                \n            ],\n            \"artifactVersion\": \"6.0.0\",\n            \"description\": \"\",\n            \"name\": \"com.github.topjohnwu.libsu:io\",\n            \"licenses\": [\n                \"Apache-2.0\"\n            ]\n        },\n        {\n            \"uniqueId\": \"com.github.topjohnwu.libsu:nio\",\n            \"funding\": [\n                \n            ],\n            \"developers\": [\n                \n            ],\n            \"artifactVersion\": \"6.0.0\",\n            \"description\": \"\",\n            \"name\": \"com.github.topjohnwu.libsu:nio\",\n            \"licenses\": [\n                \"Apache-2.0\"\n            ]\n        },\n        {\n            \"uniqueId\": \"com.google.android.apps.common.testing.accessibility.framework:accessibility-test-framework\",\n            \"funding\": [\n                \n            ],\n            \"developers\": [\n                {\n                    \"organisationUrl\": \"https://www.google.com\",\n                    \"name\": \"Casey Burkhardt\"\n                }\n            ],\n            \"artifactVersion\": \"3.1.2\",\n            \"description\": \"Library used to test for common accessibility issues.\",\n            \"scm\": {\n                \"connection\": \"scm:git:git@github.com:google/Accessibility-Test-Framework-for-Android.git\",\n                \"url\": \"https://github.com/google/Accessibility-Test-Framework-for-Android\",\n                \"developerConnection\": \"scm:git:git@github.com:google/Accessibility-Test-Framework-for-Android.git\"\n            },\n            \"name\": \"Accessibility Test Framework\",\n            \"website\": \"https://github.com/google/Accessibility-Test-Framework-for-Android\",\n            \"licenses\": [\n                \"Apache-2.0\"\n            ]\n        },\n        {\n            \"uniqueId\": \"com.google.android.material:material\",\n            \"funding\": [\n                \n            ],\n            \"developers\": [\n                {\n                    \"name\": \"The Android Open Source Project\"\n                }\n            ],\n            \"artifactVersion\": \"1.12.0\",\n            \"description\": \"Material Components for Android is a static library that you can add to your Android application in order to use APIs that provide implementations of the Material Design specification. Compatible on devices running API 14 or later.\",\n            \"scm\": {\n                \"connection\": \"scm:git:https://github.com/material-components/material-components-android.git\",\n                \"url\": \"https://github.com/material-components/material-components-android\"\n            },\n            \"name\": \"Material Components for Android\",\n            \"website\": \"https://github.com/material-components/material-components-android\",\n            \"licenses\": [\n                \"Apache-2.0\"\n            ]\n        },\n        {\n            \"uniqueId\": \"com.google.auto.value:auto-value-annotations\",\n            \"funding\": [\n                \n            ],\n            \"developers\": [\n                \n            ],\n            \"artifactVersion\": \"1.6.3\",\n            \"description\": \"Immutable value-type code generation for Java 1.6+.\",\n            \"scm\": {\n                \"connection\": \"scm:git:git://github.com/google/auto.git\",\n                \"url\": \"http://github.com/google/auto\",\n                \"developerConnection\": \"scm:git:ssh://git@github.com/google/auto.git\"\n            },\n            \"name\": \"AutoValue Annotations\",\n            \"website\": \"https://github.com/google/auto\",\n            \"licenses\": [\n                \"Apache-2.0\"\n            ],\n            \"organization\": {\n                \"url\": \"http://www.google.com\",\n                \"name\": \"Google, Inc.\"\n            }\n        },\n        {\n            \"uniqueId\": \"com.google.code.findbugs:jsr305\",\n            \"funding\": [\n                \n            ],\n            \"developers\": [\n                \n            ],\n            \"artifactVersion\": \"3.0.2\",\n            \"description\": \"JSR305 Annotations for Findbugs\",\n            \"scm\": {\n                \"connection\": \"scm:git:https://code.google.com/p/jsr-305/\",\n                \"url\": \"https://code.google.com/p/jsr-305/\",\n                \"developerConnection\": \"scm:git:https://code.google.com/p/jsr-305/\"\n            },\n            \"name\": \"FindBugs-jsr305\",\n            \"website\": \"http://findbugs.sourceforge.net/\",\n            \"licenses\": [\n                \"Apache-2.0\"\n            ]\n        },\n        {\n            \"uniqueId\": \"com.google.dagger:dagger\",\n            \"funding\": [\n                \n            ],\n            \"developers\": [\n                \n            ],\n            \"artifactVersion\": \"2.56.2\",\n            \"description\": \"A fast dependency injector for Android and Java.\",\n            \"scm\": {\n                \"connection\": \"scm:git:git://github.com/google/dagger.git\",\n                \"url\": \"https://github.com/google/dagger/\",\n                \"developerConnection\": \"scm:git:ssh://git@github.com/google/dagger.git\"\n            },\n            \"name\": \"Dagger\",\n            \"website\": \"https://github.com/google/dagger\",\n            \"licenses\": [\n                \"Apache-2.0\"\n            ],\n            \"organization\": {\n                \"url\": \"https://www.google.com\",\n                \"name\": \"Google, Inc.\"\n            }\n        },\n        {\n            \"uniqueId\": \"com.google.dagger:dagger-lint-aar\",\n            \"funding\": [\n                \n            ],\n            \"developers\": [\n                \n            ],\n            \"artifactVersion\": \"2.56.2\",\n            \"description\": \"A fast dependency injector for Android and Java.\",\n            \"scm\": {\n                \"connection\": \"scm:git:git://github.com/google/dagger.git\",\n                \"url\": \"https://github.com/google/dagger/\",\n                \"developerConnection\": \"scm:git:ssh://git@github.com/google/dagger.git\"\n            },\n            \"name\": \"Dagger Lint Rules AAR Distribution\",\n            \"website\": \"https://github.com/google/dagger\",\n            \"licenses\": [\n                \"Apache-2.0\"\n            ],\n            \"organization\": {\n                \"url\": \"https://www.google.com\",\n                \"name\": \"Google, Inc.\"\n            }\n        },\n        {\n            \"uniqueId\": \"com.google.dagger:hilt-android\",\n            \"funding\": [\n                \n            ],\n            \"developers\": [\n                \n            ],\n            \"artifactVersion\": \"2.56.2\",\n            \"description\": \"A fast dependency injector for Android and Java.\",\n            \"scm\": {\n                \"connection\": \"scm:git:git://github.com/google/dagger.git\",\n                \"url\": \"https://github.com/google/dagger/\",\n                \"developerConnection\": \"scm:git:ssh://git@github.com/google/dagger.git\"\n            },\n            \"name\": \"Hilt Android\",\n            \"website\": \"https://github.com/google/dagger\",\n            \"licenses\": [\n                \"Apache-2.0\"\n            ],\n            \"organization\": {\n                \"url\": \"https://www.google.com\",\n                \"name\": \"Google, Inc.\"\n            }\n        },\n        {\n            \"uniqueId\": \"com.google.dagger:hilt-android-testing\",\n            \"funding\": [\n                \n            ],\n            \"developers\": [\n                \n            ],\n            \"artifactVersion\": \"2.56.2\",\n            \"description\": \"A fast dependency injector for Android and Java.\",\n            \"scm\": {\n                \"connection\": \"scm:git:git://github.com/google/dagger.git\",\n                \"url\": \"https://github.com/google/dagger/\",\n                \"developerConnection\": \"scm:git:ssh://git@github.com/google/dagger.git\"\n            },\n            \"name\": \"Hilt Android Testing\",\n            \"website\": \"https://github.com/google/dagger\",\n            \"licenses\": [\n                \"Apache-2.0\"\n            ],\n            \"organization\": {\n                \"url\": \"https://www.google.com\",\n                \"name\": \"Google, Inc.\"\n            }\n        },\n        {\n            \"uniqueId\": \"com.google.dagger:hilt-core\",\n            \"funding\": [\n                \n            ],\n            \"developers\": [\n                \n            ],\n            \"artifactVersion\": \"2.56.2\",\n            \"description\": \"A fast dependency injector for Android and Java.\",\n            \"scm\": {\n                \"connection\": \"scm:git:git://github.com/google/dagger.git\",\n                \"url\": \"https://github.com/google/dagger/\",\n                \"developerConnection\": \"scm:git:ssh://git@github.com/google/dagger.git\"\n            },\n            \"name\": \"Hilt Core\",\n            \"website\": \"https://github.com/google/dagger\",\n            \"licenses\": [\n                \"Apache-2.0\"\n            ],\n            \"organization\": {\n                \"url\": \"https://www.google.com\",\n                \"name\": \"Google, Inc.\"\n            }\n        },\n        {\n            \"uniqueId\": \"com.google.errorprone:error_prone_annotation\",\n            \"funding\": [\n                \n            ],\n            \"developers\": [\n                \n            ],\n            \"artifactVersion\": \"2.34.0\",\n            \"description\": \"Error Prone is a static analysis tool for Java that catches common programming mistakes at compile-time.\",\n            \"scm\": {\n                \"connection\": \"scm:git:https://github.com/google/error-prone.git\",\n                \"url\": \"https://github.com/google/error-prone\",\n                \"developerConnection\": \"scm:git:git@github.com:google/error-prone.git\"\n            },\n            \"name\": \"@BugPattern annotation\",\n            \"website\": \"https://errorprone.info\",\n            \"licenses\": [\n                \"Apache-2.0\"\n            ],\n            \"organization\": {\n                \"url\": \"http://www.google.com\",\n                \"name\": \"Google LLC\"\n            }\n        },\n        {\n            \"uniqueId\": \"com.google.errorprone:error_prone_annotations\",\n            \"funding\": [\n                \n            ],\n            \"developers\": [\n                \n            ],\n            \"artifactVersion\": \"2.36.0\",\n            \"description\": \"Error Prone is a static analysis tool for Java that catches common programming mistakes at compile-time.\",\n            \"scm\": {\n                \"connection\": \"scm:git:https://github.com/google/error-prone.git\",\n                \"url\": \"https://github.com/google/error-prone\",\n                \"developerConnection\": \"scm:git:git@github.com:google/error-prone.git\"\n            },\n            \"name\": \"error-prone annotations\",\n            \"website\": \"https://errorprone.info\",\n            \"licenses\": [\n                \"Apache-2.0\"\n            ],\n            \"organization\": {\n                \"url\": \"http://www.google.com\",\n                \"name\": \"Google LLC\"\n            }\n        },\n        {\n            \"uniqueId\": \"com.google.guava:failureaccess\",\n            \"funding\": [\n                \n            ],\n            \"developers\": [\n                \n            ],\n            \"artifactVersion\": \"1.0.3\",\n            \"description\": \"Contains\\n    com.google.common.util.concurrent.internal.InternalFutureFailureAccess and\\n    InternalFutures. Most users will never need to use this artifact. Its\\n    classes are conceptually a part of Guava, but they're in this separate\\n    artifact so that Android libraries can use them without pulling in all of\\n    Guava (just as they can use ListenableFuture by depending on the\\n    listenablefuture artifact).\",\n            \"scm\": {\n                \"connection\": \"scm:git:https://github.com/google/guava.git\",\n                \"url\": \"https://github.com/google/guava\",\n                \"developerConnection\": \"scm:git:git@github.com:google/guava.git\"\n            },\n            \"name\": \"Guava InternalFutureFailureAccess and InternalFutures\",\n            \"website\": \"https://github.com/google/guava\",\n            \"licenses\": [\n                \"Apache-2.0\"\n            ]\n        },\n        {\n            \"uniqueId\": \"com.google.guava:guava\",\n            \"funding\": [\n                \n            ],\n            \"developers\": [\n                \n            ],\n            \"artifactVersion\": \"33.4.8-android\",\n            \"description\": \"Guava is a suite of core and expanded libraries that include\\n    utility classes, Google's collections, I/O classes, and\\n    much more.\",\n            \"scm\": {\n                \"connection\": \"scm:git:https://github.com/google/guava.git\",\n                \"url\": \"https://github.com/google/guava\",\n                \"developerConnection\": \"scm:git:git@github.com:google/guava.git\"\n            },\n            \"name\": \"Guava: Google Core Libraries for Java\",\n            \"website\": \"https://github.com/google/guava\",\n            \"licenses\": [\n                \"Apache-2.0\"\n            ]\n        },\n        {\n            \"uniqueId\": \"com.google.guava:listenablefuture\",\n            \"funding\": [\n                \n            ],\n            \"developers\": [\n                \n            ],\n            \"artifactVersion\": \"9999.0-empty-to-avoid-conflict-with-guava\",\n            \"description\": \"An empty artifact that Guava depends on to signal that it is providing\\n    ListenableFuture -- but is also available in a second \\\"version\\\" that\\n    contains com.google.common.util.concurrent.ListenableFuture class, without\\n    any other Guava classes. The idea is:\\n\\n    - If users want only ListenableFuture, they depend on listenablefuture-1.0.\\n\\n    - If users want all of Guava, they depend on guava, which, as of Guava\\n    27.0, depends on\\n    listenablefuture-9999.0-empty-to-avoid-conflict-with-guava. The 9999.0-...\\n    version number is enough for some build systems (notably, Gradle) to select\\n    that empty artifact over the \\\"real\\\" listenablefuture-1.0 -- avoiding a\\n    conflict with the copy of ListenableFuture in guava itself. If users are\\n    using an older version of Guava or a build system other than Gradle, they\\n    may see class conflicts. If so, they can solve them by manually excluding\\n    the listenablefuture artifact or manually forcing their build systems to\\n    use 9999.0-....\",\n            \"scm\": {\n                \"connection\": \"scm:git:https://github.com/google/guava.git\",\n                \"url\": \"https://github.com/google/guava\",\n                \"developerConnection\": \"scm:git:git@github.com:google/guava.git\"\n            },\n            \"name\": \"Guava ListenableFuture only\",\n            \"website\": \"https://github.com/google/guava\",\n            \"licenses\": [\n                \"Apache-2.0\"\n            ]\n        },\n        {\n            \"uniqueId\": \"com.google.j2objc:j2objc-annotations\",\n            \"funding\": [\n                \n            ],\n            \"developers\": [\n                {\n                    \"organisationUrl\": \"https://www.google.com\",\n                    \"name\": \"Tom Ball\"\n                }\n            ],\n            \"artifactVersion\": \"3.0.0\",\n            \"description\": \"A set of annotations that provide additional information to the J2ObjC\\n    translator to modify the result of translation.\",\n            \"scm\": {\n                \"connection\": \"scm:git:git://github.com/google/j2objc.git\",\n                \"url\": \"http://github.com/google/j2objc\",\n                \"developerConnection\": \"scm:git:ssh://git@github.com/google/j2objc.git\"\n            },\n            \"name\": \"J2ObjC Annotations\",\n            \"website\": \"https://github.com/google/j2objc/\",\n            \"licenses\": [\n                \"Apache-2.0\"\n            ]\n        },\n        {\n            \"uniqueId\": \"com.google.protobuf:protobuf-javalite\",\n            \"funding\": [\n                \n            ],\n            \"developers\": [\n                \n            ],\n            \"artifactVersion\": \"4.31.0\",\n            \"description\": \"Lite version of Protocol Buffers library. This version is optimized for code size, but does\\n    not guarantee API/ABI stability.\",\n            \"scm\": {\n                \"connection\": \"scm:git:https://github.com/protocolbuffers/protobuf.git\",\n                \"url\": \"https://github.com/protocolbuffers/protobuf\"\n            },\n            \"name\": \"Protocol Buffers [Lite]\",\n            \"website\": \"https://developers.google.com/protocol-buffers/\",\n            \"licenses\": [\n                \"BSD-3-Clause\"\n            ]\n        },\n        {\n            \"uniqueId\": \"com.google.testparameterinjector:test-parameter-injector\",\n            \"funding\": [\n                \n            ],\n            \"developers\": [\n                \n            ],\n            \"artifactVersion\": \"1.18\",\n            \"description\": \"A simple yet powerful parameterized test runner.\",\n            \"scm\": {\n                \"connection\": \"scm:git:git://github.com/google/testparameterinjector.git\",\n                \"url\": \"http://github.com/google/testparameterinjector/\",\n                \"developerConnection\": \"scm:git:ssh://git@github.com/google/testparameterinjector.git\"\n            },\n            \"name\": \"TestParameterInjector for JUnit4\",\n            \"website\": \"https://github.com/google/testparameterinjector\",\n            \"licenses\": [\n                \"Apache-2.0\"\n            ],\n            \"organization\": {\n                \"url\": \"http://www.google.com/\",\n                \"name\": \"Google Inc.\"\n            }\n        },\n        {\n            \"uniqueId\": \"com.google.zxing:core\",\n            \"funding\": [\n                \n            ],\n            \"developers\": [\n                \n            ],\n            \"artifactVersion\": \"3.5.3\",\n            \"description\": \"Core barcode encoding/decoding library\",\n            \"scm\": {\n                \"connection\": \"scm:git:https://github.com/zxing/zxing.git\",\n                \"url\": \"https://github.com/zxing/zxing\",\n                \"developerConnection\": \"scm:git:https://github.com/zxing/zxing.git\"\n            },\n            \"name\": \"ZXing Core\",\n            \"website\": \"https://github.com/zxing/zxing\",\n            \"licenses\": [\n                \"Apache-2.0\"\n            ]\n        },\n        {\n            \"uniqueId\": \"com.ibm.icu:icu4j\",\n            \"funding\": [\n                \n            ],\n            \"developers\": [\n                \n            ],\n            \"artifactVersion\": \"75.1\",\n            \"description\": \"International Components for Unicode for Java (ICU4J) is a mature, widely used Java library\\n    providing Unicode and Globalization support\",\n            \"scm\": {\n                \"connection\": \"scm:git:git://github.com/unicode-org/icu.git\",\n                \"url\": \"https://github.com/unicode-org/icu\",\n                \"developerConnection\": \"scm:git:git@github.com:unicode-org/icu.git\"\n            },\n            \"name\": \"${proj-title} (${project.artifactId})\",\n            \"website\": \"https://icu.unicode.org/\",\n            \"licenses\": [\n                \"5be2dcb917a8d00d01258ff45d1f55b2\"\n            ],\n            \"organization\": {\n                \"url\": \"https://icu.unicode.org/\",\n                \"name\": \"Unicode, Inc.\"\n            }\n        },\n        {\n            \"uniqueId\": \"com.mikepenz:aboutlibraries-core-android\",\n            \"funding\": [\n                \n            ],\n            \"developers\": [\n                {\n                    \"name\": \"Mike Penz\"\n                }\n            ],\n            \"artifactVersion\": \"11.2.3\",\n            \"description\": \"AboutLibraries automatically detects all dependencies of a project and collects their information including the license. Optionally visualising it via the provided ui components.\",\n            \"scm\": {\n                \"connection\": \"scm:git@github.com:mikepenz/AboutLibraries.git\",\n                \"url\": \"https://github.com/mikepenz/AboutLibraries\",\n                \"developerConnection\": \"scm:git@github.com:mikepenz/AboutLibraries.git\"\n            },\n            \"name\": \"AboutLibraries Core Library\",\n            \"website\": \"https://github.com/mikepenz/AboutLibraries\",\n            \"licenses\": [\n                \"Apache-2.0\"\n            ]\n        },\n        {\n            \"uniqueId\": \"com.mikepenz:fastadapter\",\n            \"funding\": [\n                \n            ],\n            \"developers\": [\n                {\n                    \"name\": \"Mike Penz\"\n                }\n            ],\n            \"artifactVersion\": \"5.7.0\",\n            \"description\": \"The bullet proof, fast and easy to use adapter library, which minimizes developing time to a fraction...\",\n            \"scm\": {\n                \"connection\": \"scm:git@github.com:mikepenz/FastAdapter.git\",\n                \"url\": \"https://github.com/mikepenz/FastAdapter\",\n                \"developerConnection\": \"scm:git@github.com:mikepenz/FastAdapter.git\"\n            },\n            \"name\": \"FastAdapter Library\",\n            \"website\": \"https://github.com/mikepenz/FastAdapter\",\n            \"licenses\": [\n                \"Apache-2.0\"\n            ]\n        },\n        {\n            \"uniqueId\": \"com.nulab-inc:zxcvbn\",\n            \"funding\": [\n                \n            ],\n            \"developers\": [\n                {\n                    \"name\": \"Yuichi Watanabe\"\n                }\n            ],\n            \"artifactVersion\": \"1.9.0\",\n            \"description\": \"This is a java port of zxcvbn, which is a JavaScript password strength generator.\",\n            \"scm\": {\n                \"connection\": \"https://github.com/nulab/zxcvbn4j.git\",\n                \"url\": \"https://github.com/nulab/zxcvbn4j.git\",\n                \"developerConnection\": \"https://github.com/nulab/zxcvbn4j.git\"\n            },\n            \"name\": \"zxcvbn4j\",\n            \"website\": \"https://github.com/nulab/zxcvbn4j\",\n            \"licenses\": [\n                \"MIT\"\n            ]\n        },\n        {\n            \"uniqueId\": \"info.guardianproject.trustedintents:trustedintents\",\n            \"funding\": [\n                \n            ],\n            \"developers\": [\n                {\n                    \"name\": \"Guardian Project\"\n                }\n            ],\n            \"artifactVersion\": \"0.2\",\n            \"description\": \"TrustedIntents is a library for flexible trusted interactions between Android apps.  It is modeled after Android's `signature` protection level for permissions.  The key difference is that the framework allows the trusted signature to be set, rather than requiring to match the current app's signature.\",\n            \"scm\": {\n                \"connection\": \"scm:https://github.com/guardianproject/TrustedIntents.git\",\n                \"url\": \"scm:https://github.com/guardianproject/TrustedIntents\",\n                \"developerConnection\": \"scm:git@github.com:guardianproject/TrustedIntents.git\"\n            },\n            \"name\": \"TrustedIntents\",\n            \"website\": \"https://guardianproject.info/code/trustedintents\",\n            \"licenses\": [\n                \"3ca920d1875f7ad7ab04a2a331958577\"\n            ]\n        },\n        {\n            \"uniqueId\": \"jakarta.inject:jakarta.inject-api\",\n            \"funding\": [\n                \n            ],\n            \"developers\": [\n                {\n                    \"name\": \"Antoine Sabot-Durand\"\n                },\n                {\n                    \"name\": \"Martin Kouba\"\n                },\n                {\n                    \"name\": \"Tomas Remes\"\n                },\n                {\n                    \"name\": \"Matej Novotny\"\n                }\n            ],\n            \"artifactVersion\": \"2.0.1\",\n            \"description\": \"Jakarta Dependency Injection\",\n            \"scm\": {\n                \"connection\": \"scm:git:ssh://git@github.com/eclipse-ee4j/injection-api.git\",\n                \"url\": \"https://github.com/eclipse-ee4j/injection-api\",\n                \"developerConnection\": \"scm:git:ssh://git@github.com/eclipse-ee4j/injection-api.git\"\n            },\n            \"name\": \"Jakarta Dependency Injection\",\n            \"website\": \"https://github.com/eclipse-ee4j/injection-api\",\n            \"licenses\": [\n                \"Apache-2.0\"\n            ],\n            \"organization\": {\n                \"url\": \"https://www.eclipse.org\",\n                \"name\": \"Eclipse Foundation\"\n            }\n        },\n        {\n            \"uniqueId\": \"javax.inject:javax.inject\",\n            \"funding\": [\n                \n            ],\n            \"developers\": [\n                \n            ],\n            \"artifactVersion\": \"1\",\n            \"description\": \"The javax.inject API\",\n            \"scm\": {\n                \"url\": \"http://code.google.com/p/atinject/source/checkout\"\n            },\n            \"name\": \"javax.inject\",\n            \"website\": \"http://code.google.com/p/atinject/\",\n            \"licenses\": [\n                \"Apache-2.0\"\n            ]\n        },\n        {\n            \"uniqueId\": \"junit:junit\",\n            \"funding\": [\n                \n            ],\n            \"developers\": [\n                {\n                    \"name\": \"David Saff\"\n                },\n                {\n                    \"name\": \"Kevin Cooney\"\n                },\n                {\n                    \"name\": \"Stefan Birkner\"\n                },\n                {\n                    \"name\": \"Marc Philipp\"\n                }\n            ],\n            \"artifactVersion\": \"4.13.2\",\n            \"description\": \"JUnit is a unit testing framework for Java, created by Erich Gamma and Kent Beck.\",\n            \"scm\": {\n                \"connection\": \"scm:git:git://github.com/junit-team/junit4.git\",\n                \"url\": \"https://github.com/junit-team/junit4\",\n                \"developerConnection\": \"scm:git:git@github.com:junit-team/junit4.git\"\n            },\n            \"name\": \"JUnit\",\n            \"website\": \"http://junit.org\",\n            \"licenses\": [\n                \"EPL-1.0\"\n            ],\n            \"organization\": {\n                \"url\": \"http://www.junit.org\",\n                \"name\": \"JUnit\"\n            }\n        },\n        {\n            \"uniqueId\": \"net.lingala.zip4j:zip4j\",\n            \"funding\": [\n                \n            ],\n            \"developers\": [\n                {\n                    \"name\": \"Srikanth Reddy Lingala\"\n                }\n            ],\n            \"artifactVersion\": \"2.11.5\",\n            \"description\": \"Zip4j - A Java library for zip files and streams\",\n            \"scm\": {\n                \"url\": \"git@github.com:srikanth-lingala/zip4j.git\"\n            },\n            \"name\": \"Zip4j\",\n            \"website\": \"https://github.com/srikanth-lingala/zip4j\",\n            \"licenses\": [\n                \"Apache-2.0\"\n            ]\n        },\n        {\n            \"uniqueId\": \"org.bouncycastle:bcprov-jdk18on\",\n            \"funding\": [\n                \n            ],\n            \"developers\": [\n                {\n                    \"name\": \"The Legion of the Bouncy Castle Inc.\"\n                }\n            ],\n            \"artifactVersion\": \"1.80\",\n            \"description\": \"The Bouncy Castle Crypto package is a Java implementation of cryptographic algorithms. This jar contains the JCA/JCE provider and low-level API for the BC Java version 1.80 for Java 8 and later.\",\n            \"scm\": {\n                \"url\": \"https://github.com/bcgit/bc-java\"\n            },\n            \"name\": \"Bouncy Castle Provider\",\n            \"website\": \"https://www.bouncycastle.org/download/bouncy-castle-java/\",\n            \"licenses\": [\n                \"73252b46f36df25ef51a7994de439aea\"\n            ]\n        },\n        {\n            \"uniqueId\": \"org.checkerframework:checker-qual\",\n            \"funding\": [\n                \n            ],\n            \"developers\": [\n                {\n                    \"organisationUrl\": \"https://www.cs.washington.edu/\",\n                    \"name\": \"Michael Ernst\"\n                },\n                {\n                    \"organisationUrl\": \"http://uwaterloo.ca/\",\n                    \"name\": \"Werner M. Dietl\"\n                },\n                {\n                    \"organisationUrl\": \"https://www.cs.washington.edu/research/plse/\",\n                    \"name\": \"Suzanne Millstein\"\n                }\n            ],\n            \"artifactVersion\": \"2.5.5\",\n            \"description\": \"Checker Qual is the set of annotations (qualifiers) and supporting classes\\n        used by the Checker Framework to type check Java source code.  Please\\n        see artifact:\\n        org.checkerframework:checker\",\n            \"scm\": {\n                \"connection\": \"https://github.com/typetools/checker-framework.git\",\n                \"url\": \"https://github.com/typetools/checker-framework.git\"\n            },\n            \"name\": \"Checker Qual\",\n            \"website\": \"https://checkerframework.org\",\n            \"licenses\": [\n                \"MIT\"\n            ]\n        },\n        {\n            \"uniqueId\": \"org.conscrypt:conscrypt-openjdk-uber\",\n            \"funding\": [\n                \n            ],\n            \"developers\": [\n                {\n                    \"organisationUrl\": \"https://www.google.com\",\n                    \"name\": \"Conscrypt Contributors\"\n                }\n            ],\n            \"artifactVersion\": \"2.5.2\",\n            \"description\": \"Conscrypt: OpenJdk UberJAR\",\n            \"scm\": {\n                \"connection\": \"scm:git:https://github.com/google/conscrypt.git\",\n                \"url\": \"https://github.com/google/conscrypt\",\n                \"developerConnection\": \"scm:git:git@github.com:google/conscrypt.git\"\n            },\n            \"name\": \"org.conscrypt:conscrypt-openjdk-uber\",\n            \"website\": \"https://conscrypt.org/\",\n            \"licenses\": [\n                \"Apache-2.0\"\n            ]\n        },\n        {\n            \"uniqueId\": \"org.hamcrest:hamcrest\",\n            \"funding\": [\n                \n            ],\n            \"developers\": [\n                {\n                    \"name\": \"Joe Walnes\"\n                },\n                {\n                    \"name\": \"Nat Pryce\"\n                },\n                {\n                    \"name\": \"Steve Freeman\"\n                }\n            ],\n            \"artifactVersion\": \"2.2\",\n            \"description\": \"Core API and libraries of hamcrest matcher framework.\",\n            \"scm\": {\n                \"connection\": \"git@github.com:hamcrest/JavaHamcrest.git\",\n                \"url\": \"https://github.com/hamcrest/JavaHamcrest\"\n            },\n            \"name\": \"Hamcrest\",\n            \"website\": \"http://hamcrest.org/JavaHamcrest/\",\n            \"licenses\": [\n                \"BSD-3-Clause\"\n            ]\n        },\n        {\n            \"uniqueId\": \"org.hamcrest:hamcrest-core\",\n            \"funding\": [\n                \n            ],\n            \"developers\": [\n                {\n                    \"name\": \"Joe Walnes\"\n                },\n                {\n                    \"name\": \"Nat Pryce\"\n                },\n                {\n                    \"name\": \"Steve Freeman\"\n                }\n            ],\n            \"artifactVersion\": \"2.2\",\n            \"description\": \"Core Hamcrest API - deprecated, please use \\\"hamcrest\\\" instead\",\n            \"scm\": {\n                \"connection\": \"git@github.com:hamcrest/JavaHamcrest.git\",\n                \"url\": \"https://github.com/hamcrest/JavaHamcrest\"\n            },\n            \"name\": \"Hamcrest Core\",\n            \"website\": \"http://hamcrest.org/JavaHamcrest/\",\n            \"licenses\": [\n                \"BSD-3-Clause\"\n            ]\n        },\n        {\n            \"uniqueId\": \"org.hamcrest:hamcrest-library\",\n            \"funding\": [\n                \n            ],\n            \"developers\": [\n                {\n                    \"name\": \"Joe Walnes\"\n                },\n                {\n                    \"name\": \"Nat Pryce\"\n                },\n                {\n                    \"name\": \"Steve Freeman\"\n                }\n            ],\n            \"artifactVersion\": \"2.2\",\n            \"description\": \"A library of Hamcrest matchers - deprecated, please use \\\"hamcrest\\\" instead\",\n            \"scm\": {\n                \"connection\": \"git@github.com:hamcrest/JavaHamcrest.git\",\n                \"url\": \"https://github.com/hamcrest/JavaHamcrest\"\n            },\n            \"name\": \"Hamcrest Library\",\n            \"website\": \"http://hamcrest.org/JavaHamcrest/\",\n            \"licenses\": [\n                \"BSD-3-Clause\"\n            ]\n        },\n        {\n            \"uniqueId\": \"org.jetbrains.kotlin:kotlin-bom\",\n            \"funding\": [\n                \n            ],\n            \"developers\": [\n                {\n                    \"organisationUrl\": \"https://www.jetbrains.com\",\n                    \"name\": \"JetBrains Team\"\n                }\n            ],\n            \"artifactVersion\": \"1.8.22\",\n            \"description\": \"Kotlin is a statically typed programming language that compiles to JVM byte codes and JavaScript\",\n            \"scm\": {\n                \"connection\": \"scm:git:https://github.com/JetBrains/kotlin.git\",\n                \"url\": \"https://github.com/JetBrains/kotlin\",\n                \"developerConnection\": \"scm:git:https://github.com/JetBrains/kotlin.git\"\n            },\n            \"name\": \"Kotlin Libraries bill-of-materials\",\n            \"website\": \"https://kotlinlang.org/\",\n            \"licenses\": [\n                \"Apache-2.0\"\n            ]\n        },\n        {\n            \"uniqueId\": \"org.jetbrains.kotlin:kotlin-stdlib\",\n            \"funding\": [\n                \n            ],\n            \"developers\": [\n                {\n                    \"organisationUrl\": \"https://www.jetbrains.com\",\n                    \"name\": \"Kotlin Team\"\n                }\n            ],\n            \"artifactVersion\": \"2.1.10\",\n            \"description\": \"Kotlin Standard Library\",\n            \"scm\": {\n                \"connection\": \"scm:git:https://github.com/JetBrains/kotlin.git\",\n                \"url\": \"https://github.com/JetBrains/kotlin\",\n                \"developerConnection\": \"scm:git:https://github.com/JetBrains/kotlin.git\"\n            },\n            \"name\": \"Kotlin Stdlib\",\n            \"website\": \"https://kotlinlang.org/\",\n            \"licenses\": [\n                \"Apache-2.0\"\n            ]\n        },\n        {\n            \"uniqueId\": \"org.jetbrains.kotlinx:kotlinx-collections-immutable-jvm\",\n            \"funding\": [\n                \n            ],\n            \"developers\": [\n                {\n                    \"organisationUrl\": \"https://www.jetbrains.com\",\n                    \"name\": \"JetBrains Team\"\n                }\n            ],\n            \"artifactVersion\": \"0.3.7\",\n            \"description\": \"Kotlin Immutable Collections multiplatform library\",\n            \"scm\": {\n                \"url\": \"https://github.com/Kotlin/kotlinx.collections.immutable\"\n            },\n            \"name\": \"kotlinx-collections-immutable\",\n            \"website\": \"https://github.com/Kotlin/kotlinx.collections.immutable\",\n            \"licenses\": [\n                \"Apache-2.0\"\n            ]\n        },\n        {\n            \"uniqueId\": \"org.jetbrains.kotlinx:kotlinx-coroutines-android\",\n            \"funding\": [\n                \n            ],\n            \"developers\": [\n                {\n                    \"organisationUrl\": \"https://www.jetbrains.com\",\n                    \"name\": \"JetBrains Team\"\n                }\n            ],\n            \"artifactVersion\": \"1.8.1\",\n            \"description\": \"Coroutines support libraries for Kotlin\",\n            \"scm\": {\n                \"url\": \"https://github.com/Kotlin/kotlinx.coroutines\"\n            },\n            \"name\": \"kotlinx-coroutines-android\",\n            \"website\": \"https://github.com/Kotlin/kotlinx.coroutines\",\n            \"licenses\": [\n                \"Apache-2.0\"\n            ]\n        },\n        {\n            \"uniqueId\": \"org.jetbrains.kotlinx:kotlinx-coroutines-bom\",\n            \"funding\": [\n                \n            ],\n            \"developers\": [\n                {\n                    \"organisationUrl\": \"https://www.jetbrains.com\",\n                    \"name\": \"JetBrains Team\"\n                }\n            ],\n            \"artifactVersion\": \"1.8.1\",\n            \"description\": \"Coroutines support libraries for Kotlin\",\n            \"scm\": {\n                \"url\": \"https://github.com/Kotlin/kotlinx.coroutines\"\n            },\n            \"name\": \"kotlinx-coroutines-bom\",\n            \"website\": \"https://github.com/Kotlin/kotlinx.coroutines\",\n            \"licenses\": [\n                \"Apache-2.0\"\n            ]\n        },\n        {\n            \"uniqueId\": \"org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm\",\n            \"funding\": [\n                \n            ],\n            \"developers\": [\n                {\n                    \"organisationUrl\": \"https://www.jetbrains.com\",\n                    \"name\": \"JetBrains Team\"\n                }\n            ],\n            \"artifactVersion\": \"1.8.1\",\n            \"description\": \"Coroutines support libraries for Kotlin\",\n            \"scm\": {\n                \"url\": \"https://github.com/Kotlin/kotlinx.coroutines\"\n            },\n            \"name\": \"kotlinx-coroutines-core\",\n            \"website\": \"https://github.com/Kotlin/kotlinx.coroutines\",\n            \"licenses\": [\n                \"Apache-2.0\"\n            ]\n        },\n        {\n            \"uniqueId\": \"org.jetbrains.kotlinx:kotlinx-serialization-bom\",\n            \"funding\": [\n                \n            ],\n            \"developers\": [\n                {\n                    \"organisationUrl\": \"https://www.jetbrains.com\",\n                    \"name\": \"JetBrains Team\"\n                }\n            ],\n            \"artifactVersion\": \"1.7.3\",\n            \"description\": \"Kotlin multiplatform serialization runtime library\",\n            \"scm\": {\n                \"url\": \"https://github.com/Kotlin/kotlinx.serialization\"\n            },\n            \"name\": \"kotlinx-serialization-bom\",\n            \"website\": \"https://github.com/Kotlin/kotlinx.serialization\",\n            \"licenses\": [\n                \"Apache-2.0\"\n            ]\n        },\n        {\n            \"uniqueId\": \"org.jetbrains.kotlinx:kotlinx-serialization-core-jvm\",\n            \"funding\": [\n                \n            ],\n            \"developers\": [\n                {\n                    \"organisationUrl\": \"https://www.jetbrains.com\",\n                    \"name\": \"JetBrains Team\"\n                }\n            ],\n            \"artifactVersion\": \"1.7.3\",\n            \"description\": \"Kotlin multiplatform serialization runtime library\",\n            \"scm\": {\n                \"url\": \"https://github.com/Kotlin/kotlinx.serialization\"\n            },\n            \"name\": \"kotlinx-serialization-core\",\n            \"website\": \"https://github.com/Kotlin/kotlinx.serialization\",\n            \"licenses\": [\n                \"Apache-2.0\"\n            ]\n        },\n        {\n            \"uniqueId\": \"org.jetbrains.kotlinx:kotlinx-serialization-json-jvm\",\n            \"funding\": [\n                \n            ],\n            \"developers\": [\n                {\n                    \"organisationUrl\": \"https://www.jetbrains.com\",\n                    \"name\": \"JetBrains Team\"\n                }\n            ],\n            \"artifactVersion\": \"1.7.3\",\n            \"description\": \"Kotlin multiplatform serialization runtime library\",\n            \"scm\": {\n                \"url\": \"https://github.com/Kotlin/kotlinx.serialization\"\n            },\n            \"name\": \"kotlinx-serialization-json\",\n            \"website\": \"https://github.com/Kotlin/kotlinx.serialization\",\n            \"licenses\": [\n                \"Apache-2.0\"\n            ]\n        },\n        {\n            \"uniqueId\": \"org.jetbrains:annotations\",\n            \"funding\": [\n                \n            ],\n            \"developers\": [\n                {\n                    \"organisationUrl\": \"https://www.jetbrains.com\",\n                    \"name\": \"JetBrains Team\"\n                }\n            ],\n            \"artifactVersion\": \"23.0.0\",\n            \"description\": \"A set of annotations used for code inspection support and code documentation.\",\n            \"scm\": {\n                \"connection\": \"scm:git:git://github.com/JetBrains/java-annotations.git\",\n                \"url\": \"https://github.com/JetBrains/java-annotations\",\n                \"developerConnection\": \"scm:git:ssh://github.com:JetBrains/java-annotations.git\"\n            },\n            \"name\": \"JetBrains Java Annotations\",\n            \"website\": \"https://github.com/JetBrains/java-annotations\",\n            \"licenses\": [\n                \"Apache-2.0\"\n            ]\n        },\n        {\n            \"uniqueId\": \"org.json:json\",\n            \"funding\": [\n                \n            ],\n            \"developers\": [\n                {\n                    \"name\": \"Douglas Crockford\"\n                }\n            ],\n            \"artifactVersion\": \"20250517\",\n            \"description\": \"JSON is a light-weight, language independent, data interchange format.\\n        See http://www.JSON.org/\\n\\n        The files in this package implement JSON encoders/decoders in Java.\\n        It also includes the capability to convert between JSON and XML, HTTP\\n        headers, Cookies, and CDL.\\n\\n        This is a reference implementation. There are a large number of JSON packages\\n        in Java. Perhaps someday the Java community will standardize on one. Until\\n        then, choose carefully.\",\n            \"scm\": {\n                \"connection\": \"scm:git:git://github.com/douglascrockford/JSON-java.git\",\n                \"url\": \"https://github.com/douglascrockford/JSON-java.git\",\n                \"developerConnection\": \"scm:git:git@github.com:douglascrockford/JSON-java.git\"\n            },\n            \"name\": \"JSON in Java\",\n            \"website\": \"https://github.com/douglascrockford/JSON-java\",\n            \"licenses\": [\n                \"2eb05b85f440c8e759fccbda7eb4f77e\"\n            ]\n        },\n        {\n            \"uniqueId\": \"org.jsoup:jsoup\",\n            \"funding\": [\n                \n            ],\n            \"developers\": [\n                {\n                    \"name\": \"Jonathan Hedley\"\n                }\n            ],\n            \"artifactVersion\": \"1.12.2\",\n            \"description\": \"jsoup is a Java library for working with real-world HTML. It provides a very convenient API for extracting and manipulating data, using the best of DOM, CSS, and jquery-like methods. jsoup implements the WHATWG HTML5 specification, and parses HTML to the same DOM as modern browsers do.\",\n            \"scm\": {\n                \"connection\": \"scm:git:https://github.com/jhy/jsoup.git\",\n                \"url\": \"https://github.com/jhy/jsoup\"\n            },\n            \"name\": \"jsoup Java HTML Parser\",\n            \"website\": \"https://jsoup.org/\",\n            \"licenses\": [\n                \"MIT\"\n            ],\n            \"organization\": {\n                \"url\": \"https://jhy.io/\",\n                \"name\": \"Jonathan Hedley\"\n            }\n        },\n        {\n            \"uniqueId\": \"org.jspecify:jspecify\",\n            \"funding\": [\n                \n            ],\n            \"developers\": [\n                {\n                    \"name\": \"Kevin Bourrillion\"\n                }\n            ],\n            \"artifactVersion\": \"1.0.0\",\n            \"description\": \"An artifact of well-named and well-specified annotations to power static analysis checks\",\n            \"scm\": {\n                \"connection\": \"scm:git:git@github.com:jspecify/jspecify.git\",\n                \"url\": \"https://github.com/jspecify/jspecify/\",\n                \"developerConnection\": \"scm:git:git@github.com:jspecify/jspecify.git\"\n            },\n            \"name\": \"JSpecify annotations\",\n            \"website\": \"http://jspecify.org/\",\n            \"licenses\": [\n                \"Apache-2.0\"\n            ]\n        },\n        {\n            \"uniqueId\": \"org.ow2.asm:asm\",\n            \"funding\": [\n                \n            ],\n            \"developers\": [\n                {\n                    \"name\": \"Eric Bruneton\"\n                },\n                {\n                    \"name\": \"Eugene Kuleshov\"\n                },\n                {\n                    \"name\": \"Remi Forax\"\n                }\n            ],\n            \"artifactVersion\": \"9.7.1\",\n            \"description\": \"ASM, a very small and fast Java bytecode manipulation framework\",\n            \"scm\": {\n                \"connection\": \"scm:git:https://gitlab.ow2.org/asm/asm/\",\n                \"url\": \"https://gitlab.ow2.org/asm/asm/\",\n                \"developerConnection\": \"scm:git:https://gitlab.ow2.org/asm/asm/\"\n            },\n            \"name\": \"asm\",\n            \"website\": \"http://asm.ow2.io/\",\n            \"licenses\": [\n                \"BSD-3-Clause\"\n            ],\n            \"organization\": {\n                \"url\": \"http://www.ow2.org/\",\n                \"name\": \"OW2\"\n            }\n        },\n        {\n            \"uniqueId\": \"org.ow2.asm:asm-analysis\",\n            \"funding\": [\n                \n            ],\n            \"developers\": [\n                {\n                    \"name\": \"Eric Bruneton\"\n                },\n                {\n                    \"name\": \"Eugene Kuleshov\"\n                },\n                {\n                    \"name\": \"Remi Forax\"\n                }\n            ],\n            \"artifactVersion\": \"9.7.1\",\n            \"description\": \"Static code analysis API of ASM, a very small and fast Java bytecode manipulation framework\",\n            \"scm\": {\n                \"connection\": \"scm:git:https://gitlab.ow2.org/asm/asm/\",\n                \"url\": \"https://gitlab.ow2.org/asm/asm/\",\n                \"developerConnection\": \"scm:git:https://gitlab.ow2.org/asm/asm/\"\n            },\n            \"name\": \"asm-analysis\",\n            \"website\": \"http://asm.ow2.io/\",\n            \"licenses\": [\n                \"BSD-3-Clause\"\n            ],\n            \"organization\": {\n                \"url\": \"http://www.ow2.org/\",\n                \"name\": \"OW2\"\n            }\n        },\n        {\n            \"uniqueId\": \"org.ow2.asm:asm-commons\",\n            \"funding\": [\n                \n            ],\n            \"developers\": [\n                {\n                    \"name\": \"Eric Bruneton\"\n                },\n                {\n                    \"name\": \"Eugene Kuleshov\"\n                },\n                {\n                    \"name\": \"Remi Forax\"\n                }\n            ],\n            \"artifactVersion\": \"9.7.1\",\n            \"description\": \"Usefull class adapters based on ASM, a very small and fast Java bytecode manipulation framework\",\n            \"scm\": {\n                \"connection\": \"scm:git:https://gitlab.ow2.org/asm/asm/\",\n                \"url\": \"https://gitlab.ow2.org/asm/asm/\",\n                \"developerConnection\": \"scm:git:https://gitlab.ow2.org/asm/asm/\"\n            },\n            \"name\": \"asm-commons\",\n            \"website\": \"http://asm.ow2.io/\",\n            \"licenses\": [\n                \"BSD-3-Clause\"\n            ],\n            \"organization\": {\n                \"url\": \"http://www.ow2.org/\",\n                \"name\": \"OW2\"\n            }\n        },\n        {\n            \"uniqueId\": \"org.ow2.asm:asm-tree\",\n            \"funding\": [\n                \n            ],\n            \"developers\": [\n                {\n                    \"name\": \"Eric Bruneton\"\n                },\n                {\n                    \"name\": \"Eugene Kuleshov\"\n                },\n                {\n                    \"name\": \"Remi Forax\"\n                }\n            ],\n            \"artifactVersion\": \"9.7.1\",\n            \"description\": \"Tree API of ASM, a very small and fast Java bytecode manipulation framework\",\n            \"scm\": {\n                \"connection\": \"scm:git:https://gitlab.ow2.org/asm/asm/\",\n                \"url\": \"https://gitlab.ow2.org/asm/asm/\",\n                \"developerConnection\": \"scm:git:https://gitlab.ow2.org/asm/asm/\"\n            },\n            \"name\": \"asm-tree\",\n            \"website\": \"http://asm.ow2.io/\",\n            \"licenses\": [\n                \"BSD-3-Clause\"\n            ],\n            \"organization\": {\n                \"url\": \"http://www.ow2.org/\",\n                \"name\": \"OW2\"\n            }\n        },\n        {\n            \"uniqueId\": \"org.ow2.asm:asm-util\",\n            \"funding\": [\n                \n            ],\n            \"developers\": [\n                {\n                    \"name\": \"Eric Bruneton\"\n                },\n                {\n                    \"name\": \"Eugene Kuleshov\"\n                },\n                {\n                    \"name\": \"Remi Forax\"\n                }\n            ],\n            \"artifactVersion\": \"9.7.1\",\n            \"description\": \"Utilities for ASM, a very small and fast Java bytecode manipulation framework\",\n            \"scm\": {\n                \"connection\": \"scm:git:https://gitlab.ow2.org/asm/asm/\",\n                \"url\": \"https://gitlab.ow2.org/asm/asm/\",\n                \"developerConnection\": \"scm:git:https://gitlab.ow2.org/asm/asm/\"\n            },\n            \"name\": \"asm-util\",\n            \"website\": \"http://asm.ow2.io/\",\n            \"licenses\": [\n                \"BSD-3-Clause\"\n            ],\n            \"organization\": {\n                \"url\": \"http://www.ow2.org/\",\n                \"name\": \"OW2\"\n            }\n        },\n        {\n            \"uniqueId\": \"org.robolectric:annotations\",\n            \"funding\": [\n                \n            ],\n            \"developers\": [\n                {\n                    \"organisationUrl\": \"http://google.com\",\n                    \"name\": \"Brett Chabot\"\n                },\n                {\n                    \"organisationUrl\": \"http://google.com\",\n                    \"name\": \"Michael Hoisie\"\n                },\n                {\n                    \"name\": \"Christian Williams\"\n                }\n            ],\n            \"artifactVersion\": \"4.14.1\",\n            \"description\": \"An alternative Android testing framework.\",\n            \"scm\": {\n                \"connection\": \"scm:git:git://github.com/robolectric/robolectric.git\",\n                \"url\": \"git@github.com:robolectric/robolectric.git\",\n                \"developerConnection\": \"scm:git:https://github.com/robolectric/robolectric.git\"\n            },\n            \"name\": \"annotations\",\n            \"website\": \"http://robolectric.org\",\n            \"licenses\": [\n                \"MIT\"\n            ]\n        },\n        {\n            \"uniqueId\": \"org.robolectric:junit\",\n            \"funding\": [\n                \n            ],\n            \"developers\": [\n                {\n                    \"organisationUrl\": \"http://google.com\",\n                    \"name\": \"Brett Chabot\"\n                },\n                {\n                    \"organisationUrl\": \"http://google.com\",\n                    \"name\": \"Michael Hoisie\"\n                },\n                {\n                    \"name\": \"Christian Williams\"\n                }\n            ],\n            \"artifactVersion\": \"4.14.1\",\n            \"description\": \"An alternative Android testing framework.\",\n            \"scm\": {\n                \"connection\": \"scm:git:git://github.com/robolectric/robolectric.git\",\n                \"url\": \"git@github.com:robolectric/robolectric.git\",\n                \"developerConnection\": \"scm:git:https://github.com/robolectric/robolectric.git\"\n            },\n            \"name\": \"junit\",\n            \"website\": \"http://robolectric.org\",\n            \"licenses\": [\n                \"MIT\"\n            ]\n        },\n        {\n            \"uniqueId\": \"org.robolectric:nativeruntime\",\n            \"funding\": [\n                \n            ],\n            \"developers\": [\n                {\n                    \"organisationUrl\": \"http://google.com\",\n                    \"name\": \"Brett Chabot\"\n                },\n                {\n                    \"organisationUrl\": \"http://google.com\",\n                    \"name\": \"Michael Hoisie\"\n                },\n                {\n                    \"name\": \"Christian Williams\"\n                }\n            ],\n            \"artifactVersion\": \"4.14.1\",\n            \"description\": \"An alternative Android testing framework.\",\n            \"scm\": {\n                \"connection\": \"scm:git:git://github.com/robolectric/robolectric.git\",\n                \"url\": \"git@github.com:robolectric/robolectric.git\",\n                \"developerConnection\": \"scm:git:https://github.com/robolectric/robolectric.git\"\n            },\n            \"name\": \"nativeruntime\",\n            \"website\": \"http://robolectric.org\",\n            \"licenses\": [\n                \"MIT\"\n            ]\n        },\n        {\n            \"uniqueId\": \"org.robolectric:nativeruntime-dist-compat\",\n            \"funding\": [\n                \n            ],\n            \"developers\": [\n                {\n                    \"name\": \"The Android Open Source Projects\"\n                }\n            ],\n            \"artifactVersion\": \"1.0.16\",\n            \"description\": \"Robolectric Nativeruntime Distribution Compat\",\n            \"scm\": {\n                \"connection\": \"https://android.googlesource.com/platform/manifest.git\",\n                \"url\": \"https://android.googlesource.com/platform/manifest.git\"\n            },\n            \"name\": \"Robolectric Nativeruntime Distribution Compat\",\n            \"website\": \"https://source.android.com/\",\n            \"licenses\": [\n                \"Apache-2.0\"\n            ]\n        },\n        {\n            \"uniqueId\": \"org.robolectric:pluginapi\",\n            \"funding\": [\n                \n            ],\n            \"developers\": [\n                {\n                    \"organisationUrl\": \"http://google.com\",\n                    \"name\": \"Brett Chabot\"\n                },\n                {\n                    \"organisationUrl\": \"http://google.com\",\n                    \"name\": \"Michael Hoisie\"\n                },\n                {\n                    \"name\": \"Christian Williams\"\n                }\n            ],\n            \"artifactVersion\": \"4.14.1\",\n            \"description\": \"An alternative Android testing framework.\",\n            \"scm\": {\n                \"connection\": \"scm:git:git://github.com/robolectric/robolectric.git\",\n                \"url\": \"git@github.com:robolectric/robolectric.git\",\n                \"developerConnection\": \"scm:git:https://github.com/robolectric/robolectric.git\"\n            },\n            \"name\": \"pluginapi\",\n            \"website\": \"http://robolectric.org\",\n            \"licenses\": [\n                \"MIT\"\n            ]\n        },\n        {\n            \"uniqueId\": \"org.robolectric:plugins-maven-dependency-resolver\",\n            \"funding\": [\n                \n            ],\n            \"developers\": [\n                {\n                    \"organisationUrl\": \"http://google.com\",\n                    \"name\": \"Brett Chabot\"\n                },\n                {\n                    \"organisationUrl\": \"http://google.com\",\n                    \"name\": \"Michael Hoisie\"\n                },\n                {\n                    \"name\": \"Christian Williams\"\n                }\n            ],\n            \"artifactVersion\": \"4.14.1\",\n            \"description\": \"An alternative Android testing framework.\",\n            \"scm\": {\n                \"connection\": \"scm:git:git://github.com/robolectric/robolectric.git\",\n                \"url\": \"git@github.com:robolectric/robolectric.git\",\n                \"developerConnection\": \"scm:git:https://github.com/robolectric/robolectric.git\"\n            },\n            \"name\": \"maven-dependency-resolver\",\n            \"website\": \"http://robolectric.org\",\n            \"licenses\": [\n                \"MIT\"\n            ]\n        },\n        {\n            \"uniqueId\": \"org.robolectric:resources\",\n            \"funding\": [\n                \n            ],\n            \"developers\": [\n                {\n                    \"organisationUrl\": \"http://google.com\",\n                    \"name\": \"Brett Chabot\"\n                },\n                {\n                    \"organisationUrl\": \"http://google.com\",\n                    \"name\": \"Michael Hoisie\"\n                },\n                {\n                    \"name\": \"Christian Williams\"\n                }\n            ],\n            \"artifactVersion\": \"4.14.1\",\n            \"description\": \"An alternative Android testing framework.\",\n            \"scm\": {\n                \"connection\": \"scm:git:git://github.com/robolectric/robolectric.git\",\n                \"url\": \"git@github.com:robolectric/robolectric.git\",\n                \"developerConnection\": \"scm:git:https://github.com/robolectric/robolectric.git\"\n            },\n            \"name\": \"resources\",\n            \"website\": \"http://robolectric.org\",\n            \"licenses\": [\n                \"MIT\"\n            ]\n        },\n        {\n            \"uniqueId\": \"org.robolectric:robolectric\",\n            \"funding\": [\n                \n            ],\n            \"developers\": [\n                {\n                    \"organisationUrl\": \"http://google.com\",\n                    \"name\": \"Brett Chabot\"\n                },\n                {\n                    \"organisationUrl\": \"http://google.com\",\n                    \"name\": \"Michael Hoisie\"\n                },\n                {\n                    \"name\": \"Christian Williams\"\n                }\n            ],\n            \"artifactVersion\": \"4.14.1\",\n            \"description\": \"An alternative Android testing framework.\",\n            \"scm\": {\n                \"connection\": \"scm:git:git://github.com/robolectric/robolectric.git\",\n                \"url\": \"git@github.com:robolectric/robolectric.git\",\n                \"developerConnection\": \"scm:git:https://github.com/robolectric/robolectric.git\"\n            },\n            \"name\": \"robolectric\",\n            \"website\": \"http://robolectric.org\",\n            \"licenses\": [\n                \"MIT\"\n            ]\n        },\n        {\n            \"uniqueId\": \"org.robolectric:sandbox\",\n            \"funding\": [\n                \n            ],\n            \"developers\": [\n                {\n                    \"organisationUrl\": \"http://google.com\",\n                    \"name\": \"Brett Chabot\"\n                },\n                {\n                    \"organisationUrl\": \"http://google.com\",\n                    \"name\": \"Michael Hoisie\"\n                },\n                {\n                    \"name\": \"Christian Williams\"\n                }\n            ],\n            \"artifactVersion\": \"4.14.1\",\n            \"description\": \"An alternative Android testing framework.\",\n            \"scm\": {\n                \"connection\": \"scm:git:git://github.com/robolectric/robolectric.git\",\n                \"url\": \"git@github.com:robolectric/robolectric.git\",\n                \"developerConnection\": \"scm:git:https://github.com/robolectric/robolectric.git\"\n            },\n            \"name\": \"sandbox\",\n            \"website\": \"http://robolectric.org\",\n            \"licenses\": [\n                \"MIT\"\n            ]\n        },\n        {\n            \"uniqueId\": \"org.robolectric:shadowapi\",\n            \"funding\": [\n                \n            ],\n            \"developers\": [\n                {\n                    \"organisationUrl\": \"http://google.com\",\n                    \"name\": \"Brett Chabot\"\n                },\n                {\n                    \"organisationUrl\": \"http://google.com\",\n                    \"name\": \"Michael Hoisie\"\n                },\n                {\n                    \"name\": \"Christian Williams\"\n                }\n            ],\n            \"artifactVersion\": \"4.14.1\",\n            \"description\": \"An alternative Android testing framework.\",\n            \"scm\": {\n                \"connection\": \"scm:git:git://github.com/robolectric/robolectric.git\",\n                \"url\": \"git@github.com:robolectric/robolectric.git\",\n                \"developerConnection\": \"scm:git:https://github.com/robolectric/robolectric.git\"\n            },\n            \"name\": \"shadowapi\",\n            \"website\": \"http://robolectric.org\",\n            \"licenses\": [\n                \"MIT\"\n            ]\n        },\n        {\n            \"uniqueId\": \"org.robolectric:shadows-framework\",\n            \"funding\": [\n                \n            ],\n            \"developers\": [\n                {\n                    \"organisationUrl\": \"http://google.com\",\n                    \"name\": \"Brett Chabot\"\n                },\n                {\n                    \"organisationUrl\": \"http://google.com\",\n                    \"name\": \"Michael Hoisie\"\n                },\n                {\n                    \"name\": \"Christian Williams\"\n                }\n            ],\n            \"artifactVersion\": \"4.14.1\",\n            \"description\": \"An alternative Android testing framework.\",\n            \"scm\": {\n                \"connection\": \"scm:git:git://github.com/robolectric/robolectric.git\",\n                \"url\": \"git@github.com:robolectric/robolectric.git\",\n                \"developerConnection\": \"scm:git:https://github.com/robolectric/robolectric.git\"\n            },\n            \"name\": \"framework\",\n            \"website\": \"http://robolectric.org\",\n            \"licenses\": [\n                \"MIT\"\n            ]\n        },\n        {\n            \"uniqueId\": \"org.robolectric:utils\",\n            \"funding\": [\n                \n            ],\n            \"developers\": [\n                {\n                    \"organisationUrl\": \"http://google.com\",\n                    \"name\": \"Brett Chabot\"\n                },\n                {\n                    \"organisationUrl\": \"http://google.com\",\n                    \"name\": \"Michael Hoisie\"\n                },\n                {\n                    \"name\": \"Christian Williams\"\n                }\n            ],\n            \"artifactVersion\": \"4.14.1\",\n            \"description\": \"An alternative Android testing framework.\",\n            \"scm\": {\n                \"connection\": \"scm:git:git://github.com/robolectric/robolectric.git\",\n                \"url\": \"git@github.com:robolectric/robolectric.git\",\n                \"developerConnection\": \"scm:git:https://github.com/robolectric/robolectric.git\"\n            },\n            \"name\": \"utils\",\n            \"website\": \"http://robolectric.org\",\n            \"licenses\": [\n                \"MIT\"\n            ]\n        },\n        {\n            \"uniqueId\": \"org.robolectric:utils-reflector\",\n            \"funding\": [\n                \n            ],\n            \"developers\": [\n                {\n                    \"organisationUrl\": \"http://google.com\",\n                    \"name\": \"Brett Chabot\"\n                },\n                {\n                    \"organisationUrl\": \"http://google.com\",\n                    \"name\": \"Michael Hoisie\"\n                },\n                {\n                    \"name\": \"Christian Williams\"\n                }\n            ],\n            \"artifactVersion\": \"4.14.1\",\n            \"description\": \"An alternative Android testing framework.\",\n            \"scm\": {\n                \"connection\": \"scm:git:git://github.com/robolectric/robolectric.git\",\n                \"url\": \"git@github.com:robolectric/robolectric.git\",\n                \"developerConnection\": \"scm:git:https://github.com/robolectric/robolectric.git\"\n            },\n            \"name\": \"reflector\",\n            \"website\": \"http://robolectric.org\",\n            \"licenses\": [\n                \"MIT\"\n            ]\n        },\n        {\n            \"uniqueId\": \"org.simpleflatmapper:lightning-csv\",\n            \"funding\": [\n                \n            ],\n            \"developers\": [\n                {\n                    \"name\": \"Arnaud Roger\"\n                }\n            ],\n            \"artifactVersion\": \"8.2.3\",\n            \"description\": \"Java library to map flat record - ResultSet, csv - to java object with minimum configuration and low footprint.\",\n            \"scm\": {\n                \"connection\": \"scm:git:git://github.com/arnaudroger/SimpleFlatMapper.git/lightning-csv\",\n                \"url\": \"scm:git:git://github.com/arnaudroger/SimpleFlatMapper.git/lightning-csv\",\n                \"developerConnection\": \"scm:git:git@github.com:arnaudroger/SimpleFlatMapper.git/lightning-csv\"\n            },\n            \"name\": \"lightning-csv\",\n            \"website\": \"http://github.com/arnaudroger/SimpleFlatMapper/lightning-csv\",\n            \"licenses\": [\n                \"MIT\"\n            ]\n        },\n        {\n            \"uniqueId\": \"org.simpleflatmapper:ow2-asm\",\n            \"funding\": [\n                \n            ],\n            \"developers\": [\n                \n            ],\n            \"artifactVersion\": \"6.2\",\n            \"description\": \"Java library to map flat record - ResultSet, csv - to java object with minimum configuration and low\\n        footprint.\",\n            \"scm\": {\n                \"connection\": \"scm:git:git://github.com/arnaudroger/SimpleFlatMapper.git\",\n                \"url\": \"scm:git:git://github.com/arnaudroger/SimpleFlatMapper.git\",\n                \"developerConnection\": \"scm:git:git@github.com:arnaudroger/SimpleFlatMapper.git\"\n            },\n            \"name\": \"Repackaged OW2 ASM Core\",\n            \"website\": \"http://github.com/arnaudroger/SimpleFlatMapper\",\n            \"licenses\": [\n                \"c7cabdb83e11115cd5e288a296a76df7\"\n            ]\n        },\n        {\n            \"uniqueId\": \"org.simpleflatmapper:sfm-converter\",\n            \"funding\": [\n                \n            ],\n            \"developers\": [\n                {\n                    \"name\": \"Arnaud Roger\"\n                }\n            ],\n            \"artifactVersion\": \"8.2.3\",\n            \"description\": \"Java library to map flat record - ResultSet, csv - to java object with minimum configuration and low footprint.\",\n            \"scm\": {\n                \"connection\": \"scm:git:git://github.com/arnaudroger/SimpleFlatMapper.git/sfm-converter\",\n                \"url\": \"scm:git:git://github.com/arnaudroger/SimpleFlatMapper.git/sfm-converter\",\n                \"developerConnection\": \"scm:git:git@github.com:arnaudroger/SimpleFlatMapper.git/sfm-converter\"\n            },\n            \"name\": \"sfm-converter\",\n            \"website\": \"http://github.com/arnaudroger/SimpleFlatMapper/sfm-converter\",\n            \"licenses\": [\n                \"MIT\"\n            ]\n        },\n        {\n            \"uniqueId\": \"org.simpleflatmapper:sfm-csv\",\n            \"funding\": [\n                \n            ],\n            \"developers\": [\n                {\n                    \"name\": \"Arnaud Roger\"\n                }\n            ],\n            \"artifactVersion\": \"8.2.3\",\n            \"description\": \"Java library to map flat record - ResultSet, csv - to java object with minimum configuration and low footprint.\",\n            \"scm\": {\n                \"connection\": \"scm:git:git://github.com/arnaudroger/SimpleFlatMapper.git/sfm-csv\",\n                \"url\": \"scm:git:git://github.com/arnaudroger/SimpleFlatMapper.git/sfm-csv\",\n                \"developerConnection\": \"scm:git:git@github.com:arnaudroger/SimpleFlatMapper.git/sfm-csv\"\n            },\n            \"name\": \"sfm-csv\",\n            \"website\": \"http://github.com/arnaudroger/SimpleFlatMapper/sfm-csv\",\n            \"licenses\": [\n                \"MIT\"\n            ]\n        },\n        {\n            \"uniqueId\": \"org.simpleflatmapper:sfm-map\",\n            \"funding\": [\n                \n            ],\n            \"developers\": [\n                {\n                    \"name\": \"Arnaud Roger\"\n                }\n            ],\n            \"artifactVersion\": \"8.2.3\",\n            \"description\": \"Java library to map flat record - ResultSet, csv - to java object with minimum configuration and low footprint.\",\n            \"scm\": {\n                \"connection\": \"scm:git:git://github.com/arnaudroger/SimpleFlatMapper.git/sfm-map\",\n                \"url\": \"scm:git:git://github.com/arnaudroger/SimpleFlatMapper.git/sfm-map\",\n                \"developerConnection\": \"scm:git:git@github.com:arnaudroger/SimpleFlatMapper.git/sfm-map\"\n            },\n            \"name\": \"sfm-map\",\n            \"website\": \"http://github.com/arnaudroger/SimpleFlatMapper/sfm-map\",\n            \"licenses\": [\n                \"MIT\"\n            ]\n        },\n        {\n            \"uniqueId\": \"org.simpleflatmapper:sfm-reflect\",\n            \"funding\": [\n                \n            ],\n            \"developers\": [\n                {\n                    \"name\": \"Arnaud Roger\"\n                }\n            ],\n            \"artifactVersion\": \"8.2.3\",\n            \"description\": \"Java library to map flat record - ResultSet, csv - to java object with minimum configuration and low footprint.\",\n            \"scm\": {\n                \"connection\": \"scm:git:git://github.com/arnaudroger/SimpleFlatMapper.git/sfm-reflect\",\n                \"url\": \"scm:git:git://github.com/arnaudroger/SimpleFlatMapper.git/sfm-reflect\",\n                \"developerConnection\": \"scm:git:git@github.com:arnaudroger/SimpleFlatMapper.git/sfm-reflect\"\n            },\n            \"name\": \"sfm-reflect\",\n            \"website\": \"http://github.com/arnaudroger/SimpleFlatMapper/sfm-reflect\",\n            \"licenses\": [\n                \"MIT\"\n            ]\n        },\n        {\n            \"uniqueId\": \"org.simpleflatmapper:sfm-tuples\",\n            \"funding\": [\n                \n            ],\n            \"developers\": [\n                {\n                    \"name\": \"Arnaud Roger\"\n                }\n            ],\n            \"artifactVersion\": \"8.2.3\",\n            \"description\": \"Java library to map flat record - ResultSet, csv - to java object with minimum configuration and low footprint.\",\n            \"scm\": {\n                \"connection\": \"scm:git:git://github.com/arnaudroger/SimpleFlatMapper.git/sfm-tuples\",\n                \"url\": \"scm:git:git://github.com/arnaudroger/SimpleFlatMapper.git/sfm-tuples\",\n                \"developerConnection\": \"scm:git:git@github.com:arnaudroger/SimpleFlatMapper.git/sfm-tuples\"\n            },\n            \"name\": \"sfm-tuples\",\n            \"website\": \"http://github.com/arnaudroger/SimpleFlatMapper/sfm-tuples\",\n            \"licenses\": [\n                \"MIT\"\n            ]\n        },\n        {\n            \"uniqueId\": \"org.simpleflatmapper:sfm-util\",\n            \"funding\": [\n                \n            ],\n            \"developers\": [\n                {\n                    \"name\": \"Arnaud Roger\"\n                }\n            ],\n            \"artifactVersion\": \"8.2.3\",\n            \"description\": \"Java library to map flat record - ResultSet, csv - to java object with minimum configuration and low footprint.\",\n            \"scm\": {\n                \"connection\": \"scm:git:git://github.com/arnaudroger/SimpleFlatMapper.git/sfm-util\",\n                \"url\": \"scm:git:git://github.com/arnaudroger/SimpleFlatMapper.git/sfm-util\",\n                \"developerConnection\": \"scm:git:git@github.com:arnaudroger/SimpleFlatMapper.git/sfm-util\"\n            },\n            \"name\": \"sfm-util\",\n            \"website\": \"http://github.com/arnaudroger/SimpleFlatMapper/sfm-util\",\n            \"licenses\": [\n                \"MIT\"\n            ]\n        },\n        {\n            \"uniqueId\": \"org.yaml:snakeyaml\",\n            \"funding\": [\n                \n            ],\n            \"developers\": [\n                {\n                    \"name\": \"Andrey Somov\"\n                },\n                {\n                    \"name\": \"Alexander Maslov\"\n                }\n            ],\n            \"artifactVersion\": \"2.3\",\n            \"description\": \"YAML 1.1 parser and emitter for Java\",\n            \"scm\": {\n                \"connection\": \"scm:git:http://bitbucket.org/snakeyaml/snakeyaml\",\n                \"url\": \"https://bitbucket.org/snakeyaml/snakeyaml/src\",\n                \"developerConnection\": \"scm:git:ssh://git@bitbucket.org/snakeyaml/snakeyaml\"\n            },\n            \"name\": \"SnakeYAML\",\n            \"website\": \"https://bitbucket.org/snakeyaml/snakeyaml\",\n            \"licenses\": [\n                \"Apache-2.0\"\n            ]\n        }\n    ],\n    \"licenses\": {\n        \"2eb05b85f440c8e759fccbda7eb4f77e\": {\n            \"hash\": \"2eb05b85f440c8e759fccbda7eb4f77e\",\n            \"url\": \"https://github.com/stleary/JSON-java/blob/master/LICENSE\",\n            \"name\": \"Public Domain\"\n        },\n        \"3ca920d1875f7ad7ab04a2a331958577\": {\n            \"hash\": \"3ca920d1875f7ad7ab04a2a331958577\",\n            \"internalHash\": \"3ca920d1875f7ad7ab04a2a331958577\",\n            \"url\": \"https://github.com/guardianproject/TrustedIntents/blob/master/LICENSE.txt\",\n            \"name\": \"LGPLv2.1\"\n        },\n        \"44d1a25c593283261968a15c8cc213cd\": {\n            \"hash\": \"44d1a25c593283261968a15c8cc213cd\",\n            \"url\": \"https://chromium.googlesource.com/libyuv/libyuv/+/refs/heads/main/README.chromium\",\n            \"name\": \"BSD License\"\n        },\n        \"5be2dcb917a8d00d01258ff45d1f55b2\": {\n            \"hash\": \"5be2dcb917a8d00d01258ff45d1f55b2\",\n            \"url\": \"https://raw.githubusercontent.com/unicode-org/icu/main/LICENSE\",\n            \"name\": \"Unicode-3.0\"\n        },\n        \"73252b46f36df25ef51a7994de439aea\": {\n            \"hash\": \"73252b46f36df25ef51a7994de439aea\",\n            \"url\": \"https://www.bouncycastle.org/licence.html\",\n            \"name\": \"Bouncy Castle Licence\"\n        },\n        \"Apache-2.0\": {\n            \"content\": \"Apache License\\nVersion 2.0, January 2004\\nhttp://www.apache.org/licenses/\\n\\nTERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\\n\\n1. Definitions.\\n\\n\\\"License\\\" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.\\n\\n\\\"Licensor\\\" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License.\\n\\n\\\"Legal Entity\\\" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, \\\"control\\\" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity.\\n\\n\\\"You\\\" (or \\\"Your\\\") shall mean an individual or Legal Entity exercising permissions granted by this License.\\n\\n\\\"Source\\\" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files.\\n\\n\\\"Object\\\" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types.\\n\\n\\\"Work\\\" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below).\\n\\n\\\"Derivative Works\\\" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof.\\n\\n\\\"Contribution\\\" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, \\\"submitted\\\" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as \\\"Not a Contribution.\\\"\\n\\n\\\"Contributor\\\" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work.\\n\\n2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form.\\n\\n3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed.\\n\\n4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions:\\n\\n     (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and\\n\\n     (b) You must cause any modified files to carry prominent notices stating that You changed the files; and\\n\\n     (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and\\n\\n     (d) If the Work includes a \\\"NOTICE\\\" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License.\\n\\n     You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License.\\n\\n5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions.\\n\\n6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file.\\n\\n7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an \\\"AS IS\\\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License.\\n\\n8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages.\\n\\n9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability.\\n\\nEND OF TERMS AND CONDITIONS\\n\\nAPPENDIX: How to apply the Apache License to your work.\\n\\nTo apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets \\\"[]\\\" replaced with your own identifying information. (Don't include the brackets!)  The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same \\\"printed page\\\" as the copyright notice for easier identification within third-party archives.\\n\\nCopyright [yyyy] [name of copyright owner]\\n\\nLicensed under the Apache License, Version 2.0 (the \\\"License\\\");\\nyou may not use this file except in compliance with the License.\\nYou may obtain a copy of the License at\\n\\nhttp://www.apache.org/licenses/LICENSE-2.0\\n\\nUnless required by applicable law or agreed to in writing, software\\ndistributed under the License is distributed on an \\\"AS IS\\\" BASIS,\\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\nSee the License for the specific language governing permissions and\\nlimitations under the License.\",\n            \"hash\": \"Apache-2.0\",\n            \"internalHash\": \"Apache-2.0\",\n            \"url\": \"https://spdx.org/licenses/Apache-2.0.html\",\n            \"spdxId\": \"Apache-2.0\",\n            \"name\": \"Apache License 2.0\"\n        },\n        \"BSD-2-Clause\": {\n            \"content\": \"Copyright (c) <<var;name=copyright;original= <year> <owner>;match=.+>> All rights reserved.\\n\\nRedistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:\\n\\n1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. \\n\\n2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.\\n\\nTHIS SOFTWARE IS PROVIDED BY <<var;name=copyrightHolderAsIs;original=THE COPYRIGHT HOLDERS AND CONTRIBUTORS;match=.+>> \\\"AS IS\\\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL <<var;name=copyrightHolderLiability;original=THE COPYRIGHT HOLDER OR CONTRIBUTORS;match=.+>> BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\",\n            \"hash\": \"BSD-2-Clause\",\n            \"internalHash\": \"BSD-2-Clause\",\n            \"url\": \"https://spdx.org/licenses/BSD-2-Clause.html\",\n            \"spdxId\": \"BSD-2-Clause\",\n            \"name\": \"BSD 2-Clause \\\"Simplified\\\" License\"\n        },\n        \"BSD-3-Clause\": {\n            \"content\": \"Copyright (c) <<var;name=copyright;original= <year> <owner>;match=.+>>. All rights reserved. \\n\\nRedistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:\\n\\n1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. \\n\\n2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. \\n\\n3. Neither the name of <<var;name=organizationClause3;original=the copyright holder;match=.+>> nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.\\n\\nTHIS SOFTWARE IS PROVIDED BY <<var;name=copyrightHolderAsIs;original=THE COPYRIGHT HOLDERS AND CONTRIBUTORS;match=.+>> \\\"AS IS\\\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL <<var;name=copyrightHolderLiability;original=THE COPYRIGHT HOLDER OR CONTRIBUTORS;match=.+>> BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \",\n            \"hash\": \"BSD-3-Clause\",\n            \"internalHash\": \"BSD-3-Clause\",\n            \"url\": \"https://spdx.org/licenses/BSD-3-Clause.html\",\n            \"spdxId\": \"BSD-3-Clause\",\n            \"name\": \"BSD 3-Clause \\\"New\\\" or \\\"Revised\\\" License\"\n        },\n        \"EPL-1.0\": {\n            \"content\": \"Eclipse Public License - v 1.0\\n\\nTHE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE PUBLIC LICENSE (\\\"AGREEMENT\\\"). ANY USE, REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.\\n\\n1. DEFINITIONS\\n\\n\\\"Contribution\\\" means:\\n     a) in the case of the initial Contributor, the initial code and documentation distributed under this Agreement, and\\n     b) in the case of each subsequent Contributor:\\n          i) changes to the Program, and\\n          ii) additions to the Program;\\n\\nwhere such changes and/or additions to the Program originate from and are distributed by that particular Contributor. A Contribution 'originates' from a Contributor if it was added to the Program by such Contributor itself or anyone acting on such Contributor's behalf. Contributions do not include additions to the Program which: (i) are separate modules of software distributed in conjunction with the Program under their own license agreement, and (ii) are not derivative works of the Program.\\n\\\"Contributor\\\" means any person or entity that distributes the Program.\\n\\n\\\"Licensed Patents\\\" mean patent claims licensable by a Contributor which are necessarily infringed by the use or sale of its Contribution alone or when combined with the Program.\\n\\n\\\"Program\\\" means the Contributions distributed in accordance with this Agreement.\\n\\n\\\"Recipient\\\" means anyone who receives the Program under this Agreement, including all Contributors.\\n\\n2. GRANT OF RIGHTS\\n\\n     a) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide, royalty-free copyright license to reproduce, prepare derivative works of, publicly display, publicly perform, distribute and sublicense the Contribution of such Contributor, if any, and such derivative works, in source code and object code form.\\n \\n     b) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide, royalty-free patent license under Licensed Patents to make, use, sell, offer to sell, import and otherwise transfer the Contribution of such Contributor, if any, in source code and object code form. This patent license shall apply to the combination of the Contribution and the Program if, at the time the Contribution is added by the Contributor, such addition of the Contribution causes such combination to be covered by the Licensed Patents. The patent license shall not apply to any other combinations which include the Contribution. No hardware per se is licensed hereunder.\\n\\n     c) Recipient understands that although each Contributor grants the licenses to its Contributions set forth herein, no assurances are provided by any Contributor that the Program does not infringe the patent or other intellectual property rights of any other entity. Each Contributor disclaims any liability to Recipient for claims brought by any other entity based on infringement of intellectual property rights or otherwise. As a condition to exercising the rights and licenses granted hereunder, each Recipient hereby assumes sole responsibility to secure any other intellectual property rights needed, if any. For example, if a third party patent license is required to allow Recipient to distribute the Program, it is Recipient's responsibility to acquire that license before distributing the Program.\\n\\n     d) Each Contributor represents that to its knowledge it has sufficient copyright rights in its Contribution, if any, to grant the copyright license set forth in this Agreement.\\n\\n3. REQUIREMENTS\\nA Contributor may choose to distribute the Program in object code form under its own license agreement, provided that:\\n\\n     a) it complies with the terms and conditions of this Agreement; and\\n \\n     b) its license agreement:\\n          i) effectively disclaims on behalf of all Contributors all warranties and conditions, express and implied, including warranties or conditions of title and non-infringement, and implied warranties or conditions of merchantability and fitness for a particular purpose;\\n          ii) effectively excludes on behalf of all Contributors all liability for damages, including direct, indirect, special, incidental and consequential damages, such as lost profits;\\n          iii) states that any provisions which differ from this Agreement are offered by that Contributor alone and not by any other party; and\\n          iv) states that source code for the Program is available from such Contributor, and informs licensees how to obtain it in a reasonable manner on or through a medium customarily used for software exchange.\\n\\nWhen the Program is made available in source code form:\\n\\n     a) it must be made available under this Agreement; and\\n\\n     b) a copy of this Agreement must be included with each copy of the Program.\\nContributors may not remove or alter any copyright notices contained within the Program.\\n\\nEach Contributor must identify itself as the originator of its Contribution, if any, in a manner that reasonably allows subsequent Recipients to identify the originator of the Contribution.\\n\\n4. COMMERCIAL DISTRIBUTION\\nCommercial distributors of software may accept certain responsibilities with respect to end users, business partners and the like. While this license is intended to facilitate the commercial use of the Program, the Contributor who includes the Program in a commercial product offering should do so in a manner which does not create potential liability for other Contributors. Therefore, if a Contributor includes the Program in a commercial product offering, such Contributor (\\\"Commercial Contributor\\\") hereby agrees to defend and indemnify every other Contributor (\\\"Indemnified Contributor\\\") against any losses, damages and costs (collectively \\\"Losses\\\") arising from claims, lawsuits and other legal actions brought by a third party against the Indemnified Contributor to the extent caused by the acts or omissions of such Commercial Contributor in connection with its distribution of the Program in a commercial product offering. The obligations in this section do not apply to any claims or Losses relating to any actual or alleged intellectual property infringement. In order to qualify, an Indemnified Contributor must: a) promptly notify the Commercial Contributor in writing of such claim, and b) allow the Commercial Contributor to control, and cooperate with the Commercial Contributor in, the defense and any related settlement negotiations. The Indemnified Contributor may participate in any such claim at its own expense.\\n\\nFor example, a Contributor might include the Program in a commercial product offering, Product X. That Contributor is then a Commercial Contributor. If that Commercial Contributor then makes performance claims, or offers warranties related to Product X, those performance claims and warranties are such Commercial Contributor's responsibility alone. Under this section, the Commercial Contributor would have to defend claims against the other Contributors related to those performance claims and warranties, and if a court requires any other Contributor to pay any damages as a result, the Commercial Contributor must pay those damages.\\n\\n5. NO WARRANTY\\nEXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS PROVIDED ON AN \\\"AS IS\\\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely responsible for determining the appropriateness of using and distributing the Program and assumes all risks associated with its exercise of rights under this Agreement , including but not limited to the risks and costs of program errors, compliance with applicable laws, damage to or loss of data, programs or equipment, and unavailability or interruption of operations.\\n\\n6. DISCLAIMER OF LIABILITY\\nEXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.\\n\\n7. GENERAL\\n\\nIf any provision of this Agreement is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this Agreement, and without further action by the parties hereto, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable.\\n\\nIf Recipient institutes patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Program itself (excluding combinations of the Program with other software or hardware) infringes such Recipient's patent(s), then such Recipient's rights granted under Section 2(b) shall terminate as of the date such litigation is filed.\\n\\nAll Recipient's rights under this Agreement shall terminate if it fails to comply with any of the material terms or conditions of this Agreement and does not cure such failure in a reasonable period of time after becoming aware of such noncompliance. If all Recipient's rights under this Agreement terminate, Recipient agrees to cease use and distribution of the Program as soon as reasonably practicable. However, Recipient's obligations under this Agreement and any licenses granted by Recipient relating to the Program shall continue and survive.\\n\\nEveryone is permitted to copy and distribute copies of this Agreement, but in order to avoid inconsistency the Agreement is copyrighted and may only be modified in the following manner. The Agreement Steward reserves the right to publish new versions (including revisions) of this Agreement from time to time. No one other than the Agreement Steward has the right to modify this Agreement. The Eclipse Foundation is the initial Agreement Steward. The Eclipse Foundation may assign the responsibility to serve as the Agreement Steward to a suitable separate entity. Each new version of the Agreement will be given a distinguishing version number. The Program (including Contributions) may always be distributed subject to the version of the Agreement under which it was received. In addition, after a new version of the Agreement is published, Contributor may elect to distribute the Program (including its Contributions) under the new version. Except as expressly stated in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to the intellectual property of any Contributor under this Agreement, whether expressly, by implication, estoppel or otherwise. All rights in the Program not expressly granted under this Agreement are reserved.\\n\\nThis Agreement is governed by the laws of the State of New York and the intellectual property laws of the United States of America. No party to this Agreement will bring a legal action under this Agreement more than one year after the cause of action arose. Each party waives its rights to a jury trial in any resulting litigation.\",\n            \"hash\": \"EPL-1.0\",\n            \"internalHash\": \"EPL-1.0\",\n            \"url\": \"https://spdx.org/licenses/EPL-1.0.html\",\n            \"spdxId\": \"EPL-1.0\",\n            \"name\": \"Eclipse Public License 1.0\"\n        },\n        \"MIT\": {\n            \"content\": \"MIT License\\n\\nCopyright (c) <year> <copyright holders>\\n\\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \\\"Software\\\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\\n\\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\\n\\nTHE SOFTWARE IS PROVIDED \\\"AS IS\\\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\",\n            \"hash\": \"MIT\",\n            \"internalHash\": \"MIT\",\n            \"url\": \"https://spdx.org/licenses/MIT.html\",\n            \"spdxId\": \"MIT\",\n            \"name\": \"MIT License\"\n        },\n        \"c7cabdb83e11115cd5e288a296a76df7\": {\n            \"hash\": \"c7cabdb83e11115cd5e288a296a76df7\",\n            \"url\": \"https://asm.ow2.io/license.html\",\n            \"name\": \"BSD License\"\n        }\n    }\n}"
  },
  {
    "path": "app/src/main/res/raw/keep.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources xmlns:tools=\"http://schemas.android.com/tools\"\n    tools:keep=\"@layout/dialog_*,@layout/card_importer\" />\n"
  },
  {
    "path": "app/src/main/res/values/arrays.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string-array name=\"otp_types_array\">\n        <item>TOTP</item>\n        <item>HOTP</item>\n        <item>Steam</item>\n        <item>Yandex</item>\n        <item>MOTP</item>\n    </string-array>\n\n    <string-array name=\"otp_algo_array\">\n        <item>SHA1</item>\n        <item>SHA256</item>\n        <item>SHA512</item>\n    </string-array>\n\n    <string-array name=\"theme_titles\">\n        <item>@string/light_theme_title</item>\n        <item>@string/dark_theme_title</item>\n        <item>@string/amoled_theme_title</item>\n        <item>@string/system_theme_title</item>\n        <item>@string/system_amoled_theme_title</item>\n    </string-array>\n\n    <string-array name=\"view_mode_titles\">\n        <item>@string/normal_viewmode_title</item>\n        <item>@string/compact_mode_title</item>\n        <item>@string/small_mode_title</item>\n        <item>@string/tiles_mode_title</item>\n    </string-array>\n\n    <string-array name=\"pref_lang_entries\">\n        <item>System default</item>\n        <item>Arabic</item>\n        <item>Asturian</item>\n        <item>Basque</item>\n        <item>Bulgarian</item>\n        <item>Catalan</item>\n        <item>Chinese (Simplified Han, China)</item>\n        <item>Chinese (Traditional Han, Taiwan)</item>\n        <item>Czech</item>\n        <item>Danish</item>\n        <item>Dutch</item>\n        <item>Dutch (Frysian)</item>\n        <item>English</item>\n        <item>Estonian</item>\n        <item>Finnish</item>\n        <item>French</item>\n        <item>Galician</item>\n        <item>German</item>\n        <item>Greek</item>\n        <item>Hebrew</item>\n        <item>Hindi</item>\n        <item>Hungarian</item>\n        <item>Italian</item>\n        <item>Indonesian</item>\n        <item>Japanese</item>\n        <item>Kannada</item>\n        <item>Korean</item>\n        <item>Latvian</item>\n        <item>Lithuanian</item>\n        <item>Norwegian (Bokmål)</item>\n        <item>Malayalam</item>\n        <item>Persian</item>\n        <item>Polish</item>\n        <item>Portuguese</item>\n        <item>Portuguese (Brazilian)</item>\n        <item>Romanian</item>\n        <item>Russian</item>\n        <item>Serbian</item>\n        <item>Slovak</item>\n        <item>Spanish</item>\n        <item>Swedish</item>\n        <item>Turkish</item>\n        <item>Ukrainian</item>\n    </string-array>\n\n    <string-array name=\"pref_lang_values\" translatable=\"false\">\n        <item>system</item>\n        <item>ar</item>\n        <item>ast</item>\n        <item>eu</item>\n        <item>bg</item>\n        <item>ca</item>\n        <item>zh_CN</item>\n        <item>zh_TW</item>\n        <item>cs</item>\n        <item>da</item>\n        <item>nl</item>\n        <item>fy_NL</item>\n        <item>en</item>\n        <item>et</item>\n        <item>fi</item>\n        <item>fr</item>\n        <item>gl</item>\n        <item>de</item>\n        <item>el</item>\n        <item>iw</item>\n        <item>hi</item>\n        <item>hu</item>\n        <item>it</item>\n        <item>in</item>\n        <item>ja</item>\n        <item>kn</item>\n        <item>ko</item>\n        <item>lv</item>\n        <item>lt</item>\n        <item>nb</item>\n        <item>ml</item>\n        <item>fa</item>\n        <item>pl</item>\n        <item>pt_PT</item>\n        <item>pt_BR</item>\n        <item>ro</item>\n        <item>ru</item>\n        <item>sr</item>\n        <item>sk</item>\n        <item>es</item>\n        <item>sv</item>\n        <item>tr</item>\n        <item>uk</item>\n    </string-array>\n\n    <string-array name=\"password_strength\">\n        <item>@string/password_strength_very_weak</item>\n        <item>@string/password_strength_weak</item>\n        <item>@string/password_strength_fair</item>\n        <item>@string/password_strength_good</item>\n        <item>@string/password_strength_strong</item>\n    </string-array>\n\n    <string-array name=\"pref_auto_lock_types\">\n        <item>@string/pref_auto_lock_type_back_button</item>\n        <item>@string/pref_auto_lock_type_minimize</item>\n        <item>@string/pref_auto_lock_type_device_lock</item>\n    </string-array>\n\n    <string-array name=\"pref_search_behavior_types\">\n        <item>@string/pref_search_behavior_type_issuer</item>\n        <item>@string/pref_search_behavior_type_name</item>\n        <item>@string/pref_search_behavior_type_note</item>\n        <item>@string/pref_search_behavior_type_groups</item>\n    </string-array>\n\n    <string-array name=\"export_formats\">\n        <item>@string/export_format_aegis</item>\n        <item>@string/export_format_html</item>\n        <item>@string/export_format_google_auth_uri</item>\n    </string-array>\n\n    <string-array name=\"pref_code_groupings\">\n        <item>@string/pref_grouping_halves</item>\n        <item>@string/pref_grouping_none</item>\n        <item>@string/pref_grouping_size_two</item>\n        <item>@string/pref_grouping_size_three</item>\n        <item>@string/pref_grouping_size_four</item>\n    </string-array>\n\n    <string-array name=\"pref_code_groupings_values\">\n        <item>HALVES</item>\n        <item>NO_GROUPING</item>\n        <item>GROUPING_TWOS</item>\n        <item>GROUPING_THREES</item>\n        <item>GROUPING_FOURS</item>\n    </string-array>\n\n    <string-array name=\"account_name_position_titles\">\n        <item>@string/pref_account_name_position_hidden</item>\n        <item>@string/pref_account_name_position_end</item>\n        <item>@string/pref_account_name_position_below</item>\n    </string-array>\n\n    <string-array name=\"copy_behavior_titles\">\n        <item>@string/pref_copy_behavior_never</item>\n        <item>@string/pref_copy_behavior_single_tap</item>\n        <item>@string/pref_copy_behavior_double_tap</item>\n    </string-array>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values/attrs.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <attr name=\"dropdownStyle\" format=\"reference\" />\n    <attr name=\"colorFavorite\" format=\"color\" />\n    <attr name=\"colorPrimaryAlternative\" format=\"color\" />\n    <attr name=\"colorProgressbar\" format=\"color\" />\n    <attr name=\"colorOnDark\" />\n    <attr name=\"colorSuccess\" />\n    <attr name=\"colorOnSurfaceDim\" />\n    <attr name=\"colorCode\" />\n    <attr name=\"colorCodeHidden\" />\n\n    <declare-styleable name=\"SlideIndicator\">\n        <attr name=\"dot_radius\" format=\"dimension\" />\n        <attr name=\"dot_separation\" format=\"dimension\" />\n        <attr name=\"dot_color\" format=\"color\" />\n        <attr name=\"dot_color_selected\" format=\"color\" />\n    </declare-styleable>\n\n    <declare-styleable name=\"DropdownCheckBoxes\">\n        <attr name=\"allow_filtering\" format=\"boolean\" />\n    </declare-styleable>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values/colors.xml",
    "content": "<resources xmlns:tools=\"http://schemas.android.com/tools\" tools:ignore=\"UnusedResources\">\n    <color name=\"md_theme_light_primary\">#2b5bb5</color>\n    <color name=\"md_theme_light_onPrimary\">#ffffff</color>\n    <color name=\"md_theme_light_primaryContainer\">#d9e2ff</color>\n    <color name=\"md_theme_light_onPrimaryContainer\">#001945</color>\n    <color name=\"md_theme_light_primaryFixed\">#d9e2ff</color>\n    <color name=\"md_theme_light_onPrimaryFixed\">#001945</color>\n    <color name=\"md_theme_light_primaryFixedDim\">#b0c6ff</color>\n    <color name=\"md_theme_light_onPrimaryFixedVariant\">#00429c</color>\n    <color name=\"md_theme_light_secondary\">#365ca8</color>\n    <color name=\"md_theme_light_onSecondary\">#ffffff</color>\n    <color name=\"md_theme_light_secondaryContainer\">#d9e2ff</color>\n    <color name=\"md_theme_light_onSecondaryContainer\">#001944</color>\n    <color name=\"md_theme_light_secondaryFixed\">#d9e2ff</color>\n    <color name=\"md_theme_light_onSecondaryFixed\">#001944</color>\n    <color name=\"md_theme_light_secondaryFixedDim\">#b0c6ff</color>\n    <color name=\"md_theme_light_onSecondaryFixedVariant\">#18438f</color>\n    <color name=\"md_theme_light_tertiary\">#006491</color>\n    <color name=\"md_theme_light_onTertiary\">#ffffff</color>\n    <color name=\"md_theme_light_tertiaryContainer\">#c9e6ff</color>\n    <color name=\"md_theme_light_onTertiaryContainer\">#001e2f</color>\n    <color name=\"md_theme_light_tertiaryFixed\">#c9e6ff</color>\n    <color name=\"md_theme_light_onTertiaryFixed\">#001e2f</color>\n    <color name=\"md_theme_light_tertiaryFixedDim\">#8aceff</color>\n    <color name=\"md_theme_light_onTertiaryFixedVariant\">#004c6e</color>\n    <color name=\"md_theme_light_error\">#ba1a1a</color>\n    <color name=\"md_theme_light_errorContainer\">#ffdad6</color>\n    <color name=\"md_theme_light_onError\">#ffffff</color>\n    <color name=\"md_theme_light_onErrorContainer\">#410002</color>\n    <color name=\"md_theme_light_background\">#fefbff</color>\n    <color name=\"md_theme_light_onBackground\">#1b1b1f</color>\n    <color name=\"md_theme_light_outline\">#757780</color>\n    <color name=\"md_theme_light_inverseOnSurface\">#f2f0f4</color>\n    <color name=\"md_theme_light_inverseSurface\">#303034</color>\n    <color name=\"md_theme_light_inversePrimary\">#b0c6ff</color>\n    <color name=\"md_theme_light_shadow\">#000000</color>\n    <color name=\"md_theme_light_surfaceTint\">#2b5bb5</color>\n    <color name=\"md_theme_light_outlineVariant\">#c5c6d0</color>\n    <color name=\"md_theme_light_scrim\">#000000</color>\n    <color name=\"md_theme_light_surface\">#fbf8fd</color>\n    <color name=\"md_theme_light_onSurface\">#1b1b1f</color>\n    <color name=\"md_theme_light_surfaceVariant\">#e1e2ec</color>\n    <color name=\"md_theme_light_onSurfaceVariant\">#44464f</color>\n    <color name=\"md_theme_light_surfaceContainerHighest\">#e4e2e6</color>\n    <color name=\"md_theme_light_surfaceContainerHigh\">#e9e7ec</color>\n    <color name=\"md_theme_light_surfaceContainer\">#efedf1</color>\n    <color name=\"md_theme_light_surfaceContainerLow\">#f5f3f7</color>\n    <color name=\"md_theme_light_surfaceContainerLowest\">#ffffff</color>\n    <color name=\"md_theme_light_surfaceDim\">#dbd9dd</color>\n    <color name=\"md_theme_light_surfaceBright\">#fbf8fd</color>\n    <color name=\"md_theme_dark_primary\">#b0c6ff</color>\n    <color name=\"md_theme_dark_onPrimary\">#002d6f</color>\n    <color name=\"md_theme_dark_primaryContainer\">#00429c</color>\n    <color name=\"md_theme_dark_onPrimaryContainer\">#d9e2ff</color>\n    <color name=\"md_theme_dark_primaryFixed\">#d9e2ff</color>\n    <color name=\"md_theme_dark_onPrimaryFixed\">#001945</color>\n    <color name=\"md_theme_dark_primaryFixedDim\">#b0c6ff</color>\n    <color name=\"md_theme_dark_onPrimaryFixedVariant\">#00429c</color>\n    <color name=\"md_theme_dark_secondary\">#b0c6ff</color>\n    <color name=\"md_theme_dark_onSecondary\">#002d6e</color>\n    <color name=\"md_theme_dark_secondaryContainer\">#18438f</color>\n    <color name=\"md_theme_dark_onSecondaryContainer\">#d9e2ff</color>\n    <color name=\"md_theme_dark_secondaryFixed\">#d9e2ff</color>\n    <color name=\"md_theme_dark_onSecondaryFixed\">#001944</color>\n    <color name=\"md_theme_dark_secondaryFixedDim\">#b0c6ff</color>\n    <color name=\"md_theme_dark_onSecondaryFixedVariant\">#18438f</color>\n    <color name=\"md_theme_dark_tertiary\">#8aceff</color>\n    <color name=\"md_theme_dark_onTertiary\">#00344e</color>\n    <color name=\"md_theme_dark_tertiaryContainer\">#004c6e</color>\n    <color name=\"md_theme_dark_onTertiaryContainer\">#c9e6ff</color>\n    <color name=\"md_theme_dark_tertiaryFixed\">#c9e6ff</color>\n    <color name=\"md_theme_dark_onTertiaryFixed\">#001e2f</color>\n    <color name=\"md_theme_dark_tertiaryFixedDim\">#8aceff</color>\n    <color name=\"md_theme_dark_onTertiaryFixedVariant\">#004c6e</color>\n    <color name=\"md_theme_dark_error\">#ffb4ab</color>\n    <color name=\"md_theme_dark_errorContainer\">#93000a</color>\n    <color name=\"md_theme_dark_onError\">#690005</color>\n    <color name=\"md_theme_dark_onErrorContainer\">#ffdad6</color>\n    <color name=\"md_theme_dark_background\">#1b1b1f</color>\n    <color name=\"md_theme_dark_onBackground\">#e4e2e6</color>\n    <color name=\"md_theme_dark_outline\">#8f9099</color>\n    <color name=\"md_theme_dark_inverseOnSurface\">#1b1b1f</color>\n    <color name=\"md_theme_dark_inverseSurface\">#e4e2e6</color>\n    <color name=\"md_theme_dark_inversePrimary\">#2b5bb5</color>\n    <color name=\"md_theme_dark_shadow\">#000000</color>\n    <color name=\"md_theme_dark_surfaceTint\">#b0c6ff</color>\n    <color name=\"md_theme_dark_outlineVariant\">#44464f</color>\n    <color name=\"md_theme_dark_scrim\">#000000</color>\n    <color name=\"md_theme_dark_surface\">#131316</color>\n    <color name=\"md_theme_dark_onSurface\">#c7c6ca</color>\n    <color name=\"md_theme_dark_surfaceVariant\">#44464f</color>\n    <color name=\"md_theme_dark_onSurfaceVariant\">#c5c6d0</color>\n    <color name=\"md_theme_dark_surfaceContainerHighest\">#343438</color>\n    <color name=\"md_theme_dark_surfaceContainerHigh\">#292a2d</color>\n    <color name=\"md_theme_dark_surfaceContainer\">#1f1f23</color>\n    <color name=\"md_theme_dark_surfaceContainerLow\">#1b1b1f</color>\n    <color name=\"md_theme_dark_surfaceContainerLowest\">#0d0e11</color>\n    <color name=\"md_theme_dark_surfaceDim\">#131316</color>\n    <color name=\"md_theme_dark_surfaceBright\">#39393c</color>\n    <!-- Custom -->\n    <color name=\"aegis_theme_all_favorite\">#F9A825</color>\n    <color name=\"aegis_theme_light_success\">#518242</color>\n    <color name=\"aegis_theme_dark_success\">#d9e7cb</color>\n    <color name=\"aegis_theme_light_onSurfaceDim\">#9D9EA2</color>\n    <color name=\"aegis_theme_dark_onSurfaceDim\">#616371</color>\n    <!-- Hacks to force the status bar to the correct color during action mode.\n         These colors are used by AppCompatDelegateImpl.updateStatusGuardColor -->\n    <color name=\"abc_decor_view_status_guard_light\" tools:override=\"true\">@android:color/transparent</color>\n    <color name=\"abc_decor_view_status_guard\" tools:override=\"true\">@android:color/transparent</color>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values/dimens.xml",
    "content": "<resources>\n    <dimen name=\"fab_margin\">16dp</dimen>\n    <dimen name=\"fab_menu_item_image_size\">24dp</dimen>\n    <dimen name=\"list_item_height\">48dp</dimen>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values/strings.xml",
    "content": "<resources xmlns:tools=\"http://schemas.android.com/tools\">\n    <string name=\"app_name\" translatable=\"false\">Aegis</string>\n    <string name=\"app_name_full\" translatable=\"false\">Aegis Authenticator</string>\n    <string name=\"org_name_full\" translatable=\"false\">Beem Development</string>\n    <string name=\"action_settings\">Settings</string>\n    <string name=\"action_about\">About</string>\n    <string name=\"action_delete\">Delete</string>\n    <string name=\"action_transfer\">Transfer</string>\n    <string name=\"action_edit_icon\">Edit icon</string>\n    <string name=\"action_reset_usage_count\">Reset usage count</string>\n    <string name=\"action_reset_usage_count_dialog\">Are you sure you want to set the usage count of this entry to 0?</string>\n    <string name=\"action_default_icon\">Restore default icon</string>\n    <string name=\"discard\">Discard</string>\n    <string name=\"save\">Save</string>\n    <string name=\"all\">All</string>\n    <string name=\"issuer\">Issuer</string>\n    <string name=\"yandex_pin\">PIN (4–16 digits)</string>\n    <string name=\"motp_pin\">PIN (4 digits)</string>\n    <string name=\"suggested\">Suggested</string>\n    <string name=\"usage_count\">Usage count</string>\n    <string name=\"warning\">Warning</string>\n\n    <string name=\"pref_cat_appearance_app\">App</string>\n    <string name=\"pref_cat_appearance_entries\">Entries</string>\n    <string name=\"pref_cat_backups_android\">Android</string>\n    <string name=\"pref_cat_backups_auto\">Automatic backups</string>\n    <string name=\"pref_section_behavior_title\">Behavior</string>\n    <string name=\"pref_section_behavior_summary\">Customize the behavior when interacting with the entry list.</string>\n    <string name=\"pref_section_appearance_title\">Appearance</string>\n    <string name=\"pref_section_appearance_summary\">Adjust the theme, language and other settings that affect the appearance of the app.</string>\n    <string name=\"pref_section_security_title\">Security</string>\n    <string name=\"pref_section_security_summary\">Configure encryption, biometric unlock, auto lock and other security settings.</string>\n    <string name=\"pref_section_import_export_title\">Import &amp; Export</string>\n    <string name=\"pref_section_import_export_summary\">Import backups of Aegis or other authenticator apps. Create manual exports of your Aegis vault.</string>\n    <string name=\"pref_section_audit_log_title\">Audit log</string>\n    <string name=\"pref_section_audit_log_summary\">Find a list of all reported important events that happened within the app.</string>\n    <string name=\"pref_section_backups_title\">Backups</string>\n    <string name=\"pref_section_backups_summary\">Set up automatic backups to a location of your choosing or enable participation in Android\\'s cloud backup system.</string>\n    <string name=\"pref_section_icon_packs\">Icon packs</string>\n    <string name=\"pref_section_icon_packs_summary\">Manage and import icon packs</string>\n    <string name=\"pref_select_theme_title\">Theme</string>\n    <string name=\"pref_dynamic_colors_title\">Dynamic colors</string>\n    <string name=\"pref_dynamic_colors_summary\">Apply an overlay based on the colors of your Android theme</string>\n    <string name=\"pref_view_mode_title\">View mode</string>\n    <string name=\"pref_lang_title\">Language</string>\n    <string name=\"pref_show_icons_title\">Show icons</string>\n    <string name=\"pref_show_icons_summary\">Display icons next to each entry</string>\n    <string name=\"pref_code_group_size_title\">Code digit grouping</string>\n    <string name=\"pref_code_group_size_summary\">Select number of digits to group codes by</string>\n    <string name=\"pref_account_name_position_title\">Show the account name</string>\n    <string name=\"pref_show_next_code_title\">Show next code</string>\n    <string name=\"pref_show_next_code_summary\">Generate and show the next code ahead of time</string>\n    <string name=\"pref_expiration_state_title\">Indicate when codes are about to expire</string>\n    <string name=\"pref_expiration_state_summary\">Change the color of the codes and have them blink when they are about to expire</string>\n    <string name=\"pref_expiration_state_fallback\">Change the color of the codes when they are about to expire</string>\n    <string name=\"pref_shared_issuer_account_name_title\">Only show account name when necessary</string>\n    <string name=\"pref_shared_issuer_account_name_summary\">Only show account names whenever they share the same issuer. Other account names will be hidden.</string>\n    <string name=\"pref_account_name_position_summary_override\">This setting is overridden by the tiles view mode. Account name will be shown below the issuer.</string>\n    <string name=\"pref_import_file_title\">Import from file</string>\n    <string name=\"pref_import_file_summary\">Import tokens from a file</string>\n    <string name=\"pref_android_backups_title\">Android cloud backups</string>\n    <string name=\"pref_android_backups_summary\">Allow Android\\'s cloud backup system to include Aegis\\' vault in its backups. This is only supported for encrypted vaults.</string>\n    <string name=\"pref_android_backups_hint\"><i>Device-to-device (D2D) backups are always allowed, regardless of the setting above</i></string>\n    <string name=\"pref_backups_title\">Automatically back up the vault</string>\n    <string name=\"pref_backups_summary\">Automatically create backups of the vault on external storage when changes are made. This is only supported for encrypted vaults.</string>\n    <string name=\"pref_backups_reminder_title\">Backup reminder</string>\n    <string name=\"pref_backups_reminder_summary\">Show a reminder to backup your vault in case you haven\\'t backed up your latest changes.</string>\n    <string name=\"pref_backups_reminder_dialog_title\">Disable backup reminder</string>\n    <string name=\"pref_backups_reminder_dialog_summary\">Disabling this reminder means Aegis won\\'t tell you whether or not you have changes that are not backed up yet. This puts you at risk of losing access to your tokens. Are you sure you want to disable the reminder?</string>\n    <string name=\"pref_backups_versioning_strategy_title\">Backup strategy</string>\n    <string name=\"pref_backups_versioning_strategy_keep_x_versions\">Keep a number of versions</string>\n    <string name=\"pref_backups_versioning_strategy_single_backup\">Single backup</string>\n    <string name=\"pref_backups_versioning_strategy_single_backup_warning\">The selected backup strategy is not reliable and not recommended. A single backup failure could lead to losing your only backup.</string>\n    <string name=\"pref_backups_versioning_strategy_dialog_title\">Select a backup strategy</string>\n    <string name=\"pref_backups_location_title\">Backup location</string>\n    <string name=\"pref_backups_location_summary\">Backups will be stored at</string>\n    <string name=\"pref_backup_location_summary\">Backup will be stored at</string>\n    <string name=\"pref_backups_trigger_title\">Trigger backup</string>\n    <string name=\"pref_backups_trigger_summary\">Manually trigger a backup</string>\n    <string name=\"pref_backups_versions_title\">Number of versions to keep</string>\n    <string name=\"pref_backups_versions_infinite\">\\u221E</string>\n    <plurals name=\"pref_backups_versions_summary\">\n        <item quantity=\"one\">Keep %1$d version of the backup</item>\n        <item quantity=\"other\">Keep %1$d versions of the backup</item>\n    </plurals>\n    <string name=\"pref_backups_versions_infinite_summary\">Keep an infinite number of versions of the backup</string>\n    <string name=\"pref_import_app_title\">Import from app</string>\n    <string name=\"pref_import_app_summary\">Import tokens from an app (requires root access)</string>\n    <string name=\"pref_export_title\">Export</string>\n    <string name=\"pref_export_summary\">Export the vault</string>\n    <string name=\"pref_password_reminder_title\">Password reminder</string>\n    <string name=\"pref_google_auth_export_title\">Export for Google Authenticator</string>\n    <string name=\"pref_google_auth_export_descriptor\">Generates export QR codes compatible with Google Authenticator</string>\n    <string name=\"pref_google_auth_export_no_data\">No data to export</string>\n    <plurals name=\"pref_google_auth_export_incompatible_entries\">\n        <item quantity=\"one\">Skipped %d incompatible entry</item>\n        <item quantity=\"other\">Skipped %d incompatible entries</item>\n    </plurals>\n    <string name=\"pref_password_reminder_summary\">Show a %s reminder to enter the password, so that you don\\'t forget it.</string>\n    <string name=\"pref_password_reminder_summary_disabled\">Disabled</string>\n    <string name=\"pref_secure_screen_title\">Screen security</string>\n    <string name=\"pref_secure_screen_summary\">Block screenshots and other attempts to capture the screen within the app</string>\n    <string name=\"pref_tap_to_reveal_title\">Tap to reveal</string>\n    <string name=\"pref_tap_to_reveal_summary\">Tokens will be hidden by default. Tap on the tokens to reveal code.</string>\n    <string name=\"pref_tap_to_reveal_time_title\">Timeout for tap to reveal</string>\n    <string name=\"pref_auto_lock_title\">Auto lock</string>\n    <string name=\"pref_auto_lock_summary\">When %s</string>\n    <string name=\"pref_auto_lock_summary_disabled\">Disabled</string>\n    <string name=\"pref_auto_lock_prompt\">Automatically lock Aegis when</string>\n    <string name=\"pref_auto_lock_type_back_button\">The back button is pressed</string>\n    <string name=\"pref_auto_lock_type_minimize\">The app is minimized</string>\n    <string name=\"pref_auto_lock_type_device_lock\">The device is locked</string>\n    <string name=\"pref_backup_password_category\">Backup &amp; Export</string>\n    <string name=\"pref_backup_password_title\">Separate password for backup &amp; export</string>\n    <string name=\"pref_backup_password_summary\">If enabled, the password that is used to unlock the app can\\'t be used to decrypt backups and exports anymore.</string>\n    <string name=\"pref_backup_password_change_title\">Change password for backup &amp; export</string>\n    <string name=\"pref_backup_password_change_summary\">Set a new password that\\'ll be used to encrypt the vault during backup and export.</string>\n    <string name=\"pref_encryption_title\">Encryption</string>\n    <string name=\"pref_encryption_summary\">Encrypt the vault and unlock it with a password or biometrics</string>\n    <string name=\"pref_biometrics_title\">Biometric unlock</string>\n    <string name=\"pref_biometrics_summary\">Allow biometric authentication to unlock the vault</string>\n    <string name=\"pref_search_behavior_summary\">Search through: %s</string>\n    <string name=\"pref_search_behavior_prompt\">Search in any of the following fields</string>\n    <string name=\"pref_search_behavior_type_name\">Name</string>\n    <string name=\"pref_search_behavior_type_issuer\">Issuer</string>\n    <string name=\"pref_search_behavior_type_note\">Note</string>\n    <string name=\"pref_search_behavior_type_groups\">Groups</string>\n    <string name=\"pref_set_password_title\">Change password</string>\n    <string name=\"pref_set_password_summary\">Set a new password which you will need to unlock your vault</string>\n\n    <string name=\"no_events_title\">No reported events</string>\n    <string name=\"no_events_description\">No important events have been reported within the app</string>\n    <string name=\"event_title_vault_unlocked\">Vault unlocked</string>\n    <string name=\"event_description_vault_unlocked\">The vault has been successfully unlocked</string>\n    <string name=\"event_title_backup_created\">Backup created</string>\n    <string name=\"event_description_backup_created\">A backup of the vault has been successfully created</string>\n    <string name=\"event_title_android_backup_created\">Backup created by Android</string>\n    <string name=\"event_description_android_backup_created\">A backup of the vault has been successfully created by Android</string>\n    <string name=\"event_title_vault_exported\">Vault exported</string>\n    <string name=\"event_description_vault_exported\">A copy of the vault has been exported</string>\n    <string name=\"event_title_entry_shared\">Entry shared</string>\n    <string name=\"event_description_entry_shared\">An entry was shared</string>\n    <string name=\"event_title_vault_unlock_failed_password\">Vault unlock failed (password)</string>\n    <string name=\"event_description_vault_unlock_failed_password\">An attempt to unlock the vault with a password failed</string>\n    <string name=\"event_title_vault_unlock_failed_biometrics\">Vault unlock failed (biometrics)</string>\n    <string name=\"event_description_vault_unlock_failed_biometrics\">An attempt to unlock the vault with biometrics failed</string>\n    <string name=\"event_unknown\">Unknown event type</string>\n    <string name=\"audit_log_entry_deleted\">(deleted)</string>\n\n    <string name=\"today_at_time\">Today at %1$s</string>\n    <string name=\"day_of_week_at_time\">%1$s at %2$s</string>\n\n    <string name=\"export_encrypted\">Encrypt the vault</string>\n    <string name=\"export_help\">This action will export the vault out of Aegis\\' internal storage. Select the format you\\'d like your export to be in:</string>\n    <string name=\"export_warning_unencrypted\">You are about to export an unencrypted copy of your Aegis vault. <b>This is not recommended</b>.</string>\n    <string name=\"export_warning_password\">Exports are encrypted using a separate password configured in Security settings.</string>\n    <string name=\"understand_risk_accept\">I understand the risk</string>\n    <string name=\"export_format_aegis\">Aegis (.JSON)</string>\n    <string name=\"export_format_google_auth_uri\">Text file (.TXT)</string>\n    <string name=\"export_format_html\">Web page (.HTML)</string>\n    <string name=\"export_format_hint\">Export format</string>\n    <string name=\"export_all_groups\">Export all groups</string>\n    <string name=\"export_choose_groups\">Select which groups to export</string>\n    <plurals name=\"export_groups_selected_count\">\n        <item quantity=\"one\">%d group selected</item>\n        <item quantity=\"other\">%d groups selected</item>\n    </plurals>\n    <string name=\"export_no_groups_selected\">No groups selected to export</string>\n    <string name=\"export_html_title\" comment=\"The title of an HTML export document\">Aegis Authenticator Export</string>\n\n    <string name=\"choose_authentication_method\">Security</string>\n    <string name=\"authentication_method_explanation\">Aegis is a security-focused 2FA app. Tokens are stored in a vault, that can optionally be encrypted with a password of your choosing. If an attacker obtains your encrypted vault file, they will not be able to access the contents without knowing the password.\\n\\nWe\\'ve preselected the option that we think would fit best for your device.</string>\n    <string name=\"authentication_method_none\">None</string>\n    <string name=\"authentication_method_none_description\">No password is needed to unlock the vault and it will not be encrypted. <b>This option is not recommended</b>.</string>\n    <string name=\"authentication_method_password\">Password</string>\n    <string name=\"authentication_method_password_description\">A password is needed to unlock the vault.</string>\n    <string name=\"authentication_method_password_explanation\">Warning: If you forget your password, you will permanently lose access to your tokens. There is no way to recover them without the password.</string>\n    <string name=\"authentication_method_biometrics\">Biometrics</string>\n    <string name=\"authentication_method_biometrics_description\">In addition to a password, biometrics registered on this device, like a fingerprint or your face, can be used to unlock the vault.</string>\n    <string name=\"authentication\">Unlock the vault</string>\n    <string name=\"authentication_multiline\" comment=\"The newline in the middle is used for aesthetic purposes\">Unlock\\nthe vault</string>\n\n    <string name=\"auth_use_biometrics\">Or tap here to use <font fgcolor='#FF0D86C1'>biometrics</font></string>\n    <string name=\"set_password\">Please enter a password</string>\n    <string name=\"set_group\">Please enter a group name</string>\n    <string name=\"set_number\">Please enter a number</string>\n    <string name=\"set_password_confirm\">Please confirm the password</string>\n    <string name=\"invalid_password\">The password is incorrect</string>\n    <string name=\"invalidated_biometrics\">A change in your device\\'s security settings has been detected. Please go to \\\"Aegis -> Settings -> Security -> Biometric unlock\\\" to disable and re-enable biometric unlock.</string>\n    <string name=\"password_reminder\">Please enter your password. We occasionally ask you to do this so that you don\\'t forget it.</string>\n    <string name=\"password_reminder_dialog_title\">Biometric unlock by default</string>\n    <string name=\"password_reminder_dialog_message\">We occasionally prompt you to enter your password instead to ensure you haven\\'t forgotten it and won\\'t get locked out of your vault. After entering your password once, Aegis will default back to biometric unlock until it\\'s time for another password reminder.</string>\n    <string name=\"password_reminder_freq_never\">Never</string>\n    <string name=\"password_reminder_freq_weekly\">Weekly</string>\n    <string name=\"password_reminder_freq_biweekly\">Biweekly</string>\n    <string name=\"password_reminder_freq_monthly\">Monthly</string>\n    <string name=\"password_reminder_freq_quarterly\">Quarterly</string>\n    <string name=\"enter_password_2fas_message\">It looks like this 2FAS backup is encrypted. Please enter the password below.</string>\n    <string name=\"enter_password_authy_message\">It looks like your Authy tokens are encrypted. Please close Aegis, open Authy and unlock the tokens with your password. Instead, Aegis can also attempt to decrypt your Authy tokens for you, if you enter your password below.</string>\n    <string name=\"enter_password_aegis_title\">Please enter the import password</string>\n\n    <string name=\"period_hint\">Period (seconds)</string>\n    <string name=\"algorithm_hint\">Hash function</string>\n    <string name=\"type\">Type</string>\n    <string name=\"share\">Share</string>\n    <string name=\"yes\">Yes</string>\n    <string name=\"no\">No</string>\n    <string name=\"undo\">Undo</string>\n    <string name=\"unlock\">Unlock</string>\n    <string name=\"advanced\">Advanced</string>\n    <string name=\"counter\">Counter</string>\n    <string name=\"digits\">Digits</string>\n    <string name=\"secret\">Secret</string>\n    <string name=\"scan\">Scan QR code</string>\n    <string name=\"scan_image\">Scan image</string>\n    <string name=\"enter_manually\">Enter manually</string>\n    <string name=\"set_up_biometric\">Set up biometric unlock</string>\n    <string name=\"copy\">Copy</string>\n    <string name=\"edit\">Edit</string>\n    <string name=\"select_all\">Select all</string>\n    <string name=\"assign_icons\">Assign icons</string>\n    <string name=\"assign_groups\">Assign to group</string>\n    <string name=\"assign_groups_dialog_summary\">Select a group you wish to assign the selected entries to.</string>\n    <string name=\"assign_groups_dialog_dropdown\">Select group</string>\n    <string name=\"favorite\" comment=\"Verb\">Favorite</string>\n    <string name=\"unfavorite\" comment=\"Verb\">Unfavorite</string>\n    <string name=\"error_all_caps\">ERROR</string>\n    <string name=\"password\">Password</string>\n    <string name=\"confirm_password\">Confirm password</string>\n    <string name=\"show_password\">Show password</string>\n    <string name=\"new_entry\">New entry</string>\n    <string name=\"add_new_entry\">Add new entry</string>\n    <string name=\"unlock_vault_error\">Couldn\\'t unlock vault</string>\n    <string name=\"unlock_vault_error_description\">Incorrect password. Make sure you didn\\'t mistype your password.</string>\n    <string name=\"password_equality_error\">Passwords should be identical and non-empty</string>\n    <string name=\"snackbar_authentication_method\">Please select an authentication method</string>\n    <string name=\"encrypting_vault\">Encrypting the vault</string>\n    <string name=\"exporting_vault\">Exporting the vault</string>\n    <string name=\"optimizing_icon\">Optimizing icon</string>\n    <string name=\"optimizing_icon_multiple\">Optimizing icons %1$d/%2$d</string>\n    <string name=\"reading_file\">Reading file</string>\n    <string name=\"requesting_root_access\">Requesting root access</string>\n    <string name=\"analyzing_qr\">Analyzing QR code</string>\n    <string name=\"analyzing_qr_multiple\">Analyzing QR code %1$d/%2$d (%3$s)</string>\n    <plurals name=\"added_new_entries\">\n        <item quantity=\"one\">Added %d new entry to the vault</item>\n        <item quantity=\"other\">Added %d new entries to the vault</item>\n    </plurals>\n    <string name=\"importing_icon_pack\">Importing icon pack</string>\n    <string name=\"delete_entry\">Delete entry</string>\n    <string name=\"delete_entry_description\">Are you sure you want to delete this entry?</string>\n    <string name=\"delete_entry_explanation\">This action does not disable 2FA for:\\n<b>%s</b>\\n\\nTo prevent losing access, make sure that you have disabled 2FA or that you have an alternative way to generate codes for this service.</string>\n    <string name=\"delete_entries\">Delete entries</string>\n    <plurals name=\"delete_entries_description\">\n        <item quantity=\"one\">Are you sure you want to delete %d entry?</item>\n        <item quantity=\"other\">Are you sure you want to delete %d entries?</item>\n    </plurals>\n    <string name=\"discard_changes\">Discard changes?</string>\n    <string name=\"discard_changes_description\">Your changes have not been saved</string>\n    <string name=\"saving_profile_error\">Error saving profile</string>\n    <string name=\"saving_assign_icons_error\">Error assigning icons</string>\n    <string name=\"welcome\">Welcome</string>\n    <string name=\"app_description\">Aegis is a free, secure and open source 2FA app</string>\n    <string name=\"setup_completed\">Setup completed</string>\n    <string name=\"setup_completed_description\">Aegis has been set up and is ready to go.</string>\n    <string name=\"vault_not_found\">Vault not found, starting setup…</string>\n    <string name=\"copied\">Copied</string>\n    <string name=\"errors_copied\">Errors copied to the clipboard</string>\n    <string name=\"version_copied\">Version copied to the clipboard</string>\n    <string name=\"error_required_field\">This field is required</string>\n    <string name=\"error_occurred\">An error occurred</string>\n    <string name=\"decryption_error\">An error occurred while trying to unlock the vault</string>\n    <string name=\"decryption_corrupt_error\">An error occurred while trying to unlock the vault. Your vault file might be corrupt.</string>\n    <string name=\"saving_error\">An error occurred while trying to save the vault</string>\n    <string name=\"vault_init_error\">An error occurred while trying to initialize the vault</string>\n    <string name=\"vault_load_error\">An error occurred while trying to load the vault from storage</string>\n    <string name=\"biometric_decrypt_error\">An error occurred while trying to decrypt the vault with biometric authentication. This usually only happens if the security settings of your device were changed. Please unlock the vault with your password and reconfigure biometric authentication in the settings of Aegis.</string>\n    <string name=\"biometric_init_error\">An error occurred while trying to prepare biometric authentication. This usually only happens if the security settings of your device were changed. Please unlock the vault with your password and reconfigure biometric authentication in the settings of Aegis.</string>\n    <string name=\"disable_encryption\">Disable encryption</string>\n    <string name=\"disable_encryption_description\">Are you sure you want to disable encryption? This will cause the vault to be stored in plain text. <b>Automatic backups will also be disabled</b>.</string>\n    <string name=\"enable_encryption_error\">An error occurred while enabling encryption</string>\n    <string name=\"disable_encryption_error\">An error occurred while disabling encryption</string>\n    <string name=\"backup_successful\">The backup was scheduled successfully</string>\n    <string name=\"backup_error\">An error occurred while trying to create a backup</string>\n    <string name=\"backup_status_success\">Most recent backup successful: %s</string>\n    <string name=\"backup_status_failed\">Most recent backup failed: %s</string>\n    <string name=\"backup_status_none\">No backups have been made yet</string>\n    <string name=\"backup_warning_password\">Backups are encrypted using a separate password configured in Security settings</string>\n    <string name=\"documentsui_error\">DocumentsUI appears to be missing from your device. This is an important system component necessary for the selection and creation of documents. If you used a tool to &quot;debloat&quot; your device, you may have accidentally deleted it and will have to reinstall it.</string>\n    <string name=\"icon_pack_import_error\">An error occurred while trying to import an icon pack</string>\n    <string name=\"icon_pack_import_exists_error\">The icon pack you\\'re trying to import already exists. Do you want to overwrite it?</string>\n    <string name=\"icon_pack_delete_error\">An error occurred while trying to delete an icon pack</string>\n    <plurals name=\"icon_pack_info\">\n        <item quantity=\"one\">%d icon</item>\n        <item quantity=\"other\">%d icons</item>\n    </plurals>\n    <string name=\"icon_custom\">Custom</string>\n    <string name=\"permission_denied\">Permission denied</string>\n    <string name=\"andotp_new_format\">New format (v0.6.3 or newer) </string>\n    <string name=\"andotp_old_format\">Old format (v0.6.2 or older) </string>\n    <string name=\"choose_andotp_importer\">Which format does the andOTP backup file have?</string>\n    <string name=\"choose_totpauth_importer\">Is this TOTP Authenticator backup encrypted with a password?</string>\n    <string name=\"choose_application\">Select the application you\\'d like to import from</string>\n    <string name=\"choose_theme\">Select your desired theme</string>\n    <string name=\"choose_account_name_position\">Select your desired account name position</string>\n    <string name=\"choose_view_mode\">Select your desired view mode</string>\n    <string name=\"choose_copy_behavior\">Select your desired copy behavior</string>\n    <string name=\"parsing_file_error\">An error occurred while trying to parse the file</string>\n    <string name=\"file_not_found\">Error: File not found</string>\n    <string name=\"reading_file_error\">An error occurred while trying to read the file</string>\n    <string name=\"app_lookup_error\">Error: App is not installed</string>\n    <string name=\"app_version_error\">The version of %s that\\'s installed is not supported. Recent versions have started encrypting some of the files in the internal storage directory, making Aegis unable to access the information it needs for the import. Attempting to import is likely to result in an error. Would you like to continue anyway?</string>\n    <string name=\"root_error\">Error: Unable to obtain root access</string>\n    <plurals name=\"imported_entries_count\">\n        <item quantity=\"one\">Imported %d entry</item>\n        <item quantity=\"other\">Imported %d entries</item>\n    </plurals>\n    <plurals name=\"entries_shown\">\n        <item quantity=\"one\">Showing %d entry</item>\n        <item quantity=\"other\">Showing %d entries</item>\n    </plurals>\n    <string name=\"intro_import_error_title\">An error occurred while importing the vault</string>\n    <string name=\"import_error_title\">One or more errors occurred during the import</string>\n    <string name=\"exporting_vault_error\">An error occurred while trying to export the vault</string>\n    <string name=\"exported_vault\">The vault has been exported</string>\n    <string name=\"encryption_set_password_error\">An error occurred while trying to set the password.</string>\n    <string name=\"encryption_enable_biometrics_error\">An error occurred while trying to enable biometric unlock. Some devices have poor implementations of biometric authentication and it is likely that yours is one of them. Consider switching to a password-only configuration instead.</string>\n    <string name=\"no_cameras_available\">No cameras available</string>\n    <string name=\"read_qr_error\">An error occurred while trying to read the QR code</string>\n    <string name=\"read_qr_error_phonefactor\">Aegis is not compatible with Microsoft\\'s proprietary 2FA algorithm. Please make sure to select \\\"Setup application without notifications\\\" when configuring 2FA in Office 365.</string>\n    <string name=\"partial_google_auth_import\">Incomplete Google Authenticator export detected</string>\n    <string name=\"partial_google_auth_import_warning\">Some QR codes are missing from your import. The following codes were not found:\\n\\n<b>%s</b>\\n\\nYou may continue importing this partial export but we recommend retrying with all of the QR codes so you don\\'t risk losing access to any tokens.</string>\n    <string name=\"missing_qr_code_descriptor\">• QR code %d</string>\n    <plurals name=\"import_partial_export_anyway\">\n        <item quantity=\"one\">Import %d token anyway</item>\n        <item quantity=\"other\">Import %d tokens anyway</item>\n    </plurals>\n    <string name=\"import_google_auth_failure\">Importing Google Authenticator export failed</string>\n    <string name=\"unrelated_google_auth_batches_error\">Export contains information for an unrelated batch. Try importing 1 batch at a time.</string>\n    <string name=\"no_tokens_can_be_imported\">No tokens can be imported as a result</string>\n    <string name=\"unlocking_vault\">Unlocking the vault</string>\n    <string name=\"rename_group\">Rename Group</string>\n    <string name=\"no_group_selection\">If an entry is not part of any group, it can be found under \\\"No group\\\".</string>\n    <string name=\"remove_group\">Remove group</string>\n    <string name=\"remove_group_description\">Are you sure you want to remove this group? Entries in this group will automatically switch to \\'No group\\'.</string>\n    <string name=\"remove_unused_groups\">Delete unused groups</string>\n    <string name=\"remove_unused_groups_description\">Are you sure you want to delete all groups that are not assigned to an entry?</string>\n    <string name=\"remove_icon_pack\">Remove icon pack</string>\n    <string name=\"remove_icon_pack_description\">Are you sure you want to remove this icon pack? Entries that use icons from this pack will not be affected.</string>\n    <string name=\"details\">Details</string>\n    <string name=\"show_error_details\">Show error details</string>\n    <string name=\"lock\">Lock</string>\n    <string name=\"name\">Name</string>\n    <string name=\"no_group\">No group</string>\n    <string name=\"sort\" comment=\"Title of the Sort button in the top action bar of the main view\">Sort</string>\n    <string name=\"sort_alphabetically\">Issuer (A to Z)</string>\n    <string name=\"sort_alphabetically_reverse\">Issuer (Z to A)</string>\n    <string name=\"sort_alphabetically_name\">Account (A to Z)</string>\n    <string name=\"sort_alphabetically_name_reverse\">Account (Z to A)</string>\n    <string name=\"sort_usage_count\">Usage count</string>\n    <string name=\"sort_last_used\">Last used</string>\n    <string name=\"sort_custom\">Custom</string>\n    <string name=\"last_used\">Last used</string>\n    <string name=\"last_used_never\">never</string>\n    <string name=\"new_group\">New group…</string>\n    <string name=\"group\">Group</string>\n    <string name=\"group_name_hint\">Group name</string>\n    <string name=\"preference_manage_groups\">Edit groups</string>\n    <string name=\"preference_manage_groups_summary\">Manage and delete your groups here</string>\n    <string name=\"preference_reset_usage_count\">Reset usage count</string>\n    <string name=\"preference_reset_usage_count_summary\">Reset the usage count of every entry in your vault</string>\n    <string name=\"preference_reset_usage_count_dialog\">Are you sure you want to set the usage count of every entry in your vault to 0?</string>\n    <string name=\"note\" comment=\"Users can add a note to an entry\">Note</string>\n    <string name=\"clear\">Clear</string>\n\n    <string name=\"dialog_duplicate_entry_title\" comment=\"'Duplicate' is a noun here\">Duplicate entry</string>\n    <string name=\"dialog_duplicate_entry_message\">This entry has the same name and issuer as one or more existing entries. How would you like to proceed?</string>\n    <string name=\"dialog_duplicate_entry_overwrite_title\">Overwrite existing entry/entries</string>\n    <string name=\"dialog_duplicate_entry_overwrite_subtitle\">Replace the existing entry or entries with the new one. This action cannot be undone</string>\n    <string name=\"dialog_duplicate_entry_suffix_title\">Add suffix</string>\n    <string name=\"dialog_duplicate_entry_suffix_subtitle\">Add a suffix to the name of this new entry. The new name will be: %s</string>\n    <string name=\"dialog_duplicate_entry_cancel_title\">Cancel save</string>\n    <string name=\"dialog_duplicate_entry_cancel_subtitle\">Allows you to edit the entry before attempting to save it again</string>\n    <plurals name=\"dialog_duplicate_entry_overwrite_dialog_message\">\n        <item quantity=\"one\">Are you sure you want to delete %d entry with the following name:\\n\\n%s - %s</item>\n        <item quantity=\"other\">Are you sure you want to delete %d entries with the following name:\\n\\n%s - %s</item>\n    </plurals>\n\n    <string name=\"dialog_duplicate_entry_overwrite_dialog_title\">Confirm deletion</string>\n\n    <string name=\"pref_haptic_feedback_summary\">Make your device vibrate when codes are refreshing</string>\n    <string name=\"pref_haptic_feedback_title\">Haptic feedback</string>\n    <string name=\"pref_highlight_entry_title\">Highlight tokens when tapped</string>\n    <string name=\"pref_highlight_entry_summary\">Make tokens easier to distinguish from each other by temporarily highlighting them when tapped</string>\n    <string name=\"pref_groups_multiselect_title\">Multiselect groups</string>\n    <string name=\"pref_groups_multiselect_summary\">Allow the selection of multiple groups at the same time</string>\n    <string name=\"pref_minimize_on_copy_title\">Minimize on copy</string>\n    <string name=\"pref_minimize_on_copy_summary\">Minimize the app after copying a token</string>\n    <string name=\"pref_copy_behavior_title\">Copy tokens to the clipboard</string>\n    <string name=\"pref_search_behavior_title\">Search behavior</string>\n    <string name=\"pref_pause_entry_title\">Freeze tokens when tapped</string>\n    <string name=\"pref_pause_entry_summary\">Pause automatic refresh of tokens by tapping them. Tokens will not update as long as they are focused. Requires \\\"Highlight tokens when tapped\\\" or \\\"Tap to reveal\\\".</string>\n\n    <string name=\"pin_keyboard_description\">Enter your password to enable the PIN keyboard. Note that this only works if your password only consists of numbers</string>\n    <string name=\"pin_keyboard_error\">Error enabling PIN keyboard</string>\n    <string name=\"pin_keyboard_error_description\">It\\'s not possible to set PIN keyboard. Your password must only consists of numbers.</string>\n    <string name=\"pin_keyboard_disabled\">Password changed. The PIN keyboard will no longer be shown.</string>\n    <string name=\"selected\">Selected</string>\n    <string name=\"dark_theme_title\">Dark theme</string>\n    <string name=\"light_theme_title\">Light theme</string>\n    <string name=\"amoled_theme_title\">AMOLED theme</string>\n    <string name=\"system_theme_title\">Set by Battery Saver</string>\n    <string name=\"system_amoled_theme_title\">Set by Battery Saver (AMOLED)</string>\n    <string name=\"normal_viewmode_title\">Normal</string>\n    <string name=\"compact_mode_title\">Compact</string>\n    <string name=\"small_mode_title\">Small</string>\n    <string name=\"tiles_mode_title\">Tiles</string>\n    <string name=\"unknown_issuer\">Unknown issuer</string>\n    <string name=\"unknown_account_name\">Unknown account name</string>\n    <plurals name=\"import_error_dialog\">\n        <item quantity=\"one\">Aegis could not import %d token. This token will be skipped. Press \\'details\\' to see more information about the error.</item>\n        <item quantity=\"other\">Aegis could not import %d tokens. These tokens will be skipped. Press \\'details\\' to see more information about the errors.</item>\n    </plurals>\n    <string name=\"unable_to_process_deeplink\">Unable to process deep link</string>\n    <string name=\"unable_to_read_qrcode_file\">Unable to read and process QR code from file: %s.</string>\n    <string name=\"unable_to_process_shared_text\">Unable to process shared text as OTP</string>\n    <string name=\"unable_to_read_qrcode_files\">Unable to read and process some of the QR codes. Only %1$d/%2$d entries will be imported.</string>\n    <string name=\"unable_to_generate_qrcode\">Unable to generate QR code</string>\n    <string name=\"select_picture\">Select picture</string>\n    <string name=\"select_icon\">Select icon</string>\n    <string name=\"tile_open_vault\" comment=\"label for a quick settings tile that opens the app when tapped\">Open vault</string>\n    <string name=\"tile_open_scanner\" comment=\"label for a quick settings tile that opens the QR code scanner when tapped\">Open scanner</string>\n\n    <string name=\"toggle_checkboxes\">Toggle checkboxes</string>\n    <string name=\"search\">Search</string>\n    <string name=\"channel_name_lock_status\">Lock status</string>\n    <string name=\"channel_description_lock_status\">Aegis can create a persistent notification to notify you when the vault is locked</string>\n    <string name=\"vault_unlocked_state\">Vault is unlocked. Tap here to lock.</string>\n    <string name=\"version\">Version</string>\n    <string name=\"changelog\">Changelog</string>\n    <string name=\"whats_new\">What\\'s new</string>\n    <string name=\"github\" translatable=\"false\">GitHub</string>\n    <string name=\"github_description\">Source code, issues and information</string>\n    <string name=\"license\">License</string>\n    <string name=\"license_description\">Aegis Authenticator is licensed under GPLv3</string>\n    <string name=\"third_party_licenses\">Third-party licenses</string>\n    <string name=\"third_party_licenses_description\">Licenses of the third-party libraries Aegis uses</string>\n    <string name=\"author_alex\" translatable=\"false\">Alexander Bakker</string>\n    <string name=\"country_netherlands\">Netherlands</string>\n    <string name=\"author_michael\" translatable=\"false\">Michael Schättgen</string>\n    <string name=\"email_us\">Write an email</string>\n    <string name=\"visit_website\">Visit our website</string>\n    <string name=\"about_support\">Support</string>\n    <string name=\"support_rate\">Rate</string>\n    <string name=\"support_rate_description\">Support us by leaving a review in the Google Play Store</string>\n    <string name=\"webview_error\">This device doesn\\'t support web view, which is necessary to view the changelog and the license. It is missing a system component.</string>\n    <string name=\"email\">Email</string>\n    <string name=\"time_sync_warning_title\">Automatic time synchronization</string>\n    <string name=\"time_sync_warning_message\">Aegis relies on the system time to be in sync to generate correct codes. A deviation of only a few seconds could result in incorrect codes. It looks like your device is not configured to automatically synchronize the time. Would you like to do so now?</string>\n    <string name=\"time_sync_warning_disable\">Stop warning me. I know what I\\'m doing.</string>\n    <string name=\"google_qr_export_unrelated\">Unrelated QR code found. Try restarting the scanner.</string>\n    <plurals name=\"google_qr_export_scanned\">\n        <item quantity=\"one\">Scanned %1$d/%2$d QR codes</item>\n        <item quantity=\"other\">Scanned %1$d/%2$d QR codes</item>\n    </plurals>\n    <string name=\"google_qr_export_unexpected\">Expected QR code #%1$d, but scanned #%2$d instead</string>\n    <string name=\"backup_error_bar_message\"><b>Vault backup failed recently</b></string>\n    <string\n        name=\"backup_error_dialog_details\"\n        comment=\"The first parameter is the type of backup (e.g. built-in or Android backup). The second parameter is an elapsed time in the style of 'x seconds/minutes/days ago'.\">\n        A recent vault backup attempt using %1$s failed because an error occurred. The backup was attempted %2$s. Please check your backup settings to make sure backups can complete successfully.\n    </string>\n    <string\n        name=\"backup_permission_error_dialog_details\"\n        comment=\"The first parameter is the type of backup (e.g. built-in or Android backup). The second parameter is an elapsed time in the style of 'x seconds/minutes/days ago'.\">\n        A recent vault backup attempt using %1$s failed because Aegis did not have permission to write to the backup destination. The backup was attempted %2$s. This error can occur if you moved/renamed the backup destination or if you recently restored Aegis from a backup. Please reconfigure the backup destination.\n    </string>\n    <string name=\"backup_system_builtin\">Aegis\\' built-in automatic backups</string>\n    <string name=\"backup_system_android\">Android\\'s cloud backup system</string>\n    <string\n        name=\"backup_reminder_bar_message_with_latest\"\n        comment=\"The parameter is an elapsed time in the style of 'x seconds/minutes/days ago'\">\n        Latest backup is outdated (%s)\n    </string>\n    <string name=\"backup_reminder_bar_message\">\n        Changes are not backed up\n    </string>\n    <string name=\"backup_reminder_bar_dialog_title\">Changes are not backed up</string>\n    <string name=\"backup_reminder_bar_dialog_summary\">\n        Recent changes to the vault have not been backed up yet. It\\'s important to take regular backups to prevent losing access to your accounts. Please consider setting up automatic backups in the settings menu.\n    </string>\n    <string name=\"backup_reminder_bar_dialog_accept\">Set up backups</string>\n    <string name=\"backup_plaintext_export_warning\"><b>The vault was recently exported in plain text</b></string>\n    <string name=\"pref_show_plaintext_warning_hint\">Don\\'t show this warning again</string>\n    <string name=\"backup_plaintext_warning_explanation\">This warning is shown because you recently exported an unencrypted copy of the vault. To maintain security of your tokens, we recommend deleting this file once it\\'s no longer needed.</string>\n    <string name=\"switch_camera\">Switch camera</string>\n\n    <string name=\"empty_list\">There are no codes to be shown. Start adding entries by tapping the plus sign in the bottom right corner</string>\n    <string name=\"empty_list_title\">No entries found</string>\n    <string name=\"empty_group_list\">There are no groups to be shown. Add groups in the edit screen of an entry</string>\n    <string name=\"empty_group_list_title\">No groups found</string>\n    <string name=\"no_icon_packs\">No icon packs have been imported yet. Tap the plus sign to import one. Tip: try <a href=\"https://aegis-icons.github.io\">aegis-icons</a>.</string>\n    <string name=\"no_icon_packs_title\">No icon packs</string>\n    <string name=\"pick_icon\">Pick an icon</string>\n    <string name=\"uncategorized\">Uncategorized</string>\n    <string name=\"done\">Done</string>\n    <plurals name=\"qr_count\">\n        <item quantity=\"one\">%d / %d QR code</item>\n        <item quantity=\"other\">%d / %d QR codes</item>\n    </plurals>\n    <string name=\"next\">Next</string>\n    <string name=\"previous\">Previous</string>\n    <string name=\"copy_uri\">Copy URI</string>\n    <string name=\"unable_to_copy_uri_to_clipboard\">Unable to copy URI to clipboard</string>\n    <string name=\"uri_copied_to_clipboard\">URI copied to clipboard</string>\n    <string name=\"transfer_entry_description\">Scan this QR code with the authenticator app you would like to transfer this entry to</string>\n    <string name=\"transfer_entry_brightness\">Tap the QR code to toggle full screen brightness</string>\n    <string name=\"google_auth_compatible_transfer_description\">Scan these QR codes with Aegis or Google Authenticator.\\n\\nDue to limitations of the Google Authenticator app, only TOTP &amp; HOTP tokens that use SHA1 and produce 6-digit codes are included</string>\n\n    <string name=\"password_strength_very_weak\">Very weak</string>\n    <string name=\"password_strength_weak\">Weak</string>\n    <string name=\"password_strength_fair\">Fair</string>\n    <string name=\"password_strength_good\">Good</string>\n    <string name=\"password_strength_strong\">Strong</string>\n    <string name=\"password_strength_unknown\">Password too long for strength analysis</string>\n    <string name=\"pref_pin_keyboard_title\">Use PIN keyboard on lockscreen</string>\n    <string name=\"pref_pin_keyboard_summary\">Enable this if you want to enable the PIN keyboard on the lockscreen. This only works for numeric passwords</string>\n\n    <string name=\"title_activity_preferences\">Settings</string>\n    <string name=\"title_activity_manage_groups\">Manage groups</string>\n    <string name=\"title_activity_transfer\">Transfer entries</string>\n    <string name=\"title_activity_about\">About</string>\n    <string name=\"title_activity_edit_entry\">Edit entry</string>\n    <string name=\"title_activity_scan_qr\">Scan a QR code</string>\n    <string name=\"title_activity_import_entries\">Import entries</string>\n    <string name=\"title_activity_assign_icons\">Assign icons</string>\n    <string name=\"title_activity_licenses\">Third-party licenses</string>\n    <string name=\"dialog_wipe_entries_title\">Wipe entries</string>\n    <string name=\"dialog_wipe_entries_message\">Your vault already contains entries. Do you want to remove these entries before importing this file?\\n\\n<b>In doing so, you will permanently lose access to the existing entries in the vault.</b></string>\n    <string name=\"dialog_wipe_entries_checkbox\">Wipe vault contents</string>\n\n    <string name=\"import_from_clipboard_title\">Import from clipboard</string>\n\n    <string name=\"import_from_clipboard_message\">We found a valid otpauth uri on your clipboard.\\n\\n<b>Name</b>: %1$s\\n<b>Issuer</b>: %2$s\\n\\nDo you want to use it to prefill this entry?</string>\n\n    <string name=\"panic_trigger_ignore_toast\">Aegis received panic trigger but setting is disabled, ignoring</string>\n    <string name=\"pref_panic_trigger_title\">Delete vault on panic trigger</string>\n    <string name=\"pref_panic_trigger_summary\">Delete vault when a panic trigger is received from Ripple</string>\n\n    <string name=\"import_vault\">Import Aegis vault</string>\n    <string name=\"import_vault_hint\">Want to import from a different 2FA app? Complete the setup first and then head over to the settings menu.</string>\n    <plurals name=\"import_duplicate_toast\">\n        <item quantity=\"one\">Unchecked %d potential duplicate. Please review the list of entries.</item>\n        <item quantity=\"other\">Unchecked %d potential duplicates. Please review the list of entries.</item>\n    </plurals>\n    <string name=\"importer_help_2fas\">Supply a 2FAS Authenticator backup file.</string>\n    <string name=\"importer_help_aegis\">Supply an Aegis export/backup file.</string>\n    <string name=\"importer_help_authenticator_plus\">Supply an Authenticator Plus export file obtained through <b>Settings -> Backup &amp; Restore -> Export as Text and HTML</b>.</string>\n    <string name=\"importer_help_authy\">Supply a copy of <b>/data/data/com.authy.authy/shared_prefs/com.authy.storage.tokens.authenticator.xml</b>, located in the internal storage directory of Authy.</string>\n    <string name=\"importer_help_andotp\">Supply an andOTP export/backup file.</string>\n    <string name=\"importer_help_bitwarden\">Supply a Bitwarden export/backup file. Encrypted files are not supported.</string>\n    <string name=\"importer_help_battle_net_authenticator\">Supply a copy of <b>/data/data/com.blizzard.messenger/shared_prefs/com.blizzard.messenger.authenticator_preferences.xml</b>, located in the internal storage directory of Battle.net Authenticator.</string>\n    <string name=\"importer_help_duo\">Supply a copy of <b>/data/data/com.duosecurity.duomobile/files/duokit/accounts.json</b>, located in the internal storage directory of DUO.</string>\n    <string name=\"importer_help_ente_auth\">Supply an Ente Auth export file. Currently only unencrypted files are supported.</string>\n    <string name=\"importer_help_freeotp\">FreeOTP 2: Supply a backup file.\\nFreeOTP 1.x: Supply a copy of <b>/data/data/org.fedorahosted.freeotp/shared_prefs/tokens.xml</b>, located in the internal storage directory of FreeOTP.</string>\n    <string name=\"importer_help_freeotp_plus\">Supply a FreeOTP+ export file.</string>\n    <string name=\"importer_warning_title_freeotp2\">FreeOTP 2 compatibility</string>\n    <string name=\"importer_warning_message_freeotp2\">There are a number of issues in FreeOTP 2 that can result in corrupt backups. Aegis will try to salvage as many entries as possible, but it\\'s possible that some or even all of them fail to import.</string>\n    <string name=\"importer_help_google_authenticator\"><b>Only database files from Google Authenticator v5.10 and prior are supported</b>.\\n\\nSupply a copy of <b>/data/data/com.google.android.apps.authenticator2/databases/databases</b>, located in the internal storage directory of Google Authenticator.</string>\n    <string name=\"importer_help_microsoft_authenticator\">Supply a copy of <b>/data/data/com.azure.authenticator/databases/PhoneFactor</b>, located in the internal storage directory of Microsoft Authenticator.</string>\n    <string name=\"importer_help_plain_text\">Supply a plain text file with a Google Authenticator URI on each line.</string>\n    <string name=\"importer_help_proton_authenticator\">Supply a Proton Authenticator export file (.json) obtained through <b>Settings -> Export</b>.</string>\n    <string name=\"importer_help_steam\"><b>Steam v3.0 and newer are not supported</b>. Supply a copy of <b>/data/data/com.valvesoftware.android.steam.community/files/Steamguard-*.json</b>, located in the internal storage directory of Steam.</string>\n    <string name=\"importer_help_stratum\">Supply a Stratum export file obtained through <b>Settings -> Back up -> Back up to encrypted file (recommended)</b>.</string>\n    <string name=\"importer_help_totp_authenticator\">Supply a TOTP Authenticator export file.</string>\n    <string name=\"importer_help_winauth\">Supply a WinAuth export file.</string>\n    <string name=\"import_assign_icons_dialog_title\">Assign icons</string>\n    <string name=\"import_assign_icons_dialog_text\">Do you want to assign icons to the imported entries?</string>\n\n    <string name=\"importer_encrypted_exception_google_authenticator\">Encrypted entry was skipped: %s</string>\n\n    <string name=\"importer_help_direct\">Import entries directly from %s. This requires the app to be installed on this device and for root access to be granted to Aegis.</string>\n    <string name=\"groups\">Groups</string>\n    <string name=\"pref_focus_search\">Focus search on app start</string>\n    <string name=\"pref_focus_search_summary\">Focus the search immediately after opening the app.</string>\n\n    <string name=\"pref_grouping_halves\">Halves</string>\n    <string name=\"pref_grouping_none\">No grouping</string>\n    <string name=\"pref_grouping_size_two\">Groups of 2</string>\n    <string name=\"pref_grouping_size_three\">Groups of 3</string>\n    <string name=\"pref_grouping_size_four\">Groups of 4</string>\n\n    <string name=\"pref_copy_behavior_never\">Never</string>\n    <string name=\"pref_copy_behavior_single_tap\">Single tap</string>\n    <string name=\"pref_copy_behavior_double_tap\">Double tap</string>\n\n    <string name=\"pref_account_name_position_hidden\">Hidden</string>\n    <string name=\"pref_account_name_position_end\">Next to the issuer</string>\n    <string name=\"pref_account_name_position_below\">Below the issuer</string>\n\n    <plurals name=\"time_elapsed_seconds\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"one\">%d second ago</item>\n        <item quantity=\"other\">%d seconds ago</item>\n    </plurals>\n    <plurals name=\"time_elapsed_minutes\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"one\">%d minute ago</item>\n        <item quantity=\"other\">%d minutes ago</item>\n    </plurals>\n    <plurals name=\"time_elapsed_hours\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"one\">%d hour ago</item>\n        <item quantity=\"other\">%d hours ago</item>\n    </plurals>\n    <plurals name=\"time_elapsed_days\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"one\">%d day ago</item>\n        <item quantity=\"other\">%d days ago</item>\n    </plurals>\n    <plurals name=\"time_elapsed_years\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"one\">%d year ago</item>\n        <item quantity=\"other\">%d years ago</item>\n    </plurals>\n\n    <plurals name=\"dropdown_checkboxes_default_count\">\n        <item quantity=\"one\">%d item selected</item>\n        <item quantity=\"other\">%d items selected</item>\n    </plurals>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values/themes.xml",
    "content": "<resources>\n    <style name=\"Theme.Aegis.Launch\" parent=\"Theme.Material3.DayNight.NoActionBar\">\n        <!-- colorPrimary in the root theme sets the task description color (seen in task switcher) -->\n        <item name=\"colorPrimary\">@color/md_theme_light_primary</item>\n        <item name=\"android:windowDrawsSystemBarBackgrounds\">true</item>\n        <item name=\"android:statusBarColor\">@android:color/transparent</item>\n    </style>\n\n    <style name=\"Base.Theme.Aegis.Light\" parent=\"Theme.Material3.Light\">\n        <!-- Material colors -->\n        <item name=\"colorPrimary\">@color/md_theme_light_primary</item>\n        <item name=\"colorOnPrimary\">@color/md_theme_light_onPrimary</item>\n        <item name=\"colorPrimaryContainer\">@color/md_theme_light_primaryContainer</item>\n        <item name=\"colorOnPrimaryContainer\">@color/md_theme_light_onPrimaryContainer</item>\n        <item name=\"colorPrimaryFixed\">@color/md_theme_light_primaryFixed</item>\n        <item name=\"colorOnPrimaryFixed\">@color/md_theme_light_onPrimaryFixed</item>\n        <item name=\"colorPrimaryFixedDim\">@color/md_theme_light_primaryFixedDim</item>\n        <item name=\"colorOnPrimaryFixedVariant\">@color/md_theme_light_onPrimaryFixedVariant</item>\n        <item name=\"colorSecondary\">@color/md_theme_light_secondary</item>\n        <item name=\"colorOnSecondary\">@color/md_theme_light_onSecondary</item>\n        <item name=\"colorSecondaryContainer\">@color/md_theme_light_secondaryContainer</item>\n        <item name=\"colorOnSecondaryContainer\">@color/md_theme_light_onSecondaryContainer</item>\n        <item name=\"colorSecondaryFixed\">@color/md_theme_light_secondaryFixed</item>\n        <item name=\"colorOnSecondaryFixed\">@color/md_theme_light_onSecondaryFixed</item>\n        <item name=\"colorSecondaryFixedDim\">@color/md_theme_light_secondaryFixedDim</item>\n        <item name=\"colorOnSecondaryFixedVariant\">@color/md_theme_light_onSecondaryFixedVariant</item>\n        <item name=\"colorTertiary\">@color/md_theme_light_tertiary</item>\n        <item name=\"colorOnTertiary\">@color/md_theme_light_onTertiary</item>\n        <item name=\"colorTertiaryContainer\">@color/md_theme_light_tertiaryContainer</item>\n        <item name=\"colorOnTertiaryContainer\">@color/md_theme_light_onTertiaryContainer</item>\n        <item name=\"colorTertiaryFixed\">@color/md_theme_light_tertiaryFixed</item>\n        <item name=\"colorOnTertiaryFixed\">@color/md_theme_light_onTertiaryFixed</item>\n        <item name=\"colorTertiaryFixedDim\">@color/md_theme_light_tertiaryFixedDim</item>\n        <item name=\"colorOnTertiaryFixedVariant\">@color/md_theme_light_onTertiaryFixedVariant</item>\n        <item name=\"colorError\">@color/md_theme_light_error</item>\n        <item name=\"colorErrorContainer\">@color/md_theme_light_errorContainer</item>\n        <item name=\"colorOnError\">@color/md_theme_light_onError</item>\n        <item name=\"colorOnErrorContainer\">@color/md_theme_light_onErrorContainer</item>\n        <item name=\"android:colorBackground\">@color/md_theme_light_background</item>\n        <item name=\"colorOnBackground\">@color/md_theme_light_onBackground</item>\n        <item name=\"colorOutline\">@color/md_theme_light_outline</item>\n        <item name=\"colorOnSurfaceInverse\">@color/md_theme_light_inverseOnSurface</item>\n        <item name=\"colorSurfaceInverse\">@color/md_theme_light_inverseSurface</item>\n        <item name=\"colorPrimaryInverse\">@color/md_theme_light_inversePrimary</item>\n        <item name=\"colorOutlineVariant\">@color/md_theme_light_outlineVariant</item>\n        <item name=\"colorSurface\">@color/md_theme_light_surface</item>\n        <item name=\"colorOnSurface\">@color/md_theme_light_onSurface</item>\n        <item name=\"colorSurfaceVariant\">@color/md_theme_light_surfaceVariant</item>\n        <item name=\"colorOnSurfaceVariant\">@color/md_theme_light_onSurfaceVariant</item>\n        <item name=\"colorSurfaceContainerHighest\">@color/md_theme_light_surfaceContainerHighest</item>\n        <item name=\"colorSurfaceContainerHigh\">@color/md_theme_light_surfaceContainerHigh</item>\n        <item name=\"colorSurfaceContainer\">@color/md_theme_light_surfaceContainer</item>\n        <item name=\"colorSurfaceContainerLow\">@color/md_theme_light_surfaceContainerLow</item>\n        <item name=\"colorSurfaceContainerLowest\">@color/md_theme_light_surfaceContainerLowest</item>\n        <item name=\"colorSurfaceDim\">@color/md_theme_light_surfaceDim</item>\n        <item name=\"colorSurfaceBright\">@color/md_theme_light_surfaceBright</item>\n        <!-- Custom colors -->\n        <item name=\"colorFavorite\">@color/aegis_theme_all_favorite</item>\n        <item name=\"colorPrimaryAlternative\">?attr/colorPrimary</item>\n        <item name=\"colorProgressbar\">?attr/colorPrimaryAlternative</item>\n        <item name=\"colorOnDark\">@android:color/white</item>\n        <item name=\"colorSuccess\">@color/aegis_theme_light_success</item>\n        <item name=\"colorOnSurfaceDim\">@color/aegis_theme_light_onSurfaceDim</item>\n        <item name=\"colorCode\">?attr/colorPrimary</item>\n        <item name=\"colorCodeHidden\">?attr/colorOutlineVariant</item>\n        <!-- Intro colors -->\n        <item name=\"dot_color\">?attr/colorSurfaceVariant</item>\n        <item name=\"dot_color_selected\">?attr/colorOnSurfaceVariant</item>\n        <!-- Styles -->\n        <item name=\"dropdownStyle\">@style/Widget.Aegis.Dropdown</item>\n        <item name=\"preferenceTheme\">@style/ThemeOverlay.Aegis.Preference</item>\n        <item name=\"actionModeTheme\">@style/ThemeOverlay.Aegis.ActionMode</item>\n        <item name=\"materialAlertDialogTheme\">@style/ThemeOverlay.Aegis.AlertDialog</item>\n        <!-- Settings -->\n        <item name=\"windowActionModeOverlay\">true</item>\n        <item name=\"windowActionBar\">false</item>\n        <item name=\"windowNoTitle\">true</item>\n    </style>\n\n    <style name=\"Base.Theme.Aegis.Dark\" parent=\"Theme.Material3.Dark\">\n        <!-- Material colors -->\n        <item name=\"colorPrimary\">@color/md_theme_dark_primary</item>\n        <item name=\"colorOnPrimary\">@color/md_theme_dark_onPrimary</item>\n        <item name=\"colorPrimaryContainer\">@color/md_theme_dark_primaryContainer</item>\n        <item name=\"colorOnPrimaryContainer\">@color/md_theme_dark_onPrimaryContainer</item>\n        <item name=\"colorPrimaryFixed\">@color/md_theme_dark_primaryFixed</item>\n        <item name=\"colorOnPrimaryFixed\">@color/md_theme_dark_onPrimaryFixed</item>\n        <item name=\"colorPrimaryFixedDim\">@color/md_theme_dark_primaryFixedDim</item>\n        <item name=\"colorOnPrimaryFixedVariant\">@color/md_theme_dark_onPrimaryFixedVariant</item>\n        <item name=\"colorSecondary\">@color/md_theme_dark_secondary</item>\n        <item name=\"colorOnSecondary\">@color/md_theme_dark_onSecondary</item>\n        <item name=\"colorSecondaryContainer\">@color/md_theme_dark_secondaryContainer</item>\n        <item name=\"colorOnSecondaryContainer\">@color/md_theme_dark_onSecondaryContainer</item>\n        <item name=\"colorSecondaryFixed\">@color/md_theme_dark_secondaryFixed</item>\n        <item name=\"colorOnSecondaryFixed\">@color/md_theme_dark_onSecondaryFixed</item>\n        <item name=\"colorSecondaryFixedDim\">@color/md_theme_dark_secondaryFixedDim</item>\n        <item name=\"colorOnSecondaryFixedVariant\">@color/md_theme_dark_onSecondaryFixedVariant</item>\n        <item name=\"colorTertiary\">@color/md_theme_dark_tertiary</item>\n        <item name=\"colorOnTertiary\">@color/md_theme_dark_onTertiary</item>\n        <item name=\"colorTertiaryContainer\">@color/md_theme_dark_tertiaryContainer</item>\n        <item name=\"colorOnTertiaryContainer\">@color/md_theme_dark_onTertiaryContainer</item>\n        <item name=\"colorTertiaryFixed\">@color/md_theme_dark_tertiaryFixed</item>\n        <item name=\"colorOnTertiaryFixed\">@color/md_theme_dark_onTertiaryFixed</item>\n        <item name=\"colorTertiaryFixedDim\">@color/md_theme_dark_tertiaryFixedDim</item>\n        <item name=\"colorOnTertiaryFixedVariant\">@color/md_theme_dark_onTertiaryFixedVariant</item>\n        <item name=\"colorError\">@color/md_theme_dark_error</item>\n        <item name=\"colorErrorContainer\">@color/md_theme_dark_errorContainer</item>\n        <item name=\"colorOnError\">@color/md_theme_dark_onError</item>\n        <item name=\"colorOnErrorContainer\">@color/md_theme_dark_onErrorContainer</item>\n        <item name=\"android:colorBackground\">@color/md_theme_dark_background</item>\n        <item name=\"colorOnBackground\">@color/md_theme_dark_onBackground</item>\n        <item name=\"colorOutline\">@color/md_theme_dark_outline</item>\n        <item name=\"colorOnSurfaceInverse\">@color/md_theme_dark_inverseOnSurface</item>\n        <item name=\"colorSurfaceInverse\">@color/md_theme_dark_inverseSurface</item>\n        <item name=\"colorPrimaryInverse\">@color/md_theme_dark_inversePrimary</item>\n        <item name=\"colorOutlineVariant\">@color/md_theme_dark_outlineVariant</item>\n        <item name=\"colorSurface\">@color/md_theme_dark_surface</item>\n        <item name=\"colorOnSurface\">@color/md_theme_dark_onSurface</item>\n        <item name=\"colorSurfaceVariant\">@color/md_theme_dark_surfaceVariant</item>\n        <item name=\"colorOnSurfaceVariant\">@color/md_theme_dark_onSurfaceVariant</item>\n        <item name=\"colorSurfaceContainerHighest\">@color/md_theme_dark_surfaceContainerHighest</item>\n        <item name=\"colorSurfaceContainerHigh\">@color/md_theme_dark_surfaceContainerHigh</item>\n        <item name=\"colorSurfaceContainer\">@color/md_theme_dark_surfaceContainer</item>\n        <item name=\"colorSurfaceContainerLow\">@color/md_theme_dark_surfaceContainerLow</item>\n        <item name=\"colorSurfaceContainerLowest\">@color/md_theme_dark_surfaceContainerLowest</item>\n        <item name=\"colorSurfaceDim\">@color/md_theme_dark_surfaceDim</item>\n        <item name=\"colorSurfaceBright\">@color/md_theme_dark_surfaceBright</item>\n        <!-- Custom colors -->\n        <item name=\"colorFavorite\">@color/aegis_theme_all_favorite</item>\n        <item name=\"colorPrimaryAlternative\">?attr/colorPrimaryInverse</item>\n        <item name=\"colorProgressbar\">?attr/colorPrimaryAlternative</item>\n        <item name=\"colorOnDark\">@android:color/white</item>\n        <item name=\"colorSuccess\">@color/aegis_theme_dark_success</item>\n        <item name=\"colorOnSurfaceDim\">@color/aegis_theme_dark_onSurfaceDim</item>\n        <item name=\"colorCode\">?attr/colorPrimary</item>\n        <item name=\"colorCodeHidden\">?attr/colorOutlineVariant</item>\n        <!-- Intro colors -->\n        <item name=\"dot_color\">?attr/colorSurfaceVariant</item>\n        <item name=\"dot_color_selected\">?attr/colorOnSurfaceVariant</item>\n        <!-- Styles -->\n        <item name=\"dropdownStyle\">@style/Widget.Aegis.Dropdown</item>\n        <item name=\"preferenceTheme\">@style/ThemeOverlay.Aegis.Preference</item>\n        <item name=\"actionModeTheme\">@style/ThemeOverlay.Aegis.ActionMode</item>\n        <item name=\"materialAlertDialogTheme\">@style/ThemeOverlay.Aegis.AlertDialog</item>\n        <!-- Settings -->\n        <item name=\"windowActionModeOverlay\">true</item>\n        <item name=\"windowActionBar\">false</item>\n        <item name=\"windowNoTitle\">true</item>\n    </style>\n\n    <style name=\"Base.Theme.Aegis.Amoled\" parent=\"Base.Theme.Aegis.Dark\">\n        <!-- Setting android:colorBackground to #000000 on API 28 and below causes smearing -->\n        <item name=\"android:colorBackground\">@android:color/black</item>\n        <item name=\"colorSurface\">#000000</item>\n        <item name=\"colorSurfaceVariant\">#000000</item>\n        <item name=\"colorSurfaceContainerHighest\">#000000</item>\n        <item name=\"colorSurfaceContainerHigh\">#000000</item>\n        <item name=\"colorSurfaceContainer\">#000000</item>\n        <item name=\"colorSurfaceContainerLow\">#000000</item>\n        <item name=\"colorSurfaceContainerLowest\">#000000</item>\n        <item name=\"colorSurfaceDim\">#000000</item>\n        <item name=\"colorSurfaceBright\">#000000</item>\n        <item name=\"colorCode\">@android:color/white</item>\n        <item name=\"colorCodeHidden\">#2F2F2F</item>\n        <item name=\"colorProgressbar\">@android:color/white</item>\n    </style>\n\n    <style name=\"ThemeOverlay.Aegis.Dynamic.Dark\" parent=\"ThemeOverlay.Material3.DynamicColors.Dark\">\n        <item name=\"colorProgressbar\">?attr/colorCode</item>\n    </style>\n\n    <style name=\"ThemeOverlay.Aegis.Dynamic.Amoled\" parent=\"ThemeOverlay.Material3.DynamicColors.Dark\">\n        <!-- Setting android:colorBackground to #000000 on API 28 and below causes smearing -->\n        <item name=\"android:colorBackground\">@android:color/black</item>\n        <item name=\"colorSurface\">#000000</item>\n        <item name=\"colorSurfaceVariant\">#000000</item>\n        <item name=\"colorSurfaceContainerHighest\">#000000</item>\n        <item name=\"colorSurfaceContainerHigh\">#000000</item>\n        <item name=\"colorSurfaceContainer\">#000000</item>\n        <item name=\"colorSurfaceContainerLow\">#000000</item>\n        <item name=\"colorSurfaceContainerLowest\">#000000</item>\n        <item name=\"colorSurfaceDim\">#000000</item>\n        <item name=\"colorSurfaceBright\">#000000</item>\n        <item name=\"colorCode\">@android:color/white</item>\n        <item name=\"colorCodeHidden\">#2F2F2F</item>\n        <item name=\"colorProgressbar\">@android:color/white</item>\n    </style>\n\n    <style name=\"Theme.Aegis.Light\" parent=\"Base.Theme.Aegis.Light\">\n        <item name=\"android:statusBarColor\">@android:color/transparent</item>\n        <item name=\"android:windowLightStatusBar\">true</item>\n    </style>\n\n    <style name=\"Theme.Aegis.Dark\" parent=\"Base.Theme.Aegis.Dark\">\n        <item name=\"android:navigationBarColor\">@android:color/transparent</item>\n        <item name=\"android:statusBarColor\">@android:color/transparent</item>\n        <item name=\"android:windowLightStatusBar\">false</item>\n    </style>\n\n    <style name=\"Theme.Aegis.Amoled\" parent=\"Base.Theme.Aegis.Amoled\">\n        <item name=\"android:navigationBarColor\">@android:color/transparent</item>\n        <item name=\"android:statusBarColor\">@android:color/transparent</item>\n        <item name=\"android:windowLightStatusBar\">false</item>\n    </style>\n\n    <style name=\"Widget.Aegis.Dropdown\" parent=\"Widget.Material3.TextInputLayout.OutlinedBox.ExposedDropdownMenu\" />\n\n    <style name=\"ThemeOverlay.Aegis.Preference\" parent=\"@style/PreferenceThemeOverlay\">\n        <item name=\"android:tint\">?attr/colorOnSurface</item>\n        <item name=\"switchPreferenceCompatStyle\">@style/Preference.Aegis.SwitchPreference</item>\n    </style>\n\n    <style name=\"Preference.Aegis.SwitchPreference\" parent=\"@style/Preference.SwitchPreferenceCompat.Material\">\n        <item name=\"widgetLayout\">@layout/view_preference_switch</item>\n    </style>\n\n    <style name=\"Widget.Aegis.EntryCardView\" parent=\"Widget.Material3.CardView.Elevated\">\n        <item name=\"materialThemeOverlay\">@style/ThemeOverlay.Aegis.EntryCardView</item>\n    </style>\n\n    <style name=\"Widget.Aegis.CompactEntryCardView\" parent=\"Widget.Material3.CardView.Elevated\">\n        <item name=\"materialThemeOverlay\">@style/ThemeOverlay.Aegis.CompactEntryCardView</item>\n    </style>\n\n    <style name=\"ThemeOverlay.Aegis.EntryCardView\" parent=\"\">\n        <item name=\"colorSurfaceContainerLow\">?attr/colorSurfaceContainer</item>\n    </style>\n\n    <style name=\"ThemeOverlay.Aegis.CompactEntryCardView\" parent=\"\">\n        <item name=\"colorSurfaceContainerLow\">?attr/colorSurface</item>\n    </style>\n\n    <style name=\"Widget.Aegis.ErrorCardView\" parent=\"Widget.Material3.CardView.Filled\">\n        <item name=\"materialThemeOverlay\">@style/ThemeOverlay.Aegis.ErrorCardView</item>\n    </style>\n\n    <style name=\"ThemeOverlay.Aegis.ErrorCardView\" parent=\"\">\n        <item name=\"colorSurfaceContainerHighest\">?attr/colorErrorContainer</item>\n    </style>\n\n    <style name=\"ThemeOverlay.Aegis.ActionMode\" parent=\"\">\n        <!-- Magically give the action mode icons the right color -->\n        <item name=\"actionButtonStyle\">@style/Widget.AppCompat.ActionButton</item>\n        <!-- The hack below is necessary to force the action mode overflow menu to the right color -->\n        <item name=\"actionBarPopupTheme\">@style/Widget.Material3.PopupMenu.ContextMenu</item>\n    </style>\n\n    <style name=\"ThemeOverlay.Aegis.AlertDialog\" parent=\"ThemeOverlay.Material3.MaterialAlertDialog.Centered\">\n\n    </style>\n\n    <style name=\"ThemeOverlay.Aegis.AlertDialog.Error\">\n        <item name=\"android:alertDialogIcon\">@drawable/ic_outline_error_24</item>\n        <item name=\"materialAlertDialogTitleIconStyle\">@style/Widget.Aegis.AlertDialog.Icon.Error</item>\n    </style>\n\n    <style name=\"ThemeOverlay.Aegis.AlertDialog.Warning\">\n        <item name=\"android:alertDialogIcon\">@drawable/ic_outline_warning_24</item>\n        <item name=\"materialAlertDialogTitleIconStyle\">@style/Widget.Aegis.AlertDialog.Icon.Warning</item>\n    </style>\n\n    <style name=\"Widget.Aegis.AlertDialog.Icon.Error\" parent=\"@style/MaterialAlertDialog.Material3.Title.Icon.CenterStacked\">\n        <item name=\"android:tint\">?attr/colorError</item>\n    </style>\n\n    <style name=\"Widget.Aegis.AlertDialog.Icon.Warning\" parent=\"@style/MaterialAlertDialog.Material3.Title.Icon.CenterStacked\">\n        <item name=\"android:tint\">?attr/colorError</item>\n    </style>\n\n    <style name=\"ShapeAppearanceOverlay.Aegis.ImageView.Rounded\" parent=\"\">\n        <item name=\"cornerFamily\">rounded</item>\n        <item name=\"cornerSize\">8dp</item>\n    </style>\n\n    <style name=\"ShapeAppearanceOverlay.Aegis.ImageView.Circle\" parent=\"\">\n        <item name=\"cornerFamily\">rounded</item>\n        <item name=\"cornerSize\">50%</item>\n    </style>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-ar-rSA/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources xmlns:tools=\"http://schemas.android.com/tools\">\n    <string name=\"action_settings\">الإعدادات</string>\n    <string name=\"action_about\">عنّا</string>\n    <string name=\"action_delete\">احذف</string>\n    <string name=\"action_transfer\">انقل</string>\n    <string name=\"action_edit_icon\">حرّر الأيقونة</string>\n    <string name=\"action_reset_usage_count\">صفّر عداد الاستخدام</string>\n    <string name=\"action_reset_usage_count_dialog\">هل أنت متأكد من رغبتك في تعيين عدد الاستخدام لهذا الإدخال إلى 0؟</string>\n    <string name=\"action_default_icon\">استعد الأيقونة الافتراضية</string>\n    <string name=\"discard\">تجاهل</string>\n    <string name=\"save\">احفظ</string>\n    <string name=\"all\">الكل</string>\n    <string name=\"issuer\">المصدِّر</string>\n    <string name=\"yandex_pin\">رمز PIN (يتكون من 4-16 رقمًا)</string>\n    <string name=\"motp_pin\">رمز PIN (4 أرقام)</string>\n    <string name=\"suggested\">مقترح</string>\n    <string name=\"usage_count\">عدد مرات الاستخدام</string>\n    <string name=\"warning\">تحذير</string>\n    <string name=\"pref_cat_appearance_app\">تطبيق</string>\n    <string name=\"pref_cat_appearance_entries\">عناصر</string>\n    <string name=\"pref_cat_backups_android\">أندرويد</string>\n    <string name=\"pref_cat_backups_auto\">نسخ أحتياطي تلقائي</string>\n    <string name=\"pref_section_behavior_title\">السلوك</string>\n    <string name=\"pref_section_behavior_summary\">خصِص السلوك عند التفاعل مع قائمة الإدخالات.</string>\n    <string name=\"pref_section_appearance_title\">المظهر</string>\n    <string name=\"pref_section_appearance_summary\">اضبط السِمة واللغة والإعدادات الأخرى التي تؤثر على مظهر التطبيق.</string>\n    <string name=\"pref_section_security_title\">الحماية</string>\n    <string name=\"pref_section_security_summary\">اضبط التعمية، وفك القفل المقاييس الحيوية، والقفل التلقائي وإعدادات الأمان الأخرى.</string>\n    <string name=\"pref_section_import_export_title\">الاستيراد والتصدير</string>\n    <string name=\"pref_section_import_export_summary\">استورد النسخ الاحتياطية من Aegis أو من تطبيقات استيثاق أخرى. أنشئ تصدير يدوي لمخزن Aegis.</string>\n    <string name=\"pref_section_audit_log_title\">سجل المراجعة</string>\n    <string name=\"pref_section_audit_log_summary\">العثور على قائمة بجميع الأحداث الهامة المبلغ عنها التي حدثت داخل التطبيق.</string>\n    <string name=\"pref_section_backups_title\">نُسخ احتياطية</string>\n    <string name=\"pref_section_backups_summary\">أنشئ نسخ احتياطية تلقائية إلى موقع من اختيارك أو فَعِّل المشاركة في نظام النسخ الاحتياطي السحابي للأندرويد.</string>\n    <string name=\"pref_section_icon_packs\">حزم الأيقونات</string>\n    <string name=\"pref_section_icon_packs_summary\">أدِر واستورد حزم الأيقونات</string>\n    <string name=\"pref_select_theme_title\">السمة</string>\n    <string name=\"pref_dynamic_colors_title\">ألوان ديناميكية</string>\n    <string name=\"pref_dynamic_colors_summary\">قم بتطبيق تراكب يعتمد على ألوان سمة الأندرويد الخاصة بك</string>\n    <string name=\"pref_view_mode_title\">نمط العرض</string>\n    <string name=\"pref_lang_title\">اللغة</string>\n    <string name=\"pref_show_icons_title\">أظهر الأيقونات</string>\n    <string name=\"pref_show_icons_summary\">اعرض الأيقونات بجانب كل مدخل</string>\n    <string name=\"pref_code_group_size_title\">تجميع أرقام الرمز</string>\n    <string name=\"pref_code_group_size_summary\">حدّد عدد الأرقام لتجميع الرموز حسبها</string>\n    <string name=\"pref_account_name_position_title\">أظهر اسم الحساب</string>\n    <string name=\"pref_show_next_code_title\">أظهر الرمز التالي</string>\n    <string name=\"pref_show_next_code_summary\">ولّد وأظهر الرمز التالي قبل الوقت</string>\n    <string name=\"pref_expiration_state_title\">أشر متى تكون الرموز على وشك الانتهاء</string>\n    <string name=\"pref_expiration_state_summary\">غيّر لون الرموز البرمجية وجعلها غير واضحة عندما تكون على وشك الانتهاء</string>\n    <string name=\"pref_expiration_state_fallback\">غيّر لون الرموز عندما تكون على وشك الانتهاء</string>\n    <string name=\"pref_shared_issuer_account_name_title\">أظهر اسم الحساب فقط عند الضرورة</string>\n    <string name=\"pref_shared_issuer_account_name_summary\">أظهر أسماء الحسابات فقط عندما يشتركون نفس المصدر. سيتم إخفاء أسماء الحسابات الأخرى.</string>\n    <string name=\"pref_account_name_position_summary_override\">تم تجاوز هذا الإعداد بوضع عرض المربعات. سيتم عرض اسم الحساب أسفل المُصدّر.</string>\n    <string name=\"pref_import_file_title\">استورد من ملف</string>\n    <string name=\"pref_import_file_summary\">استورد الرموز من ملف</string>\n    <string name=\"pref_android_backups_title\">النُسخ الاحتياطية السحابية للأندرويد</string>\n    <string name=\"pref_android_backups_summary\">اسمح لنظام النسخ الاحتياطي لأندرويد بإدراج خزانة Aegis في النُسخ الاحتياطية الخاصة به. هذا مدعوم فقط للمخازن المُعمَّاة.</string>\n    <string name=\"pref_android_backups_hint\"><i>النسخ الاحتياطي من جهاز لجهاز (D2D) مسموح به دائماً، بغض النظر عن الخَيار أعلاه</i></string>\n    <string name=\"pref_backups_title\">انسخ تلقائيًا الخزينة</string>\n    <string name=\"pref_backups_summary\">أنشئ تلقائيًا نُسخ احتياطية للمخزن على الذاكرة الخارجية عند إجراء تغييرات هذا مدعوم للمخازن المُعمَّاة فقط.</string>\n    <string name=\"pref_backups_reminder_title\">تذكير النسخ الاحتياطي</string>\n    <string name=\"pref_backups_reminder_summary\">أظهر تذكيرًا للاحتفاظ بنسخة احتياطية من مخزنك في حالة عدم إجراء نسخ احتياطي لآخر تغييراتك.</string>\n    <string name=\"pref_backups_reminder_dialog_title\">عطِّل تذكير النسخ الاحتياطي</string>\n    <string name=\"pref_backups_reminder_dialog_summary\">يعني تعطيل هذا التذكير أن Aegis لن يخبرك بما إذا كان لديك تغييرات لم يتم نسخها احتياطيًا حتى الآن أم لا. هذا يعرضك لخطر فقدان الوصول إلى رموزك. هل أنت متأكد أنك تريد تعطيل التذكير؟</string>\n    <string name=\"pref_backups_versioning_strategy_title\">استراتيجية النسخ الاحتياطي</string>\n    <string name=\"pref_backups_versioning_strategy_keep_x_versions\">احتفظ بعدد من الإصدارات</string>\n    <string name=\"pref_backups_versioning_strategy_single_backup\">نُسخة احتياطية واحدة</string>\n    <string name=\"pref_backups_versioning_strategy_single_backup_warning\">استراتيجية النسخ الاحتياطي المحددة غير موثوقة ولا يُنصح بها. فشل احتياطي واحد يمكن أن يؤدي إلى فقدان النسخة الاحتياطية الوحيدة.</string>\n    <string name=\"pref_backups_versioning_strategy_dialog_title\">حدّد استراتيجية النسخ الاحتياطي</string>\n    <string name=\"pref_backups_location_title\">موقع النسخة الاحتياطية</string>\n    <string name=\"pref_backups_location_summary\">سيتم تخزين النُسخ الاحتياطية في</string>\n    <string name=\"pref_backup_location_summary\">سيتم تخزين النسخ الاحتياطي في</string>\n    <string name=\"pref_backups_trigger_title\">اصنع نسخة احتياطية</string>\n    <string name=\"pref_backups_trigger_summary\">اصنع نسخة احتياطية يدويًّا</string>\n    <string name=\"pref_backups_versions_title\">عدد الإصدارات المراد الاحتفاظ بها</string>\n    <string name=\"pref_backups_versions_infinite\">\\u221E</string>\n    <plurals name=\"pref_backups_versions_summary\">\n        <item quantity=\"zero\">احتفظ ب%1$d إصدارات من النسخ الاحتياطية</item>\n        <item quantity=\"one\">احتفظ بإصدار واحد من النسخ الاحتياطية</item>\n        <item quantity=\"two\">احتفظ بإصدارين من النسخ الاحتياطية</item>\n        <item quantity=\"few\">احتفظ ب%1$d إصدارات من النسخ الاحتياطية</item>\n        <item quantity=\"many\">احتفظ ب%1$d إصدارات من النسخ الاحتياطية</item>\n        <item quantity=\"other\">احتفظ ب%1$d إصدارات من النسخ الاحتياطية</item>\n    </plurals>\n    <string name=\"pref_backups_versions_infinite_summary\">احتفظ بعدد غير محدود من النُسخ الاحتياطية</string>\n    <string name=\"pref_import_app_title\">استورد من تطبيق</string>\n    <string name=\"pref_import_app_summary\">استورد رموزك من تطبيق (يتطلب الوصول إلى الجذر root)</string>\n    <string name=\"pref_export_title\">صدِّر</string>\n    <string name=\"pref_export_summary\">صدِّر المخزن</string>\n    <string name=\"pref_password_reminder_title\">تذكر كلمة السر</string>\n    <string name=\"pref_google_auth_export_title\">صدِّر إلى Google Authenticator</string>\n    <string name=\"pref_google_auth_export_descriptor\">يولّد تصدير رموز QR متوافقة مع Google Authenticator</string>\n    <string name=\"pref_google_auth_export_no_data\">لا توجد بيانات للتصدير</string>\n    <plurals name=\"pref_google_auth_export_incompatible_entries\">\n        <item quantity=\"zero\">تم تجاوز %d مدخل غير متوافق</item>\n        <item quantity=\"one\">تم تجاوز %d مدخل غير متوافق</item>\n        <item quantity=\"two\">تم تجاوز %d مدخلات غير متوافقة</item>\n        <item quantity=\"few\">تم تجاوز %d مدخلات غير متوافقة</item>\n        <item quantity=\"many\">تم تجاوز %d مدخل غير متوافق</item>\n        <item quantity=\"other\">تم تجاوز %d مدخل غير متوافق</item>\n    </plurals>\n    <string name=\"pref_password_reminder_summary\">أظهر %s تذكيرًا لإدخال كلمة السر، حتى لا تنساها.</string>\n    <string name=\"pref_password_reminder_summary_disabled\">معطَّل</string>\n    <string name=\"pref_secure_screen_title\">أمان الشاشة</string>\n    <string name=\"pref_secure_screen_summary\">احظر لقطات الشاشة والمحاولات الأخرى لالتقاط شاشة التطبيق</string>\n    <string name=\"pref_tap_to_reveal_title\">انقر للكشف</string>\n    <string name=\"pref_tap_to_reveal_summary\">سيتم اخفاء الرموز افتراضيًا. انقر على الرموز لكشف الكود.</string>\n    <string name=\"pref_tap_to_reveal_time_title\">مهلة النقر للكشف</string>\n    <string name=\"pref_auto_lock_title\">القفل التلقائي</string>\n    <string name=\"pref_auto_lock_summary\">متى %s</string>\n    <string name=\"pref_auto_lock_summary_disabled\">معطَّل</string>\n    <string name=\"pref_auto_lock_prompt\">اقفل Aegis تلقائيًا عند</string>\n    <string name=\"pref_auto_lock_type_back_button\">ضُغط زر الرجوع</string>\n    <string name=\"pref_auto_lock_type_minimize\">صُغر التطبيق</string>\n    <string name=\"pref_auto_lock_type_device_lock\">الجهاز مقفل</string>\n    <string name=\"pref_backup_password_category\">النسخ الاحتياطي والتصدير</string>\n    <string name=\"pref_backup_password_title\">كلمة سر منفصلة للنسخ الاحتياطي والتصدير</string>\n    <string name=\"pref_backup_password_summary\">في فُعِّل فإن كلمة السر المستخدمة لفتح قفل التطبيق لن يمكن استخدامها لفك تعمية النُسخ الاحتياطية و التصديرات بعد الآن.</string>\n    <string name=\"pref_backup_password_change_title\">غيّر كلمة السر للنسخ الاحتياطي والتصدير</string>\n    <string name=\"pref_backup_password_change_summary\">عيّن كلمة سر جديدة لتعمية المخزن خلال النسخ الاحتياطي والتصدير.</string>\n    <string name=\"pref_encryption_title\">التعمية</string>\n    <string name=\"pref_encryption_summary\">عمِّ المخزن وفك قفله بكملة سر أو استيثاق المقاييس الحيوية</string>\n    <string name=\"pref_biometrics_title\">فتح المقاييس الحيوية</string>\n    <string name=\"pref_biometrics_summary\">اسمح بالاستيثاق المقاييس الحيوية لفتح قفل المخزن</string>\n    <string name=\"pref_search_behavior_summary\">البحث من خلال: %s</string>\n    <string name=\"pref_search_behavior_prompt\">البحث في أي من الحقول التالية</string>\n    <string name=\"pref_search_behavior_type_name\">الاسم</string>\n    <string name=\"pref_search_behavior_type_issuer\">المصدِّر</string>\n    <string name=\"pref_search_behavior_type_note\">ملاحظة</string>\n    <string name=\"pref_search_behavior_type_groups\">المجموعات</string>\n    <string name=\"pref_set_password_title\">غيّر كلمة السر</string>\n    <string name=\"pref_set_password_summary\">عيّن كلمة سر جديدة، ستحتاجها لفتح قفل المخزن</string>\n    <string name=\"no_events_title\">لا توجد أحداث مبلّغ عنها</string>\n    <string name=\"no_events_description\">لم يتم الإبلاغ عن أي أحداث مهمة داخل التطبيق</string>\n    <string name=\"event_title_vault_unlocked\">المخزن غير مقفل</string>\n    <string name=\"event_description_vault_unlocked\">فُتح قفل المخزن بنجاح</string>\n    <string name=\"event_title_backup_created\">أُنشئت نُسخة أحتياطية</string>\n    <string name=\"event_description_backup_created\">أُنشئت نُسخة احتياطية من المخزن بنجاح</string>\n    <string name=\"event_title_android_backup_created\">أُنشئت نُسخة احتياطية بواسطة أندرويد</string>\n    <string name=\"event_description_android_backup_created\">أُنشئت نُسخة احتياطية من المخزن بنجاح من قِبل أندرويد</string>\n    <string name=\"event_title_vault_exported\">صُدِّر المخزن</string>\n    <string name=\"event_description_vault_exported\">صُدِّر نُسخة من المخزن</string>\n    <string name=\"event_title_entry_shared\">الإدخال المُشارك</string>\n    <string name=\"event_description_entry_shared\">تم مشاركة مدخل</string>\n    <string name=\"event_title_vault_unlock_failed_password\">فشل فتح القفل (كلمة السر)</string>\n    <string name=\"event_description_vault_unlock_failed_password\">فشلت محاولة لفتح المخزن بكلمة سر</string>\n    <string name=\"event_title_vault_unlock_failed_biometrics\">فشل فتح القفل (المقاييس الحيوية)</string>\n    <string name=\"event_description_vault_unlock_failed_biometrics\">فشلت محاولة لفتح المخزن باستخدام المقاييس الحيوية</string>\n    <string name=\"event_unknown\">نوع الحدث غير معروف</string>\n    <string name=\"audit_log_entry_deleted\">(محذوف)</string>\n    <string name=\"today_at_time\">اليوم على %1$s</string>\n    <string name=\"day_of_week_at_time\">%1$s في %2$s</string>\n    <string name=\"export_encrypted\">عمِّ المخزن</string>\n    <string name=\"export_help\">هذا الإجراء سيصدِّر المخزن خارج ذاكرة تخزين Aegis الداخلية. حدد الصيغة التي ترغب بأن يكون التصدير عليها:</string>\n    <string name=\"export_warning_unencrypted\">أنت على وشك تصدير نسخة غير مُعمّى من مخزن Aegis. <b>لا يُنصح بهذا</b>.</string>\n    <string name=\"export_warning_password\">تُعمّى عمليات التصدير باستخدام كلمة سر منفصلة مضبطة في إعدادات اﻷمن.</string>\n    <string name=\"understand_risk_accept\">أنا أفهم المخاطر</string>\n    <string name=\"export_format_aegis\">Aegis (.JSON)</string>\n    <string name=\"export_format_google_auth_uri\">ملف نصي (.TXT)</string>\n    <string name=\"export_format_html\">صفحة ويب (.HTML)</string>\n    <string name=\"export_format_hint\">صدِّر الصيغة</string>\n    <string name=\"export_all_groups\">صدِّر جميع المجموعات</string>\n    <string name=\"export_choose_groups\">حدّد المجموعات التي ستُصدِّر</string>\n    <plurals name=\"export_groups_selected_count\">\n        <item quantity=\"zero\">المجموعة المحددة صفر</item>\n        <item quantity=\"one\">%d مجموعة حُددت</item>\n        <item quantity=\"two\">مجموعتان مُحددة</item>\n        <item quantity=\"few\">%d مجموعة حُددت</item>\n        <item quantity=\"many\">%d مجموعة حُددت</item>\n        <item quantity=\"other\">%d مجموعة حُددت</item>\n    </plurals>\n    <string name=\"export_no_groups_selected\">لم يُحدد مجموعات للتصدير</string>\n    <string name=\"export_html_title\" comment=\"The title of an HTML export document\">تصدير Aegis Authenticator</string>\n    <string name=\"choose_authentication_method\">الأمن</string>\n    <string name=\"authentication_method_explanation\">تطبيق Aegis هو تطبيق استيثاق يركز على الأمان. تُخزّن الرموز في مخزن، يمكن تعميتها اختياريًا بكلمة سر من اختيارك. إذا حصل مهاجم على ملف المخزن المُعمّى الخاص بك، فإنه لن يتمكن من الوصول إلى المحتوى بدون معرفة كلمة السر.\\n\\nلقد حددنا مسبقًا الخيار الذي نعتقد أنه يناسب جهازك.</string>\n    <string name=\"authentication_method_none\">بلا</string>\n    <string name=\"authentication_method_none_description\">لا حاجة لكلمة السر لفك قفل المخزن، ولن يتم تعميته. <b>لا يُنصح بهذا الخيار</b>.</string>\n    <string name=\"authentication_method_password\">كلمة السر</string>\n    <string name=\"authentication_method_password_description\">كلمة السر مطلوبة لفك قفل المخزن.</string>\n    <string name=\"authentication_method_password_explanation\">تحذير: إذا نسيت كلمة السر، فلن تستطيع الوصول الرموز نهائيًا. لا توجد طريقة لاستعادتهم بدون كلمة السر.</string>\n    <string name=\"authentication_method_biometrics\">المقاييس الحيوية</string>\n    <string name=\"authentication_method_biometrics_description\">بالإضافة إلى كلمة السر، يمكن استعمال المقاييس الحيوية المسجلة على هذا الجهاز، مثل البصمة أو وجهك، لفك قفل المخزن.</string>\n    <string name=\"authentication\">افتح المخزن</string>\n    <string name=\"authentication_multiline\" comment=\"The newline in the middle is used for aesthetic purposes\">افتح \\nالمخزن</string>\n    <string name=\"auth_use_biometrics\">أو انقر هنا لاستعمال <font fgcolor=\"#FF0D86C1\">المقاييس الحيوية</font></string>\n    <string name=\"set_password\">الرجاء إدخال كلمة السر</string>\n    <string name=\"set_group\">الرجاء إدخال اسم المجموعة</string>\n    <string name=\"set_number\">الرجاء إدخال رقم</string>\n    <string name=\"set_password_confirm\">الرجاء تأكيد كلمة السر</string>\n    <string name=\"invalid_password\">كلمة السر غير صحيحة</string>\n    <string name=\"invalidated_biometrics\">اكتُشف تغيير في إعدادات أمان جهازك. الرجاء الذهاب إلى \\\"Aegis -&gt; الإعدادات -&gt; الأمن -&gt; الفتح بالمقاييس الحيوية\\\" لتعطيل وإعادة التمكين الفتح بالمقاييس الحيوية.</string>\n    <string name=\"password_reminder\">من فضلك أدخل كلمة السر. نطلب منك أحيانًا القيام بذلك حتى لا تنساه.</string>\n    <string name=\"password_reminder_dialog_title\">افتح المقاييس الحيوية افتراضيًا</string>\n    <string name=\"password_reminder_dialog_message\">نطلب منك أحيانًا إدخال كلمة سرك بدلاً من ذلك للتأكد من أنك لم تنساها ولن يتم قفله من المخزن الخاص بك. بعد إدخال كلمة السر مرة واحدة، سيعود Aegis افتراضيًا إلى فتح المقاييس الحيوية حتى يحين وقت تذكير آخر بكلمة السر.</string>\n    <string name=\"password_reminder_freq_never\">أبدًا</string>\n    <string name=\"password_reminder_freq_weekly\">أسبوعيًا</string>\n    <string name=\"password_reminder_freq_biweekly\">كل أسبوعين</string>\n    <string name=\"password_reminder_freq_monthly\">شهريًا</string>\n    <string name=\"password_reminder_freq_quarterly\">كل ثلاثة أشهر</string>\n    <string name=\"enter_password_2fas_message\">يبدو أن نُسخة 2FAS الاحتياطية مُعمَّاة، الرجاء إدخال كلمة السر أدناه.</string>\n    <string name=\"enter_password_authy_message\">يبدو أن رموز Authy الخاصة بك مُعمَّاة. الرجاء إغلاق Aegis، وفتح Authy وفتح قفل الرموز بكلمة سرك. بدلًا من ذلك، Aegis يمكنه أيضًا محاولة فك تعمية رموز Authy الخاصة بك، إذا أدخلت كلمة سرك أدناه.</string>\n    <string name=\"enter_password_aegis_title\">الرجاء إدخال كلمة سر الاستيراد</string>\n    <string name=\"period_hint\">الفترة (بالثواني)</string>\n    <string name=\"algorithm_hint\">دالات/وظائف التجزئة (Hash Functions)</string>\n    <string name=\"type\">النوع</string>\n    <string name=\"share\">شارك</string>\n    <string name=\"yes\">نعم</string>\n    <string name=\"no\">لا</string>\n    <string name=\"undo\">تراجع</string>\n    <string name=\"unlock\">افتح القفل</string>\n    <string name=\"advanced\">متقدم</string>\n    <string name=\"counter\">العداد</string>\n    <string name=\"digits\">الأرقام</string>\n    <string name=\"secret\">السر</string>\n    <string name=\"scan\">امسح رمز QR</string>\n    <string name=\"scan_image\">امسح الصورة</string>\n    <string name=\"enter_manually\">أدخل يدويًا</string>\n    <string name=\"set_up_biometric\">عيّن الفتح المقاييس الحيوية</string>\n    <string name=\"copy\">انسخ</string>\n    <string name=\"edit\">عدّل</string>\n    <string name=\"select_all\">حدّد الكل</string>\n    <string name=\"assign_icons\">عيّن أيقونات</string>\n    <string name=\"assign_groups\">عيّن لمجموعة</string>\n    <string name=\"assign_groups_dialog_summary\">حدّد مجموعة ترغب في تعيين المواد المختارة إليها.</string>\n    <string name=\"assign_groups_dialog_dropdown\">حدّد مجموعة</string>\n    <string name=\"favorite\" comment=\"Verb\">أضِف للمفضلة</string>\n    <string name=\"unfavorite\" comment=\"Verb\">أزِل من المفضلة</string>\n    <string name=\"error_all_caps\">خطأ</string>\n    <string name=\"password\">كلمة السر</string>\n    <string name=\"confirm_password\">أكّد كلمة السر</string>\n    <string name=\"show_password\">أظهر كلمة السر</string>\n    <string name=\"new_entry\">مدخل جديد</string>\n    <string name=\"add_new_entry\">أضف مدخلات جديدة</string>\n    <string name=\"unlock_vault_error\">لم نتمكن من فتح قفل المخزن</string>\n    <string name=\"unlock_vault_error_description\">كلمة السر خاطئة. تأكد من أنك لم تخطئ كتابة كلمة السر.</string>\n    <string name=\"password_equality_error\">كلمات السر يجب أن تكون متطابقة وغير فارغة</string>\n    <string name=\"snackbar_authentication_method\">الرجاء تحديد طريقة الاستيثاق</string>\n    <string name=\"encrypting_vault\">جارِ تعمية المخزن</string>\n    <string name=\"exporting_vault\">جارِ تصدير المخزن</string>\n    <string name=\"optimizing_icon\">تحسين الأيقونة</string>\n    <string name=\"optimizing_icon_multiple\">تحسين الأيقونات %1$d/%2$d</string>\n    <string name=\"reading_file\">قراءة الملف</string>\n    <string name=\"requesting_root_access\">جارِ طلب صلاحية الجذر</string>\n    <string name=\"analyzing_qr\">جارِ تحليل رمز QR</string>\n    <string name=\"analyzing_qr_multiple\">جارِ تحليل الرمز %1$d/%2$d (%3$s)</string>\n    <plurals name=\"added_new_entries\">\n        <item quantity=\"zero\">أُضيف %d مدخل جديد إلى المخزن</item>\n        <item quantity=\"one\">أُضيف %d مدخل جديد إلى المخزن</item>\n        <item quantity=\"two\">أُضيف مدخلان جديدان إلى المخزن</item>\n        <item quantity=\"few\">تم إضافة %d مدخلات جديدة إلى المخزن</item>\n        <item quantity=\"many\">أُضيف %d مدخلات جديدة إلى المخزن</item>\n        <item quantity=\"other\">أُضيف %d مدخل جديد إلى المخزن</item>\n    </plurals>\n    <string name=\"importing_icon_pack\">جارِ استيراد حزمة الأيقونات</string>\n    <string name=\"delete_entry\">احذف المدخلات</string>\n    <string name=\"delete_entry_description\">هل ترغب حقًا في حذف هذا المدخل؟</string>\n    <string name=\"delete_entry_explanation\">هذا الإجراء لا يعطل 2FA الخاص ب:\\n<b>%s</b>\\n\\n لتجنب فقدان الوصول، تأكد من تعطيل الاستيثاق الثنائي (2FA) أو أن لديك طريقة بديلة لتوليد الرموز لهذه الخدمة.</string>\n    <string name=\"delete_entries\">احذف المدخلات</string>\n    <plurals name=\"delete_entries_description\">\n        <item quantity=\"zero\">هل ترغب حقًا بحذف 0 مدخل؟</item>\n        <item quantity=\"one\">هل ترغب حقًا بحذف مدخل %d؟</item>\n        <item quantity=\"two\">هل ترغب حقًا بحذف مدخلين؟</item>\n        <item quantity=\"few\">هل ترغب حقًا بحذف مداخل %d؟</item>\n        <item quantity=\"many\">هل ترغب حقًا بحذف مداخل %d؟</item>\n        <item quantity=\"other\">هل ترغب حقًا في حذف %d مدخلات؟</item>\n    </plurals>\n    <string name=\"discard_changes\">تجاهل التغييرات؟</string>\n    <string name=\"discard_changes_description\">لم تُحفظ تغييراتك</string>\n    <string name=\"saving_profile_error\">حدث خطأ أثناء حفظ الملف الشخصي</string>\n    <string name=\"saving_assign_icons_error\">خطأ في تعيين الأيقونات</string>\n    <string name=\"welcome\">مرحبًا</string>\n    <string name=\"app_description\">Aegis تطبيق مصادقة ثنائية مجاني، وآمن، ومفتوح المصدر</string>\n    <string name=\"setup_completed\">اكتمل الإعداد</string>\n    <string name=\"setup_completed_description\">أُعِد Aegis وهو جاهز للعمل.</string>\n    <string name=\"vault_not_found\">لم يُعثر على مخزن، بدء الإعداد…</string>\n    <string name=\"copied\">نُسِخ</string>\n    <string name=\"errors_copied\">نُسِخ الخطأ للحافظة</string>\n    <string name=\"version_copied\">نُسِخ الإصدار إلى الحافظة</string>\n    <string name=\"error_required_field\">يُرجى ملء الحقل</string>\n    <string name=\"error_occurred\">حدث خطأ ما</string>\n    <string name=\"decryption_error\">حدث خطأ أثناء محاولة فك قفل المخزن</string>\n    <string name=\"decryption_corrupt_error\">حدث خطأ أثناء محاولة فك قفل المخزن. قد يكون ملف مخزنك تالف.</string>\n    <string name=\"saving_error\">حدث خطأ أثناء محاولة حفظ المخزن</string>\n    <string name=\"vault_init_error\">حدث خطأ أثناء محاولة تهيئة المخزن</string>\n    <string name=\"vault_load_error\">حدث خطأ أثناء محاولة تحميل المخزن من الذاكرة</string>\n    <string name=\"biometric_decrypt_error\">حدث خطأ أثناء محاولة فك تعمية المخزن بالاستيثاق المقاييس الحيوية. هذا يحدث عادةً فقط إن غُيّر إعدادات أمان جهازك. الرجاء فك قفل المخزن بكلمة سرك وإعادة تعيين الاستيثاق المقاييس الحيوية داخل إعدادات Aegis.</string>\n    <string name=\"biometric_init_error\">حدث خطأ أثناء محاولة تحضير الاستيثاق المقاييس الحيوية. هذا يحدث عادةً فقط إن غُيّر إعدادات أمان جهازك. الرجاء فك قفل المخزن بكلمة سرك وإعادة تعيين الاستيثاق المقاييس الحيوية داخل إعدادات Aegis.</string>\n    <string name=\"disable_encryption\">عطِّل التعمية</string>\n    <string name=\"disable_encryption_description\">هل أنت متأكد من أنك تريد تعطيل التعمية؟ سيؤدي هذا إلى تخزين المخزن في نص عادي. <b>سيتم تعطيل النُسخ الاحتياطية التلقائية أيضًا</b>.</string>\n    <string name=\"enable_encryption_error\">حدث خطأ أثناء تفعيل التعمية</string>\n    <string name=\"disable_encryption_error\">حدث خطأ أثناء تعطيل التعمية</string>\n    <string name=\"backup_successful\">تم جدولة النسخ الاحتياطي بنجاح</string>\n    <string name=\"backup_error\">حدث خطأ أثناء محاولة عمل نسخة احتياطية</string>\n    <string name=\"backup_status_success\">نجح أحدث نسخ احتياطي: %s</string>\n    <string name=\"backup_status_failed\">فشل أحدث نسخ احتياطي: %s</string>\n    <string name=\"backup_status_none\">لم يتم عمل نُسخ احتياطية بعد</string>\n    <string name=\"backup_warning_password\">النُسخ الاحتياطية مُعمَّاة باستعمال كلمة سر منفصلة ضُبطت في خيارات الأمن</string>\n    <string name=\"documentsui_error\">يبدو أن الوثائق مفقودة من جهازك. هذا عنصر نظام مهم ضروري لاختيار الوثائق وإنشائها. إذا كنت تستخدم أداة ل &quot;debloat&quot; جهازك، ربما حذفتها عن طريق الخطأ وسيتعين عليك إعادة تثبيتها.</string>\n    <string name=\"icon_pack_import_error\">حدث خطأ أثناء محاولة استيراد حزمة أيقونات</string>\n    <string name=\"icon_pack_import_exists_error\">حزمة الأيقونات التي تحاول استيرادها موجودة بالفعل. أتريد الكتابة فوقها؟</string>\n    <string name=\"icon_pack_delete_error\">حدث خطأ أثناء محاولة حذف حزمة الأيقونات</string>\n    <plurals name=\"icon_pack_info\">\n        <item quantity=\"zero\">لا أيقونات</item>\n        <item quantity=\"one\">أيقونة واحدة</item>\n        <item quantity=\"two\">أيقونتان</item>\n        <item quantity=\"few\">%d أيقونات</item>\n        <item quantity=\"many\">%d أيقونة</item>\n        <item quantity=\"other\">%d أيقونة</item>\n    </plurals>\n    <string name=\"icon_custom\">مخصّص</string>\n    <string name=\"permission_denied\">طلب الاذن مرفوض</string>\n    <string name=\"andotp_new_format\">الصيغة الجديدة (الإصدار v0.6.3 أو أحدث)</string>\n    <string name=\"andotp_old_format\">الصيغة القديمة (الإصدار v0.6.2 أو أقدم)</string>\n    <string name=\"choose_andotp_importer\">أي صيغة يحتويها ملف نسخة andOTP الاحتياطية؟</string>\n    <string name=\"choose_totpauth_importer\">هل نُسخة TOTP Authenticator الاحتياطية هذه مُعمَّاة بكلمة سر؟</string>\n    <string name=\"choose_application\">حدّد التطبيق الذي تريد الاستيراد منه</string>\n    <string name=\"choose_theme\">حدّد السمة المطلوبة</string>\n    <string name=\"choose_account_name_position\">حدّد موضع اسم الحساب المطلوب</string>\n    <string name=\"choose_view_mode\">حدّد وضع العرض المطلوب</string>\n    <string name=\"choose_copy_behavior\">حدّد سلوك نُسختك</string>\n    <string name=\"parsing_file_error\">حدث خطأ أثناء محاولة تحليل الملف</string>\n    <string name=\"file_not_found\">خطأ: لم يُعثر على الملف</string>\n    <string name=\"reading_file_error\">حدث خطأ أثناء محاولة قراءة الملف</string>\n    <string name=\"app_lookup_error\">خطأ: التطبيق غير مثبت</string>\n    <string name=\"app_version_error\">نُسخة %s المثبتة غير مدعومة. أصبحت الإصدارات الحديثة تقوم بتعمية بعض الملفات في مجلد التخزين الداخلي، مما يجعل Aegis غير قادر على الوصول إلى المعلومات التي يحتاجها من أجل الاستيراد. محاولة الاستيراد من المرجح أن تؤدي إلى خطأ. هل ترغب في الاستمرار على أي حال؟</string>\n    <string name=\"root_error\">خطأ: تعذر الحصول على حق الوصول إلى الجذر</string>\n    <plurals name=\"imported_entries_count\">\n        <item quantity=\"zero\">استوردت %d مدخلات</item>\n        <item quantity=\"one\">استوردت مدخل</item>\n        <item quantity=\"two\">استوردت مدخلان</item>\n        <item quantity=\"few\">استوردت %d مدخلات</item>\n        <item quantity=\"many\">استوردت %d مدخلات</item>\n        <item quantity=\"other\">استوردت %d مدخل</item>\n    </plurals>\n    <plurals name=\"entries_shown\">\n        <item quantity=\"zero\">إظهار %d مدخل</item>\n        <item quantity=\"one\">إظهار %d مدخل</item>\n        <item quantity=\"two\">إظهار %d مدخلات</item>\n        <item quantity=\"few\">إظهار %d مدخلات</item>\n        <item quantity=\"many\">إظهار %d مدخلات</item>\n        <item quantity=\"other\">إظهار %d مدخل</item>\n    </plurals>\n    <string name=\"intro_import_error_title\">حدث خطأ أثناء استيراد المخزن</string>\n    <string name=\"import_error_title\">حدث خطأ أو أكثر أثناء الاستيراد</string>\n    <string name=\"exporting_vault_error\">حدث خطأ أثناء محاولة تصدير المخزن</string>\n    <string name=\"exported_vault\">صُدِّر المخزن</string>\n    <string name=\"encryption_set_password_error\">حدث خطأ أثناء محاولة تعيين كلمة سر.</string>\n    <string name=\"encryption_enable_biometrics_error\">حدث خطأ أثناء محاولة تفعيل الفتح البيومتري. لبعض الأجهزة تنفيذ رديئ لأستيثاق البيومتري، والأرجح أن جهازك أحدها. بدلًا من ذلك، فكّر بتحويل الإعدادات إلى كلمة سر فقط.</string>\n    <string name=\"no_cameras_available\">لا توجد كاميرا متاحة</string>\n    <string name=\"read_qr_error\">حدث خطأ أثناء محاولة قراءة رمز QR</string>\n    <string name=\"read_qr_error_phonefactor\">Aegis غير متوافق مع خوارزمة 2FA الخاصة بمايكروسوفت. الرجاء التأكد من تحديد \\\"إعداد التطبيق دون إشعارات\\\" عند إعداد 2FA في Office 365.</string>\n    <string name=\"partial_google_auth_import\">اكتُشف تصدير Google Authenticator غير مكتمل</string>\n    <string name=\"partial_google_auth_import_warning\">بعض رموز QR مفقودة من الاستيراد. لم يتم العثور على الرموز التالية:\\n\\n<b>%s</b>\\n\\nيمكنك الاستمرار في استيراد هذا التصدير الجزئي ولكننا نوصي بإعادة المحاولة باستخدام جميع رموز QR حتى لا تخاطر بفقدان الوصول إلى أي رموز.</string>\n    <string name=\"missing_qr_code_descriptor\">• رمز QR %d</string>\n    <plurals name=\"import_partial_export_anyway\">\n        <item quantity=\"zero\">استورد %d رموز على أي حال</item>\n        <item quantity=\"one\">استورد رمز على أي حال</item>\n        <item quantity=\"two\">استورد أماراتين على أي حال</item>\n        <item quantity=\"few\">استورد %d أمارة على أي حال</item>\n        <item quantity=\"many\">استورد %d رموز على أي حال</item>\n        <item quantity=\"other\">استورد %d أمارة على أي حال</item>\n    </plurals>\n    <string name=\"import_google_auth_failure\">فشل استيراد تصدير Google Authenticator</string>\n    <string name=\"unrelated_google_auth_batches_error\">يحتوي التصدير على معلومات عن دُفعة غير ذات صلة. حاول استيراد دفعة واحدة في كل مرة.</string>\n    <string name=\"no_tokens_can_be_imported\">نتيجة لذلك، لا يمكن استيراد أي رموز</string>\n    <string name=\"unlocking_vault\">جارِ فتح المخزن</string>\n    <string name=\"rename_group\">أعد تسمية المجموعة</string>\n    <string name=\"no_group_selection\">إذا كان الإدخال لا ينتمي إلى أي مجموعة، فيمكن العثور عليه تحت \\\"بلا مجموعة\\\".</string>\n    <string name=\"remove_group\">أزل المجموعة</string>\n    <string name=\"remove_group_description\">هل ترغب حقًا في إزالة هذه المجموعة؟ ستتحول المدخلات في هذه المجموعة تلقائيًا إلى \\'بلا مجموعة\\'.</string>\n    <string name=\"remove_unused_groups\">احذف المجموعات غير المستخدمة</string>\n    <string name=\"remove_unused_groups_description\">هل أنت متأكد من أنك تريد حذف جميع المجموعات التي لم يتم تعيينها إلى إدخال؟</string>\n    <string name=\"remove_icon_pack\">أزل حزمة الأيقونات</string>\n    <string name=\"remove_icon_pack_description\">هل أنت متأكد من أنك تريد إزالة حزمة الأيقونات هذه؟ لن تتأثر المدخلات التي تستخدم الرموز من هذه الحزمة.</string>\n    <string name=\"details\">التفاصيل</string>\n    <string name=\"show_error_details\">أظهر تفاصيل الخطأ</string>\n    <string name=\"lock\">قفل</string>\n    <string name=\"name\">الاسم</string>\n    <string name=\"no_group\">بلا مجموعة</string>\n    <string name=\"sort\" comment=\"Title of the Sort button in the top action bar of the main view\">افرز</string>\n    <string name=\"sort_alphabetically\">المصدِّر (أ إلى ي)</string>\n    <string name=\"sort_alphabetically_reverse\">المصدِّر (ي إلى أ)</string>\n    <string name=\"sort_alphabetically_name\">الحساب (أ إلى ي)</string>\n    <string name=\"sort_alphabetically_name_reverse\">الحساب (ي إلى أ)</string>\n    <string name=\"sort_usage_count\">عدد مرات الاستخدام</string>\n    <string name=\"sort_last_used\">آخر استخدام</string>\n    <string name=\"sort_custom\">مخصّص</string>\n    <string name=\"last_used\">آخر استخدام</string>\n    <string name=\"last_used_never\">أبدًا</string>\n    <string name=\"new_group\">مجموعة جديدة</string>\n    <string name=\"group\">مجموعة</string>\n    <string name=\"group_name_hint\">اسم المجموعة</string>\n    <string name=\"preference_manage_groups\">عدّل المجموعات</string>\n    <string name=\"preference_manage_groups_summary\">أدر واحذف مجموعاتك هنا</string>\n    <string name=\"preference_reset_usage_count\">صفّر عدد الاستخدام</string>\n    <string name=\"preference_reset_usage_count_summary\">صفّر عدد الاستخدام لكل إدخال في مخزنك</string>\n    <string name=\"preference_reset_usage_count_dialog\">هل أنت متأكد من أنك تريد جعل العداد لكل مدخل في خزنتك يصبح 0؟</string>\n    <string name=\"note\" comment=\"Users can add a note to an entry\">ملاحظة</string>\n    <string name=\"clear\">امحُ</string>\n    <string name=\"dialog_duplicate_entry_title\" comment=\"'Duplicate' is a noun here\">إدخال مكرر</string>\n    <string name=\"dialog_duplicate_entry_message\">هذا الإدخال يحمل نفس الاسم والمصدر كواحد أو أكثر من الإدخالات الموجودة. كيف ترغب في المتابعة؟</string>\n    <string name=\"dialog_duplicate_entry_overwrite_title\">الكتابة فوق إدخال/إدخالات موجودة</string>\n    <string name=\"dialog_duplicate_entry_overwrite_subtitle\">استبدل الإدخال أو الإدخالات الموجودة بالإدخال الجديد. لا يمكن التراجع عن هذا الإجراء</string>\n    <string name=\"dialog_duplicate_entry_suffix_title\">أضف لاحقة</string>\n    <string name=\"dialog_duplicate_entry_suffix_subtitle\">أضف لاحقة إلى اسم هذا الإدخال الجديد. الاسم الجديد سيكون هو: %s</string>\n    <string name=\"dialog_duplicate_entry_cancel_title\">ألغِ الحفظ</string>\n    <string name=\"dialog_duplicate_entry_cancel_subtitle\">يسمح لك بتعديل الإدخال قبل محاولة حفظه مرة أخرى</string>\n    <plurals name=\"dialog_duplicate_entry_overwrite_dialog_message\">\n        <item quantity=\"zero\">هل أنت متأكد من أنك تريد حذف الإدخال %d بالاسم التالي:\\n\\n%s - %s</item>\n        <item quantity=\"one\">هل أنت متأكد من أنك تريد حذف مدخل بالاسم التالي:\\n\\n%s - %s</item>\n        <item quantity=\"two\">هل أنت متأكد من أنك تريد حذف مدخلان بالاسم التالي:\\n\\n%s - %s</item>\n        <item quantity=\"few\">هل أنت متأكد من أنك تريد حذف %d مدخلات بالاسم التالي:\\n\\n%s - %s</item>\n        <item quantity=\"many\">هل أنت متأكد من أنك تريد حذف %d مدخل بالاسم التالي:\\n\\n%s - %s</item>\n        <item quantity=\"other\">هل أنت متأكد من أنك تريد حذف %d مدخل بالاسم التالي:\\n\\n%s - %s</item>\n    </plurals>\n    <string name=\"dialog_duplicate_entry_overwrite_dialog_title\">أكّد الحذف</string>\n    <string name=\"pref_haptic_feedback_summary\">اجعل جهازك يهتز عند تحديث الرموز</string>\n    <string name=\"pref_haptic_feedback_title\">الاستجابة اللمسية</string>\n    <string name=\"pref_highlight_entry_title\">ابرز الرموز عندما تُنقر</string>\n    <string name=\"pref_highlight_entry_summary\">يسهل تمييز الرموز عن بعضها عن طريق تبريزهم عندما تُنقر عليهم</string>\n    <string name=\"pref_groups_multiselect_title\">مجموعات متعددة الإختيار</string>\n    <string name=\"pref_groups_multiselect_summary\">اسمح باختيار مجموعات متعددة في نفس الوقت</string>\n    <string name=\"pref_minimize_on_copy_title\">تصغير عند النسخ</string>\n    <string name=\"pref_minimize_on_copy_summary\">تصغير التطبيق بعد نسخ رمز</string>\n    <string name=\"pref_copy_behavior_title\">انسخ الرموز إلى الحافظة</string>\n    <string name=\"pref_search_behavior_title\">سلوك البحث</string>\n    <string name=\"pref_pause_entry_title\">جمّد الرموز عند النقر عليها</string>\n    <string name=\"pref_pause_entry_summary\">أوقف التحديث التلقائي للرموز عن طريق النقر عليها. لن يُحدِّث الرموز مادام أنها مُركّزة. يتطلب \\\"ابرز الرموز عندما تُنقر\\\" أو \\\"انقر للكشف\\\".</string>\n    <string name=\"pin_keyboard_description\">أدخل كلمة السر لتفعيل لوحة مفاتيح PIN. لاحظ أن هذا يعمل فقط إذا كانت كلمة سرك تتكون فقط من أرقام</string>\n    <string name=\"pin_keyboard_error\">خطأ في تفعيل لوحة مفاتيح PIN</string>\n    <string name=\"pin_keyboard_error_description\">لا يمكن تعيين لوحة مفاتيح PIN. يجب أن تتكون كلمة سرك من أرقام فقط.</string>\n    <string name=\"pin_keyboard_disabled\">تغيرت كلمة السر. لن تُعرض لوحة مفاتيح PIN.</string>\n    <string name=\"selected\">محددة</string>\n    <string name=\"dark_theme_title\">سمة داكنة</string>\n    <string name=\"light_theme_title\">سمة فاتحة</string>\n    <string name=\"amoled_theme_title\">سمة AMOLED</string>\n    <string name=\"system_theme_title\">عيّن بواسطة توفير شحن البطارية</string>\n    <string name=\"system_amoled_theme_title\">عيّن بواسطة توفير شحن البطارية (AMOLED)</string>\n    <string name=\"normal_viewmode_title\">عادي</string>\n    <string name=\"compact_mode_title\">مدمج</string>\n    <string name=\"small_mode_title\">صغير</string>\n    <string name=\"tiles_mode_title\">البلاط</string>\n    <string name=\"unknown_issuer\">مصدِّر غير معروف</string>\n    <string name=\"unknown_account_name\">اسم الحساب غير معروف</string>\n    <plurals name=\"import_error_dialog\">\n        <item quantity=\"zero\">تعذر Aegis استيراد %d رمز. سيتم تخطي هذا الرمز. اضغط \\'التفاصيل\\' للاطلاع على مزيد من المعلومات حول الخطأ.</item>\n        <item quantity=\"one\">تعذر Aegis استيراد %d رمز. سيتم تخطي هذا الرمز. اضغط \\'التفاصيل\\' للاطلاع على مزيد من المعلومات حول الخطأ.</item>\n        <item quantity=\"two\">تعذر Aegis استيراد رمزين. سيتم تخطي هذه اﻷماراة. اضغط \\'التفاصيل\\' للاطلاع على مزيد من المعلومات حول الخطأ.</item>\n        <item quantity=\"few\">تعذر Aegis استيراد %d رمز. سيتم تخطي هذه اﻷمارة. اضغط \\'التفاصيل\\' للاطلاع على مزيد من المعلومات حول الخطأ.</item>\n        <item quantity=\"many\">تعذر Aegis استيراد %d رمز. سيتم تخطي هذه اﻷمارة. اضغط \\'التفاصيل\\' للاطلاع على مزيد من المعلومات حول الخطأ.</item>\n        <item quantity=\"other\">تعذر Aegis استيراد %d رمز. سيتم تخطي هذه اﻷمارة. اضغط \\'التفاصيل\\' للاطلاع على مزيد من المعلومات حول الخطأ.</item>\n    </plurals>\n    <string name=\"unable_to_process_deeplink\">تعذرت معالجة الارتباط العميق</string>\n    <string name=\"unable_to_read_qrcode_file\">غير قادر على قراءة ومعالجة رمز QR من الملف: %s.</string>\n    <string name=\"unable_to_process_shared_text\">غير قادر على معالجة النص المُشارك ك OTP</string>\n    <string name=\"unable_to_read_qrcode_files\">غير قادر على قراءة ومعالجة بعض رموز QR. سيتم استيراد %1$d/%2$d فقط من المدخلات.</string>\n    <string name=\"unable_to_generate_qrcode\">تعذّر توليد رمز QR</string>\n    <string name=\"select_picture\">حدّد صورة</string>\n    <string name=\"select_icon\">حدّد أيقونة</string>\n    <string name=\"tile_open_vault\" comment=\"label for a quick settings tile that opens the app when tapped\">افتح المخزن</string>\n    <string name=\"tile_open_scanner\" comment=\"label for a quick settings tile that opens the QR code scanner when tapped\">افتح الماسح</string>\n    <string name=\"toggle_checkboxes\">تبديل خانات التأشير</string>\n    <string name=\"search\">بحث</string>\n    <string name=\"channel_name_lock_status\">إشعار القفل</string>\n    <string name=\"channel_description_lock_status\">يمكن لـ Aegis عرض إشعار مستمر لتنبيهك عند قفل المخزن</string>\n    <string name=\"vault_unlocked_state\">قفل المخزن مفتوح. انقر هنا للقفل</string>\n    <string name=\"version\">الإصدار</string>\n    <string name=\"changelog\">سجلّ التغيير</string>\n    <string name=\"whats_new\">ما الجديد</string>\n    <string name=\"github_description\">المصدر البرمجي، والعلل، والمعلومات</string>\n    <string name=\"license\">الرخصة</string>\n    <string name=\"license_description\">Aegis Authenticator مرخص بموجب GPLv3</string>\n    <string name=\"third_party_licenses\">تراخيص طرف ثالث</string>\n    <string name=\"third_party_licenses_description\">تراخيص مكتبات الطرف الثالث التي يستعملها Aegis</string>\n    <string name=\"country_netherlands\">هولندا</string>\n    <string name=\"email_us\">اكتب بريد الكتروني</string>\n    <string name=\"visit_website\">زُر موقعنا</string>\n    <string name=\"about_support\">الدعم</string>\n    <string name=\"support_rate\">التقييم</string>\n    <string name=\"support_rate_description\">ادعمنا بترك تقييم على متجر Google Play</string>\n    <string name=\"webview_error\">هذا الجهاز لا يدعم عرض الويب، والذي هو ضروري لعرض سجلّ التغيير و الرخصة. إنه مكوِّن نظام مفقود.</string>\n    <string name=\"email\">البريد الإلكتروني</string>\n    <string name=\"time_sync_warning_title\">مزامنة الوقت تلقائيًا</string>\n    <string name=\"time_sync_warning_message\">يعتمد Aegis على وقت النظام لتوليد الأكواد الصحيحة. انحراف بمقادر بضعة ثواني يمكن أن يؤدي إلى أكواد خاطئة. يبدوا أن جهازك غير معيّن إلى مزامنة الوقت تلقائيًا. هل ترغب بفعل ذلك الآن؟</string>\n    <string name=\"time_sync_warning_disable\">توقف عن تحذيري. أعرف ماذا أفعل.</string>\n    <string name=\"google_qr_export_unrelated\">عُثر على رمز QR لا علاقة له. حاول إعادة تشغيل الماسح.</string>\n    <plurals name=\"google_qr_export_scanned\">\n        <item quantity=\"zero\">تم مسح %1$d/%2$d رموز QR</item>\n        <item quantity=\"one\">تم مسح %1$d/%2$d رمز QR</item>\n        <item quantity=\"two\">تم مسح %1$d/%2$d رموز QR</item>\n        <item quantity=\"few\">تم مسح %1$d/%2$d رموز QR</item>\n        <item quantity=\"many\">تم مسح %1$d/%2$d رموز QR</item>\n        <item quantity=\"other\">تم مسح %1$d/%2$d رموز QR</item>\n    </plurals>\n    <string name=\"google_qr_export_unexpected\">انتظرت رمز QR #%1$d، ولكن مسحت #%2$d بدلًا منه</string>\n    <string name=\"backup_error_bar_message\"><b>النسخ الاحتياطي للمخزن فشل مؤخرًا</b></string>\n    <string name=\"backup_error_dialog_details\" comment=\"The first parameter is the type of backup (e.g. built-in or Android backup). The second parameter is an elapsed time in the style of 'x seconds/minutes/days ago'.\">         فشلت محاولة النسخ الاحتياطي للمخزون باستخدام %1$s بسبب حدوث خطأ. تمت محاولة النسخ الاحتياطي %2$s. الرجاء التحقق من إعدادات النسخ الاحتياطي للتأكد من أن النسخ الاحتياطي يمكن أن يكتمل بنجاح.\n    </string>\n    <string name=\"backup_permission_error_dialog_details\" comment=\"The first parameter is the type of backup (e.g. built-in or Android backup). The second parameter is an elapsed time in the style of 'x seconds/minutes/days ago'.\">فشلت محاولة النسخ الاحتياطي الأخيرة للمخزون باستخدام %1$s لأن Aegis لم يكن لديه الإذن قراءة وجهة النسخ الاحتياطي. تمت محاولة النسخ الاحتياطي %2$s. يمكن أن يحدث هذا الخطأ إذا قمت بنقل/إعادة تسمية وجهة النسخ الاحتياطي أو إذا قمت للتو باستعادة Aegis من نسخة احتياطية. الرجاء إعادة إعداد وجهة النسخ الإحتياطي.    </string>\n    <string name=\"backup_system_builtin\">النسخ الاحتياطية التلقائية المضنة في Aegis</string>\n    <string name=\"backup_system_android\">نظام النسخ الاحتياطي السحابي للأندرويد</string>\n    <string name=\"backup_reminder_bar_message_with_latest\" comment=\"The parameter is an elapsed time in the style of 'x seconds/minutes/days ago'\">        أحدث نسخة احتياطية قديمة (%s)\n    </string>\n    <string name=\"backup_reminder_bar_message\">        لا تُنسخ التغييرات احتياطيًا\n    </string>\n    <string name=\"backup_reminder_bar_dialog_title\">لا تُنسخ التغييرات احتياطيًا</string>\n    <string name=\"backup_reminder_bar_dialog_summary\">        لم يتم إجراء نسخ احتياطي للتغييرات الأخيرة التي تم إجراؤها على الخزنة حتى الآن. من المهم عمل نسخ احتياطية منتظمة لمنع فقدان الوصول إلى حساباتك. يرجى النظر في إعداد النسخ الاحتياطية التلقائية في قائمة الإعدادات.\n    </string>\n    <string name=\"backup_reminder_bar_dialog_accept\">إعداد النسخ الاحتياطية</string>\n    <string name=\"backup_plaintext_export_warning\"><b>تم تصدير المخزن مؤخرا ك نص مجرّد</b></string>\n    <string name=\"pref_show_plaintext_warning_hint\">لا تُظهر هذا التحذير مجدداً</string>\n    <string name=\"backup_plaintext_warning_explanation\">يظهر هذا التحذير لأنك صدَّرت مؤخراً نسخة غير مُعمَّاة من المخزن. للحفاظ على أمان رموزك، نُوصي بحذف هذا الملف بمجرد أن لا تكون هناك حاجة إليه.</string>\n    <string name=\"switch_camera\">بدّل الكاميرا</string>\n    <string name=\"empty_list\">لا توجد أكواد لعرضها. ابدأ بإضافة مدخلات بالنقر على علامة الزائد في أسفل الركن الأيسر</string>\n    <string name=\"empty_list_title\">لم يتم العثور على مدخلات</string>\n    <string name=\"empty_group_list\">لا توجد مجموعات لعرضها. أضف مجموعات من خلال شاشة التعديل لأحد المدخلات</string>\n    <string name=\"empty_group_list_title\">لم يتم العثور على أي مجموعات.</string>\n    <string name=\"no_icon_packs\">لم يتم استيراد أي حزم أيقونات بعد. انقر فوق علامة الزائد لاستيراد حزمة. نصيحة: جرب <a href=\"https://aegis-icons.github.io\">aegis-icons</a>.</string>\n    <string name=\"no_icon_packs_title\">لا توجد حزم أيقونات</string>\n    <string name=\"pick_icon\">اختر أيقونة</string>\n    <string name=\"uncategorized\">غير مصنفة</string>\n    <string name=\"done\">تم</string>\n    <plurals name=\"qr_count\">\n        <item quantity=\"zero\">%d / %d رمز QR</item>\n        <item quantity=\"one\">%d / %d رمز QR</item>\n        <item quantity=\"two\">%d / %d رموز QR</item>\n        <item quantity=\"few\">%d / %d رموز QR</item>\n        <item quantity=\"many\">%d / %d رمز QR</item>\n        <item quantity=\"other\">%d / %d رمز QR</item>\n    </plurals>\n    <string name=\"next\">التالي</string>\n    <string name=\"previous\">السابق</string>\n    <string name=\"copy_uri\">انسخ عنوان URL</string>\n    <string name=\"unable_to_copy_uri_to_clipboard\">تعذر نسخ URI إلى الحافظة</string>\n    <string name=\"uri_copied_to_clipboard\">نُسِخ URI إلى الحافظة</string>\n    <string name=\"transfer_entry_description\">امسح رمز QR هذا بتطبيق الاستيثاق الذي ترغب بنقل ذلك المدخل إليه</string>\n    <string name=\"transfer_entry_brightness\">انقر على رمز QR لتبديل سطوع الشاشة بالكامل</string>\n    <string name=\"google_auth_compatible_transfer_description\">امسح رموز ال QR هذه بواسطة Aegis أو Google Authenticator.\\n\\n بسبب القيود في تطبيقGoogle Authenticator، فقط رموز TOTP &amp; HOTP التي تستعمل SHA1 وتنتِج رموز من 6 خانات هي من سيتم إدراجها</string>\n    <string name=\"password_strength_very_weak\">ضعيف جدًا</string>\n    <string name=\"password_strength_weak\">ضعيف</string>\n    <string name=\"password_strength_fair\">مقبول</string>\n    <string name=\"password_strength_good\">جيد</string>\n    <string name=\"password_strength_strong\">قوي</string>\n    <string name=\"password_strength_unknown\">كلمة المرور طويلة جدًا لتحليل القوة</string>\n    <string name=\"pref_pin_keyboard_title\">استخدام لوحة المفاتيح PIN على شاشة القفل</string>\n    <string name=\"pref_pin_keyboard_summary\">مكّن هذا إذا كنت تريد تمكين لوحة مفاتيح PIN على شاشة القفل. هذا يعمل فقط مع كلمات المرور الرقمية</string>\n    <string name=\"title_activity_preferences\">الإعدادات</string>\n    <string name=\"title_activity_manage_groups\">أدر المجموعات</string>\n    <string name=\"title_activity_transfer\">انقل المدخلات</string>\n    <string name=\"title_activity_about\">عن</string>\n    <string name=\"title_activity_edit_entry\">عدّل الإدخال</string>\n    <string name=\"title_activity_scan_qr\">امسح رمز QR</string>\n    <string name=\"title_activity_import_entries\">استورد مدخلات</string>\n    <string name=\"title_activity_assign_icons\">عيّن أيقونات</string>\n    <string name=\"title_activity_licenses\">تراخيص الطرف الثالث</string>\n    <string name=\"dialog_wipe_entries_title\">احذف المدخلات</string>\n    <string name=\"dialog_wipe_entries_message\">يحتوي مخزنك بالفعل على إدخالات. هل تريد إزالة هذه الإدخالات قبل استيراد هذا الملف؟\\n\\n<b>عند القيام بذلك، ستفقد الوصول بشكل دائم إلى الإدخالات الموجودة في الخزنة.</b></string>\n    <string name=\"dialog_wipe_entries_checkbox\">حذف محتويات المخزن</string>\n    <string name=\"import_from_clipboard_title\">استورد من الحافظة</string>\n    <string name=\"import_from_clipboard_message\">وجدنا عنوان uri صالح على حافظتك.\\n\\n<b>الاسم</b>: %1$s\\n<b>المُصدِّر</b>: %2$s\\n\\nأتريد استخدامه لملء هذا الإدخال؟</string>\n    <string name=\"panic_trigger_ignore_toast\">تلقى Aegis حالة من الذعر ولكن الإعداد مُعطّل، يتجاهل</string>\n    <string name=\"pref_panic_trigger_title\">احذف المخزن على الزناد الذعر</string>\n    <string name=\"pref_panic_trigger_summary\">احذف المخزن عند تلقي مصدر ذعر من Ripple</string>\n    <string name=\"import_vault\">استورد مخزن Aegis</string>\n    <string name=\"import_vault_hint\">هل تريد الاستيراد من تطبيق 2FA مختلف؟ أكمل الإعداد أولاً ثم انتقل إلى قائمة الإعدادات.</string>\n    <plurals name=\"import_duplicate_toast\">\n        <item quantity=\"zero\">لم يُؤشَّر %d من التكرار المحتمل. الرجاء مراجعة قائمة الإدخالات.</item>\n        <item quantity=\"one\">لم يُؤشَّر %d من التكرار المحتمل. الرجاء مراجعة قائمة الإدخالات.</item>\n        <item quantity=\"two\">لم يُؤشَّر %d من التكرار المحتمل. الرجاء مراجعة قائمة الإدخالات.</item>\n        <item quantity=\"few\">لم يُؤشَّر %d من التكرارات المحتملة. الرجاء مراجعة قائمة الإدخالات.</item>\n        <item quantity=\"many\">لم يُؤشَّر %d من التكرارات المحتملة. الرجاء مراجعة قائمة الإدخالات.</item>\n        <item quantity=\"other\">لم يُؤشَّر %d من التكرارات المحتملة. الرجاء مراجعة قائمة الإدخالات.</item>\n    </plurals>\n    <string name=\"importer_help_2fas\">وفّر ملف النسخ الاحتياطي 2FAS Authenticator.</string>\n    <string name=\"importer_help_aegis\">وفّر ملف Aegis للتصدير / النسخ الاحتياطي.</string>\n    <string name=\"importer_help_authenticator_plus\">وفّر ملف تصدير Authenticator Plus الذي حُصل عليه من خلال <b>الإعدادات -&gt; النسخ الاحتياطي &amp; استعادة -&gt; تصدير كنص و HTML</b>.</string>\n    <string name=\"importer_help_authy\">وفّر نسخة من <b> /data/data/com.authy.authy/shared_prefs/com.authy.storage.tokens.authenticator.xml</b>، الموجود في دليل التخزين الداخلي لـ Authy.</string>\n    <string name=\"importer_help_andotp\">توفير ملف andOTP تصدير / نسخ احتياطي.</string>\n    <string name=\"importer_help_bitwarden\">وفّر ملف تصدير/نسخ احتياطي لـ Bitwarden. الملفات المُعمَّاة غير مدعومة.</string>\n    <string name=\"importer_help_battle_net_authenticator\">يرجى توفير نسخة من <b>/data/data/com.blizzard.messenger/shared_prefs/com.blizzard.messenger.authenticator_preferences.xml</b>، الموجود في دليل التخزين الداخلي لـ Battle.net Authenticator.</string>\n    <string name=\"importer_help_duo\">توفير نسخة من <b>/data/data/com.duosecurity.duomobile/files/duokit/accounts.json</b>، الموجودة في دليل التخزين الداخلي لـ DUO.</string>\n    <string name=\"importer_help_ente_auth\">وفّر ملف تصدير Ente Auth. حاليًا فقط الملفات غير المُعمَّاة مدعومة.</string>\n    <string name=\"importer_help_freeotp\">FreeOTP 2: توفير ملف احتياطي.\\nFreeOTP 1.x: توفير نسخة من <b>/data/data/org.fedorahosted.freeotp/shared_prefs/tokens.xml</b>، الموجود في دليل التخزين الداخلي لـ FreeOTP.</string>\n    <string name=\"importer_help_freeotp_plus\">توفير ملف تصدير FreeOTP +.</string>\n    <string name=\"importer_warning_title_freeotp2\">توافق مع FreeOTP 2</string>\n    <string name=\"importer_warning_message_freeotp2\">هناك عدد من المشاكل في FreeOTP 2 التي يمكن أن تؤدي إلى وجود نسخ احتياطية فاسدة. سوف يحاول درع إنقاذ أكبر عدد ممكن من الإدخالات، ولكن من الممكن أن يفشل البعض أو حتى الجميع في الاستيراد.</string>\n    <string name=\"importer_help_google_authenticator\"><b>يتم دعم ملفات قاعدة البيانات فقط من Google Authenticator v5.10 والإصدارات السابقة</b>.\\n\\nتوفير نسخة من<b>/data/data/com.google.android.apps.authenticator2/databases/databases</b>،الموجود في دليل التخزين الداخلي لـ Google Authenticator.</string>\n    <string name=\"importer_help_microsoft_authenticator\">توفير نسخة من<b>/data/data/com.azure.authenticator/databases/PhoneFactor</b>، الموجود في دليل التخزين الداخلي لـ Microsoft Authenticator.</string>\n    <string name=\"importer_help_plain_text\">وفّر ملف نصي عادي مع Google Authenticator URI في كل سطر.</string>\n    <string name=\"importer_help_proton_authenticator\">وفّر ملف تصدير Proton Authenticator (.json) الذي حُصل عليه من خلال <b>الإعدادات -&gt; صدِّر</b>.</string>\n    <string name=\"importer_help_steam\"><b>لا يتم دعم Steam v3.0 والإصدارات الأحدث</b>. توفير نسخة من<b>/data/data/com.valvesoftware.android.steam.community/files/Steamguard-*.json</b>، الموجود في دليل التخزين الداخلي لـ Steam.</string>\n    <string name=\"importer_help_stratum\">جهّز ملف تصدير Stratum تم الحصول عليه من خلال <b>الإعدادات -&gt; النسخ الاحتياطي -&gt; النسخ الاحتياطي للملف المشفر (موصى به)</b>.</string>\n    <string name=\"importer_help_totp_authenticator\">وفّر ملف تصدير TOTP Authenticator.</string>\n    <string name=\"importer_help_winauth\">وفّر ملف تصدير WinAuth.</string>\n    <string name=\"import_assign_icons_dialog_title\">عيّن أيقونات</string>\n    <string name=\"import_assign_icons_dialog_text\">هل تريد تعيين أيقونات إلى المدخلات المستوردة؟</string>\n    <string name=\"importer_encrypted_exception_google_authenticator\">تخطَّى الإدخال المُعمّى: %s</string>\n    <string name=\"importer_help_direct\">استيراد الإدخالات مباشرة من %s. يتطلب هذا تثبيت التطبيق على هذا الجهاز ومنح حق الوصول إلى الجذر Aegis.</string>\n    <string name=\"groups\">المجموعات</string>\n    <string name=\"pref_focus_search\">التركيز على البحث عند بدء التطبيق</string>\n    <string name=\"pref_focus_search_summary\">التركيز على البحث مباشرةً بعد فتح التطبيق.</string>\n    <string name=\"pref_grouping_halves\">نصفان</string>\n    <string name=\"pref_grouping_none\">بلا تجميع</string>\n    <string name=\"pref_grouping_size_two\">مجموعات من 2</string>\n    <string name=\"pref_grouping_size_three\">مجموعات من 3</string>\n    <string name=\"pref_grouping_size_four\">مجموعات من 4</string>\n    <string name=\"pref_copy_behavior_never\">أبدًا</string>\n    <string name=\"pref_copy_behavior_single_tap\">نقرة واحدة</string>\n    <string name=\"pref_copy_behavior_double_tap\">نقرتين</string>\n    <string name=\"pref_account_name_position_hidden\">مختفي</string>\n    <string name=\"pref_account_name_position_end\">بجانب المصدر</string>\n    <string name=\"pref_account_name_position_below\">أسفل المصدر</string>\n    <plurals name=\"time_elapsed_seconds\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"zero\">منذ %d ثواني</item>\n        <item quantity=\"one\">منذ ثانية</item>\n        <item quantity=\"two\">منذ ثانيتين</item>\n        <item quantity=\"few\">منذ %d ثواني</item>\n        <item quantity=\"many\">منذ %d ثانية</item>\n        <item quantity=\"other\">منذ %d ثانية</item>\n    </plurals>\n    <plurals name=\"time_elapsed_minutes\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"zero\">منذ %d دقيقة</item>\n        <item quantity=\"one\">منذ %d دقيقة</item>\n        <item quantity=\"two\">منذ %d دقائق</item>\n        <item quantity=\"few\">منذ %d دقائق</item>\n        <item quantity=\"many\">منذ %d دقيقة</item>\n        <item quantity=\"other\">منذ %d دقيقة</item>\n    </plurals>\n    <plurals name=\"time_elapsed_hours\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"zero\">منذ %d ساعة</item>\n        <item quantity=\"one\">منذ %d ساعة</item>\n        <item quantity=\"two\">منذ %d ساعات</item>\n        <item quantity=\"few\">منذ %d ساعات</item>\n        <item quantity=\"many\">منذ %d ساعة</item>\n        <item quantity=\"other\">منذ %d ساعة</item>\n    </plurals>\n    <plurals name=\"time_elapsed_days\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"zero\">منذ %d يوم</item>\n        <item quantity=\"one\">منذ %d يوم</item>\n        <item quantity=\"two\">منذ %d أيام</item>\n        <item quantity=\"few\">منذ %d أيام</item>\n        <item quantity=\"many\">منذ %d يوم</item>\n        <item quantity=\"other\">منذ %d يوم</item>\n    </plurals>\n    <plurals name=\"time_elapsed_years\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"zero\">منذ %d سنة</item>\n        <item quantity=\"one\">منذ %d سنة</item>\n        <item quantity=\"two\">منذ %d سنوات</item>\n        <item quantity=\"few\">منذ %d سنوات</item>\n        <item quantity=\"many\">منذ %d سنة</item>\n        <item quantity=\"other\">منذ %d سنة</item>\n    </plurals>\n    <plurals name=\"dropdown_checkboxes_default_count\">\n        <item quantity=\"zero\">تم تحديد %d عناصر</item>\n        <item quantity=\"one\">تم تحديد %d عنصر</item>\n        <item quantity=\"two\">تم تحديد %d عناصر</item>\n        <item quantity=\"few\">تم تحديد %d عناصر</item>\n        <item quantity=\"many\">تم تحديد %d عنصر</item>\n        <item quantity=\"other\">تم تحديد %d عنصر</item>\n    </plurals>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-ar-rSA-v29/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"system_theme_title\">الإفتراضي للنظام</string>\n    <string name=\"system_amoled_theme_title\">افتراضي النظام (أموليد AMOLED)</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-ast-rES/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources xmlns:tools=\"http://schemas.android.com/tools\">\n    <string name=\"action_settings\">Configuración</string>\n    <string name=\"action_about\">Tocante a</string>\n    <string name=\"action_delete\">Desaniciar</string>\n    <string name=\"action_transfer\">Tresferir</string>\n    <string name=\"action_edit_icon\">Editar l\\'iconu</string>\n    <string name=\"action_reset_usage_count\">Reafitar el númberu d\\'usos</string>\n    <string name=\"action_reset_usage_count_dialog\">¿De xuru que quies reafitar el númberu d\\'usos d\\'esta entrada?</string>\n    <string name=\"action_default_icon\">Reafitar l\\'iconu</string>\n    <string name=\"discard\">Escartar</string>\n    <string name=\"save\">Guardar</string>\n    <string name=\"all\">Too</string>\n    <string name=\"issuer\">Emisor</string>\n    <string name=\"yandex_pin\">PIN (4–16 díxitos)</string>\n    <string name=\"motp_pin\">PIN (4 díxitos)</string>\n    <string name=\"suggested\">Suxerse</string>\n    <string name=\"usage_count\">Númberu d\\'usos</string>\n    <string name=\"warning\">Alvertencia</string>\n    <string name=\"pref_cat_appearance_app\">Aplicación</string>\n    <string name=\"pref_cat_appearance_entries\">Entraes</string>\n    <string name=\"pref_cat_backups_android\">Android</string>\n    <string name=\"pref_cat_backups_auto\">Copies de seguranza automátiques</string>\n    <string name=\"pref_section_behavior_title\">Comportamientu</string>\n    <string name=\"pref_section_behavior_summary\">Personaliza\\'l comportamientu al interactuar cola llista d\\'entraes.</string>\n    <string name=\"pref_section_appearance_title\">Aspeutu</string>\n    <string name=\"pref_section_appearance_summary\">Configura l\\'estilu, la llingua ya otros valores qu\\'afeuten al aspeutu de l\\'aplicación.</string>\n    <string name=\"pref_section_security_title\">Seguranza</string>\n    <string name=\"pref_section_security_summary\">Configura\\'l cifráu, el bloquéu biométricu, el bloquéu automáticu ya otros valores de seguranza.</string>\n    <string name=\"pref_section_import_export_title\">Importación ya esportación</string>\n    <string name=\"pref_section_import_export_summary\">Importa les copies de seguranza d\\'Aeguis o d\\'otres aplicaciones del mesmu tipu. Crea ficheros d\\'esportación manuales de l\\'arca d\\'Aeguis.</string>\n    <string name=\"pref_section_audit_log_title\">Rexistros d\\'auditoría</string>\n    <string name=\"pref_section_backups_title\">Copies de seguranza</string>\n    <string name=\"pref_section_backups_summary\">Configura\\'l llugar onde s\\'atroxen les copies de seguranza o activa la participación nel sistema de copies de seguranza na ñube d\\'Android.</string>\n    <string name=\"pref_section_icon_packs\">Paquetes d\\'iconos</string>\n    <string name=\"pref_section_icon_packs_summary\">Xestiona ya importa paquetes d\\'iconos</string>\n    <string name=\"pref_select_theme_title\">Estilu</string>\n    <string name=\"pref_dynamic_colors_title\">Colores dinámicos</string>\n    <string name=\"pref_view_mode_title\">Mou de la visualización</string>\n    <string name=\"pref_lang_title\">Llingua</string>\n    <string name=\"pref_show_icons_title\">Amosar los iconos</string>\n    <string name=\"pref_show_icons_summary\">Amuesa los iconos al llau de cada entrada</string>\n    <string name=\"pref_code_group_size_title\">Agrupamientu de díxitos</string>\n    <string name=\"pref_code_group_size_summary\">Seleiciona\\'l númberu de díxitos pol que s\\'agrupen los códigos</string>\n    <string name=\"pref_account_name_position_title\">Amosar el nome de la cuenta</string>\n    <string name=\"pref_show_next_code_title\">Amosar el códigu siguiente</string>\n    <string name=\"pref_show_next_code_summary\">Xenera y amuesa\\'l códigu siguiente per adelantao</string>\n    <string name=\"pref_expiration_state_title\">Indicar cuándo tán a piques de caducar los códigos</string>\n    <string name=\"pref_expiration_state_summary\">Camuda\\'l color de los códigos y fai que parpaguien cuando tán a piques de caducar</string>\n    <string name=\"pref_expiration_state_fallback\">Camuda\\'l color de los códigos cuando tán a piques de caducar</string>\n    <string name=\"pref_shared_issuer_account_name_title\">Amosar el nome de la cuenta namás cuando seya necesariu</string>\n    <string name=\"pref_import_file_title\">Importar d\\'un ficheru</string>\n    <string name=\"pref_import_file_summary\">Importa los pases d\\'un ficheru</string>\n    <string name=\"pref_android_backups_title\">Copies de seguranza na ñube</string>\n    <string name=\"pref_android_backups_summary\">Permite que\\'l sistema de copies de seguranza d\\'Android incluya l\\'arca d\\'Aegis. Esta opción namás ye compatible coles arques cifraes.</string>\n    <string name=\"pref_android_backups_hint\"><i>Siempres se permiten les copies de seguranza D2D, independientemente de la configuración d\\'arriba</i></string>\n    <string name=\"pref_backups_title\">Crear automáticamente copies de seguranza</string>\n    <string name=\"pref_backups_summary\">Crea automáticamente copies de seguranza de l\\'arca nel almacenamientu esternu al facer cambeos. Esta opción namás ye compatible coles arques cifraes.</string>\n    <string name=\"pref_backups_reminder_title\">Recordatoriu de copia de seguranza</string>\n    <string name=\"pref_backups_versioning_strategy_title\">Estratexa de copies de seguranza</string>\n    <string name=\"pref_backups_versioning_strategy_dialog_title\">Seleiciona una estratexa de copies de seguranza</string>\n    <string name=\"pref_backups_location_title\">Llocalización de les copies de seguranza</string>\n    <string name=\"pref_backups_location_summary\">Les copies de seguranza van atroxase en</string>\n    <string name=\"pref_backup_location_summary\">La copia de seguranza va atroxase en</string>\n    <string name=\"pref_backups_trigger_title\">Facer una copia de seguranza</string>\n    <string name=\"pref_backups_trigger_summary\">Fai manualmente una copia de seguranza</string>\n    <string name=\"pref_backups_versions_title\">Númberu de versiones a caltener</string>\n    <plurals name=\"pref_backups_versions_summary\">\n        <item quantity=\"one\">Caltién %1$d versión de la copia de seguranza</item>\n        <item quantity=\"other\">Caltién %1$d versiones de la copia de seguranza</item>\n    </plurals>\n    <string name=\"pref_import_app_title\">Importar d\\'una aplicación</string>\n    <string name=\"pref_import_app_summary\">Importa los pases d\\'una aplicación (rique l\\'accesu de root)</string>\n    <string name=\"pref_export_title\">Esportar</string>\n    <string name=\"pref_export_summary\">Esporta l\\'arca</string>\n    <string name=\"pref_password_reminder_title\">Recordatoriu de contraseña</string>\n    <string name=\"pref_google_auth_export_title\">Esportación de Google Authenticator</string>\n    <string name=\"pref_google_auth_export_descriptor\">Xenera códigos QR d\\'esportación compatibles con Google Authenticator</string>\n    <string name=\"pref_google_auth_export_no_data\">Nun hai datos pa esportar</string>\n    <plurals name=\"pref_google_auth_export_incompatible_entries\">\n        <item quantity=\"one\">Saltóse %d entrada incompatible</item>\n        <item quantity=\"other\">Saltáronse %d entraes incompatibles</item>\n    </plurals>\n    <string name=\"pref_password_reminder_summary\">Amuesa un recordatoriu (%s) pa introducir la contraseña ya nun la escaecer.</string>\n    <string name=\"pref_password_reminder_summary_disabled\">Desactivóse</string>\n    <string name=\"pref_secure_screen_title\">Seguranza de la pantalla</string>\n    <string name=\"pref_secure_screen_summary\">Bloquia tou tipu de captura y/o grabación de pantalla quier dientro, quier fuera de l\\'aplicación</string>\n    <string name=\"pref_tap_to_reveal_title\">Tocar pa desvelar</string>\n    <string name=\"pref_tap_to_reveal_summary\">Los pases anúbrese por defeutu. Toca nellos pa desvelar el códigu.</string>\n    <string name=\"pref_tap_to_reveal_time_title\">Tiempu d\\'espera pa volver anubrir los pases</string>\n    <string name=\"pref_auto_lock_title\">Bloquéu automáticu</string>\n    <string name=\"pref_auto_lock_summary\">Al %s</string>\n    <string name=\"pref_auto_lock_summary_disabled\">Desactivóse</string>\n    <string name=\"pref_auto_lock_prompt\">Bloquiar automáticamente Aegis al</string>\n    <string name=\"pref_auto_lock_type_back_button\">Primir el botón «Atrás»</string>\n    <string name=\"pref_auto_lock_type_minimize\">Minimizar l\\'aplicación</string>\n    <string name=\"pref_auto_lock_type_device_lock\">Bloquiar el preséu</string>\n    <string name=\"pref_backup_password_category\">Copia de seguranza ya esportación</string>\n    <string name=\"pref_backup_password_title\">Usar una contraseña nueva</string>\n    <string name=\"pref_backup_password_summary\">Si s\\'activa la opción, la contraseña que s\\'usa pa desbloquiar l\\'aplicación xá nun se pue usar pa descifrar les copies de seguranza ya les exportaciones.</string>\n    <string name=\"pref_backup_password_change_title\">Usar otra contraseña</string>\n    <string name=\"pref_backup_password_change_summary\">Configura una contraseña nueva que ye la que va usase pa cifrar l\\'arca demientres les copies de seguranza ya les esportaciones.</string>\n    <string name=\"pref_encryption_title\">Cifráu</string>\n    <string name=\"pref_encryption_summary\">Cifra l\\'arca ya desblóquiala con una contraseña o cola biometría</string>\n    <string name=\"pref_biometrics_title\">Desbloquéu biométricu</string>\n    <string name=\"pref_biometrics_summary\">Permite que l\\'autenticación biométrica desbloquie l\\'arca</string>\n    <string name=\"pref_search_behavior_type_name\">Nome</string>\n    <string name=\"pref_search_behavior_type_issuer\">Emisor</string>\n    <string name=\"pref_search_behavior_type_note\">Nota</string>\n    <string name=\"pref_search_behavior_type_groups\">Grupos</string>\n    <string name=\"pref_set_password_title\">Camudar la contraseña</string>\n    <string name=\"pref_set_password_summary\">Configura la contraseña que vas precisar pa desbloquiar l\\'arca</string>\n    <string name=\"no_events_title\">Nun s\\'informó de nengún eventu</string>\n    <string name=\"no_events_description\">Nun s\\'informó de nengún eventu importante na aplicación</string>\n    <string name=\"event_title_vault_unlocked\">Arca desbloquiada</string>\n    <string name=\"event_description_vault_unlocked\">L\\'arca desbloquióse correutamente</string>\n    <string name=\"event_title_backup_created\">Copia de seguranza creada</string>\n    <string name=\"event_description_backup_created\">Creóse una copia de seguranza de l\\'arca correutamente</string>\n    <string name=\"event_title_android_backup_created\">Copia de seguranza creada por Android</string>\n    <string name=\"event_description_android_backup_created\">Android creó una copia de seguranza de l\\'arca correutamente</string>\n    <string name=\"event_title_vault_exported\">Arca esportada</string>\n    <string name=\"event_description_vault_exported\">Esportóse una copia de l\\'arca</string>\n    <string name=\"event_title_entry_shared\">Entrada compartida</string>\n    <string name=\"event_description_entry_shared\">Compartióse una entrada</string>\n    <string name=\"event_title_vault_unlock_failed_password\">Error de desbloquéu de l\\'arca (contraseña)</string>\n    <string name=\"event_description_vault_unlock_failed_password\">Hebo un intentu de desbloquiar l\\'arca con una contraseña que falló</string>\n    <string name=\"event_title_vault_unlock_failed_biometrics\">Error de desbloquéu de l\\'arca (biometría)</string>\n    <string name=\"event_description_vault_unlock_failed_biometrics\">Hebo un intentu de desbloquiar l\\'arca cola biometría que falló</string>\n    <string name=\"event_unknown\">Tipu d\\'eventu desconocíu</string>\n    <string name=\"today_at_time\">Güei a les %1$s</string>\n    <string name=\"day_of_week_at_time\">%1$s a les %2$s</string>\n    <string name=\"export_encrypted\">Cifrar l\\'arca</string>\n    <string name=\"export_help\">Esta aición esporta l\\'arca fuera del almacenamientu internu d\\'Aegis. Seleiciona\\'l formatu col que quies esportar:</string>\n    <string name=\"export_warning_unencrypted\">Tas a piques d\\'esportar una copia ensin cifrar de l\\'arca d\\'Aegis. <b>Nun s\\'aconseya</b>.</string>\n    <string name=\"export_warning_password\">Les esportaciones cífrense con otra contraseña que se configura na configuración de seguranza.</string>\n    <string name=\"understand_risk_accept\">Entiendo\\'l riesgu</string>\n    <string name=\"export_format_aegis\">Aegis (.JSON)</string>\n    <string name=\"export_format_google_auth_uri\">Ficheru de testu (.TXT)</string>\n    <string name=\"export_format_html\">Páxina web (.HTML)</string>\n    <string name=\"export_format_hint\">Formatu de la esportación</string>\n    <string name=\"export_all_groups\">Esportar tolos grupos</string>\n    <plurals name=\"export_groups_selected_count\">\n        <item quantity=\"one\">Seleicionóse %d grupu</item>\n        <item quantity=\"other\">Seleicionáronse %d grupos</item>\n    </plurals>\n    <string name=\"export_html_title\" comment=\"The title of an HTML export document\">Esportación d\\'Aeguis Authenticator</string>\n    <string name=\"choose_authentication_method\">Seguranza</string>\n    <string name=\"authentication_method_explanation\">Aegis ye una aplicación enfocada na seguranza p\\'autenticase en dos pasos. Los pases atróxense nuna arca que se pue cifrar cola contraseña qu\\'escueyas, polo que si un atacante consigue\\'l ficheru cifráu de l\\'arca, nun va ser a acceder al so conteníu si nun sabe la contraseña.\\n\\nSeleicionemos por ti la opción que nos paez más afayadiza pal preséu.</string>\n    <string name=\"authentication_method_none\">Nada</string>\n    <string name=\"authentication_method_none_description\">Nun precises nenguna contraseña pa desbloquiar l\\'arca darréu que nun va cifrase. <b>Nun s\\'aconseya esta opción</b>.</string>\n    <string name=\"authentication_method_password\">Contraseña</string>\n    <string name=\"authentication_method_password_description\">Precises una contraseña pa desbloquiar l\\'arca.</string>\n    <string name=\"authentication_method_password_explanation\">Alvertencia: Si escaeces la contraseña, pierdes permanentemente l\\'accesu a los pases. Nun hai forma de recuperalos ensin ella.</string>\n    <string name=\"authentication_method_biometrics\">Biometría</string>\n    <string name=\"authentication_method_biometrics_description\">Amás de la contraseña, pues usar la biometría (les buelgues o la cara) rexistrada nel preséu pa desbloquiar l\\'arca.</string>\n    <string name=\"authentication\">Desbloquéu de l\\'arca</string>\n    <string name=\"authentication_multiline\" comment=\"The newline in the middle is used for aesthetic purposes\">Desbloquéu\\nde l\\'arca</string>\n    <string name=\"auth_use_biometrics\">O toca equí pa usar la <font fgcolor=\"#FF0D86C1\">biometría</font></string>\n    <string name=\"set_password\">Introduz una contraseña</string>\n    <string name=\"set_group\">Introduz un nome pal grupu</string>\n    <string name=\"set_number\">Introduz un númberu</string>\n    <string name=\"set_password_confirm\">Confirma la contraseña</string>\n    <string name=\"invalid_password\">La contraseña ye incorreuta</string>\n    <string name=\"invalidated_biometrics\">Detectóse un cambéu na configuración de seguranza del preséu. Vete a «Aegis -&gt; Configuración -&gt; Seguranza -&gt; Desbloquéu biométricu» pa desactivar ya volver activar el desbloquéu biométricu.</string>\n    <string name=\"password_reminder_freq_never\">Enxamás</string>\n    <string name=\"password_reminder_freq_weekly\">Selmanalmente</string>\n    <string name=\"password_reminder_freq_biweekly\">Cada dos selmanes</string>\n    <string name=\"password_reminder_freq_monthly\">Mensualmente</string>\n    <string name=\"password_reminder_freq_quarterly\">Trimestralmente</string>\n    <string name=\"enter_password_2fas_message\">Paez qu\\'esta copia de seguranza de 2FAS ta cifrada. Introduz la contraseña abaxo.</string>\n    <string name=\"enter_password_authy_message\">Paez que los pases d\\'Authy tán cifraos. Zarra Aeguis, abri Authy ya desbloquia los pases cola contraseña. Sicasí, Aeguis pue tentar de descifrar los pases d\\'Authy si introduces la contraseña abaxo.</string>\n    <string name=\"enter_password_aegis_title\">Introduz la contraseña de la importación</string>\n    <string name=\"period_hint\">Periodu (segundos)</string>\n    <string name=\"algorithm_hint\">Hash</string>\n    <string name=\"type\">Tipu</string>\n    <string name=\"share\">Compartir</string>\n    <string name=\"yes\">Sí</string>\n    <string name=\"no\">Non</string>\n    <string name=\"undo\">Desfacer</string>\n    <string name=\"unlock\">Desbloquiar</string>\n    <string name=\"advanced\">Configuración avanzada</string>\n    <string name=\"counter\">Contador</string>\n    <string name=\"digits\">Díxitos</string>\n    <string name=\"secret\">Secretu</string>\n    <string name=\"scan\">Escaniar un códigu QR</string>\n    <string name=\"scan_image\">Escaniar una imaxe</string>\n    <string name=\"enter_manually\">Crear una entrada</string>\n    <string name=\"set_up_biometric\">Configuración del desbloquéu biométricu</string>\n    <string name=\"copy\">Copiar</string>\n    <string name=\"edit\">Editar</string>\n    <string name=\"assign_groups_dialog_dropdown\">Seleiciona un grupu</string>\n    <string name=\"favorite\" comment=\"Verb\">Meter en Favoritos</string>\n    <string name=\"unfavorite\" comment=\"Verb\">Quitar en Favoritos</string>\n    <string name=\"error_all_caps\">ERROR</string>\n    <string name=\"password\">Contraseña</string>\n    <string name=\"confirm_password\">Confirmación</string>\n    <string name=\"show_password\">Amosar la contraseña</string>\n    <string name=\"new_entry\">Entrada nueva</string>\n    <string name=\"add_new_entry\">Amiestu d\\'una entrada nueva</string>\n    <string name=\"unlock_vault_error\">Nun se pudo desbloquiar l\\'arca</string>\n    <string name=\"unlock_vault_error_description\">La contraseña ye incorreuta. Asegúrate de que nun la teclexares mal.</string>\n    <string name=\"password_equality_error\">Les contraseñes habríen ser idéntiques ya nun tar baleres</string>\n    <string name=\"snackbar_authentication_method\">Esbilla un métodu d\\'autenticación</string>\n    <string name=\"encrypting_vault\">Cifrando l\\'arca</string>\n    <string name=\"exporting_vault\">Esportando l\\'arca</string>\n    <string name=\"reading_file\">Lleendo\\'l ficheru</string>\n    <string name=\"requesting_root_access\">Consiguiendo l\\'accesu de superusuariu</string>\n    <string name=\"analyzing_qr\">Analizándo\\'l códigu QR</string>\n    <string name=\"analyzing_qr_multiple\">Analizando\\'l códigu QR %1$d/%2$d (%3$s)</string>\n    <plurals name=\"added_new_entries\">\n        <item quantity=\"one\">Amestóse %d entrada nueva a l\\'arca</item>\n        <item quantity=\"other\">Amestáronse %d entraes nueves a l\\'arca</item>\n    </plurals>\n    <string name=\"importing_icon_pack\">Importando\\'l paquete d\\'iconos</string>\n    <string name=\"delete_entry\">Desaniciu d\\'una entrada</string>\n    <string name=\"delete_entry_description\">¿De xuru que quies desaniciar esta entrada?</string>\n    <string name=\"delete_entry_explanation\">Esta aición nun desactiva l\\'autenticación en dos pasos de:\\n<b>%s</b>\\n\\nPa evitar la perda del accesu, asegúrate de que desactivesti l\\'autenticación en dos pasos o de que tienes un mou alternativu de xenerar códigos pa esti serviciu.</string>\n    <string name=\"delete_entries\">Desaniciu d\\'entraes</string>\n    <plurals name=\"delete_entries_description\">\n        <item quantity=\"one\">¿De xuru que quies desaniciar %d entrada?</item>\n        <item quantity=\"other\">¿De xuru que quies desaniciar %d entraes?</item>\n    </plurals>\n    <string name=\"discard_changes\">¿Quies escartar los cambeos?</string>\n    <string name=\"discard_changes_description\">Nun se guardaron los cambeos</string>\n    <string name=\"saving_profile_error\">Hebo un error al guardar el perfil</string>\n    <string name=\"welcome\">Afáyate</string>\n    <string name=\"app_description\">Aegis ye una aplicación gratuita, segura ya de códigu abiertu p\\'autenticase en dos pasos</string>\n    <string name=\"setup_completed\">Completóse la configuración</string>\n    <string name=\"setup_completed_description\">Aegis ta configuráu ya xá se pue usar.</string>\n    <string name=\"vault_not_found\">Nun s\\'atopó l\\'arca. Aniciando la configuración…</string>\n    <string name=\"copied\">Copióse</string>\n    <string name=\"errors_copied\">Los errores copiáronse nel cartafueyu</string>\n    <string name=\"version_copied\">La versión copióse al cartafueyu</string>\n    <string name=\"error_occurred\">Prodúxose un error</string>\n    <string name=\"decryption_error\">Prodúxose un error mentanto se desbloquiaba l\\'arca</string>\n    <string name=\"decryption_corrupt_error\">Prodúxose un error mentanto se desbloquiaba l\\'arca. L\\'arca quiciabes tea toyida.</string>\n    <string name=\"saving_error\">Prodúxose un error mentanto se guardaba nel arca</string>\n    <string name=\"vault_init_error\">Prodúxose un error mentanto s\\'aniciaba l\\'arca</string>\n    <string name=\"vault_load_error\">Prodúxose un error mentanto se cargaba l\\'arca del almacenamientu</string>\n    <string name=\"biometric_decrypt_error\">Prodúxose un error mentanto se descifraba l\\'arca cola autenticación biométrica. Esto namás suel pasar si la configuración de seguranza del preséu camudó. Desbloquia l\\'arca cola contraseña ya volvi configurar l\\'autenticación biométrica na configuración d\\'Aegis.</string>\n    <string name=\"biometric_init_error\">Prodúxose un error mentanto se tresnaba l\\'autenticación biométrica. Esto namás suel pasar si la configuración de seguranza del preséu camudó. Desbloquia l\\'arca cola contraseña ya volvi configurar l\\'autenticación biométrica na configuración d\\'Aegis.</string>\n    <string name=\"disable_encryption\">Desactivación del cifráu</string>\n    <string name=\"disable_encryption_description\">¿De xuru que quies desactivar el cifráu? Esta aición fai que l\\'arca s\\'atroxe en testu planu. <b>Tamién se desactiven les copies de seguranza automátiques</b>.</string>\n    <string name=\"enable_encryption_error\">Prodúxose un error mentanto s\\'activaba\\'l cifráu</string>\n    <string name=\"disable_encryption_error\">Prodúxose un error mentanto se desactivaba\\'l cifráu</string>\n    <string name=\"backup_successful\">La copia de seguranza esportóse correutamente</string>\n    <string name=\"backup_error\">Prodúxose un error mentanto se tentaba de crear una copia de seguranza</string>\n    <string name=\"backup_status_success\">La última copia de seguranza correuta: %s</string>\n    <string name=\"backup_status_failed\">La última copia de seguranza que falló: %s</string>\n    <string name=\"backup_status_none\">Entá nun se fizo nenguna copia de seguranza</string>\n    <string name=\"backup_warning_password\">Les copies de seguranza cífrense con otra contraseña que se configura na configuración de seguranza</string>\n    <string name=\"documentsui_error\">Paez qu\\'al sistema fálta-y el componente «DocumentsUI». Esti componente ye importante ya necesariu pa la seleición ya creación de documentos. Si usesti una ferramienta pa facer «debloat» nel preséu, ye posible que lu desaniciares accidentalmente, polo que tienes que lu volver instalar.</string>\n    <string name=\"icon_pack_import_error\">Prodúxose un error mentanto s\\'importaba un paquete d\\'iconos</string>\n    <string name=\"icon_pack_import_exists_error\">Yá esiste\\'l paquete d\\'iconos que tentes d\\'importar. ¿Quies sobrescribilu?</string>\n    <string name=\"icon_pack_delete_error\">Prodúxose un error mentanto se desaniciaba un paquete d\\'iconos</string>\n    <plurals name=\"icon_pack_info\">\n        <item quantity=\"one\">%d iconu</item>\n        <item quantity=\"other\">%d iconos</item>\n    </plurals>\n    <string name=\"icon_custom\">Iconu personalizáu</string>\n    <string name=\"permission_denied\">Negóse\\'l permisu</string>\n    <string name=\"andotp_new_format\">Formatu nuevu (v0.6.2 o superior) </string>\n    <string name=\"andotp_old_format\">Formatu antiguu (v0.6.2 o inferior) </string>\n    <string name=\"choose_andotp_importer\">¿Qué formatu tien la copia de seguranza d\\'andOTP?</string>\n    <string name=\"choose_totpauth_importer\">¿La copia de seguranza de TOTP Authenticator ta cifrada con una contraseña?</string>\n    <string name=\"choose_application\">Seleiciona l\\'aplicación dende la que quies importar</string>\n    <string name=\"choose_theme\">Seleiciona l\\'estilu deseáu</string>\n    <string name=\"choose_view_mode\">Seleiciona\\'l mou de visualización deseáu</string>\n    <string name=\"parsing_file_error\">Prodúxose un error mentanto s\\'analizaba\\'l ficheru</string>\n    <string name=\"file_not_found\">Error: nun s\\'atopó\\'l ficheru</string>\n    <string name=\"reading_file_error\">Prodúxose un error mentanto se lleía\\'l ficheru</string>\n    <string name=\"app_lookup_error\">Error: l\\'aplicación nun ta instalada</string>\n    <string name=\"app_version_error\">La versión instalada de «%s» nun ye compatible. Les versiones nueves comenzaron a cifrar dalgunos ficheros nel direutoriu del almacenamientu internu, lo que fai qu\\'Aegis nun seya a acceder a la información que precisa pa la importación. Ye probable qu\\'al tentar d\\'importar se produza un error. ¿Quies siguir de toes toes?</string>\n    <string name=\"root_error\">Error: nun ye posible consiguir l\\'accesu de superusuariu</string>\n    <plurals name=\"imported_entries_count\">\n        <item quantity=\"one\">Importóse %d entrada</item>\n        <item quantity=\"other\">Importáronse %d entraes</item>\n    </plurals>\n    <plurals name=\"entries_shown\">\n        <item quantity=\"one\">Amosando %d entrada</item>\n        <item quantity=\"other\">Amosando %d entraes</item>\n    </plurals>\n    <string name=\"intro_import_error_title\">Prodúxose un error mentanto s\\'importaba l\\'arca</string>\n    <string name=\"import_error_title\">Produxéronse errores demientres la importación</string>\n    <string name=\"exporting_vault_error\">Prodúxose un error mentanto s\\'esportaba l\\'arca</string>\n    <string name=\"exported_vault\">Esportóse l\\'arca</string>\n    <string name=\"encryption_set_password_error\">Prodúxose un error mentanto se configuraba la contraseña.</string>\n    <string name=\"encryption_enable_biometrics_error\">Prodúxose un error mentanto s\\'activaba\\'l bloquéu biométricu. Dalgunos preseos tienen implementaciones de l\\'autenticación biométrica deficientes ya ye probable que\\'l de to les tenga. Piensa en cambiar a la configuración qu\\'usa namás la contraseña.</string>\n    <string name=\"no_cameras_available\">Nun hai nenguna cámara disponible</string>\n    <string name=\"read_qr_error\">Prodúxose un error mentanto se lleía\\'l códigu QR</string>\n    <string name=\"read_qr_error_phonefactor\">Aegis nun ye compatible col algoritmu privativu de Microsoft. Asegúrate de que seleiciones «Configurar l\\'aplicación ensin avisos» al configurar l\\'autenticación en dos pasos d\\'Office 365.</string>\n    <string name=\"partial_google_auth_import\">Detectóse una esportación incompleta de Google Authenticator</string>\n    <string name=\"partial_google_auth_import_warning\">Falten dalgunos códigos QR na importación. Nun s\\'atoparon los códigos siguientes:\\n\\n<b>%s</b>\\n\\nPues siguir cola importación d\\'esta esportación parcial mas aconseyamos volver tentalo con tolos códigos QR pa que nun t\\'arriesgues a perder l\\'accesu a nengún pase.</string>\n    <string name=\"missing_qr_code_descriptor\">• Códigu QR %d</string>\n    <string name=\"import_google_auth_failure\">La importación de la esportación de Google Authenticator falló</string>\n    <string name=\"unrelated_google_auth_batches_error\">La esportación contién información d\\'un llote que nun tien rellación. Prueba a importar llotes d\\'unu nunu.</string>\n    <string name=\"no_tokens_can_be_imported\">Como resultáu, nun se pue importar nengún pase</string>\n    <string name=\"unlocking_vault\">Desbloquiando l\\'arca</string>\n    <string name=\"rename_group\">Renomar grupu</string>\n    <string name=\"remove_group\">Desaniciu d\\'un grupu</string>\n    <string name=\"remove_group_description\">¿De xuru que quies quitar esti grupu? Les entraes d\\'esti grupu cambien automáticamente al grupu «Ensin grupu».</string>\n    <string name=\"remove_unused_groups\">Desaniciar grupos ensin usu</string>\n    <string name=\"remove_icon_pack\">Desaniciu d\\'un paquete d\\'iconos</string>\n    <string name=\"remove_icon_pack_description\">¿De xuru que quies quitar esti paquete d\\'iconos? Esta aición nun va tener nengún efeutu sobre les entraes qu\\'usen iconos d\\'esti paquete.</string>\n    <string name=\"details\">Detalles</string>\n    <string name=\"show_error_details\">Amosar los detalles del error</string>\n    <string name=\"lock\">Bloquiar</string>\n    <string name=\"name\">Nome</string>\n    <string name=\"no_group\">Ensin grupu</string>\n    <string name=\"sort\" comment=\"Title of the Sort button in the top action bar of the main view\">Ordenar</string>\n    <string name=\"sort_alphabetically\">Emisor (de l\\'A a la Z)</string>\n    <string name=\"sort_alphabetically_reverse\">Emisor (de la Z a l\\'A)</string>\n    <string name=\"sort_alphabetically_name\">Nome de cuenta (de l\\'A a la Z)</string>\n    <string name=\"sort_alphabetically_name_reverse\">Nome de cuenta (de la Z a l\\'A)</string>\n    <string name=\"sort_usage_count\">Númberu d\\'usos</string>\n    <string name=\"sort_last_used\">Últimu usu</string>\n    <string name=\"sort_custom\">Orde personalizáu</string>\n    <string name=\"last_used\">Últimu usu</string>\n    <string name=\"new_group\">Grupu nuevu…</string>\n    <string name=\"group\">Grupu</string>\n    <string name=\"group_name_hint\">Nome del grupu</string>\n    <string name=\"preference_manage_groups\">Editar los grupos</string>\n    <string name=\"preference_manage_groups_summary\">Xestiona ya desanicia los grupos equí</string>\n    <string name=\"preference_reset_usage_count\">Reafitar el númberu d\\'usos</string>\n    <string name=\"preference_reset_usage_count_summary\">Reafita\\'l númberu d\\'usos de toles entraes de l\\'arca</string>\n    <string name=\"preference_reset_usage_count_dialog\">¿De xuru que quies reafitar el númberu d\\'usos de toles entraes de l\\'arca?</string>\n    <string name=\"note\" comment=\"Users can add a note to an entry\">Nota</string>\n    <string name=\"clear\">Borrar</string>\n    <string name=\"pref_highlight_entry_title\">Rescamplar los pases al tocalos</string>\n    <string name=\"pref_highlight_entry_summary\">Fai que los pases s\\'estremen meyor al rescamplalos temporalmente cuando toques nellos</string>\n    <string name=\"pref_minimize_on_copy_title\">Minimizar al copiar</string>\n    <string name=\"pref_minimize_on_copy_summary\">Minimiza l\\'aplicación dempués de copiar un pase</string>\n    <string name=\"pref_search_behavior_title\">Comportamientu de la busca</string>\n    <string name=\"pref_pause_entry_title\">Paralizar los pases al tocalos</string>\n    <string name=\"pref_pause_entry_summary\">Posa l\\'anovamientu automáticu de los pases al tocar nellos y, polo tanto, nun s\\'anueven mentanto tengan el focu. Esta opción rique l\\'activación de les opciones «Rescamplar los pases al tocalos» o «Tocar pa desvelar».</string>\n    <string name=\"pin_keyboard_description\">Activa la contraseña p\\'activar el tecláu numbéricu. Decátate qu\\'esta opción namás funciona si la contraseña ta formada namás por númberos</string>\n    <string name=\"pin_keyboard_error\">Hebo un error al activar el tecláu numbéricu</string>\n    <string name=\"pin_keyboard_error_description\">Nun ye posible configurar el PIN numbéricu. La contraseña ha tar formada namás por númberos.</string>\n    <string name=\"pin_keyboard_disabled\">La contraseña camudó. El tecláu numbéricu xá nun va apaecer.</string>\n    <string name=\"selected\">Na seleición</string>\n    <string name=\"dark_theme_title\">Estilu escuru</string>\n    <string name=\"light_theme_title\">Estilu claru</string>\n    <string name=\"amoled_theme_title\">Estilu AMOLED</string>\n    <string name=\"system_theme_title\">Opción configurada pol aforrador d\\'enerxía</string>\n    <string name=\"system_amoled_theme_title\">Opción configurada pol aforrador d\\'enerxía (AMOLED)</string>\n    <string name=\"normal_viewmode_title\">Normal</string>\n    <string name=\"compact_mode_title\">Compautu</string>\n    <string name=\"small_mode_title\">Pequeñu</string>\n    <string name=\"unknown_issuer\">Emisor desconocíu</string>\n    <string name=\"unknown_account_name\">Nome de cuenta desconocíu</string>\n    <string name=\"unable_to_process_deeplink\">Nun ye posible procesar l\\'enllaz fondu</string>\n    <string name=\"unable_to_read_qrcode_file\">Nun se posible lleer ya procesar el códigu QR del ficheru: %s.</string>\n    <string name=\"unable_to_process_shared_text\">Nun ye posible procesar el testu compartíu como cadena d\\'OTP</string>\n    <string name=\"unable_to_read_qrcode_files\">Nun ye posible lleer ya procesar dalgunos códigos QR. Namás van importase %1$d/%2$d entraes.</string>\n    <string name=\"unable_to_generate_qrcode\">Nun ye posible xenerar el códigu QR</string>\n    <string name=\"select_picture\">Seleición d\\'una semeya</string>\n    <string name=\"select_icon\">Seleición d\\'un iconu</string>\n    <string name=\"tile_open_vault\" comment=\"label for a quick settings tile that opens the app when tapped\">Abrir l\\'arca</string>\n    <string name=\"tile_open_scanner\" comment=\"label for a quick settings tile that opens the QR code scanner when tapped\">Abrir l\\'escaniador</string>\n    <string name=\"toggle_checkboxes\">Alternar los caxellos</string>\n    <string name=\"search\">Buscar</string>\n    <string name=\"channel_name_lock_status\">Estáu del bloquéu</string>\n    <string name=\"channel_description_lock_status\">Aegis pue crear un avisu permanente p\\'avisate de cuándo se bloquia l\\'arca</string>\n    <string name=\"vault_unlocked_state\">L\\'arca ta desbloquiada. Toca equí pa bloquiala.</string>\n    <string name=\"version\">Versión</string>\n    <string name=\"changelog\">Rexistru de cambeos</string>\n    <string name=\"whats_new\">Les novedaes</string>\n    <string name=\"github_description\">El códigu fonte, los problemes ya más información</string>\n    <string name=\"license\">Llicencia</string>\n    <string name=\"license_description\">Aegis Authenticator llicénciase baxo la GPLv3</string>\n    <string name=\"third_party_licenses\">Llicencies de terceros</string>\n    <string name=\"third_party_licenses_description\">Les llicencies de les biblioteques de terceros qu\\'usa Aegis</string>\n    <string name=\"country_netherlands\">Países Baxos</string>\n    <string name=\"email_us\">Escribir un correu electrónicu</string>\n    <string name=\"visit_website\">Visitar el sitiu web</string>\n    <string name=\"about_support\">Apoyu</string>\n    <string name=\"support_rate\">Valorar</string>\n    <string name=\"support_rate_description\">Apóyanos pente una reseña na Play Store de Google</string>\n    <string name=\"webview_error\">Esti preséu nun ye compatible con WebView, que ye necesariu pa visualizar el rexistru de cambeos ya la llicencia. Al sistema fálta-y un componente.</string>\n    <string name=\"email\">Corréu electrónicu</string>\n    <string name=\"time_sync_warning_title\">Sincronización automática de la hora</string>\n    <string name=\"time_sync_warning_message\">Aegis encóntase na hora del sistema pa xenerar códigos correutos ya la esviación d\\'unos segundos na hora podría facer que se xeneren códigos incorreutos. Paez que\\'l preséu nun ta configuráu pa sincronizar automáticamente la hora. ¿Quies facelo agora?</string>\n    <string name=\"time_sync_warning_disable\">Dexar d\\'alvertime, sé lo que faigo.</string>\n    <string name=\"google_qr_export_unrelated\">Atopóse un códigu QR que nun tien rellación. Prueba a reaniciar l\\'escaniador.</string>\n    <string name=\"google_qr_export_unexpected\">Esperábase\\'l códigu QR #%1$d, mas escanióse\\'l #%2$d</string>\n    <string name=\"backup_error_bar_message\"><b>La copia de seguranza de l\\'arca falló apocayá</b></string>\n    <string name=\"backup_error_dialog_details\" comment=\"The first parameter is the type of backup (e.g. built-in or Android backup). The second parameter is an elapsed time in the style of 'x seconds/minutes/days ago'.\">        Falló un intentu recién de facer una copia de seguranza de l\\'arca con «%1$s» porque se produxo un error (data de l\\'aición: %2$s). Revisa la configuración pa que les copies de seguranza puedan facese correutamente.\n    </string>\n    <string name=\"backup_system_builtin\">Copies de seguranza automátiques d\\'Aegis</string>\n    <string name=\"backup_system_android\">Sistema de copies de segurazan na ñube d\\'Android</string>\n    <string name=\"backup_plaintext_export_warning\"><b>L\\'arca esportóse apocayá a un ficheru de testu planu</b></string>\n    <string name=\"pref_show_plaintext_warning_hint\">Nun volver amosar esta alvertencia</string>\n    <string name=\"backup_plaintext_warning_explanation\">Esta alvertencia apaez porque esportesti apocayá una copia de l\\'arca que nun taba cifrada. Pa caltener la seguranza de los pases, acoseyamos que desanicies esti ficheru namás que nun lu precises.</string>\n    <string name=\"switch_camera\">Cambiar de cámara</string>\n    <string name=\"empty_list\">Nun hai nengún códigu p\\'amosar. Comienza a amestar entraes pente\\'l botón «+» de la esquina baxera derecha</string>\n    <string name=\"empty_list_title\">Nun s\\'atopó nenguna entrada</string>\n    <string name=\"empty_group_list\">Nun hai nengún grupu p\\'amosar. Amiesta grupos na pantalla d\\'edición de cualesquier entrada</string>\n    <string name=\"empty_group_list_title\">Nun s\\'atopó nengún grupu</string>\n    <string name=\"no_icon_packs\">Entá nun s\\'importó nengún paquete d\\'iconos. Toca\\'l botón «+» pa importar unu. Conseyu: prueba <a href=\"https://aegis-icons.github.io\">aegis-icons</a>.</string>\n    <string name=\"no_icon_packs_title\">Nun hai nengún paquete d\\'iconos</string>\n    <string name=\"pick_icon\">Escoyeta d\\'un iconu</string>\n    <string name=\"uncategorized\">Ensin categoría</string>\n    <string name=\"done\">Fecho</string>\n    <plurals name=\"qr_count\">\n        <item quantity=\"one\">%d/%d códigu QR</item>\n        <item quantity=\"other\">%d/%d códigos QR</item>\n    </plurals>\n    <string name=\"next\">Siguiente</string>\n    <string name=\"previous\">Anterior</string>\n    <string name=\"copy_uri\">Copiar la URI</string>\n    <string name=\"unable_to_copy_uri_to_clipboard\">Nun ye posible copiar la URI al cartafueyu</string>\n    <string name=\"uri_copied_to_clipboard\">La URI copióse al cartafueyu</string>\n    <string name=\"transfer_entry_description\">Escania esti códígu QR cola aplicación autenticadora a la que quies tresferir esta entrada</string>\n    <string name=\"google_auth_compatible_transfer_description\">Escania estos códigos QR con Aegis o con Google Authenticator.\\n\\nPola mor de les llendes de l\\'aplicación Google Authenticator, namás s\\'inclúin pases TOTP ya HOTP qu\\'usen el hash SHA1 ya produzan códigos de 6 díxitos</string>\n    <string name=\"password_strength_very_weak\">Perpoco segura</string>\n    <string name=\"password_strength_weak\">Poco segura</string>\n    <string name=\"password_strength_fair\">Segura</string>\n    <string name=\"password_strength_good\">Persegura</string>\n    <string name=\"password_strength_strong\">Permuncho segura</string>\n    <string name=\"pref_pin_keyboard_title\">Tecláu numbéricu na pantalla de bloquéu</string>\n    <string name=\"pref_pin_keyboard_summary\">Activa esta opción si quies tener el tecláu númbericu na pantalla de bloquéu. Esta opción namás funciona coles contraseñes numbériques</string>\n    <string name=\"title_activity_preferences\">Configuración</string>\n    <string name=\"title_activity_manage_groups\">Xestión de grupos</string>\n    <string name=\"title_activity_transfer\">Tresferencia d\\'entraes</string>\n    <string name=\"title_activity_about\">Tocante a</string>\n    <string name=\"title_activity_edit_entry\">Edición d\\'una entrada</string>\n    <string name=\"title_activity_scan_qr\">Escanéu d\\'un códigu QR</string>\n    <string name=\"title_activity_import_entries\">Importación d\\'entraes</string>\n    <string name=\"title_activity_licenses\">Llicencies de terceros</string>\n    <string name=\"dialog_wipe_entries_title\">Borráu d\\'entraes</string>\n    <string name=\"dialog_wipe_entries_message\">L\\'arca xá contién entraes. ¿Quies quitales enantes d\\'importar esti ficheru?\\n\\n<b>Al facelo, vas perder permanentemente l\\'accesu a les entraes esistentes de l\\'arca.</b></string>\n    <string name=\"dialog_wipe_entries_checkbox\">Borrar el conteníu de l\\'arca</string>\n    <string name=\"panic_trigger_ignore_toast\">Aegis recibió un eventu de pánicu mas la opción ta desactivada</string>\n    <string name=\"pref_panic_trigger_title\">Desaniciar l\\'arca n\\'eventos de pánicu</string>\n    <string name=\"pref_panic_trigger_summary\">Desaniciar l\\'arca al recibir un eventu de pánicu de Ripple</string>\n    <string name=\"import_vault\">Importar un arca d\\'Aegis</string>\n    <string name=\"importer_help_2fas\">Forni una copia de seguranza de 2FAS Authenticator.</string>\n    <string name=\"importer_help_aegis\">Forni un ficheru d\\'esportación/copia de seguranza d\\'Aegis.</string>\n    <string name=\"importer_help_authenticator_plus\">Forni un ficheru d\\'esportación d\\'Authenticator Plus que se consigue pente <b>Configuración -&gt; Copia de seguranza ya restauración -&gt; Esportar como testu ya HTML</b>.</string>\n    <string name=\"importer_help_authy\">Forni una copia del ficheru <b>com.authy.storage.tokens.authenticator.xml</b> que s\\'alluga na direición «/data/data/com.authy.authy/shared_prefs/», dientro del direutoriu del almacenamientu internu d\\'Authy.</string>\n    <string name=\"importer_help_andotp\">Forni un ficheru d\\'esportación/copia de seguranza d\\'AndOTP.</string>\n    <string name=\"importer_help_bitwarden\">Forni un ficheru d\\'esportación/copia de seguranza de Bitwarden. Los ficheros cifraos nun son compatibles.</string>\n    <string name=\"importer_help_battle_net_authenticator\">Forni una copia del ficheru <b>/data/data/com.blizzard.messenger/shared_prefs/com.blizzard.messenger.authenticator_preferences.xml</b>, llocalizáu nel direutoriu del almacenamientu internu de Battle.net Authenticator.</string>\n    <string name=\"importer_help_duo\">Forni una copia del ficheru <b>accounts.json</b> que s\\'alluga na direición «/data/data/com.duosecurity.duomobile/files/duokit/», dientro del direutoriu del almacenamientu internu de DUO.</string>\n    <string name=\"importer_help_freeotp\">FreeOTP 2: forni una copia de seguranza.\\nFreeOTP 1.x: forni una copia del ficheru <b>/data/data/org.fedorahosted.freeotp/shared_prefs/tokens.xml</b>, llocalizáu nel direutoriu del almacenamientu internu de FreeOTP.</string>\n    <string name=\"importer_help_freeotp_plus\">Forni un ficheru d\\'esportación de FreeOTP+.</string>\n    <string name=\"importer_warning_title_freeotp2\">Compatibilidá con FreeOTP 2</string>\n    <string name=\"importer_help_google_authenticator\"><b>Namás les bases de datos de la versión 5.10 ya les inferiores de Google Authenticator son compatibles.</b>\\n\\nForni una copia de <b>databases</b> que s\\'alluga na direición «/data/data/com.google.android.apps.authenticator2/databases/», dientro del direutoriu del almacenamientu internu de Google Authenticator.</string>\n    <string name=\"importer_help_microsoft_authenticator\">Forni una copia del ficheru <b>PhoneFactor</b> que s\\'alluga na direición «/data/data/com.azure.authenticator/databases/», dientro del direutoriu del almacenamientu internu de Microsoft Authenticator.</string>\n    <string name=\"importer_help_plain_text\">Forni un ficheru en testu planu con una URI de Google Authenticator en cada llinia.</string>\n    <string name=\"importer_help_steam\"><b>La versión 3.0 ya les superiores de Steam nun son compatibles.</b> Forni una copia de <b>Steamguard-*.json</b> que s\\'alluga na direición «data/data/com.valvesoftware.android.steam.community/files/», dientro del direutoriu del almacenamientu internu de Steam.</string>\n    <string name=\"importer_help_totp_authenticator\">Forni un ficheru d\\'esportación de TOTP Authenticator.</string>\n    <string name=\"importer_help_winauth\">Forni un ficheru d\\'esportación de WinAuth.</string>\n    <string name=\"importer_encrypted_exception_google_authenticator\">Entrada cifrada que se saltó: %s</string>\n    <string name=\"importer_help_direct\">Importa les entraes direutamente de: %s. Esta opción rique que l\\'aplicación tea instalada nel preséu ya qu\\'Aegis tenga condedíu l\\'accesu de root.</string>\n    <string name=\"groups\">Grupos</string>\n    <string name=\"pref_focus_search\">Enfocar la busca al aniciar l\\'aplicación</string>\n    <string name=\"pref_focus_search_summary\">Enfoca la busca namás abrir l\\'aplicación.</string>\n    <string name=\"pref_grouping_halves\">Metaes</string>\n    <string name=\"pref_grouping_none\">Ensin agrupamientu</string>\n    <string name=\"pref_grouping_size_two\">Grupos de 2</string>\n    <string name=\"pref_grouping_size_three\">Grupos de 3</string>\n    <string name=\"pref_grouping_size_four\">Grupos de 4</string>\n    <string name=\"pref_copy_behavior_never\">Enxamás</string>\n    <string name=\"pref_copy_behavior_single_tap\">Un toque</string>\n    <string name=\"pref_copy_behavior_double_tap\">Dos toques</string>\n    <string name=\"pref_account_name_position_end\">Al llau l\\'emisor</string>\n    <string name=\"pref_account_name_position_below\">Embaxo l\\'emisor</string>\n    <plurals name=\"time_elapsed_minutes\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"one\">fai %d minutu</item>\n        <item quantity=\"other\">fai %d minutos</item>\n    </plurals>\n    <plurals name=\"dropdown_checkboxes_default_count\">\n        <item quantity=\"one\">Seleicionóse %d elementu</item>\n        <item quantity=\"other\">Seleicionáronse %d elementos</item>\n    </plurals>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-ast-rES-v29/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources></resources>\n"
  },
  {
    "path": "app/src/main/res/values-bg-rBG/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources xmlns:tools=\"http://schemas.android.com/tools\">\n    <string name=\"action_settings\">Настройки</string>\n    <string name=\"action_about\">Относно</string>\n    <string name=\"action_delete\">Изтриване</string>\n    <string name=\"action_transfer\">Прехвърляне</string>\n    <string name=\"action_edit_icon\">Редактиране на икона</string>\n    <string name=\"action_reset_usage_count\">Нулиране на броя използвания</string>\n    <string name=\"action_reset_usage_count_dialog\">Сигурни ли сте, че желаете броя на използванията да бъде нулиран?</string>\n    <string name=\"action_default_icon\">Възстановяване на подразбирана икона</string>\n    <string name=\"discard\">Отхвърляне</string>\n    <string name=\"save\">Запазване</string>\n    <string name=\"all\">Всички</string>\n    <string name=\"issuer\">Издател</string>\n    <string name=\"yandex_pin\">PIN (4–16 цифри)</string>\n    <string name=\"motp_pin\">PIN (4 цифри)</string>\n    <string name=\"suggested\">Препоръчително</string>\n    <string name=\"usage_count\">Брой използвания</string>\n    <string name=\"warning\">Внимание</string>\n    <string name=\"pref_cat_appearance_app\">Приложение</string>\n    <string name=\"pref_cat_appearance_entries\">Записи</string>\n    <string name=\"pref_cat_backups_android\">Андроид</string>\n    <string name=\"pref_cat_backups_auto\">Автоматични резервни копия</string>\n    <string name=\"pref_section_behavior_title\">Поведение</string>\n    <string name=\"pref_section_behavior_summary\">Настройки на поведението при взаимодействие със списъка със записи.</string>\n    <string name=\"pref_section_appearance_title\">Външен вид</string>\n    <string name=\"pref_section_appearance_summary\">Тема, език и други настройки, които влияят на външния вид на приложението.</string>\n    <string name=\"pref_section_security_title\">Сигурност</string>\n    <string name=\"pref_section_security_summary\">Настройки на шифроване, отключване с биометрични данни, автоматично заключване и други настройки за сигурност.</string>\n    <string name=\"pref_section_import_export_title\">Внасяне и изнасяне</string>\n    <string name=\"pref_section_import_export_summary\">Внасяне на резервни копия от Aegis или други приложения за удостоверяване. Ръчно изнасяне на хранилището на Aegis.</string>\n    <string name=\"pref_section_audit_log_title\">Одитен дневник</string>\n    <string name=\"pref_section_audit_log_summary\">Списък с всички важни събития, докладвани от приложението.</string>\n    <string name=\"pref_section_backups_title\">Резервни копия</string>\n    <string name=\"pref_section_backups_summary\">Настройте автоматични резервни копия на избрано от вас място или се възползвайте от облачната услуга за резервни копия на Андроид.</string>\n    <string name=\"pref_section_icon_packs\">Пакети с икони</string>\n    <string name=\"pref_section_icon_packs_summary\">Управление и внасяне на пакети с икони</string>\n    <string name=\"pref_select_theme_title\">Тема</string>\n    <string name=\"pref_dynamic_colors_title\">Динамични цветове</string>\n    <string name=\"pref_dynamic_colors_summary\">Цвета на прозрачния слой да подхожда на темата на Андроид</string>\n    <string name=\"pref_view_mode_title\">Изглед на списъка</string>\n    <string name=\"pref_lang_title\">Език</string>\n    <string name=\"pref_show_icons_title\">Показване на икони</string>\n    <string name=\"pref_show_icons_summary\">До всеки запис да се показва икона</string>\n    <string name=\"pref_code_group_size_title\">Групиране на цифрите на кода</string>\n    <string name=\"pref_code_group_size_summary\">Изберете как да бъдат групирани цифрите на кода</string>\n    <string name=\"pref_account_name_position_title\">Име на профила</string>\n    <string name=\"pref_show_next_code_title\">Показване на следващия код</string>\n    <string name=\"pref_show_next_code_summary\">Предварително създаване и показване на следващия код</string>\n    <string name=\"pref_expiration_state_title\">Индикатор за изтичащи кодове</string>\n    <string name=\"pref_expiration_state_summary\">Променете цвета на кодовете и мигането, когато изтичат</string>\n    <string name=\"pref_expiration_state_fallback\">Променете цвета на кодовете, когато изтичат</string>\n    <string name=\"pref_shared_issuer_account_name_title\">Показване на името на профила при необходимост</string>\n    <string name=\"pref_shared_issuer_account_name_summary\">Показва имената на профилите само когато имат един и същ издател. Другите имена на профили ще бъдат скрити.</string>\n    <string name=\"pref_account_name_position_summary_override\">Тази настройка е заменена от режима на изглед на плочки. Името на профила ще се показва под издателя.</string>\n    <string name=\"pref_import_file_title\">Внасяне от файл</string>\n    <string name=\"pref_import_file_summary\">Внасяне на кодове за защита от файл</string>\n    <string name=\"pref_android_backups_title\">Облачни резервни копия на Андроид</string>\n    <string name=\"pref_android_backups_summary\">Позволете на системата на Android за резервни копия в облака да включи хранилището на Aegis в резервните копия. Поддържа само шифровани хранилища.</string>\n    <string name=\"pref_android_backups_hint\"><i>Резервни копия от едно устройство на друго се поддържат винаги, без значение от горната настройка.</i></string>\n    <string name=\"pref_backups_title\">Автоматично резервно копие на хранилището</string>\n    <string name=\"pref_backups_summary\">При промени, автоматично се създават резервни копия на хранилището във външната памет. Поддържа само шифровани хранилища.</string>\n    <string name=\"pref_backups_reminder_title\">Напомняне за резервни копия</string>\n    <string name=\"pref_backups_reminder_summary\">Покзва напомняне да направите резервно копие, в случай че нямате копие на последните промени.</string>\n    <string name=\"pref_backups_reminder_dialog_title\">Изключване на напомняне за резервно копие</string>\n    <string name=\"pref_backups_reminder_dialog_summary\">Ако изключите напомнянето, Aegis няма да ви казва дали имате промени, за които няма резервно копие. Това ви излага на риск от загуба на достъп до съответните профили. Сигурни ли сте, че искате да изключите това напомняне?</string>\n    <string name=\"pref_backups_versioning_strategy_title\">Стратегия за резервни копия</string>\n    <string name=\"pref_backups_versioning_strategy_keep_x_versions\">Пазене на определен брой версии</string>\n    <string name=\"pref_backups_versioning_strategy_single_backup\">Едно резервно копие</string>\n    <string name=\"pref_backups_versioning_strategy_single_backup_warning\">Избраната стеатегия е ненадеждна и не се препоръчва. Повредата да едно резервно копие ще доведе до загуба на единственото резервно копие.</string>\n    <string name=\"pref_backups_versioning_strategy_dialog_title\">Изберете стратегия за резервните копия</string>\n    <string name=\"pref_backups_location_title\">Място на резервните копия</string>\n    <string name=\"pref_backups_location_summary\">Резервните копия ще бъдат създавани в</string>\n    <string name=\"pref_backup_location_summary\">Резервните копия ще бъдат създавани в</string>\n    <string name=\"pref_backups_trigger_title\">Създаване на резервно копие</string>\n    <string name=\"pref_backups_trigger_summary\">Ръчно създава резервни копия</string>\n    <string name=\"pref_backups_versions_title\">Брой версии, които трябва да се запазят</string>\n    <string name=\"pref_backups_versions_infinite\">\\u221E</string>\n    <plurals name=\"pref_backups_versions_summary\">\n        <item quantity=\"one\">Запазва се %1$d резервно копие</item>\n        <item quantity=\"other\">Запазват се %1$d резервни копия</item>\n    </plurals>\n    <string name=\"pref_backups_versions_infinite_summary\">Пазене на неограничен брой архивни копия</string>\n    <string name=\"pref_import_app_title\">Внасяне от приложение</string>\n    <string name=\"pref_import_app_summary\">Внасяне на кодове за защита от приложение (изисква суперпотребител)</string>\n    <string name=\"pref_export_title\">Изнасяне</string>\n    <string name=\"pref_export_summary\">Изнасяне на хранилището</string>\n    <string name=\"pref_password_reminder_title\">Припомняне на паролата</string>\n    <string name=\"pref_google_auth_export_title\">Изнасяне за Google Authenticator</string>\n    <string name=\"pref_google_auth_export_descriptor\">Създава кодове за QR, съвместими с Google Authenticator</string>\n    <string name=\"pref_google_auth_export_no_data\">Няма данни, които дабъдат изнесени</string>\n    <plurals name=\"pref_google_auth_export_incompatible_entries\">\n        <item quantity=\"one\">Пропуснат е %d несъвместим елемент</item>\n        <item quantity=\"other\">Пропуснати са %d несъвместими елемента</item>\n    </plurals>\n    <string name=\"pref_password_reminder_summary\">%s показва напомняне да въведете паролата за приложението, за да не я забравите.</string>\n    <string name=\"pref_password_reminder_summary_disabled\">Изключено</string>\n    <string name=\"pref_secure_screen_title\">Сигурност на екрана</string>\n    <string name=\"pref_secure_screen_summary\">Блокирайте екранни снимки и други опити за заснемане на екрана в приложението</string>\n    <string name=\"pref_tap_to_reveal_title\">Показване при докосване</string>\n    <string name=\"pref_tap_to_reveal_summary\">Кодовете за защита ще бъдат скрити по подразбиране. Докоснете елемент от списъка, за да се покаже кода.</string>\n    <string name=\"pref_tap_to_reveal_time_title\">Период на показване при докосване</string>\n    <string name=\"pref_auto_lock_title\">Авт. заключване</string>\n    <string name=\"pref_auto_lock_summary\">Когато %s</string>\n    <string name=\"pref_auto_lock_summary_disabled\">Изключен</string>\n    <string name=\"pref_auto_lock_prompt\">Автоматично заключване на Aegis, когато</string>\n    <string name=\"pref_auto_lock_type_back_button\">Бутонът за връщане назад е натиснат</string>\n    <string name=\"pref_auto_lock_type_minimize\">Приложението е минимизирано</string>\n    <string name=\"pref_auto_lock_type_device_lock\">Устройството е заключено</string>\n    <string name=\"pref_backup_password_category\">Резервни копия и изнасяне</string>\n    <string name=\"pref_backup_password_title\">Отделни пароли за резервни копия и изнасяне</string>\n    <string name=\"pref_backup_password_summary\">Ако е включено, паролата, отключваща приложението не може да бъде използвана за резервни копия и изнасяне.</string>\n    <string name=\"pref_backup_password_change_title\">Промяна на паролата за резервни копия и изнасяне</string>\n    <string name=\"pref_backup_password_change_summary\">Задава нова парола за шифроване на хранилището при създаване на резервни копия и изнасяне.</string>\n    <string name=\"pref_encryption_title\">Шифроване</string>\n    <string name=\"pref_encryption_summary\">Шифроване на хранилището, отключване с парола или биометрични данни</string>\n    <string name=\"pref_biometrics_title\">Отключване с биометрични данни</string>\n    <string name=\"pref_biometrics_summary\">Разрешава удостоверяване с биометрични данни, за отключване на хранилището</string>\n    <string name=\"pref_search_behavior_summary\">Търсене в: %s</string>\n    <string name=\"pref_search_behavior_prompt\">Търсене в следните полета</string>\n    <string name=\"pref_search_behavior_type_name\">Име</string>\n    <string name=\"pref_search_behavior_type_issuer\">Издател</string>\n    <string name=\"pref_search_behavior_type_note\">Бележка</string>\n    <string name=\"pref_search_behavior_type_groups\">Групи</string>\n    <string name=\"pref_set_password_title\">Смяна на паролата</string>\n    <string name=\"pref_set_password_summary\">Задайте нова парола, с която да отключвате хранилището</string>\n    <string name=\"no_events_title\">Не са докладвани събития</string>\n    <string name=\"no_events_description\">Няма важни събития, докладвани от приложението</string>\n    <string name=\"event_title_vault_unlocked\">Хранилището е отключено</string>\n    <string name=\"event_description_vault_unlocked\">Хранилището успешно е отключено</string>\n    <string name=\"event_title_backup_created\">Създадено е резервно копие</string>\n    <string name=\"event_description_backup_created\">Резервно копие на хранилището успешно е създадено</string>\n    <string name=\"event_title_android_backup_created\">Създадено е резервно копие от Андроид</string>\n    <string name=\"event_description_android_backup_created\">Резервно копие на хранилището успешно е създадено от Андроид</string>\n    <string name=\"event_title_vault_exported\">Хранилището е изнесено</string>\n    <string name=\"event_description_vault_exported\">Копие на хранилището е изнесено</string>\n    <string name=\"event_title_entry_shared\">Споделен е запис</string>\n    <string name=\"event_description_entry_shared\">Запис е споделен</string>\n    <string name=\"event_title_vault_unlock_failed_password\">Неуспешно отключване на хранилището (парола)</string>\n    <string name=\"event_description_vault_unlock_failed_password\">Опит за отключване на хранилището с парола е неуспешен</string>\n    <string name=\"event_title_vault_unlock_failed_biometrics\">Неуспешно отключване на хранилището (биометрични данни)</string>\n    <string name=\"event_description_vault_unlock_failed_biometrics\">Опит за отключване на хранилището с биометрични данни е неуспешен</string>\n    <string name=\"event_unknown\">Неизвестен вид събитие</string>\n    <string name=\"audit_log_entry_deleted\">(премахнато)</string>\n    <string name=\"today_at_time\">Днес в %1$s</string>\n    <string name=\"day_of_week_at_time\">%1$s в %2$s</string>\n    <string name=\"export_encrypted\">Шифроване на хранилището</string>\n    <string name=\"export_help\">По този начин ще бъде изнесено хранилището на Aegis от вътрешната памет. Изберете формата на данните, в който искате да бъдат изнесени:</string>\n    <string name=\"export_warning_unencrypted\">На път сте да изнесете нешифровано копие на хранилището на Aegis. <b>Това е силно непрепоръчително</b>.</string>\n    <string name=\"export_warning_password\">Изнасяните данни се шифроват с отделна парола, която се задава в раздел Сигурност.</string>\n    <string name=\"understand_risk_accept\">Разбирам риска</string>\n    <string name=\"export_format_aegis\">Aegis (.JSON)</string>\n    <string name=\"export_format_google_auth_uri\">Текстов файл (.TXT)</string>\n    <string name=\"export_format_html\">Интернет страница (.HTML)</string>\n    <string name=\"export_format_hint\">Изнасяне като</string>\n    <string name=\"export_all_groups\">Изнасяне на всички групи</string>\n    <string name=\"export_choose_groups\">Изберете кои групи да бъдат изнесени</string>\n    <plurals name=\"export_groups_selected_count\">\n        <item quantity=\"one\">%d избрана група</item>\n        <item quantity=\"other\">%d избрани групи</item>\n    </plurals>\n    <string name=\"export_no_groups_selected\">Не са избрани групи, които да бъдат изнесени</string>\n    <string name=\"export_html_title\" comment=\"The title of an HTML export document\">Изнесени данни от Aegis Authenticator</string>\n    <string name=\"choose_authentication_method\">Сигурност</string>\n    <string name=\"authentication_method_explanation\">Aegis е 2FA приложение, фокусирано върху сигурността. Кодовете за защита се пазят в хранилище, което по желание може да бъде шифровано с избрана от вас парола. Ако нападател получи шифрования файл на хранилището, той няма да може да осъществи достъп до съдържанието му, без паролата. \\n\\nПодбрахме стойността, която според нас най-добре пасва на устройството.</string>\n    <string name=\"authentication_method_none\">Нищо</string>\n    <string name=\"authentication_method_none_description\">За отключване на хранилището не е необходима парола и то няма да бъде шифровано. <b>Това е силно непрепоръчително</b>.</string>\n    <string name=\"authentication_method_password\">Парола</string>\n    <string name=\"authentication_method_password_description\">Хранилището се отключва с парола.</string>\n    <string name=\"authentication_method_password_explanation\">Предупреждение: Ако забравите паролата си, ще загубите трайно достъп до кодовете за защита. Няма начин да ги възстановите без паролата.</string>\n    <string name=\"authentication_method_biometrics\">Биометрични данни</string>\n    <string name=\"authentication_method_biometrics_description\">В допълнение към паролата, биометрични данни, регистрирани на това устройство, като пръстов отпечатък или лицето ви, могат да се използват за отключване на хранилището.</string>\n    <string name=\"authentication\">Отключване на хранилище</string>\n    <string name=\"authentication_multiline\" comment=\"The newline in the middle is used for aesthetic purposes\">Отключете\\nхранилището</string>\n    <string name=\"auth_use_biometrics\">Или докоснете тук, за да използвате <font fgcolor=\"#FF0D86C1\">биометрични данни</font></string>\n    <string name=\"set_password\">Моля въведете парола</string>\n    <string name=\"set_group\">Моля, въведете име на групата</string>\n    <string name=\"set_number\">Въведете число</string>\n    <string name=\"set_password_confirm\">Моля, потвърдете паролата</string>\n    <string name=\"invalid_password\">Паролата е неправилна</string>\n    <string name=\"invalidated_biometrics\">Установена е промяна в настройките за защита на устройството. Посетете „Aegis -&gt; Настройки -&gt; Сигурност -&gt; Биометрично отключване“, изключете и отново включете биометричното отключване.</string>\n    <string name=\"password_reminder\">Въведете паролата си. Понякога искаме от вас да я въвеждате, за да не я забравите.</string>\n    <string name=\"password_reminder_dialog_title\">Отключване с биометрични данни по подразбиране</string>\n    <string name=\"password_reminder_dialog_message\">Понякога искаме от вас да въвеждате паролата си, за да не я забравите и така да останете без достъп до хранилището. След като я въведете веднъж Aegis отново ще използва биометрични данни при отключване, докато не дойде време отново да си припомните паролата.</string>\n    <string name=\"password_reminder_freq_never\">Никога</string>\n    <string name=\"password_reminder_freq_weekly\">Веднъж седмично</string>\n    <string name=\"password_reminder_freq_biweekly\">Веднъж на две седмици</string>\n    <string name=\"password_reminder_freq_monthly\">Веднъж месечно</string>\n    <string name=\"password_reminder_freq_quarterly\">Веднъж на тримесечие</string>\n    <string name=\"enter_password_2fas_message\">Изглежда това резервно копие на 2FAS е шифровано. Въведете паролата.</string>\n    <string name=\"enter_password_authy_message\">Изглежда, че вашите Authy токени са шифровани. Моля, затворете Aegis, отворете Authy и отключете токените с паролата си. Вместо това Aegis може също да се опита да дешифрира вашите Authy токени вместо вас, ако въведете паролата си по-долу.</string>\n    <string name=\"enter_password_aegis_title\">Въведете паролата за внасяне</string>\n    <string name=\"period_hint\">Период (секунди)</string>\n    <string name=\"algorithm_hint\">Хешираща функция</string>\n    <string name=\"type\">Вид</string>\n    <string name=\"share\">Споделяне</string>\n    <string name=\"yes\">Да</string>\n    <string name=\"no\">Не</string>\n    <string name=\"undo\">Отменяне</string>\n    <string name=\"unlock\">Отключване</string>\n    <string name=\"advanced\">Разширени</string>\n    <string name=\"counter\">Брояч</string>\n    <string name=\"digits\">Цифри</string>\n    <string name=\"secret\">Тайна</string>\n    <string name=\"scan\">Сканиране на код за QR</string>\n    <string name=\"scan_image\">Сканиране на изображение</string>\n    <string name=\"enter_manually\">Ръчно въвеждане</string>\n    <string name=\"set_up_biometric\">Отключване с биометрични данни</string>\n    <string name=\"copy\">Копиране</string>\n    <string name=\"edit\">Променяне</string>\n    <string name=\"select_all\">Избиране на всички</string>\n    <string name=\"assign_icons\">Задаване на икони</string>\n    <string name=\"assign_groups\">Прибавяне към група</string>\n    <string name=\"assign_groups_dialog_summary\">Изберете групата, в която да добавите избраните записи.</string>\n    <string name=\"assign_groups_dialog_dropdown\">Избиране на група</string>\n    <string name=\"favorite\" comment=\"Verb\">Добавя в избрани</string>\n    <string name=\"unfavorite\" comment=\"Verb\">Премахва от избраните</string>\n    <string name=\"error_all_caps\">ГРЕШКА</string>\n    <string name=\"password\">Парола</string>\n    <string name=\"confirm_password\">Потвърждаване на паролата</string>\n    <string name=\"show_password\">Показване на паролата</string>\n    <string name=\"new_entry\">Нов запис</string>\n    <string name=\"add_new_entry\">Добавяне на запис</string>\n    <string name=\"unlock_vault_error\">Неуспешно отключване на хранилището</string>\n    <string name=\"unlock_vault_error_description\">Грешна парола. Уверете се, че сте въвели правилно паролата.</string>\n    <string name=\"password_equality_error\">Паролите трябва да са еднакви и да не са празни</string>\n    <string name=\"snackbar_authentication_method\">Изберете метод за удостоверяване</string>\n    <string name=\"encrypting_vault\">Шифроване на трезора</string>\n    <string name=\"exporting_vault\">Изнасяне на трезора</string>\n    <string name=\"optimizing_icon\">Оптимизиране на пиктограма</string>\n    <string name=\"optimizing_icon_multiple\">Оптимизиране на пиктограми %1$d/%2$d</string>\n    <string name=\"reading_file\">Прочитане на файла</string>\n    <string name=\"requesting_root_access\">Достъп до правата на суперпотребителя</string>\n    <string name=\"analyzing_qr\">Анализиране на QR кода</string>\n    <string name=\"analyzing_qr_multiple\">Анализиране на QR код %1$d/%2$d (%3$s)</string>\n    <plurals name=\"added_new_entries\">\n        <item quantity=\"one\">Към хранилището е добавен %d запис</item>\n        <item quantity=\"other\">Към хранилището са добавени %d записа</item>\n    </plurals>\n    <string name=\"importing_icon_pack\">Внасяне на пакет с икони</string>\n    <string name=\"delete_entry\">Изтриване на запис</string>\n    <string name=\"delete_entry_description\">Сигурни ли сте, че искате записът да бъде изтрит?</string>\n    <string name=\"delete_entry_explanation\">Това действие не изключва 2FA в\\n<b>%s</b>\\n\\n. За да предотвратите загуба на достъп, се уверете, че сте изключили 2FA за съответната услуга или че имате друг начин за генериране на кодове за достъп до нея.</string>\n    <string name=\"delete_entries\">Изтриване на записи</string>\n    <plurals name=\"delete_entries_description\">\n        <item quantity=\"one\">Наистина ли искате %d запис да бъде изтрит?</item>\n        <item quantity=\"other\">Наистина ли искате %d записа да бъдат изтрити?</item>\n    </plurals>\n    <string name=\"discard_changes\">Отхвърляне на промените?</string>\n    <string name=\"discard_changes_description\">Промените все още не са запазени</string>\n    <string name=\"saving_profile_error\">Грешка при запазването на профила</string>\n    <string name=\"saving_assign_icons_error\">Грешка при задаване на икони</string>\n    <string name=\"welcome\">Добре дошли</string>\n    <string name=\"app_description\">Aegis е безплатно, сигурно приложение за 2FA с отворен код</string>\n    <string name=\"setup_completed\">Настройката е завършена</string>\n    <string name=\"setup_completed_description\">Aegis е готов за работа.</string>\n    <string name=\"vault_not_found\">Не е намерено хранилище, настройване…</string>\n    <string name=\"copied\">Копирано</string>\n    <string name=\"errors_copied\">Грешките са копирани</string>\n    <string name=\"version_copied\">Изданието е копирано</string>\n    <string name=\"error_required_field\">Полето е задължително</string>\n    <string name=\"error_occurred\">Възникна грешка</string>\n    <string name=\"decryption_error\">Грешка при отключване на хранилището</string>\n    <string name=\"decryption_corrupt_error\">Грешка при отключване на хранилището. Възможно е файлът на хранилището да е повреден.</string>\n    <string name=\"saving_error\">Грешка при запазване на хранилището</string>\n    <string name=\"vault_init_error\">Грешка при начално установяване на хранилището</string>\n    <string name=\"vault_load_error\">Грешка при прочитане на хранилището от паметта</string>\n    <string name=\"biometric_decrypt_error\">Грешка при отключване на хранилището с биометрично удостоверяване. Така обикновено се получава в резултат на промяна на настройките за защита на устройството. Отключете хранилището с парола и пренастройте биометричното удостоверяване в настройките на Aegis.</string>\n    <string name=\"biometric_init_error\">Грешка при подготовка за биометрично удостоверяване. Така обикновено се получава в резултат на промяна на настройките за защита на устройството. Отключете хранилището с парола и пренастройте биометричното удостоверяване в настройките на Aegis.</string>\n    <string name=\"disable_encryption\">Изключване на шифроването</string>\n    <string name=\"disable_encryption_description\">Наистина ли искате да изключите шифроването? Това ще доведе до съхраняване на хранилището в чист текст. <b>Автоматичните резервни копия също ще бъдат изключени.</b></string>\n    <string name=\"enable_encryption_error\">Грешка при включване на шифроването</string>\n    <string name=\"disable_encryption_error\">Грешка при изключване на шифроването</string>\n    <string name=\"backup_successful\">Създаден е график за резервни копия</string>\n    <string name=\"backup_error\">Грешка при създаване на резервно копие</string>\n    <string name=\"backup_status_success\">Последни резервни копия: %s</string>\n    <string name=\"backup_status_failed\">Последни неуспешни резервни копия: %s</string>\n    <string name=\"backup_status_none\">Не са създадени резервни копия</string>\n    <string name=\"backup_warning_password\">Резервните копия са шифровани с отделна парола, която се задава в раздел Сигурност</string>\n    <string name=\"documentsui_error\">Изглежда, че на устройството липсва DocumentsUI. Това е важен системен компонент, който е необходим за избора и създаването на документи. Ако сте използвали инструменти за &quot;почистване&quot; на устройство, може случайно да сте го изтрили и ще трябва да го инсталирате отново.</string>\n    <string name=\"icon_pack_import_error\">Грешка при внасяне на пакет с икони</string>\n    <string name=\"icon_pack_import_exists_error\">Такъв пакет с икони вече съществува. Искате ли да бъде презаписан?</string>\n    <string name=\"icon_pack_delete_error\">Грешка при изтриване на пакет с икони</string>\n    <plurals name=\"icon_pack_info\">\n        <item quantity=\"one\">%d икона</item>\n        <item quantity=\"other\">%d икони</item>\n    </plurals>\n    <string name=\"icon_custom\">Избор</string>\n    <string name=\"permission_denied\">Достъпът е отказан</string>\n    <string name=\"andotp_new_format\">Нов формат (v0.6.3 или по-нов) </string>\n    <string name=\"andotp_old_format\">Стар формат (v0.6.2 или по-стар) </string>\n    <string name=\"choose_andotp_importer\">В какъв формат е резервният файл на andOTP?</string>\n    <string name=\"choose_totpauth_importer\">Резервно копие на TOTP Authenticator шифровано ли е с парола?</string>\n    <string name=\"choose_application\">Изберете приложението, от което искате да внесете</string>\n    <string name=\"choose_theme\">Изберете желаната тема</string>\n    <string name=\"choose_account_name_position\">Изберете къде да бъде показано името на профила</string>\n    <string name=\"choose_view_mode\">Изберете желания изглед на списъка</string>\n    <string name=\"choose_copy_behavior\">Изберете действие, което да копира</string>\n    <string name=\"parsing_file_error\">Грешка при анализиране на файла</string>\n    <string name=\"file_not_found\">Грешка: Файлът не е намерен</string>\n    <string name=\"reading_file_error\">Грешка при прочитане на файла</string>\n    <string name=\"app_lookup_error\">Грешка: Приложението не е инсталирано</string>\n    <string name=\"app_version_error\">Инсталираното издание на %s не се поддържа. В последните издания някои от файловете, необходими при внасяне са шифровани и недостъпни за Aegis. Евентуален опит за внасяне би довел до грешка. Желаете ли въпреки това да продължите?</string>\n    <string name=\"root_error\">Грешка: неуспешнополучаване на достъп до правата на суперпотребителя</string>\n    <plurals name=\"imported_entries_count\">\n        <item quantity=\"one\">%d запис е внесен</item>\n        <item quantity=\"other\">%d записа са внесени</item>\n    </plurals>\n    <plurals name=\"entries_shown\">\n        <item quantity=\"one\">Показан е %d запис</item>\n        <item quantity=\"other\">Показани са %d записа</item>\n    </plurals>\n    <string name=\"intro_import_error_title\">Грешка при внасяне на хранилището</string>\n    <string name=\"import_error_title\">По време на внасяне възникна една или повече грешки</string>\n    <string name=\"exporting_vault_error\">Грешка при изнасяне на хранилището</string>\n    <string name=\"exported_vault\">Хранилището е изнесено</string>\n    <string name=\"encryption_set_password_error\">Грешка при задаване на паролата.</string>\n    <string name=\"encryption_enable_biometrics_error\">Грешка при включване на биометрично отключване. Някои устройства имат лоши реализации на биометрично удостоверяване и е вероятно вашето е едно от тях. Помислете дали да не използвате само парола.</string>\n    <string name=\"no_cameras_available\">Няма налични камери</string>\n    <string name=\"read_qr_error\">Грешка при разчитане на QR кода</string>\n    <string name=\"read_qr_error_phonefactor\">Приложението Aegis е съвместимо със собственическия алгоритъм за 2FA на Microsoft. Не забравяйте да изберете „Настройка на приложение без известия“, когато настройвате 2FA в Office 365.</string>\n    <string name=\"partial_google_auth_import\">Установени са частично изнасени данни за Google Authenticator</string>\n    <string name=\"partial_google_auth_import_warning\">Няколко QR кода не са внесени. Следните кодове липсват:\\n\\n<b>%s</b>\\n\\nМожете да продължите с частично внесените данни, но е препоръчително да направите нов опит с всички QR кодове без да рискувате загуба на кодове за защите.</string>\n    <string name=\"missing_qr_code_descriptor\">• QR код %d</string>\n    <plurals name=\"import_partial_export_anyway\">\n        <item quantity=\"one\">Внасяне на %d код за достъп въпреки това</item>\n        <item quantity=\"other\">Внасяне на %d кода за достъп въпреки това</item>\n    </plurals>\n    <string name=\"import_google_auth_failure\">Грешка при внасяне към Google Authenticator</string>\n    <string name=\"unrelated_google_auth_batches_error\">Изнесеното съдържа части от несвързана порция кодове. Внасяйте всяка порция поотделно.</string>\n    <string name=\"no_tokens_can_be_imported\">Като резултат не са внесени кодове за защита</string>\n    <string name=\"unlocking_vault\">Отключване на хранилището</string>\n    <string name=\"rename_group\">Преименуване на група</string>\n    <string name=\"no_group_selection\">Ако запис не принадлежи към никоя група, може да бъде намерен в „Без група“.</string>\n    <string name=\"remove_group\">Премахване на група</string>\n    <string name=\"remove_group_description\">Наистина ли искате да премахнете тази група? Записите в нея ще бъдат преместени в групата „Без група“.</string>\n    <string name=\"remove_unused_groups\">Премахване на неизползваните групи</string>\n    <string name=\"remove_unused_groups_description\">Да бъдат ли премахнати групите, в които няма записи?</string>\n    <string name=\"remove_icon_pack\">Премахване на пакет с икони</string>\n    <string name=\"remove_icon_pack_description\">Искате ли този пакет с икони да бъде премахнат? Записите, които използват икони от него няма да бъдат засегнати.</string>\n    <string name=\"details\">Подробности</string>\n    <string name=\"show_error_details\">Подробности за грешката</string>\n    <string name=\"lock\">Заключва</string>\n    <string name=\"name\">Име</string>\n    <string name=\"no_group\">Без група</string>\n    <string name=\"sort\" comment=\"Title of the Sort button in the top action bar of the main view\">Сортиране</string>\n    <string name=\"sort_alphabetically\">Издател (А → Я)</string>\n    <string name=\"sort_alphabetically_reverse\">Издател (Я → А)</string>\n    <string name=\"sort_alphabetically_name\">Профил (А → Я)</string>\n    <string name=\"sort_alphabetically_name_reverse\">Профил (Я → А)</string>\n    <string name=\"sort_usage_count\">Брой използвания</string>\n    <string name=\"sort_last_used\">Последно използване</string>\n    <string name=\"sort_custom\">По избор</string>\n    <string name=\"last_used\">Последно използване</string>\n    <string name=\"last_used_never\">никога</string>\n    <string name=\"new_group\">Нова група…</string>\n    <string name=\"group\">Група</string>\n    <string name=\"group_name_hint\">Име на групата</string>\n    <string name=\"preference_manage_groups\">Промяна на групите</string>\n    <string name=\"preference_manage_groups_summary\">Управлявайте и изтривайте групите си тук</string>\n    <string name=\"preference_reset_usage_count\">Нулиране на броя използвания</string>\n    <string name=\"preference_reset_usage_count_summary\">Нулира броя на използванията на всеки запис в хранилището</string>\n    <string name=\"preference_reset_usage_count_dialog\">Сигурни ли сте, че желаете броя на използванията на всеки запис в хранилището да бъде нулиран?</string>\n    <string name=\"note\" comment=\"Users can add a note to an entry\">Бележка</string>\n    <string name=\"clear\">Изчистване</string>\n    <string name=\"dialog_duplicate_entry_title\" comment=\"'Duplicate' is a noun here\">Дублирано</string>\n    <string name=\"dialog_duplicate_entry_message\">Записът има същото име и издател като вече съществуващи записи. Как да продължим?</string>\n    <string name=\"dialog_duplicate_entry_overwrite_title\">Презаписване на съществуващите записи</string>\n    <string name=\"dialog_duplicate_entry_overwrite_subtitle\">Заменя съществуващите записи с новия. Действието е необратимо</string>\n    <string name=\"dialog_duplicate_entry_suffix_title\">Добавяне на наставка</string>\n    <string name=\"dialog_duplicate_entry_suffix_subtitle\">Добавяне на наставка към името на записа. Новото име ще бъде: %s</string>\n    <string name=\"dialog_duplicate_entry_cancel_title\">Отказ от запазването</string>\n    <string name=\"dialog_duplicate_entry_cancel_subtitle\">Дава възможност за повторна промяна преди запазване</string>\n    <plurals name=\"dialog_duplicate_entry_overwrite_dialog_message\">\n        <item quantity=\"one\">Желаете ли да бъде премахнат %d елемент с име: \\n\\n%s - %s</item>\n        <item quantity=\"other\">Желаете ли да бъдат премахнати %d елемента с име: \\n\\n%s - %s</item>\n    </plurals>\n    <string name=\"dialog_duplicate_entry_overwrite_dialog_title\">Потвърждаване на премахване</string>\n    <string name=\"pref_haptic_feedback_summary\">Кара устройството да вибрира при презареждане на кодовете</string>\n    <string name=\"pref_haptic_feedback_title\">Тактилна обратна връзка</string>\n    <string name=\"pref_highlight_entry_title\">Осветяване на запис при докосване</string>\n    <string name=\"pref_highlight_entry_summary\">Прави записите в списъка по-лесни за различаване един от друг, като при докосване временно ги осветява</string>\n    <string name=\"pref_groups_multiselect_title\">Групи за множествен избор</string>\n    <string name=\"pref_groups_multiselect_summary\">Дава възможност за избиране на няколко групи едновременно</string>\n    <string name=\"pref_minimize_on_copy_title\">Свиване при копиране</string>\n    <string name=\"pref_minimize_on_copy_summary\">Приложението се свива при копиране на код за достъп</string>\n    <string name=\"pref_copy_behavior_title\">Копиране на кодове за защита в междинната памет</string>\n    <string name=\"pref_search_behavior_title\">Начин на търсене</string>\n    <string name=\"pref_pause_entry_title\">Замразяване на запис при докосване</string>\n    <string name=\"pref_pause_entry_summary\">Спира автоматичното опресняване на кодовете след докосване. Необходимо е да е включено или „Осветяване на запис при докосване“, или „Показване при докосване“.</string>\n    <string name=\"pin_keyboard_description\">За да бъде показана цифровата клавиатура въведете паролата си. Имайте предвид, че това е удачно само ако вашата парола се състои само от цифри</string>\n    <string name=\"pin_keyboard_error\">Грешка при задаване на цифрова клавиатура</string>\n    <string name=\"pin_keyboard_error_description\">Не е възможно да зададете цифрова клавиатура. Паролата ви трябва да се състои само от цифри.</string>\n    <string name=\"pin_keyboard_disabled\">Паролата е променена. Цифровата клавиатура вече няма да се показва.</string>\n    <string name=\"selected\">Избрано</string>\n    <string name=\"dark_theme_title\">Тъмна тема</string>\n    <string name=\"light_theme_title\">Светла тема</string>\n    <string name=\"amoled_theme_title\">Тема AMOLED</string>\n    <string name=\"system_theme_title\">Зададена от прилож. за пест. на бат.</string>\n    <string name=\"system_amoled_theme_title\">Зададена от прилож. за пест. на бат. (AMOLED)</string>\n    <string name=\"normal_viewmode_title\">Обикновен</string>\n    <string name=\"compact_mode_title\">Сбит</string>\n    <string name=\"small_mode_title\">Дребен</string>\n    <string name=\"tiles_mode_title\">Плочки</string>\n    <string name=\"unknown_issuer\">Непознат издател</string>\n    <string name=\"unknown_account_name\">Неизвестно име на профил</string>\n    <plurals name=\"import_error_dialog\">\n        <item quantity=\"one\">Aegis не може да внесе %d код за защита. Той ще бъде пропуснат. Докоснете „подробности“, за да видите повече за грешката.</item>\n        <item quantity=\"other\">Aegis не може да внесе %d кода за защита. Те ще бъдат пропуснати. Докоснете „подробности“, за да видите повече за грешките.</item>\n    </plurals>\n    <string name=\"unable_to_process_deeplink\">Грешка при обработка на препратка към секция в приложението</string>\n    <string name=\"unable_to_read_qrcode_file\">Грешка при прочитане и обработка на QR кода от файла: %s.</string>\n    <string name=\"unable_to_process_shared_text\">Грешка при обработка на споделения текст като еднократна парола</string>\n    <string name=\"unable_to_read_qrcode_files\">Грешка при прочитане и обработка на някои от кодовете за QR. %1$d от общо %2$d записа са внесени.</string>\n    <string name=\"unable_to_generate_qrcode\">Грешка при създаване на QR код</string>\n    <string name=\"select_picture\">Изберете картина</string>\n    <string name=\"select_icon\">Изберете икона</string>\n    <string name=\"tile_open_vault\" comment=\"label for a quick settings tile that opens the app when tapped\">Отваряне на хранилище</string>\n    <string name=\"tile_open_scanner\" comment=\"label for a quick settings tile that opens the QR code scanner when tapped\">Отваряне на скенера</string>\n    <string name=\"toggle_checkboxes\">Превключване на отметките</string>\n    <string name=\"search\">Търсене</string>\n    <string name=\"channel_name_lock_status\">Състояние на хранилището</string>\n    <string name=\"channel_description_lock_status\">Aegis може да създаде постоянно известие, когато хранилището е заключено</string>\n    <string name=\"vault_unlocked_state\">Хранилището е отключено. За да го заключите докоснете тук.</string>\n    <string name=\"version\">Издание</string>\n    <string name=\"changelog\">Дневник на промените</string>\n    <string name=\"whats_new\">Какво ново</string>\n    <string name=\"github_description\">Изходен код, дефекти и информация</string>\n    <string name=\"license\">Лиценз</string>\n    <string name=\"license_description\">Aegis Authenticator е лицензиран под GPLv3</string>\n    <string name=\"third_party_licenses\">Лицензи на трети страни</string>\n    <string name=\"third_party_licenses_description\">Лицензи на използвани външни библиотеки</string>\n    <string name=\"country_netherlands\">Нидерландия </string>\n    <string name=\"email_us\">Електронна поща</string>\n    <string name=\"visit_website\">Страница</string>\n    <string name=\"about_support\">Поддръжка</string>\n    <string name=\"support_rate\">Отзив</string>\n    <string name=\"support_rate_description\">Подкрепете ни, като оставите своя отзив в Google Play</string>\n    <string name=\"webview_error\">Изглежда, че на устройството липсва WebView. Това е важен системен компонент, който е необходим за преглед на дневника с промени и лиценза. Ако сте използвали инструменти за &quot;почистване&quot; на устройство, може случайно да сте го изтрили и ще трябва да го инсталирате отново.</string>\n    <string name=\"email\">Имейл</string>\n    <string name=\"time_sync_warning_title\">Автоматична синхронизация на датата и часа</string>\n    <string name=\"time_sync_warning_message\">Aegis разчита системният часовник да бъде верен, за да може да изчислява правилните кодове. Отклонение от само няколко секунди може да доведе до грешни изчисления. Изглежда устройството не е настроено да се сверява. Искате ли да го настроите сега?</string>\n    <string name=\"time_sync_warning_disable\">Без предупреждения. Аз зная какво правя.</string>\n    <string name=\"google_qr_export_unrelated\">Намерен е несвързан QR код. Рестартирате скенера.</string>\n    <plurals name=\"google_qr_export_scanned\">\n        <item quantity=\"one\">Сканиран %1$d/%2$d код за QR</item>\n        <item quantity=\"other\">Сканирани %1$d/%2$d кодове за QR</item>\n    </plurals>\n    <string name=\"google_qr_export_unexpected\">Очакван е код за QR №%1$d, но е сканиран №%2$d</string>\n    <string name=\"backup_error_bar_message\"><b>Резервно копие на хранилището е било неуспешно</b></string>\n    <string name=\"backup_error_dialog_details\" comment=\"The first parameter is the type of backup (e.g. built-in or Android backup). The second parameter is an elapsed time in the style of 'x seconds/minutes/days ago'.\">        Един от последните опити за резервно копие на хранилището чрез %1$s е неуспешен поради грешка. Това се е случило %2$s. Проверете настройките и се уверете, че резервни копия могат да бъдат създавани с тези настройки.\n    </string>\n    <string name=\"backup_permission_error_dialog_details\" comment=\"The first parameter is the type of backup (e.g. built-in or Android backup). The second parameter is an elapsed time in the style of 'x seconds/minutes/days ago'.\">        Скорошен опит за резервно копие на хранилището с използване на %1$s е неуспешен, защото Aegis няма права за запис в местоназначението. Опитът е направен %2$s. Такава грешка може да възникне, ако сте преместили или преименували местоназначението или ако наскоро сте възстановили Aegis от резервно копие. Настройте местоназначението за резервно копие.\n    </string>\n    <string name=\"backup_system_builtin\">Вградените резервни копия на Aegis</string>\n    <string name=\"backup_system_android\">Облачните резервни копия на Андроид</string>\n    <string name=\"backup_reminder_bar_message_with_latest\" comment=\"The parameter is an elapsed time in the style of 'x seconds/minutes/days ago'\">        Последното резервно копие е остаряло (%s)\n    </string>\n    <string name=\"backup_reminder_bar_message\">        Липсва резервно копие на последните промени\n    </string>\n    <string name=\"backup_reminder_bar_dialog_title\">Липсва резервно копие на последните промени</string>\n    <string name=\"backup_reminder_bar_dialog_summary\">        Последните промени на хранилището не са запазени в резерено копие. Важно е често да правите резервни копия, за да не загубите достъп до профилите си. Помислете дали да не настроите автоматични резервни копия от настройките.\n    </string>\n    <string name=\"backup_reminder_bar_dialog_accept\">Настройки на резервни копия</string>\n    <string name=\"backup_plaintext_export_warning\"><b>Хранилището е било изнесено в чист текст</b></string>\n    <string name=\"pref_show_plaintext_warning_hint\">Без повторно показване на предупреждението</string>\n    <string name=\"backup_plaintext_warning_explanation\">Скоро е правено нешифровано резервно копие на хранилището. С оглед сигурността на кодовете за защита е препоръчително да изтриете нешифрования файл след като вече не е необходим.</string>\n    <string name=\"switch_camera\">Смяна на камера</string>\n    <string name=\"empty_list\">Няма кодове, които да бъдат показани. Добавете записи от бутона със знак плюс в долния десен ъгъл</string>\n    <string name=\"empty_list_title\">Не са открити записи</string>\n    <string name=\"empty_group_list\">Няма групи, които да бъдат показани. Добавете групи в екрана за промяна на запис</string>\n    <string name=\"empty_group_list_title\">Не са намерени групи</string>\n    <string name=\"no_icon_packs\">Не са внесени пакети с икони. Докоснете бутона със знак плюс. Съвет: пробвайте <a href=\"https://aegis-icons.github.io\">aegis-icons</a>.</string>\n    <string name=\"no_icon_packs_title\">Липсват икони</string>\n    <string name=\"pick_icon\">Избор на икона</string>\n    <string name=\"uncategorized\">Без категория</string>\n    <string name=\"done\">Готово</string>\n    <plurals name=\"qr_count\">\n        <item quantity=\"one\">%d / %d QR код</item>\n        <item quantity=\"other\">%d / %d QR кода</item>\n    </plurals>\n    <string name=\"next\">Следващ</string>\n    <string name=\"previous\">Предишен</string>\n    <string name=\"copy_uri\">Копиране на адреса</string>\n    <string name=\"unable_to_copy_uri_to_clipboard\">Грешка при копиране на адреса</string>\n    <string name=\"uri_copied_to_clipboard\">Адресът е копиран</string>\n    <string name=\"transfer_entry_description\">Сканирайте QR кода с приложението за удостоверяване, в което искате да прехвърлите този запис</string>\n    <string name=\"transfer_entry_brightness\">Докоснете QR, за да превключите пълна яркост при цял екран</string>\n    <string name=\"google_auth_compatible_transfer_description\">Сканирайте тези кодове в Aegis или Google Authenticator.\\n\\nПоради ограничения в приложението на Google Authenticator са включени само кодовете, които използват SHA1 и извеждат 6 цифри</string>\n    <string name=\"password_strength_very_weak\">Много слаба</string>\n    <string name=\"password_strength_weak\">Слаба</string>\n    <string name=\"password_strength_fair\">Задоволителна</string>\n    <string name=\"password_strength_good\">Добра</string>\n    <string name=\"password_strength_strong\">Много добра</string>\n    <string name=\"password_strength_unknown\">Паролата е твърде дълга за определяне качеството ѝ</string>\n    <string name=\"pref_pin_keyboard_title\">Цифрова клавиатура на заключения екран</string>\n    <string name=\"pref_pin_keyboard_summary\">Ако е включено на заключения екран ще се използва цифрова клавиатура. Това е удачно само ако вашата парола се състои само от цифри</string>\n    <string name=\"title_activity_preferences\">Настройки</string>\n    <string name=\"title_activity_manage_groups\">Управление на групи</string>\n    <string name=\"title_activity_transfer\">Прехвърляне на записи</string>\n    <string name=\"title_activity_about\">Относно</string>\n    <string name=\"title_activity_edit_entry\">Променяне на запис</string>\n    <string name=\"title_activity_scan_qr\">Скениране на QR код</string>\n    <string name=\"title_activity_import_entries\">Внасяне на записи</string>\n    <string name=\"title_activity_assign_icons\">Задаване на икони</string>\n    <string name=\"title_activity_licenses\">Лицензи на трети страни</string>\n    <string name=\"dialog_wipe_entries_title\">Премахване на записи</string>\n    <string name=\"dialog_wipe_entries_message\">Хранилището вече съдържа записи. Искате ли да бъдат премахнати, преди внасяне на файла?\\n\\n<b> По този начин безвъзвратно ще загубите достъп до съществуващите записи в хранилището.</b></string>\n    <string name=\"dialog_wipe_entries_checkbox\">Изпразване на хранилището</string>\n    <string name=\"import_from_clipboard_title\">Внасяне на копираното</string>\n    <string name=\"import_from_clipboard_message\">Установен е копиран otpauth адрес.\\n\\n<b>Име</b>: %1$s\\n<b>Издател</b>: %2$s\\n\\nДа бъде ли използван за предварително попълване на формуляра?</string>\n    <string name=\"panic_trigger_ignore_toast\">Aegis получи сигнал за тревога, но настройката е изключена, пренебрегване на сигнала</string>\n    <string name=\"pref_panic_trigger_title\">Изтриване на хранилището при сигнал за тревога</string>\n    <string name=\"pref_panic_trigger_summary\">Изтрива хранилището, когато от Ripple е получен сигнал за тревога</string>\n    <string name=\"import_vault\">Внасяне на хранилище на Aegis</string>\n    <string name=\"import_vault_hint\">Искате да внесете от друго приложение за 2FA? Завършете помощника и посетете меню Настройки.</string>\n    <plurals name=\"import_duplicate_toast\">\n        <item quantity=\"one\">Махната е отметката на %d вероятно дублиран запис. Прегледайте списъка.</item>\n        <item quantity=\"other\">Махната е отметката на %d вероятно дублирани записа. Прегледайте списъка.</item>\n    </plurals>\n    <string name=\"importer_help_2fas\">Изберете файл с резервно копие на 2FAS Authenticator.</string>\n    <string name=\"importer_help_aegis\">Изберете изнесен файл или резервно копие на Aegis.</string>\n    <string name=\"importer_help_authenticator_plus\">Изберете файл с резервно копие на Authenticator Plus, получен от <b>Настройки → Резервни копия и възстановяване → Изнасяне като текст и HTML</b>.</string>\n    <string name=\"importer_help_authy\">Изберете копие на файла <b>/data/data/com.authy.authy/shared_prefs/com.authy.storage.tokens.authenticator.xml</b>, който се намира в папката с данни на Authy.</string>\n    <string name=\"importer_help_andotp\">Изберете изнесен файл или резервно копие на andOTP.</string>\n    <string name=\"importer_help_bitwarden\">Изберете изнесен файл или резервно копие на Bitwarden. Шифровани файлове не се поддържат.</string>\n    <string name=\"importer_help_battle_net_authenticator\">Изберете копие на файла <b>/data/data/com.blizzard.messenger/shared_prefs/com.blizzard.messenger.authenticator_preferences.xml</b>, който се намира в папката с данни на Battle.net Authenticator.</string>\n    <string name=\"importer_help_duo\">Изберете копие на файла <b>/data/data/com.duosecurity.duomobile/files/duokit/accounts.json</b>, който се намира в папката с данни на DUO.</string>\n    <string name=\"importer_help_ente_auth\">Изберете файл с резервно копие на Ente Auth. За момента се поддържат само нешифровани резервни копия.</string>\n    <string name=\"importer_help_freeotp\">FreeOTP 2: Изберете резервно копие на файла.\\nFreeOTP 1.x: Изберете копие на файла <b>/data/data/org.fedorahosted.freeotp/shared_prefs/tokens.xml</b>, който се намира в папката с данни на FreeOTP.</string>\n    <string name=\"importer_help_freeotp_plus\">Изберете изнесен файл от FreeOTP+.</string>\n    <string name=\"importer_warning_title_freeotp2\">Съвместимост с FreeOTP 2</string>\n    <string name=\"importer_warning_message_freeotp2\">Открити са редица дефекти във FreeOTP 2, които биха могли да доведат до повреждане на резервните копия. Aegis ще се опита да възстанови възможно най-много записи, но е възможно някои или дори всички от тях да не бъдат внесени.</string>\n    <string name=\"importer_help_google_authenticator\"><b>Поддържат се файлове на Google Authenticator v5.10 и по-предишни издания.</b>\\n\\nИзберете копие на файла <b>/data/data/com.google.android.apps.authenticator2/databases/databases</b>, който се намира в папката с данни на Google Authenticator.</string>\n    <string name=\"importer_help_microsoft_authenticator\">Изберете копие на файла <b>/data/data/com.azure.authenticator/databases/PhoneFactor</b>, който се намира в папката с данни на Microsoft Authenticator.</string>\n    <string name=\"importer_help_plain_text\">Изберете чист текстов файл с Google Authenticator URI, по един на ред.</string>\n    <string name=\"importer_help_proton_authenticator\">Изберете файл с резервно копие (.json) на Proton Authenticator, получен от <b>Настройки → Изнасяне</b>.</string>\n    <string name=\"importer_help_steam\"><b>Поддържат се файлове на Steam v3.0 и по-нови издания.</b>\\n\\nИзберете копие на файла <b>/data/data/com.valvesoftware.android.steam.community/files/Steamguard-*.json</b>, който се намира в папката с данни на Steam.</string>\n    <string name=\"importer_help_stratum\">Изберете файл с резервно копие на Stratum, получен от <b>Настройки → Резервно копие → Резервно копие в шифрован файл (препотъчително)</b>.</string>\n    <string name=\"importer_help_totp_authenticator\">Изберете изнесен файл от TOTP Authenticator.</string>\n    <string name=\"importer_help_winauth\">Изберете изнесен файл от WinAuth.</string>\n    <string name=\"import_assign_icons_dialog_title\">Задаване на икони</string>\n    <string name=\"import_assign_icons_dialog_text\">Задаване на икони на внесените записи?</string>\n    <string name=\"importer_encrypted_exception_google_authenticator\">Пропуснат е шифрован запис: %s</string>\n    <string name=\"importer_help_direct\">Внасяне на записи директно от %s. Приложението трябва да бъде инсталирано на устройството и Aegis да има достъп до правата на суперпотребителя.</string>\n    <string name=\"groups\">Групи</string>\n    <string name=\"pref_focus_search\">Търсене при отваряне на приложението</string>\n    <string name=\"pref_focus_search_summary\">Каретката се поставя в полето за търсене при отваряне на приложението.</string>\n    <string name=\"pref_grouping_halves\">В две групи</string>\n    <string name=\"pref_grouping_none\">Без групиране</string>\n    <string name=\"pref_grouping_size_two\">В групи по 2</string>\n    <string name=\"pref_grouping_size_three\">В групи по 3</string>\n    <string name=\"pref_grouping_size_four\">В групи по 4</string>\n    <string name=\"pref_copy_behavior_never\">Никога</string>\n    <string name=\"pref_copy_behavior_single_tap\">Единично докосване</string>\n    <string name=\"pref_copy_behavior_double_tap\">Двойно докосване</string>\n    <string name=\"pref_account_name_position_hidden\">Скрито</string>\n    <string name=\"pref_account_name_position_end\">До издателя</string>\n    <string name=\"pref_account_name_position_below\">Под издателя</string>\n    <plurals name=\"time_elapsed_seconds\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"one\">преди %d секунда</item>\n        <item quantity=\"other\">преди %d секунди</item>\n    </plurals>\n    <plurals name=\"time_elapsed_minutes\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"one\">преди %d минута</item>\n        <item quantity=\"other\">преди %d минути</item>\n    </plurals>\n    <plurals name=\"time_elapsed_hours\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"one\">преди %d час</item>\n        <item quantity=\"other\">преди %d часа</item>\n    </plurals>\n    <plurals name=\"time_elapsed_days\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"one\">преди %d ден</item>\n        <item quantity=\"other\">преди %d дена</item>\n    </plurals>\n    <plurals name=\"time_elapsed_years\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"one\">преди %d година</item>\n        <item quantity=\"other\">преди %d години</item>\n    </plurals>\n    <plurals name=\"dropdown_checkboxes_default_count\">\n        <item quantity=\"one\">%d избран елемент</item>\n        <item quantity=\"other\">%d избрани елемента</item>\n    </plurals>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-bg-rBG-v29/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"system_theme_title\">Системна</string>\n    <string name=\"system_amoled_theme_title\">Системна (AMOLED)</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-ca-rES/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources xmlns:tools=\"http://schemas.android.com/tools\">\n    <string name=\"action_settings\">Configuració</string>\n    <string name=\"action_about\">Quant a</string>\n    <string name=\"action_delete\">Esborrar</string>\n    <string name=\"action_transfer\">Transferir</string>\n    <string name=\"action_edit_icon\">Editar la icona</string>\n    <string name=\"action_reset_usage_count\">Reiniciar comptador d\\'usos</string>\n    <string name=\"action_reset_usage_count_dialog\">Segur que vols reiniciar el comptador d\\'ús d\\'aquesta entrada a 0?</string>\n    <string name=\"action_default_icon\">Restaurar l\\'icona predeterminada</string>\n    <string name=\"discard\">Descartar</string>\n    <string name=\"save\">Guardar</string>\n    <string name=\"all\">Tot</string>\n    <string name=\"issuer\">Emissor</string>\n    <string name=\"yandex_pin\">PIN (4–16 digits)</string>\n    <string name=\"motp_pin\">PIN (4 digits)</string>\n    <string name=\"suggested\">Suggerit</string>\n    <string name=\"usage_count\">Utilitzacions</string>\n    <string name=\"warning\">Avís</string>\n    <string name=\"pref_cat_appearance_app\">Aplicació</string>\n    <string name=\"pref_cat_appearance_entries\">Entrades</string>\n    <string name=\"pref_cat_backups_android\">Android</string>\n    <string name=\"pref_cat_backups_auto\">Còpies de seguretat automàtiques</string>\n    <string name=\"pref_section_behavior_title\">Comportament</string>\n    <string name=\"pref_section_behavior_summary\">Configurar comportament en interactuar amb les entrades.</string>\n    <string name=\"pref_section_appearance_title\">Aparença</string>\n    <string name=\"pref_section_appearance_summary\">Ajustar tema, idioma i altres configuracions que afectin l\\'aparença de l\\'app.</string>\n    <string name=\"pref_section_security_title\">Seguretat</string>\n    <string name=\"pref_section_security_summary\">Configurar xifrat, desbloqueig biometric i altres opcions de seguretat.</string>\n    <string name=\"pref_section_import_export_title\">Importa i exporta</string>\n    <string name=\"pref_section_import_export_summary\">Importa còpies de seguretat d\\'Aegis o altres aplicacions d\\'autentificació. Exporta manualment la caixa forta d\\'Aegis.</string>\n    <string name=\"pref_section_audit_log_title\">Registre d\\'auditoria</string>\n    <string name=\"pref_section_audit_log_summary\">Llista de tots els esdeveniments importants registrats de l\\'aplicació.</string>\n    <string name=\"pref_section_backups_title\">Còpies de seguretat</string>\n    <string name=\"pref_section_backups_summary\">Configura còpies de seguretat automàtiques a la ubicació que triïs o activa la còpia al núvol d\\'Android.</string>\n    <string name=\"pref_section_icon_packs\">Paquets d\\'icones</string>\n    <string name=\"pref_section_icon_packs_summary\">Gestiona i importa paquets d\\'icones</string>\n    <string name=\"pref_select_theme_title\">Tema</string>\n    <string name=\"pref_dynamic_colors_title\">Colors dinàmics</string>\n    <string name=\"pref_dynamic_colors_summary\">Aplica una superposició basada en els colors del teu tema d\\'Android</string>\n    <string name=\"pref_view_mode_title\">Mode de visualització</string>\n    <string name=\"pref_lang_title\">Idioma</string>\n    <string name=\"pref_show_icons_title\">Mostra icones</string>\n    <string name=\"pref_show_icons_summary\">Mostra icones al costat de cada entrada</string>\n    <string name=\"pref_code_group_size_title\">Agrupació dels dígits</string>\n    <string name=\"pref_code_group_size_summary\">Triar nombre de digits per agrupar els codis</string>\n    <string name=\"pref_account_name_position_title\">Mostra el nom del compte</string>\n    <string name=\"pref_show_next_code_title\">Mostrar el proper codi</string>\n    <string name=\"pref_show_next_code_summary\">Genera i mostra el proper codi anticipadament</string>\n    <string name=\"pref_expiration_state_title\">Avisa quan els codis són a punt de caducar</string>\n    <string name=\"pref_expiration_state_summary\">Canvia el color dels codis i fer que parpellegin quan estan a punt de caducar</string>\n    <string name=\"pref_expiration_state_fallback\">Canvia el color dels codis quan són a punt de caducar</string>\n    <string name=\"pref_shared_issuer_account_name_title\">Mostra el nom del compte només quan sigui necessari</string>\n    <string name=\"pref_shared_issuer_account_name_summary\">Mostra el nom de compte només quan es comparteixi el mateix emissor. Altres noms de compte estaran ocults.</string>\n    <string name=\"pref_account_name_position_summary_override\">S\\'omet aquesta configuració en usar la visualització en mosaic. Els noms de compte es mostraran a sota de l\\'emissor.</string>\n    <string name=\"pref_import_file_title\">Importa des d\\'un fitxer</string>\n    <string name=\"pref_import_file_summary\">Importar fitxes des d\\'un fitxer</string>\n    <string name=\"pref_android_backups_title\">Copies al núvol d\\'Android</string>\n    <string name=\"pref_android_backups_summary\">Permetre al sistema de còpies al núvol d\\'Android incloure la caixa forta d\\'Aegis a les còpies. Això només funciona per caixes fortes xifrades.</string>\n    <string name=\"pref_android_backups_hint\"><i>Les còpies dispositiu-a-dispositiu (D2D) sempre estan permeses, sense tenir en compte la configuració de dalt</i></string>\n    <string name=\"pref_backups_title\">Copia la caixa forta automàticament</string>\n    <string name=\"pref_backups_summary\">Crear còpies de seguretat de la caixa forta a l\\'emmagatzematge extern quan es facin canvis. Això només funciona per a caixes fortes xifrades.</string>\n    <string name=\"pref_backups_reminder_title\">Recordatori de còpia</string>\n    <string name=\"pref_backups_reminder_summary\">Mostra un recordatori per a fer còpia de seguretat de la caixa forta si no has desat els teus últims canvis.</string>\n    <string name=\"pref_backups_reminder_dialog_title\">Desactivar recordatori de còpia</string>\n    <string name=\"pref_backups_reminder_dialog_summary\">Desactivant aquest recordatori, l\\'Aegis no t\\'alertarà en cas de tenir fitxes sense còpia de seguretat. Això posa en risc l\\'accés a les teves fitxes. Segur que vols desactivar el recordatori?</string>\n    <string name=\"pref_backups_versioning_strategy_title\">Estratègia de còpia de seguretat</string>\n    <string name=\"pref_backups_versioning_strategy_keep_x_versions\">Mantenir un nombre de versions</string>\n    <string name=\"pref_backups_versioning_strategy_single_backup\">Còpia de seguretat única</string>\n    <string name=\"pref_backups_versioning_strategy_single_backup_warning\">L\\'estratègia de còpia de seguretat seleccionada no és fiable i no es recomana. Una fallada de la còpia de seguretat pot resultar en la pèrdua de la teva única còpia de seguretat.</string>\n    <string name=\"pref_backups_versioning_strategy_dialog_title\">Selecciona una estratègia de còpia de seguretat</string>\n    <string name=\"pref_backups_location_title\">Ubicació de la còpia de seguretat</string>\n    <string name=\"pref_backups_location_summary\">Les còpies es desaran a</string>\n    <string name=\"pref_backup_location_summary\">La còpia de seguretat es desarà a</string>\n    <string name=\"pref_backups_trigger_title\">Disparador de còpia</string>\n    <string name=\"pref_backups_trigger_summary\">Llançar còpia manualment</string>\n    <string name=\"pref_backups_versions_title\">Nombre de versions a mantenir</string>\n    <string name=\"pref_backups_versions_infinite\">\\u221E</string>\n    <plurals name=\"pref_backups_versions_summary\">\n        <item quantity=\"one\">Mantindre %1$d versions a la còpia</item>\n        <item quantity=\"other\">Mantindre %1$d versions a la còpia</item>\n    </plurals>\n    <string name=\"pref_backups_versions_infinite_summary\">Mantén un nombre infinit de versions de la còpia de seguretat</string>\n    <string name=\"pref_import_app_title\">Importar des d\\'app</string>\n    <string name=\"pref_import_app_summary\">Importar fitxes des d\\'una aplicació (cal root)</string>\n    <string name=\"pref_export_title\">Exporta</string>\n    <string name=\"pref_export_summary\">Exporta la caixa forta</string>\n    <string name=\"pref_password_reminder_title\">Recordatori de contrasenya</string>\n    <string name=\"pref_google_auth_export_title\">Exportar per Google Authenticator</string>\n    <string name=\"pref_google_auth_export_descriptor\">Genera codis QR d\\'exportació compatibles amb Google Authenticator</string>\n    <string name=\"pref_google_auth_export_no_data\">No hi ha dades per exportar</string>\n    <plurals name=\"pref_google_auth_export_incompatible_entries\">\n        <item quantity=\"one\">S\\'ha omès %d entrada incompatible</item>\n        <item quantity=\"other\">S\\'han omès %d entrades incompatibles</item>\n    </plurals>\n    <string name=\"pref_password_reminder_summary\">Mostra %s un recordatori per a introduir la contrasenya, per tal a què no se t\\'oblidi.</string>\n    <string name=\"pref_password_reminder_summary_disabled\">Desactivat</string>\n    <string name=\"pref_secure_screen_title\">Seguretat de pantalla</string>\n    <string name=\"pref_secure_screen_summary\">Bloqueja les captures de pantalla de la aplicació</string>\n    <string name=\"pref_tap_to_reveal_title\">Toca per a mostrar</string>\n    <string name=\"pref_tap_to_reveal_summary\">Les fitxes estaran amagades per defecte. Toca una fitxa per a mostrar el codi.</string>\n    <string name=\"pref_tap_to_reveal_time_title\">Temps d\\'espera per a mostrar</string>\n    <string name=\"pref_auto_lock_title\">Bloqueig automàtic</string>\n    <string name=\"pref_auto_lock_summary\">Quan %s</string>\n    <string name=\"pref_auto_lock_summary_disabled\">Desactivat</string>\n    <string name=\"pref_auto_lock_prompt\">Bloquejar Aegis quan</string>\n    <string name=\"pref_auto_lock_type_back_button\">Es toca el botó enrere</string>\n    <string name=\"pref_auto_lock_type_minimize\">Es minimitza l\\'app</string>\n    <string name=\"pref_auto_lock_type_device_lock\">Es bloqueja el dispositiu</string>\n    <string name=\"pref_backup_password_category\">Còpia de seguretat i exportació</string>\n    <string name=\"pref_backup_password_title\">Diferent contrasenya que per còpia de seguretat i exportació</string>\n    <string name=\"pref_backup_password_summary\">Si està activat, la contrasenya que s\\'utilitza per desbloquejar l\\'aplicació ja no es pot utilitzar per desxifrar còpies de seguretat i exportacions.</string>\n    <string name=\"pref_backup_password_change_title\">Canviar la contrasenya per a la còpia de seguretat i exportar</string>\n    <string name=\"pref_backup_password_change_summary\">Definir una contrasenya nova que s\\'utilitzarà per xifrar la caixa forta durant la còpia de seguretat i l\\'exportació.</string>\n    <string name=\"pref_encryption_title\">Xifrat</string>\n    <string name=\"pref_encryption_summary\">Xifra la caixa forta i desbloqueja-la amb contrasenya o biomètrics</string>\n    <string name=\"pref_biometrics_title\">Desbloqueig biomètric</string>\n    <string name=\"pref_biometrics_summary\">Permet l\\'autenticació biomètrica per a desbloquejar la caixa forta</string>\n    <string name=\"pref_search_behavior_summary\">Busca a: %s</string>\n    <string name=\"pref_search_behavior_prompt\">Buscar en qualsevol d\\'aquests camps</string>\n    <string name=\"pref_search_behavior_type_name\">Nom</string>\n    <string name=\"pref_search_behavior_type_issuer\">Emissor</string>\n    <string name=\"pref_search_behavior_type_note\">Nota</string>\n    <string name=\"pref_search_behavior_type_groups\">Grups</string>\n    <string name=\"pref_set_password_title\">Canvia la contrasenya</string>\n    <string name=\"pref_set_password_summary\">Defineix una nova contrasenya per a desbloquejar la caixa forta</string>\n    <string name=\"no_events_title\">Cap esdeveniment registrat</string>\n    <string name=\"no_events_description\">No s\\'ha informat d\\'esdeveniments importants dins l\\'aplicació</string>\n    <string name=\"event_title_vault_unlocked\">S\\'ha desbloquejat la volta</string>\n    <string name=\"event_description_vault_unlocked\">La volta s\\'ha desbloquejat satisfactòriament</string>\n    <string name=\"event_title_backup_created\">Còpia de seguretat creada</string>\n    <string name=\"event_description_backup_created\">S\\'ha creat satisfactòriament una còpia de seguretat de la volta</string>\n    <string name=\"event_title_android_backup_created\">Còpia de seguretat creada per l\\'Android</string>\n    <string name=\"event_description_android_backup_created\">L\\'Android ha creat satisfactòriament una còpia de seguretat de la volta</string>\n    <string name=\"event_title_vault_exported\">S\\'ha exportat la volta</string>\n    <string name=\"event_description_vault_exported\">S\\'ha exportat una còpia de la volta</string>\n    <string name=\"event_title_entry_shared\">Entrada compartida</string>\n    <string name=\"event_description_entry_shared\">S\\'ha compartit una entrada</string>\n    <string name=\"event_title_vault_unlock_failed_password\">No s\\'ha pogut desbloquejar la volta (contrasenya)</string>\n    <string name=\"event_description_vault_unlock_failed_password\">Hi ha hagut un intent de desbloquejar la volta amb una contrasenya incorrecta</string>\n    <string name=\"event_title_vault_unlock_failed_biometrics\">No s\\'ha pogut desbloquejar la volta (dades biomètriques)</string>\n    <string name=\"event_description_vault_unlock_failed_biometrics\">Hi ha hagut un intent de desbloquejar la volta amb dades biomètriques incorrectes</string>\n    <string name=\"event_unknown\">Tipus d\\'esdeveniment desconegut</string>\n    <string name=\"audit_log_entry_deleted\">(esborrat)</string>\n    <string name=\"today_at_time\">Avui a les %1$s</string>\n    <string name=\"day_of_week_at_time\">%1$s a les %2$s</string>\n    <string name=\"export_encrypted\">Xifra la caixa forta</string>\n    <string name=\"export_help\">Això exportarà la caixa forta fora d\\'Aegis. Tria el format en el que s\\'ha d\\'exportar:</string>\n    <string name=\"export_warning_unencrypted\">Això exportarà una còpia sense xifrar de la caixa forta d\\'Aegis. <b>No recomanat</b>.</string>\n    <string name=\"export_warning_password\">Les exportacions es xifren fent servir una contrasenya diferent, configurada a la secció de seguretat.</string>\n    <string name=\"understand_risk_accept\">Entenc el risc</string>\n    <string name=\"export_format_aegis\">Aegis (.JSON)</string>\n    <string name=\"export_format_google_auth_uri\">Fitxers de text (*.txt)</string>\n    <string name=\"export_format_html\">Pàgina web (.HTML)</string>\n    <string name=\"export_format_hint\">Format d\\'exportació</string>\n    <string name=\"export_all_groups\">Exportar tots els grups</string>\n    <string name=\"export_choose_groups\">Tria els grups a exportar</string>\n    <plurals name=\"export_groups_selected_count\">\n        <item quantity=\"one\">%d grup seleccionat</item>\n        <item quantity=\"other\">%d grups seleccionats</item>\n    </plurals>\n    <string name=\"export_no_groups_selected\">No s\\'han triat grups per a exportar</string>\n    <string name=\"export_html_title\" comment=\"The title of an HTML export document\">Exportat d\\'Aegis Authenticator</string>\n    <string name=\"choose_authentication_method\">Seguretat</string>\n    <string name=\"authentication_method_explanation\">Aegis es una app d\\'A2F. Les fitxes es desen a una caixa forta que opcionalment pot ser xifrada amb una contrasenya. Si un atacant obté el fitxer de la caixa forta, no hi podrà accedir sense la contrasenya.\\n\\nHem preseleccionat la opció que creiem que anirà millor al teu dispositiu.</string>\n    <string name=\"authentication_method_none\">Cap</string>\n    <string name=\"authentication_method_none_description\">No cal contrasenya pet a desbloquejar la caixa forta i no es xifrarà.<b>No recomanat</b>.</string>\n    <string name=\"authentication_method_password\">Contrasenya</string>\n    <string name=\"authentication_method_password_description\">Cal una contrasenya per a desbloquejar la caixa forta.</string>\n    <string name=\"authentication_method_password_explanation\">Atenció: Si t\\'oblides de la contrasenya, perdràs l\\'accés a les fitxes. No hi ha cap manera de recuperar la contrasenya.</string>\n    <string name=\"authentication_method_biometrics\">Dades biomètriques</string>\n    <string name=\"authentication_method_biometrics_description\">A més de la contrasenya, les dades biomètriques enregistrades al dispositiu, com una emprempta digital o la cara, es poden fer servir per a desbloquejar la caixa forta.</string>\n    <string name=\"authentication\">Desbloqueja la caixa forta</string>\n    <string name=\"authentication_multiline\" comment=\"The newline in the middle is used for aesthetic purposes\">Desbloqueja la \\ncaixa forta</string>\n    <string name=\"auth_use_biometrics\">O toca aquí per a fer servir el <font fgcolor=\"#FF0D86C1\">desbloqueig biomètric</font></string>\n    <string name=\"set_password\">Si et plau, introdueix una contrasenya</string>\n    <string name=\"set_group\">Introdueix un nom de grup</string>\n    <string name=\"set_number\">Introdueix un número</string>\n    <string name=\"set_password_confirm\">Confirma la contrasenya</string>\n    <string name=\"invalid_password\">La contrasenya no és correcta</string>\n    <string name=\"invalidated_biometrics\">S\\'ha detectat un canvi en la configuració de seguretat del dispositiu. Si us plau, ves a \\\"Aegis -&gt; Configuració -&gt; Seguretat -&gt; Desbloqueig biomètric\\\" per a desactivar i reactivar-lo.</string>\n    <string name=\"password_reminder\">Introdueix la contrasenya. T\\'ho demanarem ocasionalment per tal que no te n\\'oblidis.</string>\n    <string name=\"password_reminder_dialog_title\">Desbloqueig biomètric per defecte</string>\n    <string name=\"password_reminder_dialog_message\">Ocasionalment et demanarem la contrasenya per tal que no te n\\'oblidis i no perdis l\\'accés a la teva caixa forta. Després d\\'entrar la contrasenya, l\\'Aegis tornarà al desbloqueig biomètric per defecte. Et tornarem a demanar la contrasenya en el proper recordatori.</string>\n    <string name=\"password_reminder_freq_never\">Mai</string>\n    <string name=\"password_reminder_freq_weekly\">Setmanalment</string>\n    <string name=\"password_reminder_freq_biweekly\">Cada dues setmanes</string>\n    <string name=\"password_reminder_freq_monthly\">Mensualment</string>\n    <string name=\"password_reminder_freq_quarterly\">Trimestral</string>\n    <string name=\"enter_password_2fas_message\">Sembla que la còpia dels A2F està xifrada. Introdueix la contrasenya.</string>\n    <string name=\"enter_password_authy_message\">Sembla que les fitxes d\\'Authy estan xifrades. Si us plau, tanca Aegis, obre l\\'Authy i desbloqueja les fitxes amb la contrasenya. Si no, Aegis port intentar desxifrar les fitxes d\\'Authy per tu, si introdueixes la contrasenya a sota.</string>\n    <string name=\"enter_password_aegis_title\">Introdueix la contrasenya</string>\n    <string name=\"period_hint\">Període (segons)</string>\n    <string name=\"algorithm_hint\">Funció hash</string>\n    <string name=\"type\">Tipus</string>\n    <string name=\"share\">Comparteix</string>\n    <string name=\"yes\">Si</string>\n    <string name=\"no\">No</string>\n    <string name=\"undo\">Desfés</string>\n    <string name=\"unlock\">Desbloqueja</string>\n    <string name=\"advanced\">Avançat</string>\n    <string name=\"counter\">Comptador</string>\n    <string name=\"digits\">Dígits</string>\n    <string name=\"secret\">Secret</string>\n    <string name=\"scan\">Escaneja un codi QR</string>\n    <string name=\"scan_image\">Escaneja una imatge</string>\n    <string name=\"enter_manually\">Introdueix manualment</string>\n    <string name=\"set_up_biometric\">Configura desbloqueig biomètric</string>\n    <string name=\"copy\">Copia</string>\n    <string name=\"edit\">Edita</string>\n    <string name=\"select_all\">Seleccionar-ho tot</string>\n    <string name=\"assign_icons\">Assignar icones</string>\n    <string name=\"assign_groups\">Assignar a grup</string>\n    <string name=\"assign_groups_dialog_summary\">Tria el grup on vols assignar les entrades seleccionades.</string>\n    <string name=\"assign_groups_dialog_dropdown\">Tria un grup</string>\n    <string name=\"favorite\" comment=\"Verb\">Preferit</string>\n    <string name=\"unfavorite\" comment=\"Verb\">No preferit</string>\n    <string name=\"error_all_caps\">ERROR</string>\n    <string name=\"password\">Contrasenya</string>\n    <string name=\"confirm_password\">Confirma la contrasenya</string>\n    <string name=\"show_password\">Mostra la contrasenya</string>\n    <string name=\"new_entry\">Entrada nova</string>\n    <string name=\"add_new_entry\">Afegeix nova entrada</string>\n    <string name=\"unlock_vault_error\">No es pot desbloquejar la caixa forta</string>\n    <string name=\"unlock_vault_error_description\">Contrasenya incorrecta. Assegura\\'t de que no t\\'has equivocat.</string>\n    <string name=\"password_equality_error\">Les contrasenyes han de ser idèntiques, i no estar buides</string>\n    <string name=\"snackbar_authentication_method\">Si us plau, tria un mètode d\\'autenticació</string>\n    <string name=\"encrypting_vault\">Xifrant la caixa forta</string>\n    <string name=\"exporting_vault\">Exporta la caixa forta</string>\n    <string name=\"optimizing_icon\">Optimitzant icona</string>\n    <string name=\"optimizing_icon_multiple\">Optimitzant icones %1$d/%2$d</string>\n    <string name=\"reading_file\">S\\'està llegint el fitxer</string>\n    <string name=\"requesting_root_access\">Demanant accés root</string>\n    <string name=\"analyzing_qr\">Anàlisi del codi QR</string>\n    <string name=\"analyzing_qr_multiple\">Analitzant el codi QR %1$d/%2$d (%3$s)</string>\n    <plurals name=\"added_new_entries\">\n        <item quantity=\"one\">S\\'ha afegit %d entrada nova a la caixa forta</item>\n        <item quantity=\"other\">S\\'han afegit %d entrades noves a la caixa forta</item>\n    </plurals>\n    <string name=\"importing_icon_pack\">Important paquet d\\'icones</string>\n    <string name=\"delete_entry\">Esborra l\\'entrada</string>\n    <string name=\"delete_entry_description\">Esteu segur de voler eliminar-la?</string>\n    <string name=\"delete_entry_explanation\">Aquesta acció no deshabilita l\\'A2F per a:\\n<b>%s</b>\\n\\nPer a evitar perdre\\'n l\\'accés, assegura\\'t que has desactivat l\\'A2F o que tens un altre mètode per a generar els codis.</string>\n    <string name=\"delete_entries\">Elimina entrades</string>\n    <plurals name=\"delete_entries_description\">\n        <item quantity=\"one\">Segur que vols eliminar %d entrada?</item>\n        <item quantity=\"other\">Segur que vols eliminar %d entrades?</item>\n    </plurals>\n    <string name=\"discard_changes\">Vols descartar els canvis?</string>\n    <string name=\"discard_changes_description\">No s\\'han desat els canvis</string>\n    <string name=\"saving_profile_error\">Error desant el perfil</string>\n    <string name=\"saving_assign_icons_error\">Error en assignar icones</string>\n    <string name=\"welcome\">Benvinguts</string>\n    <string name=\"app_description\">Aegis es una app d\\'A2F gratuïta, segura i de codi lliure</string>\n    <string name=\"setup_completed\">Configuració completada</string>\n    <string name=\"setup_completed_description\">S\\'ha configurat Aegis i està llest per a funcionar.</string>\n    <string name=\"vault_not_found\">No s\\'ha trobat cap caixa forta, iniciant configuració…</string>\n    <string name=\"copied\">Copiat</string>\n    <string name=\"errors_copied\">Errors copiant al porta-retalls</string>\n    <string name=\"version_copied\">Versió copiada al porta-retalls</string>\n    <string name=\"error_required_field\">Aquest camp és obligatori</string>\n    <string name=\"error_occurred\">S\\'ha produït un error</string>\n    <string name=\"decryption_error\">S\\'ha produït un error al desbloquejar la caixa forta</string>\n    <string name=\"decryption_corrupt_error\">S\\'ha produït un error al desbloquejar la caixa forta. El fitxer pot estar fet malbé.</string>\n    <string name=\"saving_error\">S\\'ha produït un error al desar la caixa forta</string>\n    <string name=\"vault_init_error\">S\\'ha produït un error al inicialitzar la caixa forta</string>\n    <string name=\"vault_load_error\">S\\'ha produït un error al carregar la caixa forta</string>\n    <string name=\"biometric_decrypt_error\">S\\'ha produït un error al desxifrar la caixa forta amb l\\'autenticació biomètrica. Això sol passar si la configuració de seguretat del dispositiu ha canviat. Si us plau, deslboqueja la caixa amb la teva contrasenya i reconfigura l\\'autenticació biomètrica.</string>\n    <string name=\"biometric_init_error\">S\\'ha produït un error al preparar l\\'autenticació biomètrica. Això sol passar si la configuració de seguretat del dispositiu ha canviat. Si us plau, deslboqueja la caixa forta amb la teva contrasenya i reconfigura l\\'autenticació biomètrica.</string>\n    <string name=\"disable_encryption\">Desactivar xifrat</string>\n    <string name=\"disable_encryption_description\">Segur que vols desactivar el xifrat? Això causarà que la caixa forta s\\'emmagatzemi en text clar. <b>Les copies de seguretat automàtiques es desactivaran</b>.</string>\n    <string name=\"enable_encryption_error\">S\\'ha produït un error en activar el xifrat</string>\n    <string name=\"disable_encryption_error\">S\\'ha produït un error en desactivar el xifrat</string>\n    <string name=\"backup_successful\">S\\'ha programat la còpia de seguretat</string>\n    <string name=\"backup_error\">S\\'ha produït un error al crear la còpia de seguretat</string>\n    <string name=\"backup_status_success\">Còpia de seguretat més recent: %s</string>\n    <string name=\"backup_status_failed\">Còpia de seguretat fallada: %s</string>\n    <string name=\"backup_status_none\">No s\\'han fet còpies de seguretat encara</string>\n    <string name=\"backup_warning_password\">Les còpies de seguretat es xifren fent servir una contrasenya diferent, configurada a la secció de seguretat</string>\n    <string name=\"documentsui_error\">Sembla que no tens instal·lat el DocumentsUI. Això es un component de sistema necessari per a la selecció i creació de documents. Si has fet servir una eina per a fer &quot;debloat&quot; al teu dispositiu, pot ser que l\\'hagis eliminat accidentalment i cal reinstal·lar-lo.</string>\n    <string name=\"icon_pack_import_error\">S\\'ha produït un error al importar el paquet d\\'icones</string>\n    <string name=\"icon_pack_import_exists_error\">El paquet d\\'icones que intentes importar ja existeix. Vols sobreescriure\\'l?</string>\n    <string name=\"icon_pack_delete_error\">S\\'ha produït un error al eliminar el paquet d\\'icones</string>\n    <plurals name=\"icon_pack_info\">\n        <item quantity=\"one\">%d icona</item>\n        <item quantity=\"other\">%d icones</item>\n    </plurals>\n    <string name=\"icon_custom\">Personalitza</string>\n    <string name=\"permission_denied\">Permís denegat</string>\n    <string name=\"andotp_new_format\">Format nou (v0.6.3 o més nou) </string>\n    <string name=\"andotp_old_format\">Format vell (v0.6.2 o més vell) </string>\n    <string name=\"choose_andotp_importer\">Quin format té la còpia del andOTP?</string>\n    <string name=\"choose_totpauth_importer\">Està la còpia del TOTP Authenticator xifrada amb una contrasenya?</string>\n    <string name=\"choose_application\">Tria l\\'aplicació de la que vols importar</string>\n    <string name=\"choose_theme\">Tria l\\'aparença</string>\n    <string name=\"choose_account_name_position\">Selecciona la posició del nom del compte que desitges</string>\n    <string name=\"choose_view_mode\">Tria el mode de visualització</string>\n    <string name=\"choose_copy_behavior\">Selecciona el comportament de còpia que desitges</string>\n    <string name=\"parsing_file_error\">S\\'ha produït un error en analitzar el fitxer</string>\n    <string name=\"file_not_found\">Error: no s\\'ha trobat el fitxer</string>\n    <string name=\"reading_file_error\">S\\'ha produït un error mentre s\\'intentava carregar el fitxer</string>\n    <string name=\"app_lookup_error\">Aquesta aplicació no està instal·lada</string>\n    <string name=\"app_version_error\">La versió instal·lada de %s no està suportada. Les versions recents han començat a xifrar els fitxers de l\\'emmagatzematge intern, fent que Aegis no pugui accedir a la informació que necessita per a fer la importació. És molt possible que intentar importar finalitzi amb error. Vols intentar-ho igualment?</string>\n    <string name=\"root_error\">Error: no s\\'ha pogut obtenir accés root</string>\n    <plurals name=\"imported_entries_count\">\n        <item quantity=\"one\">%d entrades importades</item>\n        <item quantity=\"other\">%d entrades importades</item>\n    </plurals>\n    <plurals name=\"entries_shown\">\n        <item quantity=\"one\">Mostrant %d entrada</item>\n        <item quantity=\"other\">Mostrant %d entrades</item>\n    </plurals>\n    <string name=\"intro_import_error_title\">S\\'ha produït un error en importar la caixa forta</string>\n    <string name=\"import_error_title\">S\\'han produït errors al importar</string>\n    <string name=\"exporting_vault_error\">S\\'ha produït un error mentre s\\'intentava exportar la caixa forta</string>\n    <string name=\"exported_vault\">S\\'ha exportat la caixa forta</string>\n    <string name=\"encryption_set_password_error\">S\\'ha produït un error al intentar definir la contrasenya.</string>\n    <string name=\"encryption_enable_biometrics_error\">S\\'ha produït un error al intentar activar el desbloqueig biomètric. Alguns dispositius tenen una implementació deficient i es possible que passi amb el teu. Considera canviar a una configuració amb contrasenya.</string>\n    <string name=\"no_cameras_available\">No hi ha càmeres disponibles</string>\n    <string name=\"read_qr_error\">S\\'ha produït un error al intentar llegir el codi QR</string>\n    <string name=\"read_qr_error_phonefactor\">Aegis no es compatible amb l\\'algoritme d\\'A2F de Microsoft. Si us plau, tria \\\"Configurar aplicació sense notificacions\\\" al configurar l\\'A2F al Office 365.</string>\n    <string name=\"partial_google_auth_import\">S\\'ha detectat una exportació incompleta de Google Authenticator</string>\n    <string name=\"partial_google_auth_import_warning\">Falten alguns codis QR a la importació. No s\\'han trobat els codis següents:\\n\\n<b>%s</b>\\n\\nPodeu continuar important aquesta exportació parcial, però us recomanem que torneu a provar amb tots els codis QR perquè no us arriscareu a perdre l\\'accés a cap token.</string>\n    <string name=\"missing_qr_code_descriptor\">• codi QR %d</string>\n    <plurals name=\"import_partial_export_anyway\">\n        <item quantity=\"one\">Importeu %d fitxa de totes maneres</item>\n        <item quantity=\"other\">Importeu %d fitxes de totes maneres</item>\n    </plurals>\n    <string name=\"import_google_auth_failure\">No s\\'ha pogut importar l\\'exportació de Google Authenticator</string>\n    <string name=\"unrelated_google_auth_batches_error\">L\\'exportació conté informació d\\'un lot no relacionat. Proveu d\\'importar 1 lot alhora.</string>\n    <string name=\"no_tokens_can_be_imported\">Com a resultat, no es poden importar tokens</string>\n    <string name=\"unlocking_vault\">Desbloquejant la caixa forta</string>\n    <string name=\"rename_group\">Canvia el nom del grup</string>\n    <string name=\"no_group_selection\">Si una entrada no pertany a cap grup, es podrà trobar a \\\"Sense grup\\\".</string>\n    <string name=\"remove_group\">Elimina el grup</string>\n    <string name=\"remove_group_description\">Segur que vols eliminar aquest grup? Les entrades canviaran automàticament a \\\"Sense grup\\\".</string>\n    <string name=\"remove_unused_groups\">Esborrar grups no utilitzats</string>\n    <string name=\"remove_unused_groups_description\">Estàs segur que vols esborrar tots els grups que no estan assignats a una entrada?</string>\n    <string name=\"remove_icon_pack\">Esborra el paquet d\\'icones</string>\n    <string name=\"remove_icon_pack_description\">Segur que vols eliminar aquest paquet d\\'icones? Les entrades que fan servir icones d\\'aquest paquet no es veuran afectades.</string>\n    <string name=\"details\">Detalls</string>\n    <string name=\"show_error_details\">Mostra els detalls de l\\'error</string>\n    <string name=\"lock\">Bloqueja</string>\n    <string name=\"name\">Nom</string>\n    <string name=\"no_group\">Sense grup</string>\n    <string name=\"sort\" comment=\"Title of the Sort button in the top action bar of the main view\">Ordena</string>\n    <string name=\"sort_alphabetically\">Emissor (A a Z)</string>\n    <string name=\"sort_alphabetically_reverse\">Emissor (Z a A)</string>\n    <string name=\"sort_alphabetically_name\">Compte (A a Z)</string>\n    <string name=\"sort_alphabetically_name_reverse\">Compte (Z a A)</string>\n    <string name=\"sort_usage_count\">Utilitzacions</string>\n    <string name=\"sort_last_used\">Últim usat</string>\n    <string name=\"sort_custom\">Personalitza</string>\n    <string name=\"last_used\">Últim usat</string>\n    <string name=\"last_used_never\">mai</string>\n    <string name=\"new_group\">Grup nou…</string>\n    <string name=\"group\">Grup</string>\n    <string name=\"group_name_hint\">Nom del grup</string>\n    <string name=\"preference_manage_groups\">Edita els grups</string>\n    <string name=\"preference_manage_groups_summary\">Gestiona i elimina els grups aquí</string>\n    <string name=\"preference_reset_usage_count\">Reiniciar comptador d\\'usos</string>\n    <string name=\"preference_reset_usage_count_summary\">Reinicia el comptador d\\'usos de totes les entrades</string>\n    <string name=\"preference_reset_usage_count_dialog\">Segur que vols reiniciar el comptador d\\'us de cada entrada a 0?</string>\n    <string name=\"note\" comment=\"Users can add a note to an entry\">Nota</string>\n    <string name=\"clear\">Neteja</string>\n    <string name=\"dialog_duplicate_entry_title\" comment=\"'Duplicate' is a noun here\">Entrada duplicada</string>\n    <string name=\"dialog_duplicate_entry_message\">Aquesta entrada té el mateix nom i emissor que una altra entrada. Com vols continuar?</string>\n    <string name=\"dialog_duplicate_entry_overwrite_title\">Sobreescriure l\\'entrada/des existents</string>\n    <string name=\"dialog_duplicate_entry_overwrite_subtitle\">Reemplaçar l\\'entrada/des existents per la nova. Aquesta acció no es pot desfer</string>\n    <string name=\"dialog_duplicate_entry_suffix_title\">Afegir un sufix</string>\n    <string name=\"dialog_duplicate_entry_suffix_subtitle\">Afegir un sufix al nom d\\'aquesta nova entrada. El nou nom serà: %s</string>\n    <string name=\"dialog_duplicate_entry_cancel_title\">Cancel·la el guardat</string>\n    <string name=\"dialog_duplicate_entry_cancel_subtitle\">Et permet editar l\\'entrada abans de tornar a intentar el guardat</string>\n    <plurals name=\"dialog_duplicate_entry_overwrite_dialog_message\">\n        <item quantity=\"one\">Estàs segur de voler esborrar %d entrada amb aquest nom:\\n\\n%s - %s</item>\n        <item quantity=\"other\">Estàs segur de voler esborrar %d entrades amb aquests noms:\\n\\n%s - %s</item>\n    </plurals>\n    <string name=\"dialog_duplicate_entry_overwrite_dialog_title\">Confirma la supressió</string>\n    <string name=\"pref_haptic_feedback_summary\">Fes que el dispositiu vibri quan s\\'actualitzin els codis</string>\n    <string name=\"pref_haptic_feedback_title\">Resposta hàptica</string>\n    <string name=\"pref_highlight_entry_title\">Il·luminar les fitxes al tocar</string>\n    <string name=\"pref_highlight_entry_summary\">Fes les fitxes més fàcils de distingir de la resta il·luminant-les temporalment quan les toquis</string>\n    <string name=\"pref_groups_multiselect_title\">Selecció múltiple de grups</string>\n    <string name=\"pref_groups_multiselect_summary\">Permet la selecció de múltiples grups al mateix temps</string>\n    <string name=\"pref_minimize_on_copy_title\">Minimitzar al copiar</string>\n    <string name=\"pref_minimize_on_copy_summary\">Minimitzar l\\'aplicació després de copiar una fitxa</string>\n    <string name=\"pref_copy_behavior_title\">Copia les fitxes al porta-retalls</string>\n    <string name=\"pref_search_behavior_title\">Comportament de la cerca</string>\n    <string name=\"pref_pause_entry_title\">Congela la fitxa al tocar</string>\n    <string name=\"pref_pause_entry_summary\">Pausa l\\'actualització automàtica de la fitxa al tocar-la. No s\\'actualitzará mentre estigui marcada. Cal tenir \\\"Il·lumina les fitxes al tocar\\\" o \\\"Toca per a mostrar\\\".</string>\n    <string name=\"pin_keyboard_description\">Introdueix la teva contrasenya per a activar el teclat PIN. Això només funcionarà si la contrasenya només té dígits</string>\n    <string name=\"pin_keyboard_error\">Error activant el teclat PIN</string>\n    <string name=\"pin_keyboard_error_description\">No s\\'ha pogut activar el teclat PIN. La teva contrasenya ha de tenir només nombres.</string>\n    <string name=\"pin_keyboard_disabled\">S\\'ha canviat la contrasenya. El teclat pin ja no es mostrarà.</string>\n    <string name=\"selected\">Escollit</string>\n    <string name=\"dark_theme_title\">Tema fosc</string>\n    <string name=\"light_theme_title\">Tema clar</string>\n    <string name=\"amoled_theme_title\">Tema AMOLED</string>\n    <string name=\"system_theme_title\">Configurat per l\\'Estalviador de Bateria</string>\n    <string name=\"system_amoled_theme_title\">Configurat per l\\'Estalviador de Bateria (AMOLED)</string>\n    <string name=\"normal_viewmode_title\">Normal</string>\n    <string name=\"compact_mode_title\">Compacte</string>\n    <string name=\"small_mode_title\">Petit</string>\n    <string name=\"tiles_mode_title\">Mosaic</string>\n    <string name=\"unknown_issuer\">Emissor desconegut</string>\n    <string name=\"unknown_account_name\">Nom de compte desconegut</string>\n    <plurals name=\"import_error_dialog\">\n        <item quantity=\"one\">L\\'Aegis no pot importar %d fitxa. Aquesta fitxa es descartarà. Prem \\\"detalls\\\" per a veure més informació d\\'aquest error.</item>\n        <item quantity=\"other\">L\\'Aegis no pot importar %d fitxes. Aquestes fitxes es descartaran. Prem \\\"detalls\\\" per a veure més informació d\\'aquest error.</item>\n    </plurals>\n    <string name=\"unable_to_process_deeplink\">No es pot processar l\\'enllaç profund</string>\n    <string name=\"unable_to_read_qrcode_file\">No es pot llegir i processar el codi QR del fitxer: %s.</string>\n    <string name=\"unable_to_process_shared_text\">No es pot processar el text compartit com a OTP</string>\n    <string name=\"unable_to_read_qrcode_files\">No es poden llegir i processar alguns dels codis QR. Només s\\'importaran %1$d/%2$d entrades.</string>\n    <string name=\"unable_to_generate_qrcode\">La generació del codi QR ha fallat</string>\n    <string name=\"select_picture\">Tria imatge</string>\n    <string name=\"select_icon\">Tria icona</string>\n    <string name=\"tile_open_vault\" comment=\"label for a quick settings tile that opens the app when tapped\">Obrir caixa forta</string>\n    <string name=\"tile_open_scanner\" comment=\"label for a quick settings tile that opens the QR code scanner when tapped\">Obrir escàner</string>\n    <string name=\"toggle_checkboxes\">Alternar selecció</string>\n    <string name=\"search\">Cerca</string>\n    <string name=\"channel_name_lock_status\">Estat del bloqueig</string>\n    <string name=\"channel_description_lock_status\">Aegis pot crear una notificació persistent per a avisar-te de que la caixa forta està desbloquejada</string>\n    <string name=\"vault_unlocked_state\">La caixa forta està desbloquejada. Toca aquí per a bloquejar-la.</string>\n    <string name=\"version\">Versió</string>\n    <string name=\"changelog\">Registre de canvis</string>\n    <string name=\"whats_new\">Què hi ha de nou</string>\n    <string name=\"github_description\">Codi font, problemes i informació</string>\n    <string name=\"license\">Llicència</string>\n    <string name=\"license_description\">L\\'Aegis Authenticator està llicenciat amb GPLv3</string>\n    <string name=\"third_party_licenses\">Llicències de tercers</string>\n    <string name=\"third_party_licenses_description\">Llicències de llibreries de tercers que fa servir Aegis</string>\n    <string name=\"country_netherlands\">Països Baixos</string>\n    <string name=\"email_us\">Escriu un correu electrònic</string>\n    <string name=\"visit_website\">Visiteu el nostre lloc web</string>\n    <string name=\"about_support\">Assistència</string>\n    <string name=\"support_rate\">Valora</string>\n    <string name=\"support_rate_description\">Ajuda\\'ns deixant un comentari a la Google Play Store</string>\n    <string name=\"webview_error\">Aquest dispositiu no suporta \\'web view\\', que es necessari per a veure el registre de canvis i la llicència. Falta un component de sistema.</string>\n    <string name=\"email\">Correu electrònic</string>\n    <string name=\"time_sync_warning_title\">Sincronització automàtica de temps</string>\n    <string name=\"time_sync_warning_message\">Cal que l\\'hora del sistema sigui correcta per tal de generar codis correctes. Una desviació d\\'uns quants segons pot causar codis no vàlids. Sembla que el teu dispositiu no està configurat per a sincronitzar la hora automàticament. Vols activar-ho ara?</string>\n    <string name=\"time_sync_warning_disable\">No cal que m\\'avisis més. Sé el que estic fent.</string>\n    <string name=\"google_qr_export_unrelated\">Codi QR no vàlid. Prova-ho un altre cop.</string>\n    <plurals name=\"google_qr_export_scanned\">\n        <item quantity=\"one\">S\\'ha escanejat %1$d/%2$d codi QR</item>\n        <item quantity=\"other\">S\\'han escanejat %1$d/%2$d codis QR</item>\n    </plurals>\n    <string name=\"google_qr_export_unexpected\">S\\'esperava codi QR #%1$d, però s\\'ha trobat #%2$d en el seu lloc</string>\n    <string name=\"backup_error_bar_message\"><b>Ha fallat la còpia de seguretat recentment</b></string>\n    <string name=\"backup_error_dialog_details\" comment=\"The first parameter is the type of backup (e.g. built-in or Android backup). The second parameter is an elapsed time in the style of 'x seconds/minutes/days ago'.\">Una còpia de seguretat de la caixa forta utilitzant %1$s ha fallat. La còpia s\\'ha intentat %2$s. Si us plau, comprova la configuració de la còpia per a assegurar-te de que les còpies es poden fer correctament.\n    </string>\n    <string name=\"backup_permission_error_dialog_details\" comment=\"The first parameter is the type of backup (e.g. built-in or Android backup). The second parameter is an elapsed time in the style of 'x seconds/minutes/days ago'.\">        Un intent recent de còpia de seguretat de la caixa forta utilitzant %1$s ha fallat perquè l\\'Aegis no té permís d\\'escriptura en el destí de la còpia de seguretat. La còpia s\\'ha intentat %2$s. Aquest error pot aparèixer si has mogut/reanomenat el destí de la còpia de seguretat o si has restaurat l\\'Aegis recentment des d\\'una còpia de seguretat. Si us plau torna a configurar el destí de la còpia de seguretat.\n    </string>\n    <string name=\"backup_system_builtin\">Còpies de seguretat integrades a Aegis</string>\n    <string name=\"backup_system_android\">Còpia al núvol d\\'Android</string>\n    <string name=\"backup_reminder_bar_message_with_latest\" comment=\"The parameter is an elapsed time in the style of 'x seconds/minutes/days ago'\">L\\'última còpia de seguretat és molt antiga (%s)    </string>\n    <string name=\"backup_reminder_bar_message\">No s\\'han desat els canvis    </string>\n    <string name=\"backup_reminder_bar_dialog_title\">No s\\'ha fet còpia dels canvis</string>\n    <string name=\"backup_reminder_bar_dialog_summary\">        No s\\'ha fet una còpia de seguretat dels últims canvis. Es important fer còpies regularment per a evitar perdre l\\'accés als teus comptes. Si us plau, considera activar les còpies automàtiques al menú de configuració.\n    </string>\n    <string name=\"backup_reminder_bar_dialog_accept\">Configurar còpies de seguretat</string>\n    <string name=\"backup_plaintext_export_warning\"><b>La caixa forta s\\'ha exportat recentment en text sense format</b></string>\n    <string name=\"pref_show_plaintext_warning_hint\">No tornis a mostrar aquesta advertència</string>\n    <string name=\"backup_plaintext_warning_explanation\">Aquest avís es mostra perquè recentment heu exportat una còpia no xifrada de la caixa forta. Per mantenir la seguretat dels vostres tokens, us recomanem que suprimiu aquest fitxer quan ja no sigui necessari.</string>\n    <string name=\"switch_camera\">Canvia la càmera</string>\n    <string name=\"empty_list\">No hi ha codis a mostrar. Afegeix entrades tocant el signe més de la cantonada inferior dreta</string>\n    <string name=\"empty_list_title\">No s\\'ha trobat cap entrada</string>\n    <string name=\"empty_group_list\">No hi ha grups a mostrar. Afegeix grups a la pantalla d\\'edició d\\'una entrada</string>\n    <string name=\"empty_group_list_title\">No s\\'ha trobat cap grup</string>\n    <string name=\"no_icon_packs\">No s\\'ha importat cap pack d\\'icones. Toca el signe més per a importar-ne un. Truc: Prova <a href=\"https://aegis-icons.github.io\">aegis-icons</a>.</string>\n    <string name=\"no_icon_packs_title\">No hi ha cap pack d\\'icones</string>\n    <string name=\"pick_icon\">Tria una icona</string>\n    <string name=\"uncategorized\">Sense categoria</string>\n    <string name=\"done\">Fet</string>\n    <plurals name=\"qr_count\">\n        <item quantity=\"one\">%d / %d codi QR</item>\n        <item quantity=\"other\">%d / %d codis QR</item>\n    </plurals>\n    <string name=\"next\">Pròxim</string>\n    <string name=\"previous\">Anterior</string>\n    <string name=\"copy_uri\">Copiar URI</string>\n    <string name=\"unable_to_copy_uri_to_clipboard\">No s\\'ha pogut copiar la URI</string>\n    <string name=\"uri_copied_to_clipboard\">URI copiada al porta-retalls</string>\n    <string name=\"transfer_entry_description\">Escaneja aquest codi QR amb l\\'aplicació d\\'autenticació a la que vols transferir aquesta entrada</string>\n    <string name=\"transfer_entry_brightness\">Toca el codi QR per canviar a màxima brillantor</string>\n    <string name=\"google_auth_compatible_transfer_description\">Escanegeu aquests codis QR amb Aegis o Google Authenticator.\\n\\n A causa de les limitacions de l\\'aplicació Google Authenticator, només s\\'inclouen tokens TOTP &amp; HOTP que utilitzen SHA1 i produeixen codis de 6 dígits</string>\n    <string name=\"password_strength_very_weak\">Molt feble</string>\n    <string name=\"password_strength_weak\">Feble</string>\n    <string name=\"password_strength_fair\">Correcta</string>\n    <string name=\"password_strength_good\">Bona</string>\n    <string name=\"password_strength_strong\">Forta</string>\n    <string name=\"password_strength_unknown\">Contrasenya massa llarga per a l\\'anàlisi de fortalesa</string>\n    <string name=\"pref_pin_keyboard_title\">Fes servir teclat PIN a la pantalla de bloqueig</string>\n    <string name=\"pref_pin_keyboard_summary\">Activa això si vols fer servir el teclat pin. Només funciona per a contrasenyes numèriques</string>\n    <string name=\"title_activity_preferences\">Configuració</string>\n    <string name=\"title_activity_manage_groups\">Gestiona els grups</string>\n    <string name=\"title_activity_transfer\">Transferir entrades</string>\n    <string name=\"title_activity_about\">Quant a</string>\n    <string name=\"title_activity_edit_entry\">Editar entrada</string>\n    <string name=\"title_activity_scan_qr\">Escaneja un codi QR</string>\n    <string name=\"title_activity_import_entries\">Importa entrades</string>\n    <string name=\"title_activity_assign_icons\">Assignar icones</string>\n    <string name=\"title_activity_licenses\">Llicències de tercers</string>\n    <string name=\"dialog_wipe_entries_title\">Elimina entrades</string>\n    <string name=\"dialog_wipe_entries_message\">La teva caixa forta ja té entrades. Vols eliminar les entrades abans d\\'importar aquest fitxer?\\n\\n<b>Si ho fas, perdràs l\\'accés a les entrades que tens actualment.</b></string>\n    <string name=\"dialog_wipe_entries_checkbox\">Eliminar contingut de la caixa forta</string>\n    <string name=\"import_from_clipboard_title\">Importa des del porta-retalls</string>\n    <string name=\"import_from_clipboard_message\">Hem trobat un URI otpauth vàlid al porta-retalls.\\n\\n<b>Nom</b>: %1$s\\n<b>Emissor</b>: %2$s\\n\\nVols usar-lo per omplir aquesta entrada?</string>\n    <string name=\"panic_trigger_ignore_toast\">S\\'ha rebut el botó del pànic, però està deshabilitat a la configuració, ho hem ignorat</string>\n    <string name=\"pref_panic_trigger_title\">Eliminar la caixa forta amb el botó del pànic</string>\n    <string name=\"pref_panic_trigger_summary\">Eliminar la caixa forta amb el botó del pànic si es rep des de Ripple</string>\n    <string name=\"import_vault\">Importar la caixa forta d\\'Aegis</string>\n    <string name=\"import_vault_hint\">Vols importar des d\\'una app 2FA diferent? Completa primer la configuració i llavors ves al menú de configuració.</string>\n    <plurals name=\"import_duplicate_toast\">\n        <item quantity=\"one\">%d possible duplicat desmarcat. Revisa la llista d\\'entrades.</item>\n        <item quantity=\"other\">%d possibles duplicats desmarcats. Revisa la llista d\\'entrades.</item>\n    </plurals>\n    <string name=\"importer_help_2fas\">Subministra un fitxer exportat del 2FAS Authenticator.</string>\n    <string name=\"importer_help_aegis\">Subministra un fitxer exportat del Aegis.</string>\n    <string name=\"importer_help_authenticator_plus\">Subministra un fitxer exportat del Authenticator Plus, obtingut amb <b>Settings -&gt; Backup &amp; Restore -&gt; Export as Text and HTML</b>.</string>\n    <string name=\"importer_help_authy\">Subministra una còpia de <b>/data/data/com.authy.authy/shared_prefs/com.authy.storage.tokens.authenticator.xml</b>, que està a l\\'emmagatzematge intern del teu dispositiu, al directori del Authy.</string>\n    <string name=\"importer_help_andotp\">Subministra un fitxer exportat del andOTP.</string>\n    <string name=\"importer_help_bitwarden\">Subministreu un fitxer d\\'exportació/còpia de seguretat de Bitwarden. Els fitxers xifrats no són compatibles.</string>\n    <string name=\"importer_help_battle_net_authenticator\">Proporciona una còpia de <b>/data/data/com.blizzard.messenger/shared_prefs/com.blizzard.messenger.authenticator_preferences.xml</b>, que es troba al directori de l\\'autenticador de Battle.net.</string>\n    <string name=\"importer_help_duo\">Subministra una còpia de <b>/data/data/com.duosecurity.duomobile/files/duokit/accounts.json</b>, que està a l\\'emmagatzematge intern del teu dispositiu, al directori del DUO.</string>\n    <string name=\"importer_help_ente_auth\">Subministra un fitxer exportat d\\'Ente Auth. Per ara només acceptem fitxers sense xifrar.</string>\n    <string name=\"importer_help_freeotp\">FreeOTP 2: Subministra un fitxer de còpia de seguretat.\\nFreeOTP 1.x: Subministra una còpia de <b>/data/data/org.fedorahosted.freeotp/shared_prefs/tokens.xml</b>, que està a l\\'emmagatzematge intern del teu dispositiu, al directori del FreeOTP.</string>\n    <string name=\"importer_help_freeotp_plus\">Subministra un fitxer exportat del FreeOTP+.</string>\n    <string name=\"importer_warning_title_freeotp2\">Compatibilitat FreeOTP 2</string>\n    <string name=\"importer_warning_message_freeotp2\">Hi ha diversos problemes en el FreeOTP 2 que poden resultar en còpies de seguretat defectuoses. L\\'Aegis provarà de recuperar el màxim d\\'entrades possible, però potser algunes entrades o totes elles no es puguin importar.</string>\n    <string name=\"importer_help_google_authenticator\">&lt;b&gt;Només s\\'admeten fitxers de bases de dades de Google Authenticator v5.10 i anteriors&lt;/b&gt;.\\n\\nProporcioneu una còpia de &lt;b&gt;/data/data/com.google.android.apps.authenticator2/databases/databases&lt; /b&gt;, situada al directori d\\'emmagatzematge intern de Google Authenticator.</string>\n    <string name=\"importer_help_microsoft_authenticator\">Subministra una còpia de <b>/data/data/com.azure.authenticator/databases/PhoneFactor</b>, que està a l\\'emmagatzematge intern del teu dispositiu, al directori del Microsoft Authenticator.</string>\n    <string name=\"importer_help_plain_text\">Subministra un fitxer de text pla amb una URI de Google Authenticator a cada línia.</string>\n    <string name=\"importer_help_proton_authenticator\">Subministra un fitxer (.json) exportat del Proton Authenticator, obtingut a través de <b>Configuració -&gt; Exportar</b>.</string>\n    <string name=\"importer_help_steam\"><b>Steam v3.0 i posteriors no són compatibles</b>. Proporcioneu una còpia de <b>/data/data/com.valvesoftware.android.steam.community/files/Steamguard-*.json</b>, que es troba al directori d\\'emmagatzematge intern de Steam.</string>\n    <string name=\"importer_help_stratum\">Proveeix un fitxer exportat de Stratum, aconseguit a <b>Settings &gt; Back up &gt; Back up to encrypted file (recommended)</b>.</string>\n    <string name=\"importer_help_totp_authenticator\">Subministra un fitxer exportat del TOTP Authenticator.</string>\n    <string name=\"importer_help_winauth\">Subministra un fitxer exportat del WinAuth.</string>\n    <string name=\"import_assign_icons_dialog_title\">Assignar icones</string>\n    <string name=\"import_assign_icons_dialog_text\">Vols assignar icones a les entrades importades?</string>\n    <string name=\"importer_encrypted_exception_google_authenticator\">S\\'ha omès l\\'entrada xifrada: %s</string>\n    <string name=\"importer_help_direct\">Importa entrades directament de %s. Per a fer això, cal que l\\'aplicació estigui instal·lada i cal que l\\'Aegis tingui accés root.</string>\n    <string name=\"groups\">Grups</string>\n    <string name=\"pref_focus_search\">Posar el cursor a la casella de cerca en iniciar</string>\n    <string name=\"pref_focus_search_summary\">Enfocar la cerca immediatament després d\\'obrir l\\'aplicació.</string>\n    <string name=\"pref_grouping_halves\">Meitats</string>\n    <string name=\"pref_grouping_none\">No agrupar</string>\n    <string name=\"pref_grouping_size_two\">Grups de 2</string>\n    <string name=\"pref_grouping_size_three\">Grups de 3</string>\n    <string name=\"pref_grouping_size_four\">Grups de 4</string>\n    <string name=\"pref_copy_behavior_never\">Mai</string>\n    <string name=\"pref_copy_behavior_single_tap\">Un toc</string>\n    <string name=\"pref_copy_behavior_double_tap\">Doble toc</string>\n    <string name=\"pref_account_name_position_hidden\">Ocult</string>\n    <string name=\"pref_account_name_position_end\">Al costat de l\\'emissor</string>\n    <string name=\"pref_account_name_position_below\">A sota de l\\'emissor</string>\n    <plurals name=\"time_elapsed_seconds\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"one\">fa %d segon</item>\n        <item quantity=\"other\">fa %d segons</item>\n    </plurals>\n    <plurals name=\"time_elapsed_minutes\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"one\">fa %d minut</item>\n        <item quantity=\"other\">fa %d minuts</item>\n    </plurals>\n    <plurals name=\"time_elapsed_hours\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"one\">Fa %d hora</item>\n        <item quantity=\"other\">fa %d hores</item>\n    </plurals>\n    <plurals name=\"time_elapsed_days\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"one\">fa %d dia</item>\n        <item quantity=\"other\">fa %d dies</item>\n    </plurals>\n    <plurals name=\"time_elapsed_years\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"one\">fa %d any</item>\n        <item quantity=\"other\">fa %d anys</item>\n    </plurals>\n    <plurals name=\"dropdown_checkboxes_default_count\">\n        <item quantity=\"one\">%d entrada seleccionada</item>\n        <item quantity=\"other\">%d entrades seleccionades</item>\n    </plurals>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-ca-rES-v29/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"system_theme_title\">Predeterminat del sistema</string>\n    <string name=\"system_amoled_theme_title\">Predeterminat del sistema (AMOLED)</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-cs-rCZ/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources xmlns:tools=\"http://schemas.android.com/tools\">\n    <string name=\"action_settings\">Nastavení</string>\n    <string name=\"action_about\">O aplikaci</string>\n    <string name=\"action_delete\">Odstranit</string>\n    <string name=\"action_transfer\">Přenést</string>\n    <string name=\"action_edit_icon\">Upravit ikonu</string>\n    <string name=\"action_reset_usage_count\">Resetovat počet použití</string>\n    <string name=\"action_reset_usage_count_dialog\">Opravdu chcete nastavit počet použití této položky na 0?</string>\n    <string name=\"action_default_icon\">Obnovit původní ikonu</string>\n    <string name=\"discard\">Zahodit</string>\n    <string name=\"save\">Uložit</string>\n    <string name=\"all\">Vše</string>\n    <string name=\"issuer\">Poskytovatel</string>\n    <string name=\"yandex_pin\">PIN (4–16 číslic)</string>\n    <string name=\"motp_pin\">PIN (4 číslice)</string>\n    <string name=\"suggested\">Navrhnuté</string>\n    <string name=\"usage_count\">Počet použití</string>\n    <string name=\"warning\">Varování</string>\n    <string name=\"pref_cat_appearance_app\">Aplikace</string>\n    <string name=\"pref_cat_appearance_entries\">Položky</string>\n    <string name=\"pref_cat_backups_android\">Android</string>\n    <string name=\"pref_cat_backups_auto\">Automatické zálohy</string>\n    <string name=\"pref_section_behavior_title\">Chování</string>\n    <string name=\"pref_section_behavior_summary\">Přizpůsobit chování při interakci se seznamem položek.</string>\n    <string name=\"pref_section_appearance_title\">Vzhled</string>\n    <string name=\"pref_section_appearance_summary\">Upravit téma, jazyk a další nastavení, která ovlivňují vzhled aplikace.</string>\n    <string name=\"pref_section_security_title\">Zabezpečení</string>\n    <string name=\"pref_section_security_summary\">Nastavení šifrování, biometrického odemčení, automatického uzamčení a dalších nastavení zabezpečení.</string>\n    <string name=\"pref_section_import_export_title\">Import a export</string>\n    <string name=\"pref_section_import_export_summary\">Importovat zálohy Aegisu nebo jiné ověřovací aplikace. Vytvořit ruční export vašeho trezoru Aegis.</string>\n    <string name=\"pref_section_audit_log_title\">Protokol</string>\n    <string name=\"pref_section_audit_log_summary\">Seznam nahlášených důležitých událostí, které se staly v aplikaci.</string>\n    <string name=\"pref_section_backups_title\">Zálohy</string>\n    <string name=\"pref_section_backups_summary\">Nastavit automatické zálohy do lokace vašeho výběru nebo povolit účast v cloudovém zálohovacím systému Androidu.</string>\n    <string name=\"pref_section_icon_packs\">Balíčky ikon</string>\n    <string name=\"pref_section_icon_packs_summary\">Správa a import balíčků ikon</string>\n    <string name=\"pref_select_theme_title\">Vzhled</string>\n    <string name=\"pref_dynamic_colors_title\">Dynamické barvy</string>\n    <string name=\"pref_dynamic_colors_summary\">Použít překryv založený na barvách vašeho motivu systému Android</string>\n    <string name=\"pref_view_mode_title\">Režim zobrazení</string>\n    <string name=\"pref_lang_title\">Jazyk</string>\n    <string name=\"pref_show_icons_title\">Zobrazit ikony</string>\n    <string name=\"pref_show_icons_summary\">Zobrazit ikony vedle každého záznamu</string>\n    <string name=\"pref_code_group_size_title\">Seskupení číslic kódu</string>\n    <string name=\"pref_code_group_size_summary\">Vyberte počet číslic, po kterých se mají seskupovat kódy</string>\n    <string name=\"pref_account_name_position_title\">Zobrazit název účtu</string>\n    <string name=\"pref_show_next_code_title\">Zobrazit další kód</string>\n    <string name=\"pref_show_next_code_summary\">Vygenerovat a zobrazit další kód před vypršením času</string>\n    <string name=\"pref_expiration_state_title\">Naznačit, že kódy brzy vyprší</string>\n    <string name=\"pref_expiration_state_summary\">Při vypršení kódy změní barvu a budou blikat</string>\n    <string name=\"pref_expiration_state_fallback\">Při vypršení kódy změní barvu</string>\n    <string name=\"pref_shared_issuer_account_name_title\">Název účtu zobrazit pouze v případě potřeby</string>\n    <string name=\"pref_shared_issuer_account_name_summary\">Názvy účtů zobrazit pouze, pokud mají stejného poskytovatele. Ostatní názvy účtů budou skryty.</string>\n    <string name=\"pref_account_name_position_summary_override\">Toto nastavení je přepsáno režimem zobrazení dlaždic. Název účtu bude zobrazen pod poskytovatelem.</string>\n    <string name=\"pref_import_file_title\">Importovat ze souboru</string>\n    <string name=\"pref_import_file_summary\">Importovat tokeny ze souboru</string>\n    <string name=\"pref_android_backups_title\">Cloudové zálohování systému Android</string>\n    <string name=\"pref_android_backups_summary\">Umožnit cloudovému zálohovacímu systému Androidu zahrnout zálohy trezoru Aegisu. Toto je podporováno pouze u šifrovaných trezorů.</string>\n    <string name=\"pref_android_backups_hint\"><i>Zálohy „zařízení na zařízení“ (D2D) jsou povoleny vždy, nezávisle na nastavení výše</i></string>\n    <string name=\"pref_backups_title\">Automaticky zálohovat trezor</string>\n    <string name=\"pref_backups_summary\">Automaticky zálohovat trezor na externí úložiště při provedení změn. Tato možnost je dostupná jen pro šifrované trezory.</string>\n    <string name=\"pref_backups_reminder_title\">Připomenutí zálohy</string>\n    <string name=\"pref_backups_reminder_summary\">Zobrazit připomenutí k zálohování vašeho trezoru, pokud jste nezálohovali své poslední změny.</string>\n    <string name=\"pref_backups_reminder_dialog_title\">Zakázat připomenutí zálohy</string>\n    <string name=\"pref_backups_reminder_dialog_summary\">Vypnutí tohoto připomenutí znamená, že vám Aegis neřekne, zda máte změny, které ještě nejsou zálohovány. Tím se vystavíte riziku ztráty přístupu k vašim tokenům. Opravdu chcete zakázat připomenutí?</string>\n    <string name=\"pref_backups_versioning_strategy_title\">Strategie zálohování</string>\n    <string name=\"pref_backups_versioning_strategy_keep_x_versions\">Zachovat několik verzí</string>\n    <string name=\"pref_backups_versioning_strategy_single_backup\">Jedna záloha</string>\n    <string name=\"pref_backups_versioning_strategy_single_backup_warning\">Zvolená strategie zálohování není spolehlivá a není doporučená. Selhání jedné zálohy může vést ke ztrátě vaší jediné zálohy.</string>\n    <string name=\"pref_backups_versioning_strategy_dialog_title\">Vyberte strategii zálohování</string>\n    <string name=\"pref_backups_location_title\">Umístění záloh</string>\n    <string name=\"pref_backups_location_summary\">Zálohy budou uloženy v</string>\n    <string name=\"pref_backup_location_summary\">Zálohy budou uloženy v adresáři</string>\n    <string name=\"pref_backups_trigger_title\">Spustit zálohování</string>\n    <string name=\"pref_backups_trigger_summary\">Ručně spustit zálohování</string>\n    <string name=\"pref_backups_versions_title\">Počet verzí k uchování</string>\n    <string name=\"pref_backups_versions_infinite\">\\u221E</string>\n    <plurals name=\"pref_backups_versions_summary\">\n        <item quantity=\"one\">Uchovat %1$d verzi zálohy</item>\n        <item quantity=\"few\">Uchovat %1$d verze zálohy</item>\n        <item quantity=\"many\">Uchovat %1$d verzí zálohy</item>\n        <item quantity=\"other\">Uchovat %1$d verzí zálohy</item>\n    </plurals>\n    <string name=\"pref_backups_versions_infinite_summary\">Ponechat nekonečný počet verzí zálohy</string>\n    <string name=\"pref_import_app_title\">Importovat z aplikace</string>\n    <string name=\"pref_import_app_summary\">Importovat tokeny z aplikace (vyžaduje root přístup)</string>\n    <string name=\"pref_export_title\">Exportovat</string>\n    <string name=\"pref_export_summary\">Exportovat trezor</string>\n    <string name=\"pref_password_reminder_title\">Připomenutí hesla</string>\n    <string name=\"pref_google_auth_export_title\">Exportovat do Google Authenticator</string>\n    <string name=\"pref_google_auth_export_descriptor\">Vygeneruje QR kódy pro export kompatibilní s aplikací Google Authenticator</string>\n    <string name=\"pref_google_auth_export_no_data\">Žádná data k exportu</string>\n    <plurals name=\"pref_google_auth_export_incompatible_entries\">\n        <item quantity=\"one\">Přeskočena %d nekompatibilní položka</item>\n        <item quantity=\"few\">Přeskočeny %d nekompatibilní položky</item>\n        <item quantity=\"many\">Přeskočeno %d nekompatibilních položek</item>\n        <item quantity=\"other\">Přeskočeno %d nekompatibilních položek</item>\n    </plurals>\n    <string name=\"pref_password_reminder_summary\">Zobrazit %s připomínku na zadání hesla, abyste jej nezapomněli.</string>\n    <string name=\"pref_password_reminder_summary_disabled\">Zakázáno</string>\n    <string name=\"pref_secure_screen_title\">Zabezpečení obrazovky</string>\n    <string name=\"pref_secure_screen_summary\">Blokovat snímky obrazovky a další pokusy o zachycení obrazovky v rámci aplikace</string>\n    <string name=\"pref_tap_to_reveal_title\">Zobrazit klepnutím</string>\n    <string name=\"pref_tap_to_reveal_summary\">Ve výchozím stavu budou kódy skryté. Kód zobrazíte klepnutím na token.</string>\n    <string name=\"pref_tap_to_reveal_time_title\">Prodleva zobrazení kódu</string>\n    <string name=\"pref_auto_lock_title\">Automatické uzamknutí</string>\n    <string name=\"pref_auto_lock_summary\">Kdy: %s</string>\n    <string name=\"pref_auto_lock_summary_disabled\">Vypnuto</string>\n    <string name=\"pref_auto_lock_prompt\">Automaticky zamknout Aegis…</string>\n    <string name=\"pref_auto_lock_type_back_button\">Při stisknutí tlačítka Zpět</string>\n    <string name=\"pref_auto_lock_type_minimize\">Při minimalizování aplikace</string>\n    <string name=\"pref_auto_lock_type_device_lock\">Při uzamčení zařízení</string>\n    <string name=\"pref_backup_password_category\">Záloha a export</string>\n    <string name=\"pref_backup_password_title\">Oddělit heslo pro zálohu a export</string>\n    <string name=\"pref_backup_password_summary\">Pokud je povoleno, heslo použité k odemykání této aplikace již nebudete moci použít k dešifrování záloh a exportů.</string>\n    <string name=\"pref_backup_password_change_title\">Změnit heslo pro zálohu a export</string>\n    <string name=\"pref_backup_password_change_summary\">Nastavte nové heslo, které bude použito k zašifrování zálohu při záloze a exportu.</string>\n    <string name=\"pref_encryption_title\">Šifrování</string>\n    <string name=\"pref_encryption_summary\">Šifrovat trezor a odemykat jej pomocí hesla, nebo biometrie</string>\n    <string name=\"pref_biometrics_title\">Biometrické odemknutí</string>\n    <string name=\"pref_biometrics_summary\">Povolit biometrické ověření pro odemčení trezoru</string>\n    <string name=\"pref_search_behavior_summary\">Hledat v: %s</string>\n    <string name=\"pref_search_behavior_prompt\">Hledat ve kterémkoli z následujících polí</string>\n    <string name=\"pref_search_behavior_type_name\">Název</string>\n    <string name=\"pref_search_behavior_type_issuer\">Vydavatel</string>\n    <string name=\"pref_search_behavior_type_note\">Poznámka</string>\n    <string name=\"pref_search_behavior_type_groups\">Skupiny</string>\n    <string name=\"pref_set_password_title\">Změnit heslo</string>\n    <string name=\"pref_set_password_summary\">Nastavení nového hesla potřebného pro odemčení trezoru</string>\n    <string name=\"no_events_title\">Žádné nahlášené události</string>\n    <string name=\"no_events_description\">V aplikaci nebyly nahlášeny žádné důležité události</string>\n    <string name=\"event_title_vault_unlocked\">Trezor odemčen</string>\n    <string name=\"event_description_vault_unlocked\">Trezor byl úspěšně odemčen</string>\n    <string name=\"event_title_backup_created\">Záloha vytvořena</string>\n    <string name=\"event_description_backup_created\">Záloha trezoru byla úspěšně vytvořena</string>\n    <string name=\"event_title_android_backup_created\">Záloha vytvořena systémem Android</string>\n    <string name=\"event_description_android_backup_created\">Záloha trezoru byla úspěšně vytvořena systémem Android</string>\n    <string name=\"event_title_vault_exported\">Trezor exportován</string>\n    <string name=\"event_description_vault_exported\">Kopie trezoru byla exportována</string>\n    <string name=\"event_title_entry_shared\">Záznam sdílen</string>\n    <string name=\"event_description_entry_shared\">Záznam byl sdílen</string>\n    <string name=\"event_title_vault_unlock_failed_password\">Odemčení trezoru selhalo (heslo)</string>\n    <string name=\"event_description_vault_unlock_failed_password\">Pokus o odemknutí trezoru pomocí hesla se nezdařil</string>\n    <string name=\"event_title_vault_unlock_failed_biometrics\">Odemčení trezoru selhalo (biometrika)</string>\n    <string name=\"event_description_vault_unlock_failed_biometrics\">Pokus o odemknutí trezoru pomocí biometriky se nezdařil</string>\n    <string name=\"event_unknown\">Neznámý typ události</string>\n    <string name=\"audit_log_entry_deleted\">(odstraněno)</string>\n    <string name=\"today_at_time\">Dnes v %1$s</string>\n    <string name=\"day_of_week_at_time\">%1$s v %2$s</string>\n    <string name=\"export_encrypted\">Šifrovat trezor</string>\n    <string name=\"export_help\">Trezor bude exportován mimo vnitřní úložiště Aegis. Zvolte formát, ve kterém chcete trezor exportovat:</string>\n    <string name=\"export_warning_unencrypted\">Chystáte se exportovat nešifrovanou kopii vašeho Aegis trezoru. Toto <b>není doporučeno</b>.</string>\n    <string name=\"export_warning_password\">Exporty jsou šifrovány pomocí samostatného hesla nastaveného v nastavení zabezpečení.</string>\n    <string name=\"understand_risk_accept\">Chápu rizika</string>\n    <string name=\"export_format_aegis\">Aegis (.JSON)</string>\n    <string name=\"export_format_google_auth_uri\">Textový soubor (.TXT)</string>\n    <string name=\"export_format_html\">Webová stránka (.HTML)</string>\n    <string name=\"export_format_hint\">Formát exportu</string>\n    <string name=\"export_all_groups\">Exportovat všechny skupiny</string>\n    <string name=\"export_choose_groups\">Vyberte skupiny, které chcete exportovat</string>\n    <plurals name=\"export_groups_selected_count\">\n        <item quantity=\"one\">Vybrána %d skupina</item>\n        <item quantity=\"few\">Vybrány %d skupiny</item>\n        <item quantity=\"many\">Vybráno %d skupin</item>\n        <item quantity=\"other\">Vybráno %d skupin</item>\n    </plurals>\n    <string name=\"export_no_groups_selected\">Nebyly vybrány žádné skupiny k exportu</string>\n    <string name=\"export_html_title\" comment=\"The title of an HTML export document\">Export Aegis Authenticator</string>\n    <string name=\"choose_authentication_method\">Zabezpečení</string>\n    <string name=\"authentication_method_explanation\">Aegis je 2FA aplikace zaměřená na bezpečnost. Tokeny jsou uloženy v trezoru, který může být zašifrovaný vámi zvoleným heslem. Získá-li útočník váš zašifrovaný trezor, bez hesla se do něj nedostane.\\n\\nPředvybrali jsme možnost, která by podle nás měla nejvíce vyhovovat vašemu zařízení.</string>\n    <string name=\"authentication_method_none\">Žádné</string>\n    <string name=\"authentication_method_none_description\">Trezor nebude šifrován a nebude potřeba heslo pro jeho odemčení. Tuto možnost <b>nedoporučujeme</b>.</string>\n    <string name=\"authentication_method_password\">Heslo</string>\n    <string name=\"authentication_method_password_description\">K odemčení trezoru je potřeba heslo.</string>\n    <string name=\"authentication_method_password_explanation\">Upozornění: Pokud zapomenete své heslo, trvale ztratíte přístup ke svým tokenům. Bez hesla neexistuje způsob, jak je obnovit.</string>\n    <string name=\"authentication_method_biometrics\">Biometrie</string>\n    <string name=\"authentication_method_biometrics_description\">Kromě hesla půjde k odemčení trezoru použít také biometrické prvky registrované v tomto zařízení jako je otisk prstu nebo tvář.</string>\n    <string name=\"authentication\">Odemknout trezor</string>\n    <string name=\"authentication_multiline\" comment=\"The newline in the middle is used for aesthetic purposes\">Odemknout\\ntrezor</string>\n    <string name=\"auth_use_biometrics\">Nebo klepněte sem pro použití <font fgcolor=\"#FF0D86C1\">biometrie</font></string>\n    <string name=\"set_password\">Zadejte heslo</string>\n    <string name=\"set_group\">Zadejte název skupiny</string>\n    <string name=\"set_number\">Zadejte číslo</string>\n    <string name=\"set_password_confirm\">Potvrďte heslo</string>\n    <string name=\"invalid_password\">Heslo je nesprávné</string>\n    <string name=\"invalidated_biometrics\">Zjištěna změna nastavení zabezpečení zařízení. Přejděte do „Aegis -&gt; Nastavení -&gt; Zabezpečení -&gt; Odemčení pomocí biometrie“ a zakažte a znovu povolte odemykání pomocí biometrie.</string>\n    <string name=\"password_reminder\">Zadejte své heslo. Občas se na něj ptáme, abyste ho nezapomněli.</string>\n    <string name=\"password_reminder_dialog_title\">Biometrické odemknutí ve výchozím nastavení</string>\n    <string name=\"password_reminder_dialog_message\">Občas vás požádáme o zadání vašeho hesla, abyste ho nezapomněli a neztratili tak přístup k trezoru. Po jednom zadání hesla se Aegis vrátí zpět k biometrickému ověřování, dokud nebude znovu čas na připomenutí hesla.</string>\n    <string name=\"password_reminder_freq_never\">Nikdy</string>\n    <string name=\"password_reminder_freq_weekly\">Týdně</string>\n    <string name=\"password_reminder_freq_biweekly\">Každý druhý týden</string>\n    <string name=\"password_reminder_freq_monthly\">Měsíčně</string>\n    <string name=\"password_reminder_freq_quarterly\">Čtvrtletně</string>\n    <string name=\"enter_password_2fas_message\">Zdá se, že tato záloha 2FAS je šifrovaná. Zadejte prosím heslo níže.</string>\n    <string name=\"enter_password_authy_message\">Vypadá to, že vaše Authy tokeny jsou šifrovány. Prosím, zavřete Aegis, otevřete Authy a odemkněte tokeny pomocí vašeho hesla. Alternativně se může Aegis pokusit dešifrovat vaše Authy tokeny, pokud zadáte své heslo níže.</string>\n    <string name=\"enter_password_aegis_title\">Zadejte heslo importu</string>\n    <string name=\"period_hint\">Doba (sekundy)</string>\n    <string name=\"algorithm_hint\">Funkce hash</string>\n    <string name=\"type\">Typ</string>\n    <string name=\"share\">Sdílet</string>\n    <string name=\"yes\">Ano</string>\n    <string name=\"no\">Ne</string>\n    <string name=\"undo\">Zpět</string>\n    <string name=\"unlock\">Odemknout</string>\n    <string name=\"advanced\">Pokročilé</string>\n    <string name=\"counter\">Počítadlo</string>\n    <string name=\"digits\">Číslice</string>\n    <string name=\"secret\">Tajný klíč</string>\n    <string name=\"scan\">Naskenovat QR kód</string>\n    <string name=\"scan_image\">Skenovat obrázek</string>\n    <string name=\"enter_manually\">Zadat ručně</string>\n    <string name=\"set_up_biometric\">Nastavení biometrického odemčení</string>\n    <string name=\"copy\">Kopírovat</string>\n    <string name=\"edit\">Upravit</string>\n    <string name=\"select_all\">Vybrat vše</string>\n    <string name=\"assign_icons\">Přiřadit ikony</string>\n    <string name=\"assign_groups\">Přiřadit ke skupině</string>\n    <string name=\"assign_groups_dialog_summary\">Vyberte skupinu, do které chcete přiřadit vybrané položky.</string>\n    <string name=\"assign_groups_dialog_dropdown\">Vybrat skupinu</string>\n    <string name=\"favorite\" comment=\"Verb\">Oblíbené</string>\n    <string name=\"unfavorite\" comment=\"Verb\">Odebrat z oblízených</string>\n    <string name=\"error_all_caps\">CHYBA</string>\n    <string name=\"password\">Heslo</string>\n    <string name=\"confirm_password\">Potvrdit heslo</string>\n    <string name=\"show_password\">Zobrazit heslo</string>\n    <string name=\"new_entry\">Nový záznam</string>\n    <string name=\"add_new_entry\">Přidat nový záznam</string>\n    <string name=\"unlock_vault_error\">Trezor nelze odemknout</string>\n    <string name=\"unlock_vault_error_description\">Nesprávné heslo. Ujistěte se, že je zadané správně.</string>\n    <string name=\"password_equality_error\">Hesla musí být stejná a nesmí být prázdná</string>\n    <string name=\"snackbar_authentication_method\">Zvolte prosím způsob ověření</string>\n    <string name=\"encrypting_vault\">Šifrování trezoru</string>\n    <string name=\"exporting_vault\">Exportování trezoru</string>\n    <string name=\"optimizing_icon\">Optimalizace ikony</string>\n    <string name=\"optimizing_icon_multiple\">Optimalizace ikon %1$d/%2$d</string>\n    <string name=\"reading_file\">Čtení souboru</string>\n    <string name=\"requesting_root_access\">Žádání o přístup root</string>\n    <string name=\"analyzing_qr\">Analyzování QR kódu</string>\n    <string name=\"analyzing_qr_multiple\">Analyzuji QR kód %1$d/%2$d (%3$s)</string>\n    <plurals name=\"added_new_entries\">\n        <item quantity=\"one\">Do trezoru byl přidán %d nový záznam</item>\n        <item quantity=\"few\">Do trezoru byly přidány %d nové záznamy</item>\n        <item quantity=\"many\">Do trezoru bylo přidáno %d nových záznamů</item>\n        <item quantity=\"other\">Do trezoru bylo přidáno %d nových záznamů</item>\n    </plurals>\n    <string name=\"importing_icon_pack\">Importování balíčku ikon</string>\n    <string name=\"delete_entry\">Odstranit položku</string>\n    <string name=\"delete_entry_description\">Opravdu chcete odstranit tuto položku?</string>\n    <string name=\"delete_entry_explanation\">Tato akce nezakáže 2FA pro službu: \\n<b>%s</b>\\n\\nAbyste zabránili ztrátě přístupu, ujistěte se, že jste zakázali 2FA nebo že máte jiný způsob generování kódů pro tuto službu.</string>\n    <string name=\"delete_entries\">Odstranit položky</string>\n    <plurals name=\"delete_entries_description\">\n        <item quantity=\"one\">Opravdu chcete smazat %d položku?</item>\n        <item quantity=\"few\">Opravdu chcete smazat %d položky?</item>\n        <item quantity=\"many\">Opravdu chcete smazat %d položek?</item>\n        <item quantity=\"other\">Opravdu chcete smazat %d položek?</item>\n    </plurals>\n    <string name=\"discard_changes\">Zahodit změny?</string>\n    <string name=\"discard_changes_description\">Změny nebyly uloženy</string>\n    <string name=\"saving_profile_error\">Chyba při ukládání profilu</string>\n    <string name=\"saving_assign_icons_error\">Chyba při přiřazování ikon</string>\n    <string name=\"welcome\">Vítejte</string>\n    <string name=\"app_description\">Aegis je bezpečná, bezplatná a open source 2FA aplikace</string>\n    <string name=\"setup_completed\">Nastavení dokončeno</string>\n    <string name=\"setup_completed_description\">Aplikace Aegis je nastavena a připravena k používání.</string>\n    <string name=\"vault_not_found\">Trezor nebyl nenalezen, spouštím nastavení…</string>\n    <string name=\"copied\">Zkopírováno</string>\n    <string name=\"errors_copied\">Chyby zkopírovány do schránky</string>\n    <string name=\"version_copied\">Verze zkopírována do schránky</string>\n    <string name=\"error_required_field\">Toto pole je povinné</string>\n    <string name=\"error_occurred\">Došlo k chybě</string>\n    <string name=\"decryption_error\">Při odemykání trezoru došlo k chybě</string>\n    <string name=\"decryption_corrupt_error\">Došlo k chybě při odemykání trezoru. Váš trezor může být poškozen.</string>\n    <string name=\"saving_error\">Při pokusu o uložení trezoru došlo k chybě</string>\n    <string name=\"vault_init_error\">Při pokusu o inicializaci trezoru došlo k chybě</string>\n    <string name=\"vault_load_error\">Při pokusu o načtení trezoru z úložiště došlo k chybě</string>\n    <string name=\"biometric_decrypt_error\">Došlo k chybě při dešifrování trezorů s biometrickým ověřením. To se obvykle děje pouze v případě, že došlo ke změně nastavení zabezpečení vašeho zařízení. Odemkněte trezor pomocí vašeho hesla a znovu nastavte biometrické ověření v nastavení Aegis.</string>\n    <string name=\"biometric_init_error\">Došlo k chybě při přípravě biometrického ověření. To se obvykle děje pouze v případě, že došlo ke změně nastavení zabezpečení vašeho zařízení. Odemkněte trezor pomocí vašeho hesla a znovu nastavte biometrické ověření v nastavení Aegis.</string>\n    <string name=\"disable_encryption\">Vypnout šifrování</string>\n    <string name=\"disable_encryption_description\">Opravdu chcete zakázat šifrování? Způsobí to ukládání trezoru do prostého textu. <b>Automatické zálohy budou také zakázány</b>.</string>\n    <string name=\"enable_encryption_error\">Při zapínání šifrování došlo k chybě</string>\n    <string name=\"disable_encryption_error\">Při vypínání šifrování došlo k chybě</string>\n    <string name=\"backup_successful\">Záloha byla úspěšně naplánována</string>\n    <string name=\"backup_error\">Při pokusu o vytvoření zálohy došlo k chybě</string>\n    <string name=\"backup_status_success\">Nejnovější záloha úspěšná: %s</string>\n    <string name=\"backup_status_failed\">Nejnovější záloha selhala: %s</string>\n    <string name=\"backup_status_none\">Zatím nebyly provedeny žádné zálohy</string>\n    <string name=\"backup_warning_password\">Zálohy jsou šifrovány pomocí samostatného hesla nastaveného v nastavení zabezpečení</string>\n    <string name=\"documentsui_error\">Vypadá to, že na vašem zařízení chybí DocumentsUI. Toto je důležitá systémová komponenta nezbytná pro výběr a tvorbu dokumentů. Pokud jste použili nástroj na &quot;debloatování&quot; vašeho zařízení, mohli jste ji omylem odstranit a budete ji muset znovu nainstalovat.</string>\n    <string name=\"icon_pack_import_error\">Při pokusu o import balíčku ikon se vyskytla chyba</string>\n    <string name=\"icon_pack_import_exists_error\">Balíček ikon, který se pokoušíte importovat, již existuje. Chcete jej přepsat?</string>\n    <string name=\"icon_pack_delete_error\">Při pokusu o odstranění balíčku ikon se vyskytla chyba</string>\n    <plurals name=\"icon_pack_info\">\n        <item quantity=\"one\">%d ikona</item>\n        <item quantity=\"few\">%d ikony</item>\n        <item quantity=\"many\">%d ikon</item>\n        <item quantity=\"other\">%d ikon</item>\n    </plurals>\n    <string name=\"icon_custom\">Vlastní</string>\n    <string name=\"permission_denied\">Přístup zamítnut</string>\n    <string name=\"andotp_new_format\">Nový formát (v0.6.3 nebo novější) </string>\n    <string name=\"andotp_old_format\">Starý formát (v0.6.2 a starší) </string>\n    <string name=\"choose_andotp_importer\">Jaký formát má záložní andOTP soubor?</string>\n    <string name=\"choose_totpauth_importer\">Je tato záloha TOTP autentifikátoru šifrována heslem?</string>\n    <string name=\"choose_application\">Zvolte aplikaci, ze které chcete importovat údaje</string>\n    <string name=\"choose_theme\">Vyberte si vzhled rozhraní</string>\n    <string name=\"choose_account_name_position\">Vyberte požadovanou pozici názvu účtu</string>\n    <string name=\"choose_view_mode\">Vyberte si režim zobrazení</string>\n    <string name=\"choose_copy_behavior\">Vyberte požadované chování kopírování</string>\n    <string name=\"parsing_file_error\">Při zpracování souboru došlo k chybě</string>\n    <string name=\"file_not_found\">Chyba: Soubor nenalezen</string>\n    <string name=\"reading_file_error\">Při pokusu o čtení souboru došlo k chybě</string>\n    <string name=\"app_lookup_error\">Chyba: Aplikace není nainstalována</string>\n    <string name=\"app_version_error\">Nainstalovaná verze aplikace %s není podporována. Nedávné verze začaly šifrovat některé soubory v interním adresáři úložiště, kvůli kterému Aegis nemůže získat přístup k informacím, které potřebuje pro import. Pokus o import pravděpodobně povede k chybě. Chcete i přesto pokračovat?</string>\n    <string name=\"root_error\">Chyba: nepodařilo se získat přístup root</string>\n    <plurals name=\"imported_entries_count\">\n        <item quantity=\"one\">Importována %d položka</item>\n        <item quantity=\"few\">Importovány %d položky</item>\n        <item quantity=\"many\">Importováno %d položek</item>\n        <item quantity=\"other\">Importováno %d položek</item>\n    </plurals>\n    <plurals name=\"entries_shown\">\n        <item quantity=\"one\">Zobrazuji %d položku</item>\n        <item quantity=\"few\">Zobrazuji %d položky</item>\n        <item quantity=\"many\">Zobrazuji %d položek</item>\n        <item quantity=\"other\">Zobrazuji %d položek</item>\n    </plurals>\n    <string name=\"intro_import_error_title\">Při importování trezoru se vyskytla chyba</string>\n    <string name=\"import_error_title\">Při importu došlo k jedné nebo více chybám</string>\n    <string name=\"exporting_vault_error\">Při pokusu o export trezoru došlo k chybě</string>\n    <string name=\"exported_vault\">Trezor byl exportován</string>\n    <string name=\"encryption_set_password_error\">Při pokusu o nastavení hesla došlo k chybě.</string>\n    <string name=\"encryption_enable_biometrics_error\">Došlo k chybě při povolování biometrického odemknutí. Některá zařízení mají špatnou implementaci biometrického ověření. Bohužel, je pravděpodobné, že to vaše je jedním z nich. Zvažte možnost odemykání pouze heslem.</string>\n    <string name=\"no_cameras_available\">Fotoaparát není dostupný</string>\n    <string name=\"read_qr_error\">Při pokusu o přečtení QR kódu došlo k chybě</string>\n    <string name=\"read_qr_error_phonefactor\">Aegis není kompatibilní s proprietárním 2FA algoritmem Microsoftu. Ujistěte se prosím, že jste při nastavování 2FA v Office 365 vybrali \\\"Nastavit aplikaci bez oznámení\\\".</string>\n    <string name=\"partial_google_auth_import\">Zjištěn neúplný export z Google Authenticator</string>\n    <string name=\"partial_google_auth_import_warning\">Ve vašem importu chybí některé QR kódy. Nebyly nalezeny následující kódy:\\n\\n<b>%s</b>\\n\\nMůžete pokračovat s importováním tohoto částečného exportu, ale doporučujeme to zkusit znovu se všemi QR kódy, abyste neriskovali ztrátu přístupu k některým tokenům.</string>\n    <string name=\"missing_qr_code_descriptor\">• QR kód %d</string>\n    <plurals name=\"import_partial_export_anyway\">\n        <item quantity=\"one\">Přesto importovat %d token</item>\n        <item quantity=\"few\">Přesto importovat %d tokeny</item>\n        <item quantity=\"many\">Přesto importovat %d tokenů</item>\n        <item quantity=\"other\">Přesto importovat %d tokenů</item>\n    </plurals>\n    <string name=\"import_google_auth_failure\">Importování exportu z Google Authenticator selhalo</string>\n    <string name=\"unrelated_google_auth_batches_error\">Export obsahuje informace o nesouvisejícím balíku. Zkuste importovat 1 balík najednou.</string>\n    <string name=\"no_tokens_can_be_imported\">Nebyly importovány žádné tokeny</string>\n    <string name=\"unlocking_vault\">Odemykání trezoru</string>\n    <string name=\"rename_group\">Přejmenovat skupinu</string>\n    <string name=\"no_group_selection\">Pokud není záznam součástí žádné skupiny, najdete jej v kategorii „Žádná skupina“.</string>\n    <string name=\"remove_group\">Odstranit skupinu</string>\n    <string name=\"remove_group_description\">Opravdu chcete odstranit tuto skupinu? Záznamy z ní budou automaticky přemístěny do „Žádná skupina“.</string>\n    <string name=\"remove_unused_groups\">Odstranit nepoužívané skupiny</string>\n    <string name=\"remove_unused_groups_description\">Opravdu chcete odstranit všechny skupiny, které nemají přidělený záznam?</string>\n    <string name=\"remove_icon_pack\">Odstranit balíček ikon</string>\n    <string name=\"remove_icon_pack_description\">Opravdu chcete odstranit tento balíček ikon? Položky, které používají ikony z tohoto balíčku, nebudou dotčeny.</string>\n    <string name=\"details\">Podrobnosti</string>\n    <string name=\"show_error_details\">Zobrazit podrobnosti o chybě</string>\n    <string name=\"lock\">Uzamknout</string>\n    <string name=\"name\">Název</string>\n    <string name=\"no_group\">Žádná skupina</string>\n    <string name=\"sort\" comment=\"Title of the Sort button in the top action bar of the main view\">Řazení</string>\n    <string name=\"sort_alphabetically\">Poskytovatel (A → Z)</string>\n    <string name=\"sort_alphabetically_reverse\">Poskytovatel (Z → A)</string>\n    <string name=\"sort_alphabetically_name\">Účet (A → Z)</string>\n    <string name=\"sort_alphabetically_name_reverse\">Účet (Z → A)</string>\n    <string name=\"sort_usage_count\">Počet použití</string>\n    <string name=\"sort_last_used\">Naposledy použito</string>\n    <string name=\"sort_custom\">Vlastní</string>\n    <string name=\"last_used\">Naposledy použito</string>\n    <string name=\"last_used_never\">nikdy</string>\n    <string name=\"new_group\">Nová skupina…</string>\n    <string name=\"group\">Skupina</string>\n    <string name=\"group_name_hint\">Název skupiny</string>\n    <string name=\"preference_manage_groups\">Upravit skupiny</string>\n    <string name=\"preference_manage_groups_summary\">Správa a odstranění skupin</string>\n    <string name=\"preference_reset_usage_count\">Resetovat počet použití</string>\n    <string name=\"preference_reset_usage_count_summary\">Resetovat počet použití u každé položky ve vašem trezoru</string>\n    <string name=\"preference_reset_usage_count_dialog\">Opravdu chcete nastavit počet použití všech položek na 0?</string>\n    <string name=\"note\" comment=\"Users can add a note to an entry\">Poznámka</string>\n    <string name=\"clear\">Vymazat</string>\n    <string name=\"dialog_duplicate_entry_title\" comment=\"'Duplicate' is a noun here\">Duplicitní položka</string>\n    <string name=\"dialog_duplicate_entry_message\">Tato položka má stejný název a poskytovatele, jako jedna nebo více existujících. Jak chcete pokračovat?</string>\n    <string name=\"dialog_duplicate_entry_overwrite_title\">Přepsat existující položky</string>\n    <string name=\"dialog_duplicate_entry_overwrite_subtitle\">Nahradit existující položku nebo položky novou. Tato akce je nevratná</string>\n    <string name=\"dialog_duplicate_entry_suffix_title\">Přidat příponu</string>\n    <string name=\"dialog_duplicate_entry_suffix_subtitle\">Přidat příponu k názvu této položky. Nový název bude: %s</string>\n    <string name=\"dialog_duplicate_entry_cancel_title\">Zrušit uložení</string>\n    <string name=\"dialog_duplicate_entry_cancel_subtitle\">Umožňuje upravit položku před pokusem o její opětovné uložení</string>\n    <plurals name=\"dialog_duplicate_entry_overwrite_dialog_message\">\n        <item quantity=\"one\">Opravdu chcete odstranit %d položku s následujícím názvem:\\n\\n%s - %s</item>\n        <item quantity=\"few\">Opravdu chcete odstranit %d položky s následujícím názvem:\\n\\n%s - %s</item>\n        <item quantity=\"many\">Opravdu chcete odstranit %d položek s následujícím názvem:\\n\\n%s - %s</item>\n        <item quantity=\"other\">Opravdu chcete odstranit %d položek s následujícím názvem:\\n\\n%s - %s</item>\n    </plurals>\n    <string name=\"dialog_duplicate_entry_overwrite_dialog_title\">Potvrdit odstranění</string>\n    <string name=\"pref_haptic_feedback_summary\">Vibrovat při změně kódů</string>\n    <string name=\"pref_haptic_feedback_title\">Haptická odezva</string>\n    <string name=\"pref_highlight_entry_title\">Zvýraznit tokeny po klepnutí</string>\n    <string name=\"pref_highlight_entry_summary\">Usnadnit vzájemné rozlišení tokenů dočasným zvýrazněním po kleputí</string>\n    <string name=\"pref_groups_multiselect_title\">Vícenásobný výběr skupin</string>\n    <string name=\"pref_groups_multiselect_summary\">Povolit současný výběr více skupin</string>\n    <string name=\"pref_minimize_on_copy_title\">Minimalizovat při kopírování</string>\n    <string name=\"pref_minimize_on_copy_summary\">Minimalizovat aplikaci po zkopírování tokenu</string>\n    <string name=\"pref_copy_behavior_title\">Zkopírovat tokeny do schránky</string>\n    <string name=\"pref_search_behavior_title\">Chování vyhledávání</string>\n    <string name=\"pref_pause_entry_title\">Zmrazit tokeny po klepnutí</string>\n    <string name=\"pref_pause_entry_summary\">Pozastavit automatické obnovování tokenů klepnutím na ně. Tokeny nebudou aktualizovány, dokud jsou zaměřeny. Vyžaduje \\\"Zvýraznit tokeny po klepnutí\\\" nebo \\\"Klepnutím zobrazit\\\".</string>\n    <string name=\"pin_keyboard_description\">Zadejte své heslo pro povolení PIN klávesnice. Toto funguje jen pokud používáte číselné heslo.</string>\n    <string name=\"pin_keyboard_error\">Při povolování PIN klávesnice došlo k chybě</string>\n    <string name=\"pin_keyboard_error_description\">PIN klávesnici nelze nastavit. Heslo se pro takový případ musí skládat pouze z číslic.</string>\n    <string name=\"pin_keyboard_disabled\">Heslo změněno. PIN klávesnice už nebude zobrazena.</string>\n    <string name=\"selected\">Vybráno</string>\n    <string name=\"dark_theme_title\">Tmavý vzhled</string>\n    <string name=\"light_theme_title\">Světlý vzhled</string>\n    <string name=\"amoled_theme_title\">AMOLED vzhled</string>\n    <string name=\"system_theme_title\">Dle spořiče baterie</string>\n    <string name=\"system_amoled_theme_title\">Dle spořiče baterie (AMOLED)</string>\n    <string name=\"normal_viewmode_title\">Normální</string>\n    <string name=\"compact_mode_title\">Kompaktní</string>\n    <string name=\"small_mode_title\">Malý</string>\n    <string name=\"tiles_mode_title\">Dlaždice</string>\n    <string name=\"unknown_issuer\">Neznámý poskytovatel</string>\n    <string name=\"unknown_account_name\">Neznámý název účtu</string>\n    <plurals name=\"import_error_dialog\">\n        <item quantity=\"one\">Nepodařilo se importovat %d token. Tento token bude přeskočen. Klepněte na „podrobnosti” pro více informací o chybě.</item>\n        <item quantity=\"few\">Nepodařilo se importovat %d tokeny. Tyto tokeny budou přeskočeny. Klepněte na „podrobnosti” pro více informací o chybách.</item>\n        <item quantity=\"many\">Nepodařilo se importovat %d tokenů. Tyto tokeny budou přeskočeny. Klepněte na „podrobnosti” pro více informací o chybách.</item>\n        <item quantity=\"other\">Nepodařilo se importovat %d tokenů. Tyto tokeny budou přeskočeny. Klepněte na „podrobnosti” pro více informací o chybách.</item>\n    </plurals>\n    <string name=\"unable_to_process_deeplink\">Nepodařilo se zpracovat odkaz</string>\n    <string name=\"unable_to_read_qrcode_file\">Nepodařilo se přečíst a zpracovat QR kód ze souboru: %s.</string>\n    <string name=\"unable_to_process_shared_text\">Nepodařilo se zpracovat sdílený text jako OTP</string>\n    <string name=\"unable_to_read_qrcode_files\">Nepodařilo se přečíst a zpracovat některé QR kódy. Bude importováno pouze %1$d/%2$d položek.</string>\n    <string name=\"unable_to_generate_qrcode\">QR kód nelze vygenerovat</string>\n    <string name=\"select_picture\">Vyberte obrázek</string>\n    <string name=\"select_icon\">Vybrat ikonu</string>\n    <string name=\"tile_open_vault\" comment=\"label for a quick settings tile that opens the app when tapped\">Otevřít trezor</string>\n    <string name=\"tile_open_scanner\" comment=\"label for a quick settings tile that opens the QR code scanner when tapped\">Otevřít skener</string>\n    <string name=\"toggle_checkboxes\">Přepnout zaškrtávací políčka</string>\n    <string name=\"search\">Hledat</string>\n    <string name=\"channel_name_lock_status\">Stav zámku</string>\n    <string name=\"channel_description_lock_status\">Aegis může vytvořit trvalé oznámení, které vás upozorní, když je trezor uzamčen</string>\n    <string name=\"vault_unlocked_state\">Trezor je odemčený. Klepnutím uzamkněte.</string>\n    <string name=\"version\">Verze</string>\n    <string name=\"changelog\">Seznam změn</string>\n    <string name=\"whats_new\">Co je nového?</string>\n    <string name=\"github_description\">Zdrojový kód, problémy a informace</string>\n    <string name=\"license\">Licence</string>\n    <string name=\"license_description\">Aegis Authenticator je licencován pod GPLv3</string>\n    <string name=\"third_party_licenses\">Licence třetí strany</string>\n    <string name=\"third_party_licenses_description\">Licence knihoven třetích stran použitých v Aegisu</string>\n    <string name=\"country_netherlands\">Nizozemsko</string>\n    <string name=\"email_us\">Pošlete nám e-mail</string>\n    <string name=\"visit_website\">Navštivte náš web</string>\n    <string name=\"about_support\">Podpora</string>\n    <string name=\"support_rate\">Ohodnoťte aplikaci</string>\n    <string name=\"support_rate_description\">Podpořte nás napsáním recenze v obchodě Google Play</string>\n    <string name=\"webview_error\">Vaše zařízení nepodporuje WebView, které je nutné pro zobrazení seznamu změn a licence. Tato komponenta zřejmě chybí v systému.</string>\n    <string name=\"email\">E-mail</string>\n    <string name=\"time_sync_warning_title\">Automatická synchronizace času</string>\n    <string name=\"time_sync_warning_message\">Aegis při generování správných kódů spoléhá na synchronizaci systémového času. Odchylka pouze několika sekund může mít za následek nesprávné kódy. Zdá se, že vaše zařízení není nakonfigurováno pro automatickou synchronizaci času. Chcete nastavit automatickou synchronizaci času?</string>\n    <string name=\"time_sync_warning_disable\">Už mě neupozorňujte. Vím, co dělám.</string>\n    <string name=\"google_qr_export_unrelated\">Nalezen nesouvisející QR kód. Zkuste skener restartovat.</string>\n    <plurals name=\"google_qr_export_scanned\">\n        <item quantity=\"one\">Naskenován %1$d/%2$d QR kód</item>\n        <item quantity=\"few\">Naskenovány %1$d/%2$d QR kódy</item>\n        <item quantity=\"many\">Naskenováno %1$d/%2$d QR kódů</item>\n        <item quantity=\"other\">Naskenováno %1$d/%2$d QR kódů</item>\n    </plurals>\n    <string name=\"google_qr_export_unexpected\">Očekáván QR kód #%1$d, avšak naskenován byl #%2$d</string>\n    <string name=\"backup_error_bar_message\"><b>Vytvoření zálohy trezoru se nedávno nezdařilo</b></string>\n    <string name=\"backup_error_dialog_details\" comment=\"The first parameter is the type of backup (e.g. built-in or Android backup). The second parameter is an elapsed time in the style of 'x seconds/minutes/days ago'.\">        Pokus o nedávnou zálohu trezoru pomocí %1$s selhal, protože došlo k chybě. Pokus o zálohu byl uskutečněn %2$s. Zkontrolujte prosím svá nastavení pro ujištění se, že zálohy mohou být úspěšně dokončeny.\n    </string>\n    <string name=\"backup_permission_error_dialog_details\" comment=\"The first parameter is the type of backup (e.g. built-in or Android backup). The second parameter is an elapsed time in the style of 'x seconds/minutes/days ago'.\">        Nedávný pokus o zálohu trezoru pomocí %1$s selhal, protože Aegis neměl oprávnění k zápisu do cílového adresáře. Pokus o zálohu byl proveden %2$s. Tato chyba může nastat, když přesunete/přejmenujete cíl zálohy nebo pokud jste nedávno obnovili Aegis ze zálohy. Nastavte prosím znovu cíl pro zálohu.\n    </string>\n    <string name=\"backup_system_builtin\">Zabudované zálohy aplikace Aegis</string>\n    <string name=\"backup_system_android\">Cloudový zálohovací systém systému Android</string>\n    <string name=\"backup_reminder_bar_message_with_latest\" comment=\"The parameter is an elapsed time in the style of 'x seconds/minutes/days ago'\">        Poslední záloha je zastaralá (%s)\n    </string>\n    <string name=\"backup_reminder_bar_message\">        Změny nejsou zálohovány\n    </string>\n    <string name=\"backup_reminder_bar_dialog_title\">Změny nejsou zálohovány</string>\n    <string name=\"backup_reminder_bar_dialog_summary\">        Nedávné změny v trezoru ještě nebyly zálohovány. Je důležité provádět pravidelné zálohování, aby nedošlo ke ztrátě přístupu k účtům. Zvažte prosím nastavení automatického zálohování v nabídce nastavení.\n    </string>\n    <string name=\"backup_reminder_bar_dialog_accept\">Nastavit zálohování</string>\n    <string name=\"backup_plaintext_export_warning\"><b>Trezor byl nedávno exportován v prostém textu</b></string>\n    <string name=\"pref_show_plaintext_warning_hint\">Toto varování již nezobrazovat</string>\n    <string name=\"backup_plaintext_warning_explanation\">Toto upozornění se zobrazuje, protože jste nedávno exportovali nešifrovanou kopii trezoru. Chcete-li zachovat bezpečnost svých tokenů, doporučujeme tento soubor odstranit, jakmile již nebude potřeba.</string>\n    <string name=\"switch_camera\">Přepnout fotoaparát</string>\n    <string name=\"empty_list\">Žádné kódy. Začněte přidáním položek pomocí tlačítka + v pravém dolním rohu.</string>\n    <string name=\"empty_list_title\">Žádné záznamy nenalezeny</string>\n    <string name=\"empty_group_list\">Žádné skupiny k zobrazení. Skupiny můžete přidat z obrazovky úprav položky.</string>\n    <string name=\"empty_group_list_title\">Nenalezeny žádné skupiny</string>\n    <string name=\"no_icon_packs\">Zatím nebyly importovány žádné balíčky ikon. Pro import klepněte na tlačítko plus. Tip: zkuste <a href=\"https://aegis-icons.github.io\">aegis-icons</a>.</string>\n    <string name=\"no_icon_packs_title\">Žádné balíčky ikon</string>\n    <string name=\"pick_icon\">Vybrat ikonu</string>\n    <string name=\"uncategorized\">Nezařazené</string>\n    <string name=\"done\">Hotovo</string>\n    <plurals name=\"qr_count\">\n        <item quantity=\"one\">%d / %d QR kódu</item>\n        <item quantity=\"few\">%d / %d QR kódů</item>\n        <item quantity=\"many\">%d / %d QR kódů</item>\n        <item quantity=\"other\">%d / %d QR kódů</item>\n    </plurals>\n    <string name=\"next\">Další</string>\n    <string name=\"previous\">Předchozí</string>\n    <string name=\"copy_uri\">Kopírovat URI</string>\n    <string name=\"unable_to_copy_uri_to_clipboard\">Nepodařilo se zkopírovat URI do schránky</string>\n    <string name=\"uri_copied_to_clipboard\">URI zkopírována do schránky</string>\n    <string name=\"transfer_entry_description\">Naskenujte tento QR kód ověřovací aplikací, do které chcete položku přenést</string>\n    <string name=\"transfer_entry_brightness\">Klepnutím na QR kód přepnete plný jas obrazovky</string>\n    <string name=\"google_auth_compatible_transfer_description\">Naskenujte tyto QR kódy s aplikací Aegis nebo Google Authenticator.\\n\\nKvůli limitacím aplikace Google Authenticator jsou zahrnuty pouze 6-místné tokeny TOTP a HOTP využívající SHA1</string>\n    <string name=\"password_strength_very_weak\">Velmi slabé</string>\n    <string name=\"password_strength_weak\">Slabé</string>\n    <string name=\"password_strength_fair\">Docela dobré</string>\n    <string name=\"password_strength_good\">Dobré</string>\n    <string name=\"password_strength_strong\">Silné</string>\n    <string name=\"password_strength_unknown\">Heslo je příliš dlouhé pro analýzu bezpečnosti</string>\n    <string name=\"pref_pin_keyboard_title\">Použít PIN klávesnici na zamykací obrazovce</string>\n    <string name=\"pref_pin_keyboard_summary\">Tuto možnost povolte, chcete-li používat PIN klávesnici na zamykací obrazovce. Toto funguje jen pokud používáte číselné heslo.</string>\n    <string name=\"title_activity_preferences\">Nastavení</string>\n    <string name=\"title_activity_manage_groups\">Správa skupin</string>\n    <string name=\"title_activity_transfer\">Přenést položky</string>\n    <string name=\"title_activity_about\">O aplikaci</string>\n    <string name=\"title_activity_edit_entry\">Upravit položku</string>\n    <string name=\"title_activity_scan_qr\">Naskenovat QR kód</string>\n    <string name=\"title_activity_import_entries\">Importovat položky</string>\n    <string name=\"title_activity_assign_icons\">Přiřadit ikony</string>\n    <string name=\"title_activity_licenses\">Licence třetích stran</string>\n    <string name=\"dialog_wipe_entries_title\">Vyčistit položky</string>\n    <string name=\"dialog_wipe_entries_message\">Váš trezor už obsahuje záznamy. Chcete tyto záznamy smazat před importem tohoto souboru?\\n\\n<b>Přístup ke všem stávajícím položkám v trezoru trvale ztratíte.</b></string>\n    <string name=\"dialog_wipe_entries_checkbox\">Vymazat obsah trezoru</string>\n    <string name=\"import_from_clipboard_title\">Importovat ze schránky</string>\n    <string name=\"import_from_clipboard_message\">Ve vaší schránce jsme nalezli platnou adresu OTPAuth URI.\\n\\n<b>Název</b>: %1$s\\n<b>Vydavatel</b>: %2$s\\n\\nChcete předvyplnit tuto položku?</string>\n    <string name=\"panic_trigger_ignore_toast\">Aegis zachytila signál paniky, ale ignoruje ho, protože nastavení reakce je vypnuto</string>\n    <string name=\"pref_panic_trigger_title\">Smazat trezor při signálu paniky</string>\n    <string name=\"pref_panic_trigger_summary\">Smazat trezor při obdržení signálu paniky z aplikace Ripple</string>\n    <string name=\"import_vault\">Importovat trezor Aegisu</string>\n    <string name=\"import_vault_hint\">Chcete importovat data z jiné 2FA aplikace? Dokončete nastavení a poté přejděte do nabídky nastavení.</string>\n    <plurals name=\"import_duplicate_toast\">\n        <item quantity=\"one\">Zrušeno označení %d možné duplicity. Zkontrolujte prosím seznam položek.</item>\n        <item quantity=\"few\">Zrušeno označení %d možných duplicit. Zkontrolujte prosím seznam položek.</item>\n        <item quantity=\"many\">Zrušeno označení %d možných duplicit. Zkontrolujte prosím seznam položek.</item>\n        <item quantity=\"other\">Zrušeno označení %d možných duplicit. Zkontrolujte prosím seznam položek.</item>\n    </plurals>\n    <string name=\"importer_help_2fas\">Dodejte záložní soubor 2FAS Authenticator.</string>\n    <string name=\"importer_help_aegis\">Dodejte soubor exportu/zálohy Aegis.</string>\n    <string name=\"importer_help_authenticator_plus\">Dodejte exportovaný soubor Authenticator Plus získaný přes <b>Nastavení -&gt; Záloha a obnovení -&gt; Exportovat jako text a HTML</b>.</string>\n    <string name=\"importer_help_authy\">Dodejte kopii <b>/data/data/com.authy.authy/shared_prefs/com.authy.storage.tokens.authenticator.xml</b>, která se nachází v interním úložišti Authy.</string>\n    <string name=\"importer_help_andotp\">Dodejte soubor exportu/zálohy andOTP.</string>\n    <string name=\"importer_help_bitwarden\">Vyberte soubor exportu/zálohy Bitwardenu. Šifrované soubory nejsou podporovány.</string>\n    <string name=\"importer_help_battle_net_authenticator\">Dodejte kopii <b>/data/data/com.blizzard.messenger/shared_prefs/com.blizzard.messenger.authenticator_preferences.xml</b>, která se nachází v interním úložišti Battle.net Authenticator.</string>\n    <string name=\"importer_help_duo\">Dodejte kopii <b>/data/data/com.duosecurity.duomobile/files/duokit/accounts.json</b>, která se nachází v interním úložišti DUO.</string>\n    <string name=\"importer_help_ente_auth\">Dodejte soubor exportu Ente Auth. V současné odbě jsou podporovány pouze nešifrované soubory.</string>\n    <string name=\"importer_help_freeotp\">FreeOTP 2: Dodejte záložní soubor.\\nFreeOTP 1.x: Dodejte kopii souboru <b>/data/data/org.fedorahosted.freeotp/shared_prefs/tokens.xml</b>, umístěného v interním úložišti aplikace FreeOTP.</string>\n    <string name=\"importer_help_freeotp_plus\">Dodjete soubor exportu FreeOTP+.</string>\n    <string name=\"importer_warning_title_freeotp2\">Kompatibilita s FreeOTP 2</string>\n    <string name=\"importer_warning_message_freeotp2\">Ve FreeOTP 2 existuje řada problémů, které mohou vést k poškození záloh. Aegis se pokusí zachránit co nejvíce záznamů, ale je možné, že se některé nebo dokonce všechny nepodaří importovat.</string>\n    <string name=\"importer_help_google_authenticator\"><b>Jsou podporovány pouze databázové soubory z aplikace Google Authenticator v5.10 a starších</b>.\\n\\nPoužijte kopii <b>/data/com.google.android.apps.authenticator2/databases/databases</b> umístěného v interním úložišti aplikace Google Authenticator.</string>\n    <string name=\"importer_help_microsoft_authenticator\">Dodejte kopii <b>/data/data/com.azure.authenticator/databases/PhoneFactor</b>, která se nachází v interním úložišti Microsoft Authenticator.</string>\n    <string name=\"importer_help_plain_text\">Dodejte prostý textový soubor Google Authenticator URI na každý řádek.</string>\n    <string name=\"importer_help_proton_authenticator\">Dodejte soubor exportu Proton Authenticator (.json) získaný přes <b>Nastavení -&gt; Export</b>.</string>\n    <string name=\"importer_help_steam\"><b>Steam v3.0 a novější nejsou podporovány</b>. Dodejte kopii souboru <b>/data/data/com.valvesoftware.android.steam.community/files/Steamguard-*.json</b> umístěného v interním úložném adresáři aplikace Steam.</string>\n    <string name=\"importer_help_stratum\">Dodejte exportovaný soubor Stratum získaný přes <b>Nastavení -&gt; Záloha -&gt; Exportovat do šifrovaného souboru (doporučeno)</b>.</string>\n    <string name=\"importer_help_totp_authenticator\">Dodejte soubor exportu TOTP.</string>\n    <string name=\"importer_help_winauth\">Dodejte soubor exportu WinAuth.</string>\n    <string name=\"import_assign_icons_dialog_title\">Přiřadit ikony</string>\n    <string name=\"import_assign_icons_dialog_text\">Chcete přiřadit ikony k importovaným záznamům?</string>\n    <string name=\"importer_encrypted_exception_google_authenticator\">Šifrovaná položka byla přeskočena: %s</string>\n    <string name=\"importer_help_direct\">Importovat záznamy přímo z %s. Aplikace musí být nainstalována a aplikaci Aegis musí být udělen root přístup.</string>\n    <string name=\"groups\">Skupiny</string>\n    <string name=\"pref_focus_search\">Zaměřit hledání při spuštění aplikace</string>\n    <string name=\"pref_focus_search_summary\">Zaměřit vyhledávání ihned po otevření aplikace.</string>\n    <string name=\"pref_grouping_halves\">Poloviny</string>\n    <string name=\"pref_grouping_none\">Bez seskupování</string>\n    <string name=\"pref_grouping_size_two\">Skupiny 2</string>\n    <string name=\"pref_grouping_size_three\">Skupiny 3</string>\n    <string name=\"pref_grouping_size_four\">Skupiny 4</string>\n    <string name=\"pref_copy_behavior_never\">Nikdy</string>\n    <string name=\"pref_copy_behavior_single_tap\">Jedno klepnutí</string>\n    <string name=\"pref_copy_behavior_double_tap\">Dvojité klepnutí</string>\n    <string name=\"pref_account_name_position_hidden\">Skryté</string>\n    <string name=\"pref_account_name_position_end\">Vedle poskytovatele</string>\n    <string name=\"pref_account_name_position_below\">Pod poskytovatelem</string>\n    <plurals name=\"time_elapsed_seconds\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"one\">před %d sekundou</item>\n        <item quantity=\"few\">před %d sekundami</item>\n        <item quantity=\"many\">před %d sekundami</item>\n        <item quantity=\"other\">před %d sekundami</item>\n    </plurals>\n    <plurals name=\"time_elapsed_minutes\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"one\">před %d minutou</item>\n        <item quantity=\"few\">před %d minutami</item>\n        <item quantity=\"many\">před %d minutami</item>\n        <item quantity=\"other\">před %d minutami</item>\n    </plurals>\n    <plurals name=\"time_elapsed_hours\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"one\">před %d hodinou</item>\n        <item quantity=\"few\">před %d hodinami</item>\n        <item quantity=\"many\">před %d hodinami</item>\n        <item quantity=\"other\">před %d hodinami</item>\n    </plurals>\n    <plurals name=\"time_elapsed_days\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"one\">před %d dnem</item>\n        <item quantity=\"few\">před %d dny</item>\n        <item quantity=\"many\">před %d dny</item>\n        <item quantity=\"other\">před %d dny</item>\n    </plurals>\n    <plurals name=\"time_elapsed_years\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"one\">před %d rokem</item>\n        <item quantity=\"few\">před %d lety</item>\n        <item quantity=\"many\">před %d lety</item>\n        <item quantity=\"other\">před %d lety</item>\n    </plurals>\n    <plurals name=\"dropdown_checkboxes_default_count\">\n        <item quantity=\"one\">Vybrána %d položka</item>\n        <item quantity=\"few\">Vybrány %d položky</item>\n        <item quantity=\"many\">Vybráno %d položek</item>\n        <item quantity=\"other\">Vybráno %d položek</item>\n    </plurals>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-cs-rCZ-v29/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"system_theme_title\">Podle systému</string>\n    <string name=\"system_amoled_theme_title\">Podle systému (AMOLED)</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-da-rDK/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources xmlns:tools=\"http://schemas.android.com/tools\">\n    <string name=\"action_settings\">Indstillinger</string>\n    <string name=\"action_about\">Om</string>\n    <string name=\"action_delete\">Slet</string>\n    <string name=\"action_transfer\">Overfør</string>\n    <string name=\"action_edit_icon\">Redigér ikon</string>\n    <string name=\"action_reset_usage_count\">Nulstil brugstæller</string>\n    <string name=\"action_reset_usage_count_dialog\">Sikker på, at brugstælleren for denne post skal nulstilles?</string>\n    <string name=\"action_default_icon\">Gendan standardikon</string>\n    <string name=\"discard\">Kassér</string>\n    <string name=\"save\">Gem</string>\n    <string name=\"all\">Alle</string>\n    <string name=\"issuer\">Udsteder</string>\n    <string name=\"yandex_pin\">PIN-kode (4–16 cifre)</string>\n    <string name=\"motp_pin\">PIN-kode (4 cifre)</string>\n    <string name=\"suggested\">Foreslået</string>\n    <string name=\"usage_count\">Brugstælling</string>\n    <string name=\"warning\">Advarsel</string>\n    <string name=\"pref_cat_appearance_app\">App</string>\n    <string name=\"pref_cat_appearance_entries\">Poster</string>\n    <string name=\"pref_cat_backups_android\">Android</string>\n    <string name=\"pref_cat_backups_auto\">Automatisk sikkerhedskopiering</string>\n    <string name=\"pref_section_behavior_title\">Adfærd</string>\n    <string name=\"pref_section_behavior_summary\">Tilpas adfærden, når du interagerer med postlisten.</string>\n    <string name=\"pref_section_appearance_title\">Udseende</string>\n    <string name=\"pref_section_appearance_summary\">Justér tema, sprog og andre indstillinger, som påvirker app-udseendet.</string>\n    <string name=\"pref_section_security_title\">Sikkerhed</string>\n    <string name=\"pref_section_security_summary\">Opsæt kryptering, biometrisk oplåsning, auto-låsning og andre sikkerhedsindstillinger.</string>\n    <string name=\"pref_section_import_export_title\">Import &amp; Eksport</string>\n    <string name=\"pref_section_import_export_summary\">Importér sikkerhedskopier af Aegis eller andre godkendelsesapps. Opret manuelle eksporter af din Aegis-boks.</string>\n    <string name=\"pref_section_audit_log_title\">Revisionslog</string>\n    <string name=\"pref_section_audit_log_summary\">Find en liste over alle rapporterede vigtige hændelser i appen.</string>\n    <string name=\"pref_section_backups_title\">Sikkerhedskopier</string>\n    <string name=\"pref_section_backups_summary\">Opsæt automatiske sikkerhedskopier til din foretrukne placering, eller deltag i Android\\'s cloud-sikkerhedskopieringssystem.</string>\n    <string name=\"pref_section_icon_packs\">Ikonpakker</string>\n    <string name=\"pref_section_icon_packs_summary\">Administrer og importér ikonpakker</string>\n    <string name=\"pref_select_theme_title\">Tema</string>\n    <string name=\"pref_dynamic_colors_title\">Dynamiske farver</string>\n    <string name=\"pref_dynamic_colors_summary\">Anvend en overlejring baseret på Android-temaets farver</string>\n    <string name=\"pref_view_mode_title\">Visningstilstand</string>\n    <string name=\"pref_lang_title\">Sprog</string>\n    <string name=\"pref_show_icons_title\">Vis ikoner</string>\n    <string name=\"pref_show_icons_summary\">Vis ikoner ud for hver post</string>\n    <string name=\"pref_code_group_size_title\">Kodeciffergruppering</string>\n    <string name=\"pref_code_group_size_summary\">Vælg antal cifre til kodegruppering</string>\n    <string name=\"pref_account_name_position_title\">Vis kontonavnet</string>\n    <string name=\"pref_show_next_code_title\">Vis næste kode</string>\n    <string name=\"pref_show_next_code_summary\">Generér og vis den næste kode før tid</string>\n    <string name=\"pref_expiration_state_title\">Angiv, hvornår koder er ved at udløbe</string>\n    <string name=\"pref_expiration_state_summary\">Skift kodefarverne og få dem til at blinke, når de er ved at udløbe</string>\n    <string name=\"pref_expiration_state_fallback\">Skift kodefarverne, når de er ved at udløbe</string>\n    <string name=\"pref_shared_issuer_account_name_title\">Vis kun kontonavn, når nødvendigt</string>\n    <string name=\"pref_shared_issuer_account_name_summary\">Vis kun kontonavne, når de har samme udsteder. Andre kontonavne skjules.</string>\n    <string name=\"pref_account_name_position_summary_override\">Denne indstilling tilsidesættes ved visningstilstand i fliser. Kontonavnet vises under udstederen.</string>\n    <string name=\"pref_import_file_title\">Import fra fil</string>\n    <string name=\"pref_import_file_summary\">Importér tokens fra en fil</string>\n    <string name=\"pref_android_backups_title\">Android-sikkerhedskopier i cloud</string>\n    <string name=\"pref_android_backups_summary\">Lad Android\\'s cloud-sikkerhedskopieringssystem medtage Aegis\\' boks i sine sikkerhedskopier (understøtter kun krypterede bokse).</string>\n    <string name=\"pref_android_backups_hint\"><i>Enhed-til-enhed-sikkerhedskopier (D2D) er altid tilladt, uanset ovenstående indstilling</i></string>\n    <string name=\"pref_backups_title\">Sikkerhedskopiér automatisk boksen</string>\n    <string name=\"pref_backups_summary\">Opret automatisk sikkerhedskopier af boksen på et eksternt lager, når ændringer foretages (understøtter kun krypterede bokse).</string>\n    <string name=\"pref_backups_reminder_title\">Sikkerhedskopieringspåmindelse</string>\n    <string name=\"pref_backups_reminder_summary\">Vis en påmindelse om at sikkerhedskopiere Boksen, såfremt dette ikke er sket ifm. de seneste ændringer.</string>\n    <string name=\"pref_backups_reminder_dialog_title\">Deaktivér sikkerhedskopieringspåmindelse</string>\n    <string name=\"pref_backups_reminder_dialog_summary\">Deaktiverer du denne påmindelse, fortæller Aegis dig ikke, om nogen ændringer endnu ikke er sikkerhedskopieret. Dermed risikerer du at miste adgang til dine tokens. Er du sikker på, at du vil deaktivere påmindelsen?</string>\n    <string name=\"pref_backups_versioning_strategy_title\">Sikkerhedskopieringsstrategi</string>\n    <string name=\"pref_backups_versioning_strategy_keep_x_versions\">Behold et antal versioner</string>\n    <string name=\"pref_backups_versioning_strategy_single_backup\">Enkelt sikkerhedskopi</string>\n    <string name=\"pref_backups_versioning_strategy_single_backup_warning\">Den valgte sikkerhedskopieringsstrategi er ikke pålidelig og anbefales ikke. En enkelt sikkerhedskopifejl kan føre til tab af den eneste eksisterende sikkerhedskopi.</string>\n    <string name=\"pref_backups_versioning_strategy_dialog_title\">Vælg en sikkerhedskopieringsstrategi</string>\n    <string name=\"pref_backups_location_title\">Sikkerhedskopiplacering</string>\n    <string name=\"pref_backups_location_summary\">Sikkerhedskopier gemmes på</string>\n    <string name=\"pref_backup_location_summary\">Sikkerhedskopi gemmes på</string>\n    <string name=\"pref_backups_trigger_title\">Udløs sikkerhedskopiering</string>\n    <string name=\"pref_backups_trigger_summary\">Udløs manuelt en sikkerhedskopiering</string>\n    <string name=\"pref_backups_versions_title\">Antal versioner at beholde</string>\n    <string name=\"pref_backups_versions_infinite\">\\u221E</string>\n    <plurals name=\"pref_backups_versions_summary\">\n        <item quantity=\"one\">Behold %1$d version af sikkerhedskopien</item>\n        <item quantity=\"other\">Behold %1$d versioner af sikkerhedskopien</item>\n    </plurals>\n    <string name=\"pref_backups_versions_infinite_summary\">Opbevar et uendeligt antal versioner af sikkerhedskopien</string>\n    <string name=\"pref_import_app_title\">Importér fra app</string>\n    <string name=\"pref_import_app_summary\">Importér tokens fra en app (kræver root-adgang)</string>\n    <string name=\"pref_export_title\">Eksport</string>\n    <string name=\"pref_export_summary\">Eksportér boksen</string>\n    <string name=\"pref_password_reminder_title\">Adgangskodepåmindelse</string>\n    <string name=\"pref_google_auth_export_title\">Eksportér til Google Authenticator</string>\n    <string name=\"pref_google_auth_export_descriptor\">Genererer QR-koder kompatible med Google Authenticator til eksport</string>\n    <string name=\"pref_google_auth_export_no_data\">Ingen data at eksportere</string>\n    <plurals name=\"pref_google_auth_export_incompatible_entries\">\n        <item quantity=\"one\">Sprang %d inkompatibel post over</item>\n        <item quantity=\"other\">Sprang %d inkompatible poster over</item>\n    </plurals>\n    <string name=\"pref_password_reminder_summary\">Vis %s påmindelse om at angive adgangskoden, så den ikke glemmes.</string>\n    <string name=\"pref_password_reminder_summary_disabled\">Deaktiveret</string>\n    <string name=\"pref_secure_screen_title\">Skærmsikkerhed</string>\n    <string name=\"pref_secure_screen_summary\">Bloker skærmbilleder og andre forsøg på at optage skærmen i appen</string>\n    <string name=\"pref_tap_to_reveal_title\">Tryk for at vise</string>\n    <string name=\"pref_tap_to_reveal_summary\">Som standard er tokens skjult. Tryk på tokens for at vise koden.</string>\n    <string name=\"pref_tap_to_reveal_time_title\">Timeout for tryk for at vise</string>\n    <string name=\"pref_auto_lock_title\">Auto-lås</string>\n    <string name=\"pref_auto_lock_summary\">Når %s</string>\n    <string name=\"pref_auto_lock_summary_disabled\">Deaktiveret</string>\n    <string name=\"pref_auto_lock_prompt\">Lås automatisk Aegis, når</string>\n    <string name=\"pref_auto_lock_type_back_button\">Der trykkes på tilbage-knappen</string>\n    <string name=\"pref_auto_lock_type_minimize\">Appen minimeres</string>\n    <string name=\"pref_auto_lock_type_device_lock\">Enheden låses</string>\n    <string name=\"pref_backup_password_category\">Sikkerhedskopiering og Eksport</string>\n    <string name=\"pref_backup_password_title\">Forskellig adgangskode for sikkerhedskopi og eksport</string>\n    <string name=\"pref_backup_password_summary\">Når aktiveret, kan app-oplåsningskoden ikke længere bruges til dekryptering af sikkerhedskopier og eksporter.</string>\n    <string name=\"pref_backup_password_change_title\">Skift adgangskode for sikkerhedskopiering og eksport</string>\n    <string name=\"pref_backup_password_change_summary\">Angiv en ny adgangskode til brug for Boks-kryptering under sikkerhedskopiering og eksport.</string>\n    <string name=\"pref_encryption_title\">Kryptering</string>\n    <string name=\"pref_encryption_summary\">Kryptér og oplås Boksen med adgangskode/biometri</string>\n    <string name=\"pref_biometrics_title\">Biometrisk oplåsning</string>\n    <string name=\"pref_biometrics_summary\">Tillad biometrisk godkendelse for at oplåse Boksen</string>\n    <string name=\"pref_search_behavior_summary\">Søg gennem: %s</string>\n    <string name=\"pref_search_behavior_prompt\">Søg i ethvert af de flg. felter</string>\n    <string name=\"pref_search_behavior_type_name\">Navn</string>\n    <string name=\"pref_search_behavior_type_issuer\">Udsteder</string>\n    <string name=\"pref_search_behavior_type_note\">Notat</string>\n    <string name=\"pref_search_behavior_type_groups\">Grupper</string>\n    <string name=\"pref_set_password_title\">Skift adgangskode</string>\n    <string name=\"pref_set_password_summary\">Sæt ny adgangskode til brug for oplåsning af din Boks</string>\n    <string name=\"no_events_title\">Ingen rapporterede hændelser</string>\n    <string name=\"no_events_description\">Ingen vigtige hændelser er rapporteret i appen</string>\n    <string name=\"event_title_vault_unlocked\">Boks oplåst</string>\n    <string name=\"event_description_vault_unlocked\">Boksen er blevet oplåst</string>\n    <string name=\"event_title_backup_created\">Sikkerhedskopi oprettet</string>\n    <string name=\"event_description_backup_created\">En sikkerhedskopi af boksen er blevet oprettet</string>\n    <string name=\"event_title_android_backup_created\">Sikkerhedskopi oprettet af Android</string>\n    <string name=\"event_description_android_backup_created\">En sikkerhedskopi af boksen er blevet oprettet af Android</string>\n    <string name=\"event_title_vault_exported\">Boks eksporteret</string>\n    <string name=\"event_description_vault_exported\">En kopi af boksen er eksporteret</string>\n    <string name=\"event_title_entry_shared\">Post delt</string>\n    <string name=\"event_description_entry_shared\">En post er delt</string>\n    <string name=\"event_title_vault_unlock_failed_password\">Boksoplåsning mislykkedes (adgangskode)</string>\n    <string name=\"event_description_vault_unlock_failed_password\">Et boksoplåsningsforsøg med adgangskode mislykkedes</string>\n    <string name=\"event_title_vault_unlock_failed_biometrics\">Boksoplåsning mislykkedes (biometri)</string>\n    <string name=\"event_description_vault_unlock_failed_biometrics\">Et boksoplåsningsforsøg med biometri mislykkedes</string>\n    <string name=\"event_unknown\">Ukendt hændelsestype</string>\n    <string name=\"audit_log_entry_deleted\">(slettet)</string>\n    <string name=\"today_at_time\">I dag kl. %1$s</string>\n    <string name=\"day_of_week_at_time\">%1$s kl. %2$s</string>\n    <string name=\"export_encrypted\">Kryptér boksen</string>\n    <string name=\"export_help\">Denne handling eksporterer Boksen ud af Aegis\\' interne lager. Vælg det format Boksen skal eksportere som:</string>\n    <string name=\"export_warning_unencrypted\">Du er ved at eksportere en ukrypteret kopi af din Aegis-boks. <b>Dette er ikke anbefalet</b>.</string>\n    <string name=\"export_warning_password\">Eksporter krypteres vha. en separat adgangskode opsat i Sikkerhedsindstillinger.</string>\n    <string name=\"understand_risk_accept\">Risikoen er forstået</string>\n    <string name=\"export_format_aegis\">Aegis (.JSON)</string>\n    <string name=\"export_format_google_auth_uri\">Tekstfil (.TXT)</string>\n    <string name=\"export_format_html\">Webside (.HTML)</string>\n    <string name=\"export_format_hint\">Eksportformat</string>\n    <string name=\"export_all_groups\">Eksportér alle grupper</string>\n    <string name=\"export_choose_groups\">Vælg de grupper, som skal eksporteres</string>\n    <plurals name=\"export_groups_selected_count\">\n        <item quantity=\"one\">%d gruppe valgt</item>\n        <item quantity=\"other\">%d grupper valgt</item>\n    </plurals>\n    <string name=\"export_no_groups_selected\">Ingen grupper valgt til eksport</string>\n    <string name=\"export_html_title\" comment=\"The title of an HTML export document\">Aegis Authenticator Eksport</string>\n    <string name=\"choose_authentication_method\">Sikkerhed</string>\n    <string name=\"authentication_method_explanation\">Aegis er en sikkerhedsfokuseret 2FA-app. Tokener opbevares i en Boks, der kan krypteres med en valgfri adgangskode. Opnår en angriber adgang til den krypteret Boks-fil, vil vedkommende ikke kunne tilgå indholdet uden brug af adgangskoden.\\n\\nVi har på forhånd valgt den indstilling, som vi mener passer bedst til enheden.</string>\n    <string name=\"authentication_method_none\">Ingen</string>\n    <string name=\"authentication_method_none_description\">Ingen adgangskode er nødvendig for at låse op for boksen og den vil ikke blive krypteret. <b>Denne indstilling anbefales ikke</b>.</string>\n    <string name=\"authentication_method_password\">Adgangskode</string>\n    <string name=\"authentication_method_password_description\">En adgangskode kræves til oplåsning af Boksen.</string>\n    <string name=\"authentication_method_password_explanation\">Advarsel: Glemmes adgangskoden, bliver dine tokens permanent utilgængelige. De vil ikke kunne gendannes uden brug af adgangskoden.</string>\n    <string name=\"authentication_method_biometrics\">Biometri</string>\n    <string name=\"authentication_method_biometrics_description\">Ud over en adgangskode kan denne enheds registrerede biometri, såsom fingeraftryk eller ansigt, bruges til oplåsning af Boksen.</string>\n    <string name=\"authentication\">Lås boksen op</string>\n    <string name=\"authentication_multiline\" comment=\"The newline in the middle is used for aesthetic purposes\">Lås\\nboksen op</string>\n    <string name=\"auth_use_biometrics\">Eller tryk her for at bruge <font fgcolor=\"#FF0D86C1\">biometri</font></string>\n    <string name=\"set_password\">Angiv adgangskode</string>\n    <string name=\"set_group\">Angiv et gruppenavn</string>\n    <string name=\"set_number\">Angiv et tal</string>\n    <string name=\"set_password_confirm\">Bekræft adgangskoden</string>\n    <string name=\"invalid_password\">Adgangskoden er forkert</string>\n    <string name=\"invalidated_biometrics\">En ændring i enhedens sikkerhedsindstillinger er detekteret. Gå til \\\"Aegis -&gt; Indstillinger -&gt; Sikkerhed -&gt; Biometrisk oplåsning\\\" for at slå biometrisk oplåsning fra og til.</string>\n    <string name=\"password_reminder\">Angiv adgangskoden. Vi beder dig lejlighedsvis gøre dette, så du ikke glemmer den.</string>\n    <string name=\"password_reminder_dialog_title\">Biometrisk oplåsning som standard</string>\n    <string name=\"password_reminder_dialog_message\">For at hindre, at du låses ude af din Boks, beder vi lejlighedsvis om adgangskoden, så den ikke glemmes. Efter du har angivet adgangskoden, fortsætter Aegis med biometrisk oplåsning som standard indtil den næste påmindelse.</string>\n    <string name=\"password_reminder_freq_never\">Aldrig</string>\n    <string name=\"password_reminder_freq_weekly\">Ugentlig</string>\n    <string name=\"password_reminder_freq_biweekly\">14. dag</string>\n    <string name=\"password_reminder_freq_monthly\">Månedligt</string>\n    <string name=\"password_reminder_freq_quarterly\">Kvartalsvist</string>\n    <string name=\"enter_password_2fas_message\">Det lader til, at denne 2FAS-sikkerhedskopi er krypteret. Angiv adgangskoden nedenfor.</string>\n    <string name=\"enter_password_authy_message\">Det ser ud til at Authy-tokenerne er krypterede. Luk Aegis, åbn Authy og oplås tokener med adgangskoden. Alternativ kan Aegis forsøge at dekryptere Authy-tokenerne, hvis adgangskode angives nedenfor.</string>\n    <string name=\"enter_password_aegis_title\">Angiv importadgangskoden</string>\n    <string name=\"period_hint\">Periode (sekunder)</string>\n    <string name=\"algorithm_hint\">Hash-funktion</string>\n    <string name=\"type\">Type</string>\n    <string name=\"share\">Del</string>\n    <string name=\"yes\">Ja</string>\n    <string name=\"no\">Nej</string>\n    <string name=\"undo\">Fortryd</string>\n    <string name=\"unlock\">Lås op</string>\n    <string name=\"advanced\">Avanceret</string>\n    <string name=\"counter\">Tæller</string>\n    <string name=\"digits\">Cifre</string>\n    <string name=\"secret\">Hemmelighed</string>\n    <string name=\"scan\">Skan QR-kode</string>\n    <string name=\"scan_image\">Skan billede</string>\n    <string name=\"enter_manually\">Angiv manuelt</string>\n    <string name=\"set_up_biometric\">Konfigurer biometrisk oplåsning</string>\n    <string name=\"copy\">Kopier</string>\n    <string name=\"edit\">Rediger</string>\n    <string name=\"select_all\">Vælg alle</string>\n    <string name=\"assign_icons\">Tildel ikoner</string>\n    <string name=\"assign_groups\">Tildel til gruppe</string>\n    <string name=\"assign_groups_dialog_summary\">Vælg en gruppe, som de valgte poster ønskes tilknyttet.</string>\n    <string name=\"assign_groups_dialog_dropdown\">Vælg gruppe</string>\n    <string name=\"favorite\" comment=\"Verb\">Tilføj som favorit</string>\n    <string name=\"unfavorite\" comment=\"Verb\">Fjern som favorit</string>\n    <string name=\"error_all_caps\">FEJL</string>\n    <string name=\"password\">Adgangskode</string>\n    <string name=\"confirm_password\">Bekræft adgangskode</string>\n    <string name=\"show_password\">Vis adgangskode</string>\n    <string name=\"new_entry\">Ny post</string>\n    <string name=\"add_new_entry\">Tilføj ny post</string>\n    <string name=\"unlock_vault_error\">Kunne ikke oplåse Boksen</string>\n    <string name=\"unlock_vault_error_description\">Forkert adgangskode. Tjek, at der ikke er slåfejl i adgangskoden.</string>\n    <string name=\"password_equality_error\">Adgangskoder er obligatoriske og skal matche</string>\n    <string name=\"snackbar_authentication_method\">Vælg bekræftelsesmetode</string>\n    <string name=\"encrypting_vault\">Krypterer Boksen</string>\n    <string name=\"exporting_vault\">Eksporterer Boksen</string>\n    <string name=\"optimizing_icon\">Optimerer ikon</string>\n    <string name=\"optimizing_icon_multiple\">Optimerer ikoner %1$d/%2$d</string>\n    <string name=\"reading_file\">Læser fil</string>\n    <string name=\"requesting_root_access\">Anmoder om root-adgang</string>\n    <string name=\"analyzing_qr\">Analyserer QR-kode</string>\n    <string name=\"analyzing_qr_multiple\">Analyserer QR-kode %1$d/%2$d (%3$s)</string>\n    <plurals name=\"added_new_entries\">\n        <item quantity=\"one\">Tilføjede %d ny post til boksen</item>\n        <item quantity=\"other\">Tilføjede %d nye poster til boksen</item>\n    </plurals>\n    <string name=\"importing_icon_pack\">Importerer ikonpakke</string>\n    <string name=\"delete_entry\">Slet post</string>\n    <string name=\"delete_entry_description\">Sikker på, at denne post skal slettes?</string>\n    <string name=\"delete_entry_explanation\">Denne handling deaktiverer ikke 2FA for:\\n<b>%s</b>\\n\\nFor at bevare adgang, så tjek, at 2FA er deaktiveret, eller at en alternativ kodegenereringsmetode til denne tjeneste findes.</string>\n    <string name=\"delete_entries\">Slet poster</string>\n    <plurals name=\"delete_entries_description\">\n        <item quantity=\"one\">Sikker på, at %d post skal slettes?</item>\n        <item quantity=\"other\">Sikker på, at %d poster skal slettes?</item>\n    </plurals>\n    <string name=\"discard_changes\">Kassér ændringer?</string>\n    <string name=\"discard_changes_description\">Ændringer blev ikke gemt</string>\n    <string name=\"saving_profile_error\">Fejl under lagring af profil</string>\n    <string name=\"saving_assign_icons_error\">Fejl ved tildeling af ikoner</string>\n    <string name=\"welcome\">Velkommen</string>\n    <string name=\"app_description\">Aegis er en gratis, sikker og open-source 2FA-app</string>\n    <string name=\"setup_completed\">Opsætning fuldført</string>\n    <string name=\"setup_completed_description\">Aegis er blevet opsat og er klar til brug.</string>\n    <string name=\"vault_not_found\">Boks ikke fundet, starter opsætning…</string>\n    <string name=\"copied\">Kopieret</string>\n    <string name=\"errors_copied\">Fejl kopieret til udklipsholderen</string>\n    <string name=\"version_copied\">Version kopieret til udklipsholderen</string>\n    <string name=\"error_required_field\">Obligatorisk felt</string>\n    <string name=\"error_occurred\">En fejl opstod</string>\n    <string name=\"decryption_error\">En fejl opstod under forsøget på at oplåse Boksen</string>\n    <string name=\"decryption_corrupt_error\">En fejl opstod under forsøget på at oplåse Boksen. Boksfilen kan være beskadiget.</string>\n    <string name=\"saving_error\">En fejl opstod under forsøget på at gemme Boksen</string>\n    <string name=\"vault_init_error\">En fejl opstod under forsøget på at initialisere Boksen</string>\n    <string name=\"vault_load_error\">En fejl opstod under forsøget på at indlæse Boksen fra lager</string>\n    <string name=\"biometric_decrypt_error\">En fejl opstod under forsøget på at dekryptere Boksen via biometrisk godkendelse. Dette sker normalt kun, såfremt enhedens sikkerhedsindstillinger er blevet ændret. Oplås Boksen med adgangskoden, og genopsæt biometrisk godkendelse i Aegis-indstillingerne.</string>\n    <string name=\"biometric_init_error\">En fejl opstod under klargøring til biometrisk godkendelse. Dette sker normalt kun, såfremt enhedens sikkerhedsindstillinger er blevet ændret. Oplås Boksen med adgangskoden, og genopsæt biometrisk godkendelse i Aegis-indstillingerne.</string>\n    <string name=\"disable_encryption\">Deaktivér kryptering</string>\n    <string name=\"disable_encryption_description\">Sikker på, at kryptering skal deaktiveres? Boksen gemmes i så fald som alm. tekst. <b>Automatiske sikkerhedskopier deaktiveres ligeledes</b>.</string>\n    <string name=\"enable_encryption_error\">En fejl opstod under aktivering af kryptering</string>\n    <string name=\"disable_encryption_error\">En fejl opstod under deaktivering af kryptering</string>\n    <string name=\"backup_successful\">Sikkerhedskopieringen er hermed planlagt</string>\n    <string name=\"backup_error\">En fejl opstod under forsøget på at oprette en sikkerhedskopi</string>\n    <string name=\"backup_status_success\">Senest gennemførte sikkerhedskopiering: %s</string>\n    <string name=\"backup_status_failed\">Senest mislykket sikkerhedskopiering: %s</string>\n    <string name=\"backup_status_none\">Ingen sikkerhedskopier oprettet endnu</string>\n    <string name=\"backup_warning_password\">Sikkerhedskopier krypteres vha. en separat adgangskode opsat i Sikkerhedsindstillinger</string>\n    <string name=\"documentsui_error\">DokumenterUI synes at mangle fra din enhed. Dette er en vigtig systemkomponent, der er nødvendig for udvælgelse og oprettelse af dokumenter. Hvis du brugte et værktøj til &quot;rense&quot; din enhed, kan du ved et uheld have slettet den og bliver nødt til at geninstallere den.</string>\n    <string name=\"icon_pack_import_error\">En fejl opstod under forsøget på at importere en ikonpakke</string>\n    <string name=\"icon_pack_import_exists_error\">Ikonpakken, der forsøges importeret, findes allerede. Overskriv den?</string>\n    <string name=\"icon_pack_delete_error\">En fejl opstod under forsøget på at slette en ikonpakke</string>\n    <plurals name=\"icon_pack_info\">\n        <item quantity=\"one\">%d ikon</item>\n        <item quantity=\"other\">%d ikoner</item>\n    </plurals>\n    <string name=\"icon_custom\">Tilpasset</string>\n    <string name=\"permission_denied\">Tilladelse nægtet</string>\n    <string name=\"andotp_new_format\">Nyt format (v0.6.3 eller senere) </string>\n    <string name=\"andotp_old_format\">Gammelt format (v0.6.2 eller tidligere) </string>\n    <string name=\"choose_andotp_importer\">Hvilket format har andOTP-sikkerhedskopifilen?</string>\n    <string name=\"choose_totpauth_importer\">Er denne TOTP Authenticator-sikkerhedskopi krypteret med en adgangskode?</string>\n    <string name=\"choose_application\">Vælg den applikation, der skal importeres fra</string>\n    <string name=\"choose_theme\">Vælg ønskede tema</string>\n    <string name=\"choose_account_name_position\">Vælg ønskede placering af kontonavn</string>\n    <string name=\"choose_view_mode\">Vælg ønskede visningstilstand</string>\n    <string name=\"choose_copy_behavior\">Vælg ønskede kopieringsadfærd</string>\n    <string name=\"parsing_file_error\">En fejl opstod under forsøget på at fortolke filen</string>\n    <string name=\"file_not_found\">Fejl: Fil ikke fundet</string>\n    <string name=\"reading_file_error\">En fejl opstod under forsøg på at læse filen</string>\n    <string name=\"app_lookup_error\">Fejl: App er ikke installeret</string>\n    <string name=\"app_version_error\">Den installerede version af %s understøttes ikke. Nyere versioner er begyndt at kryptere visse filer i den interne lagermappe, hvilket gør Aegis ude af stand til at tilgå den information, den behøver til importen. Forsøg på import vil sandsynligvis resultere i en fejl. Fortsæt alligevel?</string>\n    <string name=\"root_error\">Fejl: Kan ikke opnå root-adgang</string>\n    <plurals name=\"imported_entries_count\">\n        <item quantity=\"one\">Importerede %d post</item>\n        <item quantity=\"other\">Importerede %d poster</item>\n    </plurals>\n    <plurals name=\"entries_shown\">\n        <item quantity=\"one\">Viser %d post</item>\n        <item quantity=\"other\">Viser %d poster</item>\n    </plurals>\n    <string name=\"intro_import_error_title\">En fejl opstod under import af Boksen</string>\n    <string name=\"import_error_title\">En eller flere fejl opstod under import</string>\n    <string name=\"exporting_vault_error\">En fejl opstod under forsøget på at eksportere Boksen</string>\n    <string name=\"exported_vault\">Boksen er eksporteret</string>\n    <string name=\"encryption_set_password_error\">En fejl opstod under indstilling af adgangskoden.</string>\n    <string name=\"encryption_enable_biometrics_error\">En fejl opstod under aktivering af biometrisk oplåsning. Nogle enheder har dårlige implementeringer af biometrisk godkendelse, hvilket sandsynligvis er fejlårsagen. Overvej i stedet at skifte til en kun-adgangskode opsætning.</string>\n    <string name=\"no_cameras_available\">Ingen kameraer tilgængelige</string>\n    <string name=\"read_qr_error\">En fejl opstod under læsning af QR-koden</string>\n    <string name=\"read_qr_error_phonefactor\">Aegis er inkompatibel med Microsofts proprietære 2FA-algoritme. Sørg for at vælge \\\"Opsæt applikation uden notifikationer\\\", når 2FA opsættes i Office 365.</string>\n    <string name=\"partial_google_auth_import\">Ufuldstændig Google Authenticator-eksport detekteret</string>\n    <string name=\"partial_google_auth_import_warning\">Nogle QR-koder mangler i importen. Flg. koder er ikke fundet:\\n\\n<b>%s</b>\\n\\nMan kan fortsætte med import af denne delvise eksport, dog anbefales det at prøve igen med alle QR-koderne, så man ikke risikerer at miste adgang til nogle tokens.</string>\n    <string name=\"missing_qr_code_descriptor\">• QR-kode %d</string>\n    <plurals name=\"import_partial_export_anyway\">\n        <item quantity=\"one\">Importér %d token alligevel</item>\n        <item quantity=\"other\">Importér %d tokener alligevel</item>\n    </plurals>\n    <string name=\"import_google_auth_failure\">Import af Google Authenticator-eksport mislykkedes</string>\n    <string name=\"unrelated_google_auth_batches_error\">Eksporten indeholder information om et urelateret sæt. Prøv at importere 1 sæt ad gangen.</string>\n    <string name=\"no_tokens_can_be_imported\">Som konsekvens, kan ingen tokener importeres</string>\n    <string name=\"unlocking_vault\">Låser boksen op</string>\n    <string name=\"rename_group\">Omdøb gruppe</string>\n    <string name=\"no_group_selection\">Er en post ikke en del af en gruppe, kan den findes under \\\"Ingen gruppe\\\".</string>\n    <string name=\"remove_group\">Fjern gruppe</string>\n    <string name=\"remove_group_description\">Sikker på, at denne gruppe skal fjernes? Poster heri vil automatisk skifte til \\'Ingen gruppe\\'.</string>\n    <string name=\"remove_unused_groups\">Slet ubrugte grupper</string>\n    <string name=\"remove_unused_groups_description\">Sikker på, at alle grupper uden en posttilknytning skal slettes?</string>\n    <string name=\"remove_icon_pack\">Fjern ikonpakke</string>\n    <string name=\"remove_icon_pack_description\">Sikker på, at du vil fjerne denne ikonpakke? Poster, som bruger ikoner fra denne pakke, påvirkes ikke.</string>\n    <string name=\"details\">Detaljer</string>\n    <string name=\"show_error_details\">Vis fejloplysninger</string>\n    <string name=\"lock\">Lås</string>\n    <string name=\"name\">Navn</string>\n    <string name=\"no_group\">Ingen gruppe</string>\n    <string name=\"sort\" comment=\"Title of the Sort button in the top action bar of the main view\">Sortér</string>\n    <string name=\"sort_alphabetically\">Udsteder (A til Z)</string>\n    <string name=\"sort_alphabetically_reverse\">Udsteder (Z til A)</string>\n    <string name=\"sort_alphabetically_name\">Konto (A til Z)</string>\n    <string name=\"sort_alphabetically_name_reverse\">Konto (Z til A)</string>\n    <string name=\"sort_usage_count\">Brugstælling</string>\n    <string name=\"sort_last_used\">Senest brugt</string>\n    <string name=\"sort_custom\">Tilpasset</string>\n    <string name=\"last_used\">Senest brugt</string>\n    <string name=\"last_used_never\">aldrig</string>\n    <string name=\"new_group\">Ny gruppe…</string>\n    <string name=\"group\">Gruppe</string>\n    <string name=\"group_name_hint\">Gruppenavn</string>\n    <string name=\"preference_manage_groups\">Redigér grupper</string>\n    <string name=\"preference_manage_groups_summary\">Håndtér og slet grupper her</string>\n    <string name=\"preference_reset_usage_count\">Nulstil brugstæller</string>\n    <string name=\"preference_reset_usage_count_summary\">Nulstil alle brugstællingsposter i din Boks</string>\n    <string name=\"preference_reset_usage_count_dialog\">Sikker på, at alle brugstællingsposter i din Boks skal nulstilles?</string>\n    <string name=\"note\" comment=\"Users can add a note to an entry\">Notat</string>\n    <string name=\"clear\">Ryd</string>\n    <string name=\"dialog_duplicate_entry_title\" comment=\"'Duplicate' is a noun here\">Dubletpost</string>\n    <string name=\"dialog_duplicate_entry_message\">Denne post har samme navn og udsteder som mindst én eksisterende post. Hvordan skal der fortsættes?</string>\n    <string name=\"dialog_duplicate_entry_overwrite_title\">Overskriv eksisterende post(er)</string>\n    <string name=\"dialog_duplicate_entry_overwrite_subtitle\">Erstat eksisterende post(er) med den nye. Denne handling kan ikke fortrydes</string>\n    <string name=\"dialog_duplicate_entry_suffix_title\">Tilføj endelse</string>\n    <string name=\"dialog_duplicate_entry_suffix_subtitle\">Føj en endelse til navnet på denne nye post. Det nye navn vil være: %s</string>\n    <string name=\"dialog_duplicate_entry_cancel_title\">Afbryd gem</string>\n    <string name=\"dialog_duplicate_entry_cancel_subtitle\">Muliggør at redigere posten inden den igen forsøges gemt</string>\n    <plurals name=\"dialog_duplicate_entry_overwrite_dialog_message\">\n        <item quantity=\"one\">Sikker på, at der skal slettes %d post med flg. navn:\\n\\n%s - %s</item>\n        <item quantity=\"other\">Sikker på, at der skal slettes %d poster med flg. navn:\\n\\n%s - %s</item>\n    </plurals>\n    <string name=\"dialog_duplicate_entry_overwrite_dialog_title\">Bekræft sletning</string>\n    <string name=\"pref_haptic_feedback_summary\">Få enheden til at vibrere, når koder opdateres</string>\n    <string name=\"pref_haptic_feedback_title\">Haptisk feedback</string>\n    <string name=\"pref_highlight_entry_title\">Fremhæv tokener ved tryk</string>\n    <string name=\"pref_highlight_entry_summary\">Gør tokener lettere at skelne fra hinanden ved midlertidigt at fremhæve dem, når der trykkes på dem</string>\n    <string name=\"pref_groups_multiselect_title\">Multivalg af grupper</string>\n    <string name=\"pref_groups_multiselect_summary\">Muliggør valg af flere grupper samtidig</string>\n    <string name=\"pref_minimize_on_copy_title\">Minimér under kopiering</string>\n    <string name=\"pref_minimize_on_copy_summary\">Minimér appen efter kopiering af et token</string>\n    <string name=\"pref_copy_behavior_title\">Kopiér tokener til udklipsholder</string>\n    <string name=\"pref_search_behavior_title\">Søgeadfærd</string>\n    <string name=\"pref_pause_entry_title\">Frys tokener ved tryk</string>\n    <string name=\"pref_pause_entry_summary\">Pausér automatisk opdatering af tokener ved at trykke på dem. Tokener opdateres ikke, så længe de er fokuseret. Kræver \\\"Fremhæv tokener ved tryk\\\" eller \\\"Tryk for at vise\\\".</string>\n    <string name=\"pin_keyboard_description\">Angiv adgangskoden for at aktivere PIN-tastaturet. Bemærk, at dette kun virker, såfremt adgangskoden alene består af cifre</string>\n    <string name=\"pin_keyboard_error\">Fejl under aktivering af PIN-tastatur</string>\n    <string name=\"pin_keyboard_error_description\">Det er ikke muligt at angive PIN-tastatur. Adgangskoden må kun bestå af cifre.</string>\n    <string name=\"pin_keyboard_disabled\">Adgangskoden ændret. PIN-tastaturet vises ikke længere.</string>\n    <string name=\"selected\">Valgt</string>\n    <string name=\"dark_theme_title\">Mørkt tema</string>\n    <string name=\"light_theme_title\">Lyst tema</string>\n    <string name=\"amoled_theme_title\">AMOLED-tema</string>\n    <string name=\"system_theme_title\">Indstillet af batterisparefunktion</string>\n    <string name=\"system_amoled_theme_title\">Indstillet af batterisparefunktion (AMOLED)</string>\n    <string name=\"normal_viewmode_title\">Normal</string>\n    <string name=\"compact_mode_title\">Kompakt</string>\n    <string name=\"small_mode_title\">Lille</string>\n    <string name=\"tiles_mode_title\">Fliser</string>\n    <string name=\"unknown_issuer\">Ukendt udsteder</string>\n    <string name=\"unknown_account_name\">Ukendt kontonavn</string>\n    <plurals name=\"import_error_dialog\">\n        <item quantity=\"one\">Aegis kunne ikke importere %d token. Denne token vil blive sprunget over. Tryk på \\'detaljer\\' for at se flere oplysninger om fejlen.</item>\n        <item quantity=\"other\">Aegis kunne ikke importere %d tokens. Disse tokens vil blive sprunget over. Tryk på \\'detaljer\\' for at se flere oplysninger om fejlen.</item>\n    </plurals>\n    <string name=\"unable_to_process_deeplink\">Dybt link kan ikke behandles</string>\n    <string name=\"unable_to_read_qrcode_file\">Kan ikke læse og behandle QR-koden fra filen: %s.</string>\n    <string name=\"unable_to_process_shared_text\">Kan ikke behandle delt tekst som OTP</string>\n    <string name=\"unable_to_read_qrcode_files\">Kan ikke læse og behandle nogle af QR-koderne. Kun %1$d/%2$d poster importeres.</string>\n    <string name=\"unable_to_generate_qrcode\">Kan ikke generere QR-kode</string>\n    <string name=\"select_picture\">Vælg billede</string>\n    <string name=\"select_icon\">Vælg ikon</string>\n    <string name=\"tile_open_vault\" comment=\"label for a quick settings tile that opens the app when tapped\">Åbn boks</string>\n    <string name=\"tile_open_scanner\" comment=\"label for a quick settings tile that opens the QR code scanner when tapped\">Åbn skanner</string>\n    <string name=\"toggle_checkboxes\">Skift afkrydsningsfelter</string>\n    <string name=\"search\">Søg</string>\n    <string name=\"channel_name_lock_status\">Låsestatus</string>\n    <string name=\"channel_description_lock_status\">Aegis kan oprette en vedvarende notifikation for at give dig besked, når boksen er låst</string>\n    <string name=\"vault_unlocked_state\">Boksen er låst op. Tryk her for at låse.</string>\n    <string name=\"version\">Version</string>\n    <string name=\"changelog\">Ændringslog</string>\n    <string name=\"whats_new\">Nyheder</string>\n    <string name=\"github_description\">Kildekode, problematikker og information</string>\n    <string name=\"license\">Licens</string>\n    <string name=\"license_description\">Aegis Authenticator er licenseret under GPLv3</string>\n    <string name=\"third_party_licenses\">Tredjepartslicenser</string>\n    <string name=\"third_party_licenses_description\">Licenser fra tredjepartsbibliotekerne Aegis bruger</string>\n    <string name=\"country_netherlands\">Nederlandene</string>\n    <string name=\"email_us\">Skriv en e-mail</string>\n    <string name=\"visit_website\">Besøg vores websted</string>\n    <string name=\"about_support\">Support</string>\n    <string name=\"support_rate\">Bedøm</string>\n    <string name=\"support_rate_description\">Støt os ved at skrive en anmeldelse i Google Play Store</string>\n    <string name=\"webview_error\">Denne enhed understøtter ikke webvisning, hvilket kræves for at vise ændringslog og licens. En systemkomponent mangler.</string>\n    <string name=\"email\">E-mail</string>\n    <string name=\"time_sync_warning_title\">Automatisk tidssynkronisering</string>\n    <string name=\"time_sync_warning_message\">Aegis er afhængig af systemtiden for at være i synk til generering af korrekte koder. En afvigelse på kun et par sekunder kan resultere i forkerte koder. Det ser ud til, at enheden ikke er opsat til auto-synk af tid. Opsæt dette nu?</string>\n    <string name=\"time_sync_warning_disable\">Ophør med at advare mig. Jeg ved, hvad jeg gør.</string>\n    <string name=\"google_qr_export_unrelated\">Ikke-relateret QR-kode fundet. Prøv at genstarte skanneren.</string>\n    <plurals name=\"google_qr_export_scanned\">\n        <item quantity=\"one\">Skannede %1$d/%2$d QR-koder</item>\n        <item quantity=\"other\">Skannede %1$d/%2$d QR-koder</item>\n    </plurals>\n    <string name=\"google_qr_export_unexpected\">Forventede QR-koden #%1$d, men skannede #%2$d i stedet</string>\n    <string name=\"backup_error_bar_message\"><b>Bokssikkerhedskopiering mislykkedes for nylig</b></string>\n    <string name=\"backup_error_dialog_details\" comment=\"The first parameter is the type of backup (e.g. built-in or Android backup). The second parameter is an elapsed time in the style of 'x seconds/minutes/days ago'.\">        Et nyligt Boks-sikkerhedskopieringsforsøg vha. %1$s mislykkedes grundet en fejl. Sikkerhedskopieringen blev forsøgt: %2$s. Tjek sikkerhedskopieringsindstillingerne for at sikre, at sikkerhedskopieringer kan fuldføres.\n    </string>\n    <string name=\"backup_permission_error_dialog_details\" comment=\"The first parameter is the type of backup (e.g. built-in or Android backup). The second parameter is an elapsed time in the style of 'x seconds/minutes/days ago'.\">        Et nyligt Boks-sikkerhedskopieringsforsøg vha. %1$s fejlede, da Aegis manglende skriverettighed på sikkerhedskopidestinationen. Sikkerhedskopieringen forsøgt %2$s. Fejlen kan opstå, hvis sikkerhedskopidestinationen er blevet flyttet/omdøbt, eller Aegis for nylig er gendannet fra en sikkerhedskopi. Genopsæt sikkerhedskopidestinationen.\n    </string>\n    <string name=\"backup_system_builtin\">Aegis\\' indbyggede automatiske sikkerhedskopieringer</string>\n    <string name=\"backup_system_android\">Android cloud-sikkerhedskopieringssystem</string>\n    <string name=\"backup_reminder_bar_message_with_latest\" comment=\"The parameter is an elapsed time in the style of 'x seconds/minutes/days ago'\">        Seneste sikkerhedskopi er forældet (%s)\n    </string>\n    <string name=\"backup_reminder_bar_message\">        Ændringer er ikke sikkerhedskopieret\n    </string>\n    <string name=\"backup_reminder_bar_dialog_title\">Ændringer er ikke sikkerhedskopieret</string>\n    <string name=\"backup_reminder_bar_dialog_summary\">        Nylige ændringer i Boksen er endnu ikke sikkerhedskopieret. Regelmæssig sikkerhedskopiering er vigtig for at undgå at miste adgang til konti. Overvej opsætning af automatisk sikkerhedskopiering i indstillingsmenuen.\n    </string>\n    <string name=\"backup_reminder_bar_dialog_accept\">Opsæt sikkerhedskopiering</string>\n    <string name=\"backup_plaintext_export_warning\"><b>Boksen blev for nylig eksporteret som alm. tekst</b></string>\n    <string name=\"pref_show_plaintext_warning_hint\">Vis ikke denne advarsel igen</string>\n    <string name=\"backup_plaintext_warning_explanation\">Denne advarsel vises, da en ukrypteret kopi af Boksen for nyligt er eksporteret. For at opretholde sikkerheden for tokener, anbefales det at slette denne fil, når den ikke længere behøves.</string>\n    <string name=\"switch_camera\">Skift kamera</string>\n    <string name=\"empty_list\">Der er ingen koder at vise. Begynd at tilføje poster ved at trykke på plus-tegnet i nederste højre hjørne</string>\n    <string name=\"empty_list_title\">Ingen poster fundet</string>\n    <string name=\"empty_group_list\">Der er ingen grupper at vise. Tilføj grupper på redigeringsskærmen for en post</string>\n    <string name=\"empty_group_list_title\">Ingen grupper fundet</string>\n    <string name=\"no_icon_packs\">Ingen ikonpakker importeret endnu. Tryk på plus-tegnet for at importere en. Tip: Prøv <a href=\"https://aegis-icons.github.io\">aegis-ikoner</a>.</string>\n    <string name=\"no_icon_packs_title\">Ingen ikonpakker</string>\n    <string name=\"pick_icon\">Vælg et ikon</string>\n    <string name=\"uncategorized\">Ukategoriseret</string>\n    <string name=\"done\">Færdig</string>\n    <plurals name=\"qr_count\">\n        <item quantity=\"one\">%d/%d QR-kode</item>\n        <item quantity=\"other\">%d/%d QR-koder</item>\n    </plurals>\n    <string name=\"next\">Næste</string>\n    <string name=\"previous\">Forrige</string>\n    <string name=\"copy_uri\">Kopiér URI</string>\n    <string name=\"unable_to_copy_uri_to_clipboard\">Kunne ikke kopiere URI til udklipsholder</string>\n    <string name=\"uri_copied_to_clipboard\">URI kopieret til udklipsholder</string>\n    <string name=\"transfer_entry_description\">Scan denne QR-kode med den autentificerings-app, du gerne vil overføre denne post til</string>\n    <string name=\"transfer_entry_brightness\">Tryk på QR-koden for at skifte fuldskærmslysstyrke</string>\n    <string name=\"google_auth_compatible_transfer_description\">Skan disse QR-koder med Aegis eller Google Authenticator.\\n\\nGrundet begrænsninger i Google Authenticator-appen inkluderes kun TOTP- og HOTP-tokener, som bruger SHA1 og genererer 6-cifrede koder</string>\n    <string name=\"password_strength_very_weak\">Meget svag</string>\n    <string name=\"password_strength_weak\">Svag</string>\n    <string name=\"password_strength_fair\">Hæderlig</string>\n    <string name=\"password_strength_good\">God</string>\n    <string name=\"password_strength_strong\">Stærk</string>\n    <string name=\"password_strength_unknown\">Adgangskode for lang til styrkeanalyse</string>\n    <string name=\"pref_pin_keyboard_title\">Benyt pintastatur på låseskærm</string>\n    <string name=\"pref_pin_keyboard_summary\">Aktiver dette, hvis du vil aktivere pinkode-tastaturet på låseskærmen. Dette virker kun for numeriske adgangskoder</string>\n    <string name=\"title_activity_preferences\">Indstillinger</string>\n    <string name=\"title_activity_manage_groups\">Administrer grupper</string>\n    <string name=\"title_activity_transfer\">Overfør poster</string>\n    <string name=\"title_activity_about\">Om</string>\n    <string name=\"title_activity_edit_entry\">Redigér post</string>\n    <string name=\"title_activity_scan_qr\">Scan en QR-kode</string>\n    <string name=\"title_activity_import_entries\">Importer poster</string>\n    <string name=\"title_activity_assign_icons\">Tildel ikoner</string>\n    <string name=\"title_activity_licenses\">Tredjepartslicenser</string>\n    <string name=\"dialog_wipe_entries_title\">Ryd poster</string>\n    <string name=\"dialog_wipe_entries_message\">Din boks indeholder allerede poster. Vil du fjerne disse poster før import af denne fil?\\n\\n<b>Ved at gøre dette, vil du permanent miste adgang til de eksisterende poster i boksen.</b></string>\n    <string name=\"dialog_wipe_entries_checkbox\">Ryd boksens indhold</string>\n    <string name=\"import_from_clipboard_title\">Importér fra udklipsholder</string>\n    <string name=\"import_from_clipboard_message\">En gyldig otpauth URI er fundet i udklipsholderen.\\n\\n<b>Navn</b>: %1$s\\n<b>Udsteder</b>: %2$s\\n\\nSkal den bruges til forudfyldelse af dette indlæg?</string>\n    <string name=\"panic_trigger_ignore_toast\">Aegis modtog panikudløser, men indstilling er deaktiveret, ignorerer</string>\n    <string name=\"pref_panic_trigger_title\">Slet boks ved panikudløser</string>\n    <string name=\"pref_panic_trigger_summary\">Slet boks, når en panikudløser modtages fra Ripple</string>\n    <string name=\"import_vault\">Importér Aegis-boks</string>\n    <string name=\"import_vault_hint\">Ønsker du at importere fra en anden 2FA-app? Færdiggør opsætningen først, og gå derefter til indstillingsmenuen.</string>\n    <plurals name=\"import_duplicate_toast\">\n        <item quantity=\"one\">Afmarkerede %d potentiel dublet. Revidér listen over poster.</item>\n        <item quantity=\"other\">Afmarkererede %d potentielle dubletter. Revidér listen over poster.</item>\n    </plurals>\n    <string name=\"importer_help_2fas\">Stil en 2FAS-godkendelse sikkerhedskopifil til rådighed.</string>\n    <string name=\"importer_help_aegis\">Levér en Aegis eksport/backup fil.</string>\n    <string name=\"importer_help_authenticator_plus\">Levér en Authenticator Plus-eksportfil opnået gennem <b>Indstillinger -&gt; Sikkerhedskopi &amp; Gendan -&gt; Eksport som tekst og HTML</b>.</string>\n    <string name=\"importer_help_authy\">Levér en kopi af <b>/data/data/com.authy.authy/shared_prefs/com.authy.storage.tokens.authenticator.xml</b>, der er placeret i den interne lagermappe i Authy.</string>\n    <string name=\"importer_help_andotp\">Levér en andOTP eksport/backup fil.</string>\n    <string name=\"importer_help_bitwarden\">Vælg en Bitwarden-eksport-/sikkerhedskopifil. Krypterede filer understøttes ikke.</string>\n    <string name=\"importer_help_battle_net_authenticator\">Levér en kopi af <b>/data/data/com.blizzard.messenger/shared_prefs/com.blizzard.messenger.authenticator_preferences.xml</b>, der er placeret i den interne lagermappe i Battle.net Authenticator.</string>\n    <string name=\"importer_help_duo\">Skaf en kopi af <b>/data/data/com.duosecurity.duomobile/files/duokit/accounts.json</b> fra DUOs interne lagermappe.</string>\n    <string name=\"importer_help_ente_auth\">Angiv en Ente Auth-eksportfil. Kun ukrypterede filer understøttes p.t.</string>\n    <string name=\"importer_help_freeotp\">FreeOTP 2: Levér en sikkerhedskopifil.\\nFreeOTP 1.x: Levér en kopi af <b>/data/data/org.fedorahosted.freeotp/shared_prefs/tokens.xml</b> fra FreeOTP\\' interne lagermappe.</string>\n    <string name=\"importer_help_freeotp_plus\">Levér en FreeOTP+ eksportfil.</string>\n    <string name=\"importer_warning_title_freeotp2\">FreeOTP 2-kompatibilitet</string>\n    <string name=\"importer_warning_message_freeotp2\">Der er en række problemer i FreeOTP 2, som kan resultere i korruperede sikkerhedskopier. Aegis vil forsøge at redde så mange poster som muligt, men det er muligt, at nogle eller endda alle af dem ikke lader sig importere.</string>\n    <string name=\"importer_help_google_authenticator\"><b>Kun databasefiler fra Google Authenticator v5.10 og tidligere understøttes</b>.\\n\\nLeverer en kopi af <b>/data/data/com. google.android.apps.authenticator2/databaser/databaser</b>, placeret i Google Authenticators interne lagermappe.</string>\n    <string name=\"importer_help_microsoft_authenticator\">Levér en kopi af <b>/data/data/com.azure.authenticator/databases/PhoneFactor</b>, der er placeret i den interne lagermappe i Microsoft Authenticator.</string>\n    <string name=\"importer_help_plain_text\">Levér en almindelig tekstfil med en Google Authenticator URI på hver linje.</string>\n    <string name=\"importer_help_proton_authenticator\">Benyt en Proton Authenticator-eksportfil (.json) dannet via <b>Indstillinger -&gt; Eksport</b>.</string>\n    <string name=\"importer_help_steam\"><b>Steam v3.0 og nyere understøttes ikke</b>. Levér en kopi af <b>/data/data/com.valvesoftware.android.steam.community/files/Steamguard-*.json</b> fra den interne lagermappe i Steam.</string>\n    <string name=\"importer_help_stratum\">Benyt en Stratum-eksportfil genereret via <b>Indstillinger -&gt; Sikkerhedskopiering -&gt; Sikkerhedskopiering til krypteret fil (anbefalet)</b>.</string>\n    <string name=\"importer_help_totp_authenticator\">Levér en TOTP Authenticator eksportfil.</string>\n    <string name=\"importer_help_winauth\">Levér en WinAuth eksportfil.</string>\n    <string name=\"import_assign_icons_dialog_title\">Tildel ikoner</string>\n    <string name=\"import_assign_icons_dialog_text\">Tildel ikoner til importerede poster?</string>\n    <string name=\"importer_encrypted_exception_google_authenticator\">Krypteret post blev oversprunget: %s</string>\n    <string name=\"importer_help_direct\">Importer poster direkte fra %s. Dette kræver at appen er installeret på denne enhed og at root-adgang gives til Aegis.</string>\n    <string name=\"groups\">Grupper</string>\n    <string name=\"pref_focus_search\">Fokusér på søgning ved app-start</string>\n    <string name=\"pref_focus_search_summary\">Bring søgningen i fokus straks efter åbning af appen.</string>\n    <string name=\"pref_grouping_halves\">Halve</string>\n    <string name=\"pref_grouping_none\">Ingen gruppering</string>\n    <string name=\"pref_grouping_size_two\">Grupper af 2</string>\n    <string name=\"pref_grouping_size_three\">Grupper af 3</string>\n    <string name=\"pref_grouping_size_four\">Grupper af 4</string>\n    <string name=\"pref_copy_behavior_never\">Aldrig</string>\n    <string name=\"pref_copy_behavior_single_tap\">Enkelt tryk</string>\n    <string name=\"pref_copy_behavior_double_tap\">Dobbelttryk</string>\n    <string name=\"pref_account_name_position_hidden\">Skjult</string>\n    <string name=\"pref_account_name_position_end\">Ved siden af udstederen</string>\n    <string name=\"pref_account_name_position_below\">Under udstederen</string>\n    <plurals name=\"time_elapsed_seconds\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"one\">%d sekund siden</item>\n        <item quantity=\"other\">%d sekunder siden</item>\n    </plurals>\n    <plurals name=\"time_elapsed_minutes\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"one\">%d minut siden</item>\n        <item quantity=\"other\">%d minutter siden</item>\n    </plurals>\n    <plurals name=\"time_elapsed_hours\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"one\">%d time siden</item>\n        <item quantity=\"other\">%d timer siden</item>\n    </plurals>\n    <plurals name=\"time_elapsed_days\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"one\">%d dag siden</item>\n        <item quantity=\"other\">%d dage siden</item>\n    </plurals>\n    <plurals name=\"time_elapsed_years\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"one\">%d år siden</item>\n        <item quantity=\"other\">%d år siden</item>\n    </plurals>\n    <plurals name=\"dropdown_checkboxes_default_count\">\n        <item quantity=\"one\">%d element valgt</item>\n        <item quantity=\"other\">%d elementer valgt</item>\n    </plurals>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-da-rDK-v29/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"system_theme_title\">Systemstandard</string>\n    <string name=\"system_amoled_theme_title\">Systemstandard (AMOLED)</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-de-rDE/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources xmlns:tools=\"http://schemas.android.com/tools\">\n    <string name=\"action_settings\">Einstellungen</string>\n    <string name=\"action_about\">Über</string>\n    <string name=\"action_delete\">Löschen</string>\n    <string name=\"action_transfer\">Übertragen</string>\n    <string name=\"action_edit_icon\">Symbol bearbeiten</string>\n    <string name=\"action_reset_usage_count\">Verwendungszähler zurücksetzen</string>\n    <string name=\"action_reset_usage_count_dialog\">Den Verwendungszähler dieses Eintrags auf 0 setzen?</string>\n    <string name=\"action_default_icon\">Standardsymbol wiederherstellen</string>\n    <string name=\"discard\">Verwerfen</string>\n    <string name=\"save\">Speichern</string>\n    <string name=\"all\">Alle</string>\n    <string name=\"issuer\">Herausgeber</string>\n    <string name=\"yandex_pin\">PIN (4–16 Ziffern)</string>\n    <string name=\"motp_pin\">PIN (4 Ziffern)</string>\n    <string name=\"suggested\">Empfohlen</string>\n    <string name=\"usage_count\">Verwendungszähler</string>\n    <string name=\"warning\">Warnung</string>\n    <string name=\"pref_cat_appearance_app\">App</string>\n    <string name=\"pref_cat_appearance_entries\">Einträge</string>\n    <string name=\"pref_cat_backups_android\">Android</string>\n    <string name=\"pref_cat_backups_auto\">Automatische Sicherungen</string>\n    <string name=\"pref_section_behavior_title\">Verhalten</string>\n    <string name=\"pref_section_behavior_summary\">Das Verhalten bei der Interaktion mit der Eintragsliste anpassen.</string>\n    <string name=\"pref_section_appearance_title\">Erscheinungsbild</string>\n    <string name=\"pref_section_appearance_summary\">Das Design, die Sprache und andere Einstellungen anpassen, die das Erscheinungsbild der App betreffen.</string>\n    <string name=\"pref_section_security_title\">Sicherheit</string>\n    <string name=\"pref_section_security_summary\">Verschlüsselung, biometrisches Entsperren, automatisches Sperren und andere Sicherheitseinstellungen konfigurieren.</string>\n    <string name=\"pref_section_import_export_title\">Importieren und exportieren</string>\n    <string name=\"pref_section_import_export_summary\">Sicherungskopien von Aegis oder anderen Authentifizierungs-Apps importieren und Exportdateien der Aegis-Datenbank erstellen.</string>\n    <string name=\"pref_section_audit_log_title\">Auditprotokoll</string>\n    <string name=\"pref_section_audit_log_summary\">Liste aller wichtigen Ereignisse, die innerhalb der App registriert wurden.</string>\n    <string name=\"pref_section_backups_title\">Sicherungen</string>\n    <string name=\"pref_section_backups_summary\">Automatische Sicherungen zu einem gewünschten Speicherort einrichten oder das Android-eigene Cloud-Sicherungssystem aktivieren.</string>\n    <string name=\"pref_section_icon_packs\">Symbolpakete</string>\n    <string name=\"pref_section_icon_packs_summary\">Symbolpakete verwalten und importieren.</string>\n    <string name=\"pref_select_theme_title\">Design</string>\n    <string name=\"pref_dynamic_colors_title\">Dynamische Farben</string>\n    <string name=\"pref_dynamic_colors_summary\">Design basierend auf den Systemfarben anpassen</string>\n    <string name=\"pref_view_mode_title\">Darstellungsstil</string>\n    <string name=\"pref_lang_title\">Sprache</string>\n    <string name=\"pref_show_icons_title\">Symbole anzeigen</string>\n    <string name=\"pref_show_icons_summary\">Symbole neben jedem Eintrag anzeigen</string>\n    <string name=\"pref_code_group_size_title\">Zifferngruppierung</string>\n    <string name=\"pref_code_group_size_summary\">Anzahl der Ziffern für das Gruppieren von Codes festlegen</string>\n    <string name=\"pref_account_name_position_title\">Kontonamen anzeigen</string>\n    <string name=\"pref_show_next_code_title\">Nächsten Code anzeigen</string>\n    <string name=\"pref_show_next_code_summary\">Den nächsten Code im Voraus generieren und anzeigen</string>\n    <string name=\"pref_expiration_state_title\">Ablaufende Codes kennzeichnen</string>\n    <string name=\"pref_expiration_state_summary\">Ablaufende Codes mit einer anderen Farbe darstellen und blinken lassen</string>\n    <string name=\"pref_expiration_state_fallback\">Ablaufende Codes mit einer anderen Farbe darstellen</string>\n    <string name=\"pref_shared_issuer_account_name_title\">Kontonamen nur bei Bedarf anzeigen</string>\n    <string name=\"pref_shared_issuer_account_name_summary\">Kontonamen nur anzeigen, wenn sie denselben Herausgeber haben. Andere Kontonamen werden ausgeblendet.</string>\n    <string name=\"pref_account_name_position_summary_override\">Diese Einstellung wird durch die Kachelansicht überschrieben. Der Kontoname wird unterhalb des Herausgebers angezeigt.</string>\n    <string name=\"pref_import_file_title\">Aus Datei importieren</string>\n    <string name=\"pref_import_file_summary\">Token aus einer Datei importieren</string>\n    <string name=\"pref_android_backups_title\">Cloud-Sicherungen von Android</string>\n    <string name=\"pref_android_backups_summary\">Dem Cloud-Sicherungssystem von Android erlauben, die Datenbank von Aegis in die Sicherungen aufzunehmen. Das wird nur für verschlüsselte Datenbanken unterstützt.</string>\n    <string name=\"pref_android_backups_hint\"><i>Gerät-zu-Gerät-Sicherungen (D2D) sind immer erlaubt – unabhängig von der obigen Einstellung</i></string>\n    <string name=\"pref_backups_title\">Datenbank automatisch sichern</string>\n    <string name=\"pref_backups_summary\">Sicherungskopie der Datenbank automatisch bei Änderungen auf externem Speicher erstellen. Nur für verschlüsselte Datenbanken unterstützt.</string>\n    <string name=\"pref_backups_reminder_title\">Erinnerung für Sicherungen</string>\n    <string name=\"pref_backups_reminder_summary\">Erinnerung zur Sicherung der Datenbank anzeigen, falls die letzten Änderungen nicht gesichert wurden.</string>\n    <string name=\"pref_backups_reminder_dialog_title\">Erinnerung für Sicherungen deaktivieren</string>\n    <string name=\"pref_backups_reminder_dialog_summary\">Das Deaktivieren dieser Erinnerung bedeutet, dass Aegis nicht mitteilt, ob Änderungen vorgenommen wurden, die noch nicht gesichert sind. Dadurch besteht die Gefahr, dass der Zugriff auf deine Token verloren geht. Möchtest du die Erinnerung wirklich deaktivieren?</string>\n    <string name=\"pref_backups_versioning_strategy_title\">Sicherungsstrategie</string>\n    <string name=\"pref_backups_versioning_strategy_keep_x_versions\">Bestimmte Anzahl an Sicherungen behalten</string>\n    <string name=\"pref_backups_versioning_strategy_single_backup\">Einzelne Sicherung</string>\n    <string name=\"pref_backups_versioning_strategy_single_backup_warning\">Die ausgewählte Sicherungsstrategie ist unzuverlässig und wird nicht empfohlen. Eine einzelne, fehlerhafte Sicherung könnte zum vollständigen Verlust führen.</string>\n    <string name=\"pref_backups_versioning_strategy_dialog_title\">Eine Sicherungsstrategie auswählen</string>\n    <string name=\"pref_backups_location_title\">Speicherort für die Sicherungskopie</string>\n    <string name=\"pref_backups_location_summary\">Sicherungskopien werden gespeichert in</string>\n    <string name=\"pref_backup_location_summary\">Sicherungskopie wird gespeichert in</string>\n    <string name=\"pref_backups_trigger_title\">Sicherung auslösen</string>\n    <string name=\"pref_backups_trigger_summary\">Manuell eine Sicherung auslösen</string>\n    <string name=\"pref_backups_versions_title\">Anzahl der zu behaltenden Versionen</string>\n    <string name=\"pref_backups_versions_infinite\">\\u221E</string>\n    <plurals name=\"pref_backups_versions_summary\">\n        <item quantity=\"one\">%1$d Version der Sicherungsdatei speichern</item>\n        <item quantity=\"other\">%1$d Versionen der Sicherungsdatei speichern</item>\n    </plurals>\n    <string name=\"pref_backups_versions_infinite_summary\">Unendlich viele Versionen der Sicherungsdatei speichern</string>\n    <string name=\"pref_import_app_title\">Aus App importieren</string>\n    <string name=\"pref_import_app_summary\">Token aus einer App importieren (benötigt Root-Zugriff)</string>\n    <string name=\"pref_export_title\">Exportieren</string>\n    <string name=\"pref_export_summary\">Datenbank exportieren</string>\n    <string name=\"pref_password_reminder_title\">Passworterinnerung</string>\n    <string name=\"pref_google_auth_export_title\">Für Google Authenticator exportieren</string>\n    <string name=\"pref_google_auth_export_descriptor\">Generiert QR-Codes zum Exportieren, die mit Google Authenticator kompatibel sind</string>\n    <string name=\"pref_google_auth_export_no_data\">Keine Daten zu exportieren</string>\n    <plurals name=\"pref_google_auth_export_incompatible_entries\">\n        <item quantity=\"one\">%d inkompatibler Eintrag wurde übersprungen</item>\n        <item quantity=\"other\">%d inkompatible Einträge wurden übersprungen</item>\n    </plurals>\n    <string name=\"pref_password_reminder_summary\">Zeigt %s eine Erinnerung zur Eingabe des Passworts an, damit es nicht vergessen wird.</string>\n    <string name=\"pref_password_reminder_summary_disabled\">Deaktiviert</string>\n    <string name=\"pref_secure_screen_title\">Bildschirmsicherheit</string>\n    <string name=\"pref_secure_screen_summary\">Bildschirmfotos und andere Aufnahmeversuche innerhalb der App blockieren</string>\n    <string name=\"pref_tap_to_reveal_title\">Zum Aufdecken antippen</string>\n    <string name=\"pref_tap_to_reveal_summary\">Token werden standardmäßig ausgeblendet. Der Code wird durch Antippen des Tokens sichtbar.</string>\n    <string name=\"pref_tap_to_reveal_time_title\">Zeitlimit für aufgedeckte Token</string>\n    <string name=\"pref_auto_lock_title\">Automatisches Sperren</string>\n    <string name=\"pref_auto_lock_summary\">Wenn %s</string>\n    <string name=\"pref_auto_lock_summary_disabled\">Deaktiviert</string>\n    <string name=\"pref_auto_lock_prompt\">Aegis automatisch sperren, wenn</string>\n    <string name=\"pref_auto_lock_type_back_button\">Die „Zurück“-Taste gedrückt wird</string>\n    <string name=\"pref_auto_lock_type_minimize\">Die App minimiert wird</string>\n    <string name=\"pref_auto_lock_type_device_lock\">Das Gerät gesperrt wird</string>\n    <string name=\"pref_backup_password_category\">Sicherung und Exportdatei</string>\n    <string name=\"pref_backup_password_title\">Separates Passwort für Sicherung und Exportdatei</string>\n    <string name=\"pref_backup_password_summary\">Wenn diese Option aktiviert ist, kann das Passwort, das zum Entsperren der App verwendet wird, nicht mehr zum Entschlüsseln von Sicherungen und Exportdateien verwendet werden.</string>\n    <string name=\"pref_backup_password_change_title\">Passwort für Sicherung und Exportdatei ändern</string>\n    <string name=\"pref_backup_password_change_summary\">Gib ein neues Passwort ein, mit dem die Datenbank während der Sicherung und des Exportierens verschlüsselt wird.</string>\n    <string name=\"pref_encryption_title\">Verschlüsselung</string>\n    <string name=\"pref_encryption_summary\">Datenbank verschlüsseln und sie mittels eines Passworts oder biometrischen Daten entsperren</string>\n    <string name=\"pref_biometrics_title\">Biometrisches Entsperren</string>\n    <string name=\"pref_biometrics_summary\">Biometrische Authentifizierung zum Entsperren der Datenbank erlauben</string>\n    <string name=\"pref_search_behavior_summary\">Durchsuchen: %s</string>\n    <string name=\"pref_search_behavior_prompt\">Folgende Felder durchsuchen</string>\n    <string name=\"pref_search_behavior_type_name\">Name</string>\n    <string name=\"pref_search_behavior_type_issuer\">Herausgeber</string>\n    <string name=\"pref_search_behavior_type_note\">Notiz</string>\n    <string name=\"pref_search_behavior_type_groups\">Gruppen</string>\n    <string name=\"pref_set_password_title\">Passwort ändern</string>\n    <string name=\"pref_set_password_summary\">Ein neues Passwort zum Entsperren der Datenbank festlegen</string>\n    <string name=\"no_events_title\">Keine gemeldeten Ereignisse</string>\n    <string name=\"no_events_description\">Es wurden keine wichtigen Ereignisse innerhalb der App gemeldet</string>\n    <string name=\"event_title_vault_unlocked\">Datenbank entsperrt</string>\n    <string name=\"event_description_vault_unlocked\">Die Datenbank wurde erfolgreich entsperrt</string>\n    <string name=\"event_title_backup_created\">Sicherungsdatei erstellt</string>\n    <string name=\"event_description_backup_created\">Eine Sicherungsdatei wurde erfolgreich erstellt</string>\n    <string name=\"event_title_android_backup_created\">Sicherungsdatei von Android erstellt</string>\n    <string name=\"event_description_android_backup_created\">Eine Sicherungsdatei wurde erfolgreich von Android erstellt</string>\n    <string name=\"event_title_vault_exported\">Datenbank exportiert</string>\n    <string name=\"event_description_vault_exported\">Eine Kopie der Datenbank wurde exportiert</string>\n    <string name=\"event_title_entry_shared\">Eintrag geteilt</string>\n    <string name=\"event_description_entry_shared\">Ein Eintrag wurde geteilt</string>\n    <string name=\"event_title_vault_unlock_failed_password\">Entsperren der Datenbank fehlgeschlagen (Passwort)</string>\n    <string name=\"event_description_vault_unlock_failed_password\">Ein Versuch, die Datenbank mit dem Passwort zu entsperren, schlug fehl</string>\n    <string name=\"event_title_vault_unlock_failed_biometrics\">Entsperren der Datenbank fehlgeschlagen (Biometrie)</string>\n    <string name=\"event_description_vault_unlock_failed_biometrics\">Ein Versuch, die Datenbank mittels Biometrie zu entsperren, schlug fehl</string>\n    <string name=\"event_unknown\">Unbekanntes Ereignis</string>\n    <string name=\"audit_log_entry_deleted\">(gelöscht)</string>\n    <string name=\"today_at_time\">Heute um %1$s</string>\n    <string name=\"day_of_week_at_time\">%1$s um %2$s</string>\n    <string name=\"export_encrypted\">Datenbank verschlüsseln</string>\n    <string name=\"export_help\">Mit dieser Aktion wird die Datenbank aus dem internen Speicher von Aegis exportiert. Wähle das Format aus, in dem der Export erfolgen soll:</string>\n    <string name=\"export_warning_unencrypted\">Du bist dabei, eine unverschlüsselte Kopie deiner Aegis-Datenbank zu exportieren. <b>Dies wird nicht empfohlen</b>.</string>\n    <string name=\"export_warning_password\">Exportdateien werden mit einem separaten Passwort verschlüsselt, das in den Sicherheitseinstellungen konfiguriert wurde.</string>\n    <string name=\"understand_risk_accept\">Ich bin mir des Risikos bewusst</string>\n    <string name=\"export_format_aegis\">Aegis (.JSON)</string>\n    <string name=\"export_format_google_auth_uri\">Textdatei (.TXT)</string>\n    <string name=\"export_format_html\">Webseite (.HTML)</string>\n    <string name=\"export_format_hint\">Exportformat</string>\n    <string name=\"export_all_groups\">Alle Gruppen exportieren</string>\n    <string name=\"export_choose_groups\">Gib an, welche Gruppen du exportieren möchtest</string>\n    <plurals name=\"export_groups_selected_count\">\n        <item quantity=\"one\">%d Gruppe ausgewählt</item>\n        <item quantity=\"other\">%d Gruppen ausgewählt</item>\n    </plurals>\n    <string name=\"export_no_groups_selected\">Keine Gruppen zum Exportieren ausgewählt</string>\n    <string name=\"export_html_title\" comment=\"The title of an HTML export document\">Aegis-Authenticator-Exportdatei</string>\n    <string name=\"choose_authentication_method\">Sicherheit</string>\n    <string name=\"authentication_method_explanation\">Aegis ist eine auf Sicherheit ausgerichtete 2FA-App. Die Token werden in einer Datenbank gespeichert, die optional mit einem Passwort deiner Wahl verschlüsselt werden kann. Wenn ein Angreifer an deine verschlüsselte Datenbankdatei gelangt, kann er ohne Kenntnis des Passworts nicht auf den Inhalt zugreifen.\\n\\nWir haben die Optionen voreingestellt, die unserer Meinung nach am besten zu deinem Gerät passen.</string>\n    <string name=\"authentication_method_none\">Keine</string>\n    <string name=\"authentication_method_none_description\">Die Datenbank wird nicht verschlüsselt und es wird kein Passwort zum Entschlüsseln benötigt. <b>Diese Option wird nicht empfohlen</b>.</string>\n    <string name=\"authentication_method_password\">Passwort</string>\n    <string name=\"authentication_method_password_description\">Zur Freischaltung der Datenbank wird ein Passwort benötigt.</string>\n    <string name=\"authentication_method_password_explanation\">Warnung: Wenn du dein Passwort vergisst, verlierst du dauerhaft den Zugriff auf deine Token. Es gibt keine Möglichkeit, diese ohne das Passwort wiederherzustellen.</string>\n    <string name=\"authentication_method_biometrics\">Biometrie</string>\n    <string name=\"authentication_method_biometrics_description\">Zusätzlich zu einem Passwort können biometrische Daten, die auf diesem Gerät registriert sind, wie ein Fingerabdruck oder dein Gesicht, verwendet werden, um die Datenbank zu entsperren.</string>\n    <string name=\"authentication\">Datenbank entsperren</string>\n    <string name=\"authentication_multiline\" comment=\"The newline in the middle is used for aesthetic purposes\">Datenbank\\nentsperren</string>\n    <string name=\"auth_use_biometrics\">Stattdessen <font fgcolor=\"#FF0D86C1\">biometrische Daten</font> verwenden</string>\n    <string name=\"set_password\">Passwort eingeben</string>\n    <string name=\"set_group\">Gruppennamen eingeben</string>\n    <string name=\"set_number\">Eine Zahl eingeben</string>\n    <string name=\"set_password_confirm\">Bitte bestätige das Passwort</string>\n    <string name=\"invalid_password\">Das Passwort ist falsch</string>\n    <string name=\"invalidated_biometrics\">Es wurde eine Änderung in den Sicherheitseinstellungen deines Geräts erkannt. Bitte navigiere zu »Aegis -&gt; Einstellungen -&gt; Sicherheit -&gt; Biometrisches Entsperren«, um biometrisches Entsperren zu deaktivieren und wieder zu aktivieren.</string>\n    <string name=\"password_reminder\">Bitte gib dein Passwort ein. Wir fordern dich gelegentlich dazu auf, damit du es nicht vergisst.</string>\n    <string name=\"password_reminder_dialog_title\">Biometrisches Entsperren als Standard</string>\n    <string name=\"password_reminder_dialog_message\">Wir fordern dich gelegentlich auf, dein Passwort einzugeben, um sicherzustellen, dass du es nicht vergessen hast und du nicht den Zugang zu deiner Datenbank verlierst. Nachdem du dein Passwort einmal eingegeben hast, verwendet Aegis wieder das biometrische Entsperren, bis es Zeit für eine weitere Passworterinnerung ist.</string>\n    <string name=\"password_reminder_freq_never\">Niemals</string>\n    <string name=\"password_reminder_freq_weekly\">wöchentlich</string>\n    <string name=\"password_reminder_freq_biweekly\">alle 2 Wochen</string>\n    <string name=\"password_reminder_freq_monthly\">monatlich</string>\n    <string name=\"password_reminder_freq_quarterly\">vierteljährlich</string>\n    <string name=\"enter_password_2fas_message\">Es sieht so aus, als ob diese 2FAS-Sicherung verschlüsselt ist. Bitte das Passwort unten eingeben.</string>\n    <string name=\"enter_password_authy_message\">Es sieht so aus, als ob deine Authy-Token verschlüsselt sind. Bitte schließe Aegis, öffne Authy und entsperre die Token mit deinem Passwort. Aegis kann ebenfalls versuchen, deine Authy-Token zu entschlüsseln, wenn du unten dein Passwort eingibst.</string>\n    <string name=\"enter_password_aegis_title\">Gib das Passwort der zu importierenden Datenbank ein</string>\n    <string name=\"period_hint\">Zeitraum (Sekunden)</string>\n    <string name=\"algorithm_hint\">Hashfunktion</string>\n    <string name=\"type\">Art</string>\n    <string name=\"share\">Teilen</string>\n    <string name=\"yes\">Ja</string>\n    <string name=\"no\">Nein</string>\n    <string name=\"undo\">Rückgängig machen</string>\n    <string name=\"unlock\">Entsperren</string>\n    <string name=\"advanced\">Fortgeschritten</string>\n    <string name=\"counter\">Zähler</string>\n    <string name=\"digits\">Ziffern</string>\n    <string name=\"secret\">Schlüssel</string>\n    <string name=\"scan\">QR-Code scannen</string>\n    <string name=\"scan_image\">Bild scannen</string>\n    <string name=\"enter_manually\">Manuell eingeben</string>\n    <string name=\"set_up_biometric\">Biometrisches Entsperren einrichten</string>\n    <string name=\"copy\">Kopieren</string>\n    <string name=\"edit\">Bearbeiten</string>\n    <string name=\"select_all\">Alle auswählen</string>\n    <string name=\"assign_icons\">Symbole zuweisen</string>\n    <string name=\"assign_groups\">Einer Gruppe zuweisen</string>\n    <string name=\"assign_groups_dialog_summary\">Wähle eine Gruppe aus, die du den ausgewählten Einträgen zuweisen möchtest.</string>\n    <string name=\"assign_groups_dialog_dropdown\">Gruppe auswählen</string>\n    <string name=\"favorite\" comment=\"Verb\">Zu Favoriten hinzufügen</string>\n    <string name=\"unfavorite\" comment=\"Verb\">Aus Favoriten entfernen</string>\n    <string name=\"error_all_caps\">FEHLER</string>\n    <string name=\"password\">Passwort</string>\n    <string name=\"confirm_password\">Passwort bestätigen</string>\n    <string name=\"show_password\">Passwort anzeigen</string>\n    <string name=\"new_entry\">Neuer Eintrag</string>\n    <string name=\"add_new_entry\">Neuen Eintrag hinzufügen</string>\n    <string name=\"unlock_vault_error\">Die Datenbank konnte nicht entsperrt werden</string>\n    <string name=\"unlock_vault_error_description\">Falsches Passwort. Achte darauf, dass du dein Passwort nicht falsch eingibst.</string>\n    <string name=\"password_equality_error\">Passwörter sollten identisch und nicht leer sein</string>\n    <string name=\"snackbar_authentication_method\">Bitte wähle eine Authentifizierungsmethode aus</string>\n    <string name=\"encrypting_vault\">Verschlüsselung der Datenbank</string>\n    <string name=\"exporting_vault\">Exportieren der Datenbank</string>\n    <string name=\"optimizing_icon\">Symbol wird optimiert</string>\n    <string name=\"optimizing_icon_multiple\">Symbol %1$d/%2$d wird optimiert</string>\n    <string name=\"reading_file\">Datei wird gelesen</string>\n    <string name=\"requesting_root_access\">Root-Zugriff wird angefordert</string>\n    <string name=\"analyzing_qr\">QR-Code wird analysiert</string>\n    <string name=\"analyzing_qr_multiple\">QR-Code %1$d von %2$d (%3$s) wird analysiert …</string>\n    <plurals name=\"added_new_entries\">\n        <item quantity=\"one\">%d neuer Eintrag zur Datenbank hinzugefügt</item>\n        <item quantity=\"other\">%d neue Einträge zur Datenbank hinzugefügt</item>\n    </plurals>\n    <string name=\"importing_icon_pack\">Symbolpaket wird importiert</string>\n    <string name=\"delete_entry\">Eintrag löschen</string>\n    <string name=\"delete_entry_description\">Möchtest du diesen Eintrag wirklich löschen?</string>\n    <string name=\"delete_entry_explanation\">Diese Aktion deaktiviert die 2FA nicht für:\\n<b>%s</b>\\n\\nUm zu verhindern, dass du den Zugang verlierst, vergewissere dich, dass du 2FA deaktiviert hast oder dass du eine alternative Möglichkeit verwendest, um Codes für diesen Dienst zu generieren.</string>\n    <string name=\"delete_entries\">Einträge löschen</string>\n    <plurals name=\"delete_entries_description\">\n        <item quantity=\"one\">Möchtest du %d Eintrag wirklich löschen?</item>\n        <item quantity=\"other\">Möchtest du %d Einträge wirklich löschen?</item>\n    </plurals>\n    <string name=\"discard_changes\">Änderungen verwerfen?</string>\n    <string name=\"discard_changes_description\">Deine Änderungen wurden noch nicht gespeichert</string>\n    <string name=\"saving_profile_error\">Fehler beim Speichern des Profils</string>\n    <string name=\"saving_assign_icons_error\">Fehler beim Zuweisen der Symbole</string>\n    <string name=\"welcome\">Willkommen</string>\n    <string name=\"app_description\">Aegis ist eine kostenlose, sichere und quelloffene 2FA-App</string>\n    <string name=\"setup_completed\">Einrichtung abgeschlossen</string>\n    <string name=\"setup_completed_description\">Aegis wurde eingerichtet und ist nun bereit.</string>\n    <string name=\"vault_not_found\">Datenbank nicht gefunden. Einrichtung wird gestartet …</string>\n    <string name=\"copied\">Kopiert</string>\n    <string name=\"errors_copied\">Fehlermeldungen in die Zwischenablage kopiert</string>\n    <string name=\"version_copied\">Version in die Zwischenablage kopiert</string>\n    <string name=\"error_required_field\">Pflichtfeld</string>\n    <string name=\"error_occurred\">Ein Fehler ist aufgetreten</string>\n    <string name=\"decryption_error\">Beim Entsperren der Datenbank ist ein Fehler aufgetreten</string>\n    <string name=\"decryption_corrupt_error\">Beim Entsperren der Datenbank ist ein Fehler aufgetreten. Deine Datenbankdatei könnte beschädigt sein.</string>\n    <string name=\"saving_error\">Beim Speichern der Datenbank ist ein Fehler aufgetreten</string>\n    <string name=\"vault_init_error\">Beim Initialisieren der Datenbank ist ein Fehler aufgetreten</string>\n    <string name=\"vault_load_error\">Beim Laden der Datenbank aus dem Speicher ist ein Fehler aufgetreten</string>\n    <string name=\"biometric_decrypt_error\">Beim Versuch, die Datenbank mit biometrischer Authentifizierung zu entschlüsseln, ist ein Fehler aufgetreten. Dies geschieht in der Regel nur, wenn die Sicherheitseinstellungen deines Geräts geändert wurden. Bitte entsperre die Datenbank mit deinem Passwort und konfiguriere die biometrische Authentifizierung in den Einstellungen von Aegis neu.</string>\n    <string name=\"biometric_init_error\">Beim Versuch, die biometrische Authentifizierung vorzubereiten, ist ein Fehler aufgetreten. Dies geschieht in der Regel nur, wenn die Sicherheitseinstellungen deines Geräts geändert wurden. Bitte entsperre die Datenbank mit deinem Passwort und konfiguriere die biometrische Authentifizierung in den Einstellungen von Aegis neu.</string>\n    <string name=\"disable_encryption\">Verschlüsselung deaktivieren</string>\n    <string name=\"disable_encryption_description\">Möchtest du die Verschlüsselung wirklich deaktivieren? Dadurch wird die Datenbank im Klartext gespeichert. <b>Automatische Sicherungen werden ebenfalls deaktiviert</b>.</string>\n    <string name=\"enable_encryption_error\">Bei der Aktivierung der Verschlüsselung ist ein Fehler aufgetreten</string>\n    <string name=\"disable_encryption_error\">Bei der Deaktivierung der Verschlüsselung ist ein Fehler aufgetreten</string>\n    <string name=\"backup_successful\">Die Sicherung wurde erfolgreich durchgeführt</string>\n    <string name=\"backup_error\">Beim Erstellen der Sicherungskopie ist ein Fehler aufgetreten</string>\n    <string name=\"backup_status_success\">Letzte erfolgreiche Sicherung: %s</string>\n    <string name=\"backup_status_failed\">Letzte fehlgeschlagene Sicherung: %s</string>\n    <string name=\"backup_status_none\">Es wurden bisher keine Sicherungen erstellt</string>\n    <string name=\"backup_warning_password\">Sicherungen werden mit einem separaten Passwort verschlüsselt, das in den Sicherheitseinstellungen konfiguriert wurde.</string>\n    <string name=\"documentsui_error\">DocumentsUI scheint auf deinem Gerät zu fehlen. Dies ist eine wichtige Systemkomponente, die für die Auswahl und Erstellung von Dokumenten erforderlich ist. Wenn du ein Programm zum &quot;Debloat&quot; deines Geräts verwendet hast, hast du es möglicherweise versehentlich entfernt und müsstest es neu installieren.</string>\n    <string name=\"icon_pack_import_error\">Beim Importieren eines Symbolpakets ist ein Fehler aufgetreten</string>\n    <string name=\"icon_pack_import_exists_error\">Das zu importierende Symbolpaket ist bereits vorhanden. Möchtest du es überschreiben?</string>\n    <string name=\"icon_pack_delete_error\">Beim Löschen eines Symbolpakets ist ein Fehler aufgetreten</string>\n    <plurals name=\"icon_pack_info\">\n        <item quantity=\"one\">%d Symbol</item>\n        <item quantity=\"other\">%d Symbole</item>\n    </plurals>\n    <string name=\"icon_custom\">Benutzerdefiniert</string>\n    <string name=\"permission_denied\">Zugriff verweigert</string>\n    <string name=\"andotp_new_format\">Neues Format (v0.6.3 oder neuer) </string>\n    <string name=\"andotp_old_format\">Altes Format (v0.6.2 oder älter) </string>\n    <string name=\"choose_andotp_importer\">Welches Format hat die andOTP-Sicherungsdatei?</string>\n    <string name=\"choose_totpauth_importer\">Ist diese TOTP-Authenticator-Sicherungskopie mit einem Passwort verschlüsselt?</string>\n    <string name=\"choose_application\">Wähle die App aus, aus der du importieren möchtest</string>\n    <string name=\"choose_theme\">Wähle das gewünschte Design aus</string>\n    <string name=\"choose_account_name_position\">Wähle die gewünschte Position des Kontonamens</string>\n    <string name=\"choose_view_mode\">Wähle den gewünschten Darstellungsstil aus</string>\n    <string name=\"choose_copy_behavior\">Wähle dein gewünschtes Verhalten fürs Kopieren</string>\n    <string name=\"parsing_file_error\">Beim Analysieren der Datei ist ein Fehler aufgetreten</string>\n    <string name=\"file_not_found\">Fehler: Datei nicht gefunden</string>\n    <string name=\"reading_file_error\">Beim Lesen der Datei ist ein Fehler aufgetreten</string>\n    <string name=\"app_lookup_error\">Fehler: App ist nicht installiert</string>\n    <string name=\"app_version_error\">Die installierte Version von %s wird nicht unterstützt. Neuere Versionen verschlüsseln einige der Dateien im internen Speicherverzeichnis, sodass Aegis nicht mehr auf die Informationen zugreifen kann, die für das Importieren benötigt werden. Der Importversuch wird wahrscheinlich zu einem Fehler führen. Möchtest du trotzdem fortfahren?</string>\n    <string name=\"root_error\">Fehler: Root-Zugriff konnte nicht gewährt werden</string>\n    <plurals name=\"imported_entries_count\">\n        <item quantity=\"one\">%d Eintrag importiert</item>\n        <item quantity=\"other\">%d Einträge importiert</item>\n    </plurals>\n    <plurals name=\"entries_shown\">\n        <item quantity=\"one\">%d Eintrag angezeigt</item>\n        <item quantity=\"other\">%d Einträge angezeigt</item>\n    </plurals>\n    <string name=\"intro_import_error_title\">Beim Importieren der Datenbank ist ein Fehler aufgetreten</string>\n    <string name=\"import_error_title\">Beim Importieren sind ein oder mehrere Fehler aufgetreten</string>\n    <string name=\"exporting_vault_error\">Beim Exportieren der Datenbank ist ein Fehler aufgetreten</string>\n    <string name=\"exported_vault\">Die Datenbank wurde exportiert</string>\n    <string name=\"encryption_set_password_error\">Beim Festlegen des Passworts ist ein Fehler aufgetreten.</string>\n    <string name=\"encryption_enable_biometrics_error\">Beim Versuch, biometrisches Entsperren zu aktivieren, ist ein Fehler aufgetreten. Einige Geräte haben eine schlechte Implementierung der biometrischen Authentifizierung und es ist wahrscheinlich, dass dieses Gerät dazugehört. Erwäge stattdessen den Wechsel zu einer nur passwortbasierten Konfiguration.</string>\n    <string name=\"no_cameras_available\">Keine Kameras verfügbar</string>\n    <string name=\"read_qr_error\">Beim Lesen des QR-Codes ist ein Fehler aufgetreten</string>\n    <string name=\"read_qr_error_phonefactor\">Aegis ist nicht mit dem proprietären 2FA-Algorithmus von Microsoft kompatibel. Bitte vergewissere dich, dass du bei der Konfiguration von 2FA in Office 365 »Anwendung ohne Benachrichtigungen einrichten« auswählst.</string>\n    <string name=\"partial_google_auth_import\">Unvollständiger Google-Authenticator-Export erkannt</string>\n    <string name=\"partial_google_auth_import_warning\">Einige QR-Codes fehlen in deinem Importversuch. Die folgenden Codes wurden nicht gefunden:\\n\\n<b>%s</b>\\n\\nDu kannst mit dem Importieren dieses Teilexports fortfahren, aber wir empfehlen es mit allen QR-Codes erneut zu versuchen, damit du nicht riskierst, den Zugriff auf Token zu verlieren.</string>\n    <string name=\"missing_qr_code_descriptor\">• QR-Code %d</string>\n    <plurals name=\"import_partial_export_anyway\">\n        <item quantity=\"one\">%d Token trotzdem importieren</item>\n        <item quantity=\"other\">%d Token trotzdem importieren</item>\n    </plurals>\n    <string name=\"import_google_auth_failure\">Importieren von Google-Authenticator-Export fehlgeschlagen</string>\n    <string name=\"unrelated_google_auth_batches_error\">Die Exportdatei enthält Informationen über ein nicht zugehöriges Set. Versuche, jeweils 1 Set zu importieren.</string>\n    <string name=\"no_tokens_can_be_imported\">Daher können keine Token importiert werden</string>\n    <string name=\"unlocking_vault\">Entsperren der Datenbank</string>\n    <string name=\"rename_group\">Gruppe umbenennen</string>\n    <string name=\"no_group_selection\">Wenn ein Eintrag keiner Gruppe zugewiesen ist, befindet er sich unter »Keine Gruppe«.</string>\n    <string name=\"remove_group\">Gruppe entfernen</string>\n    <string name=\"remove_group_description\">Möchtest du diese Gruppe wirklich entfernen? Einträge in dieser Gruppe wechseln automatisch zu »Keine Gruppe«.</string>\n    <string name=\"remove_unused_groups\">Nicht verwendete Gruppen löschen</string>\n    <string name=\"remove_unused_groups_description\">Möchtest du wirklich alle Gruppen löschen, die keinem Eintrag zugewiesen sind?</string>\n    <string name=\"remove_icon_pack\">Symbolpaket entfernen</string>\n    <string name=\"remove_icon_pack_description\">Möchtest du dieses Symbolpaket wirklich entfernen? Einträge, die Symbole aus diesem Paket verwenden, sind davon nicht betroffen.</string>\n    <string name=\"details\">Details</string>\n    <string name=\"show_error_details\">Fehlerdetails anzeigen</string>\n    <string name=\"lock\">Sperren</string>\n    <string name=\"name\">Name</string>\n    <string name=\"no_group\">Keine Gruppe</string>\n    <string name=\"sort\" comment=\"Title of the Sort button in the top action bar of the main view\">Sortieren</string>\n    <string name=\"sort_alphabetically\">Herausgeber (A bis Z)</string>\n    <string name=\"sort_alphabetically_reverse\">Herausgeber (Z bis A)</string>\n    <string name=\"sort_alphabetically_name\">Konto (A bis Z)</string>\n    <string name=\"sort_alphabetically_name_reverse\">Konto (Z bis A)</string>\n    <string name=\"sort_usage_count\">Verwendungszähler</string>\n    <string name=\"sort_last_used\">Zuletzt verwendet</string>\n    <string name=\"sort_custom\">Benutzerdefiniert</string>\n    <string name=\"last_used\">Zuletzt verwendet</string>\n    <string name=\"last_used_never\">niemals</string>\n    <string name=\"new_group\">Neue Gruppe …</string>\n    <string name=\"group\">Gruppe</string>\n    <string name=\"group_name_hint\">Gruppenname</string>\n    <string name=\"preference_manage_groups\">Gruppen bearbeiten</string>\n    <string name=\"preference_manage_groups_summary\">Verwalten und Löschen von Gruppen</string>\n    <string name=\"preference_reset_usage_count\">Verwendungszähler zurücksetzen</string>\n    <string name=\"preference_reset_usage_count_summary\">Verwendungszähler für jeden Eintrag in der Datenbank zurücksetzen</string>\n    <string name=\"preference_reset_usage_count_dialog\">Den Verwendungszähler aller Einträge in der Datenbank auf 0 setzen?</string>\n    <string name=\"note\" comment=\"Users can add a note to an entry\">Notiz</string>\n    <string name=\"clear\">Löschen</string>\n    <string name=\"dialog_duplicate_entry_title\" comment=\"'Duplicate' is a noun here\">Eintrag bereits vorhanden</string>\n    <string name=\"dialog_duplicate_entry_message\">Dieser Eintrag hat den gleichen Namen und Herausgeber wie ein oder mehrere bestehende Einträge. Wie möchtest du fortfahren?</string>\n    <string name=\"dialog_duplicate_entry_overwrite_title\">Vorhandene(n) Eintrag/Einträge überschreiben</string>\n    <string name=\"dialog_duplicate_entry_overwrite_subtitle\">Vorhandene(n) Eintrag/Einträge durch den neuen ersetzen. Die Aktion kann nicht rückgängig gemacht werden</string>\n    <string name=\"dialog_duplicate_entry_suffix_title\">Suffix hinzufügen</string>\n    <string name=\"dialog_duplicate_entry_suffix_subtitle\">Dem Namen des neuen Eintrags ein Suffix hinzufügen. Der neue Name lautet: %s</string>\n    <string name=\"dialog_duplicate_entry_cancel_title\">Nicht speichern</string>\n    <string name=\"dialog_duplicate_entry_cancel_subtitle\">Ermöglicht das Bearbeiten des Eintrags, um ihn anschließend erneut zu speichern</string>\n    <plurals name=\"dialog_duplicate_entry_overwrite_dialog_message\">\n        <item quantity=\"one\">Möchtest du wirklich %d Eintrag mit folgendem Namen löschen?\\n\\n%s – %s</item>\n        <item quantity=\"other\">Möchtest du wirklich %d Einträge mit folgendem Namen löschen?\\n\\n%s – %s</item>\n    </plurals>\n    <string name=\"dialog_duplicate_entry_overwrite_dialog_title\">Löschen bestätigen</string>\n    <string name=\"pref_haptic_feedback_summary\">Gerät vibrieren lassen, wenn sich Codes aktualisieren</string>\n    <string name=\"pref_haptic_feedback_title\">Haptisches Feedback</string>\n    <string name=\"pref_highlight_entry_title\">Token beim Antippen hervorheben</string>\n    <string name=\"pref_highlight_entry_summary\">Token beim Antippen hervorheben, um sie leichter voneinander unterscheiden zu können</string>\n    <string name=\"pref_groups_multiselect_title\">Mehrere Gruppen auswählen</string>\n    <string name=\"pref_groups_multiselect_summary\">Das Auswählen mehrerer Gruppen auf einmal ermöglichen</string>\n    <string name=\"pref_minimize_on_copy_title\">Beim Kopieren minimieren</string>\n    <string name=\"pref_minimize_on_copy_summary\">App nach dem Kopieren eines Tokens minimieren</string>\n    <string name=\"pref_copy_behavior_title\">Token in die Zwischenablage kopieren</string>\n    <string name=\"pref_search_behavior_title\">Suchverhalten</string>\n    <string name=\"pref_pause_entry_title\">Token beim Antippen einfrieren</string>\n    <string name=\"pref_pause_entry_summary\">Automatisches Aktualisieren der Token durch Antippen anhalten. Die Token werden nicht aktualisiert, solange sie hervorgehoben sind. Erfordert »Token beim Antippen hervorheben« oder »Zum Aufdecken antippen«.</string>\n    <string name=\"pin_keyboard_description\">Gib dein Passwort ein, um die PIN-Tastatur zu aktivieren. Beachte, dass dies nur funktioniert, wenn dein Passwort nur aus Zahlen besteht</string>\n    <string name=\"pin_keyboard_error\">Fehler beim Aktivieren der PIN-Tastatur</string>\n    <string name=\"pin_keyboard_error_description\">Es ist nicht möglich, die PIN-Tastatur zu aktivieren. Dein Passwort darf nur aus Zahlen bestehen.</string>\n    <string name=\"pin_keyboard_disabled\">Passwort geändert. Die PIN-Tastatur wird nicht länger angezeigt.</string>\n    <string name=\"selected\">Ausgewählt</string>\n    <string name=\"dark_theme_title\">Dunkles Design</string>\n    <string name=\"light_theme_title\">Helles Design</string>\n    <string name=\"amoled_theme_title\">AMOLED-Design</string>\n    <string name=\"system_theme_title\">Durch Energiesparmodus festgelegt</string>\n    <string name=\"system_amoled_theme_title\">Durch Energiesparmodus festgelegt (AMOLED)</string>\n    <string name=\"normal_viewmode_title\">Normal</string>\n    <string name=\"compact_mode_title\">Kompakt</string>\n    <string name=\"small_mode_title\">Klein</string>\n    <string name=\"tiles_mode_title\">Kacheln</string>\n    <string name=\"unknown_issuer\">Unbekannter Herausgeber</string>\n    <string name=\"unknown_account_name\">Unbekannter Kontoname</string>\n    <plurals name=\"import_error_dialog\">\n        <item quantity=\"one\">Aegis konnte %d Token nicht importieren. Dieser Token wird übersprungen. Drücke auf »Details«, um weitere Informationen über diesen Fehler zu erhalten.</item>\n        <item quantity=\"other\">Aegis konnte %d Token nicht importieren. Diese Token werden übersprungen. Drücke auf »Details«, um weitere Informationen über diese Fehler zu erhalten.</item>\n    </plurals>\n    <string name=\"unable_to_process_deeplink\">Deep-Link konnte nicht verarbeitet werden</string>\n    <string name=\"unable_to_read_qrcode_file\">QR-Code konnte nicht aus der Datei gelesen und verarbeitet werden: %s.</string>\n    <string name=\"unable_to_process_shared_text\">Gemeinsamer Text kann nicht als OTP verarbeitet werden</string>\n    <string name=\"unable_to_read_qrcode_files\">Einige der QR-Codes konnten nicht gelesen und verarbeitet werden. Nur %1$d von %2$d Einträge werden importiert.</string>\n    <string name=\"unable_to_generate_qrcode\">QR-Code konnte nicht generiert werden</string>\n    <string name=\"select_picture\">Bild auswählen</string>\n    <string name=\"select_icon\">Symbol auswählen</string>\n    <string name=\"tile_open_vault\" comment=\"label for a quick settings tile that opens the app when tapped\">Datenbank öffnen</string>\n    <string name=\"tile_open_scanner\" comment=\"label for a quick settings tile that opens the QR code scanner when tapped\">Scanner öffnen</string>\n    <string name=\"toggle_checkboxes\">Kontrollkästchen umschalten</string>\n    <string name=\"search\">Suchen</string>\n    <string name=\"channel_name_lock_status\">Sperrstatus</string>\n    <string name=\"channel_description_lock_status\">Aegis kann eine dauerhafte Benachrichtigung erstellen, um dich zu benachrichtigen, wenn die Datenbank gesperrt ist</string>\n    <string name=\"vault_unlocked_state\">Die Datenbank ist entsperrt. Hier antippen, um sie zu sperren.</string>\n    <string name=\"version\">Version</string>\n    <string name=\"changelog\">Änderungsprotokoll</string>\n    <string name=\"whats_new\">Was ist neu</string>\n    <string name=\"github_description\">Quellcode, Probleme und Informationen</string>\n    <string name=\"license\">Lizenz</string>\n    <string name=\"license_description\">Aegis Authenticator ist lizenziert unter GPLv3</string>\n    <string name=\"third_party_licenses\">Lizenzen von Dritten</string>\n    <string name=\"third_party_licenses_description\">Lizenzen für die von Aegis verwendeten Bibliotheken von Dritten</string>\n    <string name=\"country_netherlands\">Niederlande</string>\n    <string name=\"email_us\">Eine E-Mail schreiben</string>\n    <string name=\"visit_website\">Unsere Website besuchen</string>\n    <string name=\"about_support\">Unterstützung</string>\n    <string name=\"support_rate\">Bewerten</string>\n    <string name=\"support_rate_description\">Unterstütze uns, indem du eine Bewertung im Google Play Store hinterlässt</string>\n    <string name=\"webview_error\">Dieses Gerät unterstützt kein WebView, das zum Anzeigen des Änderungsprotokolls und der Lizenz erforderlich ist. Es fehlt eine Systemkomponente.</string>\n    <string name=\"email\">E-Mail</string>\n    <string name=\"time_sync_warning_title\">Automatische Zeitsynchronisierung</string>\n    <string name=\"time_sync_warning_message\">Aegis ist auf die Synchronisierung der Systemzeit angewiesen, um korrekte Codes zu generieren. Eine Abweichung von nur wenigen Sekunden kann zu falschen Codes führen. Es sieht so aus, als ob dein Gerät nicht so konfiguriert ist, dass es die Zeit automatisch synchronisiert. Möchtest du das jetzt tun?</string>\n    <string name=\"time_sync_warning_disable\">Höre auf, mich zu warnen. Ich weiß, was ich tue.</string>\n    <string name=\"google_qr_export_unrelated\">Nicht zugehöriger QR-Code gefunden. Versuche, den Scanner neu zu starten.</string>\n    <plurals name=\"google_qr_export_scanned\">\n        <item quantity=\"one\">%1$d von %2$d QR-Code gescannt</item>\n        <item quantity=\"other\">%1$d von %2$d QR-Codes gescannt</item>\n    </plurals>\n    <string name=\"google_qr_export_unexpected\">QR-Code Nr. %1$d erwartet, stattdessen wurde Nr. %2$d gescannt</string>\n    <string name=\"backup_error_bar_message\"><b>Sicherungskopie ist kürzlich fehlgeschlagen</b></string>\n    <string name=\"backup_error_dialog_details\" comment=\"The first parameter is the type of backup (e.g. built-in or Android backup). The second parameter is an elapsed time in the style of 'x seconds/minutes/days ago'.\">        Ein kürzlicher Sicherungsversuch der Datenbank mit %1$s ist fehlgeschlagen, da ein Fehler aufgetreten ist. Das Erstellen einer Sicherung wurde am %2$s versucht. Bitte überprüfe deine Sicherungseinstellungen, damit Sicherungen erfolgreich abgeschlossen werden können.\n    </string>\n    <string name=\"backup_permission_error_dialog_details\" comment=\"The first parameter is the type of backup (e.g. built-in or Android backup). The second parameter is an elapsed time in the style of 'x seconds/minutes/days ago'.\">        Ein kürzlicher Sicherungsversuch der Datenbank mit %1$s ist fehlgeschlagen, da Aegis keine Berechtigung zum Schreiben auf das Sicherungsziel hatte. Das Erstellen einer Sicherung wurde am %2$s versucht. Dieser Fehler kann auftreten, wenn das Sicherungsziel verschoben/umbenannt wurde oder wenn Aegis kürzlich aus einer Sicherung wiederhergestellt wurde. Bitte konfiguriere das Sicherungsziel neu.\n    </string>\n    <string name=\"backup_system_builtin\">Automatische Sicherungen von Aegis</string>\n    <string name=\"backup_system_android\">Cloud-Sicherungssystem von Android</string>\n    <string name=\"backup_reminder_bar_message_with_latest\" comment=\"The parameter is an elapsed time in the style of 'x seconds/minutes/days ago'\">        Die letzte Sicherung ist veraltet (%s)\n    </string>\n    <string name=\"backup_reminder_bar_message\">        Änderungen wurden noch nicht gesichert\n    </string>\n    <string name=\"backup_reminder_bar_dialog_title\">Änderungen wurden noch nicht gesichert</string>\n    <string name=\"backup_reminder_bar_dialog_summary\">        Kürzliche Änderungen an der Datenbank wurden noch nicht gesichert. Es ist wichtig, regelmäßig Sicherungen zu erstellen, damit du den Zugriff auf deine Konten nicht verlierst. Bitte denke daran, automatische Sicherungen im Einstellungsmenü einzurichten.\n    </string>\n    <string name=\"backup_reminder_bar_dialog_accept\">Sicherung einrichten</string>\n    <string name=\"backup_plaintext_export_warning\"><b>Die Datenbank wurde kürzlich im Klartext exportiert</b></string>\n    <string name=\"pref_show_plaintext_warning_hint\">Diese Warnung nicht erneut anzeigen</string>\n    <string name=\"backup_plaintext_warning_explanation\">Diese Warnung wird angezeigt, weil du kürzlich eine unverschlüsselte Kopie der Datenbank exportiert hast. Um die Sicherheit deiner Token zu gewährleisten, empfehlen wir, diese Datei zu löschen, sobald sie nicht mehr benötigt wird.</string>\n    <string name=\"switch_camera\">Kamera wechseln</string>\n    <string name=\"empty_list\">Es gibt keine zu zeigenden Codes. Füge Einträge hinzu, indem du das Plus-Zeichen in der unteren rechten Ecke antippst</string>\n    <string name=\"empty_list_title\">Keine Einträge gefunden</string>\n    <string name=\"empty_group_list\">Es gibt keine anzuzeigenden Gruppen. Füge Gruppen im Bearbeitungsbildschirm eines Eintrags hinzu</string>\n    <string name=\"empty_group_list_title\">Keine Gruppen gefunden</string>\n    <string name=\"no_icon_packs\">Bisher wurden noch keine Symbolpakete importiert. Tippe auf das Plus-Zeichen, um eines zu importieren. Tipp: Probiere <a href=\"https://aegis-icons.github.io\">Aegis-Icons</a>.</string>\n    <string name=\"no_icon_packs_title\">Keine Symbolpakete</string>\n    <string name=\"pick_icon\">Wähle ein Symbol aus</string>\n    <string name=\"uncategorized\">Nicht kategorisiert</string>\n    <string name=\"done\">Fertig</string>\n    <plurals name=\"qr_count\">\n        <item quantity=\"one\">%d/%d QR-Code</item>\n        <item quantity=\"other\">%d/%d QR-Codes</item>\n    </plurals>\n    <string name=\"next\">Weiter</string>\n    <string name=\"previous\">Zurück</string>\n    <string name=\"copy_uri\">URI kopieren</string>\n    <string name=\"unable_to_copy_uri_to_clipboard\">URI konnte nicht in die Zwischenablage kopiert werden</string>\n    <string name=\"uri_copied_to_clipboard\">URI in die Zwischenablage kopiert</string>\n    <string name=\"transfer_entry_description\">Scanne diesen QR-Code mit der Authentifizierungs-App, zu der du diesen Eintrag übertragen möchtest</string>\n    <string name=\"transfer_entry_brightness\">QR-Code antippen, um die Helligkeit zu ändern</string>\n    <string name=\"google_auth_compatible_transfer_description\">Scanne diese QR-Codes mit Aegis oder Google Authenticator.\\n\\nAufgrund der Einschränkungen der Google Authenticator-App sind nur TOTP- und HOTP-Token enthalten, die SHA1 verwenden und 6-stellige Codes erzeugen</string>\n    <string name=\"password_strength_very_weak\">Sehr schwach</string>\n    <string name=\"password_strength_weak\">Schwach</string>\n    <string name=\"password_strength_fair\">Mittel</string>\n    <string name=\"password_strength_good\">Gut</string>\n    <string name=\"password_strength_strong\">Sicher</string>\n    <string name=\"password_strength_unknown\">Passwort ist für das Bestimmen der Qualität zu lang</string>\n    <string name=\"pref_pin_keyboard_title\">PIN-Tastatur auf Sperrbildschirm verwenden</string>\n    <string name=\"pref_pin_keyboard_summary\">PIN-Tastatur auf dem Sperrbildschirm aktivieren. Das funktioniert nur bei numerischen Passwörtern</string>\n    <string name=\"title_activity_preferences\">Einstellungen</string>\n    <string name=\"title_activity_manage_groups\">Gruppen verwalten</string>\n    <string name=\"title_activity_transfer\">Einträge übertragen</string>\n    <string name=\"title_activity_about\">Über</string>\n    <string name=\"title_activity_edit_entry\">Eintrag bearbeiten</string>\n    <string name=\"title_activity_scan_qr\">Scanne einen QR-Code</string>\n    <string name=\"title_activity_import_entries\">Einträge importieren</string>\n    <string name=\"title_activity_assign_icons\">Symbole zuweisen</string>\n    <string name=\"title_activity_licenses\">Lizenzen von Dritten</string>\n    <string name=\"dialog_wipe_entries_title\">Einträge löschen</string>\n    <string name=\"dialog_wipe_entries_message\">Deine Datenbank enthält bereits Einträge. Möchtest du diese Einträge entfernen, bevor diese Datei importiert wird?\\n\\n<b>Wenn du dies tust, verlierst du dauerhaft den Zugriff auf die vorhandenen Einträge in der Datenbank.</b></string>\n    <string name=\"dialog_wipe_entries_checkbox\">Datenbankinhalt löschen</string>\n    <string name=\"import_from_clipboard_title\">Aus Zwischenablage importieren</string>\n    <string name=\"import_from_clipboard_message\">Gültige otpauth-URI in der Zwischenablage erkannt.\\n\\n<b>Name</b>: %1$s\\n<b>Herausgeber</b>: %2$s\\n\\nMöchtest du damit diesen Eintrag ausfüllen?</string>\n    <string name=\"panic_trigger_ignore_toast\">Aegis hat ein Paniksignal empfangen, aber die Einstellung ist deaktiviert – Paniksignal wird ignoriert</string>\n    <string name=\"pref_panic_trigger_title\">Datenbank bei Paniksignal löschen</string>\n    <string name=\"pref_panic_trigger_summary\">Datenbank löschen, wenn ein Paniksignal von Ripple empfangen wird</string>\n    <string name=\"import_vault\">Aegis-Datenbank importieren</string>\n    <string name=\"import_vault_hint\">Möchtest du Daten aus einer anderen 2FA-App importieren? Schließe zuerst die Einrichtung ab. Anschließend kannst du die Einstellungen aufrufen.</string>\n    <plurals name=\"import_duplicate_toast\">\n        <item quantity=\"one\">Auswahl für %d potenzielles Duplikat aufgehoben. Bitte überprüfe die Einträge.</item>\n        <item quantity=\"other\">Auswahl für %d potenzielle Duplikate aufgehoben. Bitte überprüfe die Einträge.</item>\n    </plurals>\n    <string name=\"importer_help_2fas\">Gib eine 2FAS-Authenticator-Sicherungsdatei an.</string>\n    <string name=\"importer_help_aegis\">Gib eine Aegis-Export-/Sicherungsdatei an.</string>\n    <string name=\"importer_help_authenticator_plus\">Gib eine Authenticator-Plus-Exportdatei an, die du über <b>Einstellungen -&gt; Sicherung &amp; Rücksicherung -&gt; Exportieren als Text und HTML Format</b> erhältst.</string>\n    <string name=\"importer_help_authy\">Gib eine Kopie von <b>/data/data/com.authy.authy/shared_prefs/com.authy.storage.tokens.authenticator.xml</b> an, die sich im internen Speicherverzeichnis von Authy befindet.</string>\n    <string name=\"importer_help_andotp\">Gib eine andOTP-Export-/Sicherungsdatei an.</string>\n    <string name=\"importer_help_bitwarden\">Gib eine Bitwarden-Export-/Sicherungsdatei an. Verschlüsselte Dateien werden nicht unterstützt.</string>\n    <string name=\"importer_help_battle_net_authenticator\">Gib eine Kopie von <b>/data/data/com.blizzard.messenger/shared_prefs/com.blizzard.messenger.authenticator_preferences.xml</b> an, die sich im internen Speicherverzeichnis von Battle.net Authenticator befindet.</string>\n    <string name=\"importer_help_duo\">Gib eine Kopie von <b>/data/data/com.duosecurity.duomobile/files/duokit/accounts.json</b> an, die sich im internen Speicherverzeichnis von DUO befindet.</string>\n    <string name=\"importer_help_ente_auth\">Gib eine Ente-Auth-Exportdatei an. Derzeit werden nur unverschlüsselte Dateien unterstützt.</string>\n    <string name=\"importer_help_freeotp\">FreeOTP 2: Gib eine Sicherungsdatei an.\\nFreeOTP 1.X: Gib eine Kopie von <b>/data/data/org.fedorahosted.freeotp/shared_prefs/tokens.xml</b>, die sich im internen Speicherverzeichnis von FreeOTP befindet.</string>\n    <string name=\"importer_help_freeotp_plus\">Gib eine FreeOTP+-Exportdatei an.</string>\n    <string name=\"importer_warning_title_freeotp2\">Kompatibilität mit FreeOTP 2</string>\n    <string name=\"importer_warning_message_freeotp2\">Es gibt in FreeOTP 2 eine Reihe von Problemen, die zu beschädigten Sicherungsdateien führen können. Aegis wird versuchen, so viele Einträge wie möglich zu retten. Es ist möglich, dass das Importieren einiger oder sogar aller Einträge fehlschlägt.</string>\n    <string name=\"importer_help_google_authenticator\"><b>Es werden nur Datenbankdateien von Google Authenticator bis Version 5.10 unterstützt</b>.\\n\\nGib eine Kopie von <b>/data/data/com.google.android.apps.authenticator2/databases/databases</b> an, die sich im internen Speicherverzeichnis von Google Authenticator befindet.</string>\n    <string name=\"importer_help_microsoft_authenticator\">Gib eine Kopie von <b>/data/data/com.azure.authenticator/databases/PhoneFactor</b> an, die sich im internen Speicherverzeichnis von Microsoft Authenticator befindet.</string>\n    <string name=\"importer_help_plain_text\">Gib eine Klartextdatei an, die in jeder Zeile eine Google-Authenticator-URI enthält.</string>\n    <string name=\"importer_help_proton_authenticator\">Gib eine Proton-Authenticator-Exportdatei (.json) an, die du über <b>Einstellungen -&gt; Exportieren</b> erhältst.</string>\n    <string name=\"importer_help_steam\"><b>Steam v3.0 und neuer wird nicht unterstützt</b>. Gib eine Kopie von <b>/data/data/com.valvesoftware.android.steam.community/files/Steamguard-*.json</b> an, die sich im internen Speicherverzeichnis von Steam befindet.</string>\n    <string name=\"importer_help_stratum\">Gib eine Stratum-Exportdatei an, die du über <b>Einstellungen -&gt; Sicherung -&gt; Als verschlüsselte Datei sichern (empfohlen)</b> erhältst.</string>\n    <string name=\"importer_help_totp_authenticator\">Gib eine TOTP-Authenticator-Exportdatei an.</string>\n    <string name=\"importer_help_winauth\">Gib eine WinAuth-Exportdatei an.</string>\n    <string name=\"import_assign_icons_dialog_title\">Symbole zuweisen</string>\n    <string name=\"import_assign_icons_dialog_text\">Möchtest du den importierten Einträgen Symbole zuweisen?</string>\n    <string name=\"importer_encrypted_exception_google_authenticator\">Verschlüsselter Eintrag wurde übersprungen: %s</string>\n    <string name=\"importer_help_direct\">Importiere Einträge direkt aus %s. Dazu muss die App auf diesem Gerät installiert sein und Aegis muss Root-Zugriff gewährt werden.</string>\n    <string name=\"groups\">Gruppen</string>\n    <string name=\"pref_focus_search\">Suche beim App-Start öffnen</string>\n    <string name=\"pref_focus_search_summary\">Die Suche wird sofort nach dem Öffnen der App ausgewählt.</string>\n    <string name=\"pref_grouping_halves\">Hälften</string>\n    <string name=\"pref_grouping_none\">Keine Gruppierung</string>\n    <string name=\"pref_grouping_size_two\">2er-Gruppen</string>\n    <string name=\"pref_grouping_size_three\">3er-Gruppen</string>\n    <string name=\"pref_grouping_size_four\">4er-Gruppen</string>\n    <string name=\"pref_copy_behavior_never\">Niemals</string>\n    <string name=\"pref_copy_behavior_single_tap\">Einmal antippen</string>\n    <string name=\"pref_copy_behavior_double_tap\">Zweimal antippen</string>\n    <string name=\"pref_account_name_position_hidden\">Ausgeblendet</string>\n    <string name=\"pref_account_name_position_end\">Neben dem Herausgeber</string>\n    <string name=\"pref_account_name_position_below\">Unterhalb des Herausgebers</string>\n    <plurals name=\"time_elapsed_seconds\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"one\">vor %d Sekunde</item>\n        <item quantity=\"other\">vor %d Sekunden</item>\n    </plurals>\n    <plurals name=\"time_elapsed_minutes\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"one\">vor %d Minute</item>\n        <item quantity=\"other\">vor %d Minuten</item>\n    </plurals>\n    <plurals name=\"time_elapsed_hours\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"one\">vor %d Stunde</item>\n        <item quantity=\"other\">vor %d Stunden</item>\n    </plurals>\n    <plurals name=\"time_elapsed_days\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"one\">vor %d Tag</item>\n        <item quantity=\"other\">vor %d Tagen</item>\n    </plurals>\n    <plurals name=\"time_elapsed_years\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"one\">vor %d Jahr</item>\n        <item quantity=\"other\">vor %d Jahren</item>\n    </plurals>\n    <plurals name=\"dropdown_checkboxes_default_count\">\n        <item quantity=\"one\">%d Element ausgewählt</item>\n        <item quantity=\"other\">%d Elemente ausgewählt</item>\n    </plurals>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-de-rDE-v29/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"system_theme_title\">Systemvorgabe</string>\n    <string name=\"system_amoled_theme_title\">Systemvorgabe (AMOLED)</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-el-rGR/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources xmlns:tools=\"http://schemas.android.com/tools\">\n    <string name=\"action_settings\">Ρυθμίσεις</string>\n    <string name=\"action_about\">Σχετικά</string>\n    <string name=\"action_delete\">Διαγραφή</string>\n    <string name=\"action_transfer\">Μεταφορά</string>\n    <string name=\"action_edit_icon\">Επεξεργασία εικονιδίου</string>\n    <string name=\"action_reset_usage_count\">Επαναφορά αριθμού χρήσης</string>\n    <string name=\"action_reset_usage_count_dialog\">Είστε βέβαιοι ότι θέλετε να ορίσετε το πλήθος χρήσης αυτής της καταχώρησης σε 0;</string>\n    <string name=\"action_default_icon\">Επαναφορά προεπιλεγμένου εικονιδίου</string>\n    <string name=\"discard\">Απόρριψη</string>\n    <string name=\"save\">Αποθήκευση</string>\n    <string name=\"all\">Όλα</string>\n    <string name=\"issuer\">Εκδότης</string>\n    <string name=\"yandex_pin\">PIN (4-16 ψηφία)</string>\n    <string name=\"motp_pin\">PIN (4 ψηφία)</string>\n    <string name=\"suggested\">Προτεινόμενο</string>\n    <string name=\"usage_count\">Αριθμός χρήσεων</string>\n    <string name=\"warning\">Προειδοποίηση</string>\n    <string name=\"pref_cat_appearance_app\">Εφαρμογή</string>\n    <string name=\"pref_cat_appearance_entries\">Καταχωρήσεις</string>\n    <string name=\"pref_cat_backups_android\">Android</string>\n    <string name=\"pref_cat_backups_auto\">Αυτόματα αντίγραφα ασφαλείας</string>\n    <string name=\"pref_section_behavior_title\">Συμπεριφορά</string>\n    <string name=\"pref_section_behavior_summary\">Προσαρμόστε τη συμπεριφορά κατά την αλληλεπίδραση με τη λίστα καταχωρήσεων.</string>\n    <string name=\"pref_section_appearance_title\">Εμφάνιση</string>\n    <string name=\"pref_section_appearance_summary\">Προσαρμόστε το θέμα, τη γλώσσα και άλλες ρυθμίσεις που επηρεάζουν την εμφάνιση της εφαρμογής.</string>\n    <string name=\"pref_section_security_title\">Ασφάλεια</string>\n    <string name=\"pref_section_security_summary\">Ρύθμιση κρυπτογράφησης, βιομετρικού ξεκλειδώματος, αυτόματου κλειδώματος και άλλων ρυθμίσεων ασφαλείας.</string>\n    <string name=\"pref_section_import_export_title\">Εισαγωγή &amp; Εξαγωγή</string>\n    <string name=\"pref_section_import_export_summary\">Εισαγωγή αντιγράφων ασφαλείας Aegis ή άλλων εφαρμογών ελέγχου ταυτότητας. Δημιουργήστε χειροκίνητες εξαγωγές της κρύπτης Aegis.</string>\n    <string name=\"pref_section_audit_log_title\">Αρχείο καταγραφής ελέγχου</string>\n    <string name=\"pref_section_audit_log_summary\">Βρείτε μια λίστα με όλα τα αναφερόμενα σημαντικά γεγονότα που συνέβησαν στην εφαρμογή.</string>\n    <string name=\"pref_section_backups_title\">Αντίγραφα Ασφαλείας</string>\n    <string name=\"pref_section_backups_summary\">Ρυθμίστε αυτόματα αντίγραφα ασφαλείας σε μια τοποθεσία της επιλογής σας ή ενεργοποιήστε τη συμμετοχή στο σύστημα αντιγράφων ασφαλείας του Android.</string>\n    <string name=\"pref_section_icon_packs\">Πακέτα εικονιδίων</string>\n    <string name=\"pref_section_icon_packs_summary\">Διαχείριση και εισαγωγή πακέτων εικονιδίων</string>\n    <string name=\"pref_select_theme_title\">Θέμα</string>\n    <string name=\"pref_dynamic_colors_title\">Δυναμικά χρώματα</string>\n    <string name=\"pref_dynamic_colors_summary\">Εφαρμόστε μια επικάλυψη με βάση τα χρώματα του θέματός σας Android</string>\n    <string name=\"pref_view_mode_title\">Τρόπος προβολής</string>\n    <string name=\"pref_lang_title\">Γλώσσα</string>\n    <string name=\"pref_show_icons_title\">Εμφάνιση εικονιδίων</string>\n    <string name=\"pref_show_icons_summary\">Εμφάνιση εικονιδίων δίπλα σε κάθε καταχώρηση</string>\n    <string name=\"pref_code_group_size_title\">Ομαδοποίηση ψηφίων κωδικού</string>\n    <string name=\"pref_code_group_size_summary\">Επιλέξτε τον αριθμό των ψηφίων για να ομαδοποιήσετε τους κωδικούς κατά</string>\n    <string name=\"pref_account_name_position_title\">Εμφάνιση του ονόματος λογαριασμού</string>\n    <string name=\"pref_show_next_code_title\">Εμφάνιση επόμενου κωδικού</string>\n    <string name=\"pref_show_next_code_summary\">Δημιουργία και εμφάνιση του επόμενου κωδικού νωρίτερα</string>\n    <string name=\"pref_expiration_state_title\">Ένδειξη όταν οι κωδικοί πρόκειται να λήξουν</string>\n    <string name=\"pref_expiration_state_summary\">Αλλάζει το χρώμα των κωδικών και τους κάνει να αναβοσβήνουν όταν πρόκειται να λήξουν</string>\n    <string name=\"pref_expiration_state_fallback\">Αλλάζει το χρώμα των κωδικών όταν πρόκειται να λήξουν</string>\n    <string name=\"pref_shared_issuer_account_name_title\">Προβολή ονόματος λογαριασμού μόνο αν είναι απαραίτητο</string>\n    <string name=\"pref_shared_issuer_account_name_summary\">Εμφάνιση ονομάτων λογαριασμών μόνο όταν μοιράζονται τον ίδιο εκδότη. Άλλα ονόματα λογαριασμών θα αποκρύπτονται.</string>\n    <string name=\"pref_account_name_position_summary_override\">Αυτή η ρύθμιση αντικαθίσταται από τη λειτουργία προβολής πλακιδίων. Το όνομα λογαριασμού θα εμφανίζεται κάτω από τον εκδότη.</string>\n    <string name=\"pref_import_file_title\">Εισαγωγή από αρχείο</string>\n    <string name=\"pref_import_file_summary\">Εισαγωγή αναγνωριστικών από αρχείο</string>\n    <string name=\"pref_android_backups_title\">Αντίγραφα ασφαλείας cloud Android</string>\n    <string name=\"pref_android_backups_summary\">Επιτρέψτε στο σύστημα δημιουργίας αντιγράφων ασφαλείας cloud του Android να προσθέσει την κρύπτη του Aegis στα αντίγραφα του. Μόνο για κρυπτογραφημένες κρύπτες.</string>\n    <string name=\"pref_android_backups_hint\"><i>Τα αντίγραφα ασφαλείας από συσκευή σε συσκευή (D2D) επιτρέπονται πάντα, ανεξάρτητα από την παραπάνω ρύθμιση</i></string>\n    <string name=\"pref_backups_title\">Αυτόματη δημιουργία αντιγράφων ασφαλείας της κρύπτης</string>\n    <string name=\"pref_backups_summary\">Αυτόματη δημιουργία αντιγραφών ασφαλείας της κρύπτης σε εξωτερικό χώρο αποθήκευσης όταν γίνονται αλλαγές. Υποστηρίζεται μόνο για κρυπτογραφημένες κρύπτες.</string>\n    <string name=\"pref_backups_reminder_title\">Υπενθύμιση για αντίγραφα</string>\n    <string name=\"pref_backups_reminder_summary\">Εμφάνιση υπενθύμισης για δημιουργία αντιγράφων ασφαλείας σε περίπτωση που δεν έχετε δημιουργήσει αντίγραφα των τελευταίων σας αλλαγών.</string>\n    <string name=\"pref_backups_reminder_dialog_title\">Απενεργοποίηση υπενθύμισης αντιγράφων</string>\n    <string name=\"pref_backups_reminder_dialog_summary\">Η απενεργοποίηση αυτής της υπενθύμισης σημαίνει ότι το Aegis δεν θα σας ενημερώσει εάν έχετε ή όχι αλλαγές για τις οποίες δεν έχουν δημιουργηθεί ακόμα αντίγραφα. Μπορεί να χάσετε την πρόσβαση στα διακριτικά σας. Σίγουρα θέλετε να απενεργοποιήσετε την υπενθύμιση;</string>\n    <string name=\"pref_backups_versioning_strategy_title\">Στρατηγική αντιγράφων ασφαλείας</string>\n    <string name=\"pref_backups_versioning_strategy_keep_x_versions\">Διατήρηση αρκετών εκδόσεων</string>\n    <string name=\"pref_backups_versioning_strategy_single_backup\">Μονό αντίγραφο ασφαλείας</string>\n    <string name=\"pref_backups_versioning_strategy_single_backup_warning\">Η επιλεγμένη στρατηγική δημιουργίας αντιγράφων ασφαλείας δεν είναι αξιόπιστη και δεν συνιστάται. Μια μεμονωμένη αποτυχία δημιουργίας αντιγράφων ασφαλείας μπορεί να οδηγήσει στην απώλεια του μοναδικού αντιγράφου ασφαλείας.</string>\n    <string name=\"pref_backups_versioning_strategy_dialog_title\">Επιλέξτε την στρατηγική αντιγράφων</string>\n    <string name=\"pref_backups_location_title\">Τοποθεσία αντιγράφου ασφαλείας</string>\n    <string name=\"pref_backups_location_summary\">Τα αντίγραφα ασφαλείας θα αποθηκευτούν στo</string>\n    <string name=\"pref_backup_location_summary\">Το αντίγραφο ασφαλείας θα αποθηκευτεί στο</string>\n    <string name=\"pref_backups_trigger_title\">\\'Εναυσμα αντιγράφου ασφαλείας</string>\n    <string name=\"pref_backups_trigger_summary\">Χειροκίνητη δημιουργία αντιγράφου</string>\n    <string name=\"pref_backups_versions_title\">Αριθμός εκδόσεων που θα κρατηθούν</string>\n    <string name=\"pref_backups_versions_infinite\">\\u221E</string>\n    <plurals name=\"pref_backups_versions_summary\">\n        <item quantity=\"one\">Διατηρήστε την %1$d έκδοση του αντιγράφου ασφαλείας</item>\n        <item quantity=\"other\">Διατηρήστε τις %1$d εκδόσεις του αντιγράφου ασφαλείας</item>\n    </plurals>\n    <string name=\"pref_backups_versions_infinite_summary\">Διατηρήστε έναν άπειρο αριθμό εκδόσεων του αντιγράφου ασφαλείας</string>\n    <string name=\"pref_import_app_title\">Εισαγωγή από εφαρμογή</string>\n    <string name=\"pref_import_app_summary\">Εισαγωγή αναγνωριστικών από εφαρμογή (απαιτείται πρόσβαση root)</string>\n    <string name=\"pref_export_title\">Εξαγωγή</string>\n    <string name=\"pref_export_summary\">Εξαγωγή κρύπτης</string>\n    <string name=\"pref_password_reminder_title\">Υπενθύμιση κωδικού</string>\n    <string name=\"pref_google_auth_export_title\">Εξαγωγή για τον Επαληθευτή Google</string>\n    <string name=\"pref_google_auth_export_descriptor\">Δημιουργεί εξαγωγή κωδικών QR συμβατών με το Google Authenticator</string>\n    <string name=\"pref_google_auth_export_no_data\">Δεν υπάρχουν δεδομένα για εξαγωγή</string>\n    <plurals name=\"pref_google_auth_export_incompatible_entries\">\n        <item quantity=\"one\">Παράλειψη %d μη συμβατής καταχώρησης</item>\n        <item quantity=\"other\">Παράλειψη %d μη συμβατών καταχωρήσεων</item>\n    </plurals>\n    <string name=\"pref_password_reminder_summary\">Προβολή μιας υπενθύμισης %s για να εισαγάγετε τον κωδικό πρόσβασης, ώστε να μην τον ξεχάσετε.</string>\n    <string name=\"pref_password_reminder_summary_disabled\">Απενεργοποιημένο</string>\n    <string name=\"pref_secure_screen_title\">Ασφάλεια οθόνης</string>\n    <string name=\"pref_secure_screen_summary\">Αποκλεισμός στιγμιότυπων οθόνης και άλλων προσπαθειών για καταγραφή της οθόνης μέσα στην εφαρμογή</string>\n    <string name=\"pref_tap_to_reveal_title\">Πατήστε για εμφάνιση</string>\n    <string name=\"pref_tap_to_reveal_summary\">Απόκρυψη αναγνωριστικών από προεπιλογή. Πατήστε στα αναγνωριστικά για να εμφανιστεί ο κωδικός.</string>\n    <string name=\"pref_tap_to_reveal_time_title\">Χρονικό όριο πατήματος εμφάνισης</string>\n    <string name=\"pref_auto_lock_title\">Αυτόματο κλείδωμα</string>\n    <string name=\"pref_auto_lock_summary\">Όταν %s</string>\n    <string name=\"pref_auto_lock_summary_disabled\">Απενεργοποιημένο</string>\n    <string name=\"pref_auto_lock_prompt\">Αυτόματο κλείδωμα Aegis όταν</string>\n    <string name=\"pref_auto_lock_type_back_button\">Πατάτε το κουμπί πίσω</string>\n    <string name=\"pref_auto_lock_type_minimize\">Η εφαρμογή ελαχιστοποιείται</string>\n    <string name=\"pref_auto_lock_type_device_lock\">Η συσκευή είναι κλειδωμένη</string>\n    <string name=\"pref_backup_password_category\">Αντίγραφα ασφαλείας &amp; Εξαγωγή</string>\n    <string name=\"pref_backup_password_title\">Ξεχωριστός κωδικός για δημιουργία αντίγραφα &amp; εξαγωγή</string>\n    <string name=\"pref_backup_password_summary\">Εάν είναι ενεργοποιημένο, ο κωδικός πρόσβασης που χρησιμοποιείται για το ξεκλείδωμα της εφαρμογής δεν μπορεί πλέον να χρησιμοποιηθεί για την αποκρυπτογράφηση αντιγράφων ασφαλείας και εξαγωγές.</string>\n    <string name=\"pref_backup_password_change_title\">Αλλαγή κωδικού πρόσβασης για δημιουργία αντιγράφων &amp; εξαγωγή</string>\n    <string name=\"pref_backup_password_change_summary\">Ορίστε έναν νέο κωδικό πρόσβασης που θα χρησιμοποιείται για την κρυπτογράφηση της κρύπτης κατά τη δημιουργία αντιγράφων και την εξαγωγή.</string>\n    <string name=\"pref_encryption_title\">Κρυπτογράφηση</string>\n    <string name=\"pref_encryption_summary\">Κρυπτογράφηση της κρύπτης και ξεκλείδωμα με κωδικό ή βιομετρία</string>\n    <string name=\"pref_biometrics_title\">Βιομετρικό ξεκλείδωμα</string>\n    <string name=\"pref_biometrics_summary\">Αποδοχή βιομετρικής πιστοποίησης για να ξεκλείδωμα κρύπτης</string>\n    <string name=\"pref_search_behavior_summary\">Αναζήτηση μέσω: %s</string>\n    <string name=\"pref_search_behavior_prompt\">Αναζήτηση σε οποιοδήποτε από τα ακόλουθα πεδία</string>\n    <string name=\"pref_search_behavior_type_name\">Όνομα</string>\n    <string name=\"pref_search_behavior_type_issuer\">Εκδότης</string>\n    <string name=\"pref_search_behavior_type_note\">Σημείωση</string>\n    <string name=\"pref_search_behavior_type_groups\">Ομάδες</string>\n    <string name=\"pref_set_password_title\">Αλλαγή κωδικού</string>\n    <string name=\"pref_set_password_summary\">Ορισμός νέου κωδικού που θα χρειαστεί για να ξεκλειδώσετε την κρύπτης σας</string>\n    <string name=\"no_events_title\">Δεν έχουν αναφερθεί συμβάντα</string>\n    <string name=\"no_events_description\">Δεν έχουν αναφερθεί σημαντικά συμβάντα στην εφαρμογή</string>\n    <string name=\"event_title_vault_unlocked\">Η κρύπτη ξεκλειδώθηκε</string>\n    <string name=\"event_description_vault_unlocked\">Η κρύπτη ξεκλειδώθηκε επιτυχώς</string>\n    <string name=\"event_title_backup_created\">Δημιουργήθηκε αντίγραφο ασφαλείας</string>\n    <string name=\"event_description_backup_created\">Ένα αντίγραφο ασφαλείας της κρύπτης δημιουργήθηκε με επιτυχία</string>\n    <string name=\"event_title_android_backup_created\">Δημιουργήθηκε αντίγραφο ασφαλείας από το Android</string>\n    <string name=\"event_description_android_backup_created\">Δημιουργήθηκε ένα αντίγραφο ασφαλείας επιτυχώς από το Android</string>\n    <string name=\"event_title_vault_exported\">Η κρύπτη εξήχθη</string>\n    <string name=\"event_description_vault_exported\">Ένα αντίγραφο της κρύπτης έχει εξαχθεί</string>\n    <string name=\"event_title_entry_shared\">Η καταχώριση κοινοποιήθηκε</string>\n    <string name=\"event_description_entry_shared\">Μια καταχώρηση κοινοποιήθηκε</string>\n    <string name=\"event_title_vault_unlock_failed_password\">Το ξεκλείδωμα της κρύπτης απέτυχε (κωδικός)</string>\n    <string name=\"event_description_vault_unlock_failed_password\">Αποτυχία προσπάθειας ξεκλειδώματος της κρύπτης με κωδικό πρόσβασης</string>\n    <string name=\"event_title_vault_unlock_failed_biometrics\">Το ξεκλείδωμα της κρύπτης απέτυχε (βιομετρικά)</string>\n    <string name=\"event_description_vault_unlock_failed_biometrics\">Αποτυχία προσπάθειας ξεκλειδώματος της κρύπτης με βιομετρικά στοιχεία</string>\n    <string name=\"event_unknown\">Άγνωστος τύπος συμβάντος</string>\n    <string name=\"audit_log_entry_deleted\">(διαγράφηκε)</string>\n    <string name=\"today_at_time\">Σήμερα στις %1$s</string>\n    <string name=\"day_of_week_at_time\">%1$s στις %2$s</string>\n    <string name=\"export_encrypted\">Κρυπτογράφηση κρύπτης</string>\n    <string name=\"export_help\">Αυτή η ενέργεια θα εξάγει την κρύπτη έξω από τον εσωτερικό χώρο αποθήκευσης του Aegis. Επιλέξτε τη μορφή στην οποία θέλετε να είναι η εξαγωγή σας:</string>\n    <string name=\"export_warning_unencrypted\">Πρόκειται να εξαγάγετε ένα μη κρυπτογραφημένο αντίγραφο της Aegis κρύπτης σας. <b> Αυτό δεν συνιστάται </b>.</string>\n    <string name=\"export_warning_password\">Οι εξαγωγές κρυπτογραφούνται χρησιμοποιώντας ένα ξεχωριστό κωδικό πρόσβασης που έχει ρυθμιστεί στις ρυθμίσεις ασφαλείας.</string>\n    <string name=\"understand_risk_accept\">Κατανοώ τους κινδύνους</string>\n    <string name=\"export_format_aegis\">Aegis (.JSON)</string>\n    <string name=\"export_format_google_auth_uri\">Αρχείο κειμένου (*.TXT)</string>\n    <string name=\"export_format_html\">Ιστοσελίδα (.HTML)</string>\n    <string name=\"export_format_hint\">Μορφή εξαγωγής</string>\n    <string name=\"export_all_groups\">Εξαγωγή όλων των ομάδων</string>\n    <string name=\"export_choose_groups\">Επιλέξτε ποιες ομάδες θα εξαχθούν</string>\n    <plurals name=\"export_groups_selected_count\">\n        <item quantity=\"one\">%d ομάδα επιλέχθηκε</item>\n        <item quantity=\"other\">%d ομάδες επιλέχθηκαν</item>\n    </plurals>\n    <string name=\"export_no_groups_selected\">Δεν επιλέχθηκαν ομάδες για εξαγωγή</string>\n    <string name=\"export_html_title\" comment=\"The title of an HTML export document\">Εξαγωγή Aegis Authenticator</string>\n    <string name=\"choose_authentication_method\">Ασφάλεια</string>\n    <string name=\"authentication_method_explanation\">Το Aegis είναι μια εφαρμογή 2FA επικεντρωμένη στην ασφάλεια. Τα αναγνωριστικά αποθηκεύονται σε μία κρύπτη, η οποία μπορεί προαιρετικά να κρυπτογραφηθεί με έναν κωδικό της επιλογής σας. Αν κάποιος εισβολέας αποκτήσει το κρυπτογραφημένο αρχείο της κρύπτης σας, δεν θα έχει πρόσβαση στα περιεχόμενα χωρίς να γνωρίζει τον κωδικό.\\n\\nΈχουμε προεπιλέξει την επιλογή που νομίζουμε ότι θα ταιριάζει καλύτερα στη συσκευή σας.</string>\n    <string name=\"authentication_method_none\">Καμία</string>\n    <string name=\"authentication_method_none_description\">Δεν απαιτείται κωδικός πρόσβασης για να ξεκλειδώσετε την κρύπτη και δεν θα κρυπτογραφηθεί. <b> Αυτή η επιλογή δεν συνιστάται </b>.</string>\n    <string name=\"authentication_method_password\">Κωδικός πρόσβασης</string>\n    <string name=\"authentication_method_password_description\">Απαιτείται κωδικός πρόσβασης για να ξεκλειδώσετε την κρύπτη.</string>\n    <string name=\"authentication_method_password_explanation\">Προειδοποίηση: Εάν ξεχάσετε τον κωδικό πρόσβασης σας, θα χάσετε μόνιμα πρόσβαση στα αναγνωριστικά σας. Δεν υπάρχει τρόπος να τα ανακτήσετε χωρίς τον κωδικό πρόσβασης.</string>\n    <string name=\"authentication_method_biometrics\">Βιομετρικά</string>\n    <string name=\"authentication_method_biometrics_description\">Εκτός από έναν κωδικό πρόσβασης, τα βιομετρικά στοιχεία που έχουν καταχωρηθεί σε αυτήν τη συσκευή, όπως ένα δακτυλικό αποτύπωμα ή το πρόσωπό σας, μπορούν να χρησιμοποιηθούν για να ξεκλειδώσετε την κρύπτη σας.</string>\n    <string name=\"authentication\">Ξεκλείδωμα της κρύπτης</string>\n    <string name=\"authentication_multiline\" comment=\"The newline in the middle is used for aesthetic purposes\">Ξεκλείδωμα\\nτης κρύπτης</string>\n    <string name=\"auth_use_biometrics\">Ή πατήστε εδώ για να χρησιμοποιήσετε <font fgcolor=\"#FF0D86C1\">βιομετρία</font></string>\n    <string name=\"set_password\">Παρακαλώ εισάγετε έναν κωδικό πρόσβασης</string>\n    <string name=\"set_group\">Παρακαλώ εισάγετε όνομα ομάδας</string>\n    <string name=\"set_number\">Παρακαλώ εισάγετε αριθμό</string>\n    <string name=\"set_password_confirm\">Παρακαλώ επιβεβαιώστε τον κωδικό</string>\n    <string name=\"invalid_password\">Ο κωδικός πρόσβασης είναι λάθος</string>\n    <string name=\"invalidated_biometrics\">Έχει εντοπιστεί μια αλλαγή στις ρυθμίσεις ασφαλείας της συσκευής σας. Παρακαλώ μεταβείτε στο \\\"Aegis -&gt; Ρυθμίσεις -&gt; Ασφάλεια -&gt; Βιομετρικό ξεκλείδωμα\\\" για να απενεργοποιήσετε και να ξανά ενεργοποιήσετε το βιομετρικό ξεκλείδωμα.</string>\n    <string name=\"password_reminder\">Παρακαλούμε εισάγετε τον κωδικό σας. Σας ζητάμε περιστασιακά να το κάνετε αυτό ώστε να μην τον ξεχάσετε.</string>\n    <string name=\"password_reminder_dialog_title\">Βιομετρικό ξεκλείδωμα από προεπιλογή</string>\n    <string name=\"password_reminder_dialog_message\">Σας προτρέπουμε περιστασιακά να εισάγετε τον κωδικό πρόσβασής σας για να διασφαλίσετε ότι δεν τον έχετε ξεχάσει και δεν μείνετε εκτός της κρύπτης σας. Μετά την εισαγωγή του κωδικού πρόσβασής σας μία φορά, το Aegis θα επανέλθει στο βιομετρικό ξεκλείδωμα μέχρι να έρθει η ώρα για μια άλλη υπενθύμιση κωδικού πρόσβασης.</string>\n    <string name=\"password_reminder_freq_never\">Ποτέ</string>\n    <string name=\"password_reminder_freq_weekly\">Εβδομαδιαία</string>\n    <string name=\"password_reminder_freq_biweekly\">Ανά δύο εβδομάδες</string>\n    <string name=\"password_reminder_freq_monthly\">Μηνιαία</string>\n    <string name=\"password_reminder_freq_quarterly\">Τριμηνιαία</string>\n    <string name=\"enter_password_2fas_message\">Φαίνεται ότι αυτό το αντίγραφο ασφαλείας 2FAS είναι κρυπτογραφημένο. Παρακαλώ εισάγετε τον κωδικό πρόσβασης παρακάτω.</string>\n    <string name=\"enter_password_authy_message\">Φαίνεται ότι τα Authy αναγνωριστικά σας είναι κρυπτογραφημένα. Κλείστε το Aegis, ανοίξτε το Authy και ξεκλειδώστε τα αναγνωριστικά με τον κωδικό πρόσβασής σας. Αντ \\'αυτού, ο Aegis μπορεί επίσης να προσπαθήσει να αποκρυπτογραφήσει τα διακριτικά Authy για εσάς, εάν εισαγάγετε τον κωδικό πρόσβασής σας παρακάτω.</string>\n    <string name=\"enter_password_aegis_title\">Παρακαλώ εισάγετε τον κωδικό εισαγωγής</string>\n    <string name=\"period_hint\">Περίοδος (δευτερόλεπτα)</string>\n    <string name=\"algorithm_hint\">Λειτουργία Hash</string>\n    <string name=\"type\">Τύπος</string>\n    <string name=\"share\">Κοινοποίηση</string>\n    <string name=\"yes\">Ναι</string>\n    <string name=\"no\">Όχι</string>\n    <string name=\"undo\">Αναίρεση</string>\n    <string name=\"unlock\">Ξεκλείδωμα</string>\n    <string name=\"advanced\">Σύνθετες</string>\n    <string name=\"counter\">Μετρητής</string>\n    <string name=\"digits\">Ψηφία</string>\n    <string name=\"secret\">Μυστικός κωδικός</string>\n    <string name=\"scan\">Σάρωση κωδικού QR</string>\n    <string name=\"scan_image\">Σάρωση εικόνας</string>\n    <string name=\"enter_manually\">Χειροκίνητη εισαγωγή</string>\n    <string name=\"set_up_biometric\">Ρύθμιση βιομετρικού ξεκλειδώματος</string>\n    <string name=\"copy\">Αντιγραφή</string>\n    <string name=\"edit\">Επεξεργασία</string>\n    <string name=\"select_all\">Επιλογή όλων</string>\n    <string name=\"assign_icons\">Αντιστοίχιση εικονιδίων</string>\n    <string name=\"assign_groups\">Αντιστοίχιση σε ομάδα</string>\n    <string name=\"assign_groups_dialog_summary\">Επιλέξτε μια ομάδα στην οποία θέλετε να αντιστοιχίσετε τις επιλεγμένες καταχωρήσεις.</string>\n    <string name=\"assign_groups_dialog_dropdown\">Επιλογή ομάδας</string>\n    <string name=\"favorite\" comment=\"Verb\">Προσθήκη στα αγαπημένα</string>\n    <string name=\"unfavorite\" comment=\"Verb\">Αφαίρεση από αγαπημένα</string>\n    <string name=\"error_all_caps\">ΣΦΑΛΜΑ</string>\n    <string name=\"password\">Κωδικός πρόσβασης</string>\n    <string name=\"confirm_password\">Επιβεβαίωση κωδικού</string>\n    <string name=\"show_password\">Προβολή κωδικού</string>\n    <string name=\"new_entry\">Νέα καταχώρηση</string>\n    <string name=\"add_new_entry\">Προσθήκη νέας καταχώρησης</string>\n    <string name=\"unlock_vault_error\">Αδυναμία ξεκλειδώματος κρύπτης</string>\n    <string name=\"unlock_vault_error_description\">Εσφαλμένος κωδικός. Βεβαιωθείτε ότι δεν πληκτρολογήσατε λάθος τον κωδικό πρόσβασής σας.</string>\n    <string name=\"password_equality_error\">Οι κωδικοί πρέπει να είναι ίδιοι και να μην είναι κενοί</string>\n    <string name=\"snackbar_authentication_method\">Παρακαλώ επιλέξτε μέθοδο ελέγχου ταυτότητας</string>\n    <string name=\"encrypting_vault\">Κρυπτογράφηση κρύπτης</string>\n    <string name=\"exporting_vault\">Εξαγωγή της κρύπτης</string>\n    <string name=\"optimizing_icon\">Βελτιστοποίηση εικονιδίου</string>\n    <string name=\"optimizing_icon_multiple\">Βελτιστοποίηση εικονιδίων %1$d/%2$d</string>\n    <string name=\"reading_file\">Ανάγνωση αρχείου</string>\n    <string name=\"requesting_root_access\">Αίτηση πρόσβασης root</string>\n    <string name=\"analyzing_qr\">Ανάλυση κωδικού QR</string>\n    <string name=\"analyzing_qr_multiple\">Ανάλυση κωδικού QR %1$d/%2$d (%3$s)</string>\n    <plurals name=\"added_new_entries\">\n        <item quantity=\"one\">Προστέθηκε %d νέα καταχώρηση στην κρύπτη</item>\n        <item quantity=\"other\">Προστέθηκαν %d νέες καταχωρήσεις στην κρύπτη</item>\n    </plurals>\n    <string name=\"importing_icon_pack\">Εισαγωγή πακέτου εικονιδίων</string>\n    <string name=\"delete_entry\">Διαγραφή καταχώρησης</string>\n    <string name=\"delete_entry_description\">Είστε βέβαιοι ότι θέλετε να διαγράψετε αυτή την καταχώρηση;</string>\n    <string name=\"delete_entry_explanation\">Αυτή η ενέργεια δεν απενεργοποιεί το 2FA για:\\n<b>%s</b>\\n\\nΓια να αποτρέψετε την απώλεια πρόσβασης, βεβαιωθείτε ότι έχετε απενεργοποιήσει το 2FA ή ότι έχετε έναν εναλλακτικό τρόπο δημιουργίας κωδικών για αυτήν την υπηρεσία.</string>\n    <string name=\"delete_entries\">Διαγραφή καταχωρήσεων</string>\n    <plurals name=\"delete_entries_description\">\n        <item quantity=\"one\">Είστε βέβαιοι ότι θέλετε να διαγράψετε %d καταχώρηση;</item>\n        <item quantity=\"other\">Είστε βέβαιοι ότι θέλετε να διαγράψετε %d καταχωρήσεις;</item>\n    </plurals>\n    <string name=\"discard_changes\">Απόρριψη αλλαγών;</string>\n    <string name=\"discard_changes_description\">Οι αλλαγές σας δεν έχουν αποθηκευτεί</string>\n    <string name=\"saving_profile_error\">Σφάλμα κατά την αποθήκευση προφίλ</string>\n    <string name=\"saving_assign_icons_error\">Σφάλμα κατά την αντιστοίχιση εικονιδίων</string>\n    <string name=\"welcome\">Καλώς ήρθατε</string>\n    <string name=\"app_description\">Το Aegis είναι μια δωρεάν, ασφαλής και ανοικτού κώδικα εφαρμογή 2FA</string>\n    <string name=\"setup_completed\">Η εγκατάσταση ολοκληρώθηκε</string>\n    <string name=\"setup_completed_description\">Το Aegis έχει ρυθμιστεί και είναι έτοιμο προς χρήση.</string>\n    <string name=\"vault_not_found\">Η κρύπτη δεν βρέθηκε, έναρξη ρύθμισης…</string>\n    <string name=\"copied\">Αντιγράφηκε</string>\n    <string name=\"errors_copied\">Αντιγράφηκαν σφάλματα στο πρόχειρο</string>\n    <string name=\"version_copied\">Η έκδοση αντιγράφτηκε στο πρόχειρο</string>\n    <string name=\"error_required_field\">Αυτό το πεδίο είναι υποχρεωτικό</string>\n    <string name=\"error_occurred\">Παρουσιάστηκε σφάλμα</string>\n    <string name=\"decryption_error\">Παρουσιάστηκε σφάλμα κατά την προσπάθεια ξεκλειδώματος της κρύπτης</string>\n    <string name=\"decryption_corrupt_error\">Παρουσιάστηκε σφάλμα κατά την προσπάθεια ξεκλειδώματος της κρύπτης. Το αρχείο κρύπτης σας ενδέχεται να είναι κατεστραμμένο.</string>\n    <string name=\"saving_error\">Παρουσιάστηκε σφάλμα κατά την προσπάθεια αποθήκευσης της κρύπτης</string>\n    <string name=\"vault_init_error\">Παρουσιάστηκε σφάλμα κατά την προσπάθεια προετοιμασίας της κρύπτης</string>\n    <string name=\"vault_load_error\">Παρουσιάστηκε σφάλμα κατά την προσπάθεια φόρτωσης της κρύπτης από τον χώρο αποθήκευσης</string>\n    <string name=\"biometric_decrypt_error\">Παρουσιάστηκε σφάλμα κατά την προσπάθεια αποκρυπτογράφησης της κρύπτης με βιομετρικό έλεγχο ταυτότητας. Αυτό συμβαίνει συνήθως μόνο εάν αλλάξουν οι ρυθμίσεις ασφαλείας της συσκευής σας. Ξεκλειδώστε την κρύπτη με τον κωδικό πρόσβασής σας και διαμορφώστε εκ νέου τον βιομετρικό έλεγχο ταυτότητας στις ρυθμίσεις του Aegis.</string>\n    <string name=\"biometric_init_error\">Παρουσιάστηκε σφάλμα κατά την προσπάθεια προετοιμασίας βιομετρικού ελέγχου ταυτότητας. Αυτό συμβαίνει συνήθως μόνο εάν αλλάξουν οι ρυθμίσεις ασφαλείας της συσκευής σας. Ξεκλειδώστε την κρύπτη με τον κωδικό πρόσβασης σας και αναδιαμορφώστε τον βιομετρικό έλεγχο ταυτότητας στις ρυθμίσεις του Aegis.</string>\n    <string name=\"disable_encryption\">Απενεργοποίηση κρυπτογράφησης</string>\n    <string name=\"disable_encryption_description\">Είστε βέβαιοι ότι θέλετε να απενεργοποιήσετε την κρυπτογράφηση; Αυτό θα έχει ως αποτέλεσμα η κρύπτη να αποθηκευτεί σε απλό κείμενο. <b>Τα αυτόματα αντίγραφα ασφαλείας θα απενεργοποιηθούν επίσης</b>.</string>\n    <string name=\"enable_encryption_error\">Παρουσιάστηκε σφάλμα κατά την ενεργοποίηση της κρυπτογράφησης</string>\n    <string name=\"disable_encryption_error\">Παρουσιάστηκε σφάλμα κατά την απενεργοποίηση της κρυπτογράφησης</string>\n    <string name=\"backup_successful\">Το αντίγραφο ασφαλείας προγραμματίστηκε με επιτυχία</string>\n    <string name=\"backup_error\">Παρουσιάστηκε σφάλμα κατά την προσπάθεια δημιουργίας αντιγράφου ασφαλείας</string>\n    <string name=\"backup_status_success\">Η πιο πρόσφατη δημιουργία αντιγράφων ασφαλείας ήταν επιτυχής: %s</string>\n    <string name=\"backup_status_failed\">Η πιο πρόσφατη δημιουργία αντιγράφων ασφαλείας απέτυχε: %s</string>\n    <string name=\"backup_status_none\">Δεν έχουν δημιουργηθεί ακόμα αντίγραφα ασφαλείας</string>\n    <string name=\"backup_warning_password\">Τα αντίγραφα ασφαλείας κρυπτογραφούνται χρησιμοποιώντας ένα ξεχωριστό κωδικό πρόσβασης που έχει ρυθμιστεί στις ρυθμίσεις ασφαλείας</string>\n    <string name=\"documentsui_error\">Το DocumentsUI φαίνεται να λείπει από τη συσκευή σας. Αυτό είναι ένα σημαντικό στοιχείο συστήματος απαραίτητο για την επιλογή και τη δημιουργία εγγράφων. Εάν χρησιμοποιήσατε ένα εργαλείο για να κάνετε &quot;debloat&quot; τη συσκευή σας, μπορεί να το έχετε διαγράψει κατά λάθος και θα πρέπει να το επανεγκαταστήσετε.</string>\n    <string name=\"icon_pack_import_error\">Παρουσιάστηκε σφάλμα κατά την εισαγωγή ενός πακέτου εικονιδίων</string>\n    <string name=\"icon_pack_import_exists_error\">Το πακέτο εικονιδίων που προσπαθείτε να εισαγάγετε υπάρχει ήδη. Θέλετε να το αντικαταστήσετε;</string>\n    <string name=\"icon_pack_delete_error\">Παρουσιάστηκε σφάλμα κατά τη διαγραφή ενός πακέτου εικονιδίων</string>\n    <plurals name=\"icon_pack_info\">\n        <item quantity=\"one\">%d εικονίδιο</item>\n        <item quantity=\"other\">%d εικονίδια</item>\n    </plurals>\n    <string name=\"icon_custom\">Προσαρμοσμένο</string>\n    <string name=\"permission_denied\">Η άδεια απορρίφθηκε</string>\n    <string name=\"andotp_new_format\">Νέα μορφή (v0.6.3 ή νεότερη) </string>\n    <string name=\"andotp_old_format\">Παλιά μορφή (v0.6.2 ή παλαιότερη) </string>\n    <string name=\"choose_andotp_importer\">Ποια μορφή έχει το αρχείο αντιγράφου ασφαλείας andOTP;</string>\n    <string name=\"choose_totpauth_importer\">Είναι αυτό το αντίγραφο ασφαλείας TOTP Authenticator κρυπτογραφημένο με κωδικό πρόσβασης;</string>\n    <string name=\"choose_application\">Επιλέξτε την εφαρμογή από την οποία θέλετε να εισαγάγετε</string>\n    <string name=\"choose_theme\">Επιλέξτε το θέμα που θέλετε</string>\n    <string name=\"choose_account_name_position\">Επιλέξτε την επιθυμητή θέση ονόματος λογαριασμού</string>\n    <string name=\"choose_view_mode\">Επιλέξτε τη λειτουργία προβολής που θέλετε</string>\n    <string name=\"choose_copy_behavior\">Επιλέξτε την επιθυμητή συμπεριφορά αντιγραφής</string>\n    <string name=\"parsing_file_error\">Παρουσιάστηκε σφάλμα κατά την προσπάθεια ανάλυσης του αρχείου</string>\n    <string name=\"file_not_found\">Σφάλμα: Το αρχείο δεν βρέθηκε</string>\n    <string name=\"reading_file_error\">Παρουσιάστηκε σφάλμα κατά την προσπάθεια ανάγνωσης του αρχείου</string>\n    <string name=\"app_lookup_error\">Σφάλμα: Η εφαρμογή δεν έχει εγκατασταθεί</string>\n    <string name=\"app_version_error\">Η έκδοση του %s που έχει εγκατασταθεί δεν υποστηρίζεται. Πρόσφατες εκδόσεις έχουν αρχίσει να κρυπτογραφούν μερικά από τα αρχεία στον εσωτερικό κατάλογο αποθήκευσης, καθιστώντας το Aegis ανίκανο να αποκτήσει πρόσβαση στις πληροφορίες που χρειάζεται για την εισαγωγή. Η προσπάθεια εισαγωγής είναι πιθανό να οδηγήσει σε σφάλμα. Θα θέλατε να συνεχίσετε ούτως ή άλλως;</string>\n    <string name=\"root_error\">Σφάλμα: Αδυναμία απόκτησης πρόσβασης root</string>\n    <plurals name=\"imported_entries_count\">\n        <item quantity=\"one\">Εισήχθησαν %d καταχώρηση</item>\n        <item quantity=\"other\">Εισήχθησαν %d καταχωρήσεις</item>\n    </plurals>\n    <plurals name=\"entries_shown\">\n        <item quantity=\"one\">Εμφάνιση %d καταχώρησης</item>\n        <item quantity=\"other\">Εμφάνιση %d καταχωρήσεων</item>\n    </plurals>\n    <string name=\"intro_import_error_title\">Παρουσιάστηκε σφάλμα κατά την εισαγωγή της κρύπτης</string>\n    <string name=\"import_error_title\">Παρουσιάστηκαν ένα ή περισσότερα σφάλματα κατά την εισαγωγή</string>\n    <string name=\"exporting_vault_error\">Παρουσιάστηκε σφάλμα κατά την προσπάθεια εξαγωγής της κρύπτης</string>\n    <string name=\"exported_vault\">Η κρύπτη έχει εξαχθεί</string>\n    <string name=\"encryption_set_password_error\">Παρουσιάστηκε σφάλμα κατά την προσπάθεια ορισμού του κωδικού πρόσβασης.</string>\n    <string name=\"encryption_enable_biometrics_error\">Παρουσιάστηκε σφάλμα κατά την προσπάθεια ενεργοποίησης του βιομετρικού ξεκλειδώματος. Ορισμένες συσκευές έχουν κακή εφαρμογή βιομετρικού ελέγχου ταυτότητας και είναι πιθανό ότι η δική σας είναι μία από αυτές. Εξετάστε το ενδεχόμενο εναλλαγής σε διαμόρφωση μόνο με κωδικό πρόσβασης.</string>\n    <string name=\"no_cameras_available\">Καμία διαθέσιμη κάμερα</string>\n    <string name=\"read_qr_error\">Παρουσιάστηκε σφάλμα κατά την προσπάθεια ανάγνωσης του κωδικού QR</string>\n    <string name=\"read_qr_error_phonefactor\">Το Aegis δεν είναι συμβατό με τον ιδιόκτητο αλγόριθμο 2FA της Microsoft. Βεβαιωθείτε να επιλέξετε \\\"Ρύθμιση εφαρμογής χωρίς ειδοποιήσεις\\\" κατά τη διαμόρφωση του 2FA στο Office 365.</string>\n    <string name=\"partial_google_auth_import\">Εντοπίστηκε ημιτελής εξαγωγή του Επαληθευτή Google</string>\n    <string name=\"partial_google_auth_import_warning\">Ορισμένοι κωδικοί QR λείπουν από την εισαγωγή σας. Οι ακόλουθοι κωδικοί δεν βρέθηκαν:\\n\\n<b>%s</b>\\n\\nΜπορείτε να συνεχίσετε την εισαγωγή αυτής της μερικής εξαγωγής, αλλά σας συνιστούμε να ξαναδοκιμάσετε με όλους τους κωδικούς QR ώστε να μην κινδυνεύετε να χάσετε πρόσβαση σε οποιαδήποτε αναγνωστικά.</string>\n    <string name=\"missing_qr_code_descriptor\">• Κωδικός QR %d</string>\n    <plurals name=\"import_partial_export_anyway\">\n        <item quantity=\"one\">Εισαγωγή %d αναγνωριστικού ούτως ή άλλως</item>\n        <item quantity=\"other\">Εισαγωγή %d αναγνωριστικών ούτως ή άλλως</item>\n    </plurals>\n    <string name=\"import_google_auth_failure\">Η εισαγωγή της εξαγωγής του Επαληθευτή Google απέτυχε</string>\n    <string name=\"unrelated_google_auth_batches_error\">Η εξαγωγή περιέχει πληροφορίες για μια άσχετη παρτίδα. Δοκιμάστε να εισαγάγετε 1 παρτίδα τη φορά.</string>\n    <string name=\"no_tokens_can_be_imported\">Ως αποτέλεσμα, δεν μπορούν να εισαχθούν αναγνωστικά</string>\n    <string name=\"unlocking_vault\">Ξεκλείδωμα κρύπτης</string>\n    <string name=\"rename_group\">Μετονομασία Ομάδας</string>\n    <string name=\"no_group_selection\">Εάν μια καταχώρηση δεν αποτελεί μέρος οποιασδήποτε ομάδας, μπορεί να βρεθεί στο \\\"Χωρίς ομάδα\\\".</string>\n    <string name=\"remove_group\">Κατάργηση ομάδας</string>\n    <string name=\"remove_group_description\">Είστε βέβαιοι ότι θέλετε να καταργήσετε αυτήν την ομάδα; Οι καταχωρίσεις σε αυτήν θα μεταβούν αυτόματα στο \\\"Χωρίς ομάδα\\\".</string>\n    <string name=\"remove_unused_groups\">Διαγραφή αχρησιμοποίητων ομάδων</string>\n    <string name=\"remove_unused_groups_description\">Είστε βέβαιοι ότι θέλετε να διαγράψετε όλες τις ομάδες που δεν έχουν αντιστοιχιστεί σε μια καταχώρηση;</string>\n    <string name=\"remove_icon_pack\">Αφαίρεση πακέτου εικονιδίων</string>\n    <string name=\"remove_icon_pack_description\">Είστε βέβαιοι ότι θέλετε να καταργήσετε αυτό το πακέτο εικονιδίων; Καταχωρήσεις που χρησιμοποιούν εικονίδια από αυτό το πακέτο δεν θα επηρεαστούν.</string>\n    <string name=\"details\">Λεπτομέρειες</string>\n    <string name=\"show_error_details\">Εμφάνιση λεπτομερειών σφάλματος</string>\n    <string name=\"lock\">Κλείδωμα</string>\n    <string name=\"name\">Όνομα</string>\n    <string name=\"no_group\">Χωρίς ομάδα</string>\n    <string name=\"sort\" comment=\"Title of the Sort button in the top action bar of the main view\">Ταξινόμηση</string>\n    <string name=\"sort_alphabetically\">Εκδότης (Α προς Ζ)</string>\n    <string name=\"sort_alphabetically_reverse\">Εκδότης (Ζ προς Α)</string>\n    <string name=\"sort_alphabetically_name\">Λογαριασμός (Α προς Ζ)</string>\n    <string name=\"sort_alphabetically_name_reverse\">Λογαριασμός (Z προς A)</string>\n    <string name=\"sort_usage_count\">Αριθμός χρήσεων</string>\n    <string name=\"sort_last_used\">Τελευταία χρήση</string>\n    <string name=\"sort_custom\">Προσαρμογή</string>\n    <string name=\"last_used\">Τελευταία χρήση</string>\n    <string name=\"last_used_never\">ποτέ</string>\n    <string name=\"new_group\">Νέα ομάδα…</string>\n    <string name=\"group\">Ομάδα</string>\n    <string name=\"group_name_hint\">Όνομα ομάδας</string>\n    <string name=\"preference_manage_groups\">Επεξεργασία ομάδων</string>\n    <string name=\"preference_manage_groups_summary\">Διαχειριστείτε και διαγράψτε τις ομάδες σας εδώ</string>\n    <string name=\"preference_reset_usage_count\">Επαναφορά αριθμού χρήσης</string>\n    <string name=\"preference_reset_usage_count_summary\">Επαναφορά του αριθμού χρήσης κάθε καταχώρησης στην κρύπτη σας</string>\n    <string name=\"preference_reset_usage_count_dialog\">Είστε βέβαιοι ότι θέλετε να ορίσετε τον αριθμό χρήσης κάθε εισόδου στην κρύπτη σας στο 0;</string>\n    <string name=\"note\" comment=\"Users can add a note to an entry\">Σημείωση</string>\n    <string name=\"clear\">Εκκαθάριση</string>\n    <string name=\"dialog_duplicate_entry_title\" comment=\"'Duplicate' is a noun here\">Διπλότυπη καταχώρηση</string>\n    <string name=\"dialog_duplicate_entry_message\">Αυτή η καταχώρηση έχει το ίδιο όνομα και τον ίδιο εκδότη με μία ή περισσότερες υπάρχουσες καταχωρήσεις. Πώς θα θέλατε να προχωρήσετε;</string>\n    <string name=\"dialog_duplicate_entry_overwrite_title\">Αντικατάσταση υπάρχουσας/ων καταχώρησης/ων</string>\n    <string name=\"dialog_duplicate_entry_overwrite_subtitle\">Αντικατάσταση της υπάρχουσας καταχώρησης ή καταχωρήσεων με τη νέα. Αυτή η ενέργεια δεν μπορεί να αναιρεθεί</string>\n    <string name=\"dialog_duplicate_entry_suffix_title\">Προσθήκη επιθήματος</string>\n    <string name=\"dialog_duplicate_entry_suffix_subtitle\">Προσθέστε ένα επίθημα στο όνομα αυτής της νέας καταχώρησης. Το νέο όνομα θα είναι: %s</string>\n    <string name=\"dialog_duplicate_entry_cancel_title\">Ακύρωση αποθήκευσης</string>\n    <string name=\"dialog_duplicate_entry_cancel_subtitle\">Σας επιτρέπει να επεξεργαστείτε την καταχώρηση πριν επιχειρήσετε να την αποθηκεύσετε ξανά</string>\n    <plurals name=\"dialog_duplicate_entry_overwrite_dialog_message\">\n        <item quantity=\"one\">Είστε βέβαιοι ότι θέλετε να διαγράψετε την καταχώρηση %d με το ακόλουθο όνομα:\\n\\n%s - %s</item>\n        <item quantity=\"other\">Είστε βέβαιοι ότι θέλετε να διαγράψετε καταχωρήσεις %d με το ακόλουθο όνομα:\\n\\n%s - %s</item>\n    </plurals>\n    <string name=\"dialog_duplicate_entry_overwrite_dialog_title\">Επιβεβαίωση διαγραφής</string>\n    <string name=\"pref_haptic_feedback_summary\">Κάντε τη συσκευή σας να δονείται όταν ανανεώνονται οι κωδικοί</string>\n    <string name=\"pref_haptic_feedback_title\">Απτική ανάδραση</string>\n    <string name=\"pref_highlight_entry_title\">Επισήμανση διακριτικών στο πάτημα</string>\n    <string name=\"pref_highlight_entry_summary\">Κάνετε τα αναγνωριστικά να ξεχωρίζουν ευκολότερα το ένα από το άλλο, επισημαίνοντας τα προσωρινά όταν τα πατήσετε</string>\n    <string name=\"pref_groups_multiselect_title\">Πολλαπλή επιλογή ομάδων</string>\n    <string name=\"pref_groups_multiselect_summary\">Να επιτρέπεται η επιλογή πολλαπλών ομάδων ταυτόχρονα</string>\n    <string name=\"pref_minimize_on_copy_title\">Ελαχιστοποίηση κατά την αντιγραφή</string>\n    <string name=\"pref_minimize_on_copy_summary\">Ελαχιστοποίηση της εφαρμογής μετά την αντιγραφή ενός αναγνωριστικού</string>\n    <string name=\"pref_copy_behavior_title\">Αντιγραφή αναγνωριστικών στο πρόχειρο</string>\n    <string name=\"pref_search_behavior_title\">Συμπεριφορά αναζήτησης</string>\n    <string name=\"pref_pause_entry_title\">Πάγωμα αναγνωριστικών όταν πατηθούν</string>\n    <string name=\"pref_pause_entry_summary\">Παύση της αυτόματης ανανέωσης των αναγνωριστικών πατώντας τα. Τα αναγνωριστικά δεν θα ενημερώνονται όσο είναι συγκεντρωμένα. Απαιτεί \\\"Επισήμανση αναγνωριστικών όταν πατηθούν\\\" ή \\\"Πατήστε για αποκάλυψη\\\".</string>\n    <string name=\"pin_keyboard_description\">Εισαγάγετε τον κωδικό πρόσβασής σας για να ενεργοποιήσετε το πληκτρολόγιο PIN. Λάβετε υπόψη ότι αυτό λειτουργεί μόνο εάν ο κωδικός πρόσβασής σας αποτελείται μόνο από αριθμούς</string>\n    <string name=\"pin_keyboard_error\">Σφάλμα κατά την ενεργοποίηση του πληκτρολογίου PIN</string>\n    <string name=\"pin_keyboard_error_description\">Δεν είναι δυνατός ο ορισμός του πληκτρολογίου PIN. Ο κωδικός πρόσβασής σας πρέπει να αποτελείται μόνο από αριθμούς.</string>\n    <string name=\"pin_keyboard_disabled\">Ο κωδικός άλλαξε. Το πληκτρολόγιο PIN δεν θα εμφανίζεται πλέον.</string>\n    <string name=\"selected\">Επιλεγμένο</string>\n    <string name=\"dark_theme_title\">Σκούρο</string>\n    <string name=\"light_theme_title\">Φωτεινό</string>\n    <string name=\"amoled_theme_title\">AMOLED</string>\n    <string name=\"system_theme_title\">Ορισμός από την Εξοικονόμηση Μπαταρίας</string>\n    <string name=\"system_amoled_theme_title\">Ορισμός από την Εξοικονόμηση Μπαταρίας (AMOLED)</string>\n    <string name=\"normal_viewmode_title\">Κανονική</string>\n    <string name=\"compact_mode_title\">Συμπαγής</string>\n    <string name=\"small_mode_title\">Μικρή</string>\n    <string name=\"tiles_mode_title\">Πλακίδια</string>\n    <string name=\"unknown_issuer\">Άγνωστος εκδότης</string>\n    <string name=\"unknown_account_name\">Άγνωστο όνομα λογαριασμού</string>\n    <plurals name=\"import_error_dialog\">\n        <item quantity=\"one\">Το Aegis δεν μπόρεσε να εισαγάγει %d αναγνωριστικό. Αυτό το αναγνωστικό θα παραληφθεί. Πατήστε \\'Λεπτομέρειες\\' για να δείτε περισσότερες πληροφορίες σχετικά με το σφάλμα.</item>\n        <item quantity=\"other\">Το Aegis δεν μπόρεσε να εισαγάγει %d αναγνωριστικά. Αυτά θα παραληφθούν. Πατήστε \\'Λεπτομέρειες\\' για να δείτε περισσότερες πληροφορίες σχετικά με τα σφάλματα.</item>\n    </plurals>\n    <string name=\"unable_to_process_deeplink\">Δεν είναι δυνατή η επεξεργασία βαθιάς σύνδεσης</string>\n    <string name=\"unable_to_read_qrcode_file\">Αδυναμία ανάγνωσης και επεξεργασίας QR κωδικού από αρχείο: %s.</string>\n    <string name=\"unable_to_process_shared_text\">Δεν είναι δυνατή η επεξεργασία κοινόχρηστου κειμένου ως OTP</string>\n    <string name=\"unable_to_read_qrcode_files\">Δεν είναι δυνατή η ανάγνωση και επεξεργασία μερικών QR κωδικών. Θα εισαχθούν μόνο %1$d/%2$d καταχωρήσεις.</string>\n    <string name=\"unable_to_generate_qrcode\">Δεν είναι δυνατή η δημιουργία κωδικού QR</string>\n    <string name=\"select_picture\">Επιλέξτε εικόνα</string>\n    <string name=\"select_icon\">Επιλέξτε εικονίδιο</string>\n    <string name=\"tile_open_vault\" comment=\"label for a quick settings tile that opens the app when tapped\">Άνοιγμα κρύπτης</string>\n    <string name=\"tile_open_scanner\" comment=\"label for a quick settings tile that opens the QR code scanner when tapped\">Άνοιγμα σαρωτή</string>\n    <string name=\"toggle_checkboxes\">Εναλλαγή πλαισίων ελέγχου</string>\n    <string name=\"search\">Αναζήτηση</string>\n    <string name=\"channel_name_lock_status\">Κατάσταση κλειδώματος</string>\n    <string name=\"channel_description_lock_status\">To Aegis μπορεί να δημιουργήσει μια επίμονη ειδοποίηση για να σας ειδοποιήσει όταν η λίστα είναι κλειδωμένη</string>\n    <string name=\"vault_unlocked_state\">Η κρύπτη είναι ξεκλείδωτη. Πατήστε εδώ για κλείδωμα.</string>\n    <string name=\"version\">Έκδοση</string>\n    <string name=\"changelog\">Αρχείο καταγραφής αλλαγών</string>\n    <string name=\"whats_new\">Τι νέο υπάρχει</string>\n    <string name=\"github_description\">Πηγαίος κώδικας, προβλήματα και πληροφορίες</string>\n    <string name=\"license\">Άδεια Χρήσης</string>\n    <string name=\"license_description\">Το Aegis Authenticator έχει αδειοδοτηθεί βάσει του GPLv3</string>\n    <string name=\"third_party_licenses\">Άδειες χρήσης τρίτων</string>\n    <string name=\"third_party_licenses_description\">Άδειες χρήσης βιβλιοθηκών τρίτων που χρησιμοποιεί το Aegis</string>\n    <string name=\"country_netherlands\">Ολλανδία</string>\n    <string name=\"email_us\">Γράψτε ένα email</string>\n    <string name=\"visit_website\">Επισκεφτείτε την ιστοσελίδα μας</string>\n    <string name=\"about_support\">Υποστήριξη</string>\n    <string name=\"support_rate\">Βαθμολόγηση</string>\n    <string name=\"support_rate_description\">Υποστηρίξτε μας αφήνοντας μια κριτική στο Google Play Store</string>\n    <string name=\"webview_error\">Αυτή η συσκευή δεν υποστηρίζει προβολή ιστού, η οποία είναι απαραίτητη για την προβολή του αρχείου αλλαγών και της άδειας. Λείπει ένα στοιχείο συστήματος.</string>\n    <string name=\"email\">Email</string>\n    <string name=\"time_sync_warning_title\">Χρόνος αυτόματου συγχρονισμού</string>\n    <string name=\"time_sync_warning_message\">Το Aegis βασίζεται στον χρόνο του συστήματος για να είναι συγχρονισμένο για τη δημιουργία σωστών κωδικών. Μια απόκλιση λίγων δευτερολέπτων θα μπορούσε να οδηγήσει σε εσφαλμένους κωδικούς. Φαίνεται ότι η συσκευή σας δεν έχει ρυθμιστεί ώστε να συγχρονίζει αυτόματα την ώρα. Θα θέλατε να το κάνετε τώρα;</string>\n    <string name=\"time_sync_warning_disable\">Σταμάτα να με προειδοποιείς. Ξέρω τι κάνω.</string>\n    <string name=\"google_qr_export_unrelated\">Βρέθηκε μη σχετικός κωδικός QR. Δοκιμάστε να κάνετε επανεκκίνηση του σαρωτή.</string>\n    <plurals name=\"google_qr_export_scanned\">\n        <item quantity=\"one\">Σαρωμένος %1$d/%2$d κωδικός QR</item>\n        <item quantity=\"other\">Σαρωμένοι %1$d/%2$d κωδικοί QR</item>\n    </plurals>\n    <string name=\"google_qr_export_unexpected\">Αναμενόταν κωδικός QR #%1$d, αλλά σαρώθηκε #%2$d αντί αυτού</string>\n    <string name=\"backup_error_bar_message\"><b>Η δημιουργία αντιγράφων ασφαλείας κρύπτης απέτυχε πρόσφατα</b></string>\n    <string name=\"backup_error_dialog_details\" comment=\"The first parameter is the type of backup (e.g. built-in or Android backup). The second parameter is an elapsed time in the style of 'x seconds/minutes/days ago'.\">        Μια πρόσφατη προσπάθεια δημιουργίας αντιγράφων ασφαλείας κρύπτης με χρήση %1$s απέτυχε επειδή παρουσιάστηκε σφάλμα. Έγινε προσπάθεια δημιουργίας αντιγράφων ασφαλείας %2$s. Παρακαλώ ελέγξτε τις ρυθμίσεις δημιουργίας αντιγράφων ασφαλείας για να βεβαιωθείτε ότι τα αντίγραφα ασφαλείας μπορούν να ολοκληρωθούν με επιτυχία.\n    </string>\n    <string name=\"backup_permission_error_dialog_details\" comment=\"The first parameter is the type of backup (e.g. built-in or Android backup). The second parameter is an elapsed time in the style of 'x seconds/minutes/days ago'.\">        Μια πρόσφατη προσπάθεια δημιουργίας αντιγράφων ασφαλείας κρύπτης με χρήση %1$s απέτυχε επειδή το Aegis δεν είχε άδεια να εγγράψει στον προορισμό αντιγράφου ασφαλείας. Το αντίγραφο ασφαλείας επιχειρήθηκε %2$s. Αυτό το σφάλμα μπορεί να συμβεί αν μετακινήσατε / μετονομάσατε τον προορισμό αντιγράφου ασφαλείας ή αν αποκαταστήσατε πρόσφατα το Aegis από ένα αντίγραφο ασφαλείας. Παρακαλώ ρυθμίστε ξανά τον προορισμό του αντιγράφου ασφαλείας.\n    </string>\n    <string name=\"backup_system_builtin\">Ενσωματωμένα αυτόματα αντίγραφα ασφαλείας του Aegis</string>\n    <string name=\"backup_system_android\">Σύστημα αντιγράφων ασφαλείας στο cloud του Android</string>\n    <string name=\"backup_reminder_bar_message_with_latest\" comment=\"The parameter is an elapsed time in the style of 'x seconds/minutes/days ago'\">        Το τελευταίο αντίγραφο ασφαλείας είναι παρωχημένο (%s)\n    </string>\n    <string name=\"backup_reminder_bar_message\">        Δε λαμβάνονται αντίγραφα ασφαλείας των αλλαγών    </string>\n    <string name=\"backup_reminder_bar_dialog_title\">Δε δημιουργούνται αντίγραφα ασφαλείας των αλλαγών σας</string>\n    <string name=\"backup_reminder_bar_dialog_summary\">        Οι πρόσφατες αλλαγές στην κρύπτη δεν έχουν δημιουργηθεί ακόμα αντίγραφα ασφαλείας.  Είναι σημαντικό να λαμβάνετε τακτικά αντίγραφα ασφαλείας για να αποτρέψετε την απώλεια πρόσβασης στους λογαριασμούς σας. Εξετάστε το ενδεχόμενο να δημιουργήσετε αυτόματα αντίγραφα ασφαλείας στο μενού ρυθμίσεων.\n    </string>\n    <string name=\"backup_reminder_bar_dialog_accept\">Ρύθμιση αντιγράφων ασφαλείας</string>\n    <string name=\"backup_plaintext_export_warning\"><b>Η κρύπτη εξήχθη πρόσφατα σε απλό κείμενο</b></string>\n    <string name=\"pref_show_plaintext_warning_hint\">Να μην εμφανιστεί ξανά αυτή η προειδοποίηση</string>\n    <string name=\"backup_plaintext_warning_explanation\">Αυτή η προειδοποίηση εμφανίζεται επειδή πρόσφατα εξάγατε ένα μη κρυπτογραφημένο αντίγραφο της κρύπτης. Για να διατηρήσετε την ασφάλεια των αναγνωριστικών σας, σας συνιστούμε να διαγράψετε αυτό το αρχείο μόλις δεν είναι πλέον απαραίτητο.</string>\n    <string name=\"switch_camera\">Εναλλαγή κάμερας</string>\n    <string name=\"empty_list\">Δεν υπάρχουν κωδικοί προς εμφάνιση. Ξεκινήστε να προσθέτετε καταχωρήσεις πατώντας το σύμβολο συν στην κάτω δεξιά γωνία</string>\n    <string name=\"empty_list_title\">Δεν βρέθηκαν καταχωρήσεις</string>\n    <string name=\"empty_group_list\">Δεν υπάρχουν ομάδες προς εμφάνιση. Προσθέστε ομάδες στην οθόνη επεξεργασίας μιας καταχώρισης</string>\n    <string name=\"empty_group_list_title\">Δεν βρέθηκαν ομάδες</string>\n    <string name=\"no_icon_packs\">Δεν έχουν εισαχθεί ακόμα πακέτα εικονιδίων. Πατήστε το σύμβολο + για να εισάγετε ένα. Συμβουλή: δοκιμάστε τα <a href=\"https://aegis-icons.github.io\">εικονίδια-aegis</a>.</string>\n    <string name=\"no_icon_packs_title\">Χωρίς πακέτα εικονιδίων</string>\n    <string name=\"pick_icon\">Επιλέξτε ένα εικονίδιο</string>\n    <string name=\"uncategorized\">Μη κατηγοριοποιημένο</string>\n    <string name=\"done\">Ολοκληρώθηκε</string>\n    <plurals name=\"qr_count\">\n        <item quantity=\"one\">%d / %d κωδικός QR</item>\n        <item quantity=\"other\">%d / %d κωδικοί QR</item>\n    </plurals>\n    <string name=\"next\">Επόμενο</string>\n    <string name=\"previous\">Προηγούμενο</string>\n    <string name=\"copy_uri\">Αντιγραφή URI</string>\n    <string name=\"unable_to_copy_uri_to_clipboard\">Αδυναμία αντιγραφής του URI στο πρόχειρο</string>\n    <string name=\"uri_copied_to_clipboard\">Το URI αντιγράφηκε στο πρόχειρο</string>\n    <string name=\"transfer_entry_description\">Σαρώστε αυτόν τον κωδικό QR με την εφαρμογή ελέγχου ταυτότητας στην οποία θέλετε να μεταφέρετε αυτήν την καταχώριση</string>\n    <string name=\"transfer_entry_brightness\">Πατήστε τον κωδικό QR για εναλλαγή φωτεινότητας πλήρους οθόνης</string>\n    <string name=\"google_auth_compatible_transfer_description\">Σαρώστε αυτούς τους κωδικούς QR με το Aegis ή το Google Authenticator.\\n\\nΛόγω περιορισμών της εφαρμογής Google Authenticator, περιλαμβάνονται μόνο αναγνωριστικά TOTP &amp; HOTP που χρησιμοποιούν SHA1 και παράγουν 6ψήφιους κωδικούς</string>\n    <string name=\"password_strength_very_weak\">Πολύ αδύναμος</string>\n    <string name=\"password_strength_weak\">Αδύναμος</string>\n    <string name=\"password_strength_fair\">Μέτριος</string>\n    <string name=\"password_strength_good\">Καλός</string>\n    <string name=\"password_strength_strong\">Ισχυρός</string>\n    <string name=\"password_strength_unknown\">Ο κωδικός πρόσβασης είναι πολύ μεγάλος για ανάλυση της ισχύος του</string>\n    <string name=\"pref_pin_keyboard_title\">Χρήση πληκτρολογίου PIN σε οθόνη κλειδώματος</string>\n    <string name=\"pref_pin_keyboard_summary\">Ενεργοποιήστε αυτό εάν θέλετε να ενεργοποιήσετε το πληκτρολόγιο PIN στην οθόνη κλειδώματος. Αυτό λειτουργεί μόνο για αριθμητικούς κωδικούς πρόσβασης</string>\n    <string name=\"title_activity_preferences\">Ρυθμίσεις</string>\n    <string name=\"title_activity_manage_groups\">Διαχείριση Ομάδων</string>\n    <string name=\"title_activity_transfer\">Μεταφορά καταχωρήσεων</string>\n    <string name=\"title_activity_about\">Σχετικά</string>\n    <string name=\"title_activity_edit_entry\">Επεξεργασία καταχώρησης</string>\n    <string name=\"title_activity_scan_qr\">Σάρωση κωδικού QR</string>\n    <string name=\"title_activity_import_entries\">Εισαγωγή καταχωρήσεων</string>\n    <string name=\"title_activity_assign_icons\">Αντιστοίχιση εικονιδίων</string>\n    <string name=\"title_activity_licenses\">Άδειες χρήσης τρίτων</string>\n    <string name=\"dialog_wipe_entries_title\">Διαγραφή καταχωρήσεων</string>\n    <string name=\"dialog_wipe_entries_message\">Η κρύπτη σας περιέχει ήδη καταχωρήσεις. Θέλετε να καταργήσετε αυτές τις καταχωρήσεις πριν από την εισαγωγή αυτού του αρχείου;\\n\\n <b> Με αυτόν τον τρόπο, θα χάσετε μόνιμα την πρόσβαση στις υπάρχουσες καταχωρήσεις στην κρύπτη. </b></string>\n    <string name=\"dialog_wipe_entries_checkbox\">Διαγραφή περιεχομένων κρύπτης</string>\n    <string name=\"import_from_clipboard_title\">Εισαγωγή από πρόχειρο</string>\n    <string name=\"import_from_clipboard_message\">Βρήκαμε ένα έγκυρο otpauth uri στο πρόχειρο σας.\\n\\n<b>Όνομα</b>: %1$s\\n<b>Εκδότης</b>: %2$s\\n\\nΘέλετε να το χρησιμοποιήσετε για να προσυμπληρώσετε αυτή την καταχώρηση;</string>\n    <string name=\"panic_trigger_ignore_toast\">Το Aegis έλαβε έναυσμα πανικού αλλά η ρύθμιση είναι απενεργοποιημένη, αγνόηση</string>\n    <string name=\"pref_panic_trigger_title\">Διαγραφή κρύπτης στο έναυσμα πανικού</string>\n    <string name=\"pref_panic_trigger_summary\">Διαγραφή κρύπτης όταν λαμβάνεται ένα έναυσμα πανικού από το Ripple</string>\n    <string name=\"import_vault\">Εισαγωγή κρύπτης Aegis</string>\n    <string name=\"import_vault_hint\">Θέλετε να κάνετε εισαγωγή από μια διαφορετική εφαρμογή 2FA; Ολοκληρώστε πρώτα τη ρύθμιση εγκατάστασης και μετά μεταβείτε στο μενού ρυθμίσεων.</string>\n    <plurals name=\"import_duplicate_toast\">\n        <item quantity=\"one\">Μη επιλεγμένο %d πιθανό διπλότυπο. Παρακαλούμε εξετάστε τη λίστα καταχωρήσεων.</item>\n        <item quantity=\"other\">Μη επιλεγμένα %d πιθανά διπλότυπα. Παρακαλούμε εξετάστε τη λίστα καταχωρήσεων.</item>\n    </plurals>\n    <string name=\"importer_help_2fas\">Παρέχετε ένα αντίγραφο ασφαλείας 2FAS Authenticator.</string>\n    <string name=\"importer_help_aegis\">Παρέχετε ένα αρχείο εξαγωγής/αντιγράφων ασφαλείας Aegis.</string>\n    <string name=\"importer_help_authenticator_plus\">Παρέχετε ένα αρχείο εξαγωγής Authenticator Plus που αποκτήθηκε μέσω των <b> Ρυθμίσεων - &gt; Αντιγράφων ασφαλείας &amp; Επαναφορά - &gt; Εξαγωγή ως Κείμενο και HTML </b>.</string>\n    <string name=\"importer_help_authy\">Παρέχετε ένα αντίγραφο του <b>/data/data/com.authy.authy/shared_prefs/com.authy.storage.tokens.authenticator.xml</b>, που βρίσκεται στον κατάλογο εσωτερικής αποθήκευσης του Authy.</string>\n    <string name=\"importer_help_andotp\">Παρέχετε ένα αρχείο εξαγωγής/αντιγράφου ασφαλείας andOTP.</string>\n    <string name=\"importer_help_bitwarden\">Παρέχετε ένα αρχείο εξαγωγής/αντιγράφων ασφαλείας Bitwarden. Τα κρυπτογραφημένα αρχεία δεν υποστηρίζονται.</string>\n    <string name=\"importer_help_battle_net_authenticator\">Παρέχει ένα αντίγραφο του <b> /data/data/com.blizzard.messenger/shared_prefs/com.blizzard.messenger.authenticator_preferences.xml </b>, που βρίσκεται στον κατάλογο εσωτερικού χώρου αποθήκευσης του Επαληθευτή Battle.net.</string>\n    <string name=\"importer_help_duo\">Παρέχετε ένα αντίγραφο του <b>/data/data/com.duosecurity.duomobile/files/duokit/accounts.json</b>, που βρίσκεται στον εσωτερικό κατάλογο αποθήκευσης του DUO.</string>\n    <string name=\"importer_help_ente_auth\">Παρέχετε ένα αρχείο εξαγωγής Ente Auth. Προς το παρόν υποστηρίζονται μόνο μη κρυπτογραφημένα αρχεία.</string>\n    <string name=\"importer_help_freeotp\">FreeOTP 2: Παρέχετε ένα αρχείο αντιγράφου ασφαλείας.\\nFreeOTP 1.x: Παρέχετε ένα αντίγραφο του <b>/data/org.fedorahosted.freeotp/shared_prefs/tokens.xml</b>, που βρίσκεται στον εσωτερικό κατάλογο αποθήκευσης του FreeOTP.</string>\n    <string name=\"importer_help_freeotp_plus\">Παρέχετε ένα αρχείο εξαγωγής FreeOTP +.</string>\n    <string name=\"importer_warning_title_freeotp2\">Συμβατότητα FreeOTP 2</string>\n    <string name=\"importer_warning_message_freeotp2\">Υπάρχουν μια σειρά από ζητήματα στο FreeOTP 2 που μπορεί να οδηγήσει σε κατεστραμμένα αντίγραφα ασφαλείας. Το Aegis θα προσπαθήσει να διασώσει όσο το δυνατόν περισσότερες καταχωρήσεις, αλλά είναι πιθανό η εισαγωγή κάποιων ή ακόμα και όλων να αποτύχει.</string>\n    <string name=\"importer_help_google_authenticator\"><b>Υποστηρίζονται μόνο αρχεία βάσης δεδομένων από το Google Authenticator έκδοση 5.10 και παλαιότερα</b>.\\n\\nΠαρέχετε ένα αντίγραφο του <b>/data/data/com.google.android.apps.authenticator2/databases/databases</b>, που βρίσκεται στον εσωτερικό κατάλογο αποθήκευσης του Google Authenticator.</string>\n    <string name=\"importer_help_microsoft_authenticator\">Παρέχεi ένα αντίγραφο του <b> /data/data/com.azure.authenticator/databases/PhoneFactor </b>, που βρίσκεται στον κατάλογο εσωτερικής αποθήκευσης του Microsoft Authenticator.</string>\n    <string name=\"importer_help_plain_text\">Παρέχεi ένα αρχείο απλού κειμένου με ένα URI Επαληθευτή Google σε κάθε γραμμή.</string>\n    <string name=\"importer_help_proton_authenticator\">Προμήθεια ενός αρχείου εξαγωγής επαληθευτή Proton (.json) που λαμβάνεται μέσω <b>Ρυθμίσεις -&gt; Εξαγωγή</b>.</string>\n    <string name=\"importer_help_steam\"><b>Το Steam v3.0 και νεότερα δεν υποστηρίζονται</b>. Παρέχετε αντίγραφο του <b>/data/data/com.valvesoftware. ndroid.steam.community/files/Steamguard-*.json</b>, που βρίσκεται στον εσωτερικό κατάλογο αποθήκευσης του Steam.</string>\n    <string name=\"importer_help_stratum\">Παροχή ενός αρχείου εξαγωγής Stratum που λαμβάνεται μέσω <b>Ρυθμίσεις -&gt; Αντίγραφα ασφαλείας -&gt; Δημιουργία αντιγράφου ασφαλείας σε κρυπτογραφημένο αρχείο (συνιστάται)</b>.</string>\n    <string name=\"importer_help_totp_authenticator\">Παρέχετε ένα αρχείο εξαγωγής TOTP Authenticator.</string>\n    <string name=\"importer_help_winauth\">Παρέχετε ένα αρχείο εξαγωγής WinAuth.</string>\n    <string name=\"import_assign_icons_dialog_title\">Αντιστοίχιση εικονιδίων</string>\n    <string name=\"import_assign_icons_dialog_text\">Θέλετε να αντιστοιχίσετε εικονίδια στις εισαγόμενες καταχωρήσεις;</string>\n    <string name=\"importer_encrypted_exception_google_authenticator\">Η κρυπτογραφημένη καταχώρηση παραλείφθηκε: %s</string>\n    <string name=\"importer_help_direct\">Εισαγάγετε καταχωρήσεις απευθείας από το %s. Αυτό απαιτεί την εγκατάσταση της εφαρμογής σε αυτήν τη συσκευή και την πρόσβαση root στο Aegis.</string>\n    <string name=\"groups\">Ομάδες</string>\n    <string name=\"pref_focus_search\">Εστίαση αναζήτησης στο άνοιγμα της εφαρμογής</string>\n    <string name=\"pref_focus_search_summary\">Εστίαση της αναζήτησης αμέσως μετά το άνοιγμα της εφαρμογής.</string>\n    <string name=\"pref_grouping_halves\">Μισά</string>\n    <string name=\"pref_grouping_none\">Χωρίς ομαδοποίηση</string>\n    <string name=\"pref_grouping_size_two\">Ομάδες των 2</string>\n    <string name=\"pref_grouping_size_three\">Ομάδες των 3</string>\n    <string name=\"pref_grouping_size_four\">Ομάδες των 4</string>\n    <string name=\"pref_copy_behavior_never\">Ποτέ</string>\n    <string name=\"pref_copy_behavior_single_tap\">Μονό άγγιγμα</string>\n    <string name=\"pref_copy_behavior_double_tap\">Διπλό άγγιγμα</string>\n    <string name=\"pref_account_name_position_hidden\">Κρυφό</string>\n    <string name=\"pref_account_name_position_end\">Δίπλα στον εκδότη</string>\n    <string name=\"pref_account_name_position_below\">Κάτω από τον εκδότη</string>\n    <plurals name=\"time_elapsed_seconds\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"one\">%d δευτερόλεπτο πριν</item>\n        <item quantity=\"other\">%d δευτερόλεπτα πριν</item>\n    </plurals>\n    <plurals name=\"time_elapsed_minutes\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"one\">%d λεπτό πριν</item>\n        <item quantity=\"other\">%d λεπτά πριν</item>\n    </plurals>\n    <plurals name=\"time_elapsed_hours\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"one\">%d ώρα πριν</item>\n        <item quantity=\"other\">%d ώρες πριν</item>\n    </plurals>\n    <plurals name=\"time_elapsed_days\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"one\">%d ημέρα πριν</item>\n        <item quantity=\"other\">%d ημέρες πριν</item>\n    </plurals>\n    <plurals name=\"time_elapsed_years\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"one\">%d χρόνο πριν</item>\n        <item quantity=\"other\">%d χρόνια πριν</item>\n    </plurals>\n    <plurals name=\"dropdown_checkboxes_default_count\">\n        <item quantity=\"one\">%d επιλεγμένο στοιχείο</item>\n        <item quantity=\"other\">%d επιλεγμένα στοιχεία</item>\n    </plurals>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-el-rGR-v29/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"system_theme_title\">Προεπιλογή συστήματος</string>\n    <string name=\"system_amoled_theme_title\">Προεπιλογή συστήματος (AMOLED)</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-es-rES/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources xmlns:tools=\"http://schemas.android.com/tools\">\n    <string name=\"action_settings\">Ajustes</string>\n    <string name=\"action_about\">Acerca de</string>\n    <string name=\"action_delete\">Eliminar</string>\n    <string name=\"action_transfer\">Transferir</string>\n    <string name=\"action_edit_icon\">Editar icono</string>\n    <string name=\"action_reset_usage_count\">Reiniciar contador de uso</string>\n    <string name=\"action_reset_usage_count_dialog\">¿Seguro que quieres restablecer el contador de uso de esta clave a cero?</string>\n    <string name=\"action_default_icon\">Volver al icono original</string>\n    <string name=\"discard\">Descartar</string>\n    <string name=\"save\">Guardar</string>\n    <string name=\"all\">Todo</string>\n    <string name=\"issuer\">Emisor</string>\n    <string name=\"yandex_pin\">PIN (4-16 dígitos)</string>\n    <string name=\"motp_pin\">PIN (4 dígitos)</string>\n    <string name=\"suggested\">Sugerido</string>\n    <string name=\"usage_count\">Contador de uso</string>\n    <string name=\"warning\">Advertencia</string>\n    <string name=\"pref_cat_appearance_app\">Aplicación</string>\n    <string name=\"pref_cat_appearance_entries\">Elementos</string>\n    <string name=\"pref_cat_backups_android\">Android</string>\n    <string name=\"pref_cat_backups_auto\">Copias de seguridad automáticas</string>\n    <string name=\"pref_section_behavior_title\">Comportamiento</string>\n    <string name=\"pref_section_behavior_summary\">Personaliza la funcionalidad y cómo se interactúa con la lista de claves.</string>\n    <string name=\"pref_section_appearance_title\">Apariencia</string>\n    <string name=\"pref_section_appearance_summary\">Ajusta el esquema de colores, idioma y otros parámetros relacionados con el aspecto de la aplicación.</string>\n    <string name=\"pref_section_security_title\">Seguridad</string>\n    <string name=\"pref_section_security_summary\">Configura el cifrado, desbloqueo biométrico, bloqueo automático y otros ajustes de seguridad.</string>\n    <string name=\"pref_section_import_export_title\">Importar y exportar</string>\n    <string name=\"pref_section_import_export_summary\">Importa copias de seguridad de Aegis u otras aplicaciones de autenticación y exporta de forma manual la bóveda de Aegis.</string>\n    <string name=\"pref_section_audit_log_title\">Registro de auditoría</string>\n    <string name=\"pref_section_audit_log_summary\">Ver un listado con todos los cambios realizados en la aplicación.</string>\n    <string name=\"pref_section_backups_title\">Copias de seguridad</string>\n    <string name=\"pref_section_backups_summary\">Configura copias de seguridad automáticas en una carpeta local o activa el sistema de copia de seguridad en la nube de Android.</string>\n    <string name=\"pref_section_icon_packs\">Paquetes de iconos</string>\n    <string name=\"pref_section_icon_packs_summary\">Gestiona e importa tus paquetes de iconos.</string>\n    <string name=\"pref_select_theme_title\">Tema</string>\n    <string name=\"pref_dynamic_colors_title\">Colores dinámicos</string>\n    <string name=\"pref_dynamic_colors_summary\">Colorear la interfaz con el mismo esquema de colores de tu tema de Android</string>\n    <string name=\"pref_view_mode_title\">Modo de visualización</string>\n    <string name=\"pref_lang_title\">Idioma</string>\n    <string name=\"pref_show_icons_title\">Mostrar iconos</string>\n    <string name=\"pref_show_icons_summary\">Mostrar iconos al lado de cada clave</string>\n    <string name=\"pref_code_group_size_title\">Agrupación de los dígitos del código</string>\n    <string name=\"pref_code_group_size_summary\">Elige el número de dígitos por los que agrupar los códigos, dejando un espacio entre sí</string>\n    <string name=\"pref_account_name_position_title\">Mostrar el nombre de la cuenta</string>\n    <string name=\"pref_show_next_code_title\">Ver siguiente clave</string>\n    <string name=\"pref_show_next_code_summary\">Generar y mostrar la siguiente clave antes de tiempo</string>\n    <string name=\"pref_expiration_state_title\">Indica cuándo están a punto de expirar los códigos</string>\n    <string name=\"pref_expiration_state_summary\">Cambiar el color de los códigos y hacer que parpadeen cuando estén a punto de expirar</string>\n    <string name=\"pref_expiration_state_fallback\">Cambiar el color de los códigos cuando estén a punto de expirar</string>\n    <string name=\"pref_shared_issuer_account_name_title\">Solo mostrar nombres de cuenta necesarios</string>\n    <string name=\"pref_shared_issuer_account_name_summary\">Mostrar nombres de cuenta solo cuando compartan el mismo emisor. Se ocultarán otros nombres de cuenta.</string>\n    <string name=\"pref_account_name_position_summary_override\">Este ajuste no tiene efecto cuando aparecen en recuadros; el nombre de la cuenta se mostrará debajo del emisor.</string>\n    <string name=\"pref_import_file_title\">Importar desde un archivo</string>\n    <string name=\"pref_import_file_summary\">Importa tus claves desde un archivo</string>\n    <string name=\"pref_android_backups_title\">Copias de seguridad en la nube de Android</string>\n    <string name=\"pref_android_backups_summary\">Permitir que el sistema de copia de seguridad en la nube de Android incluya la bóveda de Aegis en sus copias de seguridad. Esto sólo es compatible con las bóvedas cifradas.</string>\n    <string name=\"pref_android_backups_hint\"><i>Las copias de seguridad entre dispositivos (D2D) siempre se permiten, independientemente de la configuración anterior</i></string>\n    <string name=\"pref_backups_title\">Respaldar automáticamente la bóveda</string>\n    <string name=\"pref_backups_summary\">Crear automáticamente una copia de seguridad de la bóveda en un almacenamiento externo cuando se produzcan cambios. Esto solo está soportado para las bóvedas cifradas.</string>\n    <string name=\"pref_backups_reminder_title\">Recordatorio de copia de seguridad</string>\n    <string name=\"pref_backups_reminder_summary\">Mostrar un recordatorio para hacer una copia de seguridad de tu bóveda en caso de que no hayas hecho una copia de tus últimos cambios.</string>\n    <string name=\"pref_backups_reminder_dialog_title\">Desactivar recordatorio de copia de seguridad</string>\n    <string name=\"pref_backups_reminder_dialog_summary\">Al desactivar el recordatorio Aegis no te dirá si tienes o no cambios que aún no están respaldados. Te arriesgas a perder tus claves. ¿Estás seguro de querer desactivarlo?</string>\n    <string name=\"pref_backups_versioning_strategy_title\">Estrategia de respaldo</string>\n    <string name=\"pref_backups_versioning_strategy_keep_x_versions\">Mantener varias versiones</string>\n    <string name=\"pref_backups_versioning_strategy_single_backup\">Respaldo único</string>\n    <string name=\"pref_backups_versioning_strategy_single_backup_warning\">La estrategia de copia de seguridad seleccionada no es fiable ni recomendable. Un único fallo de copia de seguridad podría hacer que lo pierdas todo.</string>\n    <string name=\"pref_backups_versioning_strategy_dialog_title\">Elige una estrategia de respaldo</string>\n    <string name=\"pref_backups_location_title\">Ubicación del respaldo</string>\n    <string name=\"pref_backups_location_summary\">Las copias de seguridad se guardarán en</string>\n    <string name=\"pref_backup_location_summary\">La copia de seguridad se guardará en</string>\n    <string name=\"pref_backups_trigger_title\">Lanzar una copia de seguridad</string>\n    <string name=\"pref_backups_trigger_summary\">Lanzar una copia de seguridad manualmente</string>\n    <string name=\"pref_backups_versions_title\">Número de versiones a conservar</string>\n    <string name=\"pref_backups_versions_infinite\">\\u221E</string>\n    <plurals name=\"pref_backups_versions_summary\">\n        <item quantity=\"one\">Conservar %1$d versión de la copia de seguridad</item>\n        <item quantity=\"other\">Conservar %1$d versiones de la copia de seguridad</item>\n    </plurals>\n    <string name=\"pref_backups_versions_infinite_summary\">No borrar ninguna copia de seguridad antigua</string>\n    <string name=\"pref_import_app_title\">Importar desde una aplicación</string>\n    <string name=\"pref_import_app_summary\">Importa tus claves desde una aplicación (mediante superusuario o «root»)</string>\n    <string name=\"pref_export_title\">Exportar</string>\n    <string name=\"pref_export_summary\">Exportar la bóveda</string>\n    <string name=\"pref_password_reminder_title\">Recordatorio de contraseña</string>\n    <string name=\"pref_google_auth_export_title\">Exportar a Google Authenticator</string>\n    <string name=\"pref_google_auth_export_descriptor\">Genera códigos QR de exportación compatibles con Google Authenticator</string>\n    <string name=\"pref_google_auth_export_no_data\">No hay datos que exportar</string>\n    <plurals name=\"pref_google_auth_export_incompatible_entries\">\n        <item quantity=\"one\">Omitida %d entrada incompatible</item>\n        <item quantity=\"other\">Se han omitido %d claves incompatibles</item>\n    </plurals>\n    <string name=\"pref_password_reminder_summary\">Para evitar olvidarla, solicitarme la contraseña con esta frecuencia: %s.</string>\n    <string name=\"pref_password_reminder_summary_disabled\">Desactivado</string>\n    <string name=\"pref_secure_screen_title\">Pantalla protegida</string>\n    <string name=\"pref_secure_screen_summary\">Bloquea las capturas de pantalla y otros intentos de captura dentro de la aplicación</string>\n    <string name=\"pref_tap_to_reveal_title\">Pulsa para mostrar</string>\n    <string name=\"pref_tap_to_reveal_summary\">Los tokens se ocultarán por defecto. Pulse sobre ellos para revelar el código.</string>\n    <string name=\"pref_tap_to_reveal_time_title\">Tiempo de espera de pulsar para mostrar</string>\n    <string name=\"pref_auto_lock_title\">Bloqueo automático</string>\n    <string name=\"pref_auto_lock_summary\">Cuando %s</string>\n    <string name=\"pref_auto_lock_summary_disabled\">Desactivado</string>\n    <string name=\"pref_auto_lock_prompt\">Bloquear automáticamente Aegis cuando</string>\n    <string name=\"pref_auto_lock_type_back_button\">Al presionar el botón para volver</string>\n    <string name=\"pref_auto_lock_type_minimize\">Al minimizar la aplicación</string>\n    <string name=\"pref_auto_lock_type_device_lock\">Al bloquear el dispositivo</string>\n    <string name=\"pref_backup_password_category\">Copia de seguridad y exportación</string>\n    <string name=\"pref_backup_password_title\">Contraseña a parte para las copias de seguridad y exportación</string>\n    <string name=\"pref_backup_password_summary\">Si está activado, la contraseña que se utiliza para desbloquear la aplicación no se podrá utilizar para descifrar copias de seguridad y exportaciones.</string>\n    <string name=\"pref_backup_password_change_title\">Cambiar la contraseña para copias de seguridad y exportación</string>\n    <string name=\"pref_backup_password_change_summary\">Establezca una nueva contraseña que se utilizará para encriptar la bóveda durante la copia de seguridad y la exportación.</string>\n    <string name=\"pref_encryption_title\">Cifrado</string>\n    <string name=\"pref_encryption_summary\">Cifra la bóveda y la desbloquea mediante una contraseña o biometría</string>\n    <string name=\"pref_biometrics_title\">Desbloqueo biométrico</string>\n    <string name=\"pref_biometrics_summary\">Permite la autenticación biométrica para desbloquear la bóveda</string>\n    <string name=\"pref_search_behavior_summary\">Campos a buscar: %s</string>\n    <string name=\"pref_search_behavior_prompt\">Incluir los datos de estos campos en tus búsquedas</string>\n    <string name=\"pref_search_behavior_type_name\">Nombre</string>\n    <string name=\"pref_search_behavior_type_issuer\">Emisor</string>\n    <string name=\"pref_search_behavior_type_note\">Notas</string>\n    <string name=\"pref_search_behavior_type_groups\">Grupos</string>\n    <string name=\"pref_set_password_title\">Cambiar contraseña</string>\n    <string name=\"pref_set_password_summary\">Crea una nueva contraseña que necesitarás para desbloquear tu bóveda</string>\n    <string name=\"no_events_title\">No parece haber ningún cambio</string>\n    <string name=\"no_events_description\">No se han grabado eventos importantes en la aplicación</string>\n    <string name=\"event_title_vault_unlocked\">Bóveda desbloqueada</string>\n    <string name=\"event_description_vault_unlocked\">La bóveda se ha desbloqueado correctamente</string>\n    <string name=\"event_title_backup_created\">Se ha creado una copia de seguridad</string>\n    <string name=\"event_description_backup_created\">Una copia de seguridad ha terminado sin problemas</string>\n    <string name=\"event_title_android_backup_created\">Android ha hecho una copia de seguridad</string>\n    <string name=\"event_description_android_backup_created\">Se ha terminado de realizar una copia de seguridad del sistema Android</string>\n    <string name=\"event_title_vault_exported\">Se han exportado los datos de la bóveda</string>\n    <string name=\"event_description_vault_exported\">Se ha hecho una copia fuera de la aplicación</string>\n    <string name=\"event_title_entry_shared\">Se ha compartido un código</string>\n    <string name=\"event_description_entry_shared\">Se ha compartido un elemento</string>\n    <string name=\"event_title_vault_unlock_failed_password\">Hubo un fallo al desbloquear la bóveda (contraseña)</string>\n    <string name=\"event_description_vault_unlock_failed_password\">Hubo un intento fallido al escribir una contraseña de desbloqueo</string>\n    <string name=\"event_title_vault_unlock_failed_biometrics\">Hubo un fallo al desbloquear la bóveda (biometría)</string>\n    <string name=\"event_description_vault_unlock_failed_biometrics\">Hubo un intento fallido al utilizar el desbloqueo biométrico</string>\n    <string name=\"event_unknown\">Tipo de evento desconocido</string>\n    <string name=\"audit_log_entry_deleted\">(borrado)</string>\n    <string name=\"today_at_time\">Hoy a las %1$s</string>\n    <string name=\"day_of_week_at_time\">%1$s a las %2$s</string>\n    <string name=\"export_encrypted\">Cifrar la bóveda</string>\n    <string name=\"export_help\">Esta acción exportará la bóveda fuera del almacenamiento interno de Aegis. Seleccione el formato al que desea exportar:</string>\n    <string name=\"export_warning_unencrypted\">Estás a punto de exportar una copia sin cifrar de tu bóveda de Aegis. <b>No se recomienda en absoluto</b>.</string>\n    <string name=\"export_warning_password\">Las exportaciones se cifran usando una contraseña separada configurada en la configuración de seguridad.</string>\n    <string name=\"understand_risk_accept\">Entiendo el riesgo</string>\n    <string name=\"export_format_aegis\">Aegis (.JSON)</string>\n    <string name=\"export_format_google_auth_uri\">Archivo de texto (.TXT)</string>\n    <string name=\"export_format_html\">Página web (.HTML)</string>\n    <string name=\"export_format_hint\">Formato de exportación</string>\n    <string name=\"export_all_groups\">Exportar todos los grupos</string>\n    <string name=\"export_choose_groups\">Selecciona qué grupos exportar</string>\n    <plurals name=\"export_groups_selected_count\">\n        <item quantity=\"one\">%d grupo seleccionado</item>\n        <item quantity=\"other\">%d grupos seleccionados</item>\n    </plurals>\n    <string name=\"export_no_groups_selected\">No se han seleccionado grupos para exportar</string>\n    <string name=\"export_html_title\" comment=\"The title of an HTML export document\">Exportación de Aegis Authenticator</string>\n    <string name=\"choose_authentication_method\">Seguridad</string>\n    <string name=\"authentication_method_explanation\">Aegis es una aplicación 2FA centrada en la seguridad. Las claves o «tokens» se almacenan en una bóveda, que de forma opcional puede cifrarse con una contraseña personal. Si algún malhechor obtiene tu archivo de bóveda cifrado no podrá acceder al contenido sin conocer dicha contraseña.\\n\\nHemos elegido la opción que creemos que se ajusta más a tu dispositivo.</string>\n    <string name=\"authentication_method_none\">Ninguno</string>\n    <string name=\"authentication_method_none_description\">No necesitará una contraseña para desbloquear la bóveda y no se cifrará. <b>No se recomienda esta opción</b>.</string>\n    <string name=\"authentication_method_password\">Contraseña</string>\n    <string name=\"authentication_method_password_description\">Se necesita una contraseña para desbloquear la bóveda.</string>\n    <string name=\"authentication_method_password_explanation\">Advertencia: Si olvidas tu contraseña no podrás ver tus claves de acceso. Sin la contraseña no hay recuperación posible.</string>\n    <string name=\"authentication_method_biometrics\">Biometría</string>\n    <string name=\"authentication_method_biometrics_description\">Aparte de contraseña, se puede aprovechar el sistema biométrico del dispositivo (como huellas dactilares o fotos de la cara) para desbloquear la bóveda de forma más sencilla.</string>\n    <string name=\"authentication\">Desbloquear la bóveda</string>\n    <string name=\"authentication_multiline\" comment=\"The newline in the middle is used for aesthetic purposes\">Desbloquear\\nla bóveda</string>\n    <string name=\"auth_use_biometrics\">O pulsa aquí para utilizar la <font fgcolor=\"#FF0D86C1\">biometría</font></string>\n    <string name=\"set_password\">Escribe una contraseña</string>\n    <string name=\"set_group\">Escribe un nombre de grupo</string>\n    <string name=\"set_number\">Escribe un número</string>\n    <string name=\"set_password_confirm\">Asegúrate de que la contraseña esté bien</string>\n    <string name=\"invalid_password\">La contraseña es incorrecta</string>\n    <string name=\"invalidated_biometrics\">Se ha detectado un cambio en la configuración de seguridad de tu dispositivo. Ve a «Aegis -&gt; Configuración -&gt; Seguridad -&gt; Desbloqueo biométrico» para desactivar y reactivar el desbloqueo biométrico.</string>\n    <string name=\"password_reminder\">Escribe tu contraseña, te pediremos que la vuelvas a poner al abrir la aplicación de vez en cuando para que no se te olvide.</string>\n    <string name=\"password_reminder_dialog_title\">Desbloqueo biométrico por defecto</string>\n    <string name=\"password_reminder_dialog_message\">Te pediremos que vuelvas a escribir tu contraseña de vez en cuando para asegurarnos de que no la hayas olvidado y que no te quedes sin acceso a la bóveda en un futuro. Si está bien la aplicación volverá a seguir intentando el desbloqueo biométrico hasta el siguiente recordatorio.</string>\n    <string name=\"password_reminder_freq_never\">Nunca</string>\n    <string name=\"password_reminder_freq_weekly\">Cada semana</string>\n    <string name=\"password_reminder_freq_biweekly\">Cada dos semanas</string>\n    <string name=\"password_reminder_freq_monthly\">Cada mes</string>\n    <string name=\"password_reminder_freq_quarterly\">Cada tres meses</string>\n    <string name=\"enter_password_2fas_message\">Parece que esta copia de seguridad de 2FAS está cifrada. Introduzca la contraseña a continuación.</string>\n    <string name=\"enter_password_authy_message\">Parece que tus tokens de Authy están cifrados. Cierra Aegis, abre Authy y desbloquea los tokens con tu contraseña. Si lo prefieres Aegis también puede intentar descifrar tus tokens de Authy directamente, si escribes tu contraseña a continuación.</string>\n    <string name=\"enter_password_aegis_title\">Introduce la contraseña de importación</string>\n    <string name=\"period_hint\">Periodo (segundos)</string>\n    <string name=\"algorithm_hint\">Función hash</string>\n    <string name=\"type\">Tipo</string>\n    <string name=\"share\">Compartir</string>\n    <string name=\"yes\">Sí</string>\n    <string name=\"no\">No</string>\n    <string name=\"undo\">Deshacer</string>\n    <string name=\"unlock\">Desbloquear</string>\n    <string name=\"advanced\">Avanzado</string>\n    <string name=\"counter\">Contador</string>\n    <string name=\"digits\">Dígitos</string>\n    <string name=\"secret\">Código secreto</string>\n    <string name=\"scan\">Escanear un código QR</string>\n    <string name=\"scan_image\">Escanear una imagen</string>\n    <string name=\"enter_manually\">Introducir manualmente</string>\n    <string name=\"set_up_biometric\">Configurar desbloqueo biométrico</string>\n    <string name=\"copy\">Copiar</string>\n    <string name=\"edit\">Editar</string>\n    <string name=\"select_all\">Seleccionar todo</string>\n    <string name=\"assign_icons\">Asignar iconos</string>\n    <string name=\"assign_groups\">Asignar al grupo</string>\n    <string name=\"assign_groups_dialog_summary\">Seleccione un grupo al que desea asignar las entradas seleccionadas.</string>\n    <string name=\"assign_groups_dialog_dropdown\">Seleccionar grupo</string>\n    <string name=\"favorite\" comment=\"Verb\">Marcar favorito</string>\n    <string name=\"unfavorite\" comment=\"Verb\">Desmarcar favorito</string>\n    <string name=\"error_all_caps\">ERROR</string>\n    <string name=\"password\">Contraseña</string>\n    <string name=\"confirm_password\">Confirmar contraseña</string>\n    <string name=\"show_password\">Ver contraseña</string>\n    <string name=\"new_entry\">Nueva clave</string>\n    <string name=\"add_new_entry\">Añadir nueva clave</string>\n    <string name=\"unlock_vault_error\">No se pudo desbloquear la bóveda</string>\n    <string name=\"unlock_vault_error_description\">Contraseña incorrecta. Asegúrate de que no tenga errores de escritura.</string>\n    <string name=\"password_equality_error\">Las contraseñas deben ser idénticas y no estar en blanco</string>\n    <string name=\"snackbar_authentication_method\">Elige una forma de autenticarte</string>\n    <string name=\"encrypting_vault\">Cifrando la bóveda</string>\n    <string name=\"exporting_vault\">Exportando la bóveda</string>\n    <string name=\"optimizing_icon\">Optimizando el icono</string>\n    <string name=\"optimizing_icon_multiple\">Optimizando iconos: %1$d de %2$d</string>\n    <string name=\"reading_file\">Leyendo archivo</string>\n    <string name=\"requesting_root_access\">Solicitando acceso a la raíz</string>\n    <string name=\"analyzing_qr\">Analizando código QR</string>\n    <string name=\"analyzing_qr_multiple\">Analizando código QR %1$d de %2$d (%3$s)</string>\n    <plurals name=\"added_new_entries\">\n        <item quantity=\"one\">Añadida %d nueva entrada a la bóveda</item>\n        <item quantity=\"other\">Añadidas %d nuevas claves a la bóveda</item>\n    </plurals>\n    <string name=\"importing_icon_pack\">Importando paquete de iconos</string>\n    <string name=\"delete_entry\">Borrar clave</string>\n    <string name=\"delete_entry_description\">¿Seguro de que quieres borrar la clave?</string>\n    <string name=\"delete_entry_explanation\">Esta acción no desactiva 2FA para:\\n<b>%s</b>\\n\\nPara prevenir la pérdida de acceso, asegúrate de que has desactivado 2FA o que tienes una forma alternativa de generar códigos para este servicio.</string>\n    <string name=\"delete_entries\">Borrar claves</string>\n    <plurals name=\"delete_entries_description\">\n        <item quantity=\"one\">¿Seguro de que desea eliminar %d clave?</item>\n        <item quantity=\"other\">¿Seguro que quieres borrar %d claves?</item>\n    </plurals>\n    <string name=\"discard_changes\">¿Descartar cambios?</string>\n    <string name=\"discard_changes_description\">Tus cambios no se han guardado</string>\n    <string name=\"saving_profile_error\">Hubo un error al guardar el perfil</string>\n    <string name=\"saving_assign_icons_error\">Error al asignar iconos</string>\n    <string name=\"welcome\">Te damos la bienvenida</string>\n    <string name=\"app_description\">Aegis es una aplicación 2FA gratuita, segura y de código abierto</string>\n    <string name=\"setup_completed\">Se ha completado la configuración</string>\n    <string name=\"setup_completed_description\">Aegis se ha configurado y está listo para funcionar.</string>\n    <string name=\"vault_not_found\">Bóveda no encontrada, iniciando la configuración…</string>\n    <string name=\"copied\">Copiado</string>\n    <string name=\"errors_copied\">Se han copiado los errores al portapapeles</string>\n    <string name=\"version_copied\">Versión copiada al portapapeles</string>\n    <string name=\"error_required_field\">Este campo es obligatorio</string>\n    <string name=\"error_occurred\">Se ha producido un error</string>\n    <string name=\"decryption_error\">Se ha producido un error tratando de desbloquear la bóveda</string>\n    <string name=\"decryption_corrupt_error\">Se ha producido un error al intentar abrir la bóveda. El archivo podría estar dañado.</string>\n    <string name=\"saving_error\">Se ha producido un error tratando de guardar la bóveda</string>\n    <string name=\"vault_init_error\">Se ha producido un error tratando de desbloquear la bóveda</string>\n    <string name=\"vault_load_error\">Se ha producido un error al intentar cargar la bóveda desde el almacenamiento</string>\n    <string name=\"biometric_decrypt_error\">Se ha producido un error al intentar descifrar la bóveda mediante biometría. Esto normalmente solo pasa al cambiar los ajustes de seguridad del dispositivo. Desbloquea la bóveda con tu contraseña y reactiva la autenticación biométrica en la configuración de Aegis.</string>\n    <string name=\"biometric_init_error\">Se ha producido un error al intentar utilizar la biometría. Esto normalmente solo pasa al cambiar los ajustes de seguridad del dispositivo. Desbloquea la bóveda con tu contraseña y reactiva la autenticación biométrica en la configuración de Aegis.</string>\n    <string name=\"disable_encryption\">Desactivar cifrado</string>\n    <string name=\"disable_encryption_description\">¿Está seguro de que desea desactivar el cifrado?. Esto provocará que la bóveda sea almacenada en texto plano. <b>Las copias de seguridad automáticas también serán desactivadas</b>.</string>\n    <string name=\"enable_encryption_error\">Se ha producido un error al intentar activar el cifrado</string>\n    <string name=\"disable_encryption_error\">Se ha producido un error tratando de desactivar el cifrado</string>\n    <string name=\"backup_successful\">La copia de seguridad se programó correctamente</string>\n    <string name=\"backup_error\">Se ha producido un error mientras se trataba de crear una copia de seguridad</string>\n    <string name=\"backup_status_success\">Última copia de seguridad completa: %s</string>\n    <string name=\"backup_status_failed\">Última copia de seguridad fallida: %s</string>\n    <string name=\"backup_status_none\">Aún no se han realizado copias de seguridad</string>\n    <string name=\"backup_warning_password\">Las copias de seguridad se cifran usando una contraseña separada configurada en la configuración de seguridad</string>\n    <string name=\"documentsui_error\">Tu dispositivo parece no tener DocumentsUI. Es un componente del sistema importante y necesario para elegir y crear archivos. Si utilizaste una herramienta para desinstalar (o hacer «debloat» de) aplicaciones que vienen de fábrica es posible que la hayas eliminado accidentalmente, tendrás que volverla a instalarla.</string>\n    <string name=\"icon_pack_import_error\">Se ha producido un error al intentar importar un paquete de iconos</string>\n    <string name=\"icon_pack_import_exists_error\">El paquete de iconos a importar ya existe. ¿Quieres reemplazarlo?</string>\n    <string name=\"icon_pack_delete_error\">Se ha producido un error al intentar borrar un paquete de iconos</string>\n    <plurals name=\"icon_pack_info\">\n        <item quantity=\"one\">%d icono</item>\n        <item quantity=\"other\">%d iconos</item>\n    </plurals>\n    <string name=\"icon_custom\">Personalizado</string>\n    <string name=\"permission_denied\">Permiso denegado</string>\n    <string name=\"andotp_new_format\">Formato nuevo (v0.6.3 o superior) </string>\n    <string name=\"andotp_old_format\">Formato antiguo (v0.6.2 o anterior) </string>\n    <string name=\"choose_andotp_importer\">¿Qué formato tiene el archivo de copia de seguridad de andOTP?</string>\n    <string name=\"choose_totpauth_importer\">¿Está cifrada con una contraseña esta copia de seguridad de TOTP Authenticator?</string>\n    <string name=\"choose_application\">Elige la aplicación desde la que importar los datos</string>\n    <string name=\"choose_theme\">Elige el esquema de colores que más te guste</string>\n    <string name=\"choose_account_name_position\">Elige una posición para ubicar el nombre de la cuenta</string>\n    <string name=\"choose_view_mode\">Elige un modo de visualización</string>\n    <string name=\"choose_copy_behavior\">Seleccione el comportamiento de copia deseado</string>\n    <string name=\"parsing_file_error\">Se ha producido un error al intentar procesar el archivo</string>\n    <string name=\"file_not_found\">Error: Archivo no encontrado</string>\n    <string name=\"reading_file_error\">Se ha producido un error al intentar leer el archivo</string>\n    <string name=\"app_lookup_error\">Error: La aplicación no está instalada</string>\n    <string name=\"app_version_error\">La versión de %s que está instalada no es compatible. Las versiones recientes han comenzado a cifrar algunos de los archivos en el directorio de almacenamiento interno, haciendo que Aegis no pueda acceder a la información que necesita para la importación. Intentar importar probablemente resultará en un error. ¿Deseas continuar de todos modos?</string>\n    <string name=\"root_error\">Error: No se puede obtener acceso a la raíz</string>\n    <plurals name=\"imported_entries_count\">\n        <item quantity=\"one\">Importada %d clave</item>\n        <item quantity=\"other\">Importadas %d claves</item>\n    </plurals>\n    <plurals name=\"entries_shown\">\n        <item quantity=\"one\">Mostrando %d clave</item>\n        <item quantity=\"other\">Mostrando %d claves</item>\n    </plurals>\n    <string name=\"intro_import_error_title\">Se ha producido un error al importar la bóveda</string>\n    <string name=\"import_error_title\">Se han producido uno o más errores durante la importación</string>\n    <string name=\"exporting_vault_error\">Se ha producido un error tratando de exportar la bóveda</string>\n    <string name=\"exported_vault\">La bóveda ha sido exportada</string>\n    <string name=\"encryption_set_password_error\">Se ha producido un error tratando de establecer la contraseña.</string>\n    <string name=\"encryption_enable_biometrics_error\">Se ha producido un error al intentar activar el desbloqueo biométrico. Algunos dispositivos tienen deficiencias importantes en sus sistemas de autenticación biométrica y es probable que el tuyo sea uno de ellos. Prueba desactivándolo y dejando solo el acceso por contraseña.</string>\n    <string name=\"no_cameras_available\">No hay ninguna cámara disponible</string>\n    <string name=\"read_qr_error\">Se ha producido un error al intentar leer el código QR</string>\n    <string name=\"read_qr_error_phonefactor\">Aegis no es compatible con el algoritmo 2FA personalizado de Microsoft. Asegúrate de elegir «Configurar aplicación sin notificaciones» al generar tus códigos 2FA en Office 365 para que funcione.</string>\n    <string name=\"partial_google_auth_import\">Se ha detectado una exportación incompleta de Google Authenticator</string>\n    <string name=\"partial_google_auth_import_warning\">Algunos código QR de importación no están. Faltan los siguientes códigos:\\n\\n<b>%s</b>\\n\\nPuedes seguir adelante con esta importación parcial, pero te recomendamos volver a probar otra vez a escanear todos los códigos QR para evitar que pierdas el acceso a alguno de ellos.</string>\n    <string name=\"missing_qr_code_descriptor\">• código QR %d</string>\n    <plurals name=\"import_partial_export_anyway\">\n        <item quantity=\"one\">Seguir con la importación de este código</item>\n        <item quantity=\"other\">Seguir con la importación de estos %d códigos</item>\n    </plurals>\n    <string name=\"import_google_auth_failure\">Ha fallado la importación de lo exportado de Google Authenticator</string>\n    <string name=\"unrelated_google_auth_batches_error\">La exportación contiene información para un lote no relacionado. Intente importar 1 lote a la vez.</string>\n    <string name=\"no_tokens_can_be_imported\">Como consecuencia no se pudo importar ninguna de las claves</string>\n    <string name=\"unlocking_vault\">Desbloqueando la bóveda</string>\n    <string name=\"rename_group\">Renombrar grupo</string>\n    <string name=\"no_group_selection\">El resto de elementos que no hayas asignado apareceran como «Sin agrupar».</string>\n    <string name=\"remove_group\">Eliminar grupo</string>\n    <string name=\"remove_group_description\">¿Seguro que quieres borrar este grupo? Sus elementos se moverán automáticamente a «Sin grupo».</string>\n    <string name=\"remove_unused_groups\">Eliminar grupos no utilizados</string>\n    <string name=\"remove_unused_groups_description\">¿Seguro que quieres borrar todos los grupos que estén vacíos y no tengan ninguna clave dentro?</string>\n    <string name=\"remove_icon_pack\">Borrar paquete de iconos</string>\n    <string name=\"remove_icon_pack_description\">¿Seguro que quieres borrar este paquete de iconos? Las claves que ya utilicen algún icono de este paquete no se verán afectadas.</string>\n    <string name=\"details\">Más detalles</string>\n    <string name=\"show_error_details\">Mostrar detalles del error</string>\n    <string name=\"lock\">Bloquear</string>\n    <string name=\"name\">Cuenta</string>\n    <string name=\"no_group\">Sin grupo</string>\n    <string name=\"sort\" comment=\"Title of the Sort button in the top action bar of the main view\">Ordenar</string>\n    <string name=\"sort_alphabetically\">Emisor (A a Z)</string>\n    <string name=\"sort_alphabetically_reverse\">Emisor (Z a A)</string>\n    <string name=\"sort_alphabetically_name\">Cuenta (A a Z)</string>\n    <string name=\"sort_alphabetically_name_reverse\">Cuenta (Z a A)</string>\n    <string name=\"sort_usage_count\">Contador de uso</string>\n    <string name=\"sort_last_used\">Último uso</string>\n    <string name=\"sort_custom\">Personalizado</string>\n    <string name=\"last_used\">Último uso</string>\n    <string name=\"last_used_never\">nunca</string>\n    <string name=\"new_group\">Nuevo grupo…</string>\n    <string name=\"group\">Grupo</string>\n    <string name=\"group_name_hint\">Nombre del grupo</string>\n    <string name=\"preference_manage_groups\">Editar grupos</string>\n    <string name=\"preference_manage_groups_summary\">Gestiona y borra tus grupos</string>\n    <string name=\"preference_reset_usage_count\">Reiniciar contador de uso</string>\n    <string name=\"preference_reset_usage_count_summary\">Restablece el contador de uso de todas las claves de tu bóveda</string>\n    <string name=\"preference_reset_usage_count_dialog\">¿Seguro de que quieres resetear el contador de uso de todas las claves y dejarlos a cero?</string>\n    <string name=\"note\" comment=\"Users can add a note to an entry\">Nota</string>\n    <string name=\"clear\">Restablecer</string>\n    <string name=\"dialog_duplicate_entry_title\" comment=\"'Duplicate' is a noun here\">Hay un código duplicado</string>\n    <string name=\"dialog_duplicate_entry_message\">Este código tiene el mismo nombre y emisor que otros que ya están en la lista. ¿Qué quieres hacer?</string>\n    <string name=\"dialog_duplicate_entry_overwrite_title\">Sobrescribir códigos</string>\n    <string name=\"dialog_duplicate_entry_overwrite_subtitle\">Reemplazarlos. Esta acción no se puede deshacer</string>\n    <string name=\"dialog_duplicate_entry_suffix_title\">Añadir sufijo</string>\n    <string name=\"dialog_duplicate_entry_suffix_subtitle\">Añade un sufijo al nombre de este nuevo código. El nuevo nombre será: %s</string>\n    <string name=\"dialog_duplicate_entry_cancel_title\">No guardar</string>\n    <string name=\"dialog_duplicate_entry_cancel_subtitle\">Permite editarlo antes de volverlo a guardar</string>\n    <plurals name=\"dialog_duplicate_entry_overwrite_dialog_message\">\n        <item quantity=\"one\">¿Seguro que quieres borrar %d elemento con el siguiente nombre:\\n\\n%s - %s?</item>\n        <item quantity=\"other\">¿Seguro que quieres borrar %d elementos con el siguiente nombre:\\n\\n%s - %s?</item>\n    </plurals>\n    <string name=\"dialog_duplicate_entry_overwrite_dialog_title\">Confirmar borrado</string>\n    <string name=\"pref_haptic_feedback_summary\">Hace vibrar tu dispositivo al actualizar los códigos</string>\n    <string name=\"pref_haptic_feedback_title\">Vibración</string>\n    <string name=\"pref_highlight_entry_title\">Resaltar códigos al pulsar</string>\n    <string name=\"pref_highlight_entry_summary\">Resalta temporalmente cada clave que toques sobre las demás para que sea más fácil de distinguir</string>\n    <string name=\"pref_groups_multiselect_title\">Selección multiple de grupos</string>\n    <string name=\"pref_groups_multiselect_summary\">Permite seleccionar varios grupos a la vez</string>\n    <string name=\"pref_minimize_on_copy_title\">Minimizar al copiar</string>\n    <string name=\"pref_minimize_on_copy_summary\">Minimiza la aplicación tras copiar claves</string>\n    <string name=\"pref_copy_behavior_title\">Copiar claves en el portapapeles</string>\n    <string name=\"pref_search_behavior_title\">Comportamiento de búsqueda</string>\n    <string name=\"pref_pause_entry_title\">Congelar claves al tocarlas</string>\n    <string name=\"pref_pause_entry_summary\">Pausa la recarga automática de las claves al tocarlas, por lo que no irán cambiando según expiran. Es necesario que también actives «Resaltar códigos al pulsar» o «Pulsar para mostrar».</string>\n    <string name=\"pin_keyboard_description\">Escribe tu contraseña para activar el teclado PIN. Ten en cuenta que esto solo funciona si tu contraseña son todo números</string>\n    <string name=\"pin_keyboard_error\">Error al activar el teclado PIN</string>\n    <string name=\"pin_keyboard_error_description\">No se pudo abrir el teclado PIN. Para ello tu contraseña tiene que ser completamente numérica.</string>\n    <string name=\"pin_keyboard_disabled\">Contraseña cambiada. Ya no se mostrará el teclado PIN.</string>\n    <string name=\"selected\">Seleccionado</string>\n    <string name=\"dark_theme_title\">Tema oscuro</string>\n    <string name=\"light_theme_title\">Tema claro</string>\n    <string name=\"amoled_theme_title\">Tema AMOLED</string>\n    <string name=\"system_theme_title\">Cambiar según ahorro de batería</string>\n    <string name=\"system_amoled_theme_title\">Cambiar según ahorro de batería (AMOLED)</string>\n    <string name=\"normal_viewmode_title\">Normal</string>\n    <string name=\"compact_mode_title\">Compacto</string>\n    <string name=\"small_mode_title\">Pequeño</string>\n    <string name=\"tiles_mode_title\">Casillas</string>\n    <string name=\"unknown_issuer\">Emisor desconocido</string>\n    <string name=\"unknown_account_name\">Nombre de cuenta desconocido</string>\n    <plurals name=\"import_error_dialog\">\n        <item quantity=\"one\">Aegis no pudo importar %d clave, por lo que se omitirá. Pulsa «más detalles» para ver más información sobre este fallo.</item>\n        <item quantity=\"other\">Aegis no pudo importar %d claves, por lo que se omitirán. Pulsa «más detalles» para ver más información sobre el error.</item>\n    </plurals>\n    <string name=\"unable_to_process_deeplink\">No se puede procesar el enlace profundo</string>\n    <string name=\"unable_to_read_qrcode_file\">No se puede leer y procesar el código QR del archivo: %s.</string>\n    <string name=\"unable_to_process_shared_text\">No se puede procesar el texto compartido como OTP</string>\n    <string name=\"unable_to_read_qrcode_files\">No se pueden leer y procesar algunos de los códigos QR. Solo se importarán %1$d de %2$d.</string>\n    <string name=\"unable_to_generate_qrcode\">No se puede generar el código QR</string>\n    <string name=\"select_picture\">Seleccionar imagen</string>\n    <string name=\"select_icon\">Seleccionar icono</string>\n    <string name=\"tile_open_vault\" comment=\"label for a quick settings tile that opens the app when tapped\">Abrir bóveda</string>\n    <string name=\"tile_open_scanner\" comment=\"label for a quick settings tile that opens the QR code scanner when tapped\">Abrir escáner</string>\n    <string name=\"toggle_checkboxes\">Activar casillas de verificación</string>\n    <string name=\"search\">Buscar</string>\n    <string name=\"channel_name_lock_status\">Estado de bloqueo</string>\n    <string name=\"channel_description_lock_status\">Aegis puede crear una notificación persistente para notificar cuando la bóveda está bloqueada</string>\n    <string name=\"vault_unlocked_state\">La bóveda está desbloqueada. Pulse aquí para bloquear.</string>\n    <string name=\"version\">Versión</string>\n    <string name=\"changelog\">Historial de cambios</string>\n    <string name=\"whats_new\">Novedades</string>\n    <string name=\"github_description\">Código fuente, problemas e información</string>\n    <string name=\"license\">Licencia</string>\n    <string name=\"license_description\">Aegis Authenticator se distribuye bajo los términos de la licencia GPLv3</string>\n    <string name=\"third_party_licenses\">Licencias de terceros</string>\n    <string name=\"third_party_licenses_description\">Licencias de las bibliotecas de terceros usadas por Aegis</string>\n    <string name=\"country_netherlands\">Países Bajos</string>\n    <string name=\"email_us\">Contacta por correo electrónico</string>\n    <string name=\"visit_website\">Visita nuestra web</string>\n    <string name=\"about_support\">Soporte</string>\n    <string name=\"support_rate\">Valorar</string>\n    <string name=\"support_rate_description\">Colabora dejando tu reseña en Google Play Store</string>\n    <string name=\"webview_error\">Este dispositivo no soporta web view, lo cual es necesario para visualizar el registro de cambios y la licencia. Falta un componente del sistema.</string>\n    <string name=\"email\">Correo electrónico</string>\n    <string name=\"time_sync_warning_title\">Sincronización automática de hora</string>\n    <string name=\"time_sync_warning_message\">Aegis depende que la hora de tu dispositivo esté bien para generar códigos válidos en cada momento. Una pequeña diferencia de unos segundos podría hacer que los códigos no se acepten. Parece que tu dispositivo no está configurado para sincronizar automáticamente la hora. ¿Quieres hacerlo ahora?</string>\n    <string name=\"time_sync_warning_disable\">No molestar, sé muy bien lo que hago.</string>\n    <string name=\"google_qr_export_unrelated\">Encontrado código QR no relacionado. Intente reiniciar el escáner.</string>\n    <plurals name=\"google_qr_export_scanned\">\n        <item quantity=\"one\">Se han escaneado %1$d de %2$d códigos QR</item>\n        <item quantity=\"other\">Se han escaneado%1$d de %2$d códigos QR</item>\n    </plurals>\n    <string name=\"google_qr_export_unexpected\">Se esperaba el código QR número %1$d, pero parece que has escaneado el número %2$d</string>\n    <string name=\"backup_error_bar_message\"><b>La copia de seguridad de la bóveda ha fallado recientemente</b></string>\n    <string name=\"backup_error_dialog_details\" comment=\"The first parameter is the type of backup (e.g. built-in or Android backup). The second parameter is an elapsed time in the style of 'x seconds/minutes/days ago'.\">        Ha fallado una copia de la bóveda mediante %1$s realizada %2$s. Asegúrate de que la configuración esté bien para evitar problemas.\n    </string>\n    <string name=\"backup_permission_error_dialog_details\" comment=\"The first parameter is the type of backup (e.g. built-in or Android backup). The second parameter is an elapsed time in the style of 'x seconds/minutes/days ago'.\">        Ha fallado una copia de la bóveda mediante %1$s realizada %2$s porque Aegis no tenía permiso para escribir la carpeta elegida. Este error puede producirse si se ha movido o renombrado la carpeta o si has importado los ajustes de Aegis desde otro dispositivo. Vuelve a configurar la carpeta destino.\n    </string>\n    <string name=\"backup_system_builtin\">Copias de seguridad automáticas de Aegis</string>\n    <string name=\"backup_system_android\">Sistema de copias de seguridad en la nube de Android</string>\n    <string name=\"backup_reminder_bar_message_with_latest\" comment=\"The parameter is an elapsed time in the style of 'x seconds/minutes/days ago'\">        La última copia de seguridad está desactualizada (%s)\n    </string>\n    <string name=\"backup_reminder_bar_message\">        Los cambios no están respaldados\n    </string>\n    <string name=\"backup_reminder_bar_dialog_title\">Los cambios no están respaldados</string>\n    <string name=\"backup_reminder_bar_dialog_summary\">        Los últimos en la bóveda todavía no se han respaldado. Es importante hacer copias de seguridad programadas para evitar perder el acceso a tus cuentas. Te recomendamos encarecidamente activarlas en el menú de ajustes.\n    </string>\n    <string name=\"backup_reminder_bar_dialog_accept\">Configurar copias de seguridad</string>\n    <string name=\"backup_plaintext_export_warning\"><b>La bóveda fue exportada recientemente en texto plano</b></string>\n    <string name=\"pref_show_plaintext_warning_hint\">No volver a mostrar esta advertencia</string>\n    <string name=\"backup_plaintext_warning_explanation\">Esta advertencia se muestra porque recientemente exportaste una copia sin cifrar de la bóveda. Para mantener la seguridad de tus claves te recomendamos eliminar este archivo cuando deje de ser necesario.</string>\n    <string name=\"switch_camera\">Cambiar cámara</string>\n    <string name=\"empty_list\">Todavía no tienes ningún código; añade alguno pulsando en el botón «+» de la esquina inferior derecha</string>\n    <string name=\"empty_list_title\">No hay ninguna clave</string>\n    <string name=\"empty_group_list\">Todavía no hay ningún grupo; añade uno en la pantalla de editar claves</string>\n    <string name=\"empty_group_list_title\">No se encontraron grupos</string>\n    <string name=\"no_icon_packs\">Aún no se ha importado ningún paquete de iconos. Pulsa «+» para importar uno. Consejo: te recomendamos que pruebes <a href=\"https://aegis-icons.github.io\">aegis-icons</a>.</string>\n    <string name=\"no_icon_packs_title\">No parece haber ningún paquete de iconos</string>\n    <string name=\"pick_icon\">Seleccione un icono</string>\n    <string name=\"uncategorized\">Sin categorizar</string>\n    <string name=\"done\">Hecho</string>\n    <plurals name=\"qr_count\">\n        <item quantity=\"one\">%d / %d código QR</item>\n        <item quantity=\"other\">%d / %d códigos QR</item>\n    </plurals>\n    <string name=\"next\">Siguiente</string>\n    <string name=\"previous\">Anterior</string>\n    <string name=\"copy_uri\">Copiar dirección URI</string>\n    <string name=\"unable_to_copy_uri_to_clipboard\">No se puede copiar la dirección URI en el portapapeles</string>\n    <string name=\"uri_copied_to_clipboard\">Se ha copiado la dirección URI al portapapeles</string>\n    <string name=\"transfer_entry_description\">Escanea este código QR con la aplicación de autenticación a la que vayas a importar esta clave</string>\n    <string name=\"transfer_entry_brightness\">Pulsa el código QR para subir/bajar el brillo a pantalla completa</string>\n    <string name=\"google_auth_compatible_transfer_description\">Escanea estos códigos QR con Aegis o Google Authenticator.\\n\\nDebido a limitaciones técnicas de Google Authenticator solo se incluirán claves de tipo TOTP y HOTP que usen SHA1 y produzcan códigos de 6 dígitos</string>\n    <string name=\"password_strength_very_weak\">Muy débil</string>\n    <string name=\"password_strength_weak\">Débil</string>\n    <string name=\"password_strength_fair\">Aceptable</string>\n    <string name=\"password_strength_good\">Buena</string>\n    <string name=\"password_strength_strong\">Fuerte</string>\n    <string name=\"password_strength_unknown\">Contraseña demasiado larga para el análisis de fortaleza</string>\n    <string name=\"pref_pin_keyboard_title\">Usar teclado PIN en la pantalla de bloqueo</string>\n    <string name=\"pref_pin_keyboard_summary\">Marque esto si desea activar el teclado PIN en la pantalla de bloqueo. Ésto solo funcionará para contraseñas numéricas</string>\n    <string name=\"title_activity_preferences\">Configuración</string>\n    <string name=\"title_activity_manage_groups\">Gestionar grupos</string>\n    <string name=\"title_activity_transfer\">Transferir entradas</string>\n    <string name=\"title_activity_about\">Acerca de</string>\n    <string name=\"title_activity_edit_entry\">Editar clave</string>\n    <string name=\"title_activity_scan_qr\">Escanear un código QR</string>\n    <string name=\"title_activity_import_entries\">Importar entradas</string>\n    <string name=\"title_activity_assign_icons\">Asignar iconos</string>\n    <string name=\"title_activity_licenses\">Licencias de terceros</string>\n    <string name=\"dialog_wipe_entries_title\">Borrado de claves</string>\n    <string name=\"dialog_wipe_entries_message\">Tu bóveda no está vacía. ¿Quieres borrar todos las claves actuales antes de importar este archivo?\\n\\n<b>Al hacerlo perderás cualquiera de las claves que ya existen en la bóveda.</b></string>\n    <string name=\"dialog_wipe_entries_checkbox\">Limpiar el contenido de la bóveda</string>\n    <string name=\"import_from_clipboard_title\">Importar desde el portapapeles</string>\n    <string name=\"import_from_clipboard_message\">Parece que hay una dirección URI de otpauth en el portapapeles.\\n\\n<b>Nombre</b>: %1$s\\n<b>Emisor</b>: %2$s\\n\\n¿Quieres autocompletar los datos con esto?</string>\n    <string name=\"panic_trigger_ignore_toast\">Aegis ha recibido el activador de pánico pero la configuración está deshabilitada, ignorando</string>\n    <string name=\"pref_panic_trigger_title\">Eliminar la bóveda al activar el pánico</string>\n    <string name=\"pref_panic_trigger_summary\">Eliminar la bóveda cuando se recibe una activación de pánico desde Ripple</string>\n    <string name=\"import_vault\">Importar bóveda de Aegis</string>\n    <string name=\"import_vault_hint\">¿Quieres importar desde una aplicación 2FA diferente? Completa la configuración primero y luego ve al menú de configuración.</string>\n    <plurals name=\"import_duplicate_toast\">\n        <item quantity=\"one\">%d duplicado potencial sin mirar, revisa el listado.</item>\n        <item quantity=\"other\">Hay %d duplicados potenciales sin mirar, revisa el listado.</item>\n    </plurals>\n    <string name=\"importer_help_2fas\">Suministre un archivo exportado de 2FAS Authenticator.</string>\n    <string name=\"importer_help_aegis\">Suministre un archivo exportado/copia de seguridad de Aegis.</string>\n    <string name=\"importer_help_authenticator_plus\">Suministre un archivo exportado de Authenticator Plus obtenido a través de <b>Ajustes -&gt; Copias de seguridad -&gt; Exportar como texto y HTML</b>.</string>\n    <string name=\"importer_help_authy\">Proporciona una copia del archivo <b>/data/data/com.authy.authy/shared_prefs/com.authy.storage.tokens.authenticator.xml</b>, ubicado en la carpeta de almacenamiento interno de Authy.</string>\n    <string name=\"importer_help_andotp\">Suministre un archivo exportado/copia de seguridad de andOTP.</string>\n    <string name=\"importer_help_bitwarden\">Suministra un archivo de exportación/copia de seguridad de Bitwarden. Los archivos encriptados no están soportados.</string>\n    <string name=\"importer_help_battle_net_authenticator\">Proporciona una copia del archivo <b>/data/data/com.blizzard.messenger/shared_prefs/com.blizzard.messenger.authenticator_preferences.xml</b>, ubicado en la carpeta de almacenamiento interno del Authenticator de Battle.net.</string>\n    <string name=\"importer_help_duo\">Suministre una copia de <b>/data/data/com.duosecurity.duomobile/files/duokit/accounts.json</b>, localizado en el directorio de almacenamiento interno de DUO.</string>\n    <string name=\"importer_help_ente_auth\">Proporciona un archivo exportado desde Ente Auth, ten en cuenta que sólo se admiten archivos sin cifrar.</string>\n    <string name=\"importer_help_freeotp\">FreeOTP 2: Proporciona una copia del archivo de respaldo exportado. En las versiones 1.x: Proporciona el archivo <b>/data/data/org.fedorahosted.freeotp/shared_prefs/tokens.xml</b>, ubicado en la carpeta de almacenamiento interno de FreeOTP.</string>\n    <string name=\"importer_help_freeotp_plus\">Suministre un archivo exportado de FreeOTP+.</string>\n    <string name=\"importer_warning_title_freeotp2\">Compatibilidad con FreeOTP 2</string>\n    <string name=\"importer_warning_message_freeotp2\">Hay una serie de problemas en FreeOTP 2 que pueden hacer que la exportación genere un archivo incompleto o no válido. Aegis intentará rescatar tantos elementos como sea posible, pero es posible que solo unos pocos (o ninguno) se pueda importar.</string>\n    <string name=\"importer_help_google_authenticator\"><b>Solo funcionará con archivos de base de datos de Google Authenticator v5.10 e inferiores</b>.\\n\\nProporciona una copia del archivo <b>/data/data/com.google.android.apps.authenticator2/databases/databases</b>, ubicado en la carpeta de almacenamiento interno de Google Authenticator.</string>\n    <string name=\"importer_help_microsoft_authenticator\">Suministre una copia de <b>/data/data/com.azure.authenticator/databases/PhoneFactor</b>, localizado en el directorio de almacenamiento interno de Microsoft Authenticator.</string>\n    <string name=\"importer_help_plain_text\">Suministre un archivo de texto plano con una URI de Google Authenticator en cada línea.</string>\n    <string name=\"importer_help_proton_authenticator\">Proporciona un archivo de exportación de Proton Authenticator (.json) obtenido a través de <b>Ajustes -&gt; Exportar</b>.</string>\n    <string name=\"importer_help_steam\"><b>Steam v3.0 y posteriores no son compatibles</b>. Proporcione una copia de <b>/data/data/com.valvesoftware.android.steam.community/files/Steamguard-*.json</b>, ubicado en el directorio de almacenamiento interno de Steam.</string>\n    <string name=\"importer_help_stratum\">Suministra un archivo de exportación de Stratum obtenido a través de <b>Configuración -&gt; Copias de seguridad -&gt; Copia de seguridad en archivo cifrado (recomendado)</b>.</string>\n    <string name=\"importer_help_totp_authenticator\">Suministre un archivo exportado de TOTP Authenticator.</string>\n    <string name=\"importer_help_winauth\">Suministre un archivo exportado de WinAuth.</string>\n    <string name=\"import_assign_icons_dialog_title\">Asignar iconos</string>\n    <string name=\"import_assign_icons_dialog_text\">¿Deseas asignar iconos a las entradas importadas?</string>\n    <string name=\"importer_encrypted_exception_google_authenticator\">Se omitió esta clave cifrada: %s</string>\n    <string name=\"importer_help_direct\">Importa entradas directamente de %s. Esto requiere que la aplicación esté instalada en este dispositivo y que se conceda acceso root a Aegis.</string>\n    <string name=\"groups\">Grupos</string>\n    <string name=\"pref_focus_search\">Resaltar el buscador al inicio</string>\n    <string name=\"pref_focus_search_summary\">Enfoca la búsqueda inmediatamente después de abrir la aplicación.</string>\n    <string name=\"pref_grouping_halves\">En dos mitades</string>\n    <string name=\"pref_grouping_none\">Sin agrupar</string>\n    <string name=\"pref_grouping_size_two\">En grupos de dos</string>\n    <string name=\"pref_grouping_size_three\">En grupos de tres</string>\n    <string name=\"pref_grouping_size_four\">En grupos de cuatro</string>\n    <string name=\"pref_copy_behavior_never\">Nunca</string>\n    <string name=\"pref_copy_behavior_single_tap\">Un toque</string>\n    <string name=\"pref_copy_behavior_double_tap\">Dos toques</string>\n    <string name=\"pref_account_name_position_hidden\">Oculto</string>\n    <string name=\"pref_account_name_position_end\">Junto al emisor</string>\n    <string name=\"pref_account_name_position_below\">Debajo del emisor</string>\n    <plurals name=\"time_elapsed_seconds\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"one\">Hace %d segundo</item>\n        <item quantity=\"other\">Hace %d segundos</item>\n    </plurals>\n    <plurals name=\"time_elapsed_minutes\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"one\">Hace %d minuto</item>\n        <item quantity=\"other\">Hace %d minutos</item>\n    </plurals>\n    <plurals name=\"time_elapsed_hours\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"one\">Hace %d hora</item>\n        <item quantity=\"other\">Hace %d horas</item>\n    </plurals>\n    <plurals name=\"time_elapsed_days\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"one\">Hace %d día</item>\n        <item quantity=\"other\">Hace %d días</item>\n    </plurals>\n    <plurals name=\"time_elapsed_years\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"one\">Hace %d año</item>\n        <item quantity=\"other\">Hace %d años</item>\n    </plurals>\n    <plurals name=\"dropdown_checkboxes_default_count\">\n        <item quantity=\"one\">%d elemento seleccionado</item>\n        <item quantity=\"other\">%d elementos seleccionados</item>\n    </plurals>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-es-rES-v29/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"system_theme_title\">Del sistema</string>\n    <string name=\"system_amoled_theme_title\">Del sistema (AMOLED)</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-et-rEE/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources xmlns:tools=\"http://schemas.android.com/tools\">\n    <string name=\"action_settings\">Seadistused</string>\n    <string name=\"action_about\">Rakenduse teave</string>\n    <string name=\"action_delete\">Kustuta</string>\n    <string name=\"action_transfer\">Teisalda</string>\n    <string name=\"action_edit_icon\">Muuda ikooni</string>\n    <string name=\"action_reset_usage_count\">Nulli kasutuskordade loendur</string>\n    <string name=\"action_reset_usage_count_dialog\">Kas sa oled kindel, et soovid nullida selle kirje kasutuskordade loenduri?</string>\n    <string name=\"action_default_icon\">Taasta vaikimisi ikoon</string>\n    <string name=\"discard\">Loobu</string>\n    <string name=\"save\">Salvesta</string>\n    <string name=\"all\">Kõik</string>\n    <string name=\"issuer\">Väljaandja</string>\n    <string name=\"yandex_pin\">PIN-kood (4–16 numbrit)</string>\n    <string name=\"motp_pin\">PIN-kood (4 numbrit)</string>\n    <string name=\"suggested\">Soovitatud</string>\n    <string name=\"usage_count\">Kasutuskordi</string>\n    <string name=\"warning\">Hoiatus</string>\n    <string name=\"pref_cat_appearance_app\">Rakendus</string>\n    <string name=\"pref_cat_appearance_entries\">Kirjeid</string>\n    <string name=\"pref_cat_backups_android\">Android</string>\n    <string name=\"pref_cat_backups_auto\">Automaatsed varukoopiad</string>\n    <string name=\"pref_section_behavior_title\">Käitumine</string>\n    <string name=\"pref_section_behavior_summary\">Kirjete loendi kohendamise võimalused.</string>\n    <string name=\"pref_section_appearance_title\">Välimus</string>\n    <string name=\"pref_section_appearance_summary\">Muuda kujundust, keelt ja muid seadistusi, mis mõjutavad rakenduse välimust.</string>\n    <string name=\"pref_section_security_title\">Turvalisus</string>\n    <string name=\"pref_section_security_summary\">Seadista krüptimist, biomeetrilist tuvastust, automaatset lukustust ja muid turvaseadistusi.</string>\n    <string name=\"pref_section_import_export_title\">Andmete import ja eksport</string>\n    <string name=\"pref_section_import_export_summary\">Impordi Aegise või teiste autentimisrakenduste varukoopiaid. Tee Aegise andmehoidlast käsitsi varukoopia.</string>\n    <string name=\"pref_section_audit_log_title\">Rakenduse logi</string>\n    <string name=\"pref_section_audit_log_summary\">Kõikide oluliste rakendusega juhtunud sündmuste logi hilisema auditeerimise jaoks.</string>\n    <string name=\"pref_section_backups_title\">Varukoopiad</string>\n    <string name=\"pref_section_backups_summary\">Seadista varukoopiate loomine sinu valitud asukohta või võta kasutusele Androidi pilvevarunduse lahendus.</string>\n    <string name=\"pref_section_icon_packs\">Ikoonipakid</string>\n    <string name=\"pref_section_icon_packs_summary\">Halda ja impordi ikoonipakke</string>\n    <string name=\"pref_select_theme_title\">Kujundus</string>\n    <string name=\"pref_dynamic_colors_title\">Dünaamilised värvid</string>\n    <string name=\"pref_dynamic_colors_summary\">Kasuta ülekatte jaoks Androidi kasutajaliidese kujunduse värve</string>\n    <string name=\"pref_view_mode_title\">Kasutatav vaade</string>\n    <string name=\"pref_lang_title\">Keel</string>\n    <string name=\"pref_show_icons_title\">Näita ikoone</string>\n    <string name=\"pref_show_icons_summary\">Näita iga kirje kõrval ikoone</string>\n    <string name=\"pref_code_group_size_title\">Koodinumbrite rühmitamine</string>\n    <string name=\"pref_code_group_size_summary\">Vali koodide rühmitamise viis</string>\n    <string name=\"pref_account_name_position_title\">Näita kasutajakonto nime</string>\n    <string name=\"pref_show_next_code_title\">Näita järgmist koodi</string>\n    <string name=\"pref_show_next_code_summary\">Loo järgmine kood ja näita seda enne õiget aega</string>\n    <string name=\"pref_expiration_state_title\">Anna märku koodide aegumisest</string>\n    <string name=\"pref_expiration_state_summary\">Enne aegumist muuda kinnituskoodi värvi ja vilguta neid</string>\n    <string name=\"pref_expiration_state_fallback\">Enne aegumist muuda kinnituskoodi värvi</string>\n    <string name=\"pref_shared_issuer_account_name_title\">Näita kasutajakonto nime vaid siis, kui see vajalik on</string>\n    <string name=\"pref_shared_issuer_account_name_summary\">Näita kasutajakontode nimesid vaid siis, kui neil on sama väljaandja. Muul juhul on kasutajakontode nimed peidetud.</string>\n    <string name=\"pref_account_name_position_summary_override\">See seadistus ei toimi ruudustikuvaates. Kasutajakonto nimi on näha väljaandja all.</string>\n    <string name=\"pref_import_file_title\">Impordi failist</string>\n    <string name=\"pref_import_file_summary\">Impordi andmekirjed failist</string>\n    <string name=\"pref_android_backups_title\">Androidi pilvevarundus</string>\n    <string name=\"pref_android_backups_summary\">Luba kaasata Aegise varukoopiaid Androidi sisseehitatud pilvevarundusse. Kehtib vaid krüptitud andmehoidla puhul.</string>\n    <string name=\"pref_android_backups_hint\"><i>Seadmelt seadmele (Device-to-device, D2D) varukoopiad on lubatud alati, sõltumata ülaltoodud seadistusest</i></string>\n    <string name=\"pref_backups_title\">Tee andmehoidlast automaatselt varukoopiaid</string>\n    <string name=\"pref_backups_summary\">Peale iga muudatust tee automaatselt andmehoidlast varukoopia. See funktsionaalsus toimib vaid krüptitud andmehoidlate puhul.</string>\n    <string name=\"pref_backups_reminder_title\">Varunduse meeldetuletus</string>\n    <string name=\"pref_backups_reminder_summary\">Kui sa pole viimaseid muudatusi varundanud, näita meeldetuletust sinu andmehoidla kohta.</string>\n    <string name=\"pref_backups_reminder_dialog_title\">Lülita varunduse meeldetuletus välja</string>\n    <string name=\"pref_backups_reminder_dialog_summary\">Selle meeldetuletuse väljalülitamisel Aegis ei anna sulle enam teada, kas muudatused on varundatud või mitte. Sellega tekib aga võimalus, et võid kaotada ligipääsu oma tunnuslubadele. Kas sa oled kindel, et soovid meeldetuletuse välja lülitada?</string>\n    <string name=\"pref_backups_versioning_strategy_title\">Varundusplaan</string>\n    <string name=\"pref_backups_versioning_strategy_keep_x_versions\">Säilita mitu varukoopiat</string>\n    <string name=\"pref_backups_versioning_strategy_single_backup\">Tee vaid üks varukoopia</string>\n    <string name=\"pref_backups_versioning_strategy_single_backup_warning\">Sinu valitud varundusplaan pole töökindel ja me ei soovita seda. Vaid ühe varukoopia tegemisel võid selle kaotada.</string>\n    <string name=\"pref_backups_versioning_strategy_dialog_title\">Vali varundusplaan</string>\n    <string name=\"pref_backups_location_title\">Varukoopia asukoht</string>\n    <string name=\"pref_backups_location_summary\">Varukoopiad salvestuvad siin:</string>\n    <string name=\"pref_backup_location_summary\">Varukoopia salvestub siin:</string>\n    <string name=\"pref_backups_trigger_title\">Käivita kohe varundus</string>\n    <string name=\"pref_backups_trigger_summary\">Tee varundus käsitsi</string>\n    <string name=\"pref_backups_versions_title\">Säilitatavate versioonide arv</string>\n    <string name=\"pref_backups_versions_infinite\">\\u221E</string>\n    <plurals name=\"pref_backups_versions_summary\">\n        <item quantity=\"one\">Säilita varukoopiast %1$d versioon</item>\n        <item quantity=\"other\">Säilita varukoopiast %1$d versiooni</item>\n    </plurals>\n    <string name=\"pref_backups_versions_infinite_summary\">Säilita varukooiate lõputu arv versioone</string>\n    <string name=\"pref_import_app_title\">Impordi rakendusest</string>\n    <string name=\"pref_import_app_summary\">Impordi tunnusload rakendusest (eeldab juurkasutaja õigusi)</string>\n    <string name=\"pref_export_title\">Ekspordi</string>\n    <string name=\"pref_export_summary\">Ekspordi andmehoidla</string>\n    <string name=\"pref_password_reminder_title\">Salasõna meeldetuletus</string>\n    <string name=\"pref_google_auth_export_title\">Eksportimine Google Authenticatori jaoks</string>\n    <string name=\"pref_google_auth_export_descriptor\">Selle valikuga saad luua eksportimiseks QR-koode, mis sobivad Google Authenticatori jaoks</string>\n    <string name=\"pref_google_auth_export_no_data\">Pole andmeid, mida saaks eksportida</string>\n    <plurals name=\"pref_google_auth_export_incompatible_entries\">\n        <item quantity=\"one\">Jätsin vahele %d mitteühilduva kirje</item>\n        <item quantity=\"other\">Jätsin vahele %d mitteühilduvat kirjet</item>\n    </plurals>\n    <string name=\"pref_password_reminder_summary\">Selleks, et sa salasõna ei unustaks, näita %s meeldetuletust salasõna sisestamiseks.</string>\n    <string name=\"pref_password_reminder_summary_disabled\">Pole kasutusel</string>\n    <string name=\"pref_secure_screen_title\">Ekraanivaate turvalisus</string>\n    <string name=\"pref_secure_screen_summary\">Rakenduse kasutamisel keela ekraanitõmmiste tegemine ja muul viisil ekraanipildi jäädvustamine</string>\n    <string name=\"pref_tap_to_reveal_title\">Näitamiseks puuduta</string>\n    <string name=\"pref_tap_to_reveal_summary\">Vaikimisi on kinnituskoodid peidetud. Selle nägemiseks klõpsi kirjel.</string>\n    <string name=\"pref_tap_to_reveal_time_title\">Näitamise kestus peale puudutamist</string>\n    <string name=\"pref_auto_lock_title\">Automaatne lukustus</string>\n    <string name=\"pref_auto_lock_summary\">Kui %s</string>\n    <string name=\"pref_auto_lock_summary_disabled\">Pole kasutusel</string>\n    <string name=\"pref_auto_lock_prompt\">Lukusta Aegis automaatselt</string>\n    <string name=\"pref_auto_lock_type_back_button\">Androidi „Tagasi“ nupu vajutamisel</string>\n    <string name=\"pref_auto_lock_type_minimize\">Rakenduse minimeerimisel</string>\n    <string name=\"pref_auto_lock_type_device_lock\">Seadme lukustamisel</string>\n    <string name=\"pref_backup_password_category\">Varundus ja eksport</string>\n    <string name=\"pref_backup_password_title\">Eraldi salasõna varunduse ja ekspordi jaoks</string>\n    <string name=\"pref_backup_password_summary\">Kui see eelistus on kasutusel, siis rakenduse lukustuse eemaldamiseks kasutatav salasõna enam ei toimi varukoopiate ja ekspordifailide dekrüptimisel.</string>\n    <string name=\"pref_backup_password_change_title\">Muuda varunduse ja ekspordi salasõna</string>\n    <string name=\"pref_backup_password_change_summary\">Muuda salasõna, mida kasutatakse andmehoidla krüptimiseks varukoopia tegemisel ja eksportimisel.</string>\n    <string name=\"pref_encryption_title\">Krüptimine</string>\n    <string name=\"pref_encryption_summary\">Krüpti andmehoidla salasõna või biomeetrilise tuvastusega ning kasuta neid ka lukustuse eemaldamisel</string>\n    <string name=\"pref_biometrics_title\">Biomeetriline tuvastus</string>\n    <string name=\"pref_biometrics_summary\">Kasuta andmehoidla lukustuse eemaldamiseks biomeetrilist tuvastust</string>\n    <string name=\"pref_search_behavior_summary\">Otsi väljadest: %s</string>\n    <string name=\"pref_search_behavior_prompt\">Otsi neist märgitud väljadest</string>\n    <string name=\"pref_search_behavior_type_name\">Nimi</string>\n    <string name=\"pref_search_behavior_type_issuer\">Väljaandja</string>\n    <string name=\"pref_search_behavior_type_note\">Märkus</string>\n    <string name=\"pref_search_behavior_type_groups\">Grupid</string>\n    <string name=\"pref_set_password_title\">Muuda salasõna</string>\n    <string name=\"pref_set_password_summary\">Muuda salasõna, mida kasutatakse andmehoidla lukustuse eemaldamiseks</string>\n    <string name=\"no_events_title\">Teadaolevaid sündmusi pole</string>\n    <string name=\"no_events_description\">Raenduses pole teada ühtegi olulist sündmust</string>\n    <string name=\"event_title_vault_unlocked\">Andmehoidla lukustus on eemaldatud</string>\n    <string name=\"event_description_vault_unlocked\">Andmehoidla lukustus on kenasti eemaldatud</string>\n    <string name=\"event_title_backup_created\">Varukoopia on loodud</string>\n    <string name=\"event_description_backup_created\">Andmehoidla varukoopia loomine õnnestus</string>\n    <string name=\"event_title_android_backup_created\">Varukoopia on loodud Androidi poolt</string>\n    <string name=\"event_description_android_backup_created\">Androidid õnnestus luua andmehoidla varukoopia</string>\n    <string name=\"event_title_vault_exported\">Andmehoidla on eksporditud</string>\n    <string name=\"event_description_vault_exported\">Andmehoidla koopia on eksporditud</string>\n    <string name=\"event_title_entry_shared\">Kirje on jagatud</string>\n    <string name=\"event_description_entry_shared\">Kirjet jagati</string>\n    <string name=\"event_title_vault_unlock_failed_password\">Ei õnnestunud eemaldada andmehoidla lukustust (salasõnaga)</string>\n    <string name=\"event_description_vault_unlock_failed_password\">Katse eemaldada andmehoidla lukustust salasõnaga ei õnnestunud</string>\n    <string name=\"event_title_vault_unlock_failed_biometrics\">Ei õnnestunud eemaldada andmehoidla lukustust (biomeetrilise tuvastusega)</string>\n    <string name=\"event_description_vault_unlock_failed_biometrics\">Katse eemaldada andmehoidla lukustust biomeetrilise tuvastusega ei õnnestunud</string>\n    <string name=\"event_unknown\">Tundmastu sündmuse tüüp</string>\n    <string name=\"audit_log_entry_deleted\">(kustutatud)</string>\n    <string name=\"today_at_time\">Täna kell %1$s</string>\n    <string name=\"day_of_week_at_time\">%1$s kell %2$s</string>\n    <string name=\"export_encrypted\">Krüpti andmehoidla</string>\n    <string name=\"export_help\">Selle toiminguga ekspordid andmehoidla Aegise sisemisest andmeruumist. Palun vali vorming, mida soovid eksportimiseks kasutada:</string>\n    <string name=\"export_warning_unencrypted\">Sa oled eksportimas Aegise andmehoidla krüptimata koopiat. <b>Me ei soovita sellist tegevust</b>.</string>\n    <string name=\"export_warning_password\">Ekspordifailid on krüptitud eraldi salasõnaga, mis on lisatud seadistuste sektsioonist Turvalisus.</string>\n    <string name=\"understand_risk_accept\">Ma mõistan seda riski</string>\n    <string name=\"export_format_aegis\">Aegis (.JSON)</string>\n    <string name=\"export_format_google_auth_uri\">Tekstifail (.TXT)</string>\n    <string name=\"export_format_html\">Veebileht (.HTML)</string>\n    <string name=\"export_format_hint\">Eksportimise vorming</string>\n    <string name=\"export_all_groups\">Ekspordi kõik grupid</string>\n    <string name=\"export_choose_groups\">Vali eksporditavad grupid</string>\n    <plurals name=\"export_groups_selected_count\">\n        <item quantity=\"one\">%d grupp on valitud</item>\n        <item quantity=\"other\">%d gruppi on valitud</item>\n    </plurals>\n    <string name=\"export_no_groups_selected\">Sa pole eksportimiseks valinud ühtegi gruppi</string>\n    <string name=\"export_html_title\" comment=\"The title of an HTML export document\">Eksport Aegis Authenticatorist</string>\n    <string name=\"choose_authentication_method\">Turvalisus</string>\n    <string name=\"authentication_method_explanation\">Aegis on turvalisuskeskne kaheastmelise autentimise haldusrakendus. Kirjed on salvestatud andmehoidlas, mida saad soovi korral enda valitud salasõnaga krüptida. Kui see krüptitud andmehoidla satub pahatahtlike kavatsustega kolmanda osapoole kätte, siis pole tal ilma salasõna teadmata võimalust sisu lugeda.\\n\\nJärgnevalt oleme eelvalinud eelistuse, mis võiks sinu nutiseadmele parimal viisil sobida.</string>\n    <string name=\"authentication_method_none\">Puudub</string>\n    <string name=\"authentication_method_none_description\">Andmehoidla lukustuse eemaldamiseks pole vaja kasutada salasõna ning ta on ka krüptimata. <b>Me ei soovita selle valiku kasutamist</b>.</string>\n    <string name=\"authentication_method_password\">Salasõna</string>\n    <string name=\"authentication_method_password_description\">Andmehoidla lukustuse eemaldamiseks pead kasutama salasõna.</string>\n    <string name=\"authentication_method_password_explanation\">Hoiatus: Kui sa unustad oma salasõna, siis kaotad jäädavalt ligipääsu oma tunnuslubadele. Pole ühtegi viisi ligipääsuks neile ilma salasõnata.</string>\n    <string name=\"authentication_method_biometrics\">Biomeetria</string>\n    <string name=\"authentication_method_biometrics_description\">Lisaks salasõnale, on siin nutiseadmes biomeetrilise tuvastuse võimalus. Näiteks sõrmejälje või näotuvastusega on võimalik andmehoidlat lukust lahti võtta.</string>\n    <string name=\"authentication\">Võta andmehoidla lukust lahti</string>\n    <string name=\"authentication_multiline\" comment=\"The newline in the middle is used for aesthetic purposes\">Võta andmehoidla\\nlukust lahti</string>\n    <string name=\"auth_use_biometrics\">Või klõpsi siin <font fgcolor=\"#FF0D86C1\">biomeetrilise tuvastuse</font> kasutamiseks</string>\n    <string name=\"set_password\">Palun sisesta salasõna</string>\n    <string name=\"set_group\">Palun sisesta grupi nimi</string>\n    <string name=\"set_number\">Palun sisesta number</string>\n    <string name=\"set_password_confirm\">Palun korda salasõna</string>\n    <string name=\"invalid_password\">Sisestatud salasõna pole õige</string>\n    <string name=\"invalidated_biometrics\">Tuvastasin muudatuse sinu nutiseadme turvaseadistustes. Palun ava Aegise „Seadistused“ → „Turvalisus“ → „Biomeetriline tuvastus“ ning lülita ta korraks välja ning seejärel uuesti sisse.</string>\n    <string name=\"password_reminder\">Palun sisesta oma salasõna. Selleks, et sa salasõna ei unustaks, me vahetevahel palume sind seda sisestada.</string>\n    <string name=\"password_reminder_dialog_title\">Vaikimisi on lukustuse eemaldamiseks kasutusel biomeetriline tuvastus</string>\n    <string name=\"password_reminder_dialog_message\">Selleks, et sa salasõna ei unustaks ja kaotaks ligipääsu oma andmehoidlale, me vahetevahel palume sind seda sisestada. Peale salasõna kasutamist Aegis pruugib jälle biomeetrilist tuvastust seni, kuni jõuab kätte järjekordne salasõna sisestamise hetk.</string>\n    <string name=\"password_reminder_freq_never\">Mitte kunagi</string>\n    <string name=\"password_reminder_freq_weekly\">kord nädalas</string>\n    <string name=\"password_reminder_freq_biweekly\">kaks korda nädalas</string>\n    <string name=\"password_reminder_freq_monthly\">kord kuus</string>\n    <string name=\"password_reminder_freq_quarterly\">kord kvartalis</string>\n    <string name=\"enter_password_2fas_message\">Tundub, et 2FAS rakenduse varukoopia on krüptitud. Palun sisesta alljärgnevalt salasõna.</string>\n    <string name=\"enter_password_authy_message\">Tundub, et Authy rakenduse kirjed on krüptitud. Palun sulge Aegis, ava Authy ning eemalda kirjete lukustus oma salasõnaga. Võid ka proovida, kas Aegis saab dekrüptimisega hakkama. Selleks sisesta alljärgnevalt vajalik salasõna.</string>\n    <string name=\"enter_password_aegis_title\">Palun sisesta importimise salasõna</string>\n    <string name=\"period_hint\">Välp (sekundites)</string>\n    <string name=\"algorithm_hint\">Räsifunktsioon</string>\n    <string name=\"type\">Tüüp</string>\n    <string name=\"share\">Jaga</string>\n    <string name=\"yes\">Jah</string>\n    <string name=\"no\">Ei</string>\n    <string name=\"undo\">Võta toiming tagasi</string>\n    <string name=\"unlock\">Lukusta lahti</string>\n    <string name=\"advanced\">Lisavalikud</string>\n    <string name=\"counter\">Loendur</string>\n    <string name=\"digits\">Numbreid</string>\n    <string name=\"secret\">Salakood</string>\n    <string name=\"scan\">Skaneeri QR-koodi</string>\n    <string name=\"scan_image\">Skaneeri pilti</string>\n    <string name=\"enter_manually\">Sisesta käsitsi</string>\n    <string name=\"set_up_biometric\">Seadista lukustuse eemaldamine biomeetrilise tuvastusega</string>\n    <string name=\"copy\">Kopeeri</string>\n    <string name=\"edit\">Muuda</string>\n    <string name=\"select_all\">Vali kõik</string>\n    <string name=\"assign_icons\">Lisa ikoone</string>\n    <string name=\"assign_groups\">Lisa gruppi</string>\n    <string name=\"assign_groups_dialog_summary\">Vali grupp, kuhu soovid antud kirjed lisada.</string>\n    <string name=\"assign_groups_dialog_dropdown\">Vali grupp</string>\n    <string name=\"favorite\" comment=\"Verb\">Lisa lemmikuks</string>\n    <string name=\"unfavorite\" comment=\"Verb\">Eemalda lemmikutest</string>\n    <string name=\"error_all_caps\">VIGA</string>\n    <string name=\"password\">Salasõna</string>\n    <string name=\"confirm_password\">Korda salasõna</string>\n    <string name=\"show_password\">Näita salasõna</string>\n    <string name=\"new_entry\">Uus kirje</string>\n    <string name=\"add_new_entry\">Lisa uus kirje</string>\n    <string name=\"unlock_vault_error\">Andmehoidla lukustuse eemaldamine ei õnnestunud</string>\n    <string name=\"unlock_vault_error_description\">Vale salasõna. Palun kontrolli, et kasutasid õiget salasõna.</string>\n    <string name=\"password_equality_error\">Salasõnad peavad olema identsed ega tohi olla tühjad</string>\n    <string name=\"snackbar_authentication_method\">Palun vali autentimise meetod</string>\n    <string name=\"encrypting_vault\">Andmehoidla on krüptimisel</string>\n    <string name=\"exporting_vault\">Andmehoidla on eksportimisel</string>\n    <string name=\"optimizing_icon\">Optimeerin ikoone</string>\n    <string name=\"optimizing_icon_multiple\">Optimeerin ikoone %1$d/%2$d</string>\n    <string name=\"reading_file\">Loen faili</string>\n    <string name=\"requesting_root_access\">Küsin juurkasutaja õigusi</string>\n    <string name=\"analyzing_qr\">Analüüsin QR-koodi</string>\n    <string name=\"analyzing_qr_multiple\">Analüüsin QR-koodi %1$d/%2$d (%3$s)</string>\n    <plurals name=\"added_new_entries\">\n        <item quantity=\"one\">Lisasin %d uue kirje andmehoidlasse</item>\n        <item quantity=\"other\">Lisasin %d uut kirjet andmehoidlasse</item>\n    </plurals>\n    <string name=\"importing_icon_pack\">Impordin ikoonipakki</string>\n    <string name=\"delete_entry\">Kustuta kirje</string>\n    <string name=\"delete_entry_description\">Kas sa oled kindel, et soovid selle kirje kustutada?</string>\n    <string name=\"delete_entry_explanation\">Selle tegevusega sa ei lülita kaheastmelist autentimist välja siin teenuses:\\n<b>%s</b>\\n\\nEt sa ei kaotaks ligipääsu teenusele, siis palun kontrolli, et oleksid seal kaheastmelise autentimise välja lülitanud või sul on olemas alternatiivne viis selle teenuse jaoks autentimiskoode luua.</string>\n    <string name=\"delete_entries\">Kustuta kirjed</string>\n    <plurals name=\"delete_entries_description\">\n        <item quantity=\"one\">Kas oled kindel, et soovid kustutada %d kirje?</item>\n        <item quantity=\"other\">Kas oled kindel, et soovid kustutada %d kirjet?</item>\n    </plurals>\n    <string name=\"discard_changes\">Kas loobud muudatustest?</string>\n    <string name=\"discard_changes_description\">Sinu muudatused pole salvestatud</string>\n    <string name=\"saving_profile_error\">Viga profiili salvestamisel</string>\n    <string name=\"saving_assign_icons_error\">Viga ikoonide lisamisel</string>\n    <string name=\"welcome\">Tere tulemast</string>\n    <string name=\"app_description\">Aegis on vaba, turvaline ja avatud lähtekoodil põhinev kaheastmelise autentimise haldusrakendus</string>\n    <string name=\"setup_completed\">Algseadistamine on lõppenud</string>\n    <string name=\"setup_completed_description\">Aegis on seadistatud ja valmis tegutsema.</string>\n    <string name=\"vault_not_found\">Andmehoidlat ei leidu, alustan algseadistamisega…</string>\n    <string name=\"copied\">Kopeeritud</string>\n    <string name=\"errors_copied\">Vead on kopeeritud lõikelauale</string>\n    <string name=\"version_copied\">Versiooninumber on kopeeritud lõikelauale</string>\n    <string name=\"error_required_field\">See väli on kohustuslik</string>\n    <string name=\"error_occurred\">Tekkis viga</string>\n    <string name=\"decryption_error\">Andmehoidla lukustuse eemaldamisel tekkis viga</string>\n    <string name=\"decryption_corrupt_error\">Andmehoidla lukustuse eemaldamisel tekkis viga. Andmehoidla fail võib olla vigane.</string>\n    <string name=\"saving_error\">Andmehoidla salvestamisel tekkis viga</string>\n    <string name=\"vault_init_error\">Andmehoidla valmendamisel tekkis viga</string>\n    <string name=\"vault_load_error\">Andmehoidla laadimisel nutiseadme andmeruumist tekkis viga</string>\n    <string name=\"biometric_decrypt_error\">Andmehoidla dekrüptimisel biomeetrilise isikutuvastuse abil tekkis viga. Tavaliselt juhtub see siis, kui nutiseadme turvaseadistused on muutunud. Palun eemalda andmehoidla lukustus salasõnaga ja kohenda Aegise seadistustest uuesti biomeetrilist tuvastust.</string>\n    <string name=\"biometric_init_error\">Biomeetrilise isikutuvastuse valmendamisel tekkis viga. Tavaliselt juhtub see siis, kui nutiseadme turvaseadistused on muutunud. Palun eemalda andmehoidla lukustus salasõnaga ja kohenda Aegise seadistustest uuesti biomeetrilist tuvastust.</string>\n    <string name=\"disable_encryption\">Lülita krüptimine välja</string>\n    <string name=\"disable_encryption_description\">Kas sa oled kindel, et soovid krüptimist välja lülitada? Selle tulemusel salvestatakse andmehoidla lihtteksti vormingus. <b>Lisaks ei saa enam kasutada automaatset varundust</b>.</string>\n    <string name=\"enable_encryption_error\">Krüptimise sisselülitamisel tekkis viga</string>\n    <string name=\"disable_encryption_error\">Krüptimise väljalülitamisel tekkis viga</string>\n    <string name=\"backup_successful\">Varukoopia ajastamine õnnestus</string>\n    <string name=\"backup_error\">Varukoopia tegemisel tekkis viga</string>\n    <string name=\"backup_status_success\">Viimane õnnestunud varukoopia: %s</string>\n    <string name=\"backup_status_failed\">Viimane ebaõnnestunud varukoopia: %s</string>\n    <string name=\"backup_status_none\">Ühtegi varukoopiat pole veel tehtud</string>\n    <string name=\"backup_warning_password\">Varukoopiad on krüptitud eraldi salasõnaga, mis on lisatud seadistuste sektsioonist Turvalisus</string>\n    <string name=\"documentsui_error\">DocumentsUI liidestus tundub olema sinu nutiseadmest puudu. Tegemist on olulise süsteemse komponendiga, mis on kasutusel dokumentide loomisel ja valimisel. Kui oled kasutanud mõnda rakendust oma nutiseadmest erisuguste mittevajalike komponentide eemaldamiseks, siis võid olla ka selle teegi eemaldanud ja pead ta uuesti paigaldama.</string>\n    <string name=\"icon_pack_import_error\">Ikoonipaki importimisel tekkis viga</string>\n    <string name=\"icon_pack_import_exists_error\">Ikoonipakk, mida proovid importida, on juba olemas. Kas tahad selle üle kirjutada?</string>\n    <string name=\"icon_pack_delete_error\">Ikoonipaki kustutamisel tekkis viga</string>\n    <plurals name=\"icon_pack_info\">\n        <item quantity=\"one\">%d ikoon</item>\n        <item quantity=\"other\">%d ikooni</item>\n    </plurals>\n    <string name=\"icon_custom\">Kohandatud</string>\n    <string name=\"permission_denied\">Õigused puuduvad</string>\n    <string name=\"andotp_new_format\">Uus vorming (versioon 0.6.3 või uuem) </string>\n    <string name=\"andotp_old_format\">Vana vorming (versioon 0.6.2 või vanem) </string>\n    <string name=\"choose_andotp_importer\">Mis vormingus on andOTP varukoopia?</string>\n    <string name=\"choose_totpauth_importer\">Kas see TOTP Authenticatori varukoopai on kaitstud salasõnaga?</string>\n    <string name=\"choose_application\">Vali rakendus, kust sa tahaksid andmeid importida</string>\n    <string name=\"choose_theme\">Valid soovitud kujundus</string>\n    <string name=\"choose_account_name_position\">Vali sinu kasutajakonto nime asukoht</string>\n    <string name=\"choose_view_mode\">Vali sinu soovitud vaade</string>\n    <string name=\"choose_copy_behavior\">Vali soovitud käitumine kopeerimisel</string>\n    <string name=\"parsing_file_error\">Faili töötlemisel tekkis viga</string>\n    <string name=\"file_not_found\">Viga: faili ei leidu</string>\n    <string name=\"reading_file_error\">Faili lugemisel tekkis viga</string>\n    <string name=\"app_lookup_error\">Viga: rakendus pole paigaldatud</string>\n    <string name=\"app_version_error\">Paigaldatud „%s“ rakenduse versioon pole toetatud. Viimased versioonid krüptivad osasid faile oma andmekaustas ja seega puudub Aegisel ligipääs nende importimiseks. Kui proovid importida, siis ilmselt lõppeb see veaga. Kas ikkagi tahad jätkata?</string>\n    <string name=\"root_error\">Viga: ei õnnestu kasutada juurkasutaja õigusi</string>\n    <plurals name=\"imported_entries_count\">\n        <item quantity=\"one\">Importisin %d kirje</item>\n        <item quantity=\"other\">Importisin %d kirjet</item>\n    </plurals>\n    <plurals name=\"entries_shown\">\n        <item quantity=\"one\">Näitan %d kirjet</item>\n        <item quantity=\"other\">Näitan %d kirjet</item>\n    </plurals>\n    <string name=\"intro_import_error_title\">Andmehoidla importimisel tekkis viga</string>\n    <string name=\"import_error_title\">Importimisel tekkis üks või enam viga</string>\n    <string name=\"exporting_vault_error\">Andmehoidla eksportimisel tekkis viga</string>\n    <string name=\"exported_vault\">Andmehoidla on eksporditud</string>\n    <string name=\"encryption_set_password_error\">Salasõna salvestamisel tekkis viga.</string>\n    <string name=\"encryption_enable_biometrics_error\">Biomeetrilise isikutuvastuse kasutuselevõtmisel lukustuse eemaldamise jaoks tekkis viga. Mõnede nutiseadmete biomeetrilise tuvastuse teostused on puudulikud ning tundub, et see on üks niisugustest seadmetest. Me soovitame, et kasutad vaid salasõnapõhist tuvastust.</string>\n    <string name=\"no_cameras_available\">Ühtegi kaamerat pole saadaval</string>\n    <string name=\"read_qr_error\">QR-koodi lugemisel tekkis viga</string>\n    <string name=\"read_qr_error_phonefactor\">Aegis pole ühilduv Microsofti kaheastmelise autentimise suletud algoritmiga. Kui oled seadistamas kaheastmelist autentimist Office 365 teenuses, siis palun vali eelistus „Seadista rakendus ilma teavitusteta“.</string>\n    <string name=\"partial_google_auth_import\">Tuvastasin pooliku Google Authenticatori ekspordifaili</string>\n    <string name=\"partial_google_auth_import_warning\">Mõned QR-koodid on imporditavatest andmetest puudu. Järgnevaid koode ei leidunud: \\n\\n<b>%s</b>\\n\\nSa võid küll jätkata selle pooliku impordiga, kuid me soovitame, et proovid uuesti kõikide andmetega ning väldid mõmõnede kirjete kadumaminekut.</string>\n    <string name=\"missing_qr_code_descriptor\">• QR-kood %d</string>\n    <plurals name=\"import_partial_export_anyway\">\n        <item quantity=\"one\">Impordi %d tunnusluba ikkagi</item>\n        <item quantity=\"other\">Impordi %d tunnusluba ikkagi</item>\n    </plurals>\n    <string name=\"import_google_auth_failure\">Google Authenticatori ekspordifaili importimine ei õnnestunud</string>\n    <string name=\"unrelated_google_auth_batches_error\">Ekspordis on teave mitteseotud töötluspakkide kohta. Proovida importida ühe paki kaupa.</string>\n    <string name=\"no_tokens_can_be_imported\">Tulemusena pole võimalik ühtegi kirjet importida</string>\n    <string name=\"unlocking_vault\">Andmehoidla lukustus on eemaldamisel</string>\n    <string name=\"rename_group\">Muuda grupi nime</string>\n    <string name=\"no_group_selection\">Kui kirje ei kuulu ühtegi gruppi, siis leidub ta valikus „Grupp puudub“.</string>\n    <string name=\"remove_group\">Eemalda grupp</string>\n    <string name=\"remove_group_description\">Kas sa oled kindel, et soovid selle grupi eemaldada? Selle ja teiste sama grupiga kirjete uus grupp saab olema „Grupp puudub“.</string>\n    <string name=\"remove_unused_groups\">Kustuta kasutamata grupid</string>\n    <string name=\"remove_unused_groups_description\">Kas sa oled kindel, et soovid kustutada kõik grupid, mis pole ühegi kirjega seotud?</string>\n    <string name=\"remove_icon_pack\">Eemalda ikoonipakk</string>\n    <string name=\"remove_icon_pack_description\">Kas sa oled kindel, et soovid selle ikoonipaki eemaldada? Sellest pakist ikoone kasutavad kirjed jäävad alles.</string>\n    <string name=\"details\">Üksikasjad</string>\n    <string name=\"show_error_details\">Näita vea üksikasju</string>\n    <string name=\"lock\">Lukusta</string>\n    <string name=\"name\">Nimi</string>\n    <string name=\"no_group\">Grupp puudub</string>\n    <string name=\"sort\" comment=\"Title of the Sort button in the top action bar of the main view\">Järjesta</string>\n    <string name=\"sort_alphabetically\">Väljaandja (A kuni Z)</string>\n    <string name=\"sort_alphabetically_reverse\">Väljaandja (Z kuni A)</string>\n    <string name=\"sort_alphabetically_name\">Kasutajakonto (A kuni Z)</string>\n    <string name=\"sort_alphabetically_name_reverse\">Kasutajakonto (Z kuni A)</string>\n    <string name=\"sort_usage_count\">Kasutuskorrad</string>\n    <string name=\"sort_last_used\">Viimati kasutatud</string>\n    <string name=\"sort_custom\">Sinu järjestus</string>\n    <string name=\"last_used\">Viimati kasutatud</string>\n    <string name=\"last_used_never\">mitte kunagi</string>\n    <string name=\"new_group\">Uus grupp…</string>\n    <string name=\"group\">Grupp</string>\n    <string name=\"group_name_hint\">Grupi nimi</string>\n    <string name=\"preference_manage_groups\">Muuda gruppe</string>\n    <string name=\"preference_manage_groups_summary\">Halda ja kustuta oma gruppe siin</string>\n    <string name=\"preference_reset_usage_count\">Nulli kasutuskordade loendur</string>\n    <string name=\"preference_reset_usage_count_summary\">Lähtesta andmehoidla kõikide kirjete loendurid</string>\n    <string name=\"preference_reset_usage_count_dialog\">Kas sa oled kindel, et soovid nullida andmehoidla kõikide kirjete kasutuskordade loenduri?</string>\n    <string name=\"note\" comment=\"Users can add a note to an entry\">Märkus</string>\n    <string name=\"clear\">Tühjenda</string>\n    <string name=\"dialog_duplicate_entry_title\" comment=\"'Duplicate' is a noun here\">Topeltkirje</string>\n    <string name=\"dialog_duplicate_entry_message\">Sellel kirjel on sama nimi ja väljaandja, kui veel ühel või mitmel kirjel. Kuidas peaksime jätkama?</string>\n    <string name=\"dialog_duplicate_entry_overwrite_title\">Kirjuta olemasolev kirje või kirjed üle</string>\n    <string name=\"dialog_duplicate_entry_overwrite_subtitle\">Asenda olemasolev(ad) kirje või kirjed uuega. Seda tegevust ei saa tagasi pöörata</string>\n    <string name=\"dialog_duplicate_entry_suffix_title\">Lisa eesliide</string>\n    <string name=\"dialog_duplicate_entry_suffix_subtitle\">Lisa eesliide uuele kirje nimele. Seega uus nimi saab olema: %s</string>\n    <string name=\"dialog_duplicate_entry_cancel_title\">Katkesta salvestamine</string>\n    <string name=\"dialog_duplicate_entry_cancel_subtitle\">Võimaldab sul enne uut salvestuskatset muuta kirjet</string>\n    <plurals name=\"dialog_duplicate_entry_overwrite_dialog_message\">\n        <item quantity=\"one\">Kas sa oled kindel, et soovid kustutada %d kirje järgneva nimega:\\n\\n%s - %s</item>\n        <item quantity=\"other\">Kas sa oled kindel, et soovid kustutada %d kirjet järgnevate nimedega:\\n\\n%s - %s</item>\n    </plurals>\n    <string name=\"dialog_duplicate_entry_overwrite_dialog_title\">Kinnita kustutamine</string>\n    <string name=\"pref_haptic_feedback_summary\">Anna koodide muutumisest märgi värinaga</string>\n    <string name=\"pref_haptic_feedback_title\">Haptiline tagasiside</string>\n    <string name=\"pref_highlight_entry_title\">Puudutamisel tõsta kinnituskood esile</string>\n    <string name=\"pref_highlight_entry_summary\">Peale kinnituskoodi puudutamist tõsta ta ajutiselt esile ja tee seeläbi teistest kergemini eristatavaks</string>\n    <string name=\"pref_groups_multiselect_title\">Vali mitu grupi korraga</string>\n    <string name=\"pref_groups_multiselect_summary\">Võimalda mitme grupi korraga valimist</string>\n    <string name=\"pref_minimize_on_copy_title\">Kopeerimisel peida rakendus</string>\n    <string name=\"pref_minimize_on_copy_summary\">Peale kinnituskoodi kopeerimist minimeeri rakendus</string>\n    <string name=\"pref_copy_behavior_title\">Kopeeri kinnituskoodid lõikelauale</string>\n    <string name=\"pref_search_behavior_title\">Otsingu toimimine</string>\n    <string name=\"pref_pause_entry_title\">Peale puudutamist peata kinnituskoodide muutumine</string>\n    <string name=\"pref_pause_entry_summary\">Puudutamisel peata kinnituskoodide automaatne uuendamine - seni kuni ta on fookuses kood ei muutu. Eeldab, et „Puudutamisel tõsta kinnituskood esile“ või „Näitamiseks puuduta“ on sisse lülitatud.</string>\n    <string name=\"pin_keyboard_description\">Numbriklahvistiku sisselülitamiseks sisesta uus salasõna. Palun arvesta, et selleks peab salasõna koosnema ainult numbritest</string>\n    <string name=\"pin_keyboard_error\">Lukustusvaate numbriklahvistiku kasutuselevõtmisel tekkis viga</string>\n    <string name=\"pin_keyboard_error_description\">Lukustusvaate numbriklahvistiku pole võimalik kasutusele võtta. Sinu salasõna peab koosnema ainult numbritest.</string>\n    <string name=\"pin_keyboard_disabled\">Salasõna on muudetud. Lukustusvaate numbriklahvistik pole enam kasutusel.</string>\n    <string name=\"selected\">Valitud</string>\n    <string name=\"dark_theme_title\">Tume kujundus</string>\n    <string name=\"light_theme_title\">Hele kujundus</string>\n    <string name=\"amoled_theme_title\">Must kujundus AMOLED-i jaoks</string>\n    <string name=\"system_theme_title\">Määratud akukasutuse optimeerija poolt</string>\n    <string name=\"system_amoled_theme_title\">Määratud akukasutuse optimeerija poolt (AMOLED)</string>\n    <string name=\"normal_viewmode_title\">Tavaline</string>\n    <string name=\"compact_mode_title\">Kompaktne</string>\n    <string name=\"small_mode_title\">Väike</string>\n    <string name=\"tiles_mode_title\">Ruudustik</string>\n    <string name=\"unknown_issuer\">Tundmatu väljaandja</string>\n    <string name=\"unknown_account_name\">Tundmatu kasutajakonto nimi</string>\n    <plurals name=\"import_error_dialog\">\n        <item quantity=\"one\">Aegis ei suutnud importida %d-t kirjet ja see kirje jääb vahele. Leiad täpsemat teavet vea kohta, kui klõpsid viidet „üksikasjad“.</item>\n        <item quantity=\"other\">Aegis ei suutnud importida %d-t kirjet ja need kirjed jäävad vahele. Leiad täpsemat teavet vea kohta, kui klõpsid viidet „üksikasjad“.</item>\n    </plurals>\n    <string name=\"unable_to_process_deeplink\">Süvalinki ei õnnestunud töödelda</string>\n    <string name=\"unable_to_read_qrcode_file\">Failis leiduvad QR-koodi ei õnnestunud töödelda: %s.</string>\n    <string name=\"unable_to_process_shared_text\">Jagatud teksti pole võimalik töödelda ühekordse salasõnana</string>\n    <string name=\"unable_to_read_qrcode_files\">Mõnede QR-koodide lugemine ja töötlemine pole võimalik. Importimisele kuuluvad vaid %1$d kirjet %2$d-st.</string>\n    <string name=\"unable_to_generate_qrcode\">QR-koodi loomine ei õnnestu</string>\n    <string name=\"select_picture\">Vali pilt</string>\n    <string name=\"select_icon\">Vali ikoon</string>\n    <string name=\"tile_open_vault\" comment=\"label for a quick settings tile that opens the app when tapped\">Ava andmehoidla</string>\n    <string name=\"tile_open_scanner\" comment=\"label for a quick settings tile that opens the QR code scanner when tapped\">Ava skanner</string>\n    <string name=\"toggle_checkboxes\">Märgista märkeruudud või eemalda märgistus</string>\n    <string name=\"search\">Otsi</string>\n    <string name=\"channel_name_lock_status\">Lukustuse olek</string>\n    <string name=\"channel_description_lock_status\">Aegis võib luua püsiteavituse, mis kinnitab sulle, kui andmehoidla lukustub</string>\n    <string name=\"vault_unlocked_state\">Andmehoidla pole lukus. Lukustamiseks klõpsi siin.</string>\n    <string name=\"version\">Versioon</string>\n    <string name=\"changelog\">Muudatuste logi</string>\n    <string name=\"whats_new\">Mida on uut</string>\n    <string name=\"github_description\">Lähtekood, veahaldus ja teave</string>\n    <string name=\"license\">Litsents</string>\n    <string name=\"license_description\">Aegis Authenticator on litsentseeritud GPLv3 alusel</string>\n    <string name=\"third_party_licenses\">Kolmandate osapoolte litsentsid</string>\n    <string name=\"third_party_licenses_description\">Aegise kasutatavate kolmandate osapoolte teekide litsentsid</string>\n    <string name=\"country_netherlands\">Madalmaad</string>\n    <string name=\"email_us\">Saada e-kiri</string>\n    <string name=\"visit_website\">Külasta meie veebisaiti</string>\n    <string name=\"about_support\">Kasutajatugi</string>\n    <string name=\"support_rate\">Hinda meie rakendust</string>\n    <string name=\"support_rate_description\">Toeta meid koostades arvustuse Google Play rakendustepoes</string>\n    <string name=\"webview_error\">Selles nutiseadmes puudub webview-teegi tugi. Seda on vaja muudatuste logi ja litsentside kuvamiseks. Tegemist on operatsioonisüsteemi komponendiga.</string>\n    <string name=\"email\">E-post</string>\n    <string name=\"time_sync_warning_title\">Kellaaja automaatne sünkroniseerimine</string>\n    <string name=\"time_sync_warning_message\">Õigete tuvastusskoodide loomiseks vajab Aegis, et kellaajad nutiserdme ja serveri vahel on sünkroonis. Isegi mõnesekundiline erinevus võib tulemuseks anda vale koodi. Tundub, et sinu nutiseadmes on puudu automaatne aja sünkroniseerimine. Kas sa tahaksid seda nüüd teha?</string>\n    <string name=\"time_sync_warning_disable\">Ära hoiata mind enam. Ma tean, mida ma teen.</string>\n    <string name=\"google_qr_export_unrelated\">Tuvastasin mitteseotud QR-koodi. Proovi skanneri uuesti käivitamist.</string>\n    <plurals name=\"google_qr_export_scanned\">\n        <item quantity=\"one\">Skaneerisin %1$d/%2$d QR-koodi</item>\n        <item quantity=\"other\">Skaneerisin %1$d/%2$d QR-koodi</item>\n    </plurals>\n    <string name=\"google_qr_export_unexpected\">Eeldasin näga QR-koodi #%1$d, aga selle asemel skaneerisin #%2$d</string>\n    <string name=\"backup_error_bar_message\"><b>Andmehoidla hiljutine varundamine ei õnnestunud</b></string>\n    <string name=\"backup_error_dialog_details\" comment=\"The first parameter is the type of backup (e.g. built-in or Android backup). The second parameter is an elapsed time in the style of 'x seconds/minutes/days ago'.\">Vea tekkimise tõttu hiljutine andmehoidla varundus %1$s abil ei õnnestunud. Varukoopia loomise katse toimus %2$s. Selleks, et varundus toimiks korrektselt, palun kontrolli varunduse seadistusi.    </string>\n    <string name=\"backup_permission_error_dialog_details\" comment=\"The first parameter is the type of backup (e.g. built-in or Android backup). The second parameter is an elapsed time in the style of 'x seconds/minutes/days ago'.\">Kuna Aegisel polnud õigust kirjutada varunduse kausta, siis hiljutine andmehoidla varundus %1$s abil ei õnnestunud. Varukoopia loomise katse toimus %2$s. Selline viga võib tekkida, kui sa oled hiljuti muutnud varukoopia kausta nime või ta teisaldanud, samuti ka kui oled hiljuti Aegise varukoopiast taastanud. Palun seadista varukoopia kaust uuesti.    </string>\n    <string name=\"backup_system_builtin\">Aegise sisseehitatud automaatne varundus</string>\n    <string name=\"backup_system_android\">Androidi pilvevarundus</string>\n    <string name=\"backup_reminder_bar_message_with_latest\" comment=\"The parameter is an elapsed time in the style of 'x seconds/minutes/days ago'\">Viimane varukoopia on aegunud (%s)    </string>\n    <string name=\"backup_reminder_bar_message\">Muudatused on varundamata    </string>\n    <string name=\"backup_reminder_bar_dialog_title\">Muudatused on varundamata</string>\n    <string name=\"backup_reminder_bar_dialog_summary\">Andmehoidla viimased muudatused on veel varundamata. Vältimaks, et kaotad ligipääsu oma kasutajakontodele, on oluline, et teed sagedasti varukoopiaid. Palun kaalu automaatse varunduse kasutuselevõtmist seadistuste menüüst.    </string>\n    <string name=\"backup_reminder_bar_dialog_accept\">Seadista varundamine</string>\n    <string name=\"backup_plaintext_export_warning\"><b>Andmehoidla on hiljuti eksporditud lihtteksti vormingus</b></string>\n    <string name=\"pref_show_plaintext_warning_hint\">Ära näita seda hoiatust uuesti</string>\n    <string name=\"backup_plaintext_warning_explanation\">Sa näed seda hoiatusest, sest oled hiljuti andmehoidlat eksportinud krüptimata vormingus. Säilitamaks sinu autentimiskirjete turvalisust soovitame me sul selle faili kustutada kohe, kui teda enam vaja pole.</string>\n    <string name=\"switch_camera\">Vaheta kaamerat</string>\n    <string name=\"empty_list\">Me ei saa sulle näidata ühtegi koodi. Kirjete lisamiseks klõpsi + ikooni lehe all paremas nurgas</string>\n    <string name=\"empty_list_title\">Ühtegi kirjet ei leidu</string>\n    <string name=\"empty_group_list\">Ühtegi gruppi pole näidatud. Saad neid lisada kirje muutmisvaatest</string>\n    <string name=\"empty_group_list_title\">Ühtegi gruppi ei leidu</string>\n    <string name=\"no_icon_packs\">Ühtegi ikoonipakki pole veel imporditud. Mõne sellise importimisejs klõpsi + ikooni. Soovitus: vaata ka <a href=\"https://aegis-icons.github.io\">aegise ikoone</a>.</string>\n    <string name=\"no_icon_packs_title\">Ikoonipakke pole</string>\n    <string name=\"pick_icon\">Vali ikoon</string>\n    <string name=\"uncategorized\">Kategoriseerimata</string>\n    <string name=\"done\">Valmis</string>\n    <plurals name=\"qr_count\">\n        <item quantity=\"one\">%d / %d QR-koodi</item>\n        <item quantity=\"other\">%d / %d QR-koodi</item>\n    </plurals>\n    <string name=\"next\">Edasi</string>\n    <string name=\"previous\">Tagasi</string>\n    <string name=\"copy_uri\">Kopeeri URI</string>\n    <string name=\"unable_to_copy_uri_to_clipboard\">URI kopeerimine lõikelauale ei õnnestunud</string>\n    <string name=\"uri_copied_to_clipboard\">URI on kopeeritud lõikelauale</string>\n    <string name=\"transfer_entry_description\">Skaneeri seda QR-koodi autentimisrakendusega, kuhu soovid seda kirjet eksportida</string>\n    <string name=\"transfer_entry_brightness\">Täisekraani ereduse sisse/välja lülitamiseks klõosi QR-koodi</string>\n    <string name=\"google_auth_compatible_transfer_description\">Skaneeri neid QR-koode Aegise või Google Authenticatoriga.\\n\\nGoogle Authenticatori tehniliste piirangute tõttu on võimalik eksportida vaid TOTP ja HOTP tunnuslube, mis kasutavad SHA1 räsi ning kuvavad tulemuseks 6-kohalisi koode</string>\n    <string name=\"password_strength_very_weak\">Väga nõrk</string>\n    <string name=\"password_strength_weak\">Nõrk</string>\n    <string name=\"password_strength_fair\">Keskpärane</string>\n    <string name=\"password_strength_good\">Hea</string>\n    <string name=\"password_strength_strong\">Tugev</string>\n    <string name=\"password_strength_unknown\">Salasõna tugevuse analüüsimiseks on ta liiga pikk</string>\n    <string name=\"pref_pin_keyboard_title\">Kasuta lukustusvaates numbriklahvistikku</string>\n    <string name=\"pref_pin_keyboard_summary\">Kasuta seda eelistust, kui soovid lukustusvaates näha numbriklahvistikku. Kasutatav vaid numbritest koosneva salasõna puhul</string>\n    <string name=\"title_activity_preferences\">Seadistused</string>\n    <string name=\"title_activity_manage_groups\">Halda gruppe</string>\n    <string name=\"title_activity_transfer\">Kirjete teisaldamine mujale</string>\n    <string name=\"title_activity_about\">Rakenduse teave</string>\n    <string name=\"title_activity_edit_entry\">Muuda kirjet</string>\n    <string name=\"title_activity_scan_qr\">Skanneeri QR-koodi</string>\n    <string name=\"title_activity_import_entries\">Impordi kirjeid</string>\n    <string name=\"title_activity_assign_icons\">Lisa ikoone</string>\n    <string name=\"title_activity_licenses\">Kolmandate osapoolte litsentsid</string>\n    <string name=\"dialog_wipe_entries_title\">Kõikide kirjete kustutamine</string>\n    <string name=\"dialog_wipe_entries_message\">Sinu andmehoidlas juba leidub kirjeid. Kas sa soovid enne importimist need kirjed eemaldada?\\n\\n<b>Seda tehes kaotad sa jäädavalt ligipääsu eemaldatud kirjetele ja vastavale autentimisteenusele</b>.</string>\n    <string name=\"dialog_wipe_entries_checkbox\">Kustuta andmehoidla sisu</string>\n    <string name=\"import_from_clipboard_title\">Impordi lõikelaualt</string>\n    <string name=\"import_from_clipboard_message\">Me tuvastasime sinu lõikelaualt korrektse otpauth-tüüpi aadressi.\\n\\n<b>Nimi</b>: %1$s\\n<b>Väljaandja</b>: %2$s\\n\\nKas sa tahaksid seda kasutada antud kirje esmaseks täitmiseks?</string>\n    <string name=\"panic_trigger_ignore_toast\">Aegis tuvastas paanikanupu vajutuse, kuid kuna vastav seadistus on keelatud, siis me ei tee midagi</string>\n    <string name=\"pref_panic_trigger_title\">Paanikanupu vajutusel kustuta andmehoidla</string>\n    <string name=\"pref_panic_trigger_summary\">Kui Guardian Projekti Ripple\\'i rakenduses vajutatakse paanikanuppu, siis kustuta andmehoidla</string>\n    <string name=\"import_vault\">Impordi Aegise andmehoidla</string>\n    <string name=\"import_vault_hint\">Kas soovid andmeid importida mõnest teisest kaheastmelise autentimise haldusrakendusest? Esmalt lõpeta algseadistamine ja seejärel ava rakenduse seadistustest importimise valikud.</string>\n    <plurals name=\"import_duplicate_toast\">\n        <item quantity=\"one\">%d võimalik kontrollimata duplikaat. Palun vaata kirjete loend üle.</item>\n        <item quantity=\"other\">%d võimalikku kontrollimata duplikaati. Palun vaata kirjete loend üle.</item>\n    </plurals>\n    <string name=\"importer_help_2fas\">Ava 2FAS Authenticatori varukoopia fail.</string>\n    <string name=\"importer_help_aegis\">Ava Aegise ekspordi- või varukoopia fail.</string>\n    <string name=\"importer_help_authenticator_plus\">Määratle Authenticator Plusi ekspordifail, mille saad rakendusest siit: <b>Seadistused -&gt; Varundus ja taastamine -&gt; Ekspordi teksti- või html-failina</b>.</string>\n    <string name=\"importer_help_authy\">Ava <b>/data/data/com.authy.authy/shared_prefs/com.authy.storage.tokens.authenticator.xml</b> faili koopia, leiad Authy sisemisest andmeruumist.</string>\n    <string name=\"importer_help_andotp\">Ava andOTP ekspordi- või varukoopia fail.</string>\n    <string name=\"importer_help_bitwarden\">Ava Bitwardeni ekspordi- või varukoopia fail. Krüptitud failid pole toetatud.</string>\n    <string name=\"importer_help_battle_net_authenticator\">Ava <b>/data/data/com.blizzard.messenger/shared_prefs/com.blizzard.messenger.authenticator_preferences.xml</b> faili koopia, mille leiad Battle.net Authenticatori sisemisest andmeruumist.</string>\n    <string name=\"importer_help_duo\">Ava <b>/data/data/com.duosecurity.duomobile/files/duokit/accounts.json</b> faili koopia, mille leiad DUO sisemisest andmeruumist.</string>\n    <string name=\"importer_help_ente_auth\">Ava Ente Authi ekspordifail. Hetkel on toetatud vaid krüptimata failidest importimine.</string>\n    <string name=\"importer_help_freeotp\">FreeOTP 2: Ava varundatud fail.\\nFreeOTP 1.x: Ava <b>/data/data/org.fedorahosted.freeotp/shared_prefs/tokens.xml</b> faili koopia, mille leiad FreeOTP sisemise andmeruumi kaustast.</string>\n    <string name=\"importer_help_freeotp_plus\">Ava FreeOTP+ ekspordifail.</string>\n    <string name=\"importer_warning_title_freeotp2\">FreeOTP 2 ühilduvus</string>\n    <string name=\"importer_warning_message_freeotp2\">FreeOTP 2 rakendusega on seotud mitu viga, mis võib tekitada olukorra, kus varukoopiad on vigased. Aegis proovib olukorrast päästa maksimumi, aga võib juhtuda, et mõned või lausa kõik kirjed jäävad importimata.</string>\n    <string name=\"importer_help_google_authenticator\"><b>Toetatud on ainult Google Authenticatori versiooni 5.10 või varasemad failid</b>.\\n\\nAva <b>/data/data/com.google.android.apps.authenticator2/databases/databases</b> faili koopia, mille leiad Google Authenticatori sisemise andmeruumi kaustast.</string>\n    <string name=\"importer_help_microsoft_authenticator\">Ava <b>/data/data/com.azure.authenticator/databases/PhoneFactor</b> faili koopia, mille leiad Microsoft Authenticatori sisemisest andmeruumist.</string>\n    <string name=\"importer_help_plain_text\">Lisa siia lihttekstina vormindatud fail, kus iga Google Authenticatori URI asub omaette real.</string>\n    <string name=\"importer_help_proton_authenticator\">Määratle Proton Authenticatori ekspordifail (.json), mille saad rakendusest siit: <b>Seadistused -&gt; Eksport</b>.</string>\n    <string name=\"importer_help_steam\"><b>Steam 3.0 ja uuemad pole toetatud</b>. Ava <b>/data/data/com.valvesoftware.android.steam.community/files/Steamguard-*.json</b> faili koopia, mille leiad Steami sisemise andmeruumi kaustast.</string>\n    <string name=\"importer_help_stratum\">Ava Stratumi ekspordifail, mille saad rakendusest valides <b>„Seadistused“ → „Varundus“ → „Varunda krüptitud faili (soovitatud)“</b>.</string>\n    <string name=\"importer_help_totp_authenticator\">Ava TOTP Authenticatori ekspordifail.</string>\n    <string name=\"importer_help_winauth\">Ava WinAuthi ekspordifail.</string>\n    <string name=\"import_assign_icons_dialog_title\">Lisa ikoone</string>\n    <string name=\"import_assign_icons_dialog_text\">Kas sa sooviksid lisada imporditud kirjetele ikoone?</string>\n    <string name=\"importer_encrypted_exception_google_authenticator\">Krüptitud kirje jäi vahele: %s</string>\n    <string name=\"importer_help_direct\">Impordi kirjed otse „%s“ rakendusest. See eeldab, et rakendus on nutiseadmesse paigaldatud ja Aegisel on juurkasutaja õigused.</string>\n    <string name=\"groups\">Grupid</string>\n    <string name=\"pref_focus_search\">Rakenduse käivitamisel pane fookus otsingule</string>\n    <string name=\"pref_focus_search_summary\">Rakenduse käivitamisel võimalda kohe alustada otsingut.</string>\n    <string name=\"pref_grouping_halves\">Rühmita kahes osas</string>\n    <string name=\"pref_grouping_none\">Ära rühmita</string>\n    <string name=\"pref_grouping_size_two\">Rühmita kahekaupa</string>\n    <string name=\"pref_grouping_size_three\">Rühmita kolmekaupa</string>\n    <string name=\"pref_grouping_size_four\">Rühmita neljakaupa</string>\n    <string name=\"pref_copy_behavior_never\">Ära kopeeri iialgi</string>\n    <string name=\"pref_copy_behavior_single_tap\">Kopeeri ühe puudutusega</string>\n    <string name=\"pref_copy_behavior_double_tap\">Kopeeri kahe puudutusega</string>\n    <string name=\"pref_account_name_position_hidden\">Peidetud</string>\n    <string name=\"pref_account_name_position_end\">Väljaandja kõrval</string>\n    <string name=\"pref_account_name_position_below\">Väljaandja all</string>\n    <plurals name=\"time_elapsed_seconds\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"one\">%d sekund tagasi</item>\n        <item quantity=\"other\">%d sekundit tagasi</item>\n    </plurals>\n    <plurals name=\"time_elapsed_minutes\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"one\">%d minut tagasi</item>\n        <item quantity=\"other\">%d minutit tagasi</item>\n    </plurals>\n    <plurals name=\"time_elapsed_hours\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"one\">%d tund tagasi</item>\n        <item quantity=\"other\">%d tundi tagasi</item>\n    </plurals>\n    <plurals name=\"time_elapsed_days\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"one\">%d päev tagasi</item>\n        <item quantity=\"other\">%d päeva tagasi</item>\n    </plurals>\n    <plurals name=\"time_elapsed_years\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"one\">%d aasta tagasi</item>\n        <item quantity=\"other\">%d aastat tagasi</item>\n    </plurals>\n    <plurals name=\"dropdown_checkboxes_default_count\">\n        <item quantity=\"one\">%d kirje on valitud</item>\n        <item quantity=\"other\">%d kirjet on valitud</item>\n    </plurals>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-et-rEE-v29/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"system_theme_title\">Süsteemi vaikeseadistus</string>\n    <string name=\"system_amoled_theme_title\">Süsteemi vaikeseadistus (AMOLED)</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-eu-rES/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources xmlns:tools=\"http://schemas.android.com/tools\">\n    <string name=\"action_settings\">Ezarpenak</string>\n    <string name=\"action_about\">Honi buruz</string>\n    <string name=\"action_delete\">Ezabatu</string>\n    <string name=\"action_transfer\">Transferitu</string>\n    <string name=\"action_edit_icon\">Editatu abiarazlea</string>\n    <string name=\"action_reset_usage_count\">Berrezarri erabilera kopurua</string>\n    <string name=\"action_reset_usage_count_dialog\">Ziur zaude elementu honen erabilera kopurua 0ra berrezartzeaz?</string>\n    <string name=\"action_default_icon\">Berrezarri abiarazle lehentsia</string>\n    <string name=\"discard\">Baztertu</string>\n    <string name=\"save\">Gorde</string>\n    <string name=\"all\">Guztiak</string>\n    <string name=\"issuer\">Igorlea</string>\n    <string name=\"yandex_pin\">PIN (4–16 zenbaki)</string>\n    <string name=\"motp_pin\">PIN (4 zenbaki)</string>\n    <string name=\"suggested\">Iradokitakoak</string>\n    <string name=\"usage_count\">Erabilera kopurua</string>\n    <string name=\"warning\">Oharra</string>\n    <string name=\"pref_cat_appearance_app\">Aplikazioa</string>\n    <string name=\"pref_cat_appearance_entries\">Sarrerak</string>\n    <string name=\"pref_cat_backups_android\">Android</string>\n    <string name=\"pref_cat_backups_auto\">Segurtasun kopia automatikoak</string>\n    <string name=\"pref_section_behavior_title\">Portaera</string>\n    <string name=\"pref_section_behavior_summary\">Pertsonalizatu portaera sarrera zerrenda erabiltzean.</string>\n    <string name=\"pref_section_appearance_title\">Itxura</string>\n    <string name=\"pref_section_appearance_summary\">Itxura, hizkuntza eta beste ezarpen batzuk aldatu.</string>\n    <string name=\"pref_section_security_title\">Segurtasuna</string>\n    <string name=\"pref_section_security_summary\">Zifratzea, desblokeatzeko elementu biometrikoak erabiltzea, automatikoki blokeatzea eta beste segurtasun ezarpen batzuk kudeatu.</string>\n    <string name=\"pref_section_import_export_title\">Inportatu eta esportatu</string>\n    <string name=\"pref_section_import_export_summary\">Aegis edo beste aplikazio batzuen segurtasun-kopiak inportatu. Zure Aegis biltegiaren eskuzko esportazioak sortu.</string>\n    <string name=\"pref_section_audit_log_title\">Erregistroa</string>\n    <string name=\"pref_section_audit_log_summary\">Appean gertatutako gertaeren zerrenda agertuko da.</string>\n    <string name=\"pref_section_backups_title\">Segurtasun-kopiak</string>\n    <string name=\"pref_section_backups_summary\">Konfiguratu segurtasun kopia automatikoak zuk nahi duzun karpetan gorde edo aktibatu Androiden segurtasun kopien sistema.</string>\n    <string name=\"pref_section_icon_packs\">Ikono multzoak</string>\n    <string name=\"pref_section_icon_packs_summary\">Kudeatu eta inportatu ikono multzoak</string>\n    <string name=\"pref_select_theme_title\">Itxura</string>\n    <string name=\"pref_dynamic_colors_title\">Kolore dinamikoak</string>\n    <string name=\"pref_dynamic_colors_summary\">Zure Androidaren itxuraren araberako koloreak aplikatu</string>\n    <string name=\"pref_view_mode_title\">Ikuspegia</string>\n    <string name=\"pref_lang_title\">Hizkuntza</string>\n    <string name=\"pref_show_icons_title\">Erakutsi ikonoak</string>\n    <string name=\"pref_show_icons_summary\">Ikonoak erakutsi sarrera bakoitzaren ondoan</string>\n    <string name=\"pref_code_group_size_title\">Kode-digituen taldekatzea</string>\n    <string name=\"pref_code_group_size_summary\">Aukeratu kodeak zenbat zenbakiko taldetan taldekatuko diren</string>\n    <string name=\"pref_account_name_position_title\">Erakutsi kontuaren izena</string>\n    <string name=\"pref_show_next_code_title\">Erakutsi hurrengo kodea</string>\n    <string name=\"pref_show_next_code_summary\">Sortu eta erakutsi hurrengo kodea aurrez</string>\n    <string name=\"pref_expiration_state_title\">Erakutsi iraungitzera doazen kodeak</string>\n    <string name=\"pref_expiration_state_summary\">Aldatu kodeen koloreak eta keinuak gehitu iraungitzera doazenean</string>\n    <string name=\"pref_expiration_state_fallback\">Aldatu kodeen koloreak iraungitzera doazenean</string>\n    <string name=\"pref_shared_issuer_account_name_title\">Kontuaren izena beharrezkoa denean bakarrik erakutsi</string>\n    <string name=\"pref_shared_issuer_account_name_summary\">Kontuen izenak jaulkitzaile bera dutenean bakarrik erakutsi. Beste kontu izenak ezkutuan egongo dira.</string>\n    <string name=\"pref_account_name_position_summary_override\">Ezarpen hau lauzen bistak gainidazten du. Kontuaren izena jaulkitzailearen azpian erakutsiko da beti.</string>\n    <string name=\"pref_import_file_title\">Inportatu fitxategi batetik</string>\n    <string name=\"pref_import_file_summary\">Inportatu marka-ikurrak fitxategi batetik</string>\n    <string name=\"pref_android_backups_title\">Androiden lainoko segurtasun kopiak</string>\n    <string name=\"pref_android_backups_summary\">Androiden segurtasun kopien sistemari Aegisen biltegiaren kopia egiten utzi. Hau zifratutako biltegiekin bakarrik erabili daiteke.</string>\n    <string name=\"pref_android_backups_hint\"><i>Gailutik gailurako (D2D) segurtasun kopiak beti egin ditzakezu, berdin delarik goian egindako aukera</i></string>\n    <string name=\"pref_backups_title\">Biltegiaren segurtasun kopia automatikoki egin</string>\n    <string name=\"pref_backups_summary\">Aldaketak egiten direnean, sortu automatikoki biltegiaren segurtasun-kopiak kanpoko biltegiratze unitatean. Hori biltegi zifratuek bakarrik onartzen dute.</string>\n    <string name=\"pref_backups_reminder_title\">Segurtasun kopiaren gogorarazpena</string>\n    <string name=\"pref_backups_reminder_summary\">Erakutsi segurtasun kopia egiteko gogorarazpena zure azken aldaketen kopiarik ez bada egin.</string>\n    <string name=\"pref_backups_reminder_dialog_title\">Desaktibatu segurtasun kopiaren gogorarazpena</string>\n    <string name=\"pref_backups_reminder_dialog_summary\">Gogorarazpena desaktibatzean Aegisek ez dizu kopien inguruko abisurik emango. Honek zure gakoak galtzea ekar dezake. Gogorarazpena desaktibatu egin nahi duzu?</string>\n    <string name=\"pref_backups_versioning_strategy_title\">Segurtasun kopien estrategia</string>\n    <string name=\"pref_backups_versioning_strategy_keep_x_versions\">Bertsio kopuru bat mantendu</string>\n    <string name=\"pref_backups_versioning_strategy_single_backup\">Segurtasun kopia bakarra</string>\n    <string name=\"pref_backups_versioning_strategy_single_backup_warning\">Aukeratutako estrategia ez da fidagarria eta ez dugu gomendatzen. Segurtasun kopia bakarrak huts egiten badu datuak galdu egin ditzakezu.</string>\n    <string name=\"pref_backups_versioning_strategy_dialog_title\">Aukeratu segurtasun kopien estrategia</string>\n    <string name=\"pref_backups_location_title\">Segurtasun kopien kokalekua</string>\n    <string name=\"pref_backups_location_summary\">Segurtasun-kopiak hemen gordeko dira</string>\n    <string name=\"pref_backup_location_summary\">Segurtasun-kopiak hemen gordeko dira</string>\n    <string name=\"pref_backups_trigger_title\">Segurtasun-kopien abiarazlea</string>\n    <string name=\"pref_backups_trigger_summary\">Abiarazi segurtasun-kopia eskuz</string>\n    <string name=\"pref_backups_versions_title\">Gorde beharreko bertsio kopurua</string>\n    <string name=\"pref_backups_versions_infinite\">\\u221E</string>\n    <plurals name=\"pref_backups_versions_summary\">\n        <item quantity=\"one\">Mantendu segurtasun-kopiaren %1$d bertsio</item>\n        <item quantity=\"other\">Mantendu segurtasun-kopien %1$d bertsio</item>\n    </plurals>\n    <string name=\"pref_backups_versions_infinite_summary\">Segurtasun kopien infititu bertsio gorde</string>\n    <string name=\"pref_import_app_title\">Inportatu aplikaziotik</string>\n    <string name=\"pref_import_app_summary\">Inportatu tokenak aplikazio batetik (root sarbidea behar du)</string>\n    <string name=\"pref_export_title\">Esportatu</string>\n    <string name=\"pref_export_summary\">Esportatu biltegia</string>\n    <string name=\"pref_password_reminder_title\">Pasahitza gogoan izan</string>\n    <string name=\"pref_google_auth_export_title\">Esportatu Google Authenticatorren erabiltzeko</string>\n    <string name=\"pref_google_auth_export_descriptor\">Google Authenticatorrekin bateragarriak diren QR kodeak esportatzen ditu</string>\n    <string name=\"pref_google_auth_export_no_data\">Ez dago esportatzeko daturik</string>\n    <plurals name=\"pref_google_auth_export_incompatible_entries\">\n        <item quantity=\"one\">Bateragarria ez den sarrera %d ez da esportatu</item>\n        <item quantity=\"other\">Bateragarri ez diren %d sarrera ez dira esportatu</item>\n    </plurals>\n    <string name=\"pref_password_reminder_summary\">Erakutsi %s pasahitza gogorarazlea, ahaztu ez dezazun.</string>\n    <string name=\"pref_password_reminder_summary_disabled\">Desgaituta</string>\n    <string name=\"pref_secure_screen_title\">Pantaila segurtasuna</string>\n    <string name=\"pref_secure_screen_summary\">Blokeatu pantaila-argazkiak eta beste saiakera batzuk aplikazioaren barruan pantaila kapturatzeko</string>\n    <string name=\"pref_tap_to_reveal_title\">Sakatu erakusteko</string>\n    <string name=\"pref_tap_to_reveal_summary\">Tokenak lehenespenez ezkutatzen dira. Ukitu tokens-etan sarrera ikusteko.</string>\n    <string name=\"pref_tap_to_reveal_time_title\">Sakatu ikusteko erabiltzeko denbora</string>\n    <string name=\"pref_auto_lock_title\">Blokeatu automatikoki</string>\n    <string name=\"pref_auto_lock_summary\">Noiz %s</string>\n    <string name=\"pref_auto_lock_summary_disabled\">Ezgaituta</string>\n    <string name=\"pref_auto_lock_prompt\">Blokeatu automatikoki Aegis kasu hauetan</string>\n    <string name=\"pref_auto_lock_type_back_button\">Atzera egiteko botoia sakatuta dago</string>\n    <string name=\"pref_auto_lock_type_minimize\">Aplikazioa minimizatuta dago</string>\n    <string name=\"pref_auto_lock_type_device_lock\">Gailua blokeatuta dago</string>\n    <string name=\"pref_backup_password_category\">Segurtasun-kopiak eta esportazioa</string>\n    <string name=\"pref_backup_password_title\">Aparteko pasahitza segurtasun-kopia eta esportazioarentzat</string>\n    <string name=\"pref_backup_password_summary\">Aktibatuta badago, aplikazioa desblokeatzeko erabiltzen den pasahitza ezingo da erabili segurtasun kopia eta esportazioak deszifratzeko.</string>\n    <string name=\"pref_backup_password_change_title\">Aldatu segurtasun-kopia eta esportazioan pasahitza</string>\n    <string name=\"pref_backup_password_change_summary\">Ezarri segurtasun-kopia eta esportazioak egitean gordailua zifratzeko erabiliko den pasahitz berria.</string>\n    <string name=\"pref_encryption_title\">Zifratua</string>\n    <string name=\"pref_encryption_summary\">Zifratu biltegia eta desblokeatu pasahitzarekin edo biometriarekin</string>\n    <string name=\"pref_biometrics_title\">Desblokeatze biometrikoa</string>\n    <string name=\"pref_biometrics_summary\">Baimendu autentifikazio biometrikoa biltegia desblokeatzeko</string>\n    <string name=\"pref_search_behavior_summary\">Bilatu: %s</string>\n    <string name=\"pref_search_behavior_prompt\">Bilatu eremu guzti hauetan</string>\n    <string name=\"pref_search_behavior_type_name\">Izena</string>\n    <string name=\"pref_search_behavior_type_issuer\">Jaulkitzailea</string>\n    <string name=\"pref_search_behavior_type_note\">Oharra</string>\n    <string name=\"pref_search_behavior_type_groups\">Taldeak</string>\n    <string name=\"pref_set_password_title\">Aldatu pasahitza</string>\n    <string name=\"pref_set_password_summary\">Ezarri biltegia desblokeatzeko erabiliko duzun pasahitz berria</string>\n    <string name=\"no_events_title\">Ez dago gertaerarik</string>\n    <string name=\"no_events_description\">Ez da garrantzizko gertaerarik gertatu appean</string>\n    <string name=\"event_title_vault_unlocked\">Biltegia desblokeatuta</string>\n    <string name=\"event_description_vault_unlocked\">Biltegia ondo desblokeatu da</string>\n    <string name=\"event_title_backup_created\">Segurtasun kopia sortuta</string>\n    <string name=\"event_description_backup_created\">Biltegiaren segurtasun kopia ondo sortu da</string>\n    <string name=\"event_title_android_backup_created\">Androidek sortutako segurtasun kopia</string>\n    <string name=\"event_description_android_backup_created\">Biltegiaren segurtasun kopia Androidek ondo sortu du</string>\n    <string name=\"event_title_vault_exported\">Biltegia esportatuta</string>\n    <string name=\"event_description_vault_exported\">Biltegiaren kopia bat esportatu da</string>\n    <string name=\"event_title_entry_shared\">Sarrera partekatuta</string>\n    <string name=\"event_description_entry_shared\">Sarrera bat partekatu da</string>\n    <string name=\"event_title_vault_unlock_failed_password\">Biltegia desblokeatzeak huts egin du (pasahitza)</string>\n    <string name=\"event_description_vault_unlock_failed_password\">Biltegia pasahitz bat erabiliz desblokeatzeak huts egin du</string>\n    <string name=\"event_title_vault_unlock_failed_biometrics\">Biltegia desblokeatzeak huts egin du (biometria)</string>\n    <string name=\"event_description_vault_unlock_failed_biometrics\">Biltegia biometria erabilz desblokeatzeak huts egin du</string>\n    <string name=\"event_unknown\">Gertaera ezezaguna</string>\n    <string name=\"audit_log_entry_deleted\">(ezabatuta)</string>\n    <string name=\"today_at_time\">Gaur %1$s</string>\n    <string name=\"day_of_week_at_time\">%1$s %2$s</string>\n    <string name=\"export_encrypted\">Zifratu biltegia</string>\n    <string name=\"export_help\">Akzio honek zure biltegia Aegisen barne-biltegiratzetik kanpo esportatuko du. Aukeratu zein formatutan esportatu nahi duzun:</string>\n    <string name=\"export_warning_unencrypted\">Zure Aegis biltegiaren zifratu gabeko kopia esportatzera zoaz. <b>Ez dizugu hau egitea gomendatzen</b>.</string>\n    <string name=\"export_warning_password\">Esportazioak Segurtasun ezarpenetan zehazten den bestelako pasahitz batekin zifratuta daude.</string>\n    <string name=\"understand_risk_accept\">Arriskua ulertzen dut</string>\n    <string name=\"export_format_aegis\">Aegis (.JSON)</string>\n    <string name=\"export_format_google_auth_uri\">Testu fitxategia (.TXT)</string>\n    <string name=\"export_format_html\">Web orrialdea (.HTML)</string>\n    <string name=\"export_format_hint\">Esportazio formatua</string>\n    <string name=\"export_all_groups\">Esportatu talde guztiak</string>\n    <string name=\"export_choose_groups\">Aukeratu zein talde esportatu</string>\n    <plurals name=\"export_groups_selected_count\">\n        <item quantity=\"one\">Talde %d aukeratuta</item>\n        <item quantity=\"other\">%d talde aukeratuta</item>\n    </plurals>\n    <string name=\"export_no_groups_selected\">Ez duzu talderik aukeratu esportatzeko</string>\n    <string name=\"export_html_title\" comment=\"The title of an HTML export document\">Aegis Authenticator Esportazioa</string>\n    <string name=\"choose_authentication_method\">Segurtasuna</string>\n    <string name=\"authentication_method_explanation\">Aegis segurtasunean oinarritutako 2FA aplikazioa da. Tokenak biltegi batean gordetzen dira. Biltegi hori nahi izanez gero, aukeratu duzun pasahitzarekin zifratu daiteke. Erasotzaile batek biltegi enkriptatuko fitxategia lortzen badu, ezingo du edukira sartu pasahitza jakin gabe.\\n\\nZure gailuarentzat hobeto egokituko litzatekeela uste dugun aukera hautatu dugu.</string>\n    <string name=\"authentication_method_none\">Bat ere ez</string>\n    <string name=\"authentication_method_none_description\">Biltegia desblokeatzeko ez da pasahitzik behar eta ez da enkriptatuko. <b>Aukera hau ez da gomendatzen</b>.</string>\n    <string name=\"authentication_method_password\">Pasahitza</string>\n    <string name=\"authentication_method_password_description\">Biltegia desblokeatzeko pasahitza behar da.</string>\n    <string name=\"authentication_method_password_explanation\">Adi: pasahitza ahazten baduzu, zure tokenen sarbidea galduko duzu betirako. Ezin dira berreskuratu pasahitzik gabe.</string>\n    <string name=\"authentication_method_biometrics\">Biometriak</string>\n    <string name=\"authentication_method_biometrics_description\">Pasahitzaz gain, gailu honetan erregistratutako biometriak, hala nola hatz-marka edo zure aurpegia, biltegia desblokeatzeko erabil daitezke.</string>\n    <string name=\"authentication\">Desblokeatu biltegia</string>\n    <string name=\"authentication_multiline\" comment=\"The newline in the middle is used for aesthetic purposes\">Desblokeatu\\nbiltegia</string>\n    <string name=\"auth_use_biometrics\">Edo sakatu hemen <font fgcolor=\"#FF0D86C1\">biometria</font> erabiltzeko</string>\n    <string name=\"set_password\">Sartu pasahitz bat mesedez</string>\n    <string name=\"set_group\">Sartu talde izen bat mesedez</string>\n    <string name=\"set_number\">Sartu zenbaki bat mesedez</string>\n    <string name=\"set_password_confirm\">Berretsi pasahitza mesedez</string>\n    <string name=\"invalid_password\">Pasahitza ez da zuzena</string>\n    <string name=\"invalidated_biometrics\">Aldaketa bat detektatu da zure gailuaren segurtasun ezarpenetan. Joan \\\"Aegis -&gt; Ezarpenak -&gt; Segurtasuna &gt; Biometriak\\\" aukerara eta aktibatu berriro desblokeatze-biometrikoa.</string>\n    <string name=\"password_reminder\">Sartu zure pasahitza mesedez. Noizean behin pasahitza sartzeko eskatzen dizugu ahaztu ez dezazun.</string>\n    <string name=\"password_reminder_dialog_title\">Defektuz biometria bidezko desblokeatzea erabili</string>\n    <string name=\"password_reminder_dialog_message\">Noizean behin pasahitza sartzeko eskatzen dizugu ahaztu ez duzula frogatzeko eta zure biltegirako sarrera ez galtzeko. Zure pasahitza behin sartzen duzunean, biometria bidezko desblokeatzea erabiliko du defektuz Aegisek beste pasahitz gogorarazpen bat sortu arte.</string>\n    <string name=\"password_reminder_freq_never\">Inoiz ez</string>\n    <string name=\"password_reminder_freq_weekly\">Astero</string>\n    <string name=\"password_reminder_freq_biweekly\">Bi astero</string>\n    <string name=\"password_reminder_freq_monthly\">Hilero</string>\n    <string name=\"password_reminder_freq_quarterly\">Hiru hilabetero</string>\n    <string name=\"enter_password_2fas_message\">2FAko segurtasun kopia hau zifratuta dagoela dirudi. Sartu pasahitza.</string>\n    <string name=\"enter_password_authy_message\">Badirudi Authy tokenak zifratuta daudela. Itxi Aegis, ireki Authy eta desblokeatu tokenak pasahitzarekin. Horren ordez, Aegis zure Authy fitxak deszifratzen ere saia daiteke, ondoren pasahitza sartzen baduzu.</string>\n    <string name=\"enter_password_aegis_title\">Mesedez sartu inportatzeko pasahitza</string>\n    <string name=\"period_hint\">Tartea (segundoak)</string>\n    <string name=\"algorithm_hint\">Hash funtzioa</string>\n    <string name=\"type\">Mota</string>\n    <string name=\"share\">Partekatu</string>\n    <string name=\"yes\">Bai</string>\n    <string name=\"no\">Ez</string>\n    <string name=\"undo\">Desegin</string>\n    <string name=\"unlock\">Desblokeatu</string>\n    <string name=\"advanced\">Aurreratua</string>\n    <string name=\"counter\">Kontagailua</string>\n    <string name=\"digits\">Digituak</string>\n    <string name=\"secret\">Sekretua</string>\n    <string name=\"scan\">Eskaneatu QR kodea</string>\n    <string name=\"scan_image\">Eskaneatu irudia</string>\n    <string name=\"enter_manually\">Sartu eskuz</string>\n    <string name=\"set_up_biometric\">Desblokeatze biometrikoa konfiguratu</string>\n    <string name=\"copy\">Kopiatu</string>\n    <string name=\"edit\">Editatu</string>\n    <string name=\"select_all\">Aukeratu guztiak</string>\n    <string name=\"assign_icons\">Esleitu ikonoak</string>\n    <string name=\"assign_groups\">Esleitu taldeari</string>\n    <string name=\"assign_groups_dialog_summary\">Aukeratu aukeratutako elementuak zein talderi esleitu.</string>\n    <string name=\"assign_groups_dialog_dropdown\">Aukeratu taldea</string>\n    <string name=\"favorite\" comment=\"Verb\">Gogokoa</string>\n    <string name=\"unfavorite\" comment=\"Verb\">Gogokoetatik kendu</string>\n    <string name=\"error_all_caps\">Errorea</string>\n    <string name=\"password\">Pasahitza</string>\n    <string name=\"confirm_password\">Berretsi pasahitza</string>\n    <string name=\"show_password\">Erakutsi pasahitza</string>\n    <string name=\"new_entry\">Sarrera berria</string>\n    <string name=\"add_new_entry\">Gehitu sarrera berria</string>\n    <string name=\"unlock_vault_error\">Ezin da biltegia desblokeatu</string>\n    <string name=\"unlock_vault_error_description\">Pasahitz okerra. Ziurtatu ez duzula pasahitza txarto idatzi.</string>\n    <string name=\"password_equality_error\">Pasahitzak berdinak izan behar dute eta ez dira hutsik egon behar</string>\n    <string name=\"snackbar_authentication_method\">Aukeratu autentifikazio modua mesedez</string>\n    <string name=\"encrypting_vault\">Biltegia zifratzen</string>\n    <string name=\"exporting_vault\">Biltegia esportatzen</string>\n    <string name=\"optimizing_icon\">Ikonoak optimizatzen</string>\n    <string name=\"optimizing_icon_multiple\">Ikonoak optimizatzen %1$d/%2$d</string>\n    <string name=\"reading_file\">Fitxategia irakurtzen</string>\n    <string name=\"requesting_root_access\">Root sarbidea eskatzen</string>\n    <string name=\"analyzing_qr\">QR kodea aztertzen</string>\n    <string name=\"analyzing_qr_multiple\">QR kodea aztertzen %1$d/%2$d (%3$s)</string>\n    <plurals name=\"added_new_entries\">\n        <item quantity=\"one\">Sarrera berri %d gehitu da</item>\n        <item quantity=\"other\">%d sarrera berri gehitu dira</item>\n    </plurals>\n    <string name=\"importing_icon_pack\">Ikono multzoa inportatzen</string>\n    <string name=\"delete_entry\">Ezabatu sarrera</string>\n    <string name=\"delete_entry_description\">Ziur al zaude sarrera hau ezabatu nahi duzula?</string>\n    <string name=\"delete_entry_explanation\">Akzio honek ez du <b>%s</b> zerbitzuaren 2FA desgaitzen. Sartzen jarraitzeko desaktibatu 2FA edo ziurtatu sartzeko kodeak beste era baten sor ditzakezula.</string>\n    <string name=\"delete_entries\">Ezabatu sarrerak</string>\n    <plurals name=\"delete_entries_description\">\n        <item quantity=\"one\">Ziur al zaude %d sarrera ezabatu nahi duzula?</item>\n        <item quantity=\"other\">Ziur al zaude %d sarrera ezabatu nahi dituzula?</item>\n    </plurals>\n    <string name=\"discard_changes\">Baztertu aldaketak?</string>\n    <string name=\"discard_changes_description\">Zure aldaketak ez dira gorde</string>\n    <string name=\"saving_profile_error\">Errorea profila gordetzerakoan</string>\n    <string name=\"saving_assign_icons_error\">Errorea ikonoak esleitzean</string>\n    <string name=\"welcome\">Ongi Etorri</string>\n    <string name=\"app_description\">Aegis doakoa, segurua eta software librea den 2FA aplikazioa da</string>\n    <string name=\"setup_completed\">Konfigurazioa osatuta</string>\n    <string name=\"setup_completed_description\">Aegis konfiguratu egin da eta hasteko prest dago.</string>\n    <string name=\"vault_not_found\">Ez da bitegia aurkitu, abian jartzen…</string>\n    <string name=\"copied\">Kopiatuta</string>\n    <string name=\"errors_copied\">Erroreak arbelera kopiatu dira</string>\n    <string name=\"version_copied\">Bertsioa arbelera kopiatu da</string>\n    <string name=\"error_required_field\">Eremu hau derrigorrezkoa da</string>\n    <string name=\"error_occurred\">Errore bat gertatu da</string>\n    <string name=\"decryption_error\">Errorea gertatu da biltegia desblokeatzen saiatzean</string>\n    <string name=\"decryption_corrupt_error\">Errorea gertatu da biltegia desblokeatzen saiatzean. Zure biltegi-fitxategia hondatuta egon daiteke.</string>\n    <string name=\"saving_error\">Errorea gertatu da biltegia gordetzen saiatzean</string>\n    <string name=\"vault_init_error\">Errorea gertatu da biltegia hasieratzen saiatzean</string>\n    <string name=\"vault_load_error\">Errorea gertatu da biltegia memoriatik kargatzen saiatzean</string>\n    <string name=\"biometric_decrypt_error\">Errorea gertatu da biltegia autentifikazio biometrikoarekin deszifratzen saiatzean. Normalean, gailuaren segurtasun ezarpenak aldatu direnean bakarrik gertatzen da hori. Desblokeatu biltegia pasahitzarekin, eta konfiguratu autentifikazio biometrikoa Aegisen konfigurazioan.</string>\n    <string name=\"biometric_init_error\">Errorea gertatu da autentifikazio biometrikoa prestatzen saiatzean. Normalean, gailuaren segurtasun ezarpenak aldatu direnean bakarrik gertatzen da hori. Desblokeatu biltegia pasahitzarekin, eta konfiguratu autentifikazio biometrikoa Aegisen konfigurazioan.</string>\n    <string name=\"disable_encryption\">Desgaitu zifratua</string>\n    <string name=\"disable_encryption_description\">Zifratzea desaktibatu nahi duzu? Honek zure biltegia testu hutsean gordeko dela esan nahi du. <b>Segurtasun kopia automatikoak ere desgaitu egingo dira</b>.</string>\n    <string name=\"enable_encryption_error\">Errorea gertatu da zifratua gaitzerakoan</string>\n    <string name=\"disable_encryption_error\">Errorea gertatu da zifratua desgaitzerakoan</string>\n    <string name=\"backup_successful\">Segurtasun-kopia egitea ondo gorde da</string>\n    <string name=\"backup_error\">Errorea gertatu da segurtasun-kopia sortzerakoan</string>\n    <string name=\"backup_status_success\">Ondo egindako azken segurtasun kopia: %s</string>\n    <string name=\"backup_status_failed\">Huts egindako azken segurtasun kopia: %s</string>\n    <string name=\"backup_status_none\">Oraindik ez da segurtasun kopiarik egin</string>\n    <string name=\"backup_warning_password\">Babeskopiak Segurtasun ezarpenetan zehazten den bestelako pasahitz batekin zifratuta daude</string>\n    <string name=\"documentsui_error\">DocumentsUI ez dago zure gailuan. Dokumentuak aukeratu eta sortzeko ezinbesteko sistemaren osagaia da hau. Zure gailuan lekuka egiteko aplikazioren bat erabili baduzu agian nahi gabe ezabatu egingo zenuen eta berriz instalatu beharko duzu.</string>\n    <string name=\"icon_pack_import_error\">Errorea gertatu da ikono multzo bat inportatzerakoan</string>\n    <string name=\"icon_pack_import_exists_error\">Inportatzen saiatzen ari zaren ikono multzoa jada badago. Gainidaztea nahi duzu?</string>\n    <string name=\"icon_pack_delete_error\">Errorea gertatu da ikono multzoa ezabatzean</string>\n    <plurals name=\"icon_pack_info\">\n        <item quantity=\"one\">Ikono %d</item>\n        <item quantity=\"other\">%d ikono</item>\n    </plurals>\n    <string name=\"icon_custom\">Pertsonalizatua</string>\n    <string name=\"permission_denied\">Baimena ukatuta</string>\n    <string name=\"andotp_new_format\">Formatu berria (v0.6.3 edo berriagoa) </string>\n    <string name=\"andotp_old_format\">Formatu zaharra (v0.6.2 edo zaharragoa) </string>\n    <string name=\"choose_andotp_importer\">Zer formatu du andOTP segurtasun-kopiak?</string>\n    <string name=\"choose_totpauth_importer\">TOTP Authenticator segurtasun-kopia hori zifratuta dago pasahitz batekin?</string>\n    <string name=\"choose_application\">Hautatu inportatzeko aplikazioa</string>\n    <string name=\"choose_theme\">Hautatu zure itxura</string>\n    <string name=\"choose_account_name_position\">Aukeratu zure kontuaren izenaren posizioa</string>\n    <string name=\"choose_view_mode\">Aukeratu nahi duzun ikuspegia</string>\n    <string name=\"choose_copy_behavior\">Aukeratu kopia egiteko nahi duzun portaera</string>\n    <string name=\"parsing_file_error\">Errorea gertatu da fitxategia analizatzen saiatzean</string>\n    <string name=\"file_not_found\">Errorea: Ez da fitxategia aurkitu</string>\n    <string name=\"reading_file_error\">Errorea gertatu da fitxategia irakurtzen saiatzean</string>\n    <string name=\"app_lookup_error\">Errorea: Aplikazioa ez dago instalatuta</string>\n    <string name=\"app_version_error\">Instalatuta dagoen %s bertsioa ez da bateragarria. Bertsio berriak fitxategietako batzuk barneko biltegiratze-direktorioan zifratzen hasi dira, ondorioz Aegisek ezin du inportaziorako behar duen informazioa eskuratu. Inportatzen saiatzeak errore bat emango du ziurrenik. Jarraitu nahi duzu?</string>\n    <string name=\"root_error\">Errorea: Ezin izan da root sarbidea lortu</string>\n    <plurals name=\"imported_entries_count\">\n        <item quantity=\"one\">%d sarrera inportatuta</item>\n        <item quantity=\"other\">%d sarrera inportatuta</item>\n    </plurals>\n    <plurals name=\"entries_shown\">\n        <item quantity=\"one\">Sarrera %d erakusten</item>\n        <item quantity=\"other\">%d sarrera erakusten</item>\n    </plurals>\n    <string name=\"intro_import_error_title\">Errore bat gertatu da biltegi bat inportatzerakoan</string>\n    <string name=\"import_error_title\">Inportazioa burutzerakoan errore bat edo gehiago gertatu dira</string>\n    <string name=\"exporting_vault_error\">Errorea gertatu da biltegia esportatzen saiatzean</string>\n    <string name=\"exported_vault\">Biltegia esportatu da</string>\n    <string name=\"encryption_set_password_error\">Errorea gertatu da pasahitza ezartzen saiatzean.</string>\n    <string name=\"encryption_enable_biometrics_error\">Errorea gertatu da desblokeo biometrikoa gaitzen saiatzean. Gailu batzuek autentifikazio biometrikoko ezarpen txarrak dituzte, eta baliteke zurea horietako bat izatea. Aldatu horren ordez pasahitza soilik duen konfigurazio batera.</string>\n    <string name=\"no_cameras_available\">Kamera ez dago erabilgarri</string>\n    <string name=\"read_qr_error\">Errorea gertatu da QR kodea irakurtzen saiatzean</string>\n    <string name=\"read_qr_error_phonefactor\">Aegis ez da bateragarria Microsoften 2FA algoritmo jabedunarekin. Office 365en 2FA konfiguratzen duzunean aukeratu \\\"Aplikazioa jakinarazpen gabe konfiguratu\\\" aukeratu ezazu (ingelesez: \\\"Setup application without notifications\\\").</string>\n    <string name=\"partial_google_auth_import\">Google Authenticatorren esportazioa ez da osoa</string>\n    <string name=\"partial_google_auth_import_warning\">QR kode batzuk falta dira zure inportazioan. Kode hauek ez dira aurktu: \\n\\n<b>%s</b>\\n\\nZatikako inportazio honekin jarrai dezakezu baina berriz ere QR kode guztiekin saiatzea gomendatzen dizugu tokenetarako sarrera gal ez dezazun.</string>\n    <string name=\"missing_qr_code_descriptor\">• QR kodea %d</string>\n    <plurals name=\"import_partial_export_anyway\">\n        <item quantity=\"one\">Inportatu token %d edonola ere</item>\n        <item quantity=\"other\">Inportatu %d token edonola ere</item>\n    </plurals>\n    <string name=\"import_google_auth_failure\">Google Authenticatorren esportazioa inportatzeak huts egin du</string>\n    <string name=\"unrelated_google_auth_batches_error\">Esportazioak zerikusirik ez duen sorta baten informazioa du. Saiatu sorta bakoitza bere aldetik inportatzen.</string>\n    <string name=\"no_tokens_can_be_imported\">Ez izan da tokenik inportatu</string>\n    <string name=\"unlocking_vault\">Biltegia desblokeatzen</string>\n    <string name=\"rename_group\">Berrizendatu taldea</string>\n    <string name=\"no_group_selection\">Sarrera ez bada talde baten parte \\\"Talde gabekoak\\\" atalean egongo da.</string>\n    <string name=\"remove_group\">Ezabatu taldea</string>\n    <string name=\"remove_group_description\">Ziur zaude talde hau ezabatu nahi duzula? Talde honetako sarrerak automatikoki aldatuko dira \\'Talderik ez\\' aukerara.</string>\n    <string name=\"remove_unused_groups\">Ezabatu erabili gabeko taldeak</string>\n    <string name=\"remove_unused_groups_description\">Ziur zaude sarrera bati ere esleitu gabeko talde guztiak ezabatu nahi dituzula?</string>\n    <string name=\"remove_icon_pack\">Ezabatu ikono multzoa</string>\n    <string name=\"remove_icon_pack_description\">Ziur zaude ikono multzo hau ezabatzeaz? Ikono multzo honetako ikonoak darabiltzaten sarreretan ez da aldaketarik egongo.</string>\n    <string name=\"details\">Xehetasunak</string>\n    <string name=\"show_error_details\">Erakutsi errorearen xehetasunak</string>\n    <string name=\"lock\">Blokeatu</string>\n    <string name=\"name\">Izena</string>\n    <string name=\"no_group\">Talderik ez</string>\n    <string name=\"sort\" comment=\"Title of the Sort button in the top action bar of the main view\">Ordenatu</string>\n    <string name=\"sort_alphabetically\">Igorlea (A-tik Z-ra)</string>\n    <string name=\"sort_alphabetically_reverse\">Igorlea (Z-tik A-ra)</string>\n    <string name=\"sort_alphabetically_name\">Kontua (A-tik Z-ra)</string>\n    <string name=\"sort_alphabetically_name_reverse\">Kontua (Z-tik A-ra)</string>\n    <string name=\"sort_usage_count\">Erabilera kopurua</string>\n    <string name=\"sort_last_used\">Azken erabilera</string>\n    <string name=\"sort_custom\">Pertsonalizatua</string>\n    <string name=\"last_used\">Azken erabilera</string>\n    <string name=\"last_used_never\">sekula ez</string>\n    <string name=\"new_group\">Talde berria…</string>\n    <string name=\"group\">Taldea</string>\n    <string name=\"group_name_hint\">Taldearen izena</string>\n    <string name=\"preference_manage_groups\">Editatu taldeak</string>\n    <string name=\"preference_manage_groups_summary\">Kudeatu eta ezabatu zure taldeak hemen</string>\n    <string name=\"preference_reset_usage_count\">Berrezarri erabilera kopurua</string>\n    <string name=\"preference_reset_usage_count_summary\">Berrezarri elementu guztien erabilera kopurua</string>\n    <string name=\"preference_reset_usage_count_dialog\">Ziur zaude elementu guztien erabilera kopurua 0ra berrezartzeaz?</string>\n    <string name=\"note\" comment=\"Users can add a note to an entry\">Oharra</string>\n    <string name=\"clear\">Garbitu</string>\n    <string name=\"pref_highlight_entry_title\">Nabarmendu tokenak ukitzean</string>\n    <string name=\"pref_highlight_entry_summary\">Egin elkarrengandik errazago bereizten diren tokenak, sakatzen dituzunean aldi baterako nabarmenduz</string>\n    <string name=\"pref_groups_multiselect_title\">Talde bat baino gehiago aukeratu</string>\n    <string name=\"pref_groups_multiselect_summary\">Talde bat baino gehiago aldi berean aukeratzea baimendu</string>\n    <string name=\"pref_minimize_on_copy_title\">Txikitu kopiatzean</string>\n    <string name=\"pref_minimize_on_copy_summary\">Aplikazioa txikitu tokena kopiatutakoan</string>\n    <string name=\"pref_copy_behavior_title\">Kopiatu tokenak arbelera</string>\n    <string name=\"pref_search_behavior_title\">Bilaketaren portaera</string>\n    <string name=\"pref_pause_entry_title\">Izoztu tokenak ukitzean</string>\n    <string name=\"pref_pause_entry_summary\">Gelditu tokenak automatikoki freskatzea beraietan sakatzean. Tokenak ez dira eguneratuko ukitzen ez badituzu. \\\"Nabarmendu tokenak ukitzean\\\" edo \\\"Sakatu erakusteko\\\" aukeratuta izatea eskatzen du.</string>\n    <string name=\"pin_keyboard_description\">Sartu pasahitza PIN teklatua gaitzeko. Kontuan izan honek zure pasahitzak zenbakiak soilik baditu funtzionatzen duela</string>\n    <string name=\"pin_keyboard_error\">Errorea PIN teklatua gaitzean</string>\n    <string name=\"pin_keyboard_error_description\">Ezin da PIN teklatua konfiguratu. Zure pasahitzak zenbakiak bakarrik izan behar ditu.</string>\n    <string name=\"pin_keyboard_disabled\">Pasahitza aldatuta. PINa sartzeko teklatua ez da gehiago agertuko.</string>\n    <string name=\"selected\">Aukeratuta</string>\n    <string name=\"dark_theme_title\">Itxura iluna</string>\n    <string name=\"light_theme_title\">Itxura argia</string>\n    <string name=\"amoled_theme_title\">AMOLED itxura</string>\n    <string name=\"system_theme_title\">Battery Saver-ek ezarrita</string>\n    <string name=\"system_amoled_theme_title\">Battery Saver-ek ezarrita (AMOLED)</string>\n    <string name=\"normal_viewmode_title\">Arrunta</string>\n    <string name=\"compact_mode_title\">Trinkoa</string>\n    <string name=\"small_mode_title\">Txikia</string>\n    <string name=\"tiles_mode_title\">Lauzak</string>\n    <string name=\"unknown_issuer\">Igorle ezezaguna</string>\n    <string name=\"unknown_account_name\">Kontu-izen ezezaguna</string>\n    <plurals name=\"import_error_dialog\">\n        <item quantity=\"one\">Aegisek ezin izan du token %d inportatu. Token hau ez dugu inportatuko. Egin klik xehetasunetan erroreari buruzko informazio gehiago lortzeko.</item>\n        <item quantity=\"other\">Aegisek ezin izan ditu %d token inportatu. Token hauek ez ditugu inportatuko. Egin klik xehetasunetan erroreari buruzko informazio gehiago lortzeko.</item>\n    </plurals>\n    <string name=\"unable_to_process_deeplink\">Ezin izan da esteka sakona prozesatu</string>\n    <string name=\"unable_to_read_qrcode_file\">Ezin izan da fitxategian oinarritutako QR kodea prozesatu: %s.</string>\n    <string name=\"unable_to_process_shared_text\">Ezin izan da partekatutako testua OTP bezala prozesatu</string>\n    <string name=\"unable_to_read_qrcode_files\">Ezin izan dira QR kode batzuk irakurri eta prozesatu. %1$d/%2$d elementu bakarrik inportatuko dira.</string>\n    <string name=\"unable_to_generate_qrcode\">Ezin da QR kodea sortu</string>\n    <string name=\"select_picture\">Aukeratu irudia</string>\n    <string name=\"select_icon\">Aukeratu ikonoa</string>\n    <string name=\"tile_open_vault\" comment=\"label for a quick settings tile that opens the app when tapped\">Ireki biltegia</string>\n    <string name=\"tile_open_scanner\" comment=\"label for a quick settings tile that opens the QR code scanner when tapped\">Ireki eskanerra</string>\n    <string name=\"toggle_checkboxes\">Aukeraketa kutxak aldatu</string>\n    <string name=\"search\">Bilatu</string>\n    <string name=\"channel_name_lock_status\">Blokeo egoera</string>\n    <string name=\"channel_description_lock_status\">Aegisek jakinarazpen iraunkorra ezar dezake biltegia blokeatuta dagoenean jakinarazteko</string>\n    <string name=\"vault_unlocked_state\">Biltegia desblokeatuta dago. Ukitu hemen blokeatzeko.</string>\n    <string name=\"version\">Bertsioa</string>\n    <string name=\"changelog\">Aldaketen erregistroa</string>\n    <string name=\"whats_new\">Zer berri</string>\n    <string name=\"github_description\">Iturburu-kodea, arazoak eta informazioa</string>\n    <string name=\"license\">Lizentzia</string>\n    <string name=\"license_description\">Aegis Autenticator GPLv3 lizentziapean banatzen da</string>\n    <string name=\"third_party_licenses\">Hirugarrenen lizentziak</string>\n    <string name=\"third_party_licenses_description\">Aegisek erabiltzen dituen hirugarrenen lizentziak</string>\n    <string name=\"country_netherlands\">Herbehereak</string>\n    <string name=\"email_us\">Idatzi eposta bat</string>\n    <string name=\"visit_website\">Ikusi gure webgunea</string>\n    <string name=\"about_support\">Laguntza</string>\n    <string name=\"support_rate\">Baloratu</string>\n    <string name=\"support_rate_description\">Lagundu gaitzazu Google Play Store-n balorazio bat eginez</string>\n    <string name=\"webview_error\">Gailu honetan ez dabil web view, eta beharrezkoa da aldaketen erregistroa eta lizentzia ikusteko. Sistemaren osagai bat da eta ez dago instalatuta.</string>\n    <string name=\"email\">Eposta</string>\n    <string name=\"time_sync_warning_title\">Denboraren sinkronizazio automatikoa</string>\n    <string name=\"time_sync_warning_message\">Aegis-ek konfiantza du sistemaren denboran, kode zuzenak sortzeko sinkronizatuta egoteko. Segundo batzuetako desbideratzea kode okerrak eragin ditzake. Badirudi zure gailua ez dagoela denbora automatikoki sinkronizatzeko konfiguratuta. Orain egitea gustatuko litzaizuke?</string>\n    <string name=\"time_sync_warning_disable\">Utzi aholkuak emateari. Badakit zer egiten ari naizen.</string>\n    <string name=\"google_qr_export_unrelated\">Erlazionatu gabeko QR kodea aurkitu da. Saiatu eskanerra berrabiarazten.</string>\n    <plurals name=\"google_qr_export_scanned\">\n        <item quantity=\"one\">%1$d/%2$d QR kode eskaneatuta</item>\n        <item quantity=\"other\">%1$d/%2$d QR kode eskaneatuta</item>\n    </plurals>\n    <string name=\"google_qr_export_unexpected\">#%1$d QR kodea espero zen baina #%2$d eskaneatu da</string>\n    <string name=\"backup_error_bar_message\"><b>Biltegiaren segurtasun-kopiak akatsa eman du berriki</b></string>\n    <string name=\"backup_error_dialog_details\" comment=\"The first parameter is the type of backup (e.g. built-in or Android backup). The second parameter is an elapsed time in the style of 'x seconds/minutes/days ago'.\">%1$s erabiliz egindako biltegiaren segurtasun kopiak huts egin du. Saiakera noiz egin den: %2$s. Ziurtatu segurtasun kopien ezarpenak ondo daudela hauek ondo egin daitezen.    </string>\n    <string name=\"backup_permission_error_dialog_details\" comment=\"The first parameter is the type of backup (e.g. built-in or Android backup). The second parameter is an elapsed time in the style of 'x seconds/minutes/days ago'.\">%1$s erabiliz egin den segurtasun-kopia baten saiakerak huts egin du Aegisek ez baitu baimenik helburuan ezer idazteko. Segurtasun kopiaren saiakera %2$s izan da. Errore hau kopia mugitu/berrizendatu egin duzulako izan daiteke edo Aegis segurtasun-kopia batetik berrezarri duzulako. Konfiguratu berriz zure kopien helburu karpeta.    </string>\n    <string name=\"backup_system_builtin\">Aegisek egindako segurtasun kopia automatikoak</string>\n    <string name=\"backup_system_android\">Androidek lainoan egidako segurtasun kopiak</string>\n    <string name=\"backup_reminder_bar_message_with_latest\" comment=\"The parameter is an elapsed time in the style of 'x seconds/minutes/days ago'\">Azken segurtasun kopia zaharregia da (%s)\n    </string>\n    <string name=\"backup_reminder_bar_message\">Aldaketen segurtasun kopiak ez dira egiten    </string>\n    <string name=\"backup_reminder_bar_dialog_title\">Aldaketen segurtasun kopia ez da egin</string>\n    <string name=\"backup_reminder_bar_dialog_summary\">Biltegian egindako azken aldaketen segurtasun kopiarik ez dago. Garrantzitsua da noizean behin kopia horiek egitea zure kontuetarako sarbidea ez galtzeko. Aztertu segurtasun kopia automatikoak konfiguratzea.\n    </string>\n    <string name=\"backup_reminder_bar_dialog_accept\">Konfiguratu segurtasun kopiak</string>\n    <string name=\"backup_plaintext_export_warning\"><b>Biltegia orain dela gutxi testu-huts gisa esportatu da</b></string>\n    <string name=\"pref_show_plaintext_warning_hint\">Ez erakutsi ohar hau berriz</string>\n    <string name=\"backup_plaintext_warning_explanation\">Ohar hau, orain dela gutxi zifratu gabeko biltegiaren kopia bat esportatu delako agertzen da. Zure gakoen segurtasuna mantentzeko, fitxategi hori berehala ezabatzeko aholkua ematen dizugu.</string>\n    <string name=\"switch_camera\">Aldatu kamera</string>\n    <string name=\"empty_list\">Ez dago erakutsi beharreko sarrerarik. Sarrerak gehitzen hasteko, ukitu beheko eskuineko izkinako plus ikurra</string>\n    <string name=\"empty_list_title\">Ez da sarrerarik aurkitu</string>\n    <string name=\"empty_group_list\">Ez dago erakutsi beharreko talderik. Gehitu taldeak sarrerak editatzeko pantailan</string>\n    <string name=\"empty_group_list_title\">Ez da talderik aurkitu</string>\n    <string name=\"no_icon_packs\">Ez duzu ikono multzorik inportatu. Sakatu + ikurra bat inportatzeko. Aholkua: probatu <a href=\"https://aegis-icons.github.io\">aegis-icons</a>.</string>\n    <string name=\"no_icon_packs_title\">Ez dago ikono multzorik</string>\n    <string name=\"pick_icon\">Aukeratu ikono bat</string>\n    <string name=\"uncategorized\">Kategoriarik gabe</string>\n    <string name=\"done\">Eginda</string>\n    <plurals name=\"qr_count\">\n        <item quantity=\"one\">%d / %d QR kode</item>\n        <item quantity=\"other\">%d / %d QR kode</item>\n    </plurals>\n    <string name=\"next\">Hurrengoa</string>\n    <string name=\"previous\">Aurrekoa</string>\n    <string name=\"copy_uri\">Kopiatu URIa</string>\n    <string name=\"unable_to_copy_uri_to_clipboard\">Ezin da URIa arbelean kopiatu</string>\n    <string name=\"uri_copied_to_clipboard\">URIa arbelean kopiatu da</string>\n    <string name=\"transfer_entry_description\">Eskaneatu QR kode hau sarrera transferitu nahi diozun aitentifikazio-aplikazioarekin</string>\n    <string name=\"transfer_entry_brightness\">Sakatu QR kodea pantaila osoan ikusteko</string>\n    <string name=\"google_auth_compatible_transfer_description\">Eskaneatu QR kode hauek Aegis edo Google Authenticator erabiliz.\\n\\nGoogle Authenticator aplikazioaren mugak direla eta, SHA1 darabilten eta 6 zenbakiko kodeak erabiltzen dituzten TOTP &amp; HOTP tokenak bakarrik sartzen dira</string>\n    <string name=\"password_strength_very_weak\">Oso ahula</string>\n    <string name=\"password_strength_weak\">Ahula</string>\n    <string name=\"password_strength_fair\">Ertaina</string>\n    <string name=\"password_strength_good\">Ona</string>\n    <string name=\"password_strength_strong\">Sendoa</string>\n    <string name=\"password_strength_unknown\">Pasahitza luzeegia da sendotasuna analisia egiteko</string>\n    <string name=\"pref_pin_keyboard_title\">Erabili PIN teklatua blokeo pantailan</string>\n    <string name=\"pref_pin_keyboard_summary\">Gaitu hau, blokeatzeko pantailan PIN teklatua gaitu nahi baduzu. Honek zenbaki-pasahitzetarako bakarrik balio du</string>\n    <string name=\"title_activity_preferences\">Ezarpenak</string>\n    <string name=\"title_activity_manage_groups\">Kudeatu taldeak</string>\n    <string name=\"title_activity_transfer\">Transferitu sarrerak</string>\n    <string name=\"title_activity_about\">Honi buruz</string>\n    <string name=\"title_activity_edit_entry\">Editatu sarrera</string>\n    <string name=\"title_activity_scan_qr\">Eskaneatu QR kodea</string>\n    <string name=\"title_activity_import_entries\">Inportatu sarrerak</string>\n    <string name=\"title_activity_assign_icons\">Esleitu ikonoak</string>\n    <string name=\"title_activity_licenses\">Hirugarrenen lizentziak</string>\n    <string name=\"dialog_wipe_entries_title\">Garbitu sarrerak</string>\n    <string name=\"dialog_wipe_entries_message\">Zure biltegiak sarrerak ditu dagoeneko. Sarrera horiek ezabatu nahi dituzu fitxategi hau inportatu aurretik?\\n\\n<b>Hori egitean, biltegiko sarreretarako sarbidea galduko da betirako.</b></string>\n    <string name=\"dialog_wipe_entries_checkbox\">Garbitu biltegiaren sarrerak</string>\n    <string name=\"panic_trigger_ignore_toast\">Aegisek arrisku mezua jaso du baina ezarpen hau desaktibatuta dago, ez da ezer egingo</string>\n    <string name=\"pref_panic_trigger_title\">Ezabatu biltegia arrisku mezua jasotzean</string>\n    <string name=\"pref_panic_trigger_summary\">Ezabatu biltegia Rippletik arrisku mezua jasotzean</string>\n    <string name=\"import_vault\">Inportatu Aegis biltegia</string>\n    <string name=\"import_vault_hint\">Beste 2FA aplikazio batetik inportatu nahi duzu? Amaitu konfigurazioa lehenengo eta joan ondoren ezarpenetara.</string>\n    <plurals name=\"import_duplicate_toast\">\n        <item quantity=\"one\">Bikoiztutako sarrera posible %d. Errebisatu zerrenda mesedez.</item>\n        <item quantity=\"other\">Bikoiztutako %d sarrera posible. Errebisatu zerrenda mesedez.</item>\n    </plurals>\n    <string name=\"importer_help_2fas\">Aukeratu 2FAS Authenticator segurtasun-kopia fitxategia.</string>\n    <string name=\"importer_help_aegis\">Aegisen esportazio/segurtasun-kopia fitxategia aukeratu.</string>\n    <string name=\"importer_help_authenticator_plus\">Authenticator Plus esportazio fitxategia aukeratu. Lortzeko modua: <b>Settings -&gt; Backup &amp; Restore -&gt; Export as Text and HTML</b>.</string>\n    <string name=\"importer_help_authy\"><b>/data/data/com.authy.authy/shared_prefs/com.authy.storage.tokens.authenticator.xml</b> fitxategia aukeratu.</string>\n    <string name=\"importer_help_andotp\">andOTPren esportazio/segurtasun-kopia fitxategia aukeratu.</string>\n    <string name=\"importer_help_bitwarden\">Kargatu Bitwardenen esportazio/segurtasun-kopia fitxategi bat. Ezin dituzu zifratutako fitxategiak kargatu.</string>\n    <string name=\"importer_help_battle_net_authenticator\">Battle.net Authenticatoren <b>/data/data/com.blizzard.messenger/shared_prefs/com.blizzard.messenger.authenticator_preferences.xml</b> fitxategia aukeratu.</string>\n    <string name=\"importer_help_duo\">Aukeratu <b>/data/data/com.duosecurity.duomobile/files/duokit/accounts.json</b> fitxategia, DUOren karpeten barruan dagoena.</string>\n    <string name=\"importer_help_ente_auth\">Kargatu Ente Auth esportazio fitxategia. Momentuz zifratu gabeko fitxategiak bakarrik kargatu daitezke.</string>\n    <string name=\"importer_help_freeotp\">FreeOTP 2: Kargatu segurtasun-kopiaren fitxategia. \\nFreeOTP 1.x: kargatu FreeOTPren barne-biltegiratzeko karpetan dagoen <b>/data/data/org.fedorahosted.freeotp/shared_prefs/tokens.xml</b> fitxategia.</string>\n    <string name=\"importer_help_freeotp_plus\">FreeOTP+en esportazio fitxategia aukeratu.</string>\n    <string name=\"importer_warning_title_freeotp2\">FreeOTP 2rekin bateragarritasuna</string>\n    <string name=\"importer_warning_message_freeotp2\">Hainbat arazo daude FreeOTP 2rekin eta segurtasun-kopia okerrak eragin ditzagete. Aegis ahalik eta elementu gehien berreskuratzen saiatuko da baina horietako batzuk edo agian guztiek huts egitea gerta daiteke.</string>\n    <string name=\"importer_help_google_authenticator\">&lt;b&gt;Google Authenticator aplikazioaren v5.10 bertsioa edo lehenagokoak diren datu-baseak erabili daitezke. \\n\\n&lt;b&gt;data/data/com.google.android.apps.authenticator2/databases/databases&lt;/b&gt; fitxategiaren kopia bat eman, berau Google Authenticator aplikazioaren barne biltegiratzean dago.</string>\n    <string name=\"importer_help_microsoft_authenticator\">Microsoft Authenticatoren <b>/data/data/com.azure.authenticator/databases/PhoneFactor</b> fitxategia aukeratu.</string>\n    <string name=\"importer_help_plain_text\">Google Authenticator URIak dituen testu hutseko fitxategia aukeratu.</string>\n    <string name=\"importer_help_steam\"><b>Steam v3.0 eta berriagoak ezin dira erabili.</b>erabili\n<b>/data/data/com.valvesoftware.android.steam.community/files/Steamguard-*.json</b> fitxategiaren kopia, berau Steamen barne biltegiratzearen karpetan egongo da.</string>\n    <string name=\"importer_help_stratum\">Aukeratu Stratumen esportazio fitxategia <b>Settings -&gt; Back up -&gt; Back up to encrypted file (recommended)</b> aukeratik lortu bezala.</string>\n    <string name=\"importer_help_totp_authenticator\">TOTP Authenticatoren esportazio fitxategia aukeratu.</string>\n    <string name=\"importer_help_winauth\">WinAuthen esportazio fitxategia aukeratu.</string>\n    <string name=\"import_assign_icons_dialog_title\">Esleitu ikonoak</string>\n    <string name=\"import_assign_icons_dialog_text\">Inportatutako sarrerei ikonoak esleitu nahi dizkiezu?</string>\n    <string name=\"importer_encrypted_exception_google_authenticator\">Zifratutako sarrera ez da kontuan hartu: %s</string>\n    <string name=\"importer_help_direct\">Sarrerak %s-etik inportatu. Honek funtzionatzeko aplikazioa gailu honetan instalatuta egon behar da eta Aegisi root baimena eman beharko diozu.</string>\n    <string name=\"groups\">Taldeak</string>\n    <string name=\"pref_focus_search\">Bilaketara joan aplikazioa hastean</string>\n    <string name=\"pref_focus_search_summary\">Aplikazioa irekitzean bilaketa leihora joan.</string>\n    <string name=\"pref_grouping_halves\">Erdiak</string>\n    <string name=\"pref_grouping_none\">Talderik ez</string>\n    <string name=\"pref_grouping_size_two\">2ko taldeak</string>\n    <string name=\"pref_grouping_size_three\">3ko taldeak</string>\n    <string name=\"pref_grouping_size_four\">4ko taldeak</string>\n    <string name=\"pref_copy_behavior_never\">Inoiz ez</string>\n    <string name=\"pref_copy_behavior_single_tap\">Ukitu bat</string>\n    <string name=\"pref_copy_behavior_double_tap\">Bi ikutu</string>\n    <string name=\"pref_account_name_position_hidden\">Ezkutua</string>\n    <string name=\"pref_account_name_position_end\">Jaulkitzailearen ostean</string>\n    <string name=\"pref_account_name_position_below\">Jaulkitzailearen azpian</string>\n    <plurals name=\"time_elapsed_seconds\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"one\">Duela segundo %d</item>\n        <item quantity=\"other\">Duela %d segundo</item>\n    </plurals>\n    <plurals name=\"time_elapsed_minutes\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"one\">Duela minutu %d</item>\n        <item quantity=\"other\">Duela %d minutu</item>\n    </plurals>\n    <plurals name=\"time_elapsed_hours\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"one\">Duela ordu %d</item>\n        <item quantity=\"other\">Duela %d ordu</item>\n    </plurals>\n    <plurals name=\"time_elapsed_days\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"one\">Duela egun %d</item>\n        <item quantity=\"other\">Duela %d egun</item>\n    </plurals>\n    <plurals name=\"time_elapsed_years\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"one\">Duela urte %d</item>\n        <item quantity=\"other\">Duela %d urte</item>\n    </plurals>\n    <plurals name=\"dropdown_checkboxes_default_count\">\n        <item quantity=\"one\">Elementu %d aukeratuta</item>\n        <item quantity=\"other\">%d elementu aukeratuta</item>\n    </plurals>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-eu-rES-v29/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"system_theme_title\">Sistemaren defektuzkoa</string>\n    <string name=\"system_amoled_theme_title\">Sistemaren defektuzkoa (AMOLED)</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-fa-rIR/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources xmlns:tools=\"http://schemas.android.com/tools\">\n    <string name=\"action_settings\">تنظیمات</string>\n    <string name=\"action_about\">درباره‌</string>\n    <string name=\"action_delete\">حذف</string>\n    <string name=\"action_transfer\">انتقال</string>\n    <string name=\"action_edit_icon\">ویرایش ایکون</string>\n    <string name=\"action_reset_usage_count\">بازنشانی تعداد استفاده</string>\n    <string name=\"action_reset_usage_count_dialog\">آیا مطمئن هستید که می خواهید تعداد استفادهٔ این ورودی را روی صفر قرار دهید؟</string>\n    <string name=\"action_default_icon\">بازگرداندن آیکون پیش فرض</string>\n    <string name=\"discard\">لغو</string>\n    <string name=\"save\">ذخیره</string>\n    <string name=\"issuer\">صادر کننده</string>\n    <string name=\"yandex_pin\">پین (۴ تا ١۶ رقم)</string>\n    <string name=\"suggested\">پیشنهادی</string>\n    <string name=\"usage_count\">تعداد دفعات استفاده</string>\n    <string name=\"warning\">اخطار</string>\n    <string name=\"pref_cat_appearance_app\">نرم افزار</string>\n    <string name=\"pref_cat_appearance_entries\">مطالب</string>\n    <string name=\"pref_cat_backups_android\">اندروید</string>\n    <string name=\"pref_cat_backups_auto\">پشتیبان های خودکار</string>\n    <string name=\"pref_section_behavior_title\">رفتار</string>\n    <string name=\"pref_section_behavior_summary\">شخصی سازی رفتار هنگام تعامل با لیست مطالب.</string>\n    <string name=\"pref_section_appearance_title\">ظاهر</string>\n    <string name=\"pref_section_appearance_summary\">انتخاب زمینه, زبان و تنظیمات دیگری که در ظاهر برنامه تاثیر دارند.</string>\n    <string name=\"pref_section_security_title\">امنیت</string>\n    <string name=\"pref_section_security_summary\">تنظیم رمزنگاری, بازکردن با اثر انگشت, قفل خودکار و تنظیمات امنیتی دیگر.</string>\n    <string name=\"pref_section_import_export_title\">واردسازی &amp; خارج‌سازی</string>\n    <string name=\"pref_section_import_export_summary\">وارد سازی فایل های پشتیبان آگیس یا دیگر برنامه های احراز هویت. ساخت فایل های صدور دستی از مخزن آگیس.</string>\n    <string name=\"pref_section_backups_title\">نسخه های پشتیبان</string>\n    <string name=\"pref_section_backups_summary\">پشتیبان‌گیری خودکار را در مکانی دلخواه تنظیم نمایید یا مشارکت در سیستم پشتیبان‌گیری ابری Android را راه‌اندازی نمایید.</string>\n    <string name=\"pref_section_icon_packs\">بسته‌های آیکون</string>\n    <string name=\"pref_section_icon_packs_summary\">بسته‌های آیکون را مدیریت و واردات کنید</string>\n    <string name=\"pref_select_theme_title\">پوسته</string>\n    <string name=\"pref_view_mode_title\">حالت نمایش</string>\n    <string name=\"pref_lang_title\">زبان</string>\n    <string name=\"pref_show_icons_title\">نمایش آیکون ها</string>\n    <string name=\"pref_code_group_size_title\">حالت نمایش کد</string>\n    <string name=\"pref_account_name_position_title\">نمایش نام حساب کاربری</string>\n    <string name=\"pref_shared_issuer_account_name_title\">نمایش نام اکانت فقط در مواقع لازم</string>\n    <string name=\"pref_import_file_title\">وارد کردن از فایل</string>\n    <string name=\"pref_import_file_summary\">وارد کردن توکن ها از فایل</string>\n    <string name=\"pref_android_backups_title\">پشتیبان‌گیری ابری Android</string>\n    <string name=\"pref_android_backups_summary\">به سیستم پشتیبان‌گیری ابری Android اجازه دهید تا خزانهٔ Aegis را در فایل‌های پشتیبان خود شامل کند. این کنش تنها برای خزانه‌های رمزنگاری شده پشتیبانی می‌شود.</string>\n    <string name=\"pref_android_backups_hint\"><i>پشتیبان‌گیریِ دستگاه به دستگاه (D2D) بدون در نظر گرفتن تنظیمات بالا، همواره مجاز است</i></string>\n    <string name=\"pref_backups_title\">بصورت خودکار از مخزن پشتیبانگیری شود</string>\n    <string name=\"pref_backups_summary\">به صورت خودکار از مخزن ها در کارت حافظه پیشتیبان گیری شود. این ویژگی فقط مخصوص مخزن های رمزگذاری شده است.</string>\n    <string name=\"pref_backups_reminder_title\">یادآوری پشتیبان‌گیری</string>\n    <string name=\"pref_backups_reminder_summary\">نمایش یادآوری برای پشتیبان گیری از داده ها در صورتی که شما تغییرات اخیرتان را پشتیبان گیری نکرده اید.</string>\n    <string name=\"pref_backups_reminder_dialog_title\">غیر فعال کردن یادآوری پشتیبان گیری</string>\n    <string name=\"pref_backups_versioning_strategy_title\">روش پشتیبان‌گیری</string>\n    <string name=\"pref_backups_versioning_strategy_keep_x_versions\">نگه داشتن تعدادی نسخه پشتیبان</string>\n    <string name=\"pref_backups_versioning_strategy_single_backup\">یک نسخه پشتیبان</string>\n    <string name=\"pref_backups_versioning_strategy_dialog_title\">یک روش پشتیبان‌گیری انتخاب کنید</string>\n    <string name=\"pref_backups_location_title\">مکان ذخیره پشتیبان</string>\n    <string name=\"pref_backups_location_summary\">فایل‌ها پشتیبان گیری در این آدرس ذخیره می‌شوند</string>\n    <string name=\"pref_backup_location_summary\">فایل های پشتیبان گیری در این مکان ذخیره می‌شوند</string>\n    <string name=\"pref_backups_trigger_title\">پشتیبان‌گیری</string>\n    <string name=\"pref_backups_trigger_summary\">گرفتن پیشتیبان به صورت دستی</string>\n    <string name=\"pref_backups_versions_title\">تعداد نسخه‌هایی که مایلید نگه‌دارید</string>\n    <plurals name=\"pref_backups_versions_summary\">\n        <item quantity=\"one\">نگه داشتن %1$d نسخه از فایل پشتیبان‌گیری</item>\n        <item quantity=\"other\">نگه داشتن %1$d نسخه از فایل پشتیبان‌گیری</item>\n    </plurals>\n    <string name=\"pref_backups_versions_infinite_summary\">بی‌نهایت نسخه پشتیبان ذخیره شود</string>\n    <string name=\"pref_import_app_title\">وارد کردن از برنامه</string>\n    <string name=\"pref_import_app_summary\">وارد کردن توکن‌ها از برنامه (نیاز به دسترسی روت)</string>\n    <string name=\"pref_export_title\">صادر کردن</string>\n    <string name=\"pref_export_summary\">صادر کردن مخزن</string>\n    <string name=\"pref_password_reminder_title\">یادآوری کلمه عبور</string>\n    <string name=\"pref_google_auth_export_title\">استخراج داده ها برای Google Authenticator</string>\n    <string name=\"pref_password_reminder_summary\">یک یادآوری %s هنگام وارد کردن گذرواژه نمایش دهید، تا آن را فراموش نکنید.</string>\n    <string name=\"pref_password_reminder_summary_disabled\">غیرفعال</string>\n    <string name=\"pref_secure_screen_title\">امنیت صفحه</string>\n    <string name=\"pref_secure_screen_summary\">عدم امکان گرفتن اسکرین شات در برنامه</string>\n    <string name=\"pref_tap_to_reveal_title\">نمایش هنگام لمس</string>\n    <string name=\"pref_tap_to_reveal_summary\">توکن ها به صورت پیش فرض پنهان هستند. برای نمایش آنها را لمس کنید.</string>\n    <string name=\"pref_tap_to_reveal_time_title\">مخفی شدن توکن بعد از چند ثانیه</string>\n    <string name=\"pref_auto_lock_title\">قفل کن خودکار</string>\n    <string name=\"pref_auto_lock_summary\">چه زمانی %s</string>\n    <string name=\"pref_auto_lock_summary_disabled\">غیرفعال</string>\n    <string name=\"pref_auto_lock_prompt\">قفل کردن برنامه هنگام</string>\n    <string name=\"pref_auto_lock_type_back_button\">دکمه بازگشت لمس شد</string>\n    <string name=\"pref_auto_lock_type_minimize\">برنامه به حالت مخفی (Minimize) رفت</string>\n    <string name=\"pref_auto_lock_type_device_lock\">دستگاه قفل شد</string>\n    <string name=\"pref_encryption_title\">رمزگذاری</string>\n    <string name=\"pref_encryption_summary\">مخزن را رمزگذاری کن و فقط توسط کلمه عبور یا بیومتریک رمزگشایی کن</string>\n    <string name=\"pref_biometrics_title\">بازگشایی بیومتریک</string>\n    <string name=\"pref_biometrics_summary\">بازگشایی مخزن توسط احراز هویت بیومتیک مجاز است</string>\n    <string name=\"pref_set_password_title\">تغییر کلمه عبور</string>\n    <string name=\"pref_set_password_summary\">یک کلمه عبور جدید برای بازگشایی مخزن وارد کنید</string>\n    <string name=\"export_encrypted\">رمزگذاری مخزن</string>\n    <string name=\"export_help\">این عملیات مخرن را از حافظه داخلی آگیس صادر میکند. فرمت مورد نظر فایل خروجی را انتخاب کنید:</string>\n    <string name=\"export_warning_unencrypted\">شما در حال صادر کردن یک کپی محافظت نشده از مخزن آگیس هستید. <b>این روش توصیه نمیشود</b>.</string>\n    <string name=\"export_format_aegis\">فایل جیسون (.json)</string>\n    <string name=\"export_format_google_auth_uri\">فایل متنی (.txt)</string>\n    <string name=\"export_format_hint\">فرمت خروجی</string>\n    <string name=\"choose_authentication_method\">امنیت</string>\n    <string name=\"authentication_method_explanation\">Aegis یک برنامه ورود دو مرحله ای با تمرکز روی امنیت می‌باشد. توکن ها در یک مخزن می‌باشد که شما می‌توانید آن را با کلمه عبور رمزگذاری کنید. اگر هکر ها به فایل شما دسترسی پیدا کنند، بدون دانستن کلمه عبور نمی‌توانند از محتویات آن اطلاع یابند.\\n\\nما به صورت پیش فرض گزینه ای انتخاب کرده ایم که فکر می‌کنیم بهتری برای دستگاه شما می‌باشد.</string>\n    <string name=\"authentication_method_none\">هیچ کدام</string>\n    <string name=\"authentication_method_none_description\">عدم رمزگذاری مخزن<b>این روش پیشنهاد نمی‌شود</b>.</string>\n    <string name=\"authentication_method_password\">کلمه عبور</string>\n    <string name=\"authentication_method_password_description\">کلمه عبور برای بازگشایی مخزن لازم است.</string>\n    <string name=\"authentication_method_password_explanation\">هشدار: پس از فراموشی کلمه عبور هیچ راهی برای بازگرداندن توکن ها نیست.</string>\n    <string name=\"authentication_method_biometrics\">بیومتریک</string>\n    <string name=\"authentication_method_biometrics_description\">علاوه بر کلمه عبور، یک روش احراز هویت بیومتریک مانند اثر انگشت یا تشخیص چهره تعریف شده است که میتوان برای بازگشایی مخزن استفاده کرد.</string>\n    <string name=\"authentication\">بازکردن مخزن</string>\n    <string name=\"authentication_multiline\" comment=\"The newline in the middle is used for aesthetic purposes\">باز کردن\\nمخزن</string>\n    <string name=\"auth_use_biometrics\">یا برای استفاده از &lt;font fgcolor=\\'#FF0D86C1\\'&gt;بیومتریک&lt;/font&gt; لمس کنید</string>\n    <string name=\"set_password\">لطفا کلمه عبور را وارد کنید</string>\n    <string name=\"set_group\">لطفا نام گروه را وارد کنید</string>\n    <string name=\"set_number\">لطفا یک شماره وارد کنید</string>\n    <string name=\"set_password_confirm\">لطفا کلمه عبور را تکرار کنید</string>\n    <string name=\"invalid_password\">کلمه عبور صحیح نیست</string>\n    <string name=\"password_reminder_freq_never\">هرگز</string>\n    <string name=\"password_reminder_freq_weekly\">هفتگی</string>\n    <string name=\"password_reminder_freq_biweekly\">دو هفته يکبار</string>\n    <string name=\"password_reminder_freq_monthly\">ماهانه</string>\n    <string name=\"password_reminder_freq_quarterly\">هر سه ماه یکبار</string>\n    <string name=\"enter_password_2fas_message\">به‌نظر می‌رسد این نسخهٔ پشتیبان 2FAS رمزگذاری شده‌است. لطفاً گذرواژه خود را در زیر وارد نمایید.</string>\n    <string name=\"enter_password_authy_message\">به نظر میرسد توکن های Authy توسط کلمه عبور رمزگذاری شده است. برانمه Aegis را ببندید و در برنامه Authy توکن ها را با پسورد رمزگشایی کنید. همچنین می‌توانید با وارد کردن کلمه عبور در قسمت زیر این کار را انجام دهید.</string>\n    <string name=\"enter_password_aegis_title\">لطفاً گذرواژهٔ واردات را یادداشت نمایید</string>\n    <string name=\"period_hint\">زمان (ثانیه)</string>\n    <string name=\"algorithm_hint\">عملکرد Hash</string>\n    <string name=\"type\">نوع</string>\n    <string name=\"share\">اشتراک گذاری</string>\n    <string name=\"yes\">بله</string>\n    <string name=\"no\">خیر</string>\n    <string name=\"unlock\">بازکردن</string>\n    <string name=\"advanced\">پیشرفته</string>\n    <string name=\"counter\">شمارنده</string>\n    <string name=\"digits\">ارقام</string>\n    <string name=\"secret\">رمز</string>\n    <string name=\"scan\">اسکن بارکد دوبعدی</string>\n    <string name=\"scan_image\">اسکن تصویر</string>\n    <string name=\"enter_manually\">وارد کردن دستی</string>\n    <string name=\"set_up_biometric\">تعریف رمزگذاری بیومتریک</string>\n    <string name=\"copy\">کپی</string>\n    <string name=\"edit\">ویرایش</string>\n    <string name=\"password\">کلمه عبور</string>\n    <string name=\"confirm_password\">تایید کلمه عبور</string>\n    <string name=\"show_password\">نمایش کلمه عبور</string>\n    <string name=\"new_entry\">آیتم جدید</string>\n    <string name=\"add_new_entry\">افزودن آیتم جدید</string>\n    <string name=\"unlock_vault_error\">امکان بازگشایی نیست</string>\n    <string name=\"unlock_vault_error_description\">کلمه عبور نادرست است. لطفا از درست بودن آن مطمئن شوید.</string>\n    <string name=\"password_equality_error\">کلمه عبور و تکرار آن باید یکسان و غیر خالی باشند</string>\n    <string name=\"snackbar_authentication_method\">لطفا یک روش احراز هویت انتخاب کنید</string>\n    <string name=\"encrypting_vault\">رمزگذاری مخزن</string>\n    <string name=\"exporting_vault\">صادر کردن مخزن</string>\n    <string name=\"reading_file\">در حال خواندن فایل</string>\n    <string name=\"importing_icon_pack\">در حال وارد کردن بستهٔ نماد</string>\n    <string name=\"delete_entry\">حذف آیتم</string>\n    <string name=\"delete_entry_description\">آیا مطمئن به حذف این آیتم هستید؟</string>\n    <string name=\"delete_entries\">حذف موارد</string>\n    <plurals name=\"delete_entries_description\">\n        <item quantity=\"one\">آیا مطمئن به حذف %d آیتم هستید؟</item>\n        <item quantity=\"other\">آیا مطمئن به حذف %d آیتم هستید؟</item>\n    </plurals>\n    <string name=\"discard_changes\">لغو تغییرات؟</string>\n    <string name=\"discard_changes_description\">تغییرات اعمال شده ذخیره نشد</string>\n    <string name=\"saving_profile_error\">خطا در ذخیره حساب کاربری</string>\n    <string name=\"welcome\">خوش آمدید</string>\n    <string name=\"app_description\">Aegis یک نرم افزار امن، رایگان و متن باز برای ورود دو مرحله ای می‌باشد</string>\n    <string name=\"setup_completed\">آماده سازی تکمیل شد</string>\n    <string name=\"setup_completed_description\">آماده سازی تکمیل و برنامه آماده استفاده می‌باشد!</string>\n    <string name=\"vault_not_found\">مخزن یافت نشد. در حال ساخت…</string>\n    <string name=\"copied\">کپی شد</string>\n    <string name=\"errors_copied\">خطا ها در کلیپ بورد ذخیره شد</string>\n    <string name=\"version_copied\">نسخه در کلیپ بورد ذخیره شد</string>\n    <string name=\"error_occurred\">خطایی رخ داد</string>\n    <string name=\"decryption_error\">هنگام باز کردن مخزن خطایی رخ داد</string>\n    <string name=\"decryption_corrupt_error\">هنگام باز کردن مخزن خطایی رخ داد. ممکن است مخزن شما خراب شده باشد.</string>\n    <string name=\"saving_error\">هنگام ذخیره کردن مخزن خطایی رخ داد</string>\n    <string name=\"vault_init_error\">در هنگام ایجاد مخزن خطایی رخ داد</string>\n    <string name=\"vault_load_error\">هنگام بارگذاری مخزن از هارد خطایی رخ داد</string>\n    <string name=\"biometric_decrypt_error\">هنگاه رمزگشایی مخزن با احراز هویت بیومتریک خطایی رخ داد. این اتفاق هنگامی می‌افتد که تنظیمات احراز هویت بیومتریک دستگاه شما تغییر کرده باشد. لطفا مخزن را با کلمه عبور رمزگشایی کرده و تنظیمات بیومتریک را در تنظیمات برنامه مجدد تنظیم کنید.</string>\n    <string name=\"biometric_init_error\">هنگاه آمارده سازی احراز هویت بیومتریک خطایی رخ داد. این اتفاق هنگامی می‌افتد که تنظیمات احراز هویت بیومتریک دستگاه شما تغییر کرده باشد. لطفا مخزن را با کلمه عبور رمزگشایی کرده و تنظیمات بیومتریک را در تنظیمات برنامه مجدد تنظیم کنید.</string>\n    <string name=\"disable_encryption\">غیرفعال کردن رمزنگاری</string>\n    <string name=\"disable_encryption_description\">آیا مطمئن هستید که میخواهید رمزنگاری را غیر فعال کنید این اقدام باعث میشود مخزن به صورت متن ساده ذخیره شود <b> پشتیبان گیری خودکار نیز غیر فعال خواهد شد</b>.</string>\n    <string name=\"enable_encryption_error\">هنگام فعال سازی رمزگذاری خطایی رخ داد</string>\n    <string name=\"disable_encryption_error\">هنگام غیر فعال سازی رمزگذاری خطایی رخ داد</string>\n    <string name=\"backup_successful\">فایل پشتیبان‌گیری با موفقیت ساخته شد</string>\n    <string name=\"backup_error\">هنگام ساخت فایل پشتیبان‌گیری خطایی رخ داد</string>\n    <string name=\"documentsui_error\">DocumentsUI به نظر میرسد در دستگاه شما وجود ندارد این یک جز ضروری برای انتخاب و طراحی اسناد می باشد. اگر شما از یک ابزار برای &quot;حذف نرم افزار های غیر ضروری&quot; از دستگاه خود استفاده کرده اید ممکن است بطور تصادفی حذف شده باشد و نیازمند نصب دوباره است.</string>\n    <string name=\"permission_denied\">حق دسترسی موجود نیست</string>\n    <string name=\"andotp_new_format\">فرمت جدید (نسخه ۰.۶.۳ و جدیدتر) </string>\n    <string name=\"andotp_old_format\">فرمت قدیم (نسخه ۰.۶.۲ و قدیم‌تر) </string>\n    <string name=\"choose_andotp_importer\">فرمت فایل پشتیبانی andOTP کدام است؟</string>\n    <string name=\"choose_totpauth_importer\">آیا این فایل TOTP با پسورد رمزگذاری شده است؟</string>\n    <string name=\"choose_application\">برنامه ای که میخواهید از آن وارد کنید را انتخاب کنید</string>\n    <string name=\"choose_theme\">نمایه مورد نظر خود را انتخاب کنید</string>\n    <string name=\"choose_view_mode\">حالت نمایش مورد نظر خود را انتخاب کنید</string>\n    <string name=\"parsing_file_error\">هنگام پایش فایل خطایی رخ داد</string>\n    <string name=\"file_not_found\">خطا: فایل پیدا نشد!</string>\n    <string name=\"reading_file_error\">هنگام خواندن فایل خطایی رخ داد</string>\n    <string name=\"app_lookup_error\">خطا: برنامه نصب نشده است</string>\n    <plurals name=\"imported_entries_count\">\n        <item quantity=\"one\">%d آیتم وارد شد</item>\n        <item quantity=\"other\">%d آیتم وارد شد</item>\n    </plurals>\n    <string name=\"import_error_title\">در هنگام وارد کردن مخزن خطایی رخ داد</string>\n    <string name=\"exporting_vault_error\">در هنگام صادر کردن مخزن خطایی رخ داد</string>\n    <string name=\"exported_vault\">مخزن صادر شد</string>\n    <string name=\"encryption_set_password_error\">هنگام تعیین کلمه عبور خطایی رخ داد.</string>\n    <string name=\"encryption_enable_biometrics_error\">هنگاه فعال کردن احراز هویت بیومتریک خطایی رخ داد. بعضی از دستگاه ها در پیاده سازی این ویژگی مشکل دارند. می‌توانید از روش \\\"فقط کلمه عبور\\\" استفاده کنید.</string>\n    <string name=\"no_cameras_available\">هیچ دوربینی در دسترس نیست</string>\n    <string name=\"read_qr_error\">هنگام خواندن بارکد دوبعدی خطایی رخ داد</string>\n    <string name=\"read_qr_error_phonefactor\">آگیس با الگوریتم اختصاصی 2FA مایکروسافت سازگاری ندارد. لطفا اطمینان حاصل فرمایید که گزینه \\\"تنظیم برنامه بدون اعلانات\\\" در تنظیمات 2FA آفیس 365 انتخاب شده باشد.</string>\n    <string name=\"unlocking_vault\">رمزگشایی مزخن</string>\n    <string name=\"remove_group\">حذف گروه</string>\n    <string name=\"remove_group_description\">آیا مطمئن به حذف این گروه هستید؟ تمام آیتم های داخل این گروه تبدیل به \\\"بدون گروه\\\" می‌شوند.</string>\n    <string name=\"details\">جزئیات</string>\n    <string name=\"lock\">قفل</string>\n    <string name=\"name\">نام</string>\n    <string name=\"no_group\">بدون گروه</string>\n    <string name=\"sort_alphabetically\">صادر کننده (A - Z)</string>\n    <string name=\"sort_alphabetically_reverse\">صادر کننده (Z - A)</string>\n    <string name=\"sort_alphabetically_name\">نام حساب (A - Z)</string>\n    <string name=\"sort_alphabetically_name_reverse\">نام حساب (Z - A)</string>\n    <string name=\"sort_custom\">سفارشی</string>\n    <string name=\"new_group\">گروه جدید…</string>\n    <string name=\"group\">گروه</string>\n    <string name=\"group_name_hint\">نام گروه</string>\n    <string name=\"preference_manage_groups\">ویرایش گروه</string>\n    <string name=\"preference_manage_groups_summary\">اینجا می‌توانید گروه ها را مدیریت و یا حذف کنید</string>\n    <string name=\"pref_highlight_entry_title\">توکن ها پس از لمس هایلایت شوند</string>\n    <string name=\"pref_highlight_entry_summary\">برای تمیز دادن توکن مورد نظر از بقیه می‌توانید آنها را به صورت موقت با لمس کردن هایلایت کنید</string>\n    <string name=\"pin_keyboard_description\">کلمه عبور خود را برای فعال کردن صفحه کلید شماره‌ای وارد کنید. این ویژگی فقط برای کلمه عبور های شامل فقط عدد کاربرد دارد</string>\n    <string name=\"pin_keyboard_error\">خطا در فعال کردن صفحه کلید شماره‌ای</string>\n    <string name=\"pin_keyboard_error_description\">امکان فعال صفحه کلید شماره‌ای نیست. کلمه عبور شما باید فقط شامل عدد باشد.</string>\n    <string name=\"pin_keyboard_disabled\">کلمه عبور تغییر کرد. صفحه کلید شماره ای دیگر نمایش داده نمی‌شود.</string>\n    <string name=\"selected\">انتخاب</string>\n    <string name=\"dark_theme_title\">پوسته تیره</string>\n    <string name=\"light_theme_title\">پوسته روشن</string>\n    <string name=\"amoled_theme_title\">پوسته AMOLED</string>\n    <string name=\"system_theme_title\">انتخاب خودکار برای استفاده بهینه تر از باتری</string>\n    <string name=\"system_amoled_theme_title\">انتخاب خودکار برای استفاده بهینه تر از باتری</string>\n    <string name=\"normal_viewmode_title\">معمولی</string>\n    <string name=\"compact_mode_title\">جمع و جور</string>\n    <string name=\"small_mode_title\">کوچک</string>\n    <string name=\"unknown_issuer\">صادر کننده نامشخص</string>\n    <string name=\"unknown_account_name\">حساب کاربری نامشخص</string>\n    <string name=\"unable_to_generate_qrcode\">عدم توانایی در ساخت بارکد دوبعدی</string>\n    <string name=\"select_picture\">انتخاب تصویر</string>\n    <string name=\"select_icon\">انتخاب آیکون</string>\n    <string name=\"toggle_checkboxes\">تغییر وضعیت چک باکس‌ها</string>\n    <string name=\"search\">جستجو</string>\n    <string name=\"channel_name_lock_status\">قفل نمودن وضعیت</string>\n    <string name=\"channel_description_lock_status\">Aegis می‌تواند یک اعلان برای اعلام قفل شدن برنامه به شما بسازد.</string>\n    <string name=\"vault_unlocked_state\">مخزن رمزگشایی شد. برای قفل شدن لمس کنید.</string>\n    <string name=\"version\">نسخه</string>\n    <string name=\"changelog\">گزارش تغییرات</string>\n    <string name=\"whats_new\">تغییرات جدید</string>\n    <string name=\"github_description\">دسترسی به کد برنامه</string>\n    <string name=\"country_netherlands\">هلند</string>\n    <string name=\"email_us\">ایمیل بنویسید</string>\n    <string name=\"visit_website\">از وب‌سایت ما دیدن کنید</string>\n    <string name=\"about_support\">پشتیبانی</string>\n    <string name=\"support_rate\">امتیاز</string>\n    <string name=\"support_rate_description\">ما را با نظر دادن در فروشگاه گوگل پشتیبانی کنید</string>\n    <string name=\"email\">ایمیل</string>\n    <string name=\"time_sync_warning_title\">همگام سازی خودکار</string>\n    <string name=\"time_sync_warning_message\">این برنامه نیاز به زمان دقیق برای ساختن کد جدید دارد. تفاوت چند ثانیه‌ای ممکن است باعث ایجاد کد اشتباه شود. به نظر می‌رسد ساعت دستگاه شما به صورت خودکار تنظیم نشده است. آیا میخواهید این کار را انجام دهید؟</string>\n    <string name=\"time_sync_warning_disable\">دیگر به من هشدار نده. می‌دانم دارم چکار می‌کنم.</string>\n    <string name=\"google_qr_export_unrelated\">یک بارکد دوبعدی نا مربوط دریافت شد. لطفا اسکنر خود را ریستارت کنید.</string>\n    <string name=\"backup_error_bar_message\"><b>خطا پشتیبان گیری از مخزن</b></string>\n    <string name=\"switch_camera\">تغییر دوربین</string>\n    <string name=\"empty_list\">کدی برای نمایش موجود ندارد. لطفا برای اضافه کردن از دکمه به علاوه در پایین صفحه استفاده کنید.</string>\n    <string name=\"empty_list_title\">آیتمی پیدا نشد.</string>\n    <string name=\"empty_group_list\">هیچ گروهی پیدا نشد. شما می‌توانید در صفحه ویرایش هر آیتم، گروه اضافه کنید.</string>\n    <string name=\"empty_group_list_title\">گروهی پیدا نشد</string>\n    <string name=\"done\">انجام شد</string>\n    <string name=\"next\">بعدی</string>\n    <string name=\"previous\">قبلی</string>\n    <string name=\"transfer_entry_description\">این بارکد دوبعدی را توسط برنامه ای که علاقه دارید توکن منتقل شود اسکن کنید.</string>\n    <string name=\"password_strength_very_weak\">خیلی ضعیف</string>\n    <string name=\"password_strength_weak\">ضعیف</string>\n    <string name=\"password_strength_fair\">قابل قبول</string>\n    <string name=\"password_strength_good\">خوب</string>\n    <string name=\"password_strength_strong\">قوی</string>\n    <string name=\"pref_pin_keyboard_title\">استفاده از صفحه کلید شماره‌ای</string>\n    <string name=\"pref_pin_keyboard_summary\">برای نمایش صفحه کلید شماره‌ای فعال کنید.</string>\n    <string name=\"title_activity_preferences\">تنظیمات</string>\n    <string name=\"title_activity_manage_groups\">مدیریت گروه‌ها</string>\n    <string name=\"title_activity_transfer\">انتقال آیتم‌ها</string>\n    <string name=\"title_activity_about\">درباره‌ما</string>\n    <string name=\"title_activity_edit_entry\">ویرایش آیتم</string>\n    <string name=\"title_activity_scan_qr\">اسکن بارکد دوبعدی</string>\n    <string name=\"dialog_wipe_entries_title\">پاک کردن موارد</string>\n    <string name=\"dialog_wipe_entries_message\">مخزن شما در حال حاضر شامل آیتم می‌باشد. آیا مطمئن به حذف این آیتم‌ها قبل از وارد کردن می‌باشید؟\\n\\n<b>بعد از این کار شما به هیچ وجه دسترسی به آیتم های قبلی نخواهید داشت.</b></string>\n    <string name=\"dialog_wipe_entries_checkbox\">پاک کردن اطلاعات مخزن</string>\n    <string name=\"panic_trigger_ignore_toast\">آگیس ماشه وحشت را دریافت کرده ولی تنظیمات مربوطه غیر فعال میباشد, نادیده گرفتن</string>\n    <string name=\"pref_panic_trigger_title\">حذف مخزن بر روی فرمان ماشه وحشت</string>\n    <string name=\"pref_panic_trigger_summary\">حذف مخزن زمانی که یک ماشه وحشت از طرف Ripple دریافت شده</string>\n    <string name=\"importer_help_aegis\">تهیه یک فایل بکاپ / صادر کردن از آگیس.</string>\n    <string name=\"importer_help_authenticator_plus\">تهیه یک فایل خروجی از Authenticator Plus از طریق <b> تنظیمات -&gt; پشتیبان گیری &amp; بازیابی - &gt; صادر کردن به عنوان متن و HTML میباشد </b>.</string>\n    <string name=\"importer_help_authy\">تهیه کپی از\n<b>/data/data/com.authy.authy/shared_prefs/com.authy.storage.tokens.authenticator.xml</b>,\nواقع شده در حافظه داخلی Authy.</string>\n    <string name=\"importer_help_andotp\">تهیه فایل بکاپ / خروجی از andOTP.</string>\n    <string name=\"importer_help_freeotp_plus\">تهیه فایل صدور برای FreeOTP+.</string>\n    <string name=\"importer_help_microsoft_authenticator\">تهیه کپی از\n<b>/data/data/com.azure.authenticator/databases/PhoneFactor</b>,\nواقع شده در حافظه داخلی Microsoft Authenticator.</string>\n    <string name=\"importer_help_plain_text\">تهیه یک فایل متنی ساده با Google Authenticator URI در هر خط.</string>\n    <string name=\"importer_help_totp_authenticator\">تهیه فایل صدور برای TOTP Authenticator.</string>\n    <string name=\"importer_help_winauth\">تهیه فایل صدور برای WinAuth.</string>\n    <string name=\"importer_help_direct\">وارد کردن محتویات مستقیما از %s. برای انجام این عملیات باید اپلیکشن بر روی دستگاه نصب شده باشد و دسترسی روت به آگیس اعطا شده باشد.</string>\n    <string name=\"groups\">گروه‌ها</string>\n    <string name=\"pref_focus_search_summary\">پس از باز کردن برنامه، بی‌درنگ به بخش جستجو بروید.</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-fa-rIR-v29/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources></resources>\n"
  },
  {
    "path": "app/src/main/res/values-fi-rFI/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources xmlns:tools=\"http://schemas.android.com/tools\">\n    <string name=\"action_settings\">Asetukset</string>\n    <string name=\"action_about\">Tietoja</string>\n    <string name=\"action_delete\">Poista</string>\n    <string name=\"action_transfer\">Siirrä</string>\n    <string name=\"action_edit_icon\">Muokkaa kuvaketta</string>\n    <string name=\"action_reset_usage_count\">Nollaa käyttömäärä</string>\n    <string name=\"action_reset_usage_count_dialog\">Haluatko varmasti nollata tämän kohteen käyttömäärän?</string>\n    <string name=\"action_default_icon\">Palauta oletuskuvake</string>\n    <string name=\"discard\">Hylkää</string>\n    <string name=\"save\">Tallenna</string>\n    <string name=\"all\">Kaikki</string>\n    <string name=\"issuer\">Myöntäjä</string>\n    <string name=\"yandex_pin\">PIN (4 - 16 numeroa)</string>\n    <string name=\"motp_pin\">PIN (4 numeroa)</string>\n    <string name=\"suggested\">Ehdotettu</string>\n    <string name=\"usage_count\">Käyttömäärä</string>\n    <string name=\"warning\">Varoitus</string>\n    <string name=\"pref_cat_appearance_app\">Sovellus</string>\n    <string name=\"pref_cat_appearance_entries\">Kohteet</string>\n    <string name=\"pref_cat_backups_android\">Android</string>\n    <string name=\"pref_cat_backups_auto\">Automaattinen varmuuskopiointi</string>\n    <string name=\"pref_section_behavior_title\">Käyttäytyminen</string>\n    <string name=\"pref_section_behavior_summary\">Mukauta kohdelistan käyttäytymistä.</string>\n    <string name=\"pref_section_appearance_title\">Ulkoasu</string>\n    <string name=\"pref_section_appearance_summary\">Vaihda teemaa, kieltä ja muita sovelluksen ulkonäköön vaikuttavia asetuksia.</string>\n    <string name=\"pref_section_security_title\">Turvallisuus</string>\n    <string name=\"pref_section_security_summary\">Määritä salaus, biometrinen avaus, automaattilukitus ja muita suojausasetuksia.</string>\n    <string name=\"pref_section_import_export_title\">Tuonti ja vienti</string>\n    <string name=\"pref_section_import_export_summary\">Tuo varmuuskopioita Aegisista tai muista todennussovelluksista. Luo Aegis-holvisi varmuuskopioita manuaalisesti.</string>\n    <string name=\"pref_section_audit_log_title\">Tilintarkastusloki</string>\n    <string name=\"pref_section_audit_log_summary\">Löydät listan kaikista sovelluksessa tapahtuneista tärkeistä tapahtumista.</string>\n    <string name=\"pref_section_backups_title\">Varmuuskopiot</string>\n    <string name=\"pref_section_backups_summary\">Valitse automaattisen varmuuskopioinnin sijainti, tai ota Androidin pilvivarmuuskopiointijärjestelmä käyttöön.</string>\n    <string name=\"pref_section_icon_packs\">Kuvakepaketit</string>\n    <string name=\"pref_section_icon_packs_summary\">Hallitse ja tuo kuvakepaketteja</string>\n    <string name=\"pref_select_theme_title\">Teema</string>\n    <string name=\"pref_dynamic_colors_title\">Dynaamiset värit</string>\n    <string name=\"pref_dynamic_colors_summary\">Käytä Android-teemasi väreihin perustuvaa ulkoasua</string>\n    <string name=\"pref_view_mode_title\">Näkymätila</string>\n    <string name=\"pref_lang_title\">Kieli</string>\n    <string name=\"pref_show_icons_title\">Näytä kuvakkeet</string>\n    <string name=\"pref_show_icons_summary\">Näytä kuvakkeet jokaisen kohteen vieressä</string>\n    <string name=\"pref_code_group_size_title\">Koodinumeroiden ryhmittely</string>\n    <string name=\"pref_code_group_size_summary\">Valitse koodien ryhmittelyyn käytettävien numeroiden määrä</string>\n    <string name=\"pref_account_name_position_title\">Näytä tilin nimi</string>\n    <string name=\"pref_show_next_code_title\">Näytä seuraava koodi</string>\n    <string name=\"pref_show_next_code_summary\">Luo ja näytä seuraava koodi etukäteen</string>\n    <string name=\"pref_expiration_state_title\">Ilmoita, milloin koodit ovat vanhentumassa</string>\n    <string name=\"pref_expiration_state_summary\">Muuta koodien väriä ja laita ne vilkkumaan, kun ne ovat vanhentumassa</string>\n    <string name=\"pref_expiration_state_fallback\">Vaihda koodien väriä, kun ne ovat vanhentumassa</string>\n    <string name=\"pref_shared_issuer_account_name_title\">Näytä tilin nimi vain tarvittaessa</string>\n    <string name=\"pref_shared_issuer_account_name_summary\">Näytä tilien nimet vain silloin, kun niillä on sama myöntäjä. Muiden tilien nimet piilotetaan.</string>\n    <string name=\"pref_account_name_position_summary_override\">Tämä asetus ohitetaan laatat-näkymätilassa. Tilin nimi näytetään myöntäjän alapuolella.</string>\n    <string name=\"pref_import_file_title\">Tuo tiedostosta</string>\n    <string name=\"pref_import_file_summary\">Tuo todennuskoodit tiedostosta</string>\n    <string name=\"pref_android_backups_title\">Androidin pilvivarmuuskopiot</string>\n    <string name=\"pref_android_backups_summary\">Käytä Androidin pilvivarmuuskopiointijärjestelmää Aegisin holvin varmuuskopiointiin. Tämä tukee vain salattuja holveja.</string>\n    <string name=\"pref_android_backups_hint\"><i>Laitteesta - laitteeseen (D2D) -varmuuskopiot sallitaan aina, riippumatta yllä olevasta asetuksesta</i></string>\n    <string name=\"pref_backups_title\">Varmuuskopioi holvi automaattisesti</string>\n    <string name=\"pref_backups_summary\">Holvi varmuuskopioidaan ulkoiseen tallennustilaan automaattisesti, muutoksia tehdessä. Vain salatut holvit tukevat tätä.</string>\n    <string name=\"pref_backups_reminder_title\">Varmuuskopiomuistutus</string>\n    <string name=\"pref_backups_reminder_summary\">Muistuta holvisi varmuuskopioimisesta, jos viimeisimpiä muutoksiasi ei ole varmuuskopioitu.</string>\n    <string name=\"pref_backups_reminder_dialog_title\">Poista varmuuskopiomuistutus käytöstä</string>\n    <string name=\"pref_backups_reminder_dialog_summary\">Tämän muistutuksen poistaminen käytöstä tarkoittaa, että Aegis ei kerro sinulle, onko sinulla varmuuskopioimattomia muutoksia. Tämän vaarantaa pääsysi todennuskoodeihisi. Haluatko varmasti poistaa muistutuksen käytöstä?</string>\n    <string name=\"pref_backups_versioning_strategy_title\">Varmuuskopiointistrategia</string>\n    <string name=\"pref_backups_versioning_strategy_keep_x_versions\">Säilytä useita versioita</string>\n    <string name=\"pref_backups_versioning_strategy_single_backup\">Yksi varmuuskopio</string>\n    <string name=\"pref_backups_versioning_strategy_single_backup_warning\">Valittu varmuuskopiointistrategia ei ole luotettava eikä sitä suositella. Yksi varmuuskopiointivirhe voi johtaa ainoan varmuuskopiosi menettämiseen.</string>\n    <string name=\"pref_backups_versioning_strategy_dialog_title\">Valitse varmuuskopiointistrategia</string>\n    <string name=\"pref_backups_location_title\">Varmuuskopion sijainti</string>\n    <string name=\"pref_backups_location_summary\">Varmuuskopiot tallennetaan sijaintiin</string>\n    <string name=\"pref_backup_location_summary\">Varmuuskopio tallennetaan sijaintiin</string>\n    <string name=\"pref_backups_trigger_title\">Varmuuskopion käynnistys</string>\n    <string name=\"pref_backups_trigger_summary\">Käynnistä varmuuskopio manuaalisesti</string>\n    <string name=\"pref_backups_versions_title\">Säilytettävien versioiden määrä</string>\n    <string name=\"pref_backups_versions_infinite\">\\u221E</string>\n    <plurals name=\"pref_backups_versions_summary\">\n        <item quantity=\"one\">Säilytä %1$d versio varmuuskopiosta</item>\n        <item quantity=\"other\">Säilytä %1$d versiota varmuuskopiosta</item>\n    </plurals>\n    <string name=\"pref_backups_versions_infinite_summary\">Säilytä rajaton määrä versioita varmuuskopiosta</string>\n    <string name=\"pref_import_app_title\">Tuo sovelluksesta</string>\n    <string name=\"pref_import_app_summary\">Tuo todennuskoodit sovelluksesta (vaatii root-oikeuden)</string>\n    <string name=\"pref_export_title\">Vie</string>\n    <string name=\"pref_export_summary\">Vie holvi</string>\n    <string name=\"pref_password_reminder_title\">Salasanamuistutus</string>\n    <string name=\"pref_google_auth_export_title\">Vie Google Authenticatoriin</string>\n    <string name=\"pref_google_auth_export_descriptor\">Luo QR-koodeja, jotka ovat yhteensopivia Google Authenticator -sovelluksen kanssa</string>\n    <string name=\"pref_google_auth_export_no_data\">Ei vietäviä tietoja</string>\n    <plurals name=\"pref_google_auth_export_incompatible_entries\">\n        <item quantity=\"one\">Ohitettu %d yhteensopimaton kohde</item>\n        <item quantity=\"other\">Ohitettu %d yhteensopimatonta kohdetta</item>\n    </plurals>\n    <string name=\"pref_password_reminder_summary\">Näytä %s muistutus syöttääksesi salasanan, jotta et unohda sitä.</string>\n    <string name=\"pref_password_reminder_summary_disabled\">Pois käytöstä</string>\n    <string name=\"pref_secure_screen_title\">Näyttöturvallisuus</string>\n    <string name=\"pref_secure_screen_summary\">Estä kuvakaappaukset ja muut yritykset tallentaa näyttöä sovelluksen ollessa käytössä</string>\n    <string name=\"pref_tap_to_reveal_title\">Paljasta napauttamalla</string>\n    <string name=\"pref_tap_to_reveal_summary\">Todennuskoodit piilotetaan oletuksena. Napauta kohdetta paljastaaksesi koodin.</string>\n    <string name=\"pref_tap_to_reveal_time_title\">Napauttamalla paljastuksen aikakatkaisu</string>\n    <string name=\"pref_auto_lock_title\">Automaattilukitus</string>\n    <string name=\"pref_auto_lock_summary\">Kun %s</string>\n    <string name=\"pref_auto_lock_summary_disabled\">Pois käytöstä</string>\n    <string name=\"pref_auto_lock_prompt\">Lukitse Aegis automaattisesti kun</string>\n    <string name=\"pref_auto_lock_type_back_button\">Takaisin-painiketta painetaan</string>\n    <string name=\"pref_auto_lock_type_minimize\">Sovellus on minimoitu</string>\n    <string name=\"pref_auto_lock_type_device_lock\">Laite on lukittu</string>\n    <string name=\"pref_backup_password_category\">Varmuuskopiointi ja palautus</string>\n    <string name=\"pref_backup_password_title\">Erillinen salasana varmuuskopiointia ja vientiä varten</string>\n    <string name=\"pref_backup_password_summary\">Jos käytössä, sovelluksen avaavaa salasanaa ei voi käyttää varmuuskopiden ja vientien purkuun.</string>\n    <string name=\"pref_backup_password_change_title\">Vaihda varmuuskopioiden ja viennin salasana</string>\n    <string name=\"pref_backup_password_change_summary\">Aseta uusi salasana, jota käytetään holvin varmuuskopioiden ja vientien salaamiseen.</string>\n    <string name=\"pref_encryption_title\">Salaus</string>\n    <string name=\"pref_encryption_summary\">Salaa holvi ja avaa se salasanalla tai biometrialla</string>\n    <string name=\"pref_biometrics_title\">Biometrinen lukituksen avaus</string>\n    <string name=\"pref_biometrics_summary\">Salli holvin avaus biometrisillä tiedoilla</string>\n    <string name=\"pref_search_behavior_summary\">Hae: %s</string>\n    <string name=\"pref_search_behavior_prompt\">Haku seuraavista kentistä</string>\n    <string name=\"pref_search_behavior_type_name\">Nimi</string>\n    <string name=\"pref_search_behavior_type_issuer\">Myöntäjä</string>\n    <string name=\"pref_search_behavior_type_note\">Muistiinpano</string>\n    <string name=\"pref_search_behavior_type_groups\">Ryhmät</string>\n    <string name=\"pref_set_password_title\">Vaihda salasana</string>\n    <string name=\"pref_set_password_summary\">Aseta uusi holvin avaamiseen tarvittava salasana</string>\n    <string name=\"no_events_title\">Ei raportoituja tapahtumia</string>\n    <string name=\"no_events_description\">Sovelluksessa ei ole raportoitu merkittäviä tapahtumia</string>\n    <string name=\"event_title_vault_unlocked\">Holvin lukitus on avattu</string>\n    <string name=\"event_description_vault_unlocked\">Holvin lukitus on avattu onnistuneesti</string>\n    <string name=\"event_title_backup_created\">Varmuuskopio on luotu</string>\n    <string name=\"event_description_backup_created\">Holvin varmuuskopio on luotu onnistuneesti</string>\n    <string name=\"event_title_android_backup_created\">Androidin luoma varmuuskopio</string>\n    <string name=\"event_description_android_backup_created\">Android on luonut holvin varmuuskopion onnistuneesti</string>\n    <string name=\"event_title_vault_exported\">Holvi on viety</string>\n    <string name=\"event_description_vault_exported\">Holvin kopio on viety</string>\n    <string name=\"event_title_entry_shared\">Kohde on jaettu</string>\n    <string name=\"event_description_entry_shared\">Kohde on jaettu</string>\n    <string name=\"event_title_vault_unlock_failed_password\">Holvin lukituksen avaus epäonnistui (salasana)</string>\n    <string name=\"event_description_vault_unlock_failed_password\">Holvin lukituksen avaus salasanalla epäonnistui</string>\n    <string name=\"event_title_vault_unlock_failed_biometrics\">Holvin lukituksen avaus epäonnistui (biometria)</string>\n    <string name=\"event_description_vault_unlock_failed_biometrics\">Holvin lukituksen avaus biometrialla epäonnistui</string>\n    <string name=\"event_unknown\">Tuntematon tapahtumatyyppi</string>\n    <string name=\"audit_log_entry_deleted\">(poistettu)</string>\n    <string name=\"today_at_time\">Tänään klo %1$s</string>\n    <string name=\"day_of_week_at_time\">%1$s klo %2$s</string>\n    <string name=\"export_encrypted\">Salaa holvi</string>\n    <string name=\"export_help\">Tämä toiminto vie holvin ulos Aegisin sisäisestä tallennustilasta. Valitse viennin tiedostomuoto:</string>\n    <string name=\"export_warning_unencrypted\">Olet viemässä salaamattoman kopion Aegis-holvistasi. <b>Tätä ei suositella</b>.</string>\n    <string name=\"export_warning_password\">Vienti on salattu käyttäen erillistä salasanaa, joka on määritetty suojausasetuksissa.</string>\n    <string name=\"understand_risk_accept\">Ymmärrän riskin</string>\n    <string name=\"export_format_aegis\">Aegis (.JSON)</string>\n    <string name=\"export_format_google_auth_uri\">Tekstitiedosto (.TXT)</string>\n    <string name=\"export_format_html\">Verkkosivu (.HTML)</string>\n    <string name=\"export_format_hint\">Vientimuoto</string>\n    <string name=\"export_all_groups\">Vie kaikki ryhmät</string>\n    <string name=\"export_choose_groups\">Valitse vietävät ryhmät</string>\n    <plurals name=\"export_groups_selected_count\">\n        <item quantity=\"one\">%d ryhmä valittu</item>\n        <item quantity=\"other\">%d ryhmää valittu</item>\n    </plurals>\n    <string name=\"export_no_groups_selected\">Yhtään ryhmää ei ole valittu vietäväksi</string>\n    <string name=\"export_html_title\" comment=\"The title of an HTML export document\">Aegis Todennustiedoston Vienti</string>\n    <string name=\"choose_authentication_method\">Turvallisuus</string>\n    <string name=\"authentication_method_explanation\">Aegis on turvallisuuteen keskittyvä 2FA-sovellus. Todennuskoodit talletetaan holviin, joka voidaan salata valitsemallasi salasanalla. Vaikka hyökkääjä kaappaisi salatun holvitiedostosi, hän ei pääse käsiksi sen sisältöön tietämättä salasanaasi.\\n\\nOlemme valinneet valmiiksi vaihtoehdon, joka sopii parhaiten laitteellesi.</string>\n    <string name=\"authentication_method_none\">Ei mitään</string>\n    <string name=\"authentication_method_none_description\">Holvia ei salata ja sen avaaminen ei vaadi salasanaa. <b>Tätä asetusta ei suositella</b>.</string>\n    <string name=\"authentication_method_password\">Salasana</string>\n    <string name=\"authentication_method_password_description\">Salasana tarvitaan holvin avaamiseksi.</string>\n    <string name=\"authentication_method_password_explanation\">Varoitus: Jos unohdat salasanasi, menetät pysyvästi pääsyn todennuskoodeihisi. Niitä ei voi palauttaa ilman salasanaa.</string>\n    <string name=\"authentication_method_biometrics\">Biometria</string>\n    <string name=\"authentication_method_biometrics_description\">Holvin voi avata sekä salasanalla että laitteeseen tallennettujen biometristen tietojen, kuten sormenjälkesi tai kasvojesi avulla.</string>\n    <string name=\"authentication\">Avaa holvi</string>\n    <string name=\"authentication_multiline\" comment=\"The newline in the middle is used for aesthetic purposes\">Avaa\\nholvi</string>\n    <string name=\"auth_use_biometrics\">Tai napauta tästä käyttääksesi <font fgcolor=\"#FF0D86C1\">biometriaa</font></string>\n    <string name=\"set_password\">Anna salasana</string>\n    <string name=\"set_group\">Anna ryhmän nimi</string>\n    <string name=\"set_number\">Anna numero</string>\n    <string name=\"set_password_confirm\">Vahvista salasana</string>\n    <string name=\"invalid_password\">Salasana on virheellinen</string>\n    <string name=\"invalidated_biometrics\">Laitteesi suojausasetuksia on muutettu. Siirry kohtaan \\\"Aegis -&gt; Asetukset -&gt; Turvallisuus -&gt; Biometrinen lukituksen avaus\\\" poistaaksesi biometrisen lukituksen käytöstä ja ottaaksesi sen uudelleen käyttöön.</string>\n    <string name=\"password_reminder\">Syötä salasanasi. Pyydämme sinua tekemään tämän silloin tällöin, jottet unohda sitä.</string>\n    <string name=\"password_reminder_dialog_title\">Biometrinen lukituksen avaus oletuksena</string>\n    <string name=\"password_reminder_dialog_message\">Pyydämme sinua toisinaan syöttämään salasanasi varmistaaksemme, ettet ole unohtanut sitä etkä jää ulos holvistasi. Kun olet syöttänyt salasanasi kerran, Aegis palaa oletusarvoisesti takaisin käyttämään biometrista lukituksen avaamista, kunnes on aika antaa uusi salasanamuistutus.</string>\n    <string name=\"password_reminder_freq_never\">Ei koskaan</string>\n    <string name=\"password_reminder_freq_weekly\">Viikoittain</string>\n    <string name=\"password_reminder_freq_biweekly\">Joka toinen viikko</string>\n    <string name=\"password_reminder_freq_monthly\">Kuukausittainen</string>\n    <string name=\"password_reminder_freq_quarterly\">Neljännesvuosittain</string>\n    <string name=\"enter_password_2fas_message\">Näyttää siltä, että tämä 2FAS varmuuskopio on salattu. Syötä salasana.</string>\n    <string name=\"enter_password_authy_message\">Näyttää siltä, että Authy-todennuskoodisi on salattu. Sulje Aegis, käynnistä Authy ja avaa sen lukitus salasanallasi. Aegis voi myös yrittää purkaa Authy-todennuskoodiesi salauksen puolestasi, jos syötät salasanasi alle.</string>\n    <string name=\"enter_password_aegis_title\">Syötä tuontisalasana</string>\n    <string name=\"period_hint\">Aikaväli (sekuntia)</string>\n    <string name=\"algorithm_hint\">Hajautusalgoritmi</string>\n    <string name=\"type\">Tyyppi</string>\n    <string name=\"share\">Jaa</string>\n    <string name=\"yes\">Kyllä</string>\n    <string name=\"no\">Ei</string>\n    <string name=\"undo\">Kumoa</string>\n    <string name=\"unlock\">Avaa lukitus</string>\n    <string name=\"advanced\">Edistyneet</string>\n    <string name=\"counter\">Laskuri</string>\n    <string name=\"digits\">Numeroa</string>\n    <string name=\"secret\">Salausavain</string>\n    <string name=\"scan\">Skannaa QR-koodi</string>\n    <string name=\"scan_image\">Skannaa kuva</string>\n    <string name=\"enter_manually\">Syötä manuaalisesti</string>\n    <string name=\"set_up_biometric\">Määritä biometrinen lukituksen avaus</string>\n    <string name=\"copy\">Kopioi</string>\n    <string name=\"edit\">Muokkaa</string>\n    <string name=\"select_all\">Valitse kaikki</string>\n    <string name=\"assign_icons\">Määritä kuvakkeet</string>\n    <string name=\"assign_groups\">Lisää ryhmään</string>\n    <string name=\"assign_groups_dialog_summary\">Valitse ryhmä, johon haluat lisätä valitut kohteet.</string>\n    <string name=\"assign_groups_dialog_dropdown\">Valitse ryhmä</string>\n    <string name=\"favorite\" comment=\"Verb\">Lisää suosikiksi</string>\n    <string name=\"unfavorite\" comment=\"Verb\">Poista suosikeista</string>\n    <string name=\"error_all_caps\">VIRHE</string>\n    <string name=\"password\">Salasana</string>\n    <string name=\"confirm_password\">Vahvista salasana</string>\n    <string name=\"show_password\">Näytä salasana</string>\n    <string name=\"new_entry\">Uusi kohde</string>\n    <string name=\"add_new_entry\">Lisää uusi kohde</string>\n    <string name=\"unlock_vault_error\">Holvin avaaminen epäonnistui</string>\n    <string name=\"unlock_vault_error_description\">Väärä salasana. Varmista, ettet kirjoittanut salasanaasi väärin.</string>\n    <string name=\"password_equality_error\">Salasanojen on täsmättävä</string>\n    <string name=\"snackbar_authentication_method\">Valitse todennusmenetelmä</string>\n    <string name=\"encrypting_vault\">Holvia salataan</string>\n    <string name=\"exporting_vault\">Viedään holvia</string>\n    <string name=\"optimizing_icon\">Optimoidaan kuvaketta</string>\n    <string name=\"optimizing_icon_multiple\">Optimoidaan kuvakkeita %1$d/%2$d</string>\n    <string name=\"reading_file\">Luetaan tiedostoa</string>\n    <string name=\"requesting_root_access\">Pyydetään root-oikeuksia</string>\n    <string name=\"analyzing_qr\">Analysoidaan QR-koodia</string>\n    <string name=\"analyzing_qr_multiple\">Luetaan QR-koodia %1$d/%2$d (%3$s)</string>\n    <plurals name=\"added_new_entries\">\n        <item quantity=\"one\">%d uusi kohde lisätty holviin</item>\n        <item quantity=\"other\">%d uutta kohdetta lisätty holviin</item>\n    </plurals>\n    <string name=\"importing_icon_pack\">Tuodaan kuvakepakettia</string>\n    <string name=\"delete_entry\">Poista kohde</string>\n    <string name=\"delete_entry_description\">Haluatko varmasti poistaa tämän kohteen?</string>\n    <string name=\"delete_entry_explanation\">Tämä ei poista kohteen \\n<b>%s</b>\\n\\n kaksivaiheista todennusta käytöstä. Varmista, että olet poistanut kaksivaiheisen todennuksen käytöstä, tai että sinulla on vaihtoehtoinen tapa generoida koodeja, pääsyn menettämisen estämiseksi.</string>\n    <string name=\"delete_entries\">Poista kohteet</string>\n    <plurals name=\"delete_entries_description\">\n        <item quantity=\"one\">Haluatko varmasti poistaa %d kohteen?</item>\n        <item quantity=\"other\">Haluatko varmasti poistaa %d kohdetta?</item>\n    </plurals>\n    <string name=\"discard_changes\">Hylätäänkö muutokset?</string>\n    <string name=\"discard_changes_description\">Muutoksiasi ei ole tallennettu</string>\n    <string name=\"saving_profile_error\">Virhe profiilin tallennuksessa</string>\n    <string name=\"saving_assign_icons_error\">Virhe kuvakkeita määritettäessä</string>\n    <string name=\"welcome\">Tervetuloa</string>\n    <string name=\"app_description\">Aegis on ilmainen, turvallinen ja avoimen lähdekoodin 2FA-sovellus</string>\n    <string name=\"setup_completed\">Määritys on valmis</string>\n    <string name=\"setup_completed_description\">Aegis on määritetty ja valmis käytettäväksi.</string>\n    <string name=\"vault_not_found\">Holvia ei löydy, aloitetaan määritys…</string>\n    <string name=\"copied\">Kopioitu</string>\n    <string name=\"errors_copied\">Virheet kopioitiin leikepöydälle</string>\n    <string name=\"version_copied\">Versio kopioitiin leikepöydälle</string>\n    <string name=\"error_required_field\">Tämä kenttä vaaditaan</string>\n    <string name=\"error_occurred\">Tapahtui virhe</string>\n    <string name=\"decryption_error\">Holvin avaamisessa tapahtui virhe</string>\n    <string name=\"decryption_corrupt_error\">Holvin avaamisessa tapahtui virhe. Holvitiedostosi saattaa olla korruptoitunut.</string>\n    <string name=\"saving_error\">Holvin tallentamisessa tapahtui virhe</string>\n    <string name=\"vault_init_error\">Holvin käyttöönotossa tapahtui virhe</string>\n    <string name=\"vault_load_error\">Holvin lataamisessa tapahtui virhe</string>\n    <string name=\"biometric_decrypt_error\">Holvin salauksen purkamisessa biometrisella todennuksella tapahtui virhe. Tämä tapahtuu yleensä vain, jos laitteesi suojausasetuksia on muutettu. Avaa holvin lukitus salasanallasi ja määritä biometrinen todennus uudelleen Aegisin asetuksissa.</string>\n    <string name=\"biometric_init_error\">Biometrisen todennuksen valmistelussa tapahtui virhe. Tämä tapahtuu yleensä vain, jos laitteesi suojausasetuksia on muutettu. Avaa holvin lukitus salasanallasi ja määritä biometrinen todennus uudelleen Aegisin asetuksissa.</string>\n    <string name=\"disable_encryption\">Ota salaus pois käytöstä</string>\n    <string name=\"disable_encryption_description\">Haluatko varmasti poistaa salauksen käytöstä? Holvisi tallennetaan raakatekstinä. <b>Automaattiset varmuuskopiot poistetaan myös käytöstä</b>.</string>\n    <string name=\"enable_encryption_error\">Salauksen käyttöönotossa tapahtui virhe</string>\n    <string name=\"disable_encryption_error\">Salauksen käytöstä poistamisessa tapahtui virhe</string>\n    <string name=\"backup_successful\">Varmuuskopion ajoitus onnistui</string>\n    <string name=\"backup_error\">Varmuuskopion luomisessa tapahtui virhe</string>\n    <string name=\"backup_status_success\">Viimeisin varmuuskopiointi onnistui: %s</string>\n    <string name=\"backup_status_failed\">Viimeisin varmuuskopiointi epäonnistui: %s</string>\n    <string name=\"backup_status_none\">Varmuuskopioita ei ole vielä tehty</string>\n    <string name=\"backup_warning_password\">Varmuuskopiot salataan erillisellä suojausasetuksissa määritetyllä salasanalla</string>\n    <string name=\"documentsui_error\">DocumentsUI näyttää puuttuvan laitteestasi. Tämä on tärkeä järjestelmän osa, joka on tarpeen asiakirjojen valintaa ja luomista varten. Jos olet käyttänyt &quot;debloat&quot; -työkaluja laitteellesi, olet voinut vahingossa poistaa sen ja sinun täytyy asentaa se uudelleen.</string>\n    <string name=\"icon_pack_import_error\">Kuvakepaketin tuonnissa tapahtui virhe</string>\n    <string name=\"icon_pack_import_exists_error\">Kuvakepaketti, jota yrität tuoda, on jo olemassa. Haluatko korvata sen?</string>\n    <string name=\"icon_pack_delete_error\">Kuvakepaketin poistamisessa tapahtui virhe</string>\n    <plurals name=\"icon_pack_info\">\n        <item quantity=\"one\">%d kuvake</item>\n        <item quantity=\"other\">%d kuvaketta</item>\n    </plurals>\n    <string name=\"icon_custom\">Mukautettu</string>\n    <string name=\"permission_denied\">Lupa evätty</string>\n    <string name=\"andotp_new_format\">Uusi tallennusmuoto (v0.6.3 tai uudempi) </string>\n    <string name=\"andotp_old_format\">Vanha tallennusmuoto (v0.6.2 tai vanhempi) </string>\n    <string name=\"choose_andotp_importer\">Mitä tallennusmuotoa andOTP-varmuuskopiotiedostosi käyttää?</string>\n    <string name=\"choose_totpauth_importer\">Onko tämä TOTP-todennussovelluksen varmuuskopio lukittu salasanalla?</string>\n    <string name=\"choose_application\">Valitse sovellus, josta haluat tuoda tietoja</string>\n    <string name=\"choose_theme\">Valitse haluamasi teema</string>\n    <string name=\"choose_account_name_position\">Valitse haluamasi tilin nimen sijainti</string>\n    <string name=\"choose_view_mode\">Valitse haluamasi näkymätila</string>\n    <string name=\"choose_copy_behavior\">Valitse haluttu kopiointikäyttäytyminen</string>\n    <string name=\"parsing_file_error\">Tiedoston jäsentämisessä tapahtui virhe</string>\n    <string name=\"file_not_found\">Virhe: Tiedostoa ei löydy</string>\n    <string name=\"reading_file_error\">Tiedoston lukemisessa tapahtui virhe</string>\n    <string name=\"app_lookup_error\">Virhe: Sovellusta ei ole asennettu</string>\n    <string name=\"app_version_error\">Sovelluksen %s asennettua versiota ei tueta. Viimeaikaiset versiot ovat alkaneet salata joitakin sisäisen tallennushakemiston tiedostoja, jonka vuoksi Aegis ei pääse käsiksi tuontiin tarvittaviin tietoihin. Tuontiyritys johtaa todennäköisesti virheeseen. Haluatko silti jatkaa?</string>\n    <string name=\"root_error\">Virhe: root-oikeuksia ei voitu saada</string>\n    <plurals name=\"imported_entries_count\">\n        <item quantity=\"one\">%d kohde tuotu</item>\n        <item quantity=\"other\">%d kohdetta tuotu</item>\n    </plurals>\n    <plurals name=\"entries_shown\">\n        <item quantity=\"one\">Näytetään %d kohde</item>\n        <item quantity=\"other\">Näytetään %d kohdetta</item>\n    </plurals>\n    <string name=\"intro_import_error_title\">Holvin tuonnissa tapahtui virhe</string>\n    <string name=\"import_error_title\">Yksi tai useampi virhettä tapahtui tuonnin aikana</string>\n    <string name=\"exporting_vault_error\">Holvin viennissä tapahtui virhe</string>\n    <string name=\"exported_vault\">Holvi on viety</string>\n    <string name=\"encryption_set_password_error\">Salasanan asetuksessa tapahtui virhe.</string>\n    <string name=\"encryption_enable_biometrics_error\">Biometrisen todennuksen käyttöönotossa tapahtui virhe. Biometrinen todennus on toteutettu huonosti joissain laitteissa, ja on todennäköistä, että omasi on yksi niistä. Harkitse vaihtamista vain salasanan käyttämiseen.</string>\n    <string name=\"no_cameras_available\">Kameroita ei ole saatavilla</string>\n    <string name=\"read_qr_error\">QR-koodin lukemisessa tapahtui virhe</string>\n    <string name=\"read_qr_error_phonefactor\">Aegis ei ole yhteensopiva Microsoftin oman 2FA-algoritmin kanssa. Varmista, että valitset \\\"Määritä sovellus ilman ilmoituksia\\\", kun määrität Office 365:n kaksivaiheista tunnistautumista.</string>\n    <string name=\"partial_google_auth_import\">Puutteellinen Google Authenticatorin varmuuskopio havaittu</string>\n    <string name=\"partial_google_auth_import_warning\">Jotkin QR-koodit puuttuvat tuonnistasi. Seuraavia koodeja ei löytynyt:\\n\\n<b>%s</b>\\n\\nVoit jatkaa tämän osittaisen viennin tuontia, mutta suosittelemme kokeilemaan uudelleen kaikilla QR-koodeilla, jotta et menetä pääsyä todennuskoodeihin.</string>\n    <string name=\"missing_qr_code_descriptor\">• QR-koodi %d</string>\n    <plurals name=\"import_partial_export_anyway\">\n        <item quantity=\"one\">Tuo %d todennuskoodi silti</item>\n        <item quantity=\"other\">Tuo %d todennuskoodia silti</item>\n    </plurals>\n    <string name=\"import_google_auth_failure\">Google Authenticatorin varmuuskopion tuonti epäonnistui</string>\n    <string name=\"unrelated_google_auth_batches_error\">Vienti sisältää tietoa liittymättömästä erästä. Yritä tuoda 1 erä kerrallaan.</string>\n    <string name=\"no_tokens_can_be_imported\">Tämän seurauksena yhtäkään todennuskoodia ei voitu tuoda</string>\n    <string name=\"unlocking_vault\">Holvia avataan</string>\n    <string name=\"rename_group\">Nimeä ryhmä uudelleen</string>\n    <string name=\"no_group_selection\">Jos kohde ei kuulu mihinkään ryhmään, se löytyy osion ”Ei ryhmää” alta.</string>\n    <string name=\"remove_group\">Poista ryhmä</string>\n    <string name=\"remove_group_description\">Poistetaanko tämä ryhmä? Ryhmässä olevat kohteet merkitään automaattisesti ryhmättömiksi.</string>\n    <string name=\"remove_unused_groups\">Poista käyttämättömät ryhmät</string>\n    <string name=\"remove_unused_groups_description\">Haluatko varmasti poistaa kaikki ryhmät, joille ei ole määritetty kohteita?</string>\n    <string name=\"remove_icon_pack\">Poista kuvakepaketti</string>\n    <string name=\"remove_icon_pack_description\">Haluatko varmasti poistaa tämän kuvakepaketin? Tämä ei vaikuta kohteisiin, jotka käyttävät kuvakkeita tästä paketista.</string>\n    <string name=\"details\">Tiedot</string>\n    <string name=\"show_error_details\">Näytä virheen tiedot</string>\n    <string name=\"lock\">Lukitse</string>\n    <string name=\"name\">Nimi</string>\n    <string name=\"no_group\">Ei ryhmää</string>\n    <string name=\"sort\" comment=\"Title of the Sort button in the top action bar of the main view\">Järjestä</string>\n    <string name=\"sort_alphabetically\">Myöntäjä (A - Ö)</string>\n    <string name=\"sort_alphabetically_reverse\">Myöntäjä (Ö - A)</string>\n    <string name=\"sort_alphabetically_name\">Tilin nimi (A-Ö)</string>\n    <string name=\"sort_alphabetically_name_reverse\">Tilin nimi (Ö-A)</string>\n    <string name=\"sort_usage_count\">Käyttömäärä</string>\n    <string name=\"sort_last_used\">Viimeksi käytetyt</string>\n    <string name=\"sort_custom\">Mukautettu</string>\n    <string name=\"last_used\">Viimeksi käytetyt</string>\n    <string name=\"last_used_never\">ei koskaan</string>\n    <string name=\"new_group\">Uusi ryhmä…</string>\n    <string name=\"group\">Ryhmä</string>\n    <string name=\"group_name_hint\">Ryhmän nimi</string>\n    <string name=\"preference_manage_groups\">Muokkaa ryhmiä</string>\n    <string name=\"preference_manage_groups_summary\">Hallitse ja poista ryhmiäsi täällä</string>\n    <string name=\"preference_reset_usage_count\">Nollaa käyttömäärä</string>\n    <string name=\"preference_reset_usage_count_summary\">Nollaa kaikkien holvisi kohteiden käyttömäärä</string>\n    <string name=\"preference_reset_usage_count_dialog\">Haluatko varmasti nollata kaikkien holvisi kohteiden käyttömäärän?</string>\n    <string name=\"note\" comment=\"Users can add a note to an entry\">Muistiinpano</string>\n    <string name=\"clear\">Tyhjennä</string>\n    <string name=\"dialog_duplicate_entry_overwrite_title\">Korvaa olemassa olevat kohteet</string>\n    <string name=\"dialog_duplicate_entry_overwrite_subtitle\">Korvaa olemassa olevat kohteet uusilla. Tätä toimintoa ei voi kumota</string>\n    <string name=\"dialog_duplicate_entry_suffix_title\">Lisää pääte</string>\n    <string name=\"dialog_duplicate_entry_cancel_title\">Peruuta tallennus</string>\n    <string name=\"dialog_duplicate_entry_overwrite_dialog_title\">Vahvista poisto</string>\n    <string name=\"pref_haptic_feedback_summary\">Laitteesi värisee, kun koodit päivittyvät</string>\n    <string name=\"pref_haptic_feedback_title\">Haptinen palaute</string>\n    <string name=\"pref_highlight_entry_title\">Korosta todennuskoodit napauttamalla</string>\n    <string name=\"pref_highlight_entry_summary\">Tee todennuskoodeista helpompi erottaa toisistaan korostamalla niitä tilapäisesti napauttamalla</string>\n    <string name=\"pref_groups_multiselect_title\">Valitse useita ryhmiä</string>\n    <string name=\"pref_groups_multiselect_summary\">Salli useiden ryhmien valitseminen samanaikaisesti</string>\n    <string name=\"pref_minimize_on_copy_title\">Pienennä kopioidessa</string>\n    <string name=\"pref_minimize_on_copy_summary\">Pienennä sovellus todennuskoodin kopioinnin jälkeen</string>\n    <string name=\"pref_copy_behavior_title\">Kopioi todennuskoodit leikepöydälle</string>\n    <string name=\"pref_search_behavior_title\">Hakukäyttäytyminen</string>\n    <string name=\"pref_pause_entry_title\">Jäädytä todennuskoodit napauttamalla</string>\n    <string name=\"pref_pause_entry_summary\">Keskeytä todennuskoodien automaattinen päivitys napauttamalla niitä. Todennuskoodit eivät päivity automaattisesti, niin kauan kun ne ovat valittuina. Vaatii \\\"Korosta todennuskoodit napauttamalla\\\" tai \\\"Paljasta napauttamalla\\\" -asetusten käyttöönottoa.</string>\n    <string name=\"pin_keyboard_description\">Ota PIN-näppäimistö käyttöön antamalla salasanasi. Tämä toimii vain, jos salasanasi koostuu pelkästään numeroista</string>\n    <string name=\"pin_keyboard_error\">Virhe PIN-näppäimistön käyttöönotossa</string>\n    <string name=\"pin_keyboard_error_description\">PIN-näppäimistön asetus ei onnistu. Salasanasi tulee koostua pelkästään numeroista.</string>\n    <string name=\"pin_keyboard_disabled\">Salasana vaihdettu. PIN-näppäimistöä ei enää näytetä.</string>\n    <string name=\"selected\">Valittu</string>\n    <string name=\"dark_theme_title\">Tumma teema</string>\n    <string name=\"light_theme_title\">Vaalea teema</string>\n    <string name=\"amoled_theme_title\">AMOLED-teema</string>\n    <string name=\"system_theme_title\">Seuraa järjestelmän teemaa</string>\n    <string name=\"system_amoled_theme_title\">Seuraa järjestelmän teemaa (AMOLED)</string>\n    <string name=\"normal_viewmode_title\">Normaali</string>\n    <string name=\"compact_mode_title\">Tiivis</string>\n    <string name=\"small_mode_title\">Pieni</string>\n    <string name=\"tiles_mode_title\">Laatat</string>\n    <string name=\"unknown_issuer\">Tuntematon myöntäjä</string>\n    <string name=\"unknown_account_name\">Tuntematon tilinimi</string>\n    <plurals name=\"import_error_dialog\">\n        <item quantity=\"one\">Aegis ei voinut tuoda %d todennuskoodia. Nämä todennuskoodi ohitetaan. Paina \\'tiedot\\' nähdäksesi lisätietoa virheestä.</item>\n        <item quantity=\"other\">Aegis ei voinut tuoda %d todennuskoodia. Nämä todennuskoodit ohitetaan. Paina \\'tiedot\\' nähdäksesi lisätietoa virheistä.</item>\n    </plurals>\n    <string name=\"unable_to_process_deeplink\">Syvää linkkiä ei voitu käsitellä</string>\n    <string name=\"unable_to_read_qrcode_file\">Tiedoston %s QR-koodia ei voitu lukea ja käsitellä.</string>\n    <string name=\"unable_to_process_shared_text\">Jaettua tekstiä ei voitu käsitellä OTP:nä</string>\n    <string name=\"unable_to_read_qrcode_files\">Joitakin QR-koodeja ei voitu lukea ja käsitellä. Vain %1$d/%2$d kohdetta tuodaan.</string>\n    <string name=\"unable_to_generate_qrcode\">QR-koodia ei voitu luoda</string>\n    <string name=\"select_picture\">Valitse kuva</string>\n    <string name=\"select_icon\">Valitse kuvake</string>\n    <string name=\"tile_open_vault\" comment=\"label for a quick settings tile that opens the app when tapped\">Avaa holvi</string>\n    <string name=\"tile_open_scanner\" comment=\"label for a quick settings tile that opens the QR code scanner when tapped\">Avaa skanneri</string>\n    <string name=\"toggle_checkboxes\">Kytke valintaruudut</string>\n    <string name=\"search\">Haku</string>\n    <string name=\"channel_name_lock_status\">Lukituksen tila</string>\n    <string name=\"channel_description_lock_status\">Aegis voi luoda pysyvän ilmoituksen, joka ilmoittaa sinulle, kun holvi on lukittu</string>\n    <string name=\"vault_unlocked_state\">Holvi on avattu. Lukitse napauttamalla.</string>\n    <string name=\"version\">Versio</string>\n    <string name=\"changelog\">Muutosloki</string>\n    <string name=\"whats_new\">Mitä uutta</string>\n    <string name=\"github_description\">Lähdekoodi, ongelmat ja tietoa</string>\n    <string name=\"license\">Lisenssi</string>\n    <string name=\"license_description\">Aegis Authenticatorilla on GPLv3-lisenssi</string>\n    <string name=\"third_party_licenses\">Kolmannen osapuolen lisenssit</string>\n    <string name=\"third_party_licenses_description\">Aegisin käyttämien kolmannen osapuolen kirjastojen lisenssit</string>\n    <string name=\"country_netherlands\">Alankomaat</string>\n    <string name=\"email_us\">Lähetä sähköpostia</string>\n    <string name=\"visit_website\">Käy verkkosivuillamme</string>\n    <string name=\"about_support\">Tuki</string>\n    <string name=\"support_rate\">Arvostele</string>\n    <string name=\"support_rate_description\">Tue meitä kirjoittamalla arvostelu Google Play Kauppaan</string>\n    <string name=\"webview_error\">Tämä laite ei tue WebView:tä, joka vaaditaan muutoslokin ja lisenssitietojen katselemiseksi. Siitä puuttuu järjestelmäkomponentti.</string>\n    <string name=\"email\">Sähköposti</string>\n    <string name=\"time_sync_warning_title\">Synkronoi aika automaattisesti</string>\n    <string name=\"time_sync_warning_message\">Aegis vaatii, että järjestelmän aika on synkronoitu oikeiden koodien luomiseksi. Vain muutaman sekunnin poikkeama voi johtaa virheellisiin koodeihin. Näyttää siltä, että laitettasi ei ole määritetty synkronoimaan aika automaattisesti. Haluatko tehdä niin nyt?</string>\n    <string name=\"time_sync_warning_disable\">Lopeta varoitus. Tiedän mitä teen.</string>\n    <string name=\"google_qr_export_unrelated\">Asiaankuulumaton QR-koodi löytyi. Yritä käynnistää skanneri uudelleen.</string>\n    <plurals name=\"google_qr_export_scanned\">\n        <item quantity=\"one\">%1$d/%2$d QR-koodi skannattu</item>\n        <item quantity=\"other\">%1$d/%2$d QR-koodia skannattu</item>\n    </plurals>\n    <string name=\"google_qr_export_unexpected\">Odotettiin QR-koodia #%1$d, mutta skannattiin #%2$d sen sijaan</string>\n    <string name=\"backup_error_bar_message\"><b>Holvin varmuuskopiointi epäonnistui äskettäin</b></string>\n    <string name=\"backup_error_dialog_details\" comment=\"The first parameter is the type of backup (e.g. built-in or Android backup). The second parameter is an elapsed time in the style of 'x seconds/minutes/days ago'.\">        Äskettäinen holvin varmuuskopiointiyritys %1$s käyttämällä epäonnistui, koska tapahtui virhe. Varmuuskopiointia yritettiin %2$s. Tarkista varmuuskopiointiasetukset varmistaaksesi, että varmuuskopiointi onnistuu.\n    </string>\n    <string name=\"backup_permission_error_dialog_details\" comment=\"The first parameter is the type of backup (e.g. built-in or Android backup). The second parameter is an elapsed time in the style of 'x seconds/minutes/days ago'.\">        Äskettäinen holvin varmuuskopiointiyritys %1$s käyttäen epäonnistui, koska Aegisilla ei ollut kirjoitusoikeutta varmuuskopiointikohteeseen. Varmuuskopiointia yritettiin %2$s. Tämä virhe voi ilmetä, jos olet siirtänyt tai nimennyt varmuuskopiointikohteen uudelleen tai jos olet hiljattain palauttanut Aegiksen varmuuskopiosta. Määritä varmuuskopiointikohde uudelleen.\n    </string>\n    <string name=\"backup_system_builtin\">Aegisin sisäänrakennetut automaattiset varmuuskopiot</string>\n    <string name=\"backup_system_android\">Androidin pilvivarmuuskopiointijärjestelmä</string>\n    <string name=\"backup_reminder_bar_message_with_latest\" comment=\"The parameter is an elapsed time in the style of 'x seconds/minutes/days ago'\">        Viimeisin varmuuskopiointi on vanhentunut (%s)\n    </string>\n    <string name=\"backup_reminder_bar_message\">        Muutoksia ei ole varmuuskopioitu\n    </string>\n    <string name=\"backup_reminder_bar_dialog_title\">Muutoksia ei ole varmuuskopioitu</string>\n    <string name=\"backup_reminder_bar_dialog_summary\">        Viimeaikaisia holvin muutoksia ei ole vielä varmuuskopioitu. On tärkeää varmuuskopioida säännöllisesti, jotta et menetä pääsyä tileihisi. Harkitse automaattisten varmuuskopiointien määrittämistä asetuksissa.\n    </string>\n    <string name=\"backup_reminder_bar_dialog_accept\">Määritä varmuuskopiot</string>\n    <string name=\"backup_plaintext_export_warning\"><b>Holvi vietiin äskettäin raakatekstinä</b></string>\n    <string name=\"pref_show_plaintext_warning_hint\">Älä näytä tätä varoitusta uudelleen</string>\n    <string name=\"backup_plaintext_warning_explanation\">Tämä varoitus näytetään, koska veit äskettäin salaamattoman kopion holvistasi. Varmistaaksemme todennuskoodiesi turvallisuuden, suosittelemme poistamaan tiedoston heti, kun sitä ei enää tarvita.</string>\n    <string name=\"switch_camera\">Vaihda kameraa</string>\n    <string name=\"empty_list\">Ei näytettäviä koodeja. Aloita kohteiden lisääminen napauttamalla plusmerkkiä oikeassa alakulmassa</string>\n    <string name=\"empty_list_title\">Ei kohteita</string>\n    <string name=\"empty_group_list\">Ei näytettäviä ryhmiä. Lisää ryhmiä kohteen muokkausruudun kautta</string>\n    <string name=\"empty_group_list_title\">Ei ryhmiä</string>\n    <string name=\"no_icon_packs\">Kuvakepaketteja ei ole vielä tuotu. Tuo yksi napauttamalla plus-merkkiä. Vihje: kokeile <a href=\"https://aegis-icons.github.io\">aegis-iconseja</a>.</string>\n    <string name=\"no_icon_packs_title\">Ei kuvakepaketteja</string>\n    <string name=\"pick_icon\">Valitse kuvake</string>\n    <string name=\"uncategorized\">Luokittelematon</string>\n    <string name=\"done\">Valmis</string>\n    <plurals name=\"qr_count\">\n        <item quantity=\"one\">%d / %d QR-koodi</item>\n        <item quantity=\"other\">%d / %d QR-koodia</item>\n    </plurals>\n    <string name=\"next\">Seuraava</string>\n    <string name=\"previous\">Edellinen</string>\n    <string name=\"copy_uri\">Kopioi URI</string>\n    <string name=\"unable_to_copy_uri_to_clipboard\">URI:a ei voitu kopioida leikepöydälle</string>\n    <string name=\"uri_copied_to_clipboard\">URI kopioitiin leikepöydälle</string>\n    <string name=\"transfer_entry_description\">Skannaa tämä QR-koodi todennussovelluksella, johon haluat siirtää tämän kohteen</string>\n    <string name=\"transfer_entry_brightness\">Napauta QR-koodia muuttaaksesi koko näytön kirkkautta</string>\n    <string name=\"google_auth_compatible_transfer_description\">Skannaa nämä QR-koodit Aegisilla tai Google Authenticatorilla.\\n\\nGoogle Authenticator -sovelluksen rajoitusten vuoksi, vain SHA1-suojausta ja 6-numeroisia koodeja tuottavat TOTP- ja HOTP-todennuskoodit sisällytetään</string>\n    <string name=\"password_strength_very_weak\">Erittäin heikko</string>\n    <string name=\"password_strength_weak\">Heikko</string>\n    <string name=\"password_strength_fair\">Kohtalainen</string>\n    <string name=\"password_strength_good\">Hyvä</string>\n    <string name=\"password_strength_strong\">Vahva</string>\n    <string name=\"password_strength_unknown\">Salasana liian pitkä vahvuusanalyysia varten</string>\n    <string name=\"pref_pin_keyboard_title\">Käytä PIN-näppäimistöä lukitusnäytöllä</string>\n    <string name=\"pref_pin_keyboard_summary\">Ota tämä käyttöön, jos haluat käyttää PIN-näppäimistöä lukitusnäytöllä. Tämä toimii vain numeerisilla salasanoilla</string>\n    <string name=\"title_activity_preferences\">Asetukset</string>\n    <string name=\"title_activity_manage_groups\">Hallitse ryhmiä</string>\n    <string name=\"title_activity_transfer\">Siirrä kohteita</string>\n    <string name=\"title_activity_about\">Tietoja</string>\n    <string name=\"title_activity_edit_entry\">Muokkaa kohdetta</string>\n    <string name=\"title_activity_scan_qr\">Skannaa QR-koodi</string>\n    <string name=\"title_activity_import_entries\">Tuo kohteet</string>\n    <string name=\"title_activity_assign_icons\">Määritä kuvakkeet</string>\n    <string name=\"title_activity_licenses\">Kolmannen osapuolen lisenssit</string>\n    <string name=\"dialog_wipe_entries_title\">Tyhjennä kohteet</string>\n    <string name=\"dialog_wipe_entries_message\">Holvisi sisältää jo kohteita. Haluatko poistaa nämä kohteet ennen tämän tiedoston tuontia?\\n\\n<b>Tehdessäsi näin menetät pysyvästi pääsyn holvin olemassa oleviin kohteisiin.</b></string>\n    <string name=\"dialog_wipe_entries_checkbox\">Tyhjennä holvin sisältö</string>\n    <string name=\"panic_trigger_ignore_toast\">Aegis vastaanotti paniikkilaukaisimen, mutta asetus on poistettu käytöstä, ohitetaan</string>\n    <string name=\"pref_panic_trigger_title\">Poista holvi paniikkilaukaisimella</string>\n    <string name=\"pref_panic_trigger_summary\">Poista holvi kun paniikkilaukaisin saadaan Ripplestä</string>\n    <string name=\"import_vault\">Tuo Aegis-holvi</string>\n    <string name=\"import_vault_hint\">Haluatko tuoda toisesta 2FA-sovelluksesta? Suorita määritys ensin loppuun ja siirry sitten asetusvalikkoon.</string>\n    <plurals name=\"import_duplicate_toast\">\n        <item quantity=\"one\">%d mahdollisen kaksoiskappaleen valinta poistettiin. Tarkista kohdelista.</item>\n        <item quantity=\"other\">%d mahdollisen kaksoiskappaleen valinta poistettiin. Tarkista kohdelista.</item>\n    </plurals>\n    <string name=\"importer_help_2fas\">Anna 2FAS Authenticatorin varmuuskopiotiedosto.</string>\n    <string name=\"importer_help_aegis\">Anna Aegisisin vienti-/varmuuskopiotiedosto.</string>\n    <string name=\"importer_help_authenticator_plus\">Anna Authenticator Plus -varmuuskopiotiedosto, jonka saat menemällä <b>Asetukset -&gt;Varmuuskopiointi ja palautus -&gt; Vie teksti- tai HTML-tiedostona</b>.</string>\n    <string name=\"importer_help_authy\">Anna kopio tiedostosta <b>/data/data/com.authy.authy/shared_prefs/com.authy.storage.tokens.authenticator.xml</b>, joka sijaitsee Authyn sisäisessä tallennushakemistossa.</string>\n    <string name=\"importer_help_andotp\">Anna andOTP:n vienti-/varmuuskopiotiedosto.</string>\n    <string name=\"importer_help_bitwarden\">Anna Bitwardenin vienti-/varmuuskopiotiedosto. Salattuja tiedostoja ei tueta.</string>\n    <string name=\"importer_help_battle_net_authenticator\">Anna kopio tiedostosta <b>/data/data/com.blizzard.messenger/shared_prefs/com.blizzard.messenger.authenticator_preferences.xml</b>, joka sijaitsee Battle.net Authenticatorin sisäisessä tallennushakemistossa.</string>\n    <string name=\"importer_help_duo\">Anna kopio tiedostosta <b>/data/data/com.duosecurity.duomobile/files/duokit/accounts.json</b>, joka sijaitsee DUO:n sisäisessä tallennushakemistossa.</string>\n    <string name=\"importer_help_ente_auth\">Anna Ente Auth -vientitiedosto. Vain salaamattomia tiedostoja tuetaan tällä hetkellä.</string>\n    <string name=\"importer_help_freeotp\">FreeOTP 2: Toimita varmuuskopiotiedosto.\\nFreeOTP 1.x: Toimita kopio tiedostosta <b>/data/data/org.fedorahosted.freeotp/shared_prefs/tokens.xml</b>, joka sijaitsee FreeOTP:n sisäisessä tallennushakemistossa.</string>\n    <string name=\"importer_help_freeotp_plus\">Anna FreeOTP+:n vientitiedosto.</string>\n    <string name=\"importer_warning_title_freeotp2\">FreeOTP 2 -yhteensopivuus</string>\n    <string name=\"importer_warning_message_freeotp2\">FreeOTP 2:ssa on useita ongelmia, jotka voivat johtaa vioittuneisiin varmuuskopioihin. Aegis yrittää pelastaa mahdollisimman monta kohdetta, mutta on mahdollista, että joidenkin tai jopa kaikkien kohteiden tuonti epäonnistuu.</string>\n    <string name=\"importer_help_google_authenticator\"><b>Vain Google Authenticator v5.10 tai vanhemman tietokantatiedostoja tuetaan</b>.\\n\\nAnna kopio kohteesta <b>/data/data/com.google.android.apps.authenticator2/databases/databases</b>, joka sijaitsee Google Authenticatorin sisäisessä tallennushakemistossa.</string>\n    <string name=\"importer_help_microsoft_authenticator\">Anna kopio tiedostosta <b>/data/data/com.azure.authenticator/databases/PhoneFactor</b>, joka sijaitsee Microsoft Authenticatorin sisäisessä tallennushakemistossa.</string>\n    <string name=\"importer_help_plain_text\">Anna raakatekstitiedosto, joka sisältää Google Authenticatorin URIn jokaisella rivillä.</string>\n    <string name=\"importer_help_steam\"><b>Steamin versiota 3.0 ja uudempia ei tueta</b>. Toimita kopio tiedostosta <b>/data/data/com.valvesoftware.android.steam.community/files/Steamguard-*.json</b>, joka sijaitsee Steamin sisäisen tallennustilan hakemistossa.</string>\n    <string name=\"importer_help_stratum\">Toimita Starum-vientitiedosto, jonka löydät menemällä <b>Asetukset -&gt; Varmuuskopioi -&gt; Varmuuskopioi salattuun tiedostoon (suositus)</b>.</string>\n    <string name=\"importer_help_totp_authenticator\">Anna TOTP Authenticatorin vientitiedosto.</string>\n    <string name=\"importer_help_winauth\">Anna WinAuthin vientitiedosto.</string>\n    <string name=\"import_assign_icons_dialog_title\">Määritä kuvakkeet</string>\n    <string name=\"import_assign_icons_dialog_text\">Haluatko määrittää kuvakkeet tuoduille kohteille?</string>\n    <string name=\"importer_encrypted_exception_google_authenticator\">Salattu kohde ohitettiin: %s</string>\n    <string name=\"importer_help_direct\">Tuo %s -kohteet. Tämä edellyttää, että sovellus on asennettu laitteeseen, ja pääkäyttäjän oikeuksien myöntämistä Aegisille.</string>\n    <string name=\"groups\">Ryhmät</string>\n    <string name=\"pref_focus_search\">Keskitä haku sovelluksen avautuessa</string>\n    <string name=\"pref_focus_search_summary\">Keskitä hakukenttä heti kun sovellus avataan.</string>\n    <string name=\"pref_grouping_halves\">Puolikkaat</string>\n    <string name=\"pref_grouping_none\">Ei ryhmittelyä</string>\n    <string name=\"pref_grouping_size_two\">Kahden ryhmissä</string>\n    <string name=\"pref_grouping_size_three\">Kolmen ryhmissä</string>\n    <string name=\"pref_grouping_size_four\">Neljän ryhmissä</string>\n    <string name=\"pref_copy_behavior_never\">Ei koskaan</string>\n    <string name=\"pref_copy_behavior_single_tap\">Yksi napautus</string>\n    <string name=\"pref_copy_behavior_double_tap\">Kaksoisnapautus</string>\n    <string name=\"pref_account_name_position_hidden\">Piilotettu</string>\n    <string name=\"pref_account_name_position_end\">Myöntäjän vierellä</string>\n    <string name=\"pref_account_name_position_below\">Myöntäjän alla</string>\n    <plurals name=\"time_elapsed_seconds\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"one\">%d sekunti sitten</item>\n        <item quantity=\"other\">%d sekuntia sitten</item>\n    </plurals>\n    <plurals name=\"time_elapsed_minutes\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"one\">%d minuutti sitten</item>\n        <item quantity=\"other\">%d minuuttia sitten</item>\n    </plurals>\n    <plurals name=\"time_elapsed_hours\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"one\">%d tunti sitten</item>\n        <item quantity=\"other\">%d tuntia sitten</item>\n    </plurals>\n    <plurals name=\"time_elapsed_days\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"one\">%d päivä sitten</item>\n        <item quantity=\"other\">%d päivää sitten</item>\n    </plurals>\n    <plurals name=\"time_elapsed_years\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"one\">%d vuosi sitten</item>\n        <item quantity=\"other\">%d vuotta sitten</item>\n    </plurals>\n    <plurals name=\"dropdown_checkboxes_default_count\">\n        <item quantity=\"one\">%d kohde valittu</item>\n        <item quantity=\"other\">%d kohdetta valittu</item>\n    </plurals>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-fi-rFI-v29/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"system_theme_title\">Järjestelmän oletus</string>\n    <string name=\"system_amoled_theme_title\">Järjestelmän oletus (AMOLED)</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-fr-rFR/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources xmlns:tools=\"http://schemas.android.com/tools\">\n    <string name=\"action_settings\">Paramètres</string>\n    <string name=\"action_about\">À propos</string>\n    <string name=\"action_delete\">Supprimer</string>\n    <string name=\"action_transfer\">Transfert</string>\n    <string name=\"action_edit_icon\">Modifier l\\'icône</string>\n    <string name=\"action_reset_usage_count\">Réinitialiser le nombre d\\'utilisations</string>\n    <string name=\"action_reset_usage_count_dialog\">Êtes-vous sûr de vouloir définir le nombre d\\'utilisations de cette entrée à 0 ?</string>\n    <string name=\"action_default_icon\">Restaurer l\\'icône par défaut</string>\n    <string name=\"discard\">Annuler</string>\n    <string name=\"save\">Enregistrer</string>\n    <string name=\"all\">Tout</string>\n    <string name=\"issuer\">Émetteur</string>\n    <string name=\"yandex_pin\">PIN (4–16 chiffres)</string>\n    <string name=\"motp_pin\">Code PIN (4 chiffres)</string>\n    <string name=\"suggested\">Suggéré</string>\n    <string name=\"usage_count\">Nombre d\\'utilisations</string>\n    <string name=\"warning\">Attention</string>\n    <string name=\"pref_cat_appearance_app\">Application</string>\n    <string name=\"pref_cat_appearance_entries\">Entrées</string>\n    <string name=\"pref_cat_backups_android\">Android</string>\n    <string name=\"pref_cat_backups_auto\">Sauvegardes automatiques</string>\n    <string name=\"pref_section_behavior_title\">Comportement</string>\n    <string name=\"pref_section_behavior_summary\">Personnaliser le comportement lorsque vous interagissez avec la liste des entrées.</string>\n    <string name=\"pref_section_appearance_title\">Interface</string>\n    <string name=\"pref_section_appearance_summary\">Ajuster le thème, la langue et d\\'autres paramètres qui affectent l\\'interface de l\\'application.</string>\n    <string name=\"pref_section_security_title\">Sécurité</string>\n    <string name=\"pref_section_security_summary\">Configurer le chiffrement, le déverrouillage biométrique, le verrouillage automatique et d\\'autres paramètres de sécurité.</string>\n    <string name=\"pref_section_import_export_title\">Importer &amp; Exporter</string>\n    <string name=\"pref_section_import_export_summary\">Importer des sauvegardes d\\'Aegis ou d\\'autres applications d\\'authentification. Créez des exportations manuelles de votre coffre Aegis.</string>\n    <string name=\"pref_section_audit_log_title\">Journal d\\'audit</string>\n    <string name=\"pref_section_audit_log_summary\">Trouver une liste de tous les événements importants signalés qui se sont produits dans l\\'application.</string>\n    <string name=\"pref_section_backups_title\">Sauvegardes</string>\n    <string name=\"pref_section_backups_summary\">Configurer des sauvegardes automatiques à l\\'emplacement de votre choix ou activer la participation au système de sauvegarde cloud d\\'Android.</string>\n    <string name=\"pref_section_icon_packs\">Packs d\\'icônes</string>\n    <string name=\"pref_section_icon_packs_summary\">Gérer et importer des packs d\\'icônes</string>\n    <string name=\"pref_select_theme_title\">Thème</string>\n    <string name=\"pref_dynamic_colors_title\">Couleurs dynamiques</string>\n    <string name=\"pref_dynamic_colors_summary\">Appliquer une surcouche basée sur les couleurs de votre thème Android</string>\n    <string name=\"pref_view_mode_title\">Mode d\\'affichage</string>\n    <string name=\"pref_lang_title\">Langue</string>\n    <string name=\"pref_show_icons_title\">Afficher les icônes</string>\n    <string name=\"pref_show_icons_summary\">Afficher les icônes à côté de chaque entrée</string>\n    <string name=\"pref_code_group_size_title\">Regroupement des chiffres du code</string>\n    <string name=\"pref_code_group_size_summary\">Sélectionner le nombre de chiffres par lequel regrouper les codes</string>\n    <string name=\"pref_account_name_position_title\">Afficher le nom de compte</string>\n    <string name=\"pref_show_next_code_title\">Afficher le code suivant</string>\n    <string name=\"pref_show_next_code_summary\">Générer et afficher le code suivant à l\\'avance</string>\n    <string name=\"pref_expiration_state_title\">Indiquer quand les codes sont sur le point d\\'expirer</string>\n    <string name=\"pref_expiration_state_summary\">Changer la couleur des codes et les faire clignoter quand ils sont sur le point d\\'expirer</string>\n    <string name=\"pref_expiration_state_fallback\">Changer la couleur des codes quand ils sont sur le point d\\'expirer</string>\n    <string name=\"pref_shared_issuer_account_name_title\">Afficher le nom de compte seulement si nécessaire</string>\n    <string name=\"pref_shared_issuer_account_name_summary\">Afficher les noms de compte seulement lorsqu\\'ils partagent le même émetteur. Les autres noms de compte seront masqués.</string>\n    <string name=\"pref_account_name_position_summary_override\">Ce paramètre est remplacé par le mode d\\'affichage par tuiles. Le nom de compte sera affiché sous l\\'émetteur.</string>\n    <string name=\"pref_import_file_title\">Importer depuis un fichier</string>\n    <string name=\"pref_import_file_summary\">Importer des jetons depuis un fichier</string>\n    <string name=\"pref_android_backups_title\">Sauvegardes cloud d\\'Android</string>\n    <string name=\"pref_android_backups_summary\">Autoriser le système de sauvegarde cloud d\\'Android à inclure le coffre-fort d\\'Aegis dans ses sauvegardes. Ceci n\\'est pris en charge que pour les coffres-forts chiffrés.</string>\n    <string name=\"pref_android_backups_hint\"><i>Les sauvegardes device-to-device (D2D) sont toujours autorisées, indépendamment du paramétrage ci-dessus</i></string>\n    <string name=\"pref_backups_title\">Sauvegarder automatiquement le coffre-fort</string>\n    <string name=\"pref_backups_summary\">Créer automatiquement des sauvegardes du coffre-fort sur le stockage externe lorsque des modifications sont apportées. Ceci n\\'est pris en charge que pour les coffres-forts chiffrés.</string>\n    <string name=\"pref_backups_reminder_title\">Rappel de sauvegarde</string>\n    <string name=\"pref_backups_reminder_summary\">Afficher un rappel pour sauvegarder votre coffre-fort si vous n\\'avez pas sauvegardé vos dernières modifications.</string>\n    <string name=\"pref_backups_reminder_dialog_title\">Désactiver le rappel de sauvegarde</string>\n    <string name=\"pref_backups_reminder_dialog_summary\">Désactiver ce rappel signifie qu\\'Aegis ne vous dira pas si vous avez ou non des modifications qui ne sont pas encore sauvegardées. Cela vous expose au risque de perdre l\\'accès à vos jetons. Êtes-vous sûr de vouloir désactiver le rappel ?</string>\n    <string name=\"pref_backups_versioning_strategy_title\">Stratégie de sauvegarde</string>\n    <string name=\"pref_backups_versioning_strategy_keep_x_versions\">Conserver plusieurs versions</string>\n    <string name=\"pref_backups_versioning_strategy_single_backup\">Sauvegarde unique</string>\n    <string name=\"pref_backups_versioning_strategy_single_backup_warning\">La stratégie de sauvegarde sélectionnée n\\'est pas fiable et pas recommandée. Un seul échec de la sauvegarde pourrait entraîner la perte de votre unique sauvegarde.</string>\n    <string name=\"pref_backups_versioning_strategy_dialog_title\">Sélectionner une stratégie de sauvegarde</string>\n    <string name=\"pref_backups_location_title\">Emplacement de sauvegarde</string>\n    <string name=\"pref_backups_location_summary\">Les sauvegardes seront enregistrées dans</string>\n    <string name=\"pref_backup_location_summary\">La sauvegarde sera enregistrée dans</string>\n    <string name=\"pref_backups_trigger_title\">Déclencher la sauvegarde</string>\n    <string name=\"pref_backups_trigger_summary\">Déclencher manuellement une sauvegarde</string>\n    <string name=\"pref_backups_versions_title\">Nombre de versions à conserver</string>\n    <string name=\"pref_backups_versions_infinite\">\\u221E</string>\n    <plurals name=\"pref_backups_versions_summary\">\n        <item quantity=\"one\">Conserver %1$d version de la sauvegarde</item>\n        <item quantity=\"other\">Conserver %1$d versions de la sauvegarde</item>\n    </plurals>\n    <string name=\"pref_backups_versions_infinite_summary\">Conserver un nombre infini de versions de la sauvegarde</string>\n    <string name=\"pref_import_app_title\">Importer depuis une application</string>\n    <string name=\"pref_import_app_summary\">Importer des jetons depuis une application (nécessite un accès root)</string>\n    <string name=\"pref_export_title\">Exporter</string>\n    <string name=\"pref_export_summary\">Exporter le coffre-fort</string>\n    <string name=\"pref_password_reminder_title\">Rappel du mot de passe</string>\n    <string name=\"pref_google_auth_export_title\">Exporter pour Google Authenticator</string>\n    <string name=\"pref_google_auth_export_descriptor\">Génère un export de codes QR compatible avec Google Authenticator</string>\n    <string name=\"pref_google_auth_export_no_data\">Pas de données à exporter</string>\n    <plurals name=\"pref_google_auth_export_incompatible_entries\">\n        <item quantity=\"one\">%d entrée incompatible a été ignorée</item>\n        <item quantity=\"other\">%d entrées incompatibles ont été ignorées</item>\n    </plurals>\n    <string name=\"pref_password_reminder_summary\">Afficher un rappel %s pour saisir le mot de passe, afin que vous ne l\\'oubliez pas.</string>\n    <string name=\"pref_password_reminder_summary_disabled\">Désactivé</string>\n    <string name=\"pref_secure_screen_title\">Sécurité de l\\'écran</string>\n    <string name=\"pref_secure_screen_summary\">Bloquer les captures d\\'écran et autres tentatives de capture de l\\'écran dans l\\'application</string>\n    <string name=\"pref_tap_to_reveal_title\">Appuyer pour révéler</string>\n    <string name=\"pref_tap_to_reveal_summary\">Les jetons seront masqués par défaut. Appuyer sur le jeton pour révéler le code.</string>\n    <string name=\"pref_tap_to_reveal_time_title\">Délai pour appuyer pour révéler</string>\n    <string name=\"pref_auto_lock_title\">Verrouillage automatique</string>\n    <string name=\"pref_auto_lock_summary\">Quand %s</string>\n    <string name=\"pref_auto_lock_summary_disabled\">Désactivé</string>\n    <string name=\"pref_auto_lock_prompt\">Verrouiller automatiquement Aegis quand</string>\n    <string name=\"pref_auto_lock_type_back_button\">Le bouton Retour est appuyé</string>\n    <string name=\"pref_auto_lock_type_minimize\">L\\'application est minimisée</string>\n    <string name=\"pref_auto_lock_type_device_lock\">L\\'appareil est verrouillé</string>\n    <string name=\"pref_backup_password_category\">Sauvegarde &amp; export</string>\n    <string name=\"pref_backup_password_title\">Mot de passe séparé pour la sauvegarde &amp; l\\'export</string>\n    <string name=\"pref_backup_password_summary\">Si activé, le mot de passe utilisé pour déverrouiller l\\'application ne peut plus être utilisé pour déchiffrer les sauvegardes et les exports.</string>\n    <string name=\"pref_backup_password_change_title\">Changer le mot de passe pour la sauvegarde &amp; l\\'export</string>\n    <string name=\"pref_backup_password_change_summary\">Définir un nouveau mot de passe qui sera utilisé pour chiffrer le coffre-fort lors de la sauvegarde et l\\'export.</string>\n    <string name=\"pref_encryption_title\">Chiffrement</string>\n    <string name=\"pref_encryption_summary\">Chiffrer le coffre-fort et le déverrouiller avec un mot de passe ou la biométrie</string>\n    <string name=\"pref_biometrics_title\">Déverrouillage biométrique</string>\n    <string name=\"pref_biometrics_summary\">Autoriser l\\'authentification biométrique pour déverrouiller le coffre-fort</string>\n    <string name=\"pref_search_behavior_summary\">Recherchez par : %s</string>\n    <string name=\"pref_search_behavior_prompt\">Rechercher dans l\\'un des champs suivants</string>\n    <string name=\"pref_search_behavior_type_name\">Nom</string>\n    <string name=\"pref_search_behavior_type_issuer\">Émetteur</string>\n    <string name=\"pref_search_behavior_type_note\">Note</string>\n    <string name=\"pref_search_behavior_type_groups\">Groupes</string>\n    <string name=\"pref_set_password_title\">Changer le mot de passe</string>\n    <string name=\"pref_set_password_summary\">Définir un nouveau mot de passe dont vous aurez besoin pour déverrouiller votre coffre-fort</string>\n    <string name=\"no_events_title\">Aucun événement signalé</string>\n    <string name=\"no_events_description\">Aucun événement important n\\'a été signalé dans l\\'application</string>\n    <string name=\"event_title_vault_unlocked\">Coffre-fort déverrouillé</string>\n    <string name=\"event_description_vault_unlocked\">Le coffre-fort a été déverrouillé avec succès</string>\n    <string name=\"event_title_backup_created\">Sauvegarde créée</string>\n    <string name=\"event_description_backup_created\">Une sauvegarde du coffre-fort a été créée avec succès</string>\n    <string name=\"event_title_android_backup_created\">Sauvegarde créée par Android</string>\n    <string name=\"event_description_android_backup_created\">Une sauvegarde du coffre-fort a été créée avec succès par Android</string>\n    <string name=\"event_title_vault_exported\">Coffre-fort exporté</string>\n    <string name=\"event_description_vault_exported\">Une copie du coffre-fort a été exportée</string>\n    <string name=\"event_title_entry_shared\">Entrée partagée</string>\n    <string name=\"event_description_entry_shared\">Une entrée a été partagée</string>\n    <string name=\"event_title_vault_unlock_failed_password\">Le déverrouillage du coffre-fort a échoué (mot de passe)</string>\n    <string name=\"event_description_vault_unlock_failed_password\">Une tentative de déverrouillage du coffre-fort avec un mot de passe a échoué</string>\n    <string name=\"event_title_vault_unlock_failed_biometrics\">Le déverrouillage du coffre-fort a échoué (données biométriques)</string>\n    <string name=\"event_description_vault_unlock_failed_biometrics\">Une tentative de déverrouillage du coffre-fort avec des données biométriques a échoué</string>\n    <string name=\"event_unknown\">Type d\\'événement inconnu</string>\n    <string name=\"audit_log_entry_deleted\">(supprimé)</string>\n    <string name=\"today_at_time\">Ajourd\\'hui à %1$s</string>\n    <string name=\"day_of_week_at_time\">%1$s à %2$s</string>\n    <string name=\"export_encrypted\">Chiffrer le coffre-fort</string>\n    <string name=\"export_help\">Cette action exportera le coffre-fort à partir du stockage interne d\\'Aegis. Sélectionnez le format vers lequel vous souhaitez faire votre export :</string>\n    <string name=\"export_warning_unencrypted\">Vous êtes sur le point d\\'exporter une copie non chiffrée de votre coffre-fort Aegis. <b>Ce n\\'est pas recommandé</b>.</string>\n    <string name=\"export_warning_password\">Les exports sont chiffrés à l\\'aide d\\'un mot de passe séparé configuré dans les paramètres de sécurité.</string>\n    <string name=\"understand_risk_accept\">Je comprends le risque</string>\n    <string name=\"export_format_aegis\">Aegis (.JSON)</string>\n    <string name=\"export_format_google_auth_uri\">Fichier texte (.TXT)</string>\n    <string name=\"export_format_html\">Page Web (.HTML)</string>\n    <string name=\"export_format_hint\">Format d\\'export</string>\n    <string name=\"export_all_groups\">Exporter tous les groupes</string>\n    <string name=\"export_choose_groups\">Sélectionnez les groupes à exporter</string>\n    <plurals name=\"export_groups_selected_count\">\n        <item quantity=\"one\">%d groupe sélectionné</item>\n        <item quantity=\"other\">%d groupes sélectionnés</item>\n    </plurals>\n    <string name=\"export_no_groups_selected\">Aucun groupe sélectionné pour l\\'export</string>\n    <string name=\"export_html_title\" comment=\"The title of an HTML export document\">Export Aegis Authenticator</string>\n    <string name=\"choose_authentication_method\">Sécurité</string>\n    <string name=\"authentication_method_explanation\">Aegis est une application d\\'authentification à deux facteurs (2FA) axée sur la sécurité. Les jetons sont stockés dans un coffre-fort, qui peut être éventuellement chiffré avec un mot de passe de votre choix. Si un attaquant obtient votre fichier de coffre-fort chiffré, il ne pourra pas accéder au contenu sans connaître le mot de passe.\\n\\nNous avons présélectionné l\\'option que nous pensons la plus adaptée à votre appareil.</string>\n    <string name=\"authentication_method_none\">Aucun</string>\n    <string name=\"authentication_method_none_description\">Aucun mot de passe n\\'est nécessaire pour déverrouiller le coffre-fort et il ne sera pas chiffré. <b>Cette option n\\'est pas recommandée</b>.</string>\n    <string name=\"authentication_method_password\">Mot de passe</string>\n    <string name=\"authentication_method_password_description\">Un mot de passe est nécessaire pour déverrouiller le coffre-fort.</string>\n    <string name=\"authentication_method_password_explanation\">Attention : Si vous oubliez votre mot de passe, vous perdrez définitivement l\\'accès à vos jetons. Il n\\'y a aucun moyen de les récupérer sans le mot de passe.</string>\n    <string name=\"authentication_method_biometrics\">Biométrie</string>\n    <string name=\"authentication_method_biometrics_description\">En plus d\\'un mot de passe, les données biométriques enregistrées sur cet appareil, comme une empreinte digitale ou votre visage, peuvent être utilisées pour déverrouiller le coffre-fort.</string>\n    <string name=\"authentication\">Déverrouiller le coffre-fort</string>\n    <string name=\"authentication_multiline\" comment=\"The newline in the middle is used for aesthetic purposes\">Déverrouiller\\nle coffre-fort</string>\n    <string name=\"auth_use_biometrics\">Ou appuyez ici pour utiliser la <font fgcolor=\"#FF0D86C1\">biométrie</font></string>\n    <string name=\"set_password\">Veuillez saisir un mot de passe</string>\n    <string name=\"set_group\">Veuillez saisir un nom de groupe</string>\n    <string name=\"set_number\">Veuillez saisir un nombre</string>\n    <string name=\"set_password_confirm\">Veuillez confirmer le mot de passe</string>\n    <string name=\"invalid_password\">Le mot de passe est incorrect</string>\n    <string name=\"invalidated_biometrics\">Un changement dans les paramètres de sécurité de votre appareil a été détecté. Veuillez aller dans \\\"Aegis -&gt; Paramètres -&gt; Sécurité -&gt; Déverrouillage biométrique\\\" pour désactiver et réactiver le déverrouillage biométrique.</string>\n    <string name=\"password_reminder\">Veuillez saisir votre mot de passe. Nous vous demandons de le faire de temps en temps afin que vous ne l\\'oubliez pas.</string>\n    <string name=\"password_reminder_dialog_title\">Déverrouillage biométrique par défaut</string>\n    <string name=\"password_reminder_dialog_message\">Nous vous demandons de temps en temps de saisir votre mot de passe à la place afin de nous assurer que vous ne ne l\\'avez pas oublié et que l\\'accès à votre coffre-fort ne soit pas bloqué. Après avoir saisi votre mot de passe une fois, Aegis utilisera de nouveau le déverrouillage biométrique par défaut jusqu\\'à ce qu\\'il soit temps pour un autre rappel de mot de passe.</string>\n    <string name=\"password_reminder_freq_never\">Jamais</string>\n    <string name=\"password_reminder_freq_weekly\">Toutes les semaines</string>\n    <string name=\"password_reminder_freq_biweekly\">Toutes les deux semaines</string>\n    <string name=\"password_reminder_freq_monthly\">Tous les mois</string>\n    <string name=\"password_reminder_freq_quarterly\">Tous les trois mois</string>\n    <string name=\"enter_password_2fas_message\">Il semble que cette sauvegarde 2FAS soit chiffrée. Veuillez saisir le mot de passe ci-dessous.</string>\n    <string name=\"enter_password_authy_message\">Il semble que vos jetons Authy soient chiffrés. Veuillez fermer Aegis, ouvrir Authy et déverrouiller les jetons avec votre mot de passe. Au lieu de cela, Aegis peut également tenter de déchiffrer vos jetons Authy pour vous si vous entrez votre mot de passe ci-dessous.</string>\n    <string name=\"enter_password_aegis_title\">Veuillez saisir le mot de passe pour l\\'importation</string>\n    <string name=\"period_hint\">Période (secondes)</string>\n    <string name=\"algorithm_hint\">Fonction de hachage</string>\n    <string name=\"type\">Type</string>\n    <string name=\"share\">Partager</string>\n    <string name=\"yes\">Oui</string>\n    <string name=\"no\">Non</string>\n    <string name=\"undo\">Annuler</string>\n    <string name=\"unlock\">Déverrouiller</string>\n    <string name=\"advanced\">Avancé</string>\n    <string name=\"counter\">Compteur</string>\n    <string name=\"digits\">Chiffres</string>\n    <string name=\"secret\">Code secret</string>\n    <string name=\"scan\">Scanner code QR</string>\n    <string name=\"scan_image\">Scanner image</string>\n    <string name=\"enter_manually\">Saisir manuellement</string>\n    <string name=\"set_up_biometric\">Configurer le déverrouillage biométrique</string>\n    <string name=\"copy\">Copier</string>\n    <string name=\"edit\">Modifier</string>\n    <string name=\"select_all\">Tout sélectionner</string>\n    <string name=\"assign_icons\">Association des icônes</string>\n    <string name=\"assign_groups\">Associer au groupe</string>\n    <string name=\"assign_groups_dialog_summary\">Sélectionnez un groupe auquel vous souhaitez assigner les entrées sélectionnées.</string>\n    <string name=\"assign_groups_dialog_dropdown\">Sélectionner groupe</string>\n    <string name=\"favorite\" comment=\"Verb\">Ajouter aux favoris</string>\n    <string name=\"unfavorite\" comment=\"Verb\">Retirer des favoris</string>\n    <string name=\"error_all_caps\">ERREUR</string>\n    <string name=\"password\">Mot de passe</string>\n    <string name=\"confirm_password\">Confirmer mot de passe</string>\n    <string name=\"show_password\">Afficher le mot de passe</string>\n    <string name=\"new_entry\">Nouvelle entrée</string>\n    <string name=\"add_new_entry\">Ajouter une nouvelle entrée</string>\n    <string name=\"unlock_vault_error\">Impossible de déverrouiller le coffre-fort</string>\n    <string name=\"unlock_vault_error_description\">Mot de passe incorrect. Assurez-vous de ne pas avoir fait de faute de frappe lors de la saisie de votre mot de passe.</string>\n    <string name=\"password_equality_error\">Les mots de passe doivent être identiques et non vides</string>\n    <string name=\"snackbar_authentication_method\">Veuillez sélectionner une méthode d\\'authentification</string>\n    <string name=\"encrypting_vault\">Chiffrement du coffre-fort</string>\n    <string name=\"exporting_vault\">Export du coffre-fort</string>\n    <string name=\"optimizing_icon\">Optimisation de l\\'icône</string>\n    <string name=\"optimizing_icon_multiple\">Optimisation des icônes %1$d/%2$d</string>\n    <string name=\"reading_file\">Lecture du fichier</string>\n    <string name=\"requesting_root_access\">Demande d\\'accès root</string>\n    <string name=\"analyzing_qr\">Analyse du code QR</string>\n    <string name=\"analyzing_qr_multiple\">Analyse du code QR %1$d/%2$d (%3$s)</string>\n    <plurals name=\"added_new_entries\">\n        <item quantity=\"one\">Ajout de %d nouvelle entrée dans le coffre-fort</item>\n        <item quantity=\"other\">Ajout de %d nouvelles entrées dans le coffre-fort</item>\n    </plurals>\n    <string name=\"importing_icon_pack\">Import du pack d\\'icônes</string>\n    <string name=\"delete_entry\">Supprimer entrée</string>\n    <string name=\"delete_entry_description\">Êtes-vous sûr de vouloir supprimer cette entrée ?</string>\n    <string name=\"delete_entry_explanation\">Cette action ne désactive pas l\\'authentification à deux facteurs (2FA) pour :\\n<b>%s</b>\\n\\nPour éviter de perdre l\\'accès, assurez-vous que vous avez désactivé la 2FA ou que vous avez un autre moyen de générer des codes pour ce service.</string>\n    <string name=\"delete_entries\">Supprimer les entrées</string>\n    <plurals name=\"delete_entries_description\">\n        <item quantity=\"one\">Êtes-vous sûr de vouloir supprimer %d entrée ?</item>\n        <item quantity=\"other\">Êtes-vous sûr de vouloir supprimer %d entrées ?</item>\n    </plurals>\n    <string name=\"discard_changes\">Annuler les modifications ?</string>\n    <string name=\"discard_changes_description\">Vos modifications n\\'ont pas été enregistrées</string>\n    <string name=\"saving_profile_error\">Erreur lors de l\\'enregistrement du profil</string>\n    <string name=\"saving_assign_icons_error\">Erreur lors de l\\'association des icônes</string>\n    <string name=\"welcome\">Bienvenue</string>\n    <string name=\"app_description\">Aegis est une application d\\'authentification à deux facteurs (2FA) gratuite, sécurisée et open source</string>\n    <string name=\"setup_completed\">Configuration terminée</string>\n    <string name=\"setup_completed_description\">Aegis a été configuré et est prêt à être utilisé.</string>\n    <string name=\"vault_not_found\">Coffre-fort introuvable, lancement de la configuration…</string>\n    <string name=\"copied\">Copié</string>\n    <string name=\"errors_copied\">Erreurs copiées dans le presse-papier</string>\n    <string name=\"version_copied\">Version copiée dans le presse-papier</string>\n    <string name=\"error_required_field\">Ce champ est obligatoire</string>\n    <string name=\"error_occurred\">Une erreur s\\'est produite</string>\n    <string name=\"decryption_error\">Une erreur est survenue en essayant de déverrouiller le coffre-fort</string>\n    <string name=\"decryption_corrupt_error\">Une erreur est survenue en essayant de déverrouiller le coffre-fort. Le fichier de votre coffre-fort est peut-être corrompu.</string>\n    <string name=\"saving_error\">Une erreur est survenue en essayant d\\'enregistrer le coffre-fort</string>\n    <string name=\"vault_init_error\">Une erreur est survenue en essayant d\\'initialiser le coffre-fort</string>\n    <string name=\"vault_load_error\">Une erreur est survenue en essayant de charger le coffre-fort</string>\n    <string name=\"biometric_decrypt_error\">Une erreur est survenue en essayant de déchiffrer le coffre-fort avec l\\'authentification biométrique. Cela ne se produit généralement que si les paramètres de sécurité de votre appareil ont été modifiés. Veuillez déverrouiller le coffre-fort avec votre mot de passe et reconfigurer l\\'authentification biométrique dans les paramètres d\\'Aegis.</string>\n    <string name=\"biometric_init_error\">Une erreur est survenue lors de la préparation de l\\'authentification biométrique. Cela ne se produit généralement que si les paramètres de sécurité de votre appareil ont été modifiés. Veuillez déverrouiller le coffre-fort avec votre mot de passe et reconfigurer l\\'authentification biométrique dans les paramètres d\\'Aegis.</string>\n    <string name=\"disable_encryption\">Désactiver le chiffrement</string>\n    <string name=\"disable_encryption_description\">Êtes-vous sûr de vouloir désactiver le chiffrement ? Cela entraînera l\\'enregistrement du coffre-fort en texte brut. <b>Les sauvegardes automatiques seront également désactivées</b>.</string>\n    <string name=\"enable_encryption_error\">Une erreur est survenue lors de l\\'activation du chiffrement</string>\n    <string name=\"disable_encryption_error\">Une erreur est survenue lors de la désactivation du chiffrement</string>\n    <string name=\"backup_successful\">La sauvegarde a été planifiée avec succès</string>\n    <string name=\"backup_error\">Une erreur est survenue en essayant de créer une sauvegarde</string>\n    <string name=\"backup_status_success\">La dernière sauvegarde a réussi : %s</string>\n    <string name=\"backup_status_failed\">La dernière sauvegarde a échoué : %s</string>\n    <string name=\"backup_status_none\">Aucune sauvegarde n\\'a encore été faite</string>\n    <string name=\"backup_warning_password\">Les sauvegardes sont chiffrées à l\\'aide d\\'un mot de passe séparé configuré dans les paramètres de sécurité</string>\n    <string name=\"documentsui_error\">DocumentsUI semble être absent de votre appareil. Il s\\'agit d\\'un composant système important nécessaire à la sélection et à la création de documents. Si vous avez utilisé un outil pour &quot;nettoyer&quot; votre appareil, vous l\\'avez peut-être supprimé accidentellement et devrez le réinstaller.</string>\n    <string name=\"icon_pack_import_error\">Une erreur est survenue lors de l\\'import d\\'un pack d\\'icônes</string>\n    <string name=\"icon_pack_import_exists_error\">Le pack d\\'icônes que vous essayez d\\'importer existe déjà. Voulez-vous l\\'écraser ?</string>\n    <string name=\"icon_pack_delete_error\">Une erreur est survenue lors de la suppression d\\'un pack d\\'icônes</string>\n    <plurals name=\"icon_pack_info\">\n        <item quantity=\"one\">%d icône</item>\n        <item quantity=\"other\">%d icônes</item>\n    </plurals>\n    <string name=\"icon_custom\">Personnalisé</string>\n    <string name=\"permission_denied\">Autorisation refusée</string>\n    <string name=\"andotp_new_format\">Nouveau format (v0.6.3 ou plus récent) </string>\n    <string name=\"andotp_old_format\">Ancien format (v0.6.2 ou plus ancien) </string>\n    <string name=\"choose_andotp_importer\">Quel est le format du fichier de sauvegarde andOTP ?</string>\n    <string name=\"choose_totpauth_importer\">Cette sauvegarde TOTP Authenticator est-elle chiffrée avec un mot de passe ?</string>\n    <string name=\"choose_application\">Sélectionnez l\\'application depuis laquelle vous souhaitez importer</string>\n    <string name=\"choose_theme\">Sélectionner le thème que vous désirez</string>\n    <string name=\"choose_account_name_position\">Sélectionner la position que vous désirez pour le nom de compte</string>\n    <string name=\"choose_view_mode\">Sélectionner le mode d\\'affichage que vous désirez</string>\n    <string name=\"choose_copy_behavior\">Sélectionner le comportement de copie que vous désirez</string>\n    <string name=\"parsing_file_error\">Une erreur est survenue en essayant d\\'analyser le fichier</string>\n    <string name=\"file_not_found\">Erreur : Fichier introuvable</string>\n    <string name=\"reading_file_error\">Une erreur est survenue en essayant de lire le fichier</string>\n    <string name=\"app_lookup_error\">Erreur: l\\'application n\\'est pas installée</string>\n    <string name=\"app_version_error\">La version de %s installée n\\'est pas prise en charge. Les versions récentes ont commencé à chiffrer certains fichiers dans le répertoire de stockage interne, rendant Aegis incapable d\\'accéder aux informations dont il a besoin pour l\\'importation. Tenter d\\'importer est susceptible de provoquer une erreur. Souhaitez-vous continuer quand même ?</string>\n    <string name=\"root_error\">Erreur : Impossible d\\'obtenir l\\'accès root</string>\n    <plurals name=\"imported_entries_count\">\n        <item quantity=\"one\">%d entrée importée</item>\n        <item quantity=\"other\">%d entrées importées</item>\n    </plurals>\n    <plurals name=\"entries_shown\">\n        <item quantity=\"one\">Affichage de %d entrée</item>\n        <item quantity=\"other\">Affichage de %d entrées</item>\n    </plurals>\n    <string name=\"intro_import_error_title\">Une erreur est survenue lors de l\\'importation du coffre-fort</string>\n    <string name=\"import_error_title\">Une ou plusieurs erreurs sont survenues lors de l\\'importation</string>\n    <string name=\"exporting_vault_error\">Une erreur est survenue en essayant d\\'exporter le coffre-fort</string>\n    <string name=\"exported_vault\">Le coffre-fort a été exporté</string>\n    <string name=\"encryption_set_password_error\">Une erreur est survenue en essayant de définir le mot de passe.</string>\n    <string name=\"encryption_enable_biometrics_error\">Une erreur est survenue lors de l\\'activation du déverrouillage biométrique. Certains appareils ont de mauvaises implémentations de l\\'authentification biométrique et il est probable que le vôtre soit l\\'un d\\'entre eux. Envisagez plutôt de passer à une configuration avec mot de passe uniquement.</string>\n    <string name=\"no_cameras_available\">Aucun appareil photo disponible</string>\n    <string name=\"read_qr_error\">Une erreur est survenue en essayant de lire le code QR</string>\n    <string name=\"read_qr_error_phonefactor\">Aegis n\\'est pas compatible avec l\\'algorithme d\\'authentification à deux facteurs (2FA) propriétaire de Microsoft. Veuillez vous assurer de sélectionner \\\"Configurer l\\'application sans notification\\\" lors de la configuration de la 2FA dans Office 365.</string>\n    <string name=\"partial_google_auth_import\">Export Google Authenticator incomplet détecté</string>\n    <string name=\"partial_google_auth_import_warning\">Certains codes QR sont manquants dans votre export. Les codes suivants n\\'ont pas été trouvés :\\n\\n<b>%s</b>\\n\\nVous pouvez continuer à importer cet export partiel, mais nous vous recommandons de réessayer avec tous les codes QR afin de ne risquer de perdre l\\'accès à aucun jeton.</string>\n    <string name=\"missing_qr_code_descriptor\">• code QR %d</string>\n    <plurals name=\"import_partial_export_anyway\">\n        <item quantity=\"one\">Importer quand même %d jeton</item>\n        <item quantity=\"other\">Importer quand même %d jetons</item>\n    </plurals>\n    <string name=\"import_google_auth_failure\">L\\'import de l\\'export Google Authenticator a échoué</string>\n    <string name=\"unrelated_google_auth_batches_error\">L\\'export contient des informations pour un lot non lié. Essayez d\\'importer 1 lot à la fois.</string>\n    <string name=\"no_tokens_can_be_imported\">Aucun jeton ne peut être importé en conséquence</string>\n    <string name=\"unlocking_vault\">Déverrouillage du coffre-fort</string>\n    <string name=\"rename_group\">Renommer le groupe</string>\n    <string name=\"no_group_selection\">Si une entrée ne fait partie d\\'aucun groupe, elle peut être trouvée sous \\\"Aucun groupe\\\".</string>\n    <string name=\"remove_group\">Supprimer groupe</string>\n    <string name=\"remove_group_description\">Êtes-vous sûr de vouloir supprimer ce groupe ? Les entrées dans ce groupe seront basculées automatiquement dans \\\"Aucun groupe\\\".</string>\n    <string name=\"remove_unused_groups\">Supprimer les groupes inutilisés</string>\n    <string name=\"remove_unused_groups_description\">Êtes-vous sûr de vouloir supprimer tous les groupes qui ne sont pas associés à une entrée ?</string>\n    <string name=\"remove_icon_pack\">Supprimer le pack d\\'icônes</string>\n    <string name=\"remove_icon_pack_description\">Êtes-vous sûr de vouloir supprimer ce pack d\\'icônes ? Les entrées qui utilisent les icônes de ce pack ne seront pas affectées.</string>\n    <string name=\"details\">Détails</string>\n    <string name=\"show_error_details\">Afficher les détails de l\\'erreur</string>\n    <string name=\"lock\">Verrouiller</string>\n    <string name=\"name\">Nom</string>\n    <string name=\"no_group\">Aucun groupe</string>\n    <string name=\"sort\" comment=\"Title of the Sort button in the top action bar of the main view\">Trier</string>\n    <string name=\"sort_alphabetically\">Émetteur (de A à Z)</string>\n    <string name=\"sort_alphabetically_reverse\">Émetteur (de Z à A)</string>\n    <string name=\"sort_alphabetically_name\">Compte (de A à Z)</string>\n    <string name=\"sort_alphabetically_name_reverse\">Compte (de Z à A)</string>\n    <string name=\"sort_usage_count\">Nombre d\\'utilisations</string>\n    <string name=\"sort_last_used\">Dernière utilisation</string>\n    <string name=\"sort_custom\">Personnalisé</string>\n    <string name=\"last_used\">Dernière utilisation</string>\n    <string name=\"last_used_never\">jamais</string>\n    <string name=\"new_group\">Nouveau groupe…</string>\n    <string name=\"group\">Groupe</string>\n    <string name=\"group_name_hint\">Nom de groupe</string>\n    <string name=\"preference_manage_groups\">Modifier les groupes</string>\n    <string name=\"preference_manage_groups_summary\">Gérez et supprimez vos groupes ici</string>\n    <string name=\"preference_reset_usage_count\">Réinitialiser le nombre d\\'utilisations</string>\n    <string name=\"preference_reset_usage_count_summary\">Réinitialiser le nombre d\\'utilisations de chaque entrée de votre coffre-fort</string>\n    <string name=\"preference_reset_usage_count_dialog\">Êtes-vous sûr de vouloir définir le nombre d\\'utilisations de chaque entrée de votre coffre-fort à 0 ?</string>\n    <string name=\"note\" comment=\"Users can add a note to an entry\">Note</string>\n    <string name=\"clear\">Effacer</string>\n    <string name=\"dialog_duplicate_entry_title\" comment=\"'Duplicate' is a noun here\">Dupliquer l\\'entrée</string>\n    <string name=\"dialog_duplicate_entry_message\">Cette entrée a le même nom et émetteur qu\\'une ou plusieurs entrées existantes. Comment voulez-vous procéder?</string>\n    <string name=\"dialog_duplicate_entry_overwrite_title\">Écraser la ou les entrées existantes</string>\n    <string name=\"dialog_duplicate_entry_overwrite_subtitle\">Remplacer la ou les entrées existantes par la nouvelle. Cette action ne peut pas être annulée</string>\n    <string name=\"dialog_duplicate_entry_suffix_title\">Ajouter un suffixe</string>\n    <string name=\"dialog_duplicate_entry_suffix_subtitle\">Ajouter un suffixe au nom de cette nouvelle entrée. Le nouveau nom sera : %s</string>\n    <string name=\"dialog_duplicate_entry_cancel_title\">Annuler l\\'enregistrement</string>\n    <string name=\"dialog_duplicate_entry_cancel_subtitle\">Vous permet de modifier l\\'entrée avant de tenter de l\\'enregistrer à nouveau</string>\n    <plurals name=\"dialog_duplicate_entry_overwrite_dialog_message\">\n        <item quantity=\"one\">Êtes-vous sûr de vouloir supprimer %d entrée avec le nom suivant :\\n\\n%s - %s</item>\n        <item quantity=\"other\">Êtes-vous sûr de vouloir supprimer %d entrées avec le nom suivant :\\n\\n%s - %s</item>\n    </plurals>\n    <string name=\"dialog_duplicate_entry_overwrite_dialog_title\">Confirmer la suppression</string>\n    <string name=\"pref_haptic_feedback_summary\">Faire vibrer votre appareil lorsque les codes sont actualisés</string>\n    <string name=\"pref_haptic_feedback_title\">Retour haptique</string>\n    <string name=\"pref_highlight_entry_title\">Surligner les jetons lorsqu\\'ils sont appuyés</string>\n    <string name=\"pref_highlight_entry_summary\">Rendre les jetons plus faciles à distinguer les uns des autres en les surlignant temporairement lorsqu\\'ils sont appuyés</string>\n    <string name=\"pref_groups_multiselect_title\">Groupes avec sélection multiple</string>\n    <string name=\"pref_groups_multiselect_summary\">Autoriser la sélection de plusieurs groupes en même temps</string>\n    <string name=\"pref_minimize_on_copy_title\">Minimiser lors de la copie</string>\n    <string name=\"pref_minimize_on_copy_summary\">Minimiser l\\'application après avoir copié un jeton</string>\n    <string name=\"pref_copy_behavior_title\">Copier les jetons dans le presse-papier</string>\n    <string name=\"pref_search_behavior_title\">Comportement de recherche</string>\n    <string name=\"pref_pause_entry_title\">Geler les jetons lorsqu\\'ils sont appuyés</string>\n    <string name=\"pref_pause_entry_summary\">Mettre en pause l\\'actualisation automatique des jetons en appuyant dessus. Les jetons ne seront plus mis à jour tant qu\\'ils seront ciblés. Nécessite « Surligner les jetons lorsqu\\'ils sont appuyés » ou « Appuyer pour révéler ».</string>\n    <string name=\"pin_keyboard_description\">Saisissez votre mot de passe pour activer le clavier PIN. Notez que cela ne fonctionne que si votre mot de passe est composé uniquement de chiffres</string>\n    <string name=\"pin_keyboard_error\">Erreur lors de l\\'activation du clavier PIN</string>\n    <string name=\"pin_keyboard_error_description\">Il n\\'est pas possible de définir un clavier PIN. Votre mot de passe ne doit se composer que de chiffres.</string>\n    <string name=\"pin_keyboard_disabled\">Mot de passe modifié. Le clavier PIN ne sera plus affiché.</string>\n    <string name=\"selected\">Sélectionné</string>\n    <string name=\"dark_theme_title\">Thème sombre</string>\n    <string name=\"light_theme_title\">Thème</string>\n    <string name=\"amoled_theme_title\">Thème AMOLED</string>\n    <string name=\"system_theme_title\">Défini par l\\'économiseur de batterie</string>\n    <string name=\"system_amoled_theme_title\">Défini par l\\'économiseur de batterie (AMOLED)</string>\n    <string name=\"normal_viewmode_title\">Normal</string>\n    <string name=\"compact_mode_title\">Compact</string>\n    <string name=\"small_mode_title\">Petit</string>\n    <string name=\"tiles_mode_title\">Tuiles</string>\n    <string name=\"unknown_issuer\">Émetteur inconnu</string>\n    <string name=\"unknown_account_name\">Nom de compte inconnu</string>\n    <plurals name=\"import_error_dialog\">\n        <item quantity=\"one\">Aegis n\\'a pas pu importer %d jeton. Ce jeton sera ignoré. Appuyez sur « détails » pour voir plus d\\'informations sur l\\'erreur.</item>\n        <item quantity=\"other\">Aegis n\\'a pas pu importer %d jetons. Ces jetons seront ignorés. Appuyez sur « détails » pour voir plus d\\'informations sur l\\'erreur.</item>\n    </plurals>\n    <string name=\"unable_to_process_deeplink\">Impossible de traiter le lien profond</string>\n    <string name=\"unable_to_read_qrcode_file\">Impossible de lire et de traiter le code QR depuis le fichier : %s.</string>\n    <string name=\"unable_to_process_shared_text\">Impossible de traiter le texte partagé comme OTP</string>\n    <string name=\"unable_to_read_qrcode_files\">Impossible de lire et traiter certains codes QR. %1$d/%2$d entrées seulement seront importées.</string>\n    <string name=\"unable_to_generate_qrcode\">Impossible de générer le code QR</string>\n    <string name=\"select_picture\">Sélectionner image</string>\n    <string name=\"select_icon\">Sélectionner une icône</string>\n    <string name=\"tile_open_vault\" comment=\"label for a quick settings tile that opens the app when tapped\">Ouvrir le coffre-fort</string>\n    <string name=\"tile_open_scanner\" comment=\"label for a quick settings tile that opens the QR code scanner when tapped\">Ouvrir le scanner</string>\n    <string name=\"toggle_checkboxes\">Basculer les cases</string>\n    <string name=\"search\">Recherche</string>\n    <string name=\"channel_name_lock_status\">Statut du verrouillage</string>\n    <string name=\"channel_description_lock_status\">Aegis peut créer une notification persistante pour vous notifier quand le coffre-fort est verrouillé</string>\n    <string name=\"vault_unlocked_state\">Le coffre-fort est déverrouillé. Appuyer ici pour verrouiller.</string>\n    <string name=\"version\">Version</string>\n    <string name=\"changelog\">Historique des modifications</string>\n    <string name=\"whats_new\">Les nouveautés</string>\n    <string name=\"github_description\">Code source, problèmes et informations</string>\n    <string name=\"license\">Licence</string>\n    <string name=\"license_description\">Aegis Authenticator est sous licence GPLv3</string>\n    <string name=\"third_party_licenses\">Licences tierces</string>\n    <string name=\"third_party_licenses_description\">Licences des bibliothèques tierces utilisées par Aegis</string>\n    <string name=\"country_netherlands\">Pays-Bas</string>\n    <string name=\"email_us\">Écrire un email</string>\n    <string name=\"visit_website\">Visiter notre site internet</string>\n    <string name=\"about_support\">Soutien</string>\n    <string name=\"support_rate\">Noter</string>\n    <string name=\"support_rate_description\">Soutenez-nous en laissant un avis sur le Google Play Store</string>\n    <string name=\"webview_error\">Cet appareil ne supporte pas web view, qui est nécessaire pour voir l\\'historique des modifications et la licence. Un composant système est manquant.</string>\n    <string name=\"email\">Email</string>\n    <string name=\"time_sync_warning_title\">Synchronisation automatique de l\\'heure</string>\n    <string name=\"time_sync_warning_message\">Aegis s\\'appuie sur l\\'heure du système pour être synchronisé afin de générer des codes corrects. Un écart de quelques secondes seulement pourrait aboutir à des codes incorrects. Il semble que votre appareil n\\'est pas configuré pour synchroniser le temps automatiquement. Souhaitez-vous le faire maintenant ?</string>\n    <string name=\"time_sync_warning_disable\">Arrêter de m\\'avertir. Je sais ce que je fais.</string>\n    <string name=\"google_qr_export_unrelated\">Code QR non lié trouvé. Essayez de redémarrer le scanner.</string>\n    <plurals name=\"google_qr_export_scanned\">\n        <item quantity=\"one\">%1$d/%2$d code QR scanné</item>\n        <item quantity=\"other\">%1$d/%2$d codes QR scannés</item>\n    </plurals>\n    <string name=\"google_qr_export_unexpected\">Code QR n°%1$d attendu, mais n°%2$d scanné à la place</string>\n    <string name=\"backup_error_bar_message\"><b>La sauvegarde du coffre-fort a échoué récemment</b></string>\n    <string name=\"backup_error_dialog_details\" comment=\"The first parameter is the type of backup (e.g. built-in or Android backup). The second parameter is an elapsed time in the style of 'x seconds/minutes/days ago'.\">        Une tentative récente de sauvegarde du coffre-fort en utilisant %1$s a échoué car une erreur est survenue. La sauvegarde a été tentée %2$s. Veuillez vérifier vos paramètres de sauvegarde pour vous assurer que les sauvegardes peuvent se terminer avec succès.\n    </string>\n    <string name=\"backup_permission_error_dialog_details\" comment=\"The first parameter is the type of backup (e.g. built-in or Android backup). The second parameter is an elapsed time in the style of 'x seconds/minutes/days ago'.\">        Une tentative récente de sauvegarde du coffre-fort en utilisant %1$s a échoué car Aegis n\\'avait pas la permission d\\'écrire dans la destination de la sauvegarde. La sauvegarde a été tentée %2$s. Cette erreur peut se produire si vous avez déplacé/renommé la destination de la sauvegarde ou si vous avez récemment restauré Aegis depuis une sauvegarde. Veuillez reconfigurer la destination de la sauvegarde.\n    </string>\n    <string name=\"backup_system_builtin\">Sauvegardes automatiques intégrées dans Aegis</string>\n    <string name=\"backup_system_android\">Système de sauvegarde cloud d\\'Android</string>\n    <string name=\"backup_reminder_bar_message_with_latest\" comment=\"The parameter is an elapsed time in the style of 'x seconds/minutes/days ago'\">        La dernière sauvegarde est obsolète (%s)\n    </string>\n    <string name=\"backup_reminder_bar_message\">        Les modifications ne sont pas sauvegardées\n    </string>\n    <string name=\"backup_reminder_bar_dialog_title\">Les modifications ne sont pas sauvegardées</string>\n    <string name=\"backup_reminder_bar_dialog_summary\">        Les changements récents dans le coffre-fort n\\'ont pas encore été sauvegardés. Il est important de réaliser des sauvegardes régulières pour éviter de perdre l\\'accès à vos comptes. Veuillez envisager de configurer des sauvegardes automatiques dans le menu Paramètres.\n    </string>\n    <string name=\"backup_reminder_bar_dialog_accept\">Configurer les sauvegardes</string>\n    <string name=\"backup_plaintext_export_warning\"><b>Le coffre-fort a récemment été exporté en texte brut</b></string>\n    <string name=\"pref_show_plaintext_warning_hint\">Ne plus afficher cet avertissement</string>\n    <string name=\"backup_plaintext_warning_explanation\">Cet avertissement s\\'affiche parce que vous avez récemment exporté une copie non chiffrée du coffre-fort. Pour maintenir la sécurité de vos jetons, nous vous recommandons de supprimer ce fichier une fois que vous n\\'en aurez plus besoin.</string>\n    <string name=\"switch_camera\">Permuter l\\'appareil photo</string>\n    <string name=\"empty_list\">Il n\\'y a pas de code à afficher. Commencez à ajouter des entrées en appuyant sur le signe plus dans le coin inférieur droit</string>\n    <string name=\"empty_list_title\">Aucune entrée trouvée</string>\n    <string name=\"empty_group_list\">Il n\\'y a aucun groupe à afficher. Ajouter des groupes dans l\\'écran de modification d\\'une entrée</string>\n    <string name=\"empty_group_list_title\">Aucun groupe trouvé</string>\n    <string name=\"no_icon_packs\">Aucun pack d\\'icônes n\\'a encore été importé. Appuyez sur le signe plus pour en importer un. Astuce : essayez <a href=\"https://aegis-icons.github.io\">aegis-icons</a>.</string>\n    <string name=\"no_icon_packs_title\">Aucun pack d\\'icônes</string>\n    <string name=\"pick_icon\">Choisissez une icône</string>\n    <string name=\"uncategorized\">Non catégorisé</string>\n    <string name=\"done\">Fait</string>\n    <plurals name=\"qr_count\">\n        <item quantity=\"one\">%d / %d code QR</item>\n        <item quantity=\"other\">%d / %d codes QR</item>\n    </plurals>\n    <string name=\"next\">Suivant</string>\n    <string name=\"previous\">Précédent</string>\n    <string name=\"copy_uri\">Copier l\\'URI</string>\n    <string name=\"unable_to_copy_uri_to_clipboard\">Impossible de copier l\\'URI dans le presse-papier</string>\n    <string name=\"uri_copied_to_clipboard\">URI copiée dans le presse-papier</string>\n    <string name=\"transfer_entry_description\">Scannez ce code QR avec l\\'application d\\'authentification vers laquelle vous souhaitez transférer cette entrée</string>\n    <string name=\"transfer_entry_brightness\">Appuyer sur le code QR pour activer la luminosité maximale</string>\n    <string name=\"google_auth_compatible_transfer_description\">Scannez ces codes QR avec Aegis ou Google Authenticator.\\n\\nEn raison des limitations de l\\'application Google Authenticator, seuls les jetons TOTP &amp; HOTP qui utilisent SHA1 et produisent des codes à 6 chiffres sont inclus</string>\n    <string name=\"password_strength_very_weak\">Très faible</string>\n    <string name=\"password_strength_weak\">Faible</string>\n    <string name=\"password_strength_fair\">Acceptable</string>\n    <string name=\"password_strength_good\">Satisfaisant</string>\n    <string name=\"password_strength_strong\">Fort</string>\n    <string name=\"password_strength_unknown\">Mot de passe trop long pour que sa force puisse être analysée</string>\n    <string name=\"pref_pin_keyboard_title\">Utiliser le clavier PIN sur l\\'écran de verrouillage</string>\n    <string name=\"pref_pin_keyboard_summary\">Activez ceci si vous voulez activer le clavier PIN sur l\\'écran de verrouillage. Cela ne fonctionne que pour les mots de passe numériques</string>\n    <string name=\"title_activity_preferences\">Paramètres</string>\n    <string name=\"title_activity_manage_groups\">Gérer les groupes</string>\n    <string name=\"title_activity_transfer\">Transférer les entrées</string>\n    <string name=\"title_activity_about\">À propos</string>\n    <string name=\"title_activity_edit_entry\">Modifier l\\'entrée</string>\n    <string name=\"title_activity_scan_qr\">Scanner un code QR</string>\n    <string name=\"title_activity_import_entries\">Importer des entrées</string>\n    <string name=\"title_activity_assign_icons\">Association des icônes</string>\n    <string name=\"title_activity_licenses\">Licences tierces</string>\n    <string name=\"dialog_wipe_entries_title\">Effacer les entrées</string>\n    <string name=\"dialog_wipe_entries_message\">Votre coffre-fort contient déjà des entrées. Voulez-vous supprimer ces entrées avant d\\'importer ce fichier ?\\n\\n<b>En faisant cela, vous perdrez définitivement l\\'accès aux entrées existantes dans le coffre-fort.</b></string>\n    <string name=\"dialog_wipe_entries_checkbox\">Effacer le contenu du coffre-fort</string>\n    <string name=\"import_from_clipboard_title\">Importer depuis le presse-papier</string>\n    <string name=\"import_from_clipboard_message\">Nous avons trouvé une uri otpauth valide dans votre presse-papier.\\n\\n<b>Nom</b> : %1$s\\n<b>Émetteur</b> : %2$s\\n\\nVoulez-vous l\\'utiliser pour pré-remplir cette entrée ?</string>\n    <string name=\"panic_trigger_ignore_toast\">Aegis a reçu le déclenchement d\\'une alerte mais le paramètre est désactivé, il sera ignoré</string>\n    <string name=\"pref_panic_trigger_title\">Supprimer le coffre-fort lors du déclenchement de l\\'alerte</string>\n    <string name=\"pref_panic_trigger_summary\">Supprimer le coffre-fort quand le déclenchement d\\'une alerte est reçu de Ripple</string>\n    <string name=\"import_vault\">Importer un coffre-fort Aegis</string>\n    <string name=\"import_vault_hint\">Vous voulez importer depuis une autre application 2FA ? Complétez d\\'abord l\\'installation, puis rendez-vous dans le menu des paramètres.</string>\n    <plurals name=\"import_duplicate_toast\">\n        <item quantity=\"one\">%d potentiel doublon décoché. Veuillez vérifier la liste des entrées.</item>\n        <item quantity=\"other\">%d potentiels doublons décochés. Veuillez vérifier la liste des entrées.</item>\n    </plurals>\n    <string name=\"importer_help_2fas\">Fournir une sauvegarde 2FAS Authenticator.</string>\n    <string name=\"importer_help_aegis\">Fournir un export/sauvegarde Aegis.</string>\n    <string name=\"importer_help_authenticator_plus\">Fournir un export Authenticator Plus obtenu via <b>Paramètres -&gt; Sauvegarde &amp; Restauration -&gt; Exporter en tant que texte et HTML</b>.</string>\n    <string name=\"importer_help_authy\">Fournir une copie de <b>/data/com.authy.authy/shared_prefs/com.authy.storage.tokens.authenticator.xml</b>, situé dans le répertoire de stockage interne d\\'Authy.</string>\n    <string name=\"importer_help_andotp\">Fournir un export/sauvegarde andOTP.</string>\n    <string name=\"importer_help_bitwarden\">Fournir un export/sauvegarde Bitwarden. Les fichiers chiffrés ne sont pas pris en charge.</string>\n    <string name=\"importer_help_battle_net_authenticator\">Fournir une copie de <b>/data/data/com.blizzard.messenger/shared_prefs/com.blizzard.messenger.authenticator_preferences.xml</b>, situé dans le répertoire de stockage interne de Battle.net Authenticator.</string>\n    <string name=\"importer_help_duo\">Fournir une copie de <b>/data/data/com.duosecurity.duomobile/files/duokit/accounts.json</b>, situé dans le répertoire de stockage interne de DUO.</string>\n    <string name=\"importer_help_ente_auth\">Fournir un export Ente Auth. Actuellement, seuls les fichiers non chiffrés sont pris en charge.</string>\n    <string name=\"importer_help_freeotp\">FreeOTP 2 : Fournir une sauvegarde.\\nFreeOTP 1.x : Fournir une copie de <b>/data/data/org.fedorahosted.freeotp/shared_prefs/tokens.xml</b>, situé dans le répertoire de stockage interne de FreeOTP.</string>\n    <string name=\"importer_help_freeotp_plus\">Fournir un export FreeOTP+.</string>\n    <string name=\"importer_warning_title_freeotp2\">Compatibilité FreeOTP 2</string>\n    <string name=\"importer_warning_message_freeotp2\">Il y a un certain nombre de problèmes dans FreeOTP 2 qui peuvent entraîner des sauvegardes corrompues. Aegis essaiera de récupérer autant d\\'entrées que possible, mais il est possible que certaines ou même la totalité ne parviennent pas à être importées.</string>\n    <string name=\"importer_help_google_authenticator\"><b>Seuls les fichiers de base de données de Google Authenticator v5.10 et antérieures sont pris en charge</b>.\\n\\nFournir une copie de <b>/data/data/com.google.android.apps.authenticator2/databases/databases</b>, situé dans le répertoire de stockage interne de Google Authenticator.</string>\n    <string name=\"importer_help_microsoft_authenticator\">Fournir une copie de <b>/data/data/com.azure.authenticator/databases/PhoneFactor</b>, situé dans le répertoire de stockage interne de Microsoft Authenticator.</string>\n    <string name=\"importer_help_plain_text\">Fournir un fichier texte brut avec une URI Google Authenticator sur chaque ligne.</string>\n    <string name=\"importer_help_proton_authenticator\">Fournir un export Proton Authenticator (.json) obtenu via <b>Paramètres -&gt; Exporter</b>.</string>\n    <string name=\"importer_help_steam\"><b>Steam 3.0 et plus récents ne sont pas pris en charge</b>. Fournissez une copie de <b>/data/data/com.valvesoftware. ndroid.steam.community/files/Steamguard-*.json</b>, situé dans le répertoire de stockage interne de Steam.</string>\n    <string name=\"importer_help_stratum\">Fournir un export Stratum obtenu via <b>Paramètres -&gt; Sauvegarde -&gt; Sauvegarder en tant que fichier chiffré (recommandé)</b>.</string>\n    <string name=\"importer_help_totp_authenticator\">Fournir un export TOTP Authenticator.</string>\n    <string name=\"importer_help_winauth\">Fournir un export WinAuth.</string>\n    <string name=\"import_assign_icons_dialog_title\">Association des icônes</string>\n    <string name=\"import_assign_icons_dialog_text\">Voulez-vous associer des icônes aux entrées importées ?</string>\n    <string name=\"importer_encrypted_exception_google_authenticator\">L\\'entrée chiffrée a été ignorée : %s</string>\n    <string name=\"importer_help_direct\">Importer des entrées directement depuis %s. Cela nécessite que l\\'application soit installée sur cet appareil et que l\\'accès root soit accordé à Aegis.</string>\n    <string name=\"groups\">Groupes</string>\n    <string name=\"pref_focus_search\">Cibler le champ de recherche au démarrage de l\\'application</string>\n    <string name=\"pref_focus_search_summary\">Cibler immédiatement le champ de recherche au démarrage de l\\'application.</string>\n    <string name=\"pref_grouping_halves\">Moitiés</string>\n    <string name=\"pref_grouping_none\">Ne pas grouper</string>\n    <string name=\"pref_grouping_size_two\">Groupes de 2</string>\n    <string name=\"pref_grouping_size_three\">Groupes de 3</string>\n    <string name=\"pref_grouping_size_four\">Groupes de 4</string>\n    <string name=\"pref_copy_behavior_never\">Jamais</string>\n    <string name=\"pref_copy_behavior_single_tap\">Appui simple</string>\n    <string name=\"pref_copy_behavior_double_tap\">Appui double</string>\n    <string name=\"pref_account_name_position_hidden\">Masqué</string>\n    <string name=\"pref_account_name_position_end\">À côté de l\\'émetteur</string>\n    <string name=\"pref_account_name_position_below\">En dessous de l\\'émetteur</string>\n    <plurals name=\"time_elapsed_seconds\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"one\">Il y a %d seconde</item>\n        <item quantity=\"other\">Il y a %d secondes</item>\n    </plurals>\n    <plurals name=\"time_elapsed_minutes\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"one\">Il y a %d minute</item>\n        <item quantity=\"other\">Il y a %d minutes</item>\n    </plurals>\n    <plurals name=\"time_elapsed_hours\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"one\">Il y a %d heure</item>\n        <item quantity=\"other\">Il y a %d heures</item>\n    </plurals>\n    <plurals name=\"time_elapsed_days\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"one\">il y a %d jour</item>\n        <item quantity=\"other\">Il y a %d jours</item>\n    </plurals>\n    <plurals name=\"time_elapsed_years\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"one\">Il y a %d an</item>\n        <item quantity=\"other\">Il y a %d ans</item>\n    </plurals>\n    <plurals name=\"dropdown_checkboxes_default_count\">\n        <item quantity=\"one\">%d élément sélectionné</item>\n        <item quantity=\"other\">%d éléments sélectionnés</item>\n    </plurals>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-fr-rFR-v29/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"system_theme_title\">Valeurs par défaut du système</string>\n    <string name=\"system_amoled_theme_title\">Valeur par défaut du système (AMOLED)</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-fy-rNL/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources xmlns:tools=\"http://schemas.android.com/tools\">\n    <string name=\"action_settings\">Ynstellingen</string>\n    <string name=\"action_about\">Oer</string>\n    <string name=\"action_delete\">Fuortsmite</string>\n    <string name=\"action_transfer\">Oersette</string>\n    <string name=\"action_edit_icon\">Piktogram oanpasse</string>\n    <string name=\"action_reset_usage_count\">Gebrûksteller op 0 ynstelle</string>\n    <string name=\"action_reset_usage_count_dialog\">Binne jo wis dat jo de gebrûksteller fan dit item op 0 sette wolle?</string>\n    <string name=\"action_default_icon\">Standert piktogram opnij ynstelle</string>\n    <string name=\"discard\">Ungedien meitsje</string>\n    <string name=\"save\">Bewarje</string>\n    <string name=\"all\">Alle</string>\n    <string name=\"issuer\">Utjouwer</string>\n    <string name=\"yandex_pin\">PIN (4–16 sifers)</string>\n    <string name=\"motp_pin\">PIN (4 sifers)</string>\n    <string name=\"suggested\">Foarsteld</string>\n    <string name=\"usage_count\">Gebrûksteller</string>\n    <string name=\"warning\">Warskôging</string>\n    <string name=\"pref_cat_appearance_app\">App</string>\n    <string name=\"pref_cat_appearance_entries\">Items</string>\n    <string name=\"pref_cat_backups_android\">Android</string>\n    <string name=\"pref_cat_backups_auto\">Automatyske reservekopyen</string>\n    <string name=\"pref_section_behavior_title\">Gedrach</string>\n    <string name=\"pref_section_behavior_summary\">It gedrach by it brûken fan de itemlist oanpasse.</string>\n    <string name=\"pref_section_appearance_title\">Uterlik</string>\n    <string name=\"pref_section_appearance_summary\">Pas it tema, de taal en oare ynstellingen oan dy’t fan ynfloed binne op it uterlik fan de app.</string>\n    <string name=\"pref_section_security_title\">Befeiliging</string>\n    <string name=\"pref_section_security_summary\">Ynstellen fan fersifering, biometrysk ûntskoatteljen, automatysk fergrindelje en oare befeiligingsynstellingen.</string>\n    <string name=\"pref_section_import_export_title\">Ymportearje &amp; Eksportearje</string>\n    <string name=\"pref_section_import_export_summary\">Reservekopyen fan Aegis of oare autentikator-apps ymportearje. Meitsje hânmjittige eksport fan jo Aegis-klûs oan.</string>\n    <string name=\"pref_section_audit_log_title\">Auditlochboek</string>\n    <string name=\"pref_section_audit_log_summary\">Sykje in list mei alle rapporteare wichtige ôfspraken dy’t yn de app plakfûn hawwe.</string>\n    <string name=\"pref_section_backups_title\">Reservekopyen</string>\n    <string name=\"pref_section_backups_summary\">Automatyske reservekopyen op in sels keazen lokaasje ynstelle, of meidwaan mei Androids cloud-reservekopysysteem ynskeakelje.</string>\n    <string name=\"pref_section_icon_packs\">Piktogrampakketten</string>\n    <string name=\"pref_section_icon_packs_summary\">Piktogrampakketten beheare en ymportearje.</string>\n    <string name=\"pref_select_theme_title\">Tema</string>\n    <string name=\"pref_dynamic_colors_title\">Dynamyske kleuren</string>\n    <string name=\"pref_dynamic_colors_summary\">Overlay tapasse op basis fan de kleuren fan jo Android-tema</string>\n    <string name=\"pref_view_mode_title\">Werjeftemodus</string>\n    <string name=\"pref_lang_title\">Taal</string>\n    <string name=\"pref_show_icons_title\">Piktogrammen toane</string>\n    <string name=\"pref_show_icons_summary\">Piktogrammen njonken elk item toane</string>\n    <string name=\"pref_code_group_size_title\">Koadesifergroepearring</string>\n    <string name=\"pref_code_group_size_summary\">Selektearje oantal sifers om de koaden op te groepearjen</string>\n    <string name=\"pref_account_name_position_title\">Accountnamme toane</string>\n    <string name=\"pref_show_next_code_title\">Folgjende koade toane</string>\n    <string name=\"pref_show_next_code_summary\">Generearje en toan de folgjende koade yn it foar</string>\n    <string name=\"pref_expiration_state_title\">Jou oan wannear’t koaden op it punt stean te ferrinen</string>\n    <string name=\"pref_expiration_state_summary\">Wizigje de kleur fan de koaden en lit se knipperje wannear’t se op it punt stean te ferrinnen</string>\n    <string name=\"pref_expiration_state_fallback\">Wizigje de kleur fan de koaden wannear’t se op it punt stean te ferrinnen</string>\n    <string name=\"pref_shared_issuer_account_name_title\">Accountnamme allinnich wannear nedich toane</string>\n    <string name=\"pref_shared_issuer_account_name_summary\">Accountnammen allinnich toane wannear’t se deselde útjouwer diele. Oare accountnammen wurde ferstoppe.</string>\n    <string name=\"pref_account_name_position_summary_override\">Dizze ynstelling wurdt oerskreaun troch de werjeftemodus Tegels. Accountnamme wurdt ûnder de útjouwer toand.</string>\n    <string name=\"pref_import_file_title\">Ut bestân ymportearje</string>\n    <string name=\"pref_import_file_summary\">Tokens fan in bestân út ymportearje</string>\n    <string name=\"pref_android_backups_title\">Android cloud-reservekopyen</string>\n    <string name=\"pref_android_backups_summary\">Lit de klûs fan Aegis opnimme yn Androids cloud-reservekopysysteem. Dit wurdt allinnich stipe foar fersifere klûzen.</string>\n    <string name=\"pref_android_backups_hint\"><i>Device-to-device (D2D) reservekopyen binne altyd tastien, net achte de ynstelling hjirboppe</i></string>\n    <string name=\"pref_backups_title\">Automatysk klûsreservekopy meitsje</string>\n    <string name=\"pref_backups_summary\">Automatysk reservekopyen meitsje fan de klûs op eksterne ûnthâld wannear’t der wizigingen binne. Allinnich stipe foar fersifere klûzen.</string>\n    <string name=\"pref_backups_reminder_title\">Reservekopyen oantinken</string>\n    <string name=\"pref_backups_reminder_summary\">Toan in oantinken om in reservekopy fan jo klûs te meitsjen, as jo noch gjin reservekopy hawwe fan de lêste wizigingen.</string>\n    <string name=\"pref_backups_reminder_dialog_title\">Reservekopy-oantinken útskeakelje</string>\n    <string name=\"pref_backups_reminder_dialog_summary\">Utskeakeljen fan dit oantinken betsjut dat Aegis jo net fertelle sil oft jo wizigingen hawwe dêr’t noch net in reservekopy fan makke is. Hjirmei rinne jo it risiko om de tagong ta tokens te ferliezen. Binne jo wis dat jo dit oantinken útskeakelje wolst?</string>\n    <string name=\"pref_backups_versioning_strategy_title\">Reservekopystrategy</string>\n    <string name=\"pref_backups_versioning_strategy_keep_x_versions\">In oantal ferzjes behâlde</string>\n    <string name=\"pref_backups_versioning_strategy_single_backup\">Ien inkelde reservekopy</string>\n    <string name=\"pref_backups_versioning_strategy_single_backup_warning\">De selektearre reservekopystrategy is net betrouber en wurdt net oanrekommandearre. In inkelde reservekopymislearring soe liede kinne ta it ferliezen fan jo iennige reservekopy.</string>\n    <string name=\"pref_backups_versioning_strategy_dialog_title\">Selektearje in reservekopystrategy</string>\n    <string name=\"pref_backups_location_title\">Reservekopylokaasje</string>\n    <string name=\"pref_backups_location_summary\">Reservekopyen sille bewarre wurde yn</string>\n    <string name=\"pref_backup_location_summary\">Reservekopy sil bewarre wurde yn</string>\n    <string name=\"pref_backups_trigger_title\">No in reservekopy meitsje</string>\n    <string name=\"pref_backups_trigger_summary\">Hânmjittich in reservekopy meitsje</string>\n    <string name=\"pref_backups_versions_title\">Oantal ferzjes om te bewarjen</string>\n    <string name=\"pref_backups_versions_infinite\">\\u221E</string>\n    <plurals name=\"pref_backups_versions_summary\">\n        <item quantity=\"one\">Bewarje %1$d ferzje fan de reservekopy</item>\n        <item quantity=\"other\">Bewarje %1$d ferzjes fan de reservekopy</item>\n    </plurals>\n    <string name=\"pref_backups_versions_infinite_summary\">Uneinich oantal ferzjes fan de reservekopy bewarje</string>\n    <string name=\"pref_import_app_title\">Fan in app út ymportearje</string>\n    <string name=\"pref_import_app_summary\">Tokens fan in app út ymportearje (fereasket root-tagong)</string>\n    <string name=\"pref_export_title\">Eksportearje</string>\n    <string name=\"pref_export_summary\">Eksportearje de klûs</string>\n    <string name=\"pref_password_reminder_title\">Wachtwurdoantinken</string>\n    <string name=\"pref_google_auth_export_title\">Eksportearje foar Google Authenticator</string>\n    <string name=\"pref_google_auth_export_descriptor\">Generearret QR-koaden dy’t wurkje mei Google Authenticator</string>\n    <string name=\"pref_google_auth_export_no_data\">Gjin gegevens om te eksportearjen</string>\n    <plurals name=\"pref_google_auth_export_incompatible_entries\">\n        <item quantity=\"one\">%d ynkompatibel item oerslaggen</item>\n        <item quantity=\"other\">%d ynkompatibele items oerslaggen</item>\n    </plurals>\n    <string name=\"pref_password_reminder_summary\">Toan in oantinken %s om it wachtwurd yn te fieren, sadat jo dizze net ferjitte.</string>\n    <string name=\"pref_password_reminder_summary_disabled\">Utskeakele</string>\n    <string name=\"pref_secure_screen_title\">Skermbeskoatteling</string>\n    <string name=\"pref_secure_screen_summary\">Blokkearje skermôfdrukken en oare besykjen ta skermopnamen binnen dizze app.</string>\n    <string name=\"pref_tap_to_reveal_title\">Tikke om te toanen</string>\n    <string name=\"pref_tap_to_reveal_summary\">Koaden standert ferstopje. Tik items oan om de koade te toanen.</string>\n    <string name=\"pref_tap_to_reveal_time_title\">Time-out foar oantikken om te toanen</string>\n    <string name=\"pref_auto_lock_title\">Automatysk beskoattelje</string>\n    <string name=\"pref_auto_lock_summary\">Wannear %s</string>\n    <string name=\"pref_auto_lock_summary_disabled\">Utskeakele</string>\n    <string name=\"pref_auto_lock_prompt\">Aegis automatysk beskoattelje wannear</string>\n    <string name=\"pref_auto_lock_type_back_button\">De tebekknop yndrukt is</string>\n    <string name=\"pref_auto_lock_type_minimize\">De app minimalisearre is</string>\n    <string name=\"pref_auto_lock_type_device_lock\">It apparaat beskoattele is</string>\n    <string name=\"pref_backup_password_category\">Reservekopy meitsje &amp; eksportearje</string>\n    <string name=\"pref_backup_password_title\">Apart wachtwurd reservekopy &amp; eksport</string>\n    <string name=\"pref_backup_password_summary\">Wannear ynskeakele, kin it wachtwurd foar ûntskoatteljen fan de app net mear brûkt wurde om reservekopyen en eksportbestannen te dekodearjen.</string>\n    <string name=\"pref_backup_password_change_title\">Wachtwurd foar reservekopy meitsje &amp; eksportearjen wizigje</string>\n    <string name=\"pref_backup_password_change_summary\">Stel in nij wachtwurd yn foar it fersiferjen fan de klûs wylst reservekopyen meitsjen en eksportearjen.</string>\n    <string name=\"pref_encryption_title\">Fersifering</string>\n    <string name=\"pref_encryption_summary\">Fersiferje de klûs en ûntskoattelje dizze mei in wachtwurd of biometry.</string>\n    <string name=\"pref_biometrics_title\">Biometrysk ûntskoattelje</string>\n    <string name=\"pref_biometrics_summary\">Biometryske autentikaasje tastean om de klûs te ûntskoatteljen</string>\n    <string name=\"pref_search_behavior_summary\">Sykje troch: %s</string>\n    <string name=\"pref_search_behavior_prompt\">Sykje yn ien fan de folgjende fjilden</string>\n    <string name=\"pref_search_behavior_type_name\">Namme</string>\n    <string name=\"pref_search_behavior_type_issuer\">Utjouwer</string>\n    <string name=\"pref_search_behavior_type_note\">Notysje</string>\n    <string name=\"pref_search_behavior_type_groups\">Groepen</string>\n    <string name=\"pref_set_password_title\">Wachtwurd wizigje</string>\n    <string name=\"pref_set_password_summary\">Stel in nij wachtwurd yn wêrmei’t jo de klûs ûntskoattelje kinne</string>\n    <string name=\"no_events_title\">Gjin rapportearre barrens</string>\n    <string name=\"no_events_description\">Gjin wichtige ôfspraken binnen de app rapportearre</string>\n    <string name=\"event_title_vault_unlocked\">Klûs ûntskoattele</string>\n    <string name=\"event_description_vault_unlocked\">De klûs is mei sukses ûntskoattele</string>\n    <string name=\"event_title_backup_created\">Reservekopy makke</string>\n    <string name=\"event_description_backup_created\">Der is mei sukses in reservekopy fan de klûs makke</string>\n    <string name=\"event_title_android_backup_created\">Reservekopy makke troch Android</string>\n    <string name=\"event_description_android_backup_created\">Der is mei sukses troch Android in reservekopy fan de klûs makke</string>\n    <string name=\"event_title_vault_exported\">Klûs eksportearre</string>\n    <string name=\"event_description_vault_exported\">In kopy fan de klûs is eksportearre</string>\n    <string name=\"event_title_entry_shared\">Ynfier dield</string>\n    <string name=\"event_description_entry_shared\">Der is in ynfier dield</string>\n    <string name=\"event_title_vault_unlock_failed_password\">Klûs ûntskoatteljen mislearre (wachtwurd)</string>\n    <string name=\"event_description_vault_unlock_failed_password\">In besykjen om de klûs mei in wachtwurd te ûntskoatteljen is mislearre</string>\n    <string name=\"event_title_vault_unlock_failed_biometrics\">Klûs ûntskoatteljen mislearre (biometrysk)</string>\n    <string name=\"event_description_vault_unlock_failed_biometrics\">In besykjen om de klûs mei in wachtwurd te ûntskoatteljen mei biometryske gegevens is mislearre</string>\n    <string name=\"event_unknown\">Unbekend barrenstype</string>\n    <string name=\"audit_log_entry_deleted\">(fuortsmiten)</string>\n    <string name=\"today_at_time\">Hjoed om %1$s</string>\n    <string name=\"day_of_week_at_time\">%1$s om %2$s</string>\n    <string name=\"export_encrypted\">Fersiferje de klûs</string>\n    <string name=\"export_help\">Dizze aksje sil de klûs eksportearje út it ynterne ûnthâld fan Aegis. Selektearje it formaat wêryn’t jo de eksport wolle:</string>\n    <string name=\"export_warning_unencrypted\">Do stiest op it punt in ûnfersifere kopy fan de Aegis-klûs te eksportearjen. <b>Dit wurdt net oanrekommandearre</b>.</string>\n    <string name=\"export_warning_password\">Eksporten wurde fersifere mei in apart wachtwurd ynsteld yn de befeiligingsynstellingen.</string>\n    <string name=\"understand_risk_accept\">Ik begryp it risiko</string>\n    <string name=\"export_format_aegis\">Aegis (.JSON)</string>\n    <string name=\"export_format_google_auth_uri\">Tekstbestân (.TXT)</string>\n    <string name=\"export_format_html\">Webside (.HTML)</string>\n    <string name=\"export_format_hint\">Bestânsformaat</string>\n    <string name=\"export_all_groups\">Alle groepen eksportearje</string>\n    <string name=\"export_choose_groups\">Kies groepen om te eksportearjen</string>\n    <plurals name=\"export_groups_selected_count\">\n        <item quantity=\"one\">%d groep selektearre</item>\n        <item quantity=\"other\">%d groepen selektearre</item>\n    </plurals>\n    <string name=\"export_no_groups_selected\">Gjin groepen keazen om te eksportearjen</string>\n    <string name=\"export_html_title\" comment=\"The title of an HTML export document\">Aegis Authenticator Export</string>\n    <string name=\"choose_authentication_method\">Befeiliging</string>\n    <string name=\"authentication_method_explanation\">Aegis is in op feilichheid rjochte 2FA-applikaasje. Tokens wurde bewarre yn in klûs, dy’t opsjoneel fersifere wurde kin mei in wachtwurd nei eigen idee. As in oanfaller jo fersifere klûsbestân yn hannen krijt, sil dizze gjin tagong hawwe ta de ynhâld sûnder it wachtwurd te kennen.\\n\\nWy hawwe de opsje keazen dy’t neffens ús it beste past by jo apparaat.</string>\n    <string name=\"authentication_method_none\">Gjin</string>\n    <string name=\"authentication_method_none_description\">Do hast gjin wachtwurd nedich om de klûs te ûntskoatteljen en de klûs sil net fersifere wurde. <b>Dizze opsje wurdt net oanrekommandearre</b>.</string>\n    <string name=\"authentication_method_password\">Wachtwurd</string>\n    <string name=\"authentication_method_password_description\">In wachtwurd is nedich om de klûs te ûntskoatteljen.</string>\n    <string name=\"authentication_method_password_explanation\">Warskôging: As jo jo wachtwurd ferjitte, ferlieze jo permanint tagong ta jo tokens. Der is gjin manier om dizze te werstellen sûnder it wachtwurd.</string>\n    <string name=\"authentication_method_biometrics\">Biometry</string>\n    <string name=\"authentication_method_biometrics_description\">Njonken in wachtwurd kinne biometryske gegevens dy’t registrearre binne op dit apparaat, lykas in fingerôfdruk of jo gesicht, brûkt wurde om de klûs te ûntskoatteljen.</string>\n    <string name=\"authentication\">Klûs ûntskoattelje</string>\n    <string name=\"authentication_multiline\" comment=\"The newline in the middle is used for aesthetic purposes\">Klûs\\nûntskoattelje</string>\n    <string name=\"auth_use_biometrics\">Of tik hjir om <font fgcolor=\"#FF0D86C1\">biometry</font> te brûken</string>\n    <string name=\"set_password\">Fier in wachtwurd yn</string>\n    <string name=\"set_group\">Fier in groepsnamme yn</string>\n    <string name=\"set_number\">Kies in getal</string>\n    <string name=\"set_password_confirm\">Befêstigje it wachtwurd</string>\n    <string name=\"invalid_password\">It wachtwurd kloppet net</string>\n    <string name=\"invalidated_biometrics\">Der is in wiziging yn de befeiligingsynstellingen fan jo apparaat detektearre. Gean nei ‘Aegis -&gt; Ynstellingen -&gt; Befeiliging -&gt; Untskoattelje mei biometry’ om biometryske ferifikaasje wer yn te skeakeljen.</string>\n    <string name=\"password_reminder\">Fier jo wachtwurd yn. Wy freegje jo sa no en dan om dit te dwaan, sadat jo it net ferjitte.</string>\n    <string name=\"password_reminder_dialog_title\">Standert biometrysk ûntskoattelje</string>\n    <string name=\"password_reminder_dialog_message\">Wy freegje jo sa no en dan om jo wachtwurd yn te fieren, sadat jo it net ferjitte en jo de tagong ta jo klûs ferlieze. Neidat jo ien kear jo wachtwurd ynfierd hawwe, sil Aegis standert weromgean nei biometrysk ûntskoattelje, oant it tiid is foar in oar omtinken oan jo wachtwurd.</string>\n    <string name=\"password_reminder_freq_never\">Nea</string>\n    <string name=\"password_reminder_freq_weekly\">Wykliks</string>\n    <string name=\"password_reminder_freq_biweekly\">Twawykliks</string>\n    <string name=\"password_reminder_freq_monthly\">Moanliks</string>\n    <string name=\"password_reminder_freq_quarterly\">Elk fearnsjier</string>\n    <string name=\"enter_password_2fas_message\">It liket derop dat dizze 2FAS-reservekopy fersifere is. Fier it wachtwurd hjirûnder yn.</string>\n    <string name=\"enter_password_authy_message\">It liket derop dat jo Authy-tokens fersifere binne. Slút Aegis, iepenje Authy en ûntskoattelje de tokens mei jo wachtwurd. Yn stee dêrfan kin Aegis ek probearje om jo Authy-tokens te dekodearjen as jo hjirûnder jo wachtwurd ynfolje.</string>\n    <string name=\"enter_password_aegis_title\">Fier it ymportwachtwurd yn</string>\n    <string name=\"period_hint\">Tiid (sekonden)</string>\n    <string name=\"algorithm_hint\">Hash-funksje</string>\n    <string name=\"type\">Type</string>\n    <string name=\"share\">Diele</string>\n    <string name=\"yes\">Ja</string>\n    <string name=\"no\">Nee</string>\n    <string name=\"undo\">Ungedien meitsje</string>\n    <string name=\"unlock\">Untskoattelje</string>\n    <string name=\"advanced\">Avansearre</string>\n    <string name=\"counter\">Teller</string>\n    <string name=\"digits\">Sifers</string>\n    <string name=\"secret\">Kaai</string>\n    <string name=\"scan\">QR-koade scanne</string>\n    <string name=\"scan_image\">Ofbylding scanne</string>\n    <string name=\"enter_manually\">Hânmjittich ynfiere</string>\n    <string name=\"set_up_biometric\">Biometryske ûntskoatteling ynstelle</string>\n    <string name=\"copy\">Kopiearje</string>\n    <string name=\"edit\">Bewurkje</string>\n    <string name=\"select_all\">Alles selektearje</string>\n    <string name=\"assign_icons\">Piktogrammen tawize</string>\n    <string name=\"assign_groups\">Oan groep tawize</string>\n    <string name=\"assign_groups_dialog_summary\">Selektearje in groep wêroan jo de selektearre items tawize wolle.</string>\n    <string name=\"assign_groups_dialog_dropdown\">Groep selektearje</string>\n    <string name=\"favorite\" comment=\"Verb\">Oan favoriten tafoegje</string>\n    <string name=\"unfavorite\" comment=\"Verb\">Ut favoriten fuortsmite</string>\n    <string name=\"error_all_caps\">FLATER</string>\n    <string name=\"password\">Wachtwurd</string>\n    <string name=\"confirm_password\">Wachtwurd befêstigje</string>\n    <string name=\"show_password\">Wachtwurd toane</string>\n    <string name=\"new_entry\">Nij item</string>\n    <string name=\"add_new_entry\">Nij item tafoegje</string>\n    <string name=\"unlock_vault_error\">Klûs koe net ûntskoattele wurde</string>\n    <string name=\"unlock_vault_error_description\">Wachtwurd net krekt. Kontrolearje oft jo it wachtwurd korrekt ynfierd hawwe.</string>\n    <string name=\"password_equality_error\">Wachtwurden moatte oerien komme en meie net leech wêze</string>\n    <string name=\"snackbar_authentication_method\">Kies in oanmeldmetoade</string>\n    <string name=\"encrypting_vault\">De klûs wurdt fersifere</string>\n    <string name=\"exporting_vault\">De klûs wurdt eksportearre</string>\n    <string name=\"optimizing_icon\">Piktogram wurdt optimalisearre</string>\n    <string name=\"optimizing_icon_multiple\">Piktogrammen %1$d/%2$d wurde optimalisearre</string>\n    <string name=\"reading_file\">Bestân lêze</string>\n    <string name=\"requesting_root_access\">Root-tagong wurdt oanfrege</string>\n    <string name=\"analyzing_qr\">QR-koade analysearje</string>\n    <string name=\"analyzing_qr_multiple\">QR-koade analysearje %1$d/%2$d (%3$s)</string>\n    <plurals name=\"added_new_entries\">\n        <item quantity=\"one\">%d nij item tafoege oan de klûs</item>\n        <item quantity=\"other\">%d nije items tafoege oan de klûs</item>\n    </plurals>\n    <string name=\"importing_icon_pack\">Piktogrampakket ymportearje</string>\n    <string name=\"delete_entry\">Item fuortsmite</string>\n    <string name=\"delete_entry_description\">Binne jo wis dat jo dit item fuortsmite wolle?</string>\n    <string name=\"delete_entry_explanation\">Dizze aksje skeakelet 2FA net út foar:\\n<b>%s</b>\\n\\n. Soargje derfoar dat jo 2FA útskeakele hawwe of dat jo in oare manier hawwe om koaden foar dizze tsjinst te generearjen, om foar te kommen dat jo tagong ferlieze.</string>\n    <string name=\"delete_entries\">Items fuortsmite</string>\n    <plurals name=\"delete_entries_description\">\n        <item quantity=\"one\">Binne jo wis dat jo %d item fuortsmite wolle?</item>\n        <item quantity=\"other\">Binne jo wis dat jo %d items fuortsmite wolle?</item>\n    </plurals>\n    <string name=\"discard_changes\">Wizigingen annulearje?</string>\n    <string name=\"discard_changes_description\">Jo wizigingen binne net bewarre</string>\n    <string name=\"saving_profile_error\">Flater by bewarjen profyl</string>\n    <string name=\"saving_assign_icons_error\">Flater by tawizen piktogrammen</string>\n    <string name=\"welcome\">Wolkom</string>\n    <string name=\"app_description\">Aegis is in fergees en feilige iepen-boarne 2FA-app.</string>\n    <string name=\"setup_completed\">Konfiguraasje foltôge</string>\n    <string name=\"setup_completed_description\">Aegis is konfigurearre en is ree foar gebrûk.</string>\n    <string name=\"vault_not_found\">Klûs net fûn, konfiguraasje wurdt start…</string>\n    <string name=\"copied\">Kopiearre</string>\n    <string name=\"errors_copied\">Flaters binne nei klamboerd kopiearre</string>\n    <string name=\"version_copied\">Ferzje is nei klamboerd kopiearre</string>\n    <string name=\"error_required_field\">Dit fjild is fereaske</string>\n    <string name=\"error_occurred\">Der is in flater bard</string>\n    <string name=\"decryption_error\">Der is in flater bard wylst it ûntskoatteljen fan de klûs</string>\n    <string name=\"decryption_corrupt_error\">Der is in flater bard wylst it ûntskoatteljen fan de klûs. It klûsbestân kin skansearre wêze.</string>\n    <string name=\"saving_error\">Der is in flater bard wylst it bewarjen fan de klûs</string>\n    <string name=\"vault_init_error\">Der is in flater bard wylst it inisjalisearjen fan de klûs</string>\n    <string name=\"vault_load_error\">Der is in flater bard wylst it laden fan de klûs fan it ûnthâld út</string>\n    <string name=\"biometric_decrypt_error\">Der is in flater bard wylst it dekodearjen fan de klûs mei biometryske ferifikaasje. Dit bart meastentiids allinnich as de befeiligingsynstellingen fan jo apparaat wizige binne. Untskoattelje de klûs mei jo wachtwurd en konfigurearje biometryske autentikaasje opnij yn de ynstellingen fan Aegis.</string>\n    <string name=\"biometric_init_error\">Der is in flater bard wylst it ynstellen fan biometryske ferifikaasje. Dit bart meastentiids allinnich as de befeiligingsynstellingen fan jo apparaat wizige binne. Untskoattelje de klûs mei jo wachtwurd en konfigurearje biometryske autentikaasje opnij yn de ynstellingen fan Aegis.</string>\n    <string name=\"disable_encryption\">Fersifering útskeakelje</string>\n    <string name=\"disable_encryption_description\">Binne jo wis dat jo fersifering útskeakelje wolle? Hjirtroch sil de klûs yn platte tekst bewarre wurde. <b>Automatyske reservekopyen wurde ek útskeakele</b>.</string>\n    <string name=\"enable_encryption_error\">Der is in flater bard by it ynskeakeljen fan fersifering</string>\n    <string name=\"disable_encryption_error\">Der is in flater bard by it útskeakeljen fan fersifering</string>\n    <string name=\"backup_successful\">Plannen fan de reservekopy is slagge</string>\n    <string name=\"backup_error\">Der is in flater bard wylst it meitsjen fan in reservekopy</string>\n    <string name=\"backup_status_success\">De meast resinte slagge reservekopy: %s</string>\n    <string name=\"backup_status_failed\">De meast resinte mislearre reservekopy: %s</string>\n    <string name=\"backup_status_none\">Der binne noch gjin reservekopyen makke</string>\n    <string name=\"backup_warning_password\">Reservekopyen wurde fersifere mei in apart wachtwurd ynsteld yn de befeiligingsynstellingen</string>\n    <string name=\"documentsui_error\">DocumentsUI liket te ûntbrekken op jo apparaat. Dit is in wichtich systeemûnderdiel, nedich foar it selektearjen en meitsjen fan dokuminten. As jo in ark brûkt hawwe om jo apparaat te &quot;debloaten&quot; hawwe jo it mooglik mei fersin fuortsmiten en sille jo it opnij ynstallearje moatte.</string>\n    <string name=\"icon_pack_import_error\">Der is in flater bard wylst it ymportearjen fan in piktogrampakket</string>\n    <string name=\"icon_pack_import_exists_error\">It piktogrampakket dat jo probearje te ymportearjen bestiet al. Wolle jo it oerskriuwe?</string>\n    <string name=\"icon_pack_delete_error\">Der is in flater bard wylst it fuortsmiten fan in piktogrampakket</string>\n    <plurals name=\"icon_pack_info\">\n        <item quantity=\"one\">%d piktogram</item>\n        <item quantity=\"other\">%d piktogrammen</item>\n    </plurals>\n    <string name=\"icon_custom\">Oanpast</string>\n    <string name=\"permission_denied\">Tastimming wegere</string>\n    <string name=\"andotp_new_format\">Nij formaat (v0.6.3 of nijer) </string>\n    <string name=\"andotp_old_format\">Ald formaat (v0.6.2 of âlder) </string>\n    <string name=\"choose_andotp_importer\">Hokker formaat hat it andOTP reservekopybestân?</string>\n    <string name=\"choose_totpauth_importer\">Is dizze TOTP-autentikator-reservekopy fersifere mei in wachtwurd?</string>\n    <string name=\"choose_application\">Selektearje de applikaasje wêrút jo ymportearje wolle</string>\n    <string name=\"choose_theme\">Selektearje jo winske tema</string>\n    <string name=\"choose_account_name_position\">Selektearje jo winske accountnammeposysje</string>\n    <string name=\"choose_view_mode\">Selektearje jo winske werjeftemodus</string>\n    <string name=\"choose_copy_behavior\">Selektearje it winske gedrach foar kopiearjen</string>\n    <string name=\"parsing_file_error\">Der is in flater bard wylst it oersetten fan it bestân</string>\n    <string name=\"file_not_found\">Flater: Bestân net fûn</string>\n    <string name=\"reading_file_error\">Der is in flater bard wylst it lêzen fan it bestân</string>\n    <string name=\"app_lookup_error\">Flater: App is net ynstallearre</string>\n    <string name=\"app_version_error\">De ynstallearre ferzje fan %s wurdt net stipe. Resinte ferzjes binne begûn mei it fersiferjen fan inkelde bestannen yn de ynterne ûnthâldmap. Hjirtroch hat Aegis gjin tagong ta de ynformaasje dy’t nedich is om te ymportearjen. Ymportearjen sil wierskynlik in flater opleverje. Wolle jo dochs trochgean?</string>\n    <string name=\"root_error\">Flater: Kin gjin root-tagong krije</string>\n    <plurals name=\"imported_entries_count\">\n        <item quantity=\"one\">%d item ymportearre</item>\n        <item quantity=\"other\">%d items ymportearre</item>\n    </plurals>\n    <plurals name=\"entries_shown\">\n        <item quantity=\"one\">%d item toand</item>\n        <item quantity=\"other\">%d items toand</item>\n    </plurals>\n    <string name=\"intro_import_error_title\">Der is in flater bard wylst it ymportearjen fan de klûs</string>\n    <string name=\"import_error_title\">Der binne flaters bard wylst it ymportearjen</string>\n    <string name=\"exporting_vault_error\">Der is in flater bard wylst it eksportearjen fan de klûs</string>\n    <string name=\"exported_vault\">De klûs is eksportearre</string>\n    <string name=\"encryption_set_password_error\">Der is in flater bard wylst it ynstellen fan it wachtwurd.</string>\n    <string name=\"encryption_enable_biometrics_error\">Der is in flater bard by it ynskeakeljen fan biometrysk ûntskoatteljen. Guon apparaten hawwe in minne ymplemintaasje fan biometryske autentikaasje, dy fan jo is der wierskynlik ien fan. Tink ris nei om allinnich in wachtwurd te brûken.</string>\n    <string name=\"no_cameras_available\">Gjin kamera’s beskikber</string>\n    <string name=\"read_qr_error\">Der is in flater bard wylst it lêzen fan de QR-koade</string>\n    <string name=\"read_qr_error_phonefactor\">Aegis is net kompatibel mei it eigen 2FA-algoritme fan Microsoft. Soargje derfoar dat jo ‘Applicatie zonder meldingen instellen’ selektearje by it konfigurearjen fan 2FA yn Office 365.</string>\n    <string name=\"partial_google_auth_import\">Net folsleine Google Authenticator-eksport detektearre</string>\n    <string name=\"partial_google_auth_import_warning\">Inkelde QR-koaden ûntbrekke yn de ymport. De folgjende koaden binne net fûn:\\n\\n<b>%s</b>\\n\\nJo kinne trochgean mei it ymportearjen fan dizze ûnfolsleine eksport, mar wy rekommandearje oan it opnij te probearjen mei alle QR-koaden, sadat jo net it risiko rinne de tagong ta tokens te ferliezen.</string>\n    <string name=\"missing_qr_code_descriptor\">• QR-koade %d</string>\n    <plurals name=\"import_partial_export_anyway\">\n        <item quantity=\"one\">%d token dochs ymportearje</item>\n        <item quantity=\"other\">%d tokens dochs ymportearje</item>\n    </plurals>\n    <string name=\"import_google_auth_failure\">Ymportearjen fan Google Authenticator-eksport mislearre</string>\n    <string name=\"unrelated_google_auth_batches_error\">Eksport befettet ynformaasje foar in net relatearre batch. Probearje 1 batch tagelyk te ymportearjen.</string>\n    <string name=\"no_tokens_can_be_imported\">Hjirtroch kinne gjin tokens ymportearre wurde</string>\n    <string name=\"unlocking_vault\">Klûs wurdt ûntskoattele</string>\n    <string name=\"rename_group\">Groep omneame</string>\n    <string name=\"no_group_selection\">As in item net yn in groep sit, kin dit fûn wurde ûnder ‘Gjin groep’.</string>\n    <string name=\"remove_group\">Groep fuortsmite</string>\n    <string name=\"remove_group_description\">Binne jo wis dat jo dizze groep fuortsmite wolle? Alle items binnen dizze groep wurde automatysk ferpleatst nei ‘Gjin groep’.</string>\n    <string name=\"remove_unused_groups\">Net brûkte groepen fuortsmite</string>\n    <string name=\"remove_unused_groups_description\">Binne jo wis dat jo alle groepen, dy’t net tawizen binne ta in item, fuortsmite wolle?</string>\n    <string name=\"remove_icon_pack\">Piktogrammepakket fuortsmite</string>\n    <string name=\"remove_icon_pack_description\">Binne jo wis dat jo dit piktogrammepakket fuortsmite wolle? Items dy’t piktogrammen út dit pakket brûke, wurde net beynfloede.</string>\n    <string name=\"details\">Details</string>\n    <string name=\"show_error_details\">Flaterdetails toane</string>\n    <string name=\"lock\">Beskoattelje</string>\n    <string name=\"name\">Namme</string>\n    <string name=\"no_group\">Gjin groep</string>\n    <string name=\"sort\" comment=\"Title of the Sort button in the top action bar of the main view\">Sortearje</string>\n    <string name=\"sort_alphabetically\">Utjouwer (A t/m Z)</string>\n    <string name=\"sort_alphabetically_reverse\">Utjouwer (Z t/m A)</string>\n    <string name=\"sort_alphabetically_name\">Account (A t/m Z)</string>\n    <string name=\"sort_alphabetically_name_reverse\">Account (Z t/m A)</string>\n    <string name=\"sort_usage_count\">Gebrûksteller</string>\n    <string name=\"sort_last_used\">Lêst brûkt</string>\n    <string name=\"sort_custom\">Oanpast</string>\n    <string name=\"last_used\">Lêst brûkt</string>\n    <string name=\"last_used_never\">nea</string>\n    <string name=\"new_group\">Nije groep…</string>\n    <string name=\"group\">Groep</string>\n    <string name=\"group_name_hint\">Groepsnamme</string>\n    <string name=\"preference_manage_groups\">Groepen bewurkje</string>\n    <string name=\"preference_manage_groups_summary\">Behear en smyt hjir jo groepen fuort</string>\n    <string name=\"preference_reset_usage_count\">Gebrûksteller op 0 ynstelle</string>\n    <string name=\"preference_reset_usage_count_summary\">De gebrûksteller fan elk item yn jo klûs opnij ynstelle</string>\n    <string name=\"preference_reset_usage_count_dialog\">Binne jo wis dat jo de gebrûksteller fan alle items yn de klûs op 0 sette wolle?</string>\n    <string name=\"note\" comment=\"Users can add a note to an entry\">Notysje</string>\n    <string name=\"clear\">Wiskje</string>\n    <string name=\"dialog_duplicate_entry_title\" comment=\"'Duplicate' is a noun here\">Ynfier bestiet al</string>\n    <string name=\"dialog_duplicate_entry_message\">Dizze ynfier hat deselde namme en útjouwer as ien of mear besteande fermeldingen. Hoe wolsto fierder gean?</string>\n    <string name=\"dialog_duplicate_entry_overwrite_title\">Besteande ynfier/items oerskriuwe</string>\n    <string name=\"dialog_duplicate_entry_overwrite_subtitle\">Ferfang de besteande ynfier of fermeldingen troch de nije. Dizze aksje kin net ûngedien makke wurde</string>\n    <string name=\"dialog_duplicate_entry_suffix_title\">Foegje suffix ta</string>\n    <string name=\"dialog_duplicate_entry_suffix_subtitle\">Foegje in achterfoechsel ta oan de namme fan dizze nije ynfier. De nije namme wurdt %s</string>\n    <string name=\"dialog_duplicate_entry_cancel_title\">Bewarjen annulearje</string>\n    <string name=\"dialog_duplicate_entry_cancel_subtitle\">Hjirmei kinne jo it item bewurkjen eardat jo it opnij probearje te bewarjen</string>\n    <plurals name=\"dialog_duplicate_entry_overwrite_dialog_message\">\n        <item quantity=\"one\">Bisto wis datsto %d ynfier mei de folgjende namme fuortsmite wolst:\\n\\n%s - %s</item>\n        <item quantity=\"other\">Bisto wis datsto %d ynfier mei de folgjende namme fuortsmite wolst:\\n\\n%s - %s</item>\n    </plurals>\n    <string name=\"dialog_duplicate_entry_overwrite_dialog_title\">Fuortsmiten befêstigje</string>\n    <string name=\"pref_haptic_feedback_summary\">Lit dy apparaat trille wannear’t de koaden fernije</string>\n    <string name=\"pref_haptic_feedback_title\">Haptyske feedback</string>\n    <string name=\"pref_highlight_entry_title\">Koaden markearje nei oantikken</string>\n    <string name=\"pref_highlight_entry_summary\">Meitsje koaden makliker te ûnderskieden fan inoar troch se tydlik te markearjen nei it oantikken</string>\n    <string name=\"pref_groups_multiselect_title\">Meardere groepen selektearje</string>\n    <string name=\"pref_groups_multiselect_summary\">Seleksje fan meardere groepen tagelyk tastean</string>\n    <string name=\"pref_minimize_on_copy_title\">By kopiearjen minimalisearje</string>\n    <string name=\"pref_minimize_on_copy_summary\">App nei kopiearjen fan in koade minimalisearje</string>\n    <string name=\"pref_copy_behavior_title\">Koaden nei it klamboerd kopiearje</string>\n    <string name=\"pref_search_behavior_title\">Sykgedrach</string>\n    <string name=\"pref_pause_entry_title\">Tokens by oantikken befrieze</string>\n    <string name=\"pref_pause_entry_summary\">Automatysk ferfarskjen fan koaden troch derop te tikken stopje. Koaden sille net bywurke wurde sa lang se fokust binne. Fereasket ‘Koaden markearje nei oantikken’ of ‘Oantikke om te toanen’.</string>\n    <string name=\"pin_keyboard_description\">Fier jo wachtwurd yn om it PIN-toetseboerd yn te skeakeljen. Let op: dit wurket allinnich as jo wachtwurd út sifers bestiet</string>\n    <string name=\"pin_keyboard_error\">Flater by ynskeakeljen fan PIN-toetseboerd</string>\n    <string name=\"pin_keyboard_error_description\">It is net mooglik om PIN-toetseboerd yn te stellen. It wachtwurd mei allinnich út sifers bestean.</string>\n    <string name=\"pin_keyboard_disabled\">Wachtwurd wizige. It PIN-toetseboerd wurdt net mear werjûn.</string>\n    <string name=\"selected\">Selektearre</string>\n    <string name=\"dark_theme_title\">Donker tema</string>\n    <string name=\"light_theme_title\">Ljocht tema</string>\n    <string name=\"amoled_theme_title\">AMOLED-tema</string>\n    <string name=\"system_theme_title\">Ynsteld troch batterijbesparring</string>\n    <string name=\"system_amoled_theme_title\">Ynsteld troch batterijbesparring (AMOLED)</string>\n    <string name=\"normal_viewmode_title\">Normaal</string>\n    <string name=\"compact_mode_title\">Kompakt</string>\n    <string name=\"small_mode_title\">Lyts</string>\n    <string name=\"tiles_mode_title\">Tegels</string>\n    <string name=\"unknown_issuer\">Unbekende útjouwer</string>\n    <string name=\"unknown_account_name\">Unbekende accountnamme</string>\n    <plurals name=\"import_error_dialog\">\n        <item quantity=\"one\">Aegis koe %d token net ymportearje. Dit token sil oerslaggen wurde. Druk op ‘details’ om mear ynformaasje oer de flaters te sjen.</item>\n        <item quantity=\"other\">Aegis koe %d tokens net ymportearje. Dizze tokens sille oerslaggen wurde. Druk op ‘details’ om mear ynformaasje oer de flaters te sjen.</item>\n    </plurals>\n    <string name=\"unable_to_process_deeplink\">Deeplink kin net ferwurke wurde</string>\n    <string name=\"unable_to_read_qrcode_file\">QR-koade koe net út bestân lêzen en ferwurke wurde: %s.</string>\n    <string name=\"unable_to_process_shared_text\">Dielde tekst kin net as OTP ferwurke wurde</string>\n    <string name=\"unable_to_read_qrcode_files\">Guon QR-koaden kinne net lêzen en ferwurke wurde. Allinnich%1$d/%2$d items wurde ymportearre.</string>\n    <string name=\"unable_to_generate_qrcode\">QR-koade koe net generearre wurde</string>\n    <string name=\"select_picture\">Ofbylding selektearje</string>\n    <string name=\"select_icon\">Piktogram selektearje</string>\n    <string name=\"tile_open_vault\" comment=\"label for a quick settings tile that opens the app when tapped\">Klûs iepenje</string>\n    <string name=\"tile_open_scanner\" comment=\"label for a quick settings tile that opens the QR code scanner when tapped\">Scanner iepenje</string>\n    <string name=\"toggle_checkboxes\">Seleksje omdraaie</string>\n    <string name=\"search\">Sykje</string>\n    <string name=\"channel_name_lock_status\">Beskoattelsteat</string>\n    <string name=\"channel_description_lock_status\">Aegis kin in permaninte melding toane wannear’t de klûs beskoattele is</string>\n    <string name=\"vault_unlocked_state\">Klûs is ûntskoattele. Tik hjir om te beskoatteljen.</string>\n    <string name=\"version\">Ferzje</string>\n    <string name=\"changelog\">Wizigingenlochboek</string>\n    <string name=\"whats_new\">Wat is der nij</string>\n    <string name=\"github_description\">Boarnekoade, problemen en ynformaasje</string>\n    <string name=\"license\">Lisinsje</string>\n    <string name=\"license_description\">Aegis Authenticator is lisinsearre ûnder de GPLv3</string>\n    <string name=\"third_party_licenses\">Lisinsjes fan tredden</string>\n    <string name=\"third_party_licenses_description\">Lisinsjes fan biblioteken fan tredden brûkt troch Aegis</string>\n    <string name=\"country_netherlands\">Nederlân</string>\n    <string name=\"email_us\">Stjoer in e-mailberjocht</string>\n    <string name=\"visit_website\">Besykje ús website</string>\n    <string name=\"about_support\">Stipe</string>\n    <string name=\"support_rate\">Beoardielje</string>\n    <string name=\"support_rate_description\">Stypje ús troch in beoardieling yn de Google Play Store efter te litten</string>\n    <string name=\"webview_error\">Dit apparaat stipet gjin webview, hokker nedich is om de wizigingen te besjen. It mist in systeemkomponint.</string>\n    <string name=\"email\">E-mailadres</string>\n    <string name=\"time_sync_warning_title\">Automatyske tiidsyngronisaasje</string>\n    <string name=\"time_sync_warning_message\">Aegis is ôfhinklik fan syngronisearre systeemtiid om krekte koaden te generearjen. In ôfwiking fan op syn minst inkelde sekonden kin liede ta net krekte koaden. It liket derop dat jo apparaat net ynsteld is om de tiid automatysk te syngronisearjen. Wolle jo dit no dwaan?</string>\n    <string name=\"time_sync_warning_disable\">Stop mei my te warskôgjen. Ik wit wat ik doch.</string>\n    <string name=\"google_qr_export_unrelated\">Net relatearre QR-koade fûn. Probearje de scanner opnij te starten.</string>\n    <plurals name=\"google_qr_export_scanned\">\n        <item quantity=\"one\">%1$d/%2$d QR-koade scand</item>\n        <item quantity=\"other\">%1$d/%2$d QR-koaden scand</item>\n    </plurals>\n    <string name=\"google_qr_export_unexpected\">QR-koade #%1$d ferwachte, yn stee dêrfan #%2$d scand</string>\n    <string name=\"backup_error_bar_message\"><b>Klûsreservekopy koartlyn mislearre</b></string>\n    <string name=\"backup_error_dialog_details\" comment=\"The first parameter is the type of backup (e.g. built-in or Android backup). The second parameter is an elapsed time in the style of 'x seconds/minutes/days ago'.\">        In resinte reservekopy fan de klûs mei %1$s mislearre, omdat der wat misgien is. De reservekopybesykjen wie op %2$s. Kontrolearje de resevekopy-ynstellingen om wis te wêzen dat reservekopyen mei sukses foltôge wurde kinne.\n    </string>\n    <string name=\"backup_permission_error_dialog_details\" comment=\"The first parameter is the type of backup (e.g. built-in or Android backup). The second parameter is an elapsed time in the style of 'x seconds/minutes/days ago'.\">        In resint besykjen in reservekopy fan de klûs te meitsjen mei %1$s is mislearre. Aegis hat gjin tastimming om te skriuwen nei de reservekopylokaasje. De reservekopy is %2$s probearre. Dizze flater kin barre as jo de reservekopylokaasje ferpleatst/omneamd hawwe of as jo koartlyn in Aegis-reservekopy wersteld hawwe. Konfigurearje de reservekopylokaasje opnij.\n    </string>\n    <string name=\"backup_system_builtin\">it ynboude automatyske reservekopyen fan Aegis</string>\n    <string name=\"backup_system_android\">it cloudreservekopysysteem fan Android</string>\n    <string name=\"backup_reminder_bar_message_with_latest\" comment=\"The parameter is an elapsed time in the style of 'x seconds/minutes/days ago'\">        De meast resinte reservekopy is ferâldere (%s)\n    </string>\n    <string name=\"backup_reminder_bar_message\">        Gjin reservekopy makke fan wizigingen\n    </string>\n    <string name=\"backup_reminder_bar_dialog_title\">Noch gjin reservekopy makke fan wizigingen</string>\n    <string name=\"backup_reminder_bar_dialog_summary\">        Der is noch gjin reservekopy fan resinte wizigingen yn de klûs. It is wichtich om regelmjittich reservekopyen te meitsjen om de tagong ta accounts net te ferliezen. Tink ris oan om automatyske reservekopyen yn te stellen yn it ynstellingenmenu.\n    </string>\n    <string name=\"backup_reminder_bar_dialog_accept\">Reservekopyen ynstelle</string>\n    <string name=\"backup_plaintext_export_warning\"><b>De klûs is resint eksportearre yn platte tekst</b></string>\n    <string name=\"pref_show_plaintext_warning_hint\">Dizze warskôging net opnij toane</string>\n    <string name=\"backup_plaintext_warning_explanation\">Dizze warskôging wurdt toand, omdat jo resint in net-fersifere kopy fan de klûs eksportearre hawwe. Om jo tokens feilich te hâlden, riede wy oan dit bestân fuort te smiten as jo it net mear nedich hawwe.</string>\n    <string name=\"switch_camera\">Kamera wikselje</string>\n    <string name=\"empty_list\">Der binne gjin koaden om te toanen. Begjin mei it tafoegjen fan items troch op it plusteken yn de rjochterûnderhoek te tikken.</string>\n    <string name=\"empty_list_title\">Gjin items fûn</string>\n    <string name=\"empty_group_list\">Der binne gjin groepen om te toanen. Foegje groepen ta yn it bewurkingsskerm fan in item.</string>\n    <string name=\"empty_group_list_title\">Gjin groepen fûn</string>\n    <string name=\"no_icon_packs\">Der binne noch gjin piktogrampakketten ymportearre. Tik op it plusteken om der ien te ymportearjen. Tip: probearje <a href=\"https://aegis-icons.github.io\">Aegis-piktogrammen</a>.</string>\n    <string name=\"no_icon_packs_title\">Gjin piktogrampakketten</string>\n    <string name=\"pick_icon\">Kies in piktogram</string>\n    <string name=\"uncategorized\">Net kategorisearre</string>\n    <string name=\"done\">Ree</string>\n    <plurals name=\"qr_count\">\n        <item quantity=\"one\">%d / %d QR-koade</item>\n        <item quantity=\"other\">%d / %d QR-koaden</item>\n    </plurals>\n    <string name=\"next\">Folgjende</string>\n    <string name=\"previous\">Foarige</string>\n    <string name=\"copy_uri\">URI kopiearje</string>\n    <string name=\"unable_to_copy_uri_to_clipboard\">Kin URI net nei klamboerd kopiearje</string>\n    <string name=\"uri_copied_to_clipboard\">URI nei klamboerd kopiearre</string>\n    <string name=\"transfer_entry_description\">Scan dizze QR-koade mei de autentikator-app wêr’t jo dit item nei oerbringe wolle</string>\n    <string name=\"transfer_entry_brightness\">Tik op de QR-koade om helderheid op folslein skerm te skeakeljen</string>\n    <string name=\"google_auth_compatible_transfer_description\">Scan dizze QR-koaden mei Aegis of Google Authenticator.\\n\\nFanwegen beheiningen fan de Google Authenticator-app, binne allinnich TOTP- &amp; HOTP-tokens dy’t SHA1 brûke en 6-siferige koaden produsearje opnommen</string>\n    <string name=\"password_strength_very_weak\">Hiel swak</string>\n    <string name=\"password_strength_weak\">Swak</string>\n    <string name=\"password_strength_fair\">Reedlik</string>\n    <string name=\"password_strength_good\">Goed</string>\n    <string name=\"password_strength_strong\">Sterk</string>\n    <string name=\"password_strength_unknown\">Wachtwurd te lang foar sterkte-analyze</string>\n    <string name=\"pref_pin_keyboard_title\">PIN-toetsen op beskoattelskerm</string>\n    <string name=\"pref_pin_keyboard_summary\">Skeakelje dit yn as jo it PIN-toetseboerd op it beskoattelskerm brûke wolle. Wurket allinnich by numerike wachtwurden</string>\n    <string name=\"title_activity_preferences\">Ynstellingen</string>\n    <string name=\"title_activity_manage_groups\">Groepen beheare</string>\n    <string name=\"title_activity_transfer\">Items oerbringe</string>\n    <string name=\"title_activity_about\">Oer</string>\n    <string name=\"title_activity_edit_entry\">Item bewurkje</string>\n    <string name=\"title_activity_scan_qr\">Scan in QR-koade</string>\n    <string name=\"title_activity_import_entries\">Items ymportearje</string>\n    <string name=\"title_activity_assign_icons\">Piktogrammen tawize</string>\n    <string name=\"title_activity_licenses\">Lisinsjes fan tredden</string>\n    <string name=\"dialog_wipe_entries_title\">Items wiskje</string>\n    <string name=\"dialog_wipe_entries_message\">Jo klûs befettet al items. Wollle jo dizze items fuortsmite eardat jo dit bestân ymportearje?\\n\\n<b>Hjirmei ferlieze jo permanint tagong ta de besteande items yn de klûs.</b></string>\n    <string name=\"dialog_wipe_entries_checkbox\">Klûsynhâld wiskje</string>\n    <string name=\"import_from_clipboard_title\">Fan klamboerd ymportearje</string>\n    <string name=\"import_from_clipboard_message\">Wy hawwe in jildige otpauth-uri op jo klamboerd fûn.\\n\\n<b>Namme</b>: %1$s\\n<b>Utjouwer</b>: %2$s\\n\\nWolle jo dit brûke om dit item te foljen?</string>\n    <string name=\"panic_trigger_ignore_toast\">Aegis hat panyktrigger ûntfongen, mar ynstelling is útskeakele, wurdt negearre</string>\n    <string name=\"pref_panic_trigger_title\">Klûs fuortsmite by panyktrigger</string>\n    <string name=\"pref_panic_trigger_summary\">Klûs fuortsmite by ûntfangen fan Ripple-panyktrigger</string>\n    <string name=\"import_vault\">Aegis-klûs ymportearje</string>\n    <string name=\"import_vault_hint\">Wolle jo út in oare 2FA-app ymportearje? Foltôgje earst de konfiguraasje en gean dan nei it ynstellingenmenu.</string>\n    <plurals name=\"import_duplicate_toast\">\n        <item quantity=\"one\">%d potinsjele dûbeling net oanfinkt. Kontrolearje de list mei items.</item>\n        <item quantity=\"other\">%d potinsjele dûbelingen net oanfinkt. Kontrolearje de list mei items.</item>\n    </plurals>\n    <string name=\"importer_help_2fas\">Leverje in 2FAS-autentikator-eksportbestân oan.</string>\n    <string name=\"importer_help_aegis\">Leverje in Aegis-eksport-/reservekopybestân oan.</string>\n    <string name=\"importer_help_authenticator_plus\">Leverje in Authenticator Plus-eksportbestân oan krigen fia <b>Ynstellingen -&gt; Reservekopy &amp; Werstelle -&gt; Eksportearje as Tekst en HTML</b>.</string>\n    <string name=\"importer_help_authy\">Leverje in kopy oan fan <b>/data/data/com.authy.authy/shared_prefs/com.authy.storage.tokens.authenticator.xml</b>, pleatst yn de ynterne ûnthâldmap fan Authy.</string>\n    <string name=\"importer_help_andotp\">Leverje in andOTP-eksport-/reservekopybestân oan.</string>\n    <string name=\"importer_help_bitwarden\">Leverje in Bitwarden-eksport-/reservekopybestân oan. Fersifere bestannen wurde net stipe.</string>\n    <string name=\"importer_help_battle_net_authenticator\">Leverje in kopy oan fan <b>/data/data/com.blizzard.messenger/shared_prefs/com.blizzard.messenger.authenticator_preferences.xml</b>, pleatst yn de ynterne ûnthâldmap fan Battle.net Authenticator.</string>\n    <string name=\"importer_help_duo\">Leverje in kopy oan fan <b>/data/data/com.duosecurity.duomobile/files/duokit/accounts.json</b>, pleatst yn de ynterne ûnthâldmap fan DUO.</string>\n    <string name=\"importer_help_ente_auth\">Fier in Ente Auth-eksportbestân yn. Op dit stuit wurde allinnich net-fersifere bestannen stipe.</string>\n    <string name=\"importer_help_freeotp\">FreeOTP 2: Leverje in kopy.\\nFreeOTP 1.x: Leverje in kopy oan fan <b>/data/data/org.fedorahosted.freeotp/shared_prefs/tokens.xml</b>, pleatst yn de ynterne ûnthâldmap fan FreeOTP.</string>\n    <string name=\"importer_help_freeotp_plus\">Leverje in FreeOTP-eksportbestân oan.</string>\n    <string name=\"importer_warning_title_freeotp2\">Kompatibiliteit mei FreeOTP 2</string>\n    <string name=\"importer_warning_message_freeotp2\">Der binne in oantal problemen yn FreeOTP 2 dy’t ta korrupte reservekopyen liede kinne. Aegis sil probearje safolle mooglik items te rêden, mar it is mooglik dat guon of sels alles net te ymportearjen is.</string>\n    <string name=\"importer_help_google_authenticator\"><b>Allinnich databasebestannen fan Google Authenticator v5.10 en earder wurde stipe</b>.\\n\\nLeverje in kopy oan fan <b>/data/data/com.google.android.apps.authenticator2/databases/databases</b>, pleatst yn de ynterne ûnthâldmap fan Google Authenticator.</string>\n    <string name=\"importer_help_microsoft_authenticator\">Leverje in kopy oan fan <b>/data/data/com.azure.authenticator/databases/PhoneFactor</b>, pleatst yn de ynterne ûnthâldmap fan Microsoft Authenticator.</string>\n    <string name=\"importer_help_plain_text\">Leverje in tekstbestân oan mei in Google Authenticator-URI op elke rigel.</string>\n    <string name=\"importer_help_proton_authenticator\">Leverje in Proton Authenticator-exportbestân (.json) krigen fia <b>Instellingen -&gt; Exporteren</b>.</string>\n    <string name=\"importer_help_steam\"><b>Steam v3.0 en nijer wurde net stipe</b>. Soargje foar in kopy fan <b>/data/data/com.valvesoftware.android.steam.community/files/Steamguard-*.json</b>, te finen yn de ynterne ûnthâldmap fan Steam.</string>\n    <string name=\"importer_help_stratum\">Leverje in Stratum-eksportbestân oan, ûntfongen fia <b>Ynstellingen -&gt; Reservekopy -&gt; Reservekopy nei fersifere bestân (oanrekommandearre)</b>.</string>\n    <string name=\"importer_help_totp_authenticator\">Leverje in TOTP-autentikator-eksportbestân oan.</string>\n    <string name=\"importer_help_winauth\">Leverje in WinAuth-eksportbestân oan.</string>\n    <string name=\"import_assign_icons_dialog_title\">Piktogrammen tawize</string>\n    <string name=\"import_assign_icons_dialog_text\">Wolle jo piktogrammen tawize oan de ymportearre items?</string>\n    <string name=\"importer_encrypted_exception_google_authenticator\">Fersifere item is oerslaggen: %s</string>\n    <string name=\"importer_help_direct\">Ymportearje items streekrjocht fan %s út. Dit fereasket dat de app op dit apparaat stiet en dat root-tagong oan Aegis ferliend wurdt.</string>\n    <string name=\"groups\">Groepen</string>\n    <string name=\"pref_focus_search\">Fokus sykfjild nei starten app</string>\n    <string name=\"pref_focus_search_summary\">Fokus it sykfjild daliks nei it iepenjen fan de app.</string>\n    <string name=\"pref_grouping_halves\">Helten</string>\n    <string name=\"pref_grouping_none\">Gjin groepearring</string>\n    <string name=\"pref_grouping_size_two\">Groepen fan 2</string>\n    <string name=\"pref_grouping_size_three\">Groepen fan 3</string>\n    <string name=\"pref_grouping_size_four\">Groepen fan 4</string>\n    <string name=\"pref_copy_behavior_never\">Nea</string>\n    <string name=\"pref_copy_behavior_single_tap\">Inkelde tik</string>\n    <string name=\"pref_copy_behavior_double_tap\">Dûbele tik</string>\n    <string name=\"pref_account_name_position_hidden\">Ferstoppe</string>\n    <string name=\"pref_account_name_position_end\">Njonken de útjouwer</string>\n    <string name=\"pref_account_name_position_below\">Under de útjouwer</string>\n    <plurals name=\"time_elapsed_seconds\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"one\">%d sekonde lyn</item>\n        <item quantity=\"other\">%d sekonden lyn</item>\n    </plurals>\n    <plurals name=\"time_elapsed_minutes\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"one\">%d minút lyn</item>\n        <item quantity=\"other\">%d minuten lyn</item>\n    </plurals>\n    <plurals name=\"time_elapsed_hours\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"one\">%d oere lyn</item>\n        <item quantity=\"other\">%d oeren lyn</item>\n    </plurals>\n    <plurals name=\"time_elapsed_days\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"one\">%d dei lyn</item>\n        <item quantity=\"other\">%d dagen lyn</item>\n    </plurals>\n    <plurals name=\"time_elapsed_years\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"one\">%d jier lyn</item>\n        <item quantity=\"other\">%d jierren lyn</item>\n    </plurals>\n    <plurals name=\"dropdown_checkboxes_default_count\">\n        <item quantity=\"one\">%d item selektearre</item>\n        <item quantity=\"other\">%d items selektearre</item>\n    </plurals>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-fy-rNL-v29/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"system_theme_title\">Systeemstandert</string>\n    <string name=\"system_amoled_theme_title\">Systeemstandert (AMOLED)</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-gl-rES/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources xmlns:tools=\"http://schemas.android.com/tools\">\n    <string name=\"action_settings\">Axustes</string>\n    <string name=\"action_about\">Información</string>\n    <string name=\"action_delete\">Eliminar</string>\n    <string name=\"action_transfer\">Transferir</string>\n    <string name=\"action_edit_icon\">Editar icona</string>\n    <string name=\"action_reset_usage_count\">Reiniciar contador de usos</string>\n    <string name=\"action_reset_usage_count_dialog\">Tes a certeza de que queres poñer o contador de usos desta entrada a cero?</string>\n    <string name=\"action_default_icon\">Restablecer icona predeterminada</string>\n    <string name=\"discard\">Desbotar</string>\n    <string name=\"save\">Gardar</string>\n    <string name=\"all\">Todo</string>\n    <string name=\"issuer\">Provedor</string>\n    <string name=\"yandex_pin\">PIN (4–16 cifras)</string>\n    <string name=\"motp_pin\">PIN (4 cifras)</string>\n    <string name=\"suggested\">Suxerido</string>\n    <string name=\"usage_count\">Contador de usos</string>\n    <string name=\"warning\">Aviso</string>\n    <string name=\"pref_cat_appearance_app\">Aplicación</string>\n    <string name=\"pref_cat_appearance_entries\">Entradas</string>\n    <string name=\"pref_cat_backups_android\">Android</string>\n    <string name=\"pref_cat_backups_auto\">Copias de seguridade automáticas</string>\n    <string name=\"pref_section_behavior_title\">Comportamento</string>\n    <string name=\"pref_section_behavior_summary\">Personaliza o que ocorre ao interactuar coa lista de entradas.</string>\n    <string name=\"pref_section_appearance_title\">Aparencia</string>\n    <string name=\"pref_section_appearance_summary\">Configura o tema, o idioma e outros axustes que afectan á aparencia da aplicación.</string>\n    <string name=\"pref_section_security_title\">Seguridade</string>\n    <string name=\"pref_section_security_summary\">Configura o cifrado, o desbloqueo por biometría, o bloqueo automático e outros axustes de seguridade.</string>\n    <string name=\"pref_section_import_export_title\">Importar e exportar</string>\n    <string name=\"pref_section_import_export_summary\">Importa copias de seguridade de Aegis ou de outras aplicacións de autenticación. Exporta manualmente o teu almacén de Aegis.</string>\n    <string name=\"pref_section_audit_log_title\">Rexistro de auditoría</string>\n    <string name=\"pref_section_audit_log_summary\">Atopa unha lista de tódolos eventos importantes que ocorreron na app.</string>\n    <string name=\"pref_section_backups_title\">Copias de seguridade</string>\n    <string name=\"pref_section_backups_summary\">Configura copias de seguridade automáticas na localización que escollas ou activa a participación no sistema de copias de seguridade na nube de Android.</string>\n    <string name=\"pref_section_icon_packs\">Paquetes de iconas</string>\n    <string name=\"pref_section_icon_packs_summary\">Xestiona e importa paquetes de iconas.</string>\n    <string name=\"pref_select_theme_title\">Tema</string>\n    <string name=\"pref_dynamic_colors_title\">Cores dinámicas</string>\n    <string name=\"pref_dynamic_colors_summary\">Aplica unha superposición baseada nas cores do teu tema de Android</string>\n    <string name=\"pref_view_mode_title\">Modo de visualización</string>\n    <string name=\"pref_lang_title\">Idioma</string>\n    <string name=\"pref_show_icons_title\">Mostrar iconas</string>\n    <string name=\"pref_show_icons_summary\">Mostra iconas ao lado de cada entrada</string>\n    <string name=\"pref_code_group_size_title\">Agrupación dos díxitos do código</string>\n    <string name=\"pref_code_group_size_summary\">Escolle o número de díxitos polos que agrupar os códigos</string>\n    <string name=\"pref_account_name_position_title\">Mostrar o nome da conta</string>\n    <string name=\"pref_show_next_code_title\">Mostrar código seguinte</string>\n    <string name=\"pref_show_next_code_summary\">Xera e amosa o seguinte código antes de tempo</string>\n    <string name=\"pref_expiration_state_title\">Indicar que os códigos van caducar</string>\n    <string name=\"pref_expiration_state_summary\">Cambia a cor dos códigos e fainos titilar cando estean a piques de caducar</string>\n    <string name=\"pref_expiration_state_fallback\">Cambia a cor dos códigos cando estean a piques de caducar</string>\n    <string name=\"pref_shared_issuer_account_name_title\">Mostrar o nome da conta só cando sexa necesario</string>\n    <string name=\"pref_shared_issuer_account_name_summary\">Mostrar nomes de conta só cando teñan o mesmo provedor. Os demáis nomes de conta ocultaranse.</string>\n    <string name=\"pref_account_name_position_summary_override\">Este axuste está anulado polo modo de visualización de mosaico. O nome da conta mostrarase debaixo do provedor.</string>\n    <string name=\"pref_import_file_title\">Importar desde un ficheiro</string>\n    <string name=\"pref_import_file_summary\">Importar tokens desde un ficheiro</string>\n    <string name=\"pref_android_backups_title\">Copias de seguridade na nube de Android</string>\n    <string name=\"pref_android_backups_summary\">Permitir que o sistema de copias de seguridade na nube de Android inclúa nelas o almacén de Aegis. Isto só se admite nos almacéns cifrados.</string>\n    <string name=\"pref_android_backups_hint\"><i>As copias de seguridade de dispositivo a dispositivo (D2D) sempre están permitidas, independentemente da configuración anterior</i></string>\n    <string name=\"pref_backups_title\">Facer copia do almacén automaticamente</string>\n    <string name=\"pref_backups_summary\">Crear copias de seguridade de xeito automático no almacenamento externo cada vez que se fai algún cambio. Isto só se admite nos almacéns cifrados.</string>\n    <string name=\"pref_backups_reminder_title\">Recordatorio da copia de seguridade</string>\n    <string name=\"pref_backups_reminder_summary\">Mostra un recordatorio para facer a copia de seguridade do almacén, no caso de que non fixeras ningunha copia dos teus últimos cambios.</string>\n    <string name=\"pref_backups_reminder_dialog_title\">Desactivar recordatorio da copia de seguridade</string>\n    <string name=\"pref_backups_reminder_dialog_summary\">Se desactivas este recordatorio, Aegis non che dirá se hai cambios sen gardar ou non nas copias de seguridade, polo que estarás no risco de perder o acceso aos teus tokens. Tes a certeza de que queres desactivar o recordatorio?</string>\n    <string name=\"pref_backups_versioning_strategy_title\">Estratexia da copia de seguridade</string>\n    <string name=\"pref_backups_versioning_strategy_keep_x_versions\">Manter certo número de versións</string>\n    <string name=\"pref_backups_versioning_strategy_single_backup\">Copia de seguridade única</string>\n    <string name=\"pref_backups_versioning_strategy_single_backup_warning\">A estratexia escollida non é fiable nin recomendable. Un único fallo ao facer a copia de seguridade pode levar a que quedes sen a única copia que tiveras.</string>\n    <string name=\"pref_backups_versioning_strategy_dialog_title\">Escolle unha estratexia para a copia de seguridade</string>\n    <string name=\"pref_backups_location_title\">Localización da copia de seguridade</string>\n    <string name=\"pref_backups_location_summary\">As copias de seguridade gardaranse en</string>\n    <string name=\"pref_backup_location_summary\">A copia de seguridade gardarase en</string>\n    <string name=\"pref_backups_trigger_title\">Executar copia de seguridade</string>\n    <string name=\"pref_backups_trigger_summary\">Lanza manualmente unha copia de seguridade</string>\n    <string name=\"pref_backups_versions_title\">Número de versións a manter</string>\n    <string name=\"pref_backups_versions_infinite\">\\u221E</string>\n    <plurals name=\"pref_backups_versions_summary\">\n        <item quantity=\"one\">Manter %1$d versión da copia de seguridade</item>\n        <item quantity=\"other\">Manter %1$d versións da copia de seguridade</item>\n    </plurals>\n    <string name=\"pref_backups_versions_infinite_summary\">Manter un número ilimitado de versións da copia de seguridade</string>\n    <string name=\"pref_import_app_title\">Importar desde unha aplicación</string>\n    <string name=\"pref_import_app_summary\">Importar tokens desde unha aplicación (require acceso root)</string>\n    <string name=\"pref_export_title\">Exportar</string>\n    <string name=\"pref_export_summary\">Exporta o almacén</string>\n    <string name=\"pref_password_reminder_title\">Recordatorio do contrasinal</string>\n    <string name=\"pref_google_auth_export_title\">Exportar para Google Authenticator</string>\n    <string name=\"pref_google_auth_export_descriptor\">Xera códigos QR de exportación, compatibles con Google Authenticator</string>\n    <string name=\"pref_google_auth_export_no_data\">Non hai datos que exportar</string>\n    <plurals name=\"pref_google_auth_export_incompatible_entries\">\n        <item quantity=\"one\">Omitiuse %d entrada incompatible</item>\n        <item quantity=\"other\">Omitíronse %d entradas incompatibles</item>\n    </plurals>\n    <string name=\"pref_password_reminder_summary\">Mostra un recordatorio %s para introducir o contrasinal, para evitar que te esquezas del.</string>\n    <string name=\"pref_password_reminder_summary_disabled\">Desactivado</string>\n    <string name=\"pref_secure_screen_title\">Seguridade da pantalla</string>\n    <string name=\"pref_secure_screen_summary\">Bloquea as capturas de pantalla e outros intentos de obter o contido da pantalla na aplicación</string>\n    <string name=\"pref_tap_to_reveal_title\">Tocar para mostrar</string>\n    <string name=\"pref_tap_to_reveal_summary\">Os códigos estarán ocultos de maneira predeterminada. Toca no token para mostrar o código.</string>\n    <string name=\"pref_tap_to_reveal_time_title\">Caducidade da visualización ao tocar</string>\n    <string name=\"pref_auto_lock_title\">Bloqueo automático</string>\n    <string name=\"pref_auto_lock_summary\">Cando %s</string>\n    <string name=\"pref_auto_lock_summary_disabled\">Desactivado</string>\n    <string name=\"pref_auto_lock_prompt\">Bloquear Aegis automaticamente cando</string>\n    <string name=\"pref_auto_lock_type_back_button\">Se prema o botón Atrás</string>\n    <string name=\"pref_auto_lock_type_minimize\">A aplicación se minimice</string>\n    <string name=\"pref_auto_lock_type_device_lock\">O dispositivo se bloquee</string>\n    <string name=\"pref_backup_password_category\">Copia de seguridade e exportar</string>\n    <string name=\"pref_backup_password_title\">Contrasinal diferente para a copia de seguridade e a exportación</string>\n    <string name=\"pref_backup_password_summary\">Se se activa, o contrasinal usado para o desbloqueo da aplicación xa non se poderá usar para descifrar as copias de seguridade e as exportacións.</string>\n    <string name=\"pref_backup_password_change_title\">Cambiar o contrasinal para a copia de seguridade e a exportación</string>\n    <string name=\"pref_backup_password_change_summary\">Crea un novo contrasinal que se usará para cifrar o almacén ao facer a copia de seguridade e ao exportar.</string>\n    <string name=\"pref_encryption_title\">Cifrado</string>\n    <string name=\"pref_encryption_summary\">Cifra o almacén e permite desbloquealo mediante un contrasinal ou por biometría</string>\n    <string name=\"pref_biometrics_title\">Desbloqueo biométrico</string>\n    <string name=\"pref_biometrics_summary\">Permite a autenticación mediante biometría para desbloquear o almacén</string>\n    <string name=\"pref_search_behavior_summary\">Buscar en: %s</string>\n    <string name=\"pref_search_behavior_prompt\">Buscar nos seguintes campos</string>\n    <string name=\"pref_search_behavior_type_name\">Nome</string>\n    <string name=\"pref_search_behavior_type_issuer\">Provedor</string>\n    <string name=\"pref_search_behavior_type_note\">Nota</string>\n    <string name=\"pref_search_behavior_type_groups\">Grupos</string>\n    <string name=\"pref_set_password_title\">Cambiar contrasinal</string>\n    <string name=\"pref_set_password_summary\">Establece un novo contrasinal co que desbloquear o teu almacén</string>\n    <string name=\"no_events_title\">Non hai ningún evento rexistrado</string>\n    <string name=\"no_events_description\">Non se rexistrou ningún evento importante na app</string>\n    <string name=\"event_title_vault_unlocked\">Almacén desbloqueado</string>\n    <string name=\"event_description_vault_unlocked\">O almacén desbloqueouse correctamente</string>\n    <string name=\"event_title_backup_created\">Copia de seguridade creada</string>\n    <string name=\"event_description_backup_created\">Creouse correctamente unha copia de seguridade do almacén</string>\n    <string name=\"event_title_android_backup_created\">Creada copia de seguridade de Android</string>\n    <string name=\"event_description_android_backup_created\">Android creou correctamente unha copia de seguridade do almacén</string>\n    <string name=\"event_title_vault_exported\">Almacén exportado</string>\n    <string name=\"event_description_vault_exported\">Exportouse unha copia do almacén</string>\n    <string name=\"event_title_entry_shared\">Entrada compartida</string>\n    <string name=\"event_description_entry_shared\">Compartiuse unha entrada</string>\n    <string name=\"event_title_vault_unlock_failed_password\">Fallo de desbloqueo do almacén (contrasinal)</string>\n    <string name=\"event_description_vault_unlock_failed_password\">Houbo un intento errado de desbloquear o almacén mediante contrasinal</string>\n    <string name=\"event_title_vault_unlock_failed_biometrics\">Fallo de desbloqueo do almacén (biometría)</string>\n    <string name=\"event_description_vault_unlock_failed_biometrics\">Houbo un intento errado de desbloquear o almacén mediante datos biométricos</string>\n    <string name=\"event_unknown\">Tipo de evento descoñecido</string>\n    <string name=\"audit_log_entry_deleted\">(borrado)</string>\n    <string name=\"today_at_time\">Hoxe ás %1$s</string>\n    <string name=\"day_of_week_at_time\">%1$s ás %2$s</string>\n    <string name=\"export_encrypted\">Cifrar o almacén</string>\n    <string name=\"export_help\">Esta acción exportará o almacén fóra do almacenamento interno de Aegis. Escolle o formato no que o queiras exportar:</string>\n    <string name=\"export_warning_unencrypted\">Estás a piques de exportar unha copia non cifrada do teu almacén de Aegis. <b>Isto non está recomendado</b>.</string>\n    <string name=\"export_warning_password\">As exportacións cífranse mediante un contrasinal distinto, definido nos axustes de seguridade.</string>\n    <string name=\"understand_risk_accept\">Comprendo o risco</string>\n    <string name=\"export_format_aegis\">Aegis (.JSON)</string>\n    <string name=\"export_format_google_auth_uri\">Ficheiro de texto (.TXT)</string>\n    <string name=\"export_format_html\">Páxina web (.HTML)</string>\n    <string name=\"export_format_hint\">Formato da exportación</string>\n    <string name=\"export_all_groups\">Exportar tódolos grupos</string>\n    <string name=\"export_choose_groups\">Escolle os grupos a exportar</string>\n    <plurals name=\"export_groups_selected_count\">\n        <item quantity=\"one\">%d grupo seleccionado</item>\n        <item quantity=\"other\">%d grupos seleccionados</item>\n    </plurals>\n    <string name=\"export_no_groups_selected\">Non se seleccionou ningún grupo para exportar</string>\n    <string name=\"export_html_title\" comment=\"The title of an HTML export document\">Exportación de Aegis Authenticator</string>\n    <string name=\"choose_authentication_method\">Seguridade</string>\n    <string name=\"authentication_method_explanation\">Aegis é unha aplicación 2FA centrada na seguridade. Os tokens gárdanse nun almacén, o cal se pode cifrar cun contrasinal da túa elección. Se un atacante obtén o ficheiro do teu almacén cifrado, non será capaz de acceder á información se non sabe o contrasinal.\\n\\nPreseleccionouse a opción que cremos que encaixa mellor co teu dispositivo.</string>\n    <string name=\"authentication_method_none\">Ningunha</string>\n    <string name=\"authentication_method_none_description\">Non é necesario ningún contrasinal para desbloquear o almacén e non se cifrará. <b>Esta opción non se recomenda</b>.</string>\n    <string name=\"authentication_method_password\">Contrasinal</string>\n    <string name=\"authentication_method_password_description\">Necesítase un contrasinal para desbloquear o almacén.</string>\n    <string name=\"authentication_method_password_explanation\">Aviso: Se perdes o contrasinal, perderás o acceso aos teus tokens para sempre. Non hai maneira de recuperalos non sendo co contrasinal.</string>\n    <string name=\"authentication_method_biometrics\">Biometría</string>\n    <string name=\"authentication_method_biometrics_description\">A maiores do contrasinal, a biometría rexistrada neste dispositivo, como as pegadas dactilares ou a túa cara, pódense usar para desbloquear o almacén.</string>\n    <string name=\"authentication\">Desbloquea o almacén</string>\n    <string name=\"authentication_multiline\" comment=\"The newline in the middle is used for aesthetic purposes\">Desbloquea\\no almacén</string>\n    <string name=\"auth_use_biometrics\">Ou preme aquí para usar a <font fgcolor=\"#FF0D86C1\">biometría</font></string>\n    <string name=\"set_password\">Introduce un contrasinal</string>\n    <string name=\"set_group\">Introduce un nome de grupo</string>\n    <string name=\"set_number\">Introduce un número</string>\n    <string name=\"set_password_confirm\">Confirma o contrasinal</string>\n    <string name=\"invalid_password\">O contrasinal é incorrecto</string>\n    <string name=\"invalidated_biometrics\">Detectouse un cambio nos axustes de seguridade do teu dispositivo. Vai a \\\"Aegis -&gt; Axustes -&gt; Seguridade -&gt; Desbloqueo biométrico\\\" para desactivar e volver a activar o desbloqueo biométrico.</string>\n    <string name=\"password_reminder\">Introduce o teu contrasinal. Preguntámosche de vez en cando por el para que non o esquezas.</string>\n    <string name=\"password_reminder_dialog_title\">Desbloqueo biométrico predeterminado</string>\n    <string name=\"password_reminder_dialog_message\">De vez en cando, pedímosche que introduzas o contrasinal para que non te esquezas del e así non te quedes sen acceso ao teu almacén. En canto introduzas o contrasinal unha vez, Aegis volverá a usar o desbloqueo biométrico de xeito predeterminado ata que sexa hora de outro recordatorio do contrasinal.</string>\n    <string name=\"password_reminder_freq_never\">Nunca</string>\n    <string name=\"password_reminder_freq_weekly\">Semanalmente</string>\n    <string name=\"password_reminder_freq_biweekly\">Cada dúas semanas</string>\n    <string name=\"password_reminder_freq_monthly\">Mensualmente</string>\n    <string name=\"password_reminder_freq_quarterly\">Trimestralmente</string>\n    <string name=\"enter_password_2fas_message\">Semella que esta copia de seguridade 2FAS está cifrada. Introduce o contrasinal a continuación.</string>\n    <string name=\"enter_password_authy_message\">Semella que os teus tokens de Authy están cifrados. Pecha Aegis, abre Authy e desbloquea os tokens co teu contrasinal. Tamén podes deixar que Aegis intente descifrar os tokens de Authy por ti se introduces o teu contrasinal a continuación.</string>\n    <string name=\"enter_password_aegis_title\">Introduce o contrasinal de importación</string>\n    <string name=\"period_hint\">Período (segundos)</string>\n    <string name=\"algorithm_hint\">Función hash</string>\n    <string name=\"type\">Tipo</string>\n    <string name=\"share\">Compartir</string>\n    <string name=\"yes\">Si</string>\n    <string name=\"no\">Non</string>\n    <string name=\"undo\">Desfacer</string>\n    <string name=\"unlock\">Desbloquear</string>\n    <string name=\"advanced\">Avanzado</string>\n    <string name=\"counter\">Contador</string>\n    <string name=\"digits\">Díxitos</string>\n    <string name=\"secret\">Código secreto</string>\n    <string name=\"scan\">Escanear código QR</string>\n    <string name=\"scan_image\">Escanear imaxe</string>\n    <string name=\"enter_manually\">Introducir manualmente</string>\n    <string name=\"set_up_biometric\">Configurar desbloqueo biométrico</string>\n    <string name=\"copy\">Copiar</string>\n    <string name=\"edit\">Editar</string>\n    <string name=\"select_all\">Seleccionar todo</string>\n    <string name=\"assign_icons\">Asignar iconas</string>\n    <string name=\"assign_groups\">Asignar a un grupo</string>\n    <string name=\"assign_groups_dialog_summary\">Escolle o grupo ao que queiras asignar os elementos seleccionados.</string>\n    <string name=\"assign_groups_dialog_dropdown\">Escolle o grupo</string>\n    <string name=\"favorite\" comment=\"Verb\">Marcar como favorito</string>\n    <string name=\"unfavorite\" comment=\"Verb\">Desmarcar como favorito</string>\n    <string name=\"error_all_caps\">ERRO</string>\n    <string name=\"password\">Contrasinal</string>\n    <string name=\"confirm_password\">Confirmar contrasinal</string>\n    <string name=\"show_password\">Mostrar contrasinal</string>\n    <string name=\"new_entry\">Nova entrada</string>\n    <string name=\"add_new_entry\">Engadir entrada</string>\n    <string name=\"unlock_vault_error\">Non se puido desbloquear o almacén</string>\n    <string name=\"unlock_vault_error_description\">Contrasinal incorrecto. Comproba que non te equivocaches ao escribilo.</string>\n    <string name=\"password_equality_error\">Os contrasinais deben ser iguais e non poden estar en branco</string>\n    <string name=\"snackbar_authentication_method\">Tes que escoller un método de autenticación</string>\n    <string name=\"encrypting_vault\">Cifrando o almacén</string>\n    <string name=\"exporting_vault\">Exportando o almacén</string>\n    <string name=\"optimizing_icon\">Optimizando a icona</string>\n    <string name=\"optimizing_icon_multiple\">Optimizando iconas %1$d/%2$d</string>\n    <string name=\"reading_file\">Lendo ficheiro</string>\n    <string name=\"requesting_root_access\">Pedindo acceso root</string>\n    <string name=\"analyzing_qr\">Analizando código QR</string>\n    <string name=\"analyzing_qr_multiple\">Analizando código QR %1$d/%2$d (%3$s)</string>\n    <plurals name=\"added_new_entries\">\n        <item quantity=\"one\">Engadida %d nova entrada ao almacén</item>\n        <item quantity=\"other\">Engadidas %d novas entradas ao almacén</item>\n    </plurals>\n    <string name=\"importing_icon_pack\">Importando paquete de iconas</string>\n    <string name=\"delete_entry\">Eliminar entrada</string>\n    <string name=\"delete_entry_description\">Tes a certeza de que queres borrar esta entrada?</string>\n    <string name=\"delete_entry_explanation\">Esta acción non desactiva 2FA para:\\n<b>%s</b>\\n\\nPara previr a perda do acceso, asegúrate de que desactivaches 2FA ou de que tes unha maneira alternativa de xerar códigos para este servizo.</string>\n    <string name=\"delete_entries\">Eliminar entradas</string>\n    <plurals name=\"delete_entries_description\">\n        <item quantity=\"one\">Tes a certeza de que queres borrar %d entrada?</item>\n        <item quantity=\"other\">Tes a certeza de que queres borrar %d entradas?</item>\n    </plurals>\n    <string name=\"discard_changes\">Desbotar cambios?</string>\n    <string name=\"discard_changes_description\">Os teus cambios non se gardaron</string>\n    <string name=\"saving_profile_error\">Erro ao gardar o perfil</string>\n    <string name=\"saving_assign_icons_error\">Erro asignando iconas</string>\n    <string name=\"welcome\">Dámosche a benvida</string>\n    <string name=\"app_description\">Aegis é unha aplicación 2FA gratuíta, segura e de código aberto</string>\n    <string name=\"setup_completed\">Configuración completada</string>\n    <string name=\"setup_completed_description\">Aegis está configurado e listo para usarse.</string>\n    <string name=\"vault_not_found\">Non se atopou o almacén, iniciando a configuración…</string>\n    <string name=\"copied\">Copiado</string>\n    <string name=\"errors_copied\">Copiáronse os erros no portapapeis</string>\n    <string name=\"version_copied\">Versión copiada no portapapeis</string>\n    <string name=\"error_required_field\">Este campo é obrigatorio</string>\n    <string name=\"error_occurred\">Ocorreu un erro</string>\n    <string name=\"decryption_error\">Ocorreu un erro ao intentar desbloquear o almacén</string>\n    <string name=\"decryption_corrupt_error\">Ocorreu un erro ao intentar desbloquear o almacén. O ficheiro do almacén podería estar corrompido.</string>\n    <string name=\"saving_error\">Ocorreu un erro ao intentar gardar o almacén</string>\n    <string name=\"vault_init_error\">Ocorreu un erro ao intentar inicializar o almacén</string>\n    <string name=\"vault_load_error\">Ocorreu un erro ao intentar cargar o almacén desde o almacenamento</string>\n    <string name=\"biometric_decrypt_error\">Ocorreu un erro ao intentar descifrar o almacén mediante a autenticación biométrica. Normalmente, isto só sucede cando se cambian os axustes de seguridade do dispositivo. Desbloquea o almacén co teu contrasinal e volve a configurar a autenticación biométrica nos axustes de Aegis.</string>\n    <string name=\"biometric_init_error\">Ocorreu un erro ao intentar preparar a autenticación biométrica. Normalmente, isto só sucede cando se cambian os axustes de seguridade do dispositivo. Desbloquea o almacén co teu contrasinal e volve a configurar a autenticación biométrica nos axustes de Aegis.</string>\n    <string name=\"disable_encryption\">Desactivar o cifrado</string>\n    <string name=\"disable_encryption_description\">Tes a certeza de que queres desactivar o cifrado? Isto provocará que o almacén quede gardado como texto plano. <b>As copias de seguridade automáticas tamén se desactivarán</b>.</string>\n    <string name=\"enable_encryption_error\">Ocorreu un erro ao activar o cifrado</string>\n    <string name=\"disable_encryption_error\">Ocorreu un erro ao desactivar o cifrado</string>\n    <string name=\"backup_successful\">A copia de seguridade programouse correctamente</string>\n    <string name=\"backup_error\">Ocorreu un erro ao intentar crear unha copia de seguridade</string>\n    <string name=\"backup_status_success\">Última copia de seguridade correcta: %s</string>\n    <string name=\"backup_status_failed\">Última copia de seguridade que fallou: %s</string>\n    <string name=\"backup_status_none\">Aínda non se fixo ningunha copia de seguridade</string>\n    <string name=\"backup_warning_password\">As copias de seguridade cífranse mediante un contrasinal distinto, definido nos axustes de seguridade</string>\n    <string name=\"documentsui_error\">Parece que non tes DocumentsUI no teu dispositivo. É un compoñente importante do sistema, necesario para poder escoller e crear documentos. Se utilizaches algunha ferramenta para desinstalar aplicacións do sistema, pode que o eliminaras sen querer, polo que terías que volvelo a instalar.</string>\n    <string name=\"icon_pack_import_error\">Ocorreu un erro ao intentar importar un paquete de iconas</string>\n    <string name=\"icon_pack_import_exists_error\">O paquete de iconas que estás intentando importar xa existe. Queres sobrescribilo?</string>\n    <string name=\"icon_pack_delete_error\">Ocorreu un erro ao intentar eliminar un paquete de iconas</string>\n    <plurals name=\"icon_pack_info\">\n        <item quantity=\"one\">%d icona</item>\n        <item quantity=\"other\">%d iconas</item>\n    </plurals>\n    <string name=\"icon_custom\">Personalizada</string>\n    <string name=\"permission_denied\">Permiso denegado</string>\n    <string name=\"andotp_new_format\">Formato novo (v0.6.3 ou superior) </string>\n    <string name=\"andotp_old_format\">Formato vello (v0.6.2 ou inferior) </string>\n    <string name=\"choose_andotp_importer\">Que formato ten o ficheiro da copia de seguridade de andOTP?</string>\n    <string name=\"choose_totpauth_importer\">Esta copia de seguridade de TOTP Authenticator está cifrada cun contrasinal?</string>\n    <string name=\"choose_application\">Escolle a aplicación desde a que queiras importar</string>\n    <string name=\"choose_theme\">Escolle o tema que prefires</string>\n    <string name=\"choose_account_name_position\">Escolle a posición que prefires para o nome de conta</string>\n    <string name=\"choose_view_mode\">Escolle o modo de visualización que prefires</string>\n    <string name=\"choose_copy_behavior\">Escolle o comportamento de copia que prefires</string>\n    <string name=\"parsing_file_error\">Ocorreu un erro ao intentar analizar o ficheiro</string>\n    <string name=\"file_not_found\">Erro: Ficheiro non atopado</string>\n    <string name=\"reading_file_error\">Ocorreu un erro ao intentar ler o ficheiro</string>\n    <string name=\"app_lookup_error\">Erro: A aplicación non está instalada</string>\n    <string name=\"app_version_error\">A versión instalada de %s non é compatible. As versións recentes comezaron a cifrar algúns ficheiros no almacenamento interno, causando que Aegis sexa incapaz de acceder á información que necesita para a importación. Intentar importar vai resultar probablemente nun erro. Queres continuar de tódolos xeitos?</string>\n    <string name=\"root_error\">Erro: Non se puido obter acceso root</string>\n    <plurals name=\"imported_entries_count\">\n        <item quantity=\"one\">Importouse %d entrada</item>\n        <item quantity=\"other\">Importáronse %d entradas</item>\n    </plurals>\n    <plurals name=\"entries_shown\">\n        <item quantity=\"one\">Mostrando %d entrada</item>\n        <item quantity=\"other\">Mostrando %d entradas</item>\n    </plurals>\n    <string name=\"intro_import_error_title\">Ocorreu un erro ao importar o almacén</string>\n    <string name=\"import_error_title\">Ocorreu algún erro durante a importación</string>\n    <string name=\"exporting_vault_error\">Ocorreu un erro ao intentar exportar o almacén</string>\n    <string name=\"exported_vault\">Exportouse o almacén</string>\n    <string name=\"encryption_set_password_error\">Ocorreu un erro ao intentar establecer o contrasinal.</string>\n    <string name=\"encryption_enable_biometrics_error\">Ocorreu un erro ao intentar activar o desbloqueo biométrico. Hai algúns dispositivos que teñen malas implementacións da autenticación biométrica e pode que o teu sexa un deles. Considera cambiar a unha configuración de só contrasinal no seu lugar.</string>\n    <string name=\"no_cameras_available\">Non hai ningunha cámara dispoñible</string>\n    <string name=\"read_qr_error\">Ocorreu un erro ao intentar ler o código QR</string>\n    <string name=\"read_qr_error_phonefactor\">Aegis non é compatible co algoritmo de 2FA propietario de Microsoft. Asegúrate de escoller \\\"Configurar aplicación sen notificacións\\\" cando configures 2FA no Office 365.</string>\n    <string name=\"partial_google_auth_import\">Detectouse una exportación de Google Authenticator incompleta</string>\n    <string name=\"partial_google_auth_import_warning\">Faltan algúns códigos QR na importación. Os seguintes códigos non se atoparon:\\n\\n<b>%s</b>\\n\\nPodes continuar importando esta exportación parcial, pero o recomendable é volvelo a intentar con tódolos códigos QR para que non te arrisques a perder o acceso a ningún token.</string>\n    <string name=\"missing_qr_code_descriptor\">• código QR %d</string>\n    <plurals name=\"import_partial_export_anyway\">\n        <item quantity=\"one\">Importar %d token de tódolos xeitos</item>\n        <item quantity=\"other\">Importar %d tokens de tódolos xeitos</item>\n    </plurals>\n    <string name=\"import_google_auth_failure\">Fallou a importación do exportado con Google Authenticator</string>\n    <string name=\"unrelated_google_auth_batches_error\">A exportación contén información sobre un lote non relacionado. Intenta importar 1 lote de cada vez.</string>\n    <string name=\"no_tokens_can_be_imported\">Polo tanto, non se pode importar ningún token</string>\n    <string name=\"unlocking_vault\">Desbloqueando o almacén</string>\n    <string name=\"rename_group\">Renomear o grupo</string>\n    <string name=\"no_group_selection\">Os elementos que non sexan parte de ningún grupo poderanse atopar dentro de \\\"Sen grupo\\\".</string>\n    <string name=\"remove_group\">Quitar grupo</string>\n    <string name=\"remove_group_description\">Tes a certeza de que queres quitar este grupo? As entradas deste grupo pasarán automaticamente a \\\"Sen grupo\\\".</string>\n    <string name=\"remove_unused_groups\">Borrar grupos sen usar</string>\n    <string name=\"remove_unused_groups_description\">Tes a certeza de que queres eliminar tódolos grupos que non estean asignados a algunha entrada?</string>\n    <string name=\"remove_icon_pack\">Quitar paquete de iconas</string>\n    <string name=\"remove_icon_pack_description\">Tes a certeza de que queres quitar este paquete de iconas? As entradas que usen iconas desde paquete non se verán afectadas.</string>\n    <string name=\"details\">Detalles</string>\n    <string name=\"show_error_details\">Mostrar detalles do erro</string>\n    <string name=\"lock\">Bloquear</string>\n    <string name=\"name\">Nome</string>\n    <string name=\"no_group\">Sen grupo</string>\n    <string name=\"sort\" comment=\"Title of the Sort button in the top action bar of the main view\">Ordenar</string>\n    <string name=\"sort_alphabetically\">Provedor (A a Z)</string>\n    <string name=\"sort_alphabetically_reverse\">Provedor (Z a A)</string>\n    <string name=\"sort_alphabetically_name\">Conta (A a Z)</string>\n    <string name=\"sort_alphabetically_name_reverse\">Conta (Z a A)</string>\n    <string name=\"sort_usage_count\">Contador de usos</string>\n    <string name=\"sort_last_used\">Último uso</string>\n    <string name=\"sort_custom\">Personalizado</string>\n    <string name=\"last_used\">Último uso</string>\n    <string name=\"last_used_never\">nunca</string>\n    <string name=\"new_group\">Novo grupo…</string>\n    <string name=\"group\">Grupo</string>\n    <string name=\"group_name_hint\">Nome do grupo</string>\n    <string name=\"preference_manage_groups\">Editar grupos</string>\n    <string name=\"preference_manage_groups_summary\">Xestiona e elimina os teus grupos aquí</string>\n    <string name=\"preference_reset_usage_count\">Reiniciar contador de usos</string>\n    <string name=\"preference_reset_usage_count_summary\">Reinicia o contador de usos de cada entrada do almacén</string>\n    <string name=\"preference_reset_usage_count_dialog\">Tes a certeza de que queres poñer o contador de usos de tódalas entradas do teu almacén a cero?</string>\n    <string name=\"note\" comment=\"Users can add a note to an entry\">Nota</string>\n    <string name=\"clear\">Restablecer</string>\n    <string name=\"dialog_duplicate_entry_title\" comment=\"'Duplicate' is a noun here\">Duplicar entrada</string>\n    <string name=\"dialog_duplicate_entry_message\">Esta entrada ten o mesmo nome e provedor que unha xa existente. Como queres xestionar a situación?</string>\n    <string name=\"dialog_duplicate_entry_overwrite_title\">Sobrescribindo a entrada(s) existente?</string>\n    <string name=\"dialog_duplicate_entry_overwrite_subtitle\">Substituír a entrada ou entradas existentes coa nova. Esta acción non se pode desfacer</string>\n    <string name=\"dialog_duplicate_entry_suffix_title\">Engadir sufixo</string>\n    <string name=\"dialog_duplicate_entry_suffix_subtitle\">Engadir un sufixo ao nome desta nova entrada. O novo nome vai ser: %s</string>\n    <string name=\"dialog_duplicate_entry_cancel_title\">Desbotar a xestión</string>\n    <string name=\"dialog_duplicate_entry_cancel_subtitle\">Permite que poidas editar a entrada antes de volver a intentar gardala</string>\n    <plurals name=\"dialog_duplicate_entry_overwrite_dialog_message\">\n        <item quantity=\"one\">Ten certeza de querer eliminar a entrada %d co seguinte nome:\\n\\n%s - %s</item>\n        <item quantity=\"other\">Ten certeza de querer eliminar %d entradas co seguinte nome:\\n\\n%s - %s</item>\n    </plurals>\n    <string name=\"dialog_duplicate_entry_overwrite_dialog_title\">Confirmar a eliminación</string>\n    <string name=\"pref_haptic_feedback_summary\">Facer que o dispositivo vibre cando se actualizan os códigos</string>\n    <string name=\"pref_haptic_feedback_title\">Resposta táctil</string>\n    <string name=\"pref_highlight_entry_title\">Resaltar tokens ao premelos</string>\n    <string name=\"pref_highlight_entry_summary\">Resalta temporalmente os tokens cando se preman para podelos distinguir máis facilmente</string>\n    <string name=\"pref_groups_multiselect_title\">Selección múltiple de grupos</string>\n    <string name=\"pref_groups_multiselect_summary\">Permite ter seleccionados varios grupos ao mesmo tempo</string>\n    <string name=\"pref_minimize_on_copy_title\">Minimizar ao copiar</string>\n    <string name=\"pref_minimize_on_copy_summary\">Minimiza a aplicación despois de copiar un token</string>\n    <string name=\"pref_copy_behavior_title\">Copiar códigos no portapapeis</string>\n    <string name=\"pref_search_behavior_title\">Comportamento da busca</string>\n    <string name=\"pref_pause_entry_title\">Conxelar tokens ao premelos</string>\n    <string name=\"pref_pause_entry_summary\">Pausa a actualización automática dos tokens ao premer neles. Os tokens non se actualizarán mentres teñan o foco. Require \\\"Resaltar tokens ao premelos\\\" ou \\\"Tocar para mostrar\\\".</string>\n    <string name=\"pin_keyboard_description\">Introduce o teu contrasinal para activar o teclado do PIN. Ten en conta que isto só funciona se o teu contrasinal consiste só de números</string>\n    <string name=\"pin_keyboard_error\">Erro ao activar o teclado do PIN</string>\n    <string name=\"pin_keyboard_error_description\">Non é posible establecer o teclado do PIN. O teu contrasinal debe consistir só de números.</string>\n    <string name=\"pin_keyboard_disabled\">Cambiouse o contrasinal. O teclado do PIN xa non se mostrará.</string>\n    <string name=\"selected\">Seleccionado</string>\n    <string name=\"dark_theme_title\">Tema escuro</string>\n    <string name=\"light_theme_title\">Tema claro</string>\n    <string name=\"amoled_theme_title\">Tema AMOLED</string>\n    <string name=\"system_theme_title\">Establecido polo Aforro de batería</string>\n    <string name=\"system_amoled_theme_title\">Establecido polo Aforro de batería (AMOLED)</string>\n    <string name=\"normal_viewmode_title\">Normal</string>\n    <string name=\"compact_mode_title\">Compacto</string>\n    <string name=\"small_mode_title\">Pequeno</string>\n    <string name=\"tiles_mode_title\">Mosaico</string>\n    <string name=\"unknown_issuer\">Provedor descoñecido</string>\n    <string name=\"unknown_account_name\">Nome de conta descoñecido</string>\n    <plurals name=\"import_error_dialog\">\n        <item quantity=\"one\">Aegis non puido importar %d token. Este token omitirase. Preme en \\\"detalles\\\" para ver máis información sobre o erro.</item>\n        <item quantity=\"other\">Aegis non puido importar %d tokens. Estes tokens omitiranse. Preme en \\\"detalles\\\" para ver máis información sobre os erros.</item>\n    </plurals>\n    <string name=\"unable_to_process_deeplink\">Non se puido procesar o enlace profundo</string>\n    <string name=\"unable_to_read_qrcode_file\">Non se puido ler e procesar o código QR do ficheiro: %s.</string>\n    <string name=\"unable_to_process_shared_text\">Non se puido procesar o texto compartido como OTP</string>\n    <string name=\"unable_to_read_qrcode_files\">Non se puideron ler e procesar algúns dos códigos QR. Só se importarán %1$d/%2$d elementos.</string>\n    <string name=\"unable_to_generate_qrcode\">Non se puido xerar o código QR</string>\n    <string name=\"select_picture\">Seleccionar imaxe</string>\n    <string name=\"select_icon\">Seleccionar icona</string>\n    <string name=\"tile_open_vault\" comment=\"label for a quick settings tile that opens the app when tapped\">Abrir almacén</string>\n    <string name=\"tile_open_scanner\" comment=\"label for a quick settings tile that opens the QR code scanner when tapped\">Abrir escáner</string>\n    <string name=\"toggle_checkboxes\">Alternar caixas de verificación</string>\n    <string name=\"search\">Buscar</string>\n    <string name=\"channel_name_lock_status\">Estado do bloqueo</string>\n    <string name=\"channel_description_lock_status\">Aegis pode crear unha notificación persistente para avisarche de se o almacén está bloqueado</string>\n    <string name=\"vault_unlocked_state\">O almacén está desbloqueado. Preme aquí para bloquealo.</string>\n    <string name=\"version\">Versión</string>\n    <string name=\"changelog\">Rexistro de cambios</string>\n    <string name=\"whats_new\">Novidades</string>\n    <string name=\"github_description\">Código fonte, problemas e información</string>\n    <string name=\"license\">Licenza</string>\n    <string name=\"license_description\">Aegis Authenticator está baixo unha licenza GPLv3</string>\n    <string name=\"third_party_licenses\">Licenzas de terceiros</string>\n    <string name=\"third_party_licenses_description\">As licenzas das librerías de terceiros usadas por Aegis</string>\n    <string name=\"country_netherlands\">Países Baixos</string>\n    <string name=\"email_us\">Mándanos un correo</string>\n    <string name=\"visit_website\">Visita a nosa páxina web</string>\n    <string name=\"about_support\">Apoio</string>\n    <string name=\"support_rate\">Valorar</string>\n    <string name=\"support_rate_description\">Apóianos deixando unha valoración na Google Play Store</string>\n    <string name=\"webview_error\">Este dispositivo non admite Web View, que é necesario para ver o rexistro de cambios e a licenza. É un compoñente do sistema que falta.</string>\n    <string name=\"email\">Correo electrónico</string>\n    <string name=\"time_sync_warning_title\">Sincronización automática da hora</string>\n    <string name=\"time_sync_warning_message\">Aegis depende de que a hora do sistema estea sincronizada para poder xerar códigos correctos. Unha desviación de tan só uns poucos segundos pode resultar en que os códigos sexan incorrectos. Semella que o teu dispositivo non está configurado para sincronizar automaticamente a hora. Queres configuralo agora?</string>\n    <string name=\"time_sync_warning_disable\">Non me avises máis. Sei o que fago.</string>\n    <string name=\"google_qr_export_unrelated\">Atopouse un código QR non relacionado. Proba a reiniciar o escáner.</string>\n    <plurals name=\"google_qr_export_scanned\">\n        <item quantity=\"one\">%1$d/%2$d código QR escaneado</item>\n        <item quantity=\"other\">%1$d/%2$d códigos QR escaneados</item>\n    </plurals>\n    <string name=\"google_qr_export_unexpected\">Esperábase o código QR nº %1$d, pero escaneouse o nº %2$d</string>\n    <string name=\"backup_error_bar_message\"><b>A copia de seguridade do almacén fallou recentemente</b></string>\n    <string name=\"backup_error_dialog_details\" comment=\"The first parameter is the type of backup (e.g. built-in or Android backup). The second parameter is an elapsed time in the style of 'x seconds/minutes/days ago'.\">        Un intento de facer unha copia de seguridade do almacén usando %1$s fallou debido a algún erro. A copia de seguridade intentouse %2$s. Comproba os axustes da copia de seguridade para asegurarte de que poidan completar correctamente.\n    </string>\n    <string name=\"backup_permission_error_dialog_details\" comment=\"The first parameter is the type of backup (e.g. built-in or Android backup). The second parameter is an elapsed time in the style of 'x seconds/minutes/days ago'.\">        Un recente intento de copia de seguridade utilizando %1$s fallou porque Aegis non tiña permiso de escritura no destino da copia de seguridade. A copia de seguridade intentouse %2$s. Este erro pode ocorrer se moviches ou renomeaches o destino ou se fai pouco que recuperaches Aegis desde unha copia de seguridade. Volve a configurar o destino da copia de seguridade.\n    </string>\n    <string name=\"backup_system_builtin\">Copias de seguridade automáticas de Aegis</string>\n    <string name=\"backup_system_android\">Copias de seguridade na nube de Android</string>\n    <string name=\"backup_reminder_bar_message_with_latest\" comment=\"The parameter is an elapsed time in the style of 'x seconds/minutes/days ago'\">        A última copia de seguridade está desactualizada (%s)\n    </string>\n    <string name=\"backup_reminder_bar_message\">        Os cambios non están gardados na copia de seguridade\n    </string>\n    <string name=\"backup_reminder_bar_dialog_title\">Os cambios non están gardados na copia de seguridade</string>\n    <string name=\"backup_reminder_bar_dialog_summary\">        Aínda non se fixo copia de seguridade dos últimos cambios feitos no almacén. É importante facer copias regularmente para non perderes o acceso ás túas contas. Considera configurar as copias de seguridade automáticas no menú de axustes.\n    </string>\n    <string name=\"backup_reminder_bar_dialog_accept\">Configurar copias</string>\n    <string name=\"backup_plaintext_export_warning\"><b>O almacén exportouse recentemente como texto plano</b></string>\n    <string name=\"pref_show_plaintext_warning_hint\">Non volver a mostrar este aviso</string>\n    <string name=\"backup_plaintext_warning_explanation\">Móstrase este aviso porque exportaches recentemente unha copia non cifrada do almacén. Para manter a seguridade dos teus tokens, recomendámosche que elimines este ficheiro cando xa non che faga falta.</string>\n    <string name=\"switch_camera\">Cambiar de cámara</string>\n    <string name=\"empty_list\">Non hai ningún código que mostrar. Comeza a engadir entradas premendo no signo máis na esquina inferior dereita</string>\n    <string name=\"empty_list_title\">Non hai entradas</string>\n    <string name=\"empty_group_list\">Non hai ningún grupo que mostrar. Engade grupos na pantalla de edición dalgunha entrada</string>\n    <string name=\"empty_group_list_title\">Non hai grupos</string>\n    <string name=\"no_icon_packs\">Aínda non se importou ningún paquete de iconas. Preme no signo máis para importar un. Consello: proba <a href=\"https://aegis-icons.github.io\">aegis-icons</a>.</string>\n    <string name=\"no_icon_packs_title\">Non hai paquetes de iconas</string>\n    <string name=\"pick_icon\">Escolle unha icona</string>\n    <string name=\"uncategorized\">Sen categoría</string>\n    <string name=\"done\">Feito</string>\n    <plurals name=\"qr_count\">\n        <item quantity=\"one\">%d / %d código QR</item>\n        <item quantity=\"other\">%d / %d códigos QR</item>\n    </plurals>\n    <string name=\"next\">Seguinte</string>\n    <string name=\"previous\">Anterior</string>\n    <string name=\"copy_uri\">Copiar URI</string>\n    <string name=\"unable_to_copy_uri_to_clipboard\">Non se puido copiar a URI no portapapeis</string>\n    <string name=\"uri_copied_to_clipboard\">URI copiada no portapapeis</string>\n    <string name=\"transfer_entry_description\">Escanea este código QR coa aplicación de autenticación á que queiras transferirlle esta entrada</string>\n    <string name=\"transfer_entry_brightness\">Preme no código QR para poñer ou quitar o brillo da pantalla ao máximo</string>\n    <string name=\"google_auth_compatible_transfer_description\">Escanea estes códigos QR con Aegis ou con Google Authenticator.\\n\\nDebido ás limitacións de Google Authenticator, só se inclúen os tokens TOTP e HOTP que usen SHA1 e produzan códigos de 6 cifras</string>\n    <string name=\"password_strength_very_weak\">Moi feble</string>\n    <string name=\"password_strength_weak\">Feble</string>\n    <string name=\"password_strength_fair\">Aceptable</string>\n    <string name=\"password_strength_good\">Boa</string>\n    <string name=\"password_strength_strong\">Forte</string>\n    <string name=\"password_strength_unknown\">O contrasinal é demasiado longo para a análise de robustez</string>\n    <string name=\"pref_pin_keyboard_title\">Usar teclado PIN na pantalla de bloqueo</string>\n    <string name=\"pref_pin_keyboard_summary\">Activa isto se queres habilitar o teclado do PIN na pantalla de bloqueo. Isto só funciona para os contrasinais numéricos</string>\n    <string name=\"title_activity_preferences\">Axustes</string>\n    <string name=\"title_activity_manage_groups\">Xestionar grupos</string>\n    <string name=\"title_activity_transfer\">Transferir entradas</string>\n    <string name=\"title_activity_about\">Información</string>\n    <string name=\"title_activity_edit_entry\">Editar entrada</string>\n    <string name=\"title_activity_scan_qr\">Escanear un código QR</string>\n    <string name=\"title_activity_import_entries\">Importar entradas</string>\n    <string name=\"title_activity_assign_icons\">Asignar iconas</string>\n    <string name=\"title_activity_licenses\">Licenzas de terceiros</string>\n    <string name=\"dialog_wipe_entries_title\">Limpar entradas</string>\n    <string name=\"dialog_wipe_entries_message\">O teu almacén xa contén entradas. Queres eliminalas antes de importar o ficheiro?\\n\\n<b>Se o fas, perderás o acceso ás entradas existentes no almacén para sempre.</b></string>\n    <string name=\"dialog_wipe_entries_checkbox\">Limpar o contido do almacén</string>\n    <string name=\"panic_trigger_ignore_toast\">Aegis recibiu unha alarma de pánico pero ignorarase porque o axuste está desactivado</string>\n    <string name=\"pref_panic_trigger_title\">Eliminar o almacén cunha alarma de pánico</string>\n    <string name=\"pref_panic_trigger_summary\">Elimina o almacén cando se reciba unha alarma de pánico desde Ripple</string>\n    <string name=\"import_vault\">Importar almacén de Aegis</string>\n    <string name=\"import_vault_hint\">Queres importar desde una aplicación 2FA distinta? Primeiro completa a configuración e despois vai ao menú de axustes.</string>\n    <plurals name=\"import_duplicate_toast\">\n        <item quantity=\"one\">Desmarcouse %d posible duplicado. Revisa a lista de entradas.</item>\n        <item quantity=\"other\">Desmarcáronse %d posibles duplicados. Revisa a lista de entradas.</item>\n    </plurals>\n    <string name=\"importer_help_2fas\">Proporciona un ficheiro de copia de seguridade de 2FAS Authenticator.</string>\n    <string name=\"importer_help_aegis\">Proporciona un ficheiro de copia de seguridade ou de exportación de Aegis.</string>\n    <string name=\"importer_help_authenticator_plus\">Proporciona un ficheiro de exportación de Authenticator Plus obtido mediante <b>Axustes -&gt; Copia de seguridade e restauración -&gt; Exportar como texto e HTML</b>.</string>\n    <string name=\"importer_help_authy\">Proporciona unha copia de <b>/data/data/com.authy.authy/shared_prefs/com.authy.storage.tokens.authenticator.xml</b>, localizado no directorio do almacenamento interno de Authy.</string>\n    <string name=\"importer_help_andotp\">Proporciona un ficheiro de copia de seguridade ou de exportación de andOTP.</string>\n    <string name=\"importer_help_bitwarden\">Proporciona un ficheiro de copia de seguridade ou de exportación de Bitwarden. Non se admiten os ficheiros cifrados.</string>\n    <string name=\"importer_help_battle_net_authenticator\">Proporciona unha copia de <b>/data/data/com.blizzard.messenger/shared_prefs/com.blizzard.messenger.authenticator_preferences.xml</b>, localizado no directorio do almacenamento interno de Battle.net Authenticator.</string>\n    <string name=\"importer_help_duo\">Proporciona unha copia de <b>/data/data/com.duosecurity.duomobile/files/duokit/accounts.json</b>, localizado no directorio do almacenamento interno de DUO.</string>\n    <string name=\"importer_help_ente_auth\">Proporciona un ficheiro de exportación de Ente Auth. Polo momento só se admiten ficheiros sen cifrar.</string>\n    <string name=\"importer_help_freeotp\">FreeOTP 2: Proporciona unha copia de seguridade.\\nFreeOTP 1.x: Proporciona unha copia de <b>/data/data/org.fedorahosted.freeotp/shared_prefs/tokens.xml</b>, localizado no directorio do almacenamento interno de FreeOTP.</string>\n    <string name=\"importer_help_freeotp_plus\">Proporciona un ficheiro de exportación de FreeOTP+.</string>\n    <string name=\"importer_warning_title_freeotp2\">Compatibilidade con FreeOTP 2</string>\n    <string name=\"importer_warning_message_freeotp2\">Hai varios problemas en FreeOTP 2 que poden provocar copias de seguridade corrompidas. Aegis intentará recuperar o máximo número de elementos posible, pero pode que haxa algúns, ou incluso todos, que non se poidan importar.</string>\n    <string name=\"importer_help_google_authenticator\"><b>Só se admiten ficheiros de base de datos de Google Authenticator v5.10 e anteriores</b>.\\n\\nProporciona unha copia de <b>/data/data/com.google.android.apps.authenticator2/databases/databases</b>, localizado no directorio do almacenamento interno de Google Authenticator.</string>\n    <string name=\"importer_help_microsoft_authenticator\">Proporciona unha copia de <b>/data/data/com.azure.authenticator/databases/PhoneFactor</b>, localizado no directorio do almacenamento interno de Microsoft Authenticator.</string>\n    <string name=\"importer_help_plain_text\">Proporciona un ficheiro de texto plano cunha URI de Google Authenticator en cada liña.</string>\n    <string name=\"importer_help_proton_authenticator\">Aportar un ficheiro de exportación (.json) de Proton Authenticator obtido desde <b>Axustes -&gt; Exportar</b>.</string>\n    <string name=\"importer_help_steam\"><b>Steam v3.0 e versións superiores non son compatibles</b>. Proporciona unha copia de <b>/data/data/com.valvesoftware.android.steam.community/files/Steamguard-*.json</b>, localizado no directorio do almacenamento interno de Steam.</string>\n    <string name=\"importer_help_stratum\">Proporciona un ficheiro de exportación de Stratum, obtido desde <b>Axustes -&gt; Copia de seguridade -&gt; Facer copia de seguridade nun ficheiro cifrado (recomendado)</b>.</string>\n    <string name=\"importer_help_totp_authenticator\">Proporciona un ficheiro de exportación de TOTP Authenticator.</string>\n    <string name=\"importer_help_winauth\">Proporciona un ficheiro de exportación de WinAuth.</string>\n    <string name=\"import_assign_icons_dialog_title\">Asignar iconas</string>\n    <string name=\"import_assign_icons_dialog_text\">Queres asignar iconas ás entradas importadas?</string>\n    <string name=\"importer_encrypted_exception_google_authenticator\">Omitiuse unha entrada cifrada: %s</string>\n    <string name=\"importer_help_direct\">Importa entradas directamente desde %s. Isto require que a app estea instalada neste dispositivo e que se lle conceda acceso root a Aegis.</string>\n    <string name=\"groups\">Grupos</string>\n    <string name=\"pref_focus_search\">Foco na busca ao abrir a app</string>\n    <string name=\"pref_focus_search_summary\">Poñer o foco na busca xusto tras abrir a aplicación.</string>\n    <string name=\"pref_grouping_halves\">Metades</string>\n    <string name=\"pref_grouping_none\">Sen agrupar</string>\n    <string name=\"pref_grouping_size_two\">Grupos de 2</string>\n    <string name=\"pref_grouping_size_three\">Grupos de 3</string>\n    <string name=\"pref_grouping_size_four\">Grupos de 4</string>\n    <string name=\"pref_copy_behavior_never\">Nunca</string>\n    <string name=\"pref_copy_behavior_single_tap\">Un toque</string>\n    <string name=\"pref_copy_behavior_double_tap\">Dobre toque</string>\n    <string name=\"pref_account_name_position_hidden\">Oculto</string>\n    <string name=\"pref_account_name_position_end\">Ao lado do provedor</string>\n    <string name=\"pref_account_name_position_below\">Debaixo do provedor</string>\n    <plurals name=\"time_elapsed_seconds\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"one\">fai %d segundo</item>\n        <item quantity=\"other\">fai %d segundos</item>\n    </plurals>\n    <plurals name=\"time_elapsed_minutes\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"one\">fai %d minuto</item>\n        <item quantity=\"other\">fai %d minutos</item>\n    </plurals>\n    <plurals name=\"time_elapsed_hours\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"one\">fai %d hora</item>\n        <item quantity=\"other\">fai %d horas</item>\n    </plurals>\n    <plurals name=\"time_elapsed_days\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"one\">fai %d día</item>\n        <item quantity=\"other\">fai %d días</item>\n    </plurals>\n    <plurals name=\"time_elapsed_years\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"one\">fai %d ano</item>\n        <item quantity=\"other\">fai %d anos</item>\n    </plurals>\n    <plurals name=\"dropdown_checkboxes_default_count\">\n        <item quantity=\"one\">%d elemento seleccionado</item>\n        <item quantity=\"other\">%d elementos seleccionados</item>\n    </plurals>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-gl-rES-v29/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"system_theme_title\">Predeterminado do sistema</string>\n    <string name=\"system_amoled_theme_title\">Predeterminado do sistema (AMOLED)</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-hi-rIN/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources xmlns:tools=\"http://schemas.android.com/tools\">\n    <string name=\"action_settings\">सेटिंग</string>\n    <string name=\"action_about\">हमारे बारे में</string>\n    <string name=\"action_delete\">हटाएँ</string>\n    <string name=\"action_transfer\">स्थानांतरण</string>\n    <string name=\"action_edit_icon\">आइकन संपादित करें</string>\n    <string name=\"action_reset_usage_count\">उपयोग गणना रीसेट करें</string>\n    <string name=\"action_reset_usage_count_dialog\">क्या आप वाकई इस प्रविष्टि की उपयोग संख्या को 0 पर सेट करना चाहते हैं?</string>\n    <string name=\"action_default_icon\">पूर्वनिर्धारित आइकन सेट करें</string>\n    <string name=\"discard\">रद्द करें</string>\n    <string name=\"save\">सहेजें</string>\n    <string name=\"issuer\">ज़ारीकर्ता</string>\n    <string name=\"yandex_pin\">पिन (4-16 अंक)</string>\n    <string name=\"motp_pin\">पिन (4- अंक)</string>\n    <string name=\"suggested\">सुझाव दिया</string>\n    <string name=\"usage_count\">उपयोग गिनती</string>\n    <string name=\"warning\">चेतावनी</string>\n    <string name=\"pref_cat_appearance_app\">एप</string>\n    <string name=\"pref_cat_appearance_entries\">प्रविष्टियां</string>\n    <string name=\"pref_cat_backups_android\">एंड्रॉयड</string>\n    <string name=\"pref_cat_backups_auto\">स्वचालित बैकअप</string>\n    <string name=\"pref_section_behavior_title\">व्यवहार</string>\n    <string name=\"pref_section_behavior_summary\">प्रवेश सूची के साथ बातचीत करते समय व्यवहार को अनुकूलित करें।</string>\n    <string name=\"pref_section_appearance_title\">दिखावट</string>\n    <string name=\"pref_section_appearance_summary\">ऐप की उपस्थिति को प्रभावित करने वाली थीम, भाषा और अन्य सेटिंग्स को समायोजित करें।</string>\n    <string name=\"pref_section_security_title\">सुरक्षा</string>\n    <string name=\"pref_section_security_summary\">एन्क्रिप्शन, बायोमेट्रिक अनलॉक, ऑटो लॉक और अन्य सुरक्षा सेटिंग्स कॉन्फ़िगर करें।</string>\n    <string name=\"pref_section_import_export_title\">आयात &amp; निर्यात</string>\n    <string name=\"pref_section_import_export_summary\">एजिस या अन्य प्रमाणक ऐप्स का बैकअप आयात करें। अपने एजिस वॉल्ट का मैन्युअल निर्यात बनाएं।</string>\n    <string name=\"pref_section_backups_title\">बैकअप्स</string>\n    <string name=\"pref_section_backups_summary\">अपने चुने हुए स्थान पर स्वचालित बैकअप सेट करें या एंड्रॉयड के क्लाउड बैकअप सिस्टम में भागीदारी को सक्षम करें।</string>\n    <string name=\"pref_section_icon_packs\">आइकन पैक्स</string>\n    <string name=\"pref_section_icon_packs_summary\">आइकन पैक प्रबंधित और आयात करें</string>\n    <string name=\"pref_select_theme_title\">थीम</string>\n    <string name=\"pref_view_mode_title\">देखने का प्रकार</string>\n    <string name=\"pref_lang_title\">भाषा</string>\n    <string name=\"pref_show_icons_title\">आइकन दिखाएं</string>\n    <string name=\"pref_show_icons_summary\">प्रत्येक एंट्री के आगे आइकन दिखाएं</string>\n    <string name=\"pref_code_group_size_title\">कोड संख्या समूह</string>\n    <string name=\"pref_code_group_size_summary\">कोड को समूहित करने के लिए अंकों की संख्या चुनें</string>\n    <string name=\"pref_import_file_title\">फ़ाइल से आयात करें</string>\n    <string name=\"pref_import_file_summary\">टोकन को फ़ाइल से आयात करें</string>\n    <string name=\"pref_android_backups_title\">एंड्रॉयड क्लाउड बैकअप</string>\n    <string name=\"pref_android_backups_summary\">एंड्रॉयड के क्लाउड बैकअप सिस्टम को उसके बैकअप में एजिस की तिजोरी को शामिल करने दें। यह केवल एन्क्रिप्टेड वॉल्ट के लिए समर्थित है।</string>\n    <string name=\"pref_android_backups_hint\"><i>डिवाइस-टू-डिवाइस (D2D) बैकअप की हमेशा अनुमति होती है, चाहे ऊपर की सेटिंग कुछ भी हो</i></string>\n    <string name=\"pref_backups_title\">तिजोरी का अपने आप बैकअप लें</string>\n    <string name=\"pref_backups_summary\">बदलाव होने पर एक्सटर्नल स्टोरेज में स्वतः ही वॉल्ट का बैकअप बनाएँ। यह सिर्फ एन्क्रिप्टेड वॉल्ट को सपोर्ट करता है।</string>\n    <string name=\"pref_backups_reminder_title\">बैकअप रिमाइंडर </string>\n    <string name=\"pref_backups_reminder_summary\">यदि आपने अपने नवीनतम परिवर्तनों का बैकअप नहीं लिया है तो अपनी वॉल्ट का बैकअप लेने के लिए एक रिमाइंडर दिखाएँ।</string>\n    <string name=\"pref_backups_reminder_dialog_title\">बैकअप रिमाइंडर बंद करें</string>\n    <string name=\"pref_backups_reminder_dialog_summary\">इस रिमाइंडर को बंद करने का मतलब है कि एजिस आपको यह नहीं बताएगा कि आपके पास ऐसे परिवर्तन हैं या नहीं जिनका अभी तक बैकअप नहीं लिया गया है। इससे आपको अपने टोकन तक पहुंच खोने का खतरा रहता है। क्या आप वाकई रिमाइंडर बंद करना चाहते हैं?</string>\n    <string name=\"pref_backups_location_summary\">बैकअप को इसमें सहेजा जाएगा</string>\n    <string name=\"pref_backups_trigger_title\">ट्रिगर बैकअप</string>\n    <string name=\"pref_backups_trigger_summary\">हाथ से बैकअप ट्रिगर करें</string>\n    <string name=\"pref_backups_versions_title\">रखने के लिए संस्करणों की संख्या</string>\n    <plurals name=\"pref_backups_versions_summary\">\n        <item quantity=\"one\">बैकअप का %1$d संस्करण रखें</item>\n        <item quantity=\"other\">बैकअप के %1$d संस्करणों को रखें</item>\n    </plurals>\n    <string name=\"pref_import_app_title\">ऐप से आयात करें</string>\n    <string name=\"pref_import_app_summary\">टोकनों को एक ऐप से आयात करें (रुट एक्सेस ज़रूरी है)</string>\n    <string name=\"pref_export_title\">निर्यात</string>\n    <string name=\"pref_export_summary\">वॉल्ट निर्यात करें</string>\n    <string name=\"pref_password_reminder_title\">पासवर्ड अनुस्मारक</string>\n    <string name=\"pref_google_auth_export_title\">गूगल ऑथेंटिकेटर के लिए एक्सपोर्ट करें</string>\n    <string name=\"pref_google_auth_export_descriptor\">गूगल ऑथेंटिकेटर के साथ कंपेटिबल एक्सपोर्ट क्यूआर कोड्स जेनरेट करें</string>\n    <string name=\"pref_google_auth_export_no_data\">एक्सपोर्ट करने के लिए कोई डाटा नही </string>\n    <plurals name=\"pref_google_auth_export_incompatible_entries\">\n        <item quantity=\"one\">%d अयोग्य एंट्री को छोड़ दिया</item>\n        <item quantity=\"other\">%d अयोग्य एंट्रीज को छोड़ दिया गया</item>\n    </plurals>\n    <string name=\"pref_password_reminder_summary\">पासवर्ड दर्ज करने के लिए %s रिमाइंडर दिखाएं, ताकि आप इसे न भूलें।</string>\n    <string name=\"pref_password_reminder_summary_disabled\">निष्क्रिय</string>\n    <string name=\"pref_secure_screen_title\">स्क्रीन सुरक्षा</string>\n    <string name=\"pref_secure_screen_summary\">एप्लीकेशन के भीतर स्क्रीनशॉट और स्क्रीन पर कब्जा करने के अन्य प्रयास ब्लॉक करें।</string>\n    <string name=\"pref_tap_to_reveal_title\">देखने के लिए टैप करें</string>\n    <string name=\"pref_tap_to_reveal_summary\">डिफ़ॉल्ट रूप से टोकन छिपाए जाएंगे। कोड देखने के लिए टोकन पर टैप करें</string>\n    <string name=\"pref_tap_to_reveal_time_title\">टैप करके देखने की समय सीमा</string>\n    <string name=\"pref_auto_lock_title\">स्वतः लॉक</string>\n    <string name=\"pref_auto_lock_summary\">जब %s</string>\n    <string name=\"pref_auto_lock_summary_disabled\">बंद है</string>\n    <string name=\"pref_auto_lock_prompt\">Aegis को स्वतः ही लॉक करें जब</string>\n    <string name=\"pref_auto_lock_type_back_button\">पीछे जाने वाली बटन दबाई जाए</string>\n    <string name=\"pref_auto_lock_type_minimize\">ऐप को मिनीमाइज किया जाए</string>\n    <string name=\"pref_auto_lock_type_device_lock\">डिवाइस को लॉक किया जाए</string>\n    <string name=\"pref_backup_password_category\">बैकअप &amp; निर्यात</string>\n    <string name=\"pref_backup_password_title\">बैकअप &amp; निर्यात के लिए अलग पासवर्ड</string>\n    <string name=\"pref_backup_password_summary\">यदि सक्षम किया गया है, तो ऐप को अनलॉक करने के लिए उपयोग किए जाने वाले पासवर्ड का उपयोग अब बैकअप और निर्यात को डिक्रिप्ट करने के लिए नहीं किया जा सकता है।</string>\n    <string name=\"pref_backup_password_change_title\">बैकअप &amp; निर्यात के लिए पासवर्ड बदलें</string>\n    <string name=\"pref_backup_password_change_summary\">एक नया पासवर्ड सेट करें जिसका उपयोग बैकअप और निर्यात के दौरान वॉल्ट को एन्क्रिप्ट करने के लिए किया जाएगा।</string>\n    <string name=\"pref_encryption_title\">एन्क्रिप्शन</string>\n    <string name=\"pref_encryption_summary\">वॉल्ट को एन्क्रिप्ट करें और पासवर्ड या बॉयोमीट्रिक्स से अनलॉक करें</string>\n    <string name=\"pref_biometrics_title\">बॉयोमेट्रिक अनलॉक</string>\n    <string name=\"pref_biometrics_summary\">वॉल्ट अनलॉक करने के लिए बायोमेट्रिक प्रमाणीकरण की अनुमति दें</string>\n    <string name=\"pref_set_password_title\">पासवर्ड बदलें</string>\n    <string name=\"pref_set_password_summary\">नया पासवर्ड सेट करें जिसकी जरूरत आपको वॉल्ट अनलॉक करने के लिए होगी</string>\n    <string name=\"export_encrypted\">वॉल्ट एन्क्रिप्ट करें</string>\n    <string name=\"export_help\">यह क्रिया एजिस के आंतरिक संग्रहण से तिजोरी को निर्यात करेगी। उस प्रारूप का चयन करें जिसमें आप चाहते हैं कि आपका निर्यात हो:</string>\n    <string name=\"export_warning_unencrypted\">आप अपने एजिस वॉल्ट की एक अनएन्क्रिप्टेड कॉपी निर्यात करने वाले हैं। <b>यह अनुशंसित नहीं है</b>।</string>\n    <string name=\"export_warning_password\">एक्सपोर्ट्स को सुरक्षा सेटिंग्स में कॉन्फ़िगर किए गए एक अलग पासवर्ड का उपयोग करके एन्क्रिप्ट किया जाता है।</string>\n    <string name=\"understand_risk_accept\">मैं जोखिम को समझता हूं</string>\n    <string name=\"export_format_aegis\">एजिस (.JSON)</string>\n    <string name=\"export_format_google_auth_uri\">टेक्स्ट फ़ाइल (.TXT)</string>\n    <string name=\"export_format_html\">वेब पेज (.html)</string>\n    <string name=\"export_format_hint\">निर्यात स्वरूप</string>\n    <string name=\"export_all_groups\">सभी समूहों को एक्सपोर्ट करें</string>\n    <string name=\"export_choose_groups\">चुनें कि कौन से समूह एक्सपोर्ट करने हैं</string>\n    <plurals name=\"export_groups_selected_count\">\n        <item quantity=\"one\">%d समूह चयनित</item>\n        <item quantity=\"other\">%d समूह चयनित</item>\n    </plurals>\n    <string name=\"export_no_groups_selected\">एक्सपोर्ट करने के लिए किसी भी ग्रुप का चयन नही किया गया</string>\n    <string name=\"export_html_title\" comment=\"The title of an HTML export document\">एजिस ऑथेंटिकेटर एक्सपोर्ट</string>\n    <string name=\"choose_authentication_method\">सुरक्षा</string>\n    <string name=\"authentication_method_explanation\">Aegis एक सुरक्षा-केंद्रित 2FA ऐप है। टोकनों को एक वॉल्ट में संग्रहीत किया जाता है, जिसे वैकल्पिक रूप से आपके चुने पासवर्ड के साथ एन्क्रिप्ट किया जा सकता है। यदि कोई हमलावर आपकी एन्क्रिप्टेड वॉल्ट फ़ाइल प्राप्त करता है, तो वे पासवर्ड को जाने बिना सामग्री तक नहीं पहुँच पाएंगे। \\n\\nहमने उन विकल्पों पहले से सेट कर रखा है जो हमें लगता है कि आपके डिवाइस के लिए सबसे उपयुक्त होगा।</string>\n    <string name=\"authentication_method_none\">कोई नहीं</string>\n    <string name=\"authentication_method_none_description\">वॉल्ट को खोलने के लिए किसी पासवर्ड की आवश्यकता नहीं है और इसे एन्क्रिप्ट नहीं किया जाएगा। <b> यह विकल्प अनुशंसित नहीं है </b>।</string>\n    <string name=\"authentication_method_password\">पासवर्ड</string>\n    <string name=\"authentication_method_password_description\">वॉल्ट को खोलने के लिए पासवर्ड की जरूरत होगी।</string>\n    <string name=\"authentication_method_password_explanation\">चेतावनी: यदि आप अपना पासवर्ड भूल जाते हैं, तो आप स्थायी रूप से अपने टोकनों तक पहुंच खो देंगे। पासवर्ड के बिना उन्हें पुनर्प्राप्त करने का कोई तरीका नहीं है।</string>\n    <string name=\"authentication_method_biometrics\">बॉयोमेट्रिक्स</string>\n    <string name=\"authentication_method_biometrics_description\">एक पासवर्ड के अलावा, इस डिवाइस पर पंजीकृत बायोमेट्रिक्स, एक फिंगरप्रिंट या आपके चेहरे को वॉल्ट को अनलॉक करने के लिए इस्तेमाल किया जा सकता है।</string>\n    <string name=\"authentication\">वॉल्ट अनलॉक करें</string>\n    <string name=\"authentication_multiline\" comment=\"The newline in the middle is used for aesthetic purposes\">वॉल्ट\\nअनलॉक करें</string>\n    <string name=\"auth_use_biometrics\"><font fgcolor=\"#FF0D86C1\">बॉयोमेट्रिक्स</font> का उपयोग करने के लिए टैप करें</string>\n    <string name=\"set_password\">कृपया पासवर्ड दर्ज करें</string>\n    <string name=\"set_group\">कृपया समूह नाम दर्ज़ करें</string>\n    <string name=\"set_number\">कृप्या कोई संख्या दर्ज़ करें</string>\n    <string name=\"set_password_confirm\">कृपया पासवर्ड की पुष्टि करें</string>\n    <string name=\"invalid_password\">पासवर्ड ग़लत है</string>\n    <string name=\"invalidated_biometrics\">आपके डिवाइस की सुरक्षा सेटिंग में बदलाव का पता चला है। बायोमेट्रिक अनलॉक को अक्षम और पुन: सक्षम करने के लिए कृपया \\\"एजिस -&gt; सेटिंग्स -&gt; सुरक्षा -&gt; बायोमेट्रिक अनलॉक\\\" पर जाएं।</string>\n    <string name=\"password_reminder_freq_never\">कभी नहीं</string>\n    <string name=\"password_reminder_freq_weekly\">साप्ताहिक</string>\n    <string name=\"password_reminder_freq_biweekly\">पाक्षिक</string>\n    <string name=\"password_reminder_freq_monthly\">मासिक</string>\n    <string name=\"password_reminder_freq_quarterly\">तिमाही</string>\n    <string name=\"enter_password_2fas_message\">ऐसा लगता है कि यह 2FAS बैकअप एन्क्रिप्टेड है। कृपया नीचे पासवर्ड दर्ज करें।</string>\n    <string name=\"enter_password_authy_message\">ऐसा लगता है कि आपके Authy टोकनों को एन्क्रिप्ट किया गया है। कृपया Aegis को बंद करें, Authy को खोलें और अपने पासवर्ड से टोकनों को अनलॉक करें। इसके बजाय, यदि आप अपना पासवर्ड नीचे दर्ज करते हैं, तो Aegis आपके लिए आपके Authy टोकनों को डिक्रिप्ट करने का भी प्रयास कर सकता है।</string>\n    <string name=\"enter_password_aegis_title\">कृपया आयात पासवर्ड दर्ज करें</string>\n    <string name=\"period_hint\">अवधि (सेकंड)</string>\n    <string name=\"algorithm_hint\">हैश फंकशन</string>\n    <string name=\"type\">प्रकार</string>\n    <string name=\"share\">साझा करें</string>\n    <string name=\"yes\">हां</string>\n    <string name=\"no\">नहीं</string>\n    <string name=\"unlock\">अनलॉक</string>\n    <string name=\"advanced\">उन्नत</string>\n    <string name=\"counter\">काउंटर</string>\n    <string name=\"digits\">अंक</string>\n    <string name=\"secret\">गुप्त</string>\n    <string name=\"scan\">क्यूआर कोड स्कैन करें</string>\n    <string name=\"scan_image\">छवि स्कैन करें</string>\n    <string name=\"enter_manually\">हाथों से दर्ज़ करें</string>\n    <string name=\"set_up_biometric\">बॉयोमेट्रिक अनलॉक सेट करें</string>\n    <string name=\"copy\">कॉपी करें</string>\n    <string name=\"edit\">संपादित करें</string>\n    <string name=\"favorite\" comment=\"Verb\">फेवरेट</string>\n    <string name=\"unfavorite\" comment=\"Verb\">पसंदीदा नहीं है</string>\n    <string name=\"error_all_caps\">एरर </string>\n    <string name=\"password\">पासवर्ड</string>\n    <string name=\"confirm_password\">पासवर्ड की पुष्टि करें</string>\n    <string name=\"show_password\">पासवर्ड दिखाएँ</string>\n    <string name=\"new_entry\">नई प्रविष्टि</string>\n    <string name=\"add_new_entry\">नयी प्रविष्टि जोड़ें</string>\n    <string name=\"unlock_vault_error\">वॉल्ट अनलॉक नहीं कर सके</string>\n    <string name=\"unlock_vault_error_description\">पासवर्ड गलत है। सुनिश्चित करें कि आपने अपना पासवर्ड गलत टाइप नहीं किया है।</string>\n    <string name=\"password_equality_error\">पासवर्ड समान और गैर-रिक्त होना चाहिए</string>\n    <string name=\"snackbar_authentication_method\">कृप्या एक प्रमाणीकरण तरीका चुनें</string>\n    <string name=\"encrypting_vault\">वॉल्ट एन्क्रिप्ट कर रहे हैं</string>\n    <string name=\"exporting_vault\">वॉल्ट निर्यात कर रहे हैं</string>\n    <string name=\"reading_file\">फ़ाइल डेटा पढ़ना</string>\n    <string name=\"requesting_root_access\">रूट एक्सेस रिक्वेस्ट कर रहा</string>\n    <string name=\"analyzing_qr\">क्यूआर कोड एनालाइज कर रहा है</string>\n    <plurals name=\"added_new_entries\">\n        <item quantity=\"one\">वॉल्ट में %d नयी एंट्री जोड़ी गई</item>\n        <item quantity=\"other\">वॉल्ट में %d नयी एंट्रीज जोड़ी गईं </item>\n    </plurals>\n    <string name=\"importing_icon_pack\">आइकन पैक निर्यात कर रहा है…</string>\n    <string name=\"delete_entry\">प्रविष्टि हटाएँ</string>\n    <string name=\"delete_entry_description\">क्या आप सुनिश्चित हैं कि आप इस प्रविष्टि को हटाना चाहते हैं?</string>\n    <string name=\"delete_entry_explanation\">यह क्रिया निम्न के लिए 2FA को अक्षम नहीं करती है:\\n<b>%s</b>\\n\\n पहुंच खोने से बचाने के लिए, सुनिश्चित करें कि आपने 2FA अक्षम कर दिया है या आपके पास इस सेवा के लिए कोड जनरेट करने का एक वैकल्पिक तरीका है।</string>\n    <string name=\"delete_entries\">प्रविष्टियाँ हटाएँ</string>\n    <plurals name=\"delete_entries_description\">\n        <item quantity=\"one\">क्या आप सुनिश्चित हैं कि आप %d प्रविष्टि को हटाना चाहते हैं?</item>\n        <item quantity=\"other\">क्या आप सुनिश्चित हैं कि आप %d प्रविष्टियाँ हटाना चाहते हैं?</item>\n    </plurals>\n    <string name=\"discard_changes\">परिवर्तन निरस्त करे?</string>\n    <string name=\"discard_changes_description\">आपके परिवर्तन सहेजे नहीं गए हैं</string>\n    <string name=\"saving_profile_error\">प्रोफाइल सहेजने में त्रुटि</string>\n    <string name=\"welcome\">स्वागत है</string>\n    <string name=\"app_description\">Aegis एक मुफ्त, सुरक्षित और ओपन सोर्स 2FA ऐप है</string>\n    <string name=\"setup_completed\">सेटअप समाप्त हुआ</string>\n    <string name=\"setup_completed_description\">Aegis का सेटअप हो चुका है और अब तैयार है</string>\n    <string name=\"vault_not_found\">वॉल्ट नहीं मिला, सेटअप शुरू हो रहा है...</string>\n    <string name=\"copied\">कॉपी किया गया</string>\n    <string name=\"errors_copied\">त्रुटियों को क्लिपबोर्ड में कॉपी किया गया</string>\n    <string name=\"version_copied\">संस्करण को क्लिपबोर्ड में कॉपी किया गया</string>\n    <string name=\"error_occurred\">एक त्रुटि हुई है</string>\n    <string name=\"decryption_error\">वॉल्ट को अनलॉक करने का प्रयास करते समय कोई त्रुटि उत्पन्न हुई</string>\n    <string name=\"decryption_corrupt_error\">वॉल्ट को अनलॉक करने का प्रयास करते समय कोई त्रुटि उत्पन्न हुई। आपकी वॉल्ट फ़ाइल करप्ट हो सकती है।</string>\n    <string name=\"saving_error\">वॉल्ट सहेजने का प्रयास करते समय कोई त्रुटि उत्पन्न हुई</string>\n    <string name=\"vault_init_error\">वॉल्ट को शुरू करने की कोशिश करते समय एक त्रुटि हुई</string>\n    <string name=\"vault_load_error\">स्टोरेज से वॉल्ट को लोड करने की कोशिश करते समय एक त्रुटि हुई</string>\n    <string name=\"biometric_decrypt_error\">बायोमेट्रिक प्रमाणीकरण के साथ वॉल्ट को डिक्रिप्ट करने की कोशिश करते समय एक त्रुटि हुई। यह आमतौर पर केवल तब होता है जब आपके डिवाइस की सुरक्षा सेटिंग्स बदल गई हो। कृपया अपने पासवर्ड के साथ वॉल्ट को अनलॉक करें और Aegis की सेटिंग में बायोमेट्रिक प्रमाणीकरण को फिर से कॉन्फ़िगर करें।</string>\n    <string name=\"biometric_init_error\">बायोमेट्रिक प्रमाणीकरण तैयार करने की कोशिश करते समय एक त्रुटि हुई। यह आमतौर पर केवल तब होता है जब आपके डिवाइस की सुरक्षा सेटिंग्स बदली गईं हों। कृपया अपने पासवर्ड के साथ वॉल्ट को अनलॉक करें और Aegis की सेटिंग में बायोमेट्रिक प्रमाणीकरण को फिर से कॉन्फ़िगर करें।</string>\n    <string name=\"disable_encryption\">एन्क्रिप्शन अक्षम करें</string>\n    <string name=\"disable_encryption_description\">क्या आप वाकई एन्क्रिप्शन को अक्षम करना चाहते हैं? यह वॉल्ट को सादे पाठ में संग्रहीत करने का कारण बनेगा। <b>स्वचालित बैकअप भी अक्षम कर दिए जाएंगे</b>।</string>\n    <string name=\"enable_encryption_error\">एन्क्रिप्शन सक्षम करते समय एक त्रुटि हुई</string>\n    <string name=\"disable_encryption_error\">एन्क्रिप्शन को अक्षम करते समय एक त्रुटि हुई</string>\n    <string name=\"backup_successful\">बैकअप सफलतापूर्वक बनाया गया</string>\n    <string name=\"backup_error\">बैकअप बनाने की कोशिश करते समय एक त्रुटि हुई</string>\n    <string name=\"backup_status_success\">सबसे हालिया बैकअप सफल: %s </string>\n    <string name=\"backup_status_failed\">सबसे हालिया बैकअप असफल: %s </string>\n    <string name=\"backup_status_none\">अभी तक कोई बैकअप नहीं बनाया गया है</string>\n    <string name=\"backup_warning_password\">एक्सपोर्ट्स को सुरक्षा सेटिंग्स में कॉन्फ़िगर किए गए एक अलग पासवर्ड का उपयोग करके एन्क्रिप्ट किया जाता है।</string>\n    <string name=\"documentsui_error\">ऐसा लगता है कि आपके डिवाइस से DocumentsUI गायब है। यह दस्तावेजों के चयन और निर्माण के लिए आवश्यक एक महत्वपूर्ण प्रणाली घटक है। यदि आपने &quot;डिब्लोट&quot; आपका उपकरण, आपने गलती से इसे हटा दिया होगा और इसे पुनः स्थापित करना होगा।</string>\n    <string name=\"icon_pack_import_error\">एक आइकन पैक आयात करने का प्रयास करते समय एक त्रुटि हुई</string>\n    <string name=\"icon_pack_import_exists_error\">आप जिस आइकन पैक को आयात करने का प्रयास कर रहे हैं वह पहले से मौजूद है। क्या आप इसे अधिलेखित करना चाहते हैं?</string>\n    <string name=\"icon_pack_delete_error\">एक आइकन पैक को हटाने का प्रयास करते समय एक त्रुटि हुई</string>\n    <plurals name=\"icon_pack_info\">\n        <item quantity=\"one\">%d ऑयकन</item>\n        <item quantity=\"other\">%d ऑयकन्स</item>\n    </plurals>\n    <string name=\"icon_custom\">कस्टम</string>\n    <string name=\"permission_denied\">अनुमति नहीं मिली</string>\n    <string name=\"andotp_new_format\">नया फॉर्मेट (0.6.3 या उससे नया)</string>\n    <string name=\"andotp_old_format\">पुराना फॉर्मेट (0.6.2 या उससे पुराना)</string>\n    <string name=\"choose_andotp_importer\">andOTP बैकअप फ़ाइल का कौन सा फॉर्मेट है?</string>\n    <string name=\"choose_totpauth_importer\">क्या यह TOTP ऑथेंटिकेटर बैकअप पासवर्ड के साथ एन्क्रिप्ट किया गया है?</string>\n    <string name=\"choose_application\">उस एप्लिकेशन का चयन करें जिससे।आप आयात करना चाहते हैं</string>\n    <string name=\"choose_theme\">अपने इच्छित थीम का चयन करें</string>\n    <string name=\"choose_view_mode\">अपने इच्छित दृश्य मोड का चयन करें</string>\n    <string name=\"parsing_file_error\">फ़ाइल को पार्स करने का प्रयास करते समय एक त्रुटि हुई</string>\n    <string name=\"file_not_found\">त्रुटी: फ़ाइल नहीं मिली</string>\n    <string name=\"reading_file_error\">फ़ाइल पढ़ने की कोशिश करते समय एक त्रुटि हुई</string>\n    <string name=\"app_lookup_error\">त्रुटी: ऐप इंस्टॉल नहीं है</string>\n    <string name=\"app_version_error\">%s का जो संस्करण इंस्टॉल है वह समर्थित नहीं है. हाल के संस्करणों ने इंटरनल स्टोरेज फोल्डर्स में कुछ फ़ाइलों को एन्क्रिप्ट करना शुरू कर दिया है, जिससे एजिस को इंपोर्ट के लिए आवश्यक जानकारी तक पहुंचने में असमर्थ बना दिया गया है। इंपोर्ट करने का प्रयास करने पर त्रुटि होने की संभावना है। क्या आप हर हाल में जारी रखना चाहेंगे?</string>\n    <string name=\"root_error\">एरर: रूट एक्सेस प्राप्त करने में असफल</string>\n    <plurals name=\"imported_entries_count\">\n        <item quantity=\"one\">%d प्रविष्टियाँ आयात कीं</item>\n        <item quantity=\"other\">%d प्रविष्टियाँ आयात कीं</item>\n    </plurals>\n    <plurals name=\"entries_shown\">\n        <item quantity=\"one\">%d एंट्री दिखा रहा</item>\n        <item quantity=\"other\">%d एंट्रीज दिखा रहा</item>\n    </plurals>\n    <string name=\"intro_import_error_title\">इंपोर्ट करने के दौरान एक त्रुटि उत्पन्न हुई</string>\n    <string name=\"import_error_title\">आयात के दौरान एक या अधिक त्रुटियां हुईं</string>\n    <string name=\"exporting_vault_error\">वॉल्ट को निर्यात करने की कोशिश करते समय एक त्रुटि हुई</string>\n    <string name=\"exported_vault\">वॉल्ट सफलतापूर्वक निर्यात किया गया</string>\n    <string name=\"encryption_set_password_error\">पासवर्ड सेट करने के दौरान एक त्रुटि हुई</string>\n    <string name=\"encryption_enable_biometrics_error\">बायोमेट्रिक अनलॉक को सक्षम करने का प्रयास करते समय एक त्रुटि हुई। कुछ डिवाइस में बायोमेट्रिक प्रमाणीकरण के खराब कार्यान्वयन की संभावना है और हो सकता है कि आपका उनमें से एक है। इसके बजाय केवल-पासवर्ड कॉन्फ़िगरेशन पर स्विच करने पर विचार करें।</string>\n    <string name=\"no_cameras_available\">कोई कैमरा उपलब्ध नहीं</string>\n    <string name=\"read_qr_error\">क्यूआर कोड पढ़ने की कोशिश करते समय एक त्रुटि हुई</string>\n    <string name=\"read_qr_error_phonefactor\">एजिस माइक्रोसॉफ्ट के मालिकाना 2FA एल्गोरिथम के साथ संगत नहीं है। Office 365 में 2FA को कॉन्फ़िगर करते समय कृपया \\\"सूचनाओं के बिना सेटअप एप्लिकेशन\\\" का चयन करना सुनिश्चित करें।</string>\n    <string name=\"partial_google_auth_import\">अपूर्ण गूगल ऑथेंटिकेटर एक्सपोर्ट का पता चला</string>\n    <string name=\"partial_google_auth_import_warning\">आपके इंपोर्ट से कुछ क्यूआर कोड गायब हैं। निम्नलिखित कोड नहीं मिले:\\n\\n<b>%s</b>\\n\\nआप इस आंशिक एक्सपोर्ट को इंपोर्ट करना जारी रख सकते हैं लेकिन हम सभी क्यूआर कोड के साथ पुनः प्रयास करने की सलाह देते हैं ताकि आप किसी भी टोकन तक पहुंच खोने का जोखिम न उठाएं|</string>\n    <string name=\"missing_qr_code_descriptor\">• क्यूआर कोड %d </string>\n    <string name=\"import_google_auth_failure\">गूगल ऑथेंटिकेटर एक्सपोर्ट को इंपोर्ट करना असफल हुआ</string>\n    <string name=\"unrelated_google_auth_batches_error\">एक्सपोर्ट में किसी असंबंधित बैच की जानकारी शामिल है. एक समय में 1 बैच इंपोर्ट करने का प्रयास करें।</string>\n    <string name=\"no_tokens_can_be_imported\">परिणामस्वरूप कोई टोकन आयात नहीं किया जा सकता</string>\n    <string name=\"unlocking_vault\">वॉल्ट अनलॉक हो रहा है</string>\n    <string name=\"remove_group\">समूह हटाये</string>\n    <string name=\"remove_group_description\">क्या आप वाकई इस समूह को हटाना चाहते हैं? इस समूह में प्रविष्टियाँ स्वतः ही \\'नो ग्रुप\\' में बदल जाएँगी।</string>\n    <string name=\"remove_icon_pack\">आइकन पैक हटाएं</string>\n    <string name=\"remove_icon_pack_description\">क्या आप वाकई इस आइकन पैक को हटाना चाहते हैं? इस पैक से आइकॉन का उपयोग करने वाली प्रविष्टियां प्रभावित नहीं होंगी।</string>\n    <string name=\"details\">विवरण</string>\n    <string name=\"show_error_details\">एरर की जानकारी दिखाएं </string>\n    <string name=\"lock\">लॉक करें</string>\n    <string name=\"name\">नाम</string>\n    <string name=\"no_group\">कोई समूह नहीं</string>\n    <string name=\"sort\" comment=\"Title of the Sort button in the top action bar of the main view\">क्रमबद्ध</string>\n    <string name=\"sort_alphabetically\">जारीकर्ता (A से Z)</string>\n    <string name=\"sort_alphabetically_reverse\">जारीकर्ता (Z से A)</string>\n    <string name=\"sort_alphabetically_name\">खाता (A से Z)</string>\n    <string name=\"sort_alphabetically_name_reverse\">खाता (Z से A)</string>\n    <string name=\"sort_usage_count\">उपयोग गिनती</string>\n    <string name=\"sort_custom\">कस्टम</string>\n    <string name=\"new_group\">नया समूह...</string>\n    <string name=\"group\">समूह</string>\n    <string name=\"group_name_hint\">समूह का नाम</string>\n    <string name=\"preference_manage_groups\">समूहों को संपादित करें</string>\n    <string name=\"preference_manage_groups_summary\">यहां अपने समूहों को प्रबंधित करें और हटाएँ</string>\n    <string name=\"preference_reset_usage_count\">उपयोग गणना रीसेट करें</string>\n    <string name=\"preference_reset_usage_count_summary\">अपनी तिजोरी में प्रत्येक प्रविष्टि की उपयोग संख्या को रीसेट करें</string>\n    <string name=\"preference_reset_usage_count_dialog\">क्या आप वाकई अपनी तिजोरी में प्रत्येक प्रविष्टि की उपयोग संख्या को 0 पर सेट करना चाहते हैं?</string>\n    <string name=\"note\" comment=\"Users can add a note to an entry\">नोट</string>\n    <string name=\"clear\">खाली करें</string>\n    <string name=\"pref_highlight_entry_title\">टैप करने पर टोकन हाइलाइट करें</string>\n    <string name=\"pref_highlight_entry_summary\">टैप करने पर टोकनों को एक दूसरे से अलग उजागर करने के लिए उन्हें अस्थायी रूप से हाईलाइट करें</string>\n    <string name=\"pref_minimize_on_copy_title\">कॉपी करने पर मिनिमाइज करें</string>\n    <string name=\"pref_minimize_on_copy_summary\">ओटीपी कॉपी करने के बाद ऐप को मिनिमाइज करें</string>\n    <string name=\"pref_pause_entry_title\">टैप किए जाने पर टोकन फ़्रीज़ करें</string>\n    <string name=\"pref_pause_entry_summary\">टोकन को टैप करके उनके स्वचालित रीफ़्रेश को रोकें। जब तक वे केंद्रित हैं तब तक टोकन अपडेट नहीं होंगे। \\\"टैप किए जाने पर टोकन हाइलाइट करें\\\" या \\\"प्रकट करने के लिए टैप करें\\\" की आवश्यकता है।</string>\n    <string name=\"pin_keyboard_description\">पिन कीबोर्ड को सक्षम करने के लिए अपना पासवर्ड दर्ज करें। ध्यान दें कि यह केवल तभी काम करता है जब आपके पासवर्ड में केवल संख्याएँ हों</string>\n    <string name=\"pin_keyboard_error\">पिन कीबोर्ड सक्षम करने में त्रुटी</string>\n    <string name=\"pin_keyboard_error_description\">पिन कीबोर्ड सेट करना संभव नहीं है। आपके पासवर्ड में केवल संख्याएँ होनी चाहिए।</string>\n    <string name=\"pin_keyboard_disabled\">पासवर्ड बदला गया। पिन कीबोर्ड अब नहीं दिखाया जाएगा।</string>\n    <string name=\"selected\">चयनित</string>\n    <string name=\"dark_theme_title\">गहरे रंग की थीम</string>\n    <string name=\"light_theme_title\">सफेद रंग की थीम</string>\n    <string name=\"amoled_theme_title\">AMOLED थीम</string>\n    <string name=\"system_theme_title\">बैटरी सेवर के द्वारा सेट</string>\n    <string name=\"system_amoled_theme_title\">बैटरी सेवर के द्वारा सेट (AMOLED)</string>\n    <string name=\"normal_viewmode_title\">सामान्य</string>\n    <string name=\"compact_mode_title\">सघन</string>\n    <string name=\"small_mode_title\">छोटा</string>\n    <string name=\"unknown_issuer\">अज्ञात जारीकर्ता</string>\n    <string name=\"unknown_account_name\">अज्ञात खाता नाम</string>\n    <string name=\"unable_to_process_deeplink\">डीप लिंक प्रक्रिया करने में असमर्थ</string>\n    <string name=\"unable_to_read_qrcode_file\">क्यूआर कोड को फाइल:%s से पढ़ने और प्रोसेस करने में असमर्थ.</string>\n    <string name=\"unable_to_process_shared_text\">शेयर्ड टेक्स्ट को ओटीपी के रूप में प्रोसेस करने में असफल</string>\n    <string name=\"unable_to_generate_qrcode\">क्यूआर कोड उत्पन्न करने में असमर्थ</string>\n    <string name=\"select_picture\">छवि चयन करें</string>\n    <string name=\"select_icon\">आइकन चयन करें</string>\n    <string name=\"tile_open_vault\" comment=\"label for a quick settings tile that opens the app when tapped\">वॉल्ट खोलें </string>\n    <string name=\"tile_open_scanner\" comment=\"label for a quick settings tile that opens the QR code scanner when tapped\">स्कैनर खोलें </string>\n    <string name=\"toggle_checkboxes\">चेकबॉक्स टॉगल करें</string>\n    <string name=\"search\">खोजें</string>\n    <string name=\"channel_name_lock_status\">लॉक स्तिथि</string>\n    <string name=\"channel_description_lock_status\">वॉल्ट लॉक हो जाने पर Aegis आपको सूचित करने के लिए एक सतत अधिसूचना दिखा सकता है</string>\n    <string name=\"vault_unlocked_state\">वॉल्ट अनलॉक है। लॉक करने के लिए टैप करें।</string>\n    <string name=\"version\">संस्करण</string>\n    <string name=\"changelog\">परिवर्तन लॉग</string>\n    <string name=\"whats_new\">नया क्या है</string>\n    <string name=\"github_description\">सोर्स कोड, मुद्दे और जानकारी</string>\n    <string name=\"license\">लाइसेंस</string>\n    <string name=\"license_description\">एजिस प्रमाणक को जीपीएलवी3 के तहत लाइसेंस दिया गया है</string>\n    <string name=\"third_party_licenses\">तीसरे-पक्ष के लाइसेंस</string>\n    <string name=\"third_party_licenses_description\">एजिस तीसरे पक्ष के पुस्तकालयों के लाइसेंस का उपयोग करता है</string>\n    <string name=\"country_netherlands\">नीदरलैंड</string>\n    <string name=\"email_us\">ईमेल लिखें</string>\n    <string name=\"visit_website\">हमारी वेबसाइट पर जाएँ</string>\n    <string name=\"about_support\">सहायता</string>\n    <string name=\"support_rate\">रेट करें</string>\n    <string name=\"support_rate_description\">गूगल प्ले स्टोर में एक समीक्षा छोड़कर हमारा समर्थन करें</string>\n    <string name=\"webview_error\">यह उपकरण वेब दृश्य का समर्थन नहीं करता है, जो चैंज और लाइसेंस देखने के लिए आवश्यक है। इसमें एक सिस्टम घटक गायब है।</string>\n    <string name=\"email\">ईमेल</string>\n    <string name=\"time_sync_warning_title\">स्वचालित समय सिंक</string>\n    <string name=\"time_sync_warning_message\">Aegis सही कोड उत्पन्न करने के लिए सिस्टम समय पर निर्भर करता है। केवल कुछ सेकंड के विचलन से गलत कोड हो सकते हैं। ऐसा लगता है कि आपका डिवाइस समय को स्वचालित रूप से सिंक्रनाइज़ करने के लिए कॉन्फ़िगर नहीं किया गया है। क्या आप अब ऐसा करना चाहेंगे?</string>\n    <string name=\"time_sync_warning_disable\">मुझे चेतावनी देना बंद करें। मैं जानता हूँ मैं क्या कर रहा हूँ</string>\n    <string name=\"google_qr_export_unrelated\">असंबंधित क्यूआर कोड मिला। स्कैनर को पुनरारंभ करने का प्रयास करें।</string>\n    <string name=\"backup_error_bar_message\"><b>हाल ही में वॉल्ट बैकअप विफल रहा</b></string>\n    <string name=\"backup_system_builtin\">एजिस के बिल्ट-इन स्वचालित बैकअप्स </string>\n    <string name=\"backup_system_android\">एंड्रॉयड क्लाउड बैकअप सिस्टम </string>\n    <string name=\"backup_reminder_bar_message_with_latest\" comment=\"The parameter is an elapsed time in the style of 'x seconds/minutes/days ago'\">        लेटेस्ट बैकअप आउटडेटेड है (%s)\n    </string>\n    <string name=\"backup_reminder_bar_message\">         परिवर्तनों का बैकअप नहीं लिया गया है</string>\n    <string name=\"backup_reminder_bar_dialog_title\">परिवर्तनों का बैकअप नहीं लिया गया है</string>\n    <string name=\"backup_reminder_bar_dialog_summary\">         वॉल्ट में हाल के बदलावों का अभी तक बैकअप नहीं लिया गया है। अपने खातों तक पहुंच खोने से रोकने के लिए नियमित बैकअप लेना महत्वपूर्ण है। कृपया सेटिंग मेनू में स्वचालित बैकअप सेट करने पर विचार करें।\n    </string>\n    <string name=\"backup_reminder_bar_dialog_accept\">बैकअप्स  सेट करें</string>\n    <string name=\"backup_plaintext_export_warning\"><b>वॉल्ट को हाल ही में साधारण टेक्स्ट में एक्सपोर्ट किया गया था</b></string>\n    <string name=\"pref_show_plaintext_warning_hint\">यह चेतावनी दुबारा न दिखाएँ</string>\n    <string name=\"backup_plaintext_warning_explanation\">यह चेतावनी इसलिए दिखाई गई है क्योंकि आपने हाल ही में वॉल्ट की एक अनएन्क्रिप्टेड प्रति निर्यात की है। आपके टोकन की सुरक्षा बनाए रखने के लिए, हम अनुशंसा करते हैं कि जब इसकी आवश्यकता न रह जाए तो इस फ़ाइल को हटा दें।</string>\n    <string name=\"switch_camera\">कैमरा स्विच करें</string>\n    <string name=\"empty_list\">दिखाए जाने के लिए कोई कोड नहीं हैं। नीचे दाएं कोने में प्लस साइन टैप करके प्रविष्टियां जोड़ना प्रारंभ करें</string>\n    <string name=\"empty_list_title\">कोई प्रविष्टियाँ नहीं मिलीं</string>\n    <string name=\"empty_group_list\">दिखाए जाने के लिये कोई समूह नहीं हैं। एक प्रविष्टि के संपादन स्क्रीन में समूह जोड़ें</string>\n    <string name=\"empty_group_list_title\">कोई समूह नहीं मिले</string>\n    <string name=\"no_icon_packs\">अभी तक कोई आइकन पैक आयात नहीं किया गया है। एक आयात करने के लिए प्लस चिह्न टैप करें। युक्ति: <a href=\"https://aegis-icons.github.io\">एजिस-आइकन</a> आज़माएं।</string>\n    <string name=\"no_icon_packs_title\">कोई आइकन पैक नहीं</string>\n    <string name=\"pick_icon\">चिह्न चुनें</string>\n    <string name=\"uncategorized\">अवर्गीकृत</string>\n    <string name=\"done\">हो गया</string>\n    <plurals name=\"qr_count\">\n        <item quantity=\"one\">%d / %d क्यूआर कोड </item>\n        <item quantity=\"other\">%d / %d क्यूआर कोड्स </item>\n    </plurals>\n    <string name=\"next\">अगला</string>\n    <string name=\"previous\">पिछला</string>\n    <string name=\"copy_uri\">URI को कॉपी करें</string>\n    <string name=\"unable_to_copy_uri_to_clipboard\">क्लिपबोर्ड पर कॉपी करने में असमर्थ</string>\n    <string name=\"uri_copied_to_clipboard\">क्लिपबोर्ड में कॉपी हो गया</string>\n    <string name=\"transfer_entry_description\">इस क्यूआर कोड को उस ऑथेंटिकेटर ऐप के साथ स्कैन करें जिसमें आप इस प्रविष्टि को स्थानांतरित करना चाहते हैं</string>\n    <string name=\"google_auth_compatible_transfer_description\">इन क्यूआर कोड को एजिस या गूगल ऑथेंटिकेटर से स्कैन करें।\\n\\n गूगल ऑथेंटिकेटर ऐप की सीमाओं के कारण, केवल TOTP &amp; HOTP टोकन जो SHA1 का उपयोग करते हैं और 6-अंकीय कोड उत्पन्न करते हैं, शामिल हैं</string>\n    <string name=\"password_strength_very_weak\">बहुत कमज़ोर</string>\n    <string name=\"password_strength_weak\">कमजोर</string>\n    <string name=\"password_strength_fair\">बढ़िया</string>\n    <string name=\"password_strength_good\">अच्छा</string>\n    <string name=\"password_strength_strong\">मजबूत</string>\n    <string name=\"pref_pin_keyboard_title\">लॉकस्क्रीन पर पिन कीबोर्ड का उपयोग करें</string>\n    <string name=\"pref_pin_keyboard_summary\">यदि आप लॉकस्क्रीन पर पिन कीबोर्ड को सक्षम करना चाहते हैं तो इसे सक्षम करें। यह केवल संख्यात्मक पासवर्ड के लिए काम करता है</string>\n    <string name=\"title_activity_preferences\">सेटिंग्स</string>\n    <string name=\"title_activity_manage_groups\">समूह प्रबंधित करें</string>\n    <string name=\"title_activity_transfer\">प्रविष्टियाँ स्थानांतरित करें</string>\n    <string name=\"title_activity_about\">ऐप के बारे में</string>\n    <string name=\"title_activity_edit_entry\">प्रविष्टि संपादित करें</string>\n    <string name=\"title_activity_scan_qr\">क्यूआर कोड स्कैन करें</string>\n    <string name=\"title_activity_import_entries\">प्रविष्टियाँ आयात करें</string>\n    <string name=\"dialog_wipe_entries_title\">प्रविष्टियों को साफ करें</string>\n    <string name=\"dialog_wipe_entries_message\">आपके वॉल्ट में पहले से ही प्रविष्टियाँ हैं। क्या आप इस फ़ाइल को आयात करने से पहले इन प्रविष्टियों को निकालना चाहते हैं?\\n\\n<b> ऐसा करने पर, आप स्थायी रूप से वॉल्ट में मौजूदा प्रविष्टियों तक पहुंच खो देंगे। </b></string>\n    <string name=\"dialog_wipe_entries_checkbox\">वॉल्ट सामग्री साफ करें</string>\n    <string name=\"panic_trigger_ignore_toast\">एजिस को पैनिक ट्रिगर मिला लेकिन सेटिंग अक्षम है, अनदेखा कर रहा है</string>\n    <string name=\"pref_panic_trigger_title\">पैनिक ट्रिगर पर तिजोरी हटाएं</string>\n    <string name=\"pref_panic_trigger_summary\">रिपल से पैनिक ट्रिगर मिलने पर वॉल्ट को डिलीट करें</string>\n    <string name=\"importer_help_2fas\">2FAS प्रमाणक बैकअप फ़ाइल प्रदान करें।</string>\n    <string name=\"importer_help_aegis\">एजिस निर्यात/बैकअप फ़ाइल की आपूर्ति करें।</string>\n    <string name=\"importer_help_authenticator_plus\">एक प्रमाणक प्लस निर्यात फ़ाइल की आपूर्ति करें\n<b>सेटिंग्स -&gt; बैकअप &amp; पुनर्स्थापना -&gt; पाठ और HTML के रूप में निर्यात करें</b>।</string>\n    <string name=\"importer_help_authy\">Authy की आंतरिक संग्रहण निर्देशिका में स्थित <b>/data/data/com.authy.authy/shared_prefs/com.authy.storage.tokens.authenticator.xml</b> की एक प्रति प्रदान करें।</string>\n    <string name=\"importer_help_andotp\">एक andOTP निर्यात/बैकअप फ़ाइल की आपूर्ति करें।</string>\n    <string name=\"importer_help_bitwarden\">एक बिटवर्डन निर्यात/बैकअप फ़ाइल की आपूर्ति करें। एन्क्रिप्टेड फ़ाइलें समर्थित नहीं हैं।</string>\n    <string name=\"importer_help_duo\">DUO की आंतरिक संग्रहण निर्देशिका में स्थित <b>/data/data/com.duosecurity.duomobile/files/duokit/accounts.json</b> की एक प्रति प्रदान करें।</string>\n    <string name=\"importer_help_freeotp_plus\">एक फ्रीओटीपी+ निर्यात फ़ाइल की आपूर्ति करें।</string>\n    <string name=\"importer_help_google_authenticator\"><b>केवल गूगल प्रमाणक v5.10 और पूर्व की डेटाबेस फ़ाइलें समर्थित हैं</b>।\\n\\n<b>/data/data/com.google.android.apps.authenticator2/databases/databases</b> की एक प्रति प्रदान करें, गूगल प्रमाणक की आंतरिक संग्रहण निर्देशिका में स्थित है।</string>\n    <string name=\"importer_help_microsoft_authenticator\">माइक्रोसॉफ्ट प्रमाणक। की आंतरिक संग्रहण निर्देशिका में स्थित <b>/data/data/com.azure.authenticator/databases/PhoneFactor</b> की एक प्रति प्रदान करें।</string>\n    <string name=\"importer_help_plain_text\">प्रत्येक पंक्ति पर एक गूगल प्रमाणक URI के साथ एक सादा पाठ फ़ाइल प्रदान करें।</string>\n    <string name=\"importer_help_steam\"><b>स्टीम ३.० और नए वर्जन असमर्थित हैं</b>। इंटरनल स्टोरेज की स्टीम डायरेक्टरी में स्थित<b>/data/data/com.valvesoftware.android.steam.community/files/Steamguard-*.json</b> की एक प्रति प्रदान करें।</string>\n    <string name=\"importer_help_totp_authenticator\">एक TOTP प्रमाणक निर्यात फ़ाइल की आपूर्ति करें।</string>\n    <string name=\"importer_help_winauth\">WinAuth निर्यात फ़ाइल प्रदान करें।</string>\n    <string name=\"importer_encrypted_exception_google_authenticator\">एन्क्रिप्टेड प्रविष्टि को छोड़ दिया गया था: %s</string>\n    <string name=\"importer_help_direct\">%s से सीधे प्रविष्टियां आयात करें। इसके लिए इस डिवाइस पर ऐप को इंस्टॉल करना होगा और एजिस को रूट एक्सेस देना होगा।</string>\n    <string name=\"groups\">समूह</string>\n    <string name=\"pref_focus_search\">ऐप स्टार्ट पर खोज फोकस फोकस करें</string>\n    <string name=\"pref_focus_search_summary\">ऐप खोलने के तुरंत बाद सर्च पर फोकस करें।</string>\n    <string name=\"pref_grouping_halves\">आधा</string>\n    <string name=\"pref_grouping_none\">ग्रुपिंग नहीं</string>\n    <string name=\"pref_grouping_size_two\">२ का समूह</string>\n    <string name=\"pref_grouping_size_three\">३ का समूह</string>\n    <string name=\"pref_grouping_size_four\">४ का समूह</string>\n    <plurals name=\"time_elapsed_seconds\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"one\">%d सेकंड पहले</item>\n        <item quantity=\"other\">%d सेकंड्स पहले</item>\n    </plurals>\n    <plurals name=\"time_elapsed_minutes\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"one\">%d मिनट पहले</item>\n        <item quantity=\"other\">%d मिनट्स पहले</item>\n    </plurals>\n    <plurals name=\"time_elapsed_hours\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"one\">%d घंटा पहले</item>\n        <item quantity=\"other\">%d घंटे पहले</item>\n    </plurals>\n    <plurals name=\"time_elapsed_days\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"one\">%d दिन पहले</item>\n        <item quantity=\"other\">%d दिनों पहले</item>\n    </plurals>\n    <plurals name=\"time_elapsed_years\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"one\">%d वर्ष पहले</item>\n        <item quantity=\"other\">%d वर्षों पहले</item>\n    </plurals>\n    <plurals name=\"dropdown_checkboxes_default_count\">\n        <item quantity=\"one\">%d आइटम चयनित</item>\n        <item quantity=\"other\">%d आइटम्स चयनित</item>\n    </plurals>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-hi-rIN-v29/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources></resources>\n"
  },
  {
    "path": "app/src/main/res/values-hu-rHU/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources xmlns:tools=\"http://schemas.android.com/tools\">\n    <string name=\"action_settings\">Beállítások</string>\n    <string name=\"action_about\">Névjegy</string>\n    <string name=\"action_delete\">Törlés</string>\n    <string name=\"action_transfer\">Átvitel</string>\n    <string name=\"action_edit_icon\">Ikon szerkesztése</string>\n    <string name=\"action_reset_usage_count\">Használati számláló visszaállítása</string>\n    <string name=\"action_reset_usage_count_dialog\">Biztos, hogy visszaállítja a bejegyzés használati számlálóját nullára?</string>\n    <string name=\"action_default_icon\">Alapértelmezett ikon visszaállítása</string>\n    <string name=\"discard\">Elvetés</string>\n    <string name=\"save\">Mentés</string>\n    <string name=\"all\">Összes</string>\n    <string name=\"issuer\">Kibocsátó</string>\n    <string name=\"yandex_pin\">PIN (4–16 számjegy)</string>\n    <string name=\"motp_pin\">PIN (4 számjegy)</string>\n    <string name=\"suggested\">Javasolt</string>\n    <string name=\"usage_count\">Használati számláló</string>\n    <string name=\"warning\">Figyelmeztetés</string>\n    <string name=\"pref_cat_appearance_app\">Alkalmazás</string>\n    <string name=\"pref_cat_appearance_entries\">Bejegyzések</string>\n    <string name=\"pref_cat_backups_android\">Android</string>\n    <string name=\"pref_cat_backups_auto\">Automatikus biztonsági mentés</string>\n    <string name=\"pref_section_behavior_title\">Működés</string>\n    <string name=\"pref_section_behavior_summary\">Működés testreszabása a bejegyzéslista használatakor.</string>\n    <string name=\"pref_section_appearance_title\">Megjelenés</string>\n    <string name=\"pref_section_appearance_summary\">Téma, nyelv és egyéb beállítások módosítása, amelyek befolyásolják az alkalmazás kinézetét.</string>\n    <string name=\"pref_section_security_title\">Biztonság</string>\n    <string name=\"pref_section_security_summary\">Titkosítás, biometrikus feloldás, automatikus zárolás és más biztonsági beállítások megadása.</string>\n    <string name=\"pref_section_import_export_title\">Importálás és exportálás</string>\n    <string name=\"pref_section_import_export_summary\">Az Aegis vagy más hitelesítő alkalmazás mentésének importálása. Kézi exportálások készítése az Aegis-széfjéről.</string>\n    <string name=\"pref_section_audit_log_title\">Auditnapló</string>\n    <string name=\"pref_section_audit_log_summary\">Az alkalmazáson belül történt összes bejelentett fontos esemény listája.</string>\n    <string name=\"pref_section_backups_title\">Biztonsági mentések</string>\n    <string name=\"pref_section_backups_summary\">Automatikus biztonsági mentés beállítása az általa választott helyre, vagy az Android felhős mentésének bekapcsolása.</string>\n    <string name=\"pref_section_icon_packs\">Ikoncsomagok</string>\n    <string name=\"pref_section_icon_packs_summary\">Ikoncsomagok kezelése és importálása</string>\n    <string name=\"pref_select_theme_title\">Téma</string>\n    <string name=\"pref_dynamic_colors_title\">Dinamikus színek</string>\n    <string name=\"pref_dynamic_colors_summary\">Az Android-témája színein alapuló átfedés alkalmazása</string>\n    <string name=\"pref_view_mode_title\">Nézetmód</string>\n    <string name=\"pref_lang_title\">Nyelv</string>\n    <string name=\"pref_show_icons_title\">Ikonok megjelenítése</string>\n    <string name=\"pref_show_icons_summary\">Ikonok megjelenítése minden bejegyzés mellett</string>\n    <string name=\"pref_code_group_size_title\">Kód számjegyeinek csoportosítása</string>\n    <string name=\"pref_code_group_size_summary\">Válasszon csoportosítási számot</string>\n    <string name=\"pref_account_name_position_title\">A fióknév megjelenítése</string>\n    <string name=\"pref_show_next_code_title\">Következő kód megjelenítése</string>\n    <string name=\"pref_show_next_code_summary\">A következő kód előállítása és megjelenítése előre</string>\n    <string name=\"pref_expiration_state_title\">A lejáró kódok speciális jelzése</string>\n    <string name=\"pref_expiration_state_summary\">A lejáró kódok színének módosítása, és villogtatás a lejáratuk előtt</string>\n    <string name=\"pref_expiration_state_fallback\">A lejáró kódok színének módosítása</string>\n    <string name=\"pref_shared_issuer_account_name_title\">A fióknév megjelenítése csak akkor, ha szükséges</string>\n    <string name=\"pref_shared_issuer_account_name_summary\">A fióknevek megjelenítése csak akkor, ha megegyezik a kibocsátójuk. A többi fióknév rejtve lesz.</string>\n    <string name=\"pref_account_name_position_summary_override\">Ezt a beállítást felülbírálja a csempenézetes mód. A fióknév látható lesz a kibocsátó alatt.</string>\n    <string name=\"pref_import_file_title\">Importálás fájlból</string>\n    <string name=\"pref_import_file_summary\">Tokenek importálása fájlból</string>\n    <string name=\"pref_android_backups_title\">Android felhős mentések</string>\n    <string name=\"pref_android_backups_summary\">Engedélyezés az Android felhős biztonsági mentési rendszer számára, hogy automatikus mentse az Aegis széfjét. Ez csak titkosított széf esetén lehetséges.</string>\n    <string name=\"pref_android_backups_hint\"><i>Az eszközök közti (D2) biztonsági mentések mindig engedélyezettek, a fenti beállítástól függetlenül</i></string>\n    <string name=\"pref_backups_title\">A széf automatikus mentése</string>\n    <string name=\"pref_backups_summary\">Biztonsági mentések automatikus készítése a széfről a külső tárolóra, ha változás történik. Ez csak titkosított széfek esetén támogatott.</string>\n    <string name=\"pref_backups_reminder_title\">Biztonsági mentési emlékeztető</string>\n    <string name=\"pref_backups_reminder_summary\">Emlékeztető megjelenítése, ha a legutóbbi változtatásokról nem készült biztonsági mentés.</string>\n    <string name=\"pref_backups_reminder_dialog_title\">Biztonsági mentési emlékeztető kikapcsolása</string>\n    <string name=\"pref_backups_reminder_dialog_summary\">Az emlékeztető kikapcsolása után az Aegis nem fogja jelezni hogy a változásokról készült-e biztonsági mentés. Ezzel az adatvesztést kockáztatja. Biztos, hogy kikapcsolja az emlékeztetőt?</string>\n    <string name=\"pref_backups_versioning_strategy_title\">Biztonsági mentési stratégia</string>\n    <string name=\"pref_backups_versioning_strategy_keep_x_versions\">Több verzió megtartása</string>\n    <string name=\"pref_backups_versioning_strategy_single_backup\">Egyszeri biztonsági mentés</string>\n    <string name=\"pref_backups_versioning_strategy_single_backup_warning\">A kiválasztott biztonsági mentési stratégia nem megbízható és nem ajánlott. Az egyszeri biztonsági mentés meghibásodása az egyetlen biztonsági mentés elvesztéséhez vezethet.</string>\n    <string name=\"pref_backups_versioning_strategy_dialog_title\">Biztonsági mentési stratégia kiválasztása</string>\n    <string name=\"pref_backups_location_title\">Biztonsági mentés helye</string>\n    <string name=\"pref_backups_location_summary\">A biztonsági mentések itt lesznek tárolva:</string>\n    <string name=\"pref_backup_location_summary\">A biztonsági mentés itt lesz tárolva:</string>\n    <string name=\"pref_backups_trigger_title\">Biztonsági mentés készítése</string>\n    <string name=\"pref_backups_trigger_summary\">Biztonsági mentés kézi indítása</string>\n    <string name=\"pref_backups_versions_title\">Megtartandó verziók száma</string>\n    <string name=\"pref_backups_versions_infinite\">\\u221E</string>\n    <plurals name=\"pref_backups_versions_summary\">\n        <item quantity=\"one\">%1$d verzió megtartása a mentésből</item>\n        <item quantity=\"other\">%1$d verzió megtartása a mentésből</item>\n    </plurals>\n    <string name=\"pref_backups_versions_infinite_summary\">Végtelen számú verzió megtartása a biztonsági mentésből</string>\n    <string name=\"pref_import_app_title\">Importálás alkalmazásból</string>\n    <string name=\"pref_import_app_summary\">Tokenek importálása alkalmazásból (root hozzáférés szükséges)</string>\n    <string name=\"pref_export_title\">Exportálás</string>\n    <string name=\"pref_export_summary\">A széf exportálása</string>\n    <string name=\"pref_password_reminder_title\">Jelszóemlékeztető</string>\n    <string name=\"pref_google_auth_export_title\">Exportálás a Google Authenticatorba</string>\n    <string name=\"pref_google_auth_export_descriptor\">Google Authenticatorral kompatibilis QR-kódot tartalmazó exportálást állít elő</string>\n    <string name=\"pref_google_auth_export_no_data\">Nincs exportálható adat</string>\n    <plurals name=\"pref_google_auth_export_incompatible_entries\">\n        <item quantity=\"one\">%d nem kompatibilis bejegyzés átugorva</item>\n        <item quantity=\"other\">%d nem kompatibilis bejegyzés átugorva</item>\n    </plurals>\n    <string name=\"pref_password_reminder_summary\">Emlékeztető megjelenítése %s időközönként, hogy adja meg újra jelszót, így nem felejti el.</string>\n    <string name=\"pref_password_reminder_summary_disabled\">Kikapcsolva</string>\n    <string name=\"pref_secure_screen_title\">Képernyőbiztonság</string>\n    <string name=\"pref_secure_screen_summary\">A képernyőképek és a képernyő rögzítésére irányuló egyéb kísérletek blokkolása</string>\n    <string name=\"pref_tap_to_reveal_title\">Koppintás a felfedéshez</string>\n    <string name=\"pref_tap_to_reveal_summary\">A tokenek alapból rejtve lesznek. Koppintson a tokenekre, hogy megjelenjen a kód.</string>\n    <string name=\"pref_tap_to_reveal_time_title\">Koppintással történő felfedés időtúllépése</string>\n    <string name=\"pref_auto_lock_title\">Automatikus zárolás</string>\n    <string name=\"pref_auto_lock_summary\">Ennyi idő után: %s</string>\n    <string name=\"pref_auto_lock_summary_disabled\">Kikapcsolva</string>\n    <string name=\"pref_auto_lock_prompt\">Az Aegis automatikus lezárása, ha</string>\n    <string name=\"pref_auto_lock_type_back_button\">A vissza gomb megnyomásakor</string>\n    <string name=\"pref_auto_lock_type_minimize\">Az alkalmazás minimalizálásra kerül</string>\n    <string name=\"pref_auto_lock_type_device_lock\">Az eszköz zárolásra kerül</string>\n    <string name=\"pref_backup_password_category\">Biztonsági mentés és exportálás</string>\n    <string name=\"pref_backup_password_title\">Külön jelszó a biztonsági mentéshez és exportáláshoz</string>\n    <string name=\"pref_backup_password_summary\">Ha engedélyezve van, akkor az alkalmazás feloldásához használt jelszó nem használható a biztonsági mentések és exportálások visszafejtéséhez.</string>\n    <string name=\"pref_backup_password_change_title\">Biztonsági mentés és export jelszavának módosítása</string>\n    <string name=\"pref_backup_password_change_summary\">Új jelszó megadása, amely a széf titkosításához lesz használva a biztonsági mentés és exportálás során.</string>\n    <string name=\"pref_encryption_title\">Titkosítás</string>\n    <string name=\"pref_encryption_summary\">A széf titkosítása, és jelszavas vagy biometrikus feloldás beállítása</string>\n    <string name=\"pref_biometrics_title\">Biometrikus feloldás</string>\n    <string name=\"pref_biometrics_summary\">Biometrikus hitelesítés engedélyezése a széf feloldásához</string>\n    <string name=\"pref_search_behavior_summary\">Keresés ezek között: %s</string>\n    <string name=\"pref_search_behavior_prompt\">Keresés a következő mezőkben</string>\n    <string name=\"pref_search_behavior_type_name\">Név</string>\n    <string name=\"pref_search_behavior_type_issuer\">Kibocsátó</string>\n    <string name=\"pref_search_behavior_type_note\">Megjegyzés</string>\n    <string name=\"pref_search_behavior_type_groups\">Csoportok</string>\n    <string name=\"pref_set_password_title\">Jelszó módosítása</string>\n    <string name=\"pref_set_password_summary\">Új jelszó beállítása, mellyel feloldhatja a széfet</string>\n    <string name=\"no_events_title\">Nincs jelentett esemény</string>\n    <string name=\"no_events_description\">Nem lettek fontos események jelentve az alkalmazásban</string>\n    <string name=\"event_title_vault_unlocked\">Széf feloldva</string>\n    <string name=\"event_description_vault_unlocked\">A széf sikeresen fel lett oldva</string>\n    <string name=\"event_title_backup_created\">Biztonsági másolat létrehozva</string>\n    <string name=\"event_description_backup_created\">A széf biztonsági mentése sikeresen létrejött</string>\n    <string name=\"event_title_android_backup_created\">Androidos biztonsági mentés</string>\n    <string name=\"event_description_android_backup_created\">Az Android sikeresen létrehozta a széf biztonsági mentését</string>\n    <string name=\"event_title_vault_exported\">Széf exportálva</string>\n    <string name=\"event_description_vault_exported\">A széf másolata exportálva lett</string>\n    <string name=\"event_title_entry_shared\">Bejegyzés megosztva</string>\n    <string name=\"event_description_entry_shared\">Egy bejegyzés meg lett osztva</string>\n    <string name=\"event_title_vault_unlock_failed_password\">A széf feloldása nem sikerült (jelszó)</string>\n    <string name=\"event_description_vault_unlock_failed_password\">A széf jelszóval való feloldása nem sikerült</string>\n    <string name=\"event_title_vault_unlock_failed_biometrics\">A széf feloldása nem sikerült (biometrikus adatok)</string>\n    <string name=\"event_description_vault_unlock_failed_biometrics\">A széf biometikus adatokkal való feloldása nem sikerült</string>\n    <string name=\"event_unknown\">Ismeretlen eseménytípus</string>\n    <string name=\"audit_log_entry_deleted\">(törölve)</string>\n    <string name=\"today_at_time\">Ma %1$s-kor</string>\n    <string name=\"day_of_week_at_time\">%1$s %2$s-kor</string>\n    <string name=\"export_encrypted\">A széf titkosítása</string>\n    <string name=\"export_help\">Ez a művelet exportálja a széfet az Aegis belső tárolójából. Válassza ki az exportálás formátumát:</string>\n    <string name=\"export_warning_unencrypted\">Arra készül, hogy egy titkosítatlan Aegis széfet exportáljon. <b>Ez nem ajánlott</b>.</string>\n    <string name=\"export_warning_password\">Az exportok titkosítása egy külön jelszóval történik, amely a Biztonsági beállítások allatt adható meg.</string>\n    <string name=\"understand_risk_accept\">Megértettem a kockázatot</string>\n    <string name=\"export_format_aegis\">Aegis (.JSON)</string>\n    <string name=\"export_format_google_auth_uri\">Szöveges fájl (.TXT)</string>\n    <string name=\"export_format_html\">Weboldal (.HTML)</string>\n    <string name=\"export_format_hint\">Export formátuma</string>\n    <string name=\"export_all_groups\">Összes csoport exportálása</string>\n    <string name=\"export_choose_groups\">Exportálandó csoportok kiválasztása</string>\n    <plurals name=\"export_groups_selected_count\">\n        <item quantity=\"one\">%d csoport kiválasztva</item>\n        <item quantity=\"other\">%d csoport kiválasztva</item>\n    </plurals>\n    <string name=\"export_no_groups_selected\">Nincs exportálandó csoport kiválasztva</string>\n    <string name=\"export_html_title\" comment=\"The title of an HTML export document\">Aegis hitelesítő exportja</string>\n    <string name=\"choose_authentication_method\">Biztonság</string>\n    <string name=\"authentication_method_explanation\">Az Aegis egy biztonságközpontú kétfaktoros hitelesítő alkalmazás. A tokenek egy széfben vannak tárolva, mely akár tetszőleges jelszóval titkosítható. Ha egy támadó megszerzi a titkosított széffájlt, a jelszó ismerete nélkül akkor sem fog tudni hozzáférni a tartalmához.\\n\\nElőre ezt a beállítást választottuk, mert úgy véljük ez lenne a legmegfelelőbb az eszköze számára.</string>\n    <string name=\"authentication_method_none\">Nincs</string>\n    <string name=\"authentication_method_none_description\">Nem szükséges jelszó a széf zárolásához, és nem lesz titkosítva.<b>Ez a beállítás nem ajánlott</b>.</string>\n    <string name=\"authentication_method_password\">Jelszó</string>\n    <string name=\"authentication_method_password_description\">Jelszó szükséges a széf feloldásához.</string>\n    <string name=\"authentication_method_password_explanation\">Figyelmeztetés: Ha elfelejti a jelszavát, akkor végleg elveszti a hozzáférését a tokenekhez. Jelszó nélkül sehogy sem fogja tudni visszaállítani azokat.</string>\n    <string name=\"authentication_method_biometrics\">Biometrikus</string>\n    <string name=\"authentication_method_biometrics_description\">A jelszó mellett a biometrikus adatai is regisztrálva lesznek az eszközön, mint például az ujjlenyomata vagy az arca, melyet a széf feloldásához használhat.</string>\n    <string name=\"authentication\">A széf feloldása</string>\n    <string name=\"authentication_multiline\" comment=\"The newline in the middle is used for aesthetic purposes\">A széf \\nfeloldása</string>\n    <string name=\"auth_use_biometrics\">Koppintson ide, hogy a <font fgcolor=\"#FF0D86C1\">biometrikus adatokat</font> használja</string>\n    <string name=\"set_password\">Adja meg a jelszavát</string>\n    <string name=\"set_group\">Adja meg a csoport nevét</string>\n    <string name=\"set_number\">Adjon meg egy számot</string>\n    <string name=\"set_password_confirm\">Erősítse meg a jelszót</string>\n    <string name=\"invalid_password\">A jelszó helytelen</string>\n    <string name=\"invalidated_biometrics\">Változás történt az eszköze biztonsági beállításaiban. Ugorjon az „Aegis -&gt; Beállítások -&gt; Biztonság -&gt; Biometrikus feloldás” részhez, hogy ki-, majd újból bekapcsolja a biometrikus feloldást.</string>\n    <string name=\"password_reminder\">Adja meg a jelszavát. Időnként megkérjük erre, hogy biztosan ne felejtse el.</string>\n    <string name=\"password_reminder_dialog_title\">Biometrikus feloldás alapértelmezetten</string>\n    <string name=\"password_reminder_dialog_message\">Időnként bekérjük a jelszavát, hogy ne felejtse el és ne zárja ki magát. Miután sikeres az ellenőrzés az Aegis visszaáll az alapértelmezett biometrikus feloldásra a következő ellenőrzésig.</string>\n    <string name=\"password_reminder_freq_never\">Soha</string>\n    <string name=\"password_reminder_freq_weekly\">Hetente</string>\n    <string name=\"password_reminder_freq_biweekly\">Kéthetente</string>\n    <string name=\"password_reminder_freq_monthly\">Havonta</string>\n    <string name=\"password_reminder_freq_quarterly\">Negyedévente</string>\n    <string name=\"enter_password_2fas_message\">Úgy tűnik, hogy ez a 2FAS mentés titkosított. Adja meg a jelszót alul.</string>\n    <string name=\"enter_password_authy_message\">Úgy tűnik, hogy az Authy tokenek titkosítottak. Zárja be az Aegist, nyissa meg az Authyt, és oldja fel a tokeneket a jelszavával. Vagy az Aegis is megpróbálhatja visszafejteni az Authy tokeneket, ha megadja a jelszót alább.</string>\n    <string name=\"enter_password_aegis_title\">Adja meg az importálási jelszót</string>\n    <string name=\"period_hint\">Időtartam (másodpercben)</string>\n    <string name=\"algorithm_hint\">Hash függvény</string>\n    <string name=\"type\">Típus</string>\n    <string name=\"share\">Megosztás</string>\n    <string name=\"yes\">Igen</string>\n    <string name=\"no\">Nem</string>\n    <string name=\"undo\">Visszavonás</string>\n    <string name=\"unlock\">Feloldás</string>\n    <string name=\"advanced\">Speciális</string>\n    <string name=\"counter\">Számláló</string>\n    <string name=\"digits\">Számjegyek</string>\n    <string name=\"secret\">Titok</string>\n    <string name=\"scan\">QR-kód beolvasása</string>\n    <string name=\"scan_image\">Kép beolvasása</string>\n    <string name=\"enter_manually\">Kézi megadás</string>\n    <string name=\"set_up_biometric\">Biometrikus adatokkal való feloldás beállítása</string>\n    <string name=\"copy\">Másolás</string>\n    <string name=\"edit\">Szerkesztés</string>\n    <string name=\"select_all\">Összes kijelölése</string>\n    <string name=\"assign_icons\">Ikonok hozzárendelése</string>\n    <string name=\"assign_groups\">Csoporthoz rendelés</string>\n    <string name=\"assign_groups_dialog_summary\">Válassza ki, hogy a kiválasztott elemek mely csoporthoz legyenek rendelve.</string>\n    <string name=\"assign_groups_dialog_dropdown\">Csoport kiválasztása</string>\n    <string name=\"favorite\" comment=\"Verb\">Kedvencnek jelölés</string>\n    <string name=\"unfavorite\" comment=\"Verb\">Eltávolítás a kedvencek közül</string>\n    <string name=\"error_all_caps\">HIBA</string>\n    <string name=\"password\">Jelszó</string>\n    <string name=\"confirm_password\">Jelszó megerősítése</string>\n    <string name=\"show_password\">Jelszó megjelenítése</string>\n    <string name=\"new_entry\">Új bejegyzés</string>\n    <string name=\"add_new_entry\">Új bejegyzés hozzáadása</string>\n    <string name=\"unlock_vault_error\">A széf nem oldható fel</string>\n    <string name=\"unlock_vault_error_description\">Helytelen jelszó. Győződjön meg róla, hogy nem írta el a jelszavát.</string>\n    <string name=\"password_equality_error\">A jelszavaknak egyezniük kell, és nem lehetnek üresek</string>\n    <string name=\"snackbar_authentication_method\">Válasszon hitelesítési módot</string>\n    <string name=\"encrypting_vault\">A széf titkosítása</string>\n    <string name=\"exporting_vault\">A széf exportálása</string>\n    <string name=\"optimizing_icon\">Ikon optimalizálása</string>\n    <string name=\"optimizing_icon_multiple\">Ikonok optimalizálása %1$d/%2$d</string>\n    <string name=\"reading_file\">Fájl olvasása</string>\n    <string name=\"requesting_root_access\">Root hozzáférés igénylése</string>\n    <string name=\"analyzing_qr\">QR-kód elemzése</string>\n    <string name=\"analyzing_qr_multiple\">%1$d./%2$d QR-kód elemzése (%3$s)</string>\n    <plurals name=\"added_new_entries\">\n        <item quantity=\"one\">%d új bejegyzés hozzáadva a széfhez</item>\n        <item quantity=\"other\">%d új bejegyzés hozzáadva a széfhez</item>\n    </plurals>\n    <string name=\"importing_icon_pack\">Ikoncsomag importálása</string>\n    <string name=\"delete_entry\">A bejegyzés törlése</string>\n    <string name=\"delete_entry_description\">Biztos, hogy törli ezt a bejegyzést?</string>\n    <string name=\"delete_entry_explanation\">Ez a művelet nem kapcsolja ki a 2FA hitelesítést a következő fióknál: \\n<b>%s</b>\\n\\nHogy ne veszítse el a hozzáférését, győződjön meg arról, hogy kikapcsolta a 2FA-t, vagy továbbra is tud más módon kódokat előállítani.</string>\n    <string name=\"delete_entries\">Bejegyzések törlése</string>\n    <plurals name=\"delete_entries_description\">\n        <item quantity=\"one\">Biztos, hogy töröl %d bejegyzést?</item>\n        <item quantity=\"other\">Biztos, hogy töröl %d bejegyzést?</item>\n    </plurals>\n    <string name=\"discard_changes\">Elveti a változásokat?</string>\n    <string name=\"discard_changes_description\">A változásai nem lettek mentve</string>\n    <string name=\"saving_profile_error\">Hiba a profil mentésekor</string>\n    <string name=\"saving_assign_icons_error\">Hiba az ikonok hozzárendelésekor</string>\n    <string name=\"welcome\">Üdvözöljük</string>\n    <string name=\"app_description\">Az Aegis egy szabad, biztonságos és nyílt forráskódú kétfaktoros hitelesítő alkalmazás</string>\n    <string name=\"setup_completed\">Beállítás kész</string>\n    <string name=\"setup_completed_description\">Az Aegis beállításra került, és használatra kész.</string>\n    <string name=\"vault_not_found\">Széf nem található, beállítás indítása…</string>\n    <string name=\"copied\">Másolva</string>\n    <string name=\"errors_copied\">Hibák a vágólapra másolva</string>\n    <string name=\"version_copied\">Verzió a vágólapra másolva</string>\n    <string name=\"error_required_field\">Ez a mező kötelező</string>\n    <string name=\"error_occurred\">Hiba történt</string>\n    <string name=\"decryption_error\">Hiba történt a széf feloldásakor</string>\n    <string name=\"decryption_corrupt_error\">Hiba történt a széf feloldásakor. A széf fájlja megsérülhetett.</string>\n    <string name=\"saving_error\">Hiba történt a széf mentésekor</string>\n    <string name=\"vault_init_error\">Hiba történt a széf előkészítésekor</string>\n    <string name=\"vault_load_error\">Hiba történt a széf háttértárról való betöltésekor</string>\n    <string name=\"biometric_decrypt_error\">Hiba történt a széf biometrikus hitelesítéssel való feloldásakor. Ez legtöbbször azt jelenit, hogy az eszköz biztonsági beállításai megváltoztak. Oldja fel az alkalmazást jelszóval, majd állítsa be újra a biometrikus hitelesítést.</string>\n    <string name=\"biometric_init_error\">Hiba történt a biometrikus hitelesítés előkészítésekor. Ez legtöbbször azt jelenit, hogy az eszköz biztonsági beállításai megváltoztak. Oldja fel az alkalmazást jelszóval, majd állítsa be újra a biometrikus hitelesítést.</string>\n    <string name=\"disable_encryption\">Titkosítás kikapcsolása</string>\n    <string name=\"disable_encryption_description\">Biztos, hogy kikapcsolja a titkosítást? Ez azt fogja eredményezni, hogy a széf egyszerű szövegként lesz mentve. <b>Az automatikus biztonsági mentések is kikapcsolásra kerülnek</b>.</string>\n    <string name=\"enable_encryption_error\">Hiba történt a titkosítás bekapcsolásakor</string>\n    <string name=\"disable_encryption_error\">Hiba történt a titkosítás kikapcsolásakor</string>\n    <string name=\"backup_successful\">A biztonsági mentés ütemezésre került</string>\n    <string name=\"backup_error\">Hiba történt a biztonsági mentés létrehozásakor</string>\n    <string name=\"backup_status_success\">A legutóbbi mentés sikeres: %s</string>\n    <string name=\"backup_status_failed\">A legutóbbi mentés sikertelen: %s</string>\n    <string name=\"backup_status_none\">Nem készült még biztonsági mentés</string>\n    <string name=\"backup_warning_password\">A biztonsági mentések titkosítása egy külön jelszóval történik, amely a Biztonsági beállítások alatt adható meg</string>\n    <string name=\"documentsui_error\">A DocumentsUI hiányzik az eszközéről. Ez egy elengedhetetlen rendszerösszetevő a dokumentumok kiválasztásához és létrehozásához. Ha „szemétmentesítette” eszközét, akkor lehet, hogy véletlenül letörölhette, így újra kell telepítenie.</string>\n    <string name=\"icon_pack_import_error\">Hiba történt az ikoncsomag importálása során</string>\n    <string name=\"icon_pack_import_exists_error\">Az importálandó ikoncsomag már létezik. Felülírja?</string>\n    <string name=\"icon_pack_delete_error\">Hiba történt az ikoncsomag törlése során</string>\n    <plurals name=\"icon_pack_info\">\n        <item quantity=\"one\">%d ikon</item>\n        <item quantity=\"other\">%d ikon</item>\n    </plurals>\n    <string name=\"icon_custom\">Egyéni</string>\n    <string name=\"permission_denied\">Engedély megtagadva</string>\n    <string name=\"andotp_new_format\">Új formátum (v0.6.3 vagy újabb) </string>\n    <string name=\"andotp_old_format\">Régi formátum (v0.6.2 vagy régebbi) </string>\n    <string name=\"choose_andotp_importer\">Milyen formátumú az andOTP biztonságimentés-fájl?</string>\n    <string name=\"choose_totpauth_importer\">Ez egy jelszóval titkosított TOTP hitelesítő biztonsági mentése?</string>\n    <string name=\"choose_application\">Válassza ki az alkalmazást, melyből importálna</string>\n    <string name=\"choose_theme\">Válassza ki a kívánt témát</string>\n    <string name=\"choose_account_name_position\">Válassza ki a kívánt fióknév-pozíciót</string>\n    <string name=\"choose_view_mode\">Válassza ki a kívánt nézetmódot</string>\n    <string name=\"choose_copy_behavior\">Válassza ki a kívánt másolási viselkedést</string>\n    <string name=\"parsing_file_error\">Hiba történt a fájl feldolgozásakor</string>\n    <string name=\"file_not_found\">Hiba: A fájl nem található</string>\n    <string name=\"reading_file_error\">Hiba történt a fájl olvasásakor</string>\n    <string name=\"app_lookup_error\">Hiba: Az alkalmazás nincs telepítve</string>\n    <string name=\"app_version_error\">A telepített %s verziója nem támogatott. Az újabb verziók elkezdték titkosítani a belső tároló egyes fájljait, így az Aegis nem tud hozzáférni az importáláshoz szükséges információkhoz. Az importálás megkísérlése valószínűleg hibát fog eredményezni. Szeretné mégis folytatni?</string>\n    <string name=\"root_error\">Hiba: nem szerezhető root jogosultság</string>\n    <plurals name=\"imported_entries_count\">\n        <item quantity=\"one\">%d bejegyzés importálva</item>\n        <item quantity=\"other\">%d bejegyzés importálva</item>\n    </plurals>\n    <plurals name=\"entries_shown\">\n        <item quantity=\"one\">%d bejegyzés megjelenítése</item>\n        <item quantity=\"other\">%d bejegyzés megjelenítése</item>\n    </plurals>\n    <string name=\"intro_import_error_title\">Hiba történt a széf importálása közben</string>\n    <string name=\"import_error_title\">Egy vagy több hiba történt az importálás során</string>\n    <string name=\"exporting_vault_error\">Hiba történt a széf exportálásakor</string>\n    <string name=\"exported_vault\">A széf exportálva</string>\n    <string name=\"encryption_set_password_error\">Hiba történt a jelszó beállításakor.</string>\n    <string name=\"encryption_enable_biometrics_error\">Hiba történt a biometrikus feloldás engedélyezésekor. Egyes eszközök rossz minőségű biometrikus hitelesítési megvalósítással rendelkeznek, és valószínűleg az Öné is ilyen. Fontolja meg, hogy jelszavas beállításra váltson.</string>\n    <string name=\"no_cameras_available\">Nem érhető el kamera</string>\n    <string name=\"read_qr_error\">Hiba történt a QR-kód beolvasásakor</string>\n    <string name=\"read_qr_error_phonefactor\">Az Aegis nem kompatiblis a Microsoft zárt 2FA algoritmusával. Győződjön meg arról, hogy az „Alkalmazás telepítése értesítések nélkül” lehetőséget választja, amikor beállítja az Office 365 2FA-t.</string>\n    <string name=\"partial_google_auth_import\">Hiányos Google Authenticator export észlelve</string>\n    <string name=\"partial_google_auth_import_warning\">Néhány QR-kód hiányzik az importból. Ezek a kódok nem találhatók:\\n\\n<b>%s</b>\\n\\nFolytathatja a részleges export importálását, de javasoljuk, hogy próbálja újra az összes QR-kóddal, hogy ne kockáztassa a hozzáférése elvesztését egyetlen tokennél sem.</string>\n    <string name=\"missing_qr_code_descriptor\">• %d. QR-kód</string>\n    <plurals name=\"import_partial_export_anyway\">\n        <item quantity=\"one\">%d token importálása mindenképp</item>\n        <item quantity=\"other\">%d token importálása mindenképp</item>\n    </plurals>\n    <string name=\"import_google_auth_failure\">A Google Authenticator export importálása sikertelen</string>\n    <string name=\"unrelated_google_auth_batches_error\">Az export nem kapcsolódó köteg információit tartalmazza. Egyszerre csak 1 köteget próbáljon meg importálni.</string>\n    <string name=\"no_tokens_can_be_imported\">Ennek eredményeképp egyetlen token sem importálható</string>\n    <string name=\"unlocking_vault\">A széf feloldása</string>\n    <string name=\"rename_group\">Csoport átnevezése</string>\n    <string name=\"no_group_selection\">Ha egy bejegyzés egy csoportnak sem tagja, akkor a „Nincs csoport” alatt található.</string>\n    <string name=\"remove_group\">Csoport eltávolítása</string>\n    <string name=\"remove_group_description\">Biztos, hogy eltávolítja ezt a csoportot? A csoport bejegyzései automatikusan „Csoport nélküli” elemek lesznek.</string>\n    <string name=\"remove_unused_groups\">Nem használt csoportok törlése</string>\n    <string name=\"remove_unused_groups_description\">Biztos, hogy törli az összes olyan csoportot, amely nincs bejegyzéshez rendelve?</string>\n    <string name=\"remove_icon_pack\">Ikoncsomag törlése</string>\n    <string name=\"remove_icon_pack_description\">Biztos, hogy törli az ikoncsomagot? Az ikoncsomag ikonjait használó bejegyzésekre ez nem lesz hatással.</string>\n    <string name=\"details\">Részletek</string>\n    <string name=\"show_error_details\">Hiba részleteinek megjelenítése</string>\n    <string name=\"lock\">Zárolás</string>\n    <string name=\"name\">Név</string>\n    <string name=\"no_group\">Nincs csoport</string>\n    <string name=\"sort\" comment=\"Title of the Sort button in the top action bar of the main view\">Rendezés</string>\n    <string name=\"sort_alphabetically\">Kibocsátó (A–Z)</string>\n    <string name=\"sort_alphabetically_reverse\">Kibocsátó (Z–A)</string>\n    <string name=\"sort_alphabetically_name\">Fiók (A–Z)</string>\n    <string name=\"sort_alphabetically_name_reverse\">Fiók (Z–A)</string>\n    <string name=\"sort_usage_count\">Használati számláló</string>\n    <string name=\"sort_last_used\">Legutóbb használva</string>\n    <string name=\"sort_custom\">Egyéni</string>\n    <string name=\"last_used\">Legutóbb használva</string>\n    <string name=\"last_used_never\">soha</string>\n    <string name=\"new_group\">Új csoport…</string>\n    <string name=\"group\">Csoport</string>\n    <string name=\"group_name_hint\">Csoportnév</string>\n    <string name=\"preference_manage_groups\">Csoportok szerkesztése</string>\n    <string name=\"preference_manage_groups_summary\">Itt kezelheti és törölheti a csoportokat</string>\n    <string name=\"preference_reset_usage_count\">Használati számláló visszaállítása</string>\n    <string name=\"preference_reset_usage_count_summary\">Minden bejegyzés használati számlálójának visszaállítása</string>\n    <string name=\"preference_reset_usage_count_dialog\">Biztos, hogy visszaállítja a széf összes bejegyzésének használati számlálóját nullára?</string>\n    <string name=\"note\" comment=\"Users can add a note to an entry\">Megjegyzés</string>\n    <string name=\"clear\">Törlés</string>\n    <string name=\"dialog_duplicate_entry_title\" comment=\"'Duplicate' is a noun here\">Ismétlődő bejegyzés</string>\n    <string name=\"dialog_duplicate_entry_message\">Ennek a bejegyzésnek ugyanaz a neve és kibocsátója, mint egy vagy több meglévő bejegyzésnek. Hogyan folytatja?</string>\n    <string name=\"dialog_duplicate_entry_overwrite_title\">Meglévő bejegyzések felülírása</string>\n    <string name=\"dialog_duplicate_entry_overwrite_subtitle\">A meglévő bejegyzések lecserélése egy újjal. Ez a művelet nem vonható vissza.</string>\n    <string name=\"dialog_duplicate_entry_suffix_title\">Utótag hozzáadása</string>\n    <string name=\"dialog_duplicate_entry_suffix_subtitle\">Utótag hozzáadása ehhez a bejegyzéshez. Az új név ez lesz: %s</string>\n    <string name=\"dialog_duplicate_entry_cancel_title\">Mentés megszakítása</string>\n    <string name=\"dialog_duplicate_entry_cancel_subtitle\">Lehetővé teszi a bejegyzés szerkesztését mielőtt újból megpróbálná menteni</string>\n    <plurals name=\"dialog_duplicate_entry_overwrite_dialog_message\">\n        <item quantity=\"one\">Biztos, hogy töröl %d bejegyzést a következő névvel:\\n\\n%s – %s</item>\n        <item quantity=\"other\">Biztos, hogy töröl %d bejegyzést a következő névvel:\\n\\n%s – %s</item>\n    </plurals>\n    <string name=\"dialog_duplicate_entry_overwrite_dialog_title\">Törlés megerősítése</string>\n    <string name=\"pref_haptic_feedback_summary\">Az eszköz rezgetése, amikor a kódok frissülnek</string>\n    <string name=\"pref_haptic_feedback_title\">Haptikus visszajelzés</string>\n    <string name=\"pref_highlight_entry_title\">Tokenek kiemelése koppintáskor</string>\n    <string name=\"pref_highlight_entry_summary\">A tokenek könnyebb megkülönböztethetősége érdekében ideiglenesen ki lesznek emelve koppintáskor</string>\n    <string name=\"pref_groups_multiselect_title\">Csoportok többszörös kiválasztása</string>\n    <string name=\"pref_groups_multiselect_summary\">Több csoport egyidejű kiválasztásának engedélyezése</string>\n    <string name=\"pref_minimize_on_copy_title\">Minimalizálás másoláskor</string>\n    <string name=\"pref_minimize_on_copy_summary\">Az alkalmazás minimalizálása a token másolása után</string>\n    <string name=\"pref_copy_behavior_title\">Tokenek másolása a vágólapra</string>\n    <string name=\"pref_search_behavior_title\">Keresés viselkedése</string>\n    <string name=\"pref_pause_entry_title\">Tokenek befagyasztása koppintáskor</string>\n    <string name=\"pref_pause_entry_summary\">A tokenek automatikus frissítésének szüneteltetése koppintás után. A tokenek addig nem frissülnek, míg fókuszban vannak. Ehhez szükséges a „Tokenek kiemelése koppintáskor” vagy a „Koppintás a felfedéshez\\\" beállítás.</string>\n    <string name=\"pin_keyboard_description\">Írja be jelszavát a PIN-billentyűzet bekapcsolásához. Ez csak akkor működik, ha jelszava csak számokból áll.</string>\n    <string name=\"pin_keyboard_error\">Hiba történt a PIN-billentyűzet bekapcsolásakor</string>\n    <string name=\"pin_keyboard_error_description\">Nem kapcsolható be a PIN-billentyűzet. A jelszava csak számokat tartalmazhat.</string>\n    <string name=\"pin_keyboard_disabled\">A jelszó megváltozott. A PIN-billentyűzet ettől kezdve nem fog megjelenni.</string>\n    <string name=\"selected\">Kiválasztva</string>\n    <string name=\"dark_theme_title\">Sötét téma</string>\n    <string name=\"light_theme_title\">Világos téma</string>\n    <string name=\"amoled_theme_title\">AMOLED téma</string>\n    <string name=\"system_theme_title\">Akkumulátorkímélő által beállított</string>\n    <string name=\"system_amoled_theme_title\">Akkumulátorkímélő által beállított (AMOLED)</string>\n    <string name=\"normal_viewmode_title\">Szokásos</string>\n    <string name=\"compact_mode_title\">Kompakt</string>\n    <string name=\"small_mode_title\">Apró</string>\n    <string name=\"tiles_mode_title\">Csempék</string>\n    <string name=\"unknown_issuer\">Ismeretlen kibocsátó</string>\n    <string name=\"unknown_account_name\">Ismeretlen fióknév</string>\n    <plurals name=\"import_error_dialog\">\n        <item quantity=\"one\">Az Aegis nem tudott importálni %d tokent. Ez a token ki lesz hagyva. A hibával kapcsolatos további információkért nyomja meg a „részletek” feliratot.</item>\n        <item quantity=\"other\">Az Aegis nem tudott importálni %d tokent. Ezek a tokenek ki lesznek hagyva. A hibával kapcsolatos további információkért nyomja meg a „részletek” feliratot.</item>\n    </plurals>\n    <string name=\"unable_to_process_deeplink\">Az alkalmazáshivatkozás nem dolgozható fel</string>\n    <string name=\"unable_to_read_qrcode_file\">A QR-kód nem olvasható le és dolgozható fel a fájlból: %s.</string>\n    <string name=\"unable_to_process_shared_text\">A megosztott szöveg nem dolgozható fel OTP-ként</string>\n    <string name=\"unable_to_read_qrcode_files\">Egyes QR-kódok nem olvashatók le és dolgozhatók fel. Csak %1$d/%2$d bejegyzés lesz importálva.</string>\n    <string name=\"unable_to_generate_qrcode\">A QR-kód nem állítható elő</string>\n    <string name=\"select_picture\">Kép kiválasztása</string>\n    <string name=\"select_icon\">Ikon kiválasztása</string>\n    <string name=\"tile_open_vault\" comment=\"label for a quick settings tile that opens the app when tapped\">Széf megnyitása</string>\n    <string name=\"tile_open_scanner\" comment=\"label for a quick settings tile that opens the QR code scanner when tapped\">Szkenner megnyitása</string>\n    <string name=\"toggle_checkboxes\">Jelölőmezők be/ki</string>\n    <string name=\"search\">Keresés</string>\n    <string name=\"channel_name_lock_status\">Állapot zárolása</string>\n    <string name=\"channel_description_lock_status\">Az Aegis állandó értesítést tud megjeleníteni, ha a széf zárolva van</string>\n    <string name=\"vault_unlocked_state\">A széf fel van oldva. Koppintson a zároláshoz.</string>\n    <string name=\"version\">Verzió</string>\n    <string name=\"changelog\">Változáslista</string>\n    <string name=\"whats_new\">Újdonságok</string>\n    <string name=\"github_description\">Forráskód, problémák és információk</string>\n    <string name=\"license\">Licenc</string>\n    <string name=\"license_description\">Az Aegis Authenticatorra a GPLv3 licenc érvényes</string>\n    <string name=\"third_party_licenses\">Harmadik felek licencei</string>\n    <string name=\"third_party_licenses_description\">Az Aegis által használt, harmadik féltől származó programkönyvtárok licencei</string>\n    <string name=\"country_netherlands\">Hollandia</string>\n    <string name=\"email_us\">Írjon egy e-mailt</string>\n    <string name=\"visit_website\">Keresse fel weboldalunkat</string>\n    <string name=\"about_support\">Támogatás</string>\n    <string name=\"support_rate\">Értékelés</string>\n    <string name=\"support_rate_description\">Támogasson minket azzal, hogy értékelést ír a Google Play Áruházban</string>\n    <string name=\"webview_error\">Ez az eszköz nem támogatja a webes nézetet, amely szükséges a változásnapló és a licenc megtekintéséhez. Ez egy hiányzó rendszerösszetevő.</string>\n    <string name=\"email\">E-mail</string>\n    <string name=\"time_sync_warning_title\">Automatikus időszinkronizálás</string>\n    <string name=\"time_sync_warning_message\">Az Aegis a rendszeridőre támaszkodik a helyes kódok előállításánál. Néhány másodperces eltérés is hibás kódok előállítását eredményezheti. Úgy tűnik az eszközön nincs bekapcsolva az automatikus időszinkronizálás. Be akarja most ezt kapcsolni?</string>\n    <string name=\"time_sync_warning_disable\">Ne figyelmeztessen. Tudom mit csinálok.</string>\n    <string name=\"google_qr_export_unrelated\">Nem kapcsolódó QR-kód található. Próbálja meg újraindítani a QR-kód-olvasót.</string>\n    <plurals name=\"google_qr_export_scanned\">\n        <item quantity=\"one\">%1$d/%2$d QR-kód beolvasva</item>\n        <item quantity=\"other\">%1$d/%2$d QR-kód beolvasva</item>\n    </plurals>\n    <string name=\"google_qr_export_unexpected\">A várt #%1$d QR-kód helyett ez lett beolvasva: #%2$d</string>\n    <string name=\"backup_error_bar_message\"><b>Egy széf mentése nemrég sikertelen volt</b></string>\n    <string name=\"backup_error_dialog_details\" comment=\"The first parameter is the type of backup (e.g. built-in or Android backup). The second parameter is an elapsed time in the style of 'x seconds/minutes/days ago'.\">        Egy közelmúltbeli, az %1$s használó széfmentés sikertelen volt, mert hiba történt. A biztonsági mentés ekkor volt megpróbálva: %2$s. Ellenőrizze a biztonsági mentési beállításokat, hogy biztosítsa a mentések sikeres végrehajtását.\n    </string>\n    <string name=\"backup_permission_error_dialog_details\" comment=\"The first parameter is the type of backup (e.g. built-in or Android backup). The second parameter is an elapsed time in the style of 'x seconds/minutes/days ago'.\">        Egy közelmúltbeli, az %1$s használó széfmentés sikertelen volt, mert az Aegisnek nem volt engedélye, hogy a mentési célra írjon. A biztonsági mentés ekkor volt megpróbálva: %2$s. Ez a hiba akkor történhet, ha áthelyezte/átnevezte a biztonsági mentés célját, vagy ha nemrég állította vissza mentésből az Aegist. Állítsa be újra a biztonsági mentés célját.\n    </string>\n    <string name=\"backup_system_builtin\">Aegis beépített biztonsági mentését</string>\n    <string name=\"backup_system_android\">Android felhős mentési rendszerét</string>\n    <string name=\"backup_reminder_bar_message_with_latest\" comment=\"The parameter is an elapsed time in the style of 'x seconds/minutes/days ago'\">        A legfrissebb biztonsági mentés elavult (%s)\n    </string>\n    <string name=\"backup_reminder_bar_message\">        A változásokról nincs biztonsági mentés\n    </string>\n    <string name=\"backup_reminder_bar_dialog_title\">A változásokról nincs biztonsági mentés</string>\n    <string name=\"backup_reminder_bar_dialog_summary\">        A széf friss változásairól még nincs biztonsági mentés. Fontos, hogy rendszeresen készítsen biztonsági mentéseket, hogy ne veszítse el a hozzáférést a fiókjaihoz. Fontolja meg, hogy beállítja az automatikus biztonsági mentést a beállítások menüben.\n    </string>\n    <string name=\"backup_reminder_bar_dialog_accept\">Biztonsági mentések beállítása</string>\n    <string name=\"backup_plaintext_export_warning\"><b>A széf nemrég egyszerű szövegként lett exportálva</b></string>\n    <string name=\"pref_show_plaintext_warning_hint\">Ne jelenjen meg többet ez a figyelmeztetés</string>\n    <string name=\"backup_plaintext_warning_explanation\">Ez a figyelmeztetés azért jelenik meg, mert nemrég titkosítatlan formában exportálta a széfet. A tokenek biztonságának megtartása érdekében azt ajánljuk, hogy törölje ezt a fájlt, ha már nincs rá szüksége.</string>\n    <string name=\"switch_camera\">Kamera váltása</string>\n    <string name=\"empty_list\">Nincs megjeleníthető kód. Adjon hozzá bejegyzéseket a jobb alsó sarokban lévő plusz jelre koppintva.</string>\n    <string name=\"empty_list_title\">Nem található bejegyzés</string>\n    <string name=\"empty_group_list\">Nincs megjelenítendő csoport. Adjon hozzá csoportokat egy bejegyzés szerkesztésénél.</string>\n    <string name=\"empty_group_list_title\">Nem található csoport</string>\n    <string name=\"no_icon_packs\">Még nem lett ikoncsomag importálva. Koppintson a plusz ikonra az importáláshoz. Tipp: próbálja ki az <a href=\"https://aegis-icons.github.io\">aegis-icons</a> csomagot.</string>\n    <string name=\"no_icon_packs_title\">Nincs ikoncsomag</string>\n    <string name=\"pick_icon\">Válasszon egy ikont</string>\n    <string name=\"uncategorized\">Kategorizálatlan</string>\n    <string name=\"done\">Kész</string>\n    <plurals name=\"qr_count\">\n        <item quantity=\"one\">%d / %d QR-kód</item>\n        <item quantity=\"other\">%d / %d QR-kód</item>\n    </plurals>\n    <string name=\"next\">Következő</string>\n    <string name=\"previous\">Előző</string>\n    <string name=\"copy_uri\">URI másolása</string>\n    <string name=\"unable_to_copy_uri_to_clipboard\">Nem lehet az URI-t a vágólapra másolni</string>\n    <string name=\"uri_copied_to_clipboard\">Az URI a vágólapra másolva</string>\n    <string name=\"transfer_entry_description\">Olvassa le ezt a QR-kódot azzal hitelesítő alkalmazással, amelybe át akarja vinni</string>\n    <string name=\"transfer_entry_brightness\">Koppintson a QR-kódra a teljes fényerő be- és kikapcsolásához</string>\n    <string name=\"google_auth_compatible_transfer_description\">Olvassa le ezeket a QR-kódokat az Aegisszel vagy a Google Hitelesítővel.\\n\\nA Google Hitelesítő korlátozásai miatt csak az SHA1-et használó és 6 számjegyű kódot előállító TOTP és HOTP tokenek szerepelnek itt.</string>\n    <string name=\"password_strength_very_weak\">Nagyon gyenge</string>\n    <string name=\"password_strength_weak\">Gyenge</string>\n    <string name=\"password_strength_fair\">Tűrhető</string>\n    <string name=\"password_strength_good\">Jó</string>\n    <string name=\"password_strength_strong\">Erős</string>\n    <string name=\"password_strength_unknown\">A jelszó túl hosszú az erősségelemzéshez</string>\n    <string name=\"pref_pin_keyboard_title\">PIN-billentyűzet használata a zárolási képernyőn</string>\n    <string name=\"pref_pin_keyboard_summary\">Kapcsolja be ezt a PIN-billentyűzet bekapcsolásához a zárolási képernyőn. Ez csak a számjegyekből álló jelszavaknál működik.</string>\n    <string name=\"title_activity_preferences\">Beállítások</string>\n    <string name=\"title_activity_manage_groups\">Csoportok kezelése</string>\n    <string name=\"title_activity_transfer\">Bejegyzések másolása</string>\n    <string name=\"title_activity_about\">Névjegy</string>\n    <string name=\"title_activity_edit_entry\">Bejegyzés szerkesztése</string>\n    <string name=\"title_activity_scan_qr\">Egy QR-kód beolvasása</string>\n    <string name=\"title_activity_import_entries\">Bejegyzések importálása</string>\n    <string name=\"title_activity_assign_icons\">Ikonok hozzárendelése</string>\n    <string name=\"title_activity_licenses\">Harmadik felek licencei</string>\n    <string name=\"dialog_wipe_entries_title\">Bejegyzések törlése</string>\n    <string name=\"dialog_wipe_entries_message\">A széfe már tartalmaz bejegyzéseket. Törli ezeket, mielőtt importálja az újakat?\\n\\n<b>Ha így dönt, végleg elveszíti a széfben már meglevő bejegyzéseket.</b></string>\n    <string name=\"dialog_wipe_entries_checkbox\">Széf ürítése</string>\n    <string name=\"import_from_clipboard_title\">Importálás a vágólapról</string>\n    <string name=\"import_from_clipboard_message\">Egy érvényes otpauth URI-t találtunk a vágólapon.\\n\\n<b>Név</b>: %1$s\\n<b>Kiállító</b>:%2$s\\n\\nHasználja ezt a bejegyzés kitöltéséhez?</string>\n    <string name=\"panic_trigger_ignore_toast\">Az Aegis pánikgombja meg lett nyomva, de a beállítás ki van kapcsolva, figyelmen kívül hagyás</string>\n    <string name=\"pref_panic_trigger_title\">A széf törlése a pánikgomb megnyomásakor</string>\n    <string name=\"pref_panic_trigger_summary\">A széf törlése, ha a Ripple megnyomja a pánikgombot</string>\n    <string name=\"import_vault\">Aegis-széf importálása</string>\n    <string name=\"import_vault_hint\">Egy eltéről 2FA-alkalmazásból importálna? Előbb fejezze be a beállításokat, majd ugorjon a beállítások menübe.</string>\n    <plurals name=\"import_duplicate_toast\">\n        <item quantity=\"one\">%d lehetséges ismétlődés kijelölése megszüntetve. Ellenőrizze a bejegyzéseket.</item>\n        <item quantity=\"other\">%d lehetséges ismétlődés kijelölése megszüntetve. Ellenőrizze a bejegyzéseket.</item>\n    </plurals>\n    <string name=\"importer_help_2fas\">Adja meg a 2FAS Authenticator egy biztonsági mentési fájlját.</string>\n    <string name=\"importer_help_aegis\">Adja meg az Aegis egy exportját vagy biztonsági mentési fájlját.</string>\n    <string name=\"importer_help_authenticator_plus\">Adja meg az Authenticator Plus egy exportfájlját, melyet a <b>Beállítások -&gt; Mentés és visszaállítás -&gt; Exportálás szövegként vagy HTML-ként</b> résznél állíthat elő.</string>\n    <string name=\"importer_help_authy\">Adja meg a <b>/data/data/com.authy.authy/shared_prefs/com.authy.storage.tokens.authenticator.xml</b> másolatát, mely az Authy belső háttértáron levő mappájában található.</string>\n    <string name=\"importer_help_andotp\">Adja meg az andOTP egy exportját vagy biztonsági mentési fájlját.</string>\n    <string name=\"importer_help_bitwarden\">Adja meg a Bitwarden egy exportját vagy biztonsági mentési fájlját. A titkosított fájlok nem támogatottak.</string>\n    <string name=\"importer_help_battle_net_authenticator\">Adja meg a <b>/data/data/com.blizzard.messenger/shared_prefs/com.blizzard.messenger.authenticator_preferences.xml</b> másolatát, mely a Battle.net Authenticator belső háttértáron levő mappájában található.</string>\n    <string name=\"importer_help_duo\">Adja meg a <b>/data/data/com.duosecurity.duomobile/files/duokit/accounts.json</b> másolatát, mely a DUO belső háttértáron levő mappájában található.</string>\n    <string name=\"importer_help_ente_auth\">Adjon meg egy Ente Auth exportfájlt. Jelenleg csak a titkosítatlan fájlok támogatottak.</string>\n    <string name=\"importer_help_freeotp\">FreeOTP 2: Egy biztonsági mentési fájlt tárol.\\nFeeOTP 1.x: A következő biztonsági mentési fájl másolatát: <b>/data/data/org.fedorahosted.freeotp/shared_prefs/tokens.xml</b> tárolja, amely a FreeOTP belső tárolási könyvtárában található.</string>\n    <string name=\"importer_help_freeotp_plus\">Adja meg a FreeOTP+ egy exportfájlját.</string>\n    <string name=\"importer_warning_title_freeotp2\">FreeOTP 2 kompatibilitás</string>\n    <string name=\"importer_warning_message_freeotp2\">A FreeOTP 2-ben számos olyan probléma van, amely hibás biztonsági mentéseket eredményezhet. Az Aegis megpróbálja megmenteni a lehető legtöbb bejegyzést, de lehetséges, hogy néhány vagy akár az összes bejegyzés importálása sikertelen lesz.</string>\n    <string name=\"importer_help_google_authenticator\"><b>Csak a Google Hitelesítő v5.10 és korábbi verziói támogatottak</b>.\\n\\nAdja meg a <b>/data/data/com.google.android.apps.authenticator2/databases/databases</b> másolatát, mely a Google Hitelesítő belső háttértáron lévő mappájában található.</string>\n    <string name=\"importer_help_microsoft_authenticator\">Adja meg a <b>/data/data/com.azure.authenticator/databases/PhoneFactor</b> másolatát, mely a Microsoft Authenticator belső háttértáron levő mappájában található.</string>\n    <string name=\"importer_help_plain_text\">Adjon meg egy szöveges fájlt, melynek minden sorában Google Hitelesítő URI található.</string>\n    <string name=\"importer_help_proton_authenticator\">Adjon meg egy Proton Authenticator exportfájlt (.json) –a <b>Beállítások -&gt; Exportálás</b> menüpontból szerezhető be.</string>\n    <string name=\"importer_help_steam\"><b>A Steam v3.0 és újabb verziói nem támogatottak</b>. Adja hozzá a <b>/data/data/com.valvesoftware.android.steam.community/files/Steamguard-*.json</b> mappából, mely a Steam belső háttértáron levő mappája.</string>\n    <string name=\"importer_help_stratum\">Adjon meg egy Stratum exportálási fájlt, amelyet a <b>Beállítások &gt; Biztonsági mentés &gt; Biztonsági mentés titkosított fájlba (ajánlott)</b> menüpontban lehet előállítani.</string>\n    <string name=\"importer_help_totp_authenticator\">Adjon meg egy TOTP Autheticator exportfájlt.</string>\n    <string name=\"importer_help_winauth\">Adjon meg egy WinAuth exportfájlt.</string>\n    <string name=\"import_assign_icons_dialog_title\">Ikonok hozzárendelése</string>\n    <string name=\"import_assign_icons_dialog_text\">Hozzárendeli az ikonokat az importált bejegyzésekhez?</string>\n    <string name=\"importer_encrypted_exception_google_authenticator\">Titkosított bejegyzés kihagyva: %s</string>\n    <string name=\"importer_help_direct\">Bejegyzések közvetlen importálása a következőből: %s. Ehhez szükséges, hogy telepítve legyen az alkalmazás, és hogy biztosítsa a root hozzáférést az Aegis számára.</string>\n    <string name=\"groups\">Csoportok</string>\n    <string name=\"pref_focus_search\">A keresésre fókuszálás az alkalmazás indításakor</string>\n    <string name=\"pref_focus_search_summary\">Azonnali fókuszálás a keresésre az alkalmazás megnyitásakor.</string>\n    <string name=\"pref_grouping_halves\">Felek</string>\n    <string name=\"pref_grouping_none\">Nincs csoportosítás</string>\n    <string name=\"pref_grouping_size_two\">2-es csoportok</string>\n    <string name=\"pref_grouping_size_three\">3-as csoportok</string>\n    <string name=\"pref_grouping_size_four\">4-es csoportok</string>\n    <string name=\"pref_copy_behavior_never\">Soha</string>\n    <string name=\"pref_copy_behavior_single_tap\">Egy koppintás</string>\n    <string name=\"pref_copy_behavior_double_tap\">Dupla koppintás</string>\n    <string name=\"pref_account_name_position_hidden\">Rejtett</string>\n    <string name=\"pref_account_name_position_end\">A kibocsátó mellett</string>\n    <string name=\"pref_account_name_position_below\">A kibocsátó alatt</string>\n    <plurals name=\"time_elapsed_seconds\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"one\">%d másodperce</item>\n        <item quantity=\"other\">%d másodperce</item>\n    </plurals>\n    <plurals name=\"time_elapsed_minutes\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"one\">%d perce</item>\n        <item quantity=\"other\">%d perce</item>\n    </plurals>\n    <plurals name=\"time_elapsed_hours\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"one\">%d órája</item>\n        <item quantity=\"other\">%d órája</item>\n    </plurals>\n    <plurals name=\"time_elapsed_days\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"one\">%d napja</item>\n        <item quantity=\"other\">%d napja</item>\n    </plurals>\n    <plurals name=\"time_elapsed_years\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"one\">%d éve</item>\n        <item quantity=\"other\">%d éve</item>\n    </plurals>\n    <plurals name=\"dropdown_checkboxes_default_count\">\n        <item quantity=\"one\">%d elem kiválasztva</item>\n        <item quantity=\"other\">%d elem kiválasztva</item>\n    </plurals>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-hu-rHU-v29/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"system_theme_title\">Rendszer alapértelmezése</string>\n    <string name=\"system_amoled_theme_title\">Rendszer alapértelmezése (AMOLED)</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-in-rID/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources xmlns:tools=\"http://schemas.android.com/tools\">\n    <string name=\"action_settings\">Pengaturan</string>\n    <string name=\"action_about\">Tentang</string>\n    <string name=\"action_delete\">Hapus</string>\n    <string name=\"action_transfer\">Transfer</string>\n    <string name=\"action_edit_icon\">Ubah ikon</string>\n    <string name=\"action_reset_usage_count\">Reset jumlah penggunaan</string>\n    <string name=\"action_reset_usage_count_dialog\">Apakah Anda yakin ingin mengatur jumlah penggunaan entri ini ke 0?</string>\n    <string name=\"action_default_icon\">Pulihkan ikon bawaan</string>\n    <string name=\"discard\">Buang</string>\n    <string name=\"save\">Simpan</string>\n    <string name=\"all\">Semua</string>\n    <string name=\"issuer\">Penerbit</string>\n    <string name=\"yandex_pin\">PIN (4–16 digit)</string>\n    <string name=\"motp_pin\">PIN (4 digit)</string>\n    <string name=\"suggested\">Disarankan</string>\n    <string name=\"usage_count\">Jumlah penggunaan</string>\n    <string name=\"warning\">Peringatan</string>\n    <string name=\"pref_cat_appearance_app\">Aplikasi</string>\n    <string name=\"pref_cat_appearance_entries\">Entri</string>\n    <string name=\"pref_cat_backups_android\">Android</string>\n    <string name=\"pref_cat_backups_auto\">Pencadangan otomatis</string>\n    <string name=\"pref_section_behavior_title\">Perilaku</string>\n    <string name=\"pref_section_behavior_summary\">Menyesuaikan perilaku ketika berinteraksi dengan daftar entri.</string>\n    <string name=\"pref_section_appearance_title\">Tampilan</string>\n    <string name=\"pref_section_appearance_summary\">Atur tema, bahasa, dan pengaturan lainnya yang memengaruhi penampilan aplikasi.</string>\n    <string name=\"pref_section_security_title\">Keamanan</string>\n    <string name=\"pref_section_security_summary\">Menyesuaikan enkripsi, buka kunci dengan biometrik, penguncian otomatis, dan pengaturan keamanan lainnya.</string>\n    <string name=\"pref_section_import_export_title\">Impor &amp; Ekspor</string>\n    <string name=\"pref_section_import_export_summary\">Impor cadangan dari Aegis atau aplikasi autentikasi lainnya. Buat ekspor manual dari brankas Aegis.</string>\n    <string name=\"pref_section_audit_log_title\">Log audit</string>\n    <string name=\"pref_section_audit_log_summary\">Temukan daftar semua peristiwa penting yang dilaporkan yang terjadi di dalam aplikasi.</string>\n    <string name=\"pref_section_backups_title\">Cadangan</string>\n    <string name=\"pref_section_backups_summary\">Atur pencadangan otomatis ke lokasi yang Anda pilih atau aktifkan partisipasi di sistem pencadangan awan Android.</string>\n    <string name=\"pref_section_icon_packs\">Paket Ikon</string>\n    <string name=\"pref_section_icon_packs_summary\">Kelola dan impor paket ikon</string>\n    <string name=\"pref_select_theme_title\">Tema</string>\n    <string name=\"pref_dynamic_colors_title\">Warna dinamis</string>\n    <string name=\"pref_dynamic_colors_summary\">Terapkan lapisan berdasarkan warna tema Android Anda</string>\n    <string name=\"pref_view_mode_title\">Mode tampilan</string>\n    <string name=\"pref_lang_title\">Bahasa</string>\n    <string name=\"pref_show_icons_title\">Tampilkan ikon</string>\n    <string name=\"pref_show_icons_summary\">Tampilkan ikon di samping setiap entri</string>\n    <string name=\"pref_code_group_size_title\">Pengelompokan digit kode</string>\n    <string name=\"pref_code_group_size_summary\">Pilih jumlah digit untuk mengelompokkan kode berdasarkan</string>\n    <string name=\"pref_account_name_position_title\">Tampilkan nama akun</string>\n    <string name=\"pref_show_next_code_title\">Tampilkan kode selanjutnya</string>\n    <string name=\"pref_show_next_code_summary\">Hasilkan dan tampilkan kode berikutnya lebih awal</string>\n    <string name=\"pref_expiration_state_title\">Tunjukkan kapan kode akan kedaluwarsa</string>\n    <string name=\"pref_expiration_state_summary\">Ubah warna kode dan buat kode tersebut berkedip ketika akan kedaluwarsa</string>\n    <string name=\"pref_expiration_state_fallback\">Ubah warna kode saat kode akan kedaluwarsa</string>\n    <string name=\"pref_shared_issuer_account_name_title\">Hanya tampilkan nama akun jika diperlukan</string>\n    <string name=\"pref_shared_issuer_account_name_summary\">Hanya tampilkan nama akun ketika mereka memiliki penerbit yang sama. Nama akun lain akan disembunyikan.</string>\n    <string name=\"pref_account_name_position_summary_override\">Pengaturan ini digantikan oleh mode tampilan kotak. Nama akun akan ditampilkan di bawah penerbit.</string>\n    <string name=\"pref_import_file_title\">Impor dari berkas</string>\n    <string name=\"pref_import_file_summary\">Impor token dari berkas</string>\n    <string name=\"pref_android_backups_title\">Pencadangan awan Android</string>\n    <string name=\"pref_android_backups_summary\">Izinkan sistem pencadangan awan Android untuk menyertakan brankas Aegis dalam pencadangannya. Ini hanya didukung untuk brankas terenkripsi.</string>\n    <string name=\"pref_android_backups_hint\"><i>Pencadangan perangkat-ke-perangkat (D2D) selalu diizinkan, terlepas dari pengaturan di atas.</i></string>\n    <string name=\"pref_backups_title\">Otomatis cadangkan brankas</string>\n    <string name=\"pref_backups_summary\">Secara otomatis membuat cadangan brankas pada penyimpanan eksternal ketika ada perubahan. Ini hanya didukung untuk brankas terenkripsi.</string>\n    <string name=\"pref_backups_reminder_title\">Pengingat pencadangan</string>\n    <string name=\"pref_backups_reminder_summary\">Tampilkan pengingat untuk mencadangkan cadangan jika Anda belum mencadangkan perubahan terakhir.</string>\n    <string name=\"pref_backups_reminder_dialog_title\">Menonaktifkan pengingat pencadangan</string>\n    <string name=\"pref_backups_reminder_dialog_summary\">Dengan menonaktifkan pengingat ini, Aegis tidak akan memberi tahu Anda apakah Anda memiliki perubahan yang belum dicadangkan atau tidak. Hal ini membuat Anda berisiko kehilangan akses ke token Anda. Apakah Anda yakin ingin menonaktifkan pengingat ini?</string>\n    <string name=\"pref_backups_versioning_strategy_title\">Strategi pencadangan</string>\n    <string name=\"pref_backups_versioning_strategy_keep_x_versions\">Simpan beberapa versi</string>\n    <string name=\"pref_backups_versioning_strategy_single_backup\">Pencadangan tunggal</string>\n    <string name=\"pref_backups_versioning_strategy_single_backup_warning\">Strategi pencadangan yang dipilih tidak dapat diandalkan dan tidak direkomendasikan. Kegagalan pencadangan tunggal dapat menyebabkan kehilangan satu-satunya cadangan Anda.</string>\n    <string name=\"pref_backups_versioning_strategy_dialog_title\">Pilih strategi pencadangan</string>\n    <string name=\"pref_backups_location_title\">Lokasi pencadangan</string>\n    <string name=\"pref_backups_location_summary\">Cadangan akan disimpan di</string>\n    <string name=\"pref_backup_location_summary\">Cadangan akan disimpan di</string>\n    <string name=\"pref_backups_trigger_title\">Jalankan pencadangan</string>\n    <string name=\"pref_backups_trigger_summary\">Jalankan pencadangan secara manual</string>\n    <string name=\"pref_backups_versions_title\">Banyaknya versi yang harus disimpan</string>\n    <string name=\"pref_backups_versions_infinite\">\\u221E</string>\n    <plurals name=\"pref_backups_versions_summary\">\n        <item quantity=\"other\">Simpan versi %1$d dari cadangan</item>\n    </plurals>\n    <string name=\"pref_backups_versions_infinite_summary\">Menyimpan cadangan dalam jumlah tak terbatas</string>\n    <string name=\"pref_import_app_title\">Impor dari aplikasi</string>\n    <string name=\"pref_import_app_summary\">Impor token dari aplikasi (membutuhkan akses root)</string>\n    <string name=\"pref_export_title\">Ekspor</string>\n    <string name=\"pref_export_summary\">Ekspor ke brankas</string>\n    <string name=\"pref_password_reminder_title\">Pengingat kata sandi</string>\n    <string name=\"pref_google_auth_export_title\">Ekspor untuk Google Authenticator</string>\n    <string name=\"pref_google_auth_export_descriptor\">Membuat kode QR ekspor yang kompatibel dengan Google Authenticator</string>\n    <string name=\"pref_google_auth_export_no_data\">Tidak ada data untuk diekspor</string>\n    <plurals name=\"pref_google_auth_export_incompatible_entries\">\n        <item quantity=\"other\">Melewatkan %d entri yang tidak kompatibel</item>\n    </plurals>\n    <string name=\"pref_password_reminder_summary\">Tampilkan pengingat %s untuk memasukkan kata sandi agar Anda tidak lupa.</string>\n    <string name=\"pref_password_reminder_summary_disabled\">Dinonaktifkan</string>\n    <string name=\"pref_secure_screen_title\">Keamanan layar</string>\n    <string name=\"pref_secure_screen_summary\">Blokir tangkapan layar dan upaya lain untuk menangkap layar di dalam aplikasi</string>\n    <string name=\"pref_tap_to_reveal_title\">Ketuk untuk menampilkan</string>\n    <string name=\"pref_tap_to_reveal_summary\">Token akan disembunyikan secara bawaan. Ketuk pada token untuk menampilkan kode.</string>\n    <string name=\"pref_tap_to_reveal_time_title\">Batas waktu ketuk untuk menampilkan</string>\n    <string name=\"pref_auto_lock_title\">Kunci otomatis</string>\n    <string name=\"pref_auto_lock_summary\">Kapan %s</string>\n    <string name=\"pref_auto_lock_summary_disabled\">Dinonaktifkan</string>\n    <string name=\"pref_auto_lock_prompt\">Otomatis mengunci Aegis saat</string>\n    <string name=\"pref_auto_lock_type_back_button\">Tombol kembali sudah ditekan</string>\n    <string name=\"pref_auto_lock_type_minimize\">Aplikasi diminimalkan</string>\n    <string name=\"pref_auto_lock_type_device_lock\">Perangkat terkunci</string>\n    <string name=\"pref_backup_password_category\">Cadangan &amp; Ekspor</string>\n    <string name=\"pref_backup_password_title\">Pisahkan kata sandi untuk cadangan &amp; ekspor</string>\n    <string name=\"pref_backup_password_summary\">Jika diaktifkan, kata sandi yang digunakan untuk membuka aplikasi tidak bisa digunakan kembali untuk mendekripsikan cadangan dan ekspor.</string>\n    <string name=\"pref_backup_password_change_title\">Ubah kata sandi untuk cadangan &amp; ekspor</string>\n    <string name=\"pref_backup_password_change_summary\">Atur kata sandi baru yang akan digunakan untuk mengenkripsi brankas ketika pencadangan dan ekspor.</string>\n    <string name=\"pref_encryption_title\">Enkripsi</string>\n    <string name=\"pref_encryption_summary\">Enkripsi brankas dan buka dengan kata sandi atau biometrik</string>\n    <string name=\"pref_biometrics_title\">Buka kunci dengan biometrik</string>\n    <string name=\"pref_biometrics_summary\">Izinkan otentikasi biometrik untuk membuka brankas</string>\n    <string name=\"pref_search_behavior_summary\">Telusuri melalui: %s</string>\n    <string name=\"pref_search_behavior_prompt\">Cari di salah satu kolom berikut</string>\n    <string name=\"pref_search_behavior_type_name\">Nama</string>\n    <string name=\"pref_search_behavior_type_issuer\">Penerbit</string>\n    <string name=\"pref_search_behavior_type_note\">Catatan</string>\n    <string name=\"pref_search_behavior_type_groups\">Grup</string>\n    <string name=\"pref_set_password_title\">Ganti kata sandi</string>\n    <string name=\"pref_set_password_summary\">Atur kata sandi baru untuk digunkan membuka brankas Anda</string>\n    <string name=\"no_events_title\">Tidak ada kejadian yang dilaporkan</string>\n    <string name=\"no_events_description\">Tidak ada kejadian penting yang dilaporkan dalam aplikasi ini</string>\n    <string name=\"event_title_vault_unlocked\">Brankas terbuka</string>\n    <string name=\"event_description_vault_unlocked\">Brankas telah berhasil dibuka</string>\n    <string name=\"event_title_backup_created\">Cadangan dibuat</string>\n    <string name=\"event_description_backup_created\">Cadangan brankas telah berhasil dibuat</string>\n    <string name=\"event_title_android_backup_created\">Cadangan dibuat oleh Android</string>\n    <string name=\"event_description_android_backup_created\">Cadangan brankas telah berhasil dibuat oleh Android</string>\n    <string name=\"event_title_vault_exported\">Brankas diekspor</string>\n    <string name=\"event_description_vault_exported\">Salinan brankas telah diekspor</string>\n    <string name=\"event_title_entry_shared\">Entri dibagikan</string>\n    <string name=\"event_description_entry_shared\">Sebuah entri telah dibagikan</string>\n    <string name=\"event_title_vault_unlock_failed_password\">Gagal membuka kunci brankas (kata sandi)</string>\n    <string name=\"event_description_vault_unlock_failed_password\">Upaya membuka kunci brankas dengan kata sandi gagal</string>\n    <string name=\"event_title_vault_unlock_failed_biometrics\">Gagal membuka kunci brankas (biometrik)</string>\n    <string name=\"event_description_vault_unlock_failed_biometrics\">Upaya membuka kunci brankas dengan biometrik gagal</string>\n    <string name=\"event_unknown\">Jenis peristiwa tidak diketahui</string>\n    <string name=\"audit_log_entry_deleted\">(terhapus)</string>\n    <string name=\"today_at_time\">Hari ini pada %1$s</string>\n    <string name=\"day_of_week_at_time\">Hari %1$s pada %2$s</string>\n    <string name=\"export_encrypted\">Enkripsi brankas</string>\n    <string name=\"export_help\">Tindakan ini akan mengekspor brankas dari penyimpanan internal Aegis. Pilih format yang Anda inginkan untuk ekspor:</string>\n    <string name=\"export_warning_unencrypted\">Anda akan mengekspor salinan tidak terenkripsi dari brankas Aegis Anda. <b>Ini tidak disarankan</b>.</string>\n    <string name=\"export_warning_password\">Ekspor dienkripsi menggunakan kata sandi terpisah yang dikonfigurasikan dalam pengaturan Keamanan.</string>\n    <string name=\"understand_risk_accept\">Saya mengerti risikonya</string>\n    <string name=\"export_format_aegis\">Aegis (.JSON)</string>\n    <string name=\"export_format_google_auth_uri\">File teks (*.txt)</string>\n    <string name=\"export_format_html\">Halaman web (.HTML)</string>\n    <string name=\"export_format_hint\">Format ekspor</string>\n    <string name=\"export_all_groups\">Ekspor semua grup</string>\n    <string name=\"export_choose_groups\">Pilih grup mana yang akan diekspor</string>\n    <plurals name=\"export_groups_selected_count\">\n        <item quantity=\"other\">%d kelompok yang dipilih</item>\n    </plurals>\n    <string name=\"export_no_groups_selected\">Tidak ada grup yang dipilih untuk diekspor</string>\n    <string name=\"export_html_title\" comment=\"The title of an HTML export document\">Ekspor Aegis Authenticator</string>\n    <string name=\"choose_authentication_method\">Keamanan</string>\n    <string name=\"authentication_method_explanation\">Aegis adalah aplikasi 2FA yang berfokus pada keamanan. Token disimpan dalam brankas, yang secara opsional dapat dienkripsi dengan kata sandi pilihan Anda. Jika penyerang mendapatkan file brankas terenkripsi Anda, mereka tidak akan dapat mengakses konten tanpa mengetahui kata sandinya.\\n\\nKami telah memilih opsi yang menurut kami paling sesuai untuk perangkat Anda.</string>\n    <string name=\"authentication_method_none\">Tidak ada</string>\n    <string name=\"authentication_method_none_description\">Tidak diperlukan kata sandi untuk membuka brankas dan tidak akan dienkripsi. <b>pilihan ini tidak disarankan</b>.</string>\n    <string name=\"authentication_method_password\">Kata Sandi</string>\n    <string name=\"authentication_method_password_description\">Kata sandi diperlukan untuk membuka brankas.</string>\n    <string name=\"authentication_method_password_explanation\">Peringatan: Jika Anda lupa kata sandi, Anda akan kehilangan akses ke token Anda secara permanen. Tidak ada cara untuk memulihkan nya tanpa kata sandi.</string>\n    <string name=\"authentication_method_biometrics\">Biometrik</string>\n    <string name=\"authentication_method_biometrics_description\">Selain kata sandi, biometrik yang terdaftar di perangkat ini, seperti sidik jari atau wajah Anda, dapat digunakan untuk membuka brankas.</string>\n    <string name=\"authentication\">Buka brankas</string>\n    <string name=\"authentication_multiline\" comment=\"The newline in the middle is used for aesthetic purposes\">Buka\\nbrankas</string>\n    <string name=\"auth_use_biometrics\">Atau sentuh di sini untuk menggunakan <font fgcolor=\"#FF0D86C1\">biometrik</font></string>\n    <string name=\"set_password\">Masukkan kata sandi</string>\n    <string name=\"set_group\">Masukkan nama grup</string>\n    <string name=\"set_number\">Masukkan nomor</string>\n    <string name=\"set_password_confirm\">Konfirmasi kata sandi</string>\n    <string name=\"invalid_password\">Kata sandi salah</string>\n    <string name=\"invalidated_biometrics\">Perubahan di pengaturan keamanan perangkat Anda terdeteksi. Silakan pergi ke \\\"Aegis-&gt; Pengaturan -&gt; Keamanan -&gt; Kunci Biometrik\\\" untuk menonaktifkan dan mengaktifkan kembali kunci biometrik.</string>\n    <string name=\"password_reminder\">Masukkan kata sandi Anda. Kami sesekali meminta Anda untuk melakukan hal ini agar Anda tidak lupa.</string>\n    <string name=\"password_reminder_dialog_title\">Buka kunci biometrik secara default</string>\n    <string name=\"password_reminder_dialog_message\">Kami sesekali meminta Anda untuk memasukkan kata sandi untuk memastikan Anda tidak lupa dan tidak terkunci dari brankas. Setelah memasukkan kata sandi Anda sekali, Aegis akan kembali ke pembukaan kunci biometrik secara default hingga tiba waktunya untuk pengingat kata sandi berikutnya.</string>\n    <string name=\"password_reminder_freq_never\">Tak Pernah</string>\n    <string name=\"password_reminder_freq_weekly\">Setiap Pekan</string>\n    <string name=\"password_reminder_freq_biweekly\">Setiap Dua Pekan</string>\n    <string name=\"password_reminder_freq_monthly\">Setiap Bulan</string>\n    <string name=\"password_reminder_freq_quarterly\">Setiap Triwulan</string>\n    <string name=\"enter_password_2fas_message\">Sepertinya cadangan 2FAS ini dienkripsi. Masukkan kata sandi di bawah.</string>\n    <string name=\"enter_password_authy_message\">Sepertinya token Authy Anda dienkripsi. Silakan tutup Aegis, buka Authy dan buka token dengan kata sandi Anda. Sebagai gantinya, Aegis juga dapat mencoba mendekripsi token Authy untuk Anda, jika Anda memasukkan kata sandi di bawah.</string>\n    <string name=\"enter_password_aegis_title\">Mohon masukkan kata sandi pengimporan</string>\n    <string name=\"period_hint\">Jangka Waktu (detik)</string>\n    <string name=\"algorithm_hint\">Fungsi Hash</string>\n    <string name=\"type\">Tipe</string>\n    <string name=\"share\">Bagikan</string>\n    <string name=\"yes\">Ya</string>\n    <string name=\"no\">Tidak</string>\n    <string name=\"undo\">Urung</string>\n    <string name=\"unlock\">Buka</string>\n    <string name=\"advanced\">Lanjutan</string>\n    <string name=\"counter\">Penghitung</string>\n    <string name=\"digits\">Digit</string>\n    <string name=\"secret\">Rahasia</string>\n    <string name=\"scan\">Pindai kode QR</string>\n    <string name=\"scan_image\">Pindai gambar</string>\n    <string name=\"enter_manually\">Masukkan secara manual</string>\n    <string name=\"set_up_biometric\">Atur buka kunci biometrik</string>\n    <string name=\"copy\">Salin</string>\n    <string name=\"edit\">Ubah</string>\n    <string name=\"select_all\">Pilih semua</string>\n    <string name=\"assign_icons\">Tetapkan ikon</string>\n    <string name=\"assign_groups\">Tetapkan ke grup</string>\n    <string name=\"assign_groups_dialog_summary\">Pilih grup yang ingin Anda tetapkan untuk menetapkan entri yang dipilih.</string>\n    <string name=\"assign_groups_dialog_dropdown\">Pilih grup</string>\n    <string name=\"favorite\" comment=\"Verb\">Favorit</string>\n    <string name=\"unfavorite\" comment=\"Verb\">Hapus dari favorit</string>\n    <string name=\"error_all_caps\">ERROR</string>\n    <string name=\"password\">Kata Sandi</string>\n    <string name=\"confirm_password\">Konfirmasi Kata Sandi</string>\n    <string name=\"show_password\">Tampilkan Kata Sandi</string>\n    <string name=\"new_entry\">Entri baru</string>\n    <string name=\"add_new_entry\">Tambahkan entri baru</string>\n    <string name=\"unlock_vault_error\">Tidak dapat membuka brankas</string>\n    <string name=\"unlock_vault_error_description\">Kata Sandi salah. Pastikan Anda tidak salah mengetik kata sandi Anda.</string>\n    <string name=\"password_equality_error\">Kata sandi harus unik dan tidak boleh kosong</string>\n    <string name=\"snackbar_authentication_method\">Pilih metode otentikasi</string>\n    <string name=\"encrypting_vault\">Mengenkripsi brankas</string>\n    <string name=\"exporting_vault\">Ekspor brankas</string>\n    <string name=\"optimizing_icon\">Mengoptimasi ikon</string>\n    <string name=\"optimizing_icon_multiple\">Mengoptimasi ikon %1$d/%2$d</string>\n    <string name=\"reading_file\">Baca berkas</string>\n    <string name=\"requesting_root_access\">Meminta akses root</string>\n    <string name=\"analyzing_qr\">Menganalisis kode QR</string>\n    <string name=\"analyzing_qr_multiple\">Menganalisis kode QR %1$d/%2$d (%3$s)</string>\n    <plurals name=\"added_new_entries\">\n        <item quantity=\"other\">Menambahkan %d entri baru ke brankas</item>\n    </plurals>\n    <string name=\"importing_icon_pack\">Impor paket ikon</string>\n    <string name=\"delete_entry\">Hapus entri</string>\n    <string name=\"delete_entry_description\">Apakah Anda yakin ingin menghapus entri ini?</string>\n    <string name=\"delete_entry_explanation\">Tindakan ini tidak mematikan 2FA untuk\\n<b>%s</b>\\n\\nUntuk menghidari kehilangan akses, pastikan bahwa Anda sudah mematikan 2FA atau Anda memiliki cara alternatif untuk menghasilkan kode untuk layanan ini.</string>\n    <string name=\"delete_entries\">Hapus catatan</string>\n    <plurals name=\"delete_entries_description\">\n        <item quantity=\"other\">Apakah Anda yakin ingin menghapus %d entri ini?</item>\n    </plurals>\n    <string name=\"discard_changes\">Batalkan perubahan?</string>\n    <string name=\"discard_changes_description\">Perubahan Anda belum disimpan</string>\n    <string name=\"saving_profile_error\">Terjadi kesalahan saat menyimpan profil</string>\n    <string name=\"saving_assign_icons_error\">Kesalahan dalam menetapkan ikon</string>\n    <string name=\"welcome\">Selamat Datang</string>\n    <string name=\"app_description\">Aegis adalah aplikasi 2FA gratis, aman, dan kode sumber terbuka</string>\n    <string name=\"setup_completed\">Pengaturan selesai</string>\n    <string name=\"setup_completed_description\">Aegis telah disiapkan dan siap digunakan.</string>\n    <string name=\"vault_not_found\">Branckas tidak ditemukan, memulai penyiapan…</string>\n    <string name=\"copied\">Disalin</string>\n    <string name=\"errors_copied\">Kesalahan menyalin ke Clipboard</string>\n    <string name=\"version_copied\">Versi disalin ke Clipboard</string>\n    <string name=\"error_required_field\">Kolom ini wajib diisi</string>\n    <string name=\"error_occurred\">Terjadi kesalahan</string>\n    <string name=\"decryption_error\">Terjadi kesalahan saat membuka brankas</string>\n    <string name=\"decryption_corrupt_error\">Terjadi kesalahan saat membuka brankas. Mungkin file berkas brankas Anda rusak.</string>\n    <string name=\"saving_error\">Terjadi kesalahan saat menyimpan brankas</string>\n    <string name=\"vault_init_error\">Terjadi kesalahan saat menginisialisasi brankas</string>\n    <string name=\"vault_load_error\">Terjadi kesalahan saat memuat brankas dari penyimpanan</string>\n    <string name=\"biometric_decrypt_error\">Terjadi kesalahan saat mendekripsi brankas dengan autentikasi biometrik. Ini biasanya terjadi jika pengaturan keamanan perangkat Anda telah diubah. Harap buka brankas dengan kata sandi Anda dan atur ulang otentikasi biometrik di pengaturan Aegis.</string>\n    <string name=\"biometric_init_error\">Terjadi kesalahan saat menyiapkan autentikasi biometrik. Hal ini biasanya terjadi jika pengaturan keamanan perangkat Anda telah diubah. Harap buka brankas dengan kata sandi Anda dan atur ulang otentikasi biometrik di pengaturan Aegis.</string>\n    <string name=\"disable_encryption\">Nonaktifkan enkripsi</string>\n    <string name=\"disable_encryption_description\">Apakah Anda yakin untuk mematikan enkripsi? Ini akan mengakibatkan brankas untuk disimpan sebagai teks biasa. <b>Pencadangan otomatis juga akan dinonaktifkan</b>.</string>\n    <string name=\"enable_encryption_error\">Terjadi kesalahan saat mengaktifkan enkripsi</string>\n    <string name=\"disable_encryption_error\">Terjadi kesalahan saat menonaktifkan enkripsi</string>\n    <string name=\"backup_successful\">Pencadangan sukses dijadwalkan</string>\n    <string name=\"backup_error\">Terjadi kesalahan saat membuat cadangan</string>\n    <string name=\"backup_status_success\">Backup terakhir berhasil: %s</string>\n    <string name=\"backup_status_failed\">Backup terakhir gagal: %s</string>\n    <string name=\"backup_status_none\">Belum ada backup yang dibuat</string>\n    <string name=\"backup_warning_password\">Backup dienkripsi menggunakan kata sandi terpisah yang dikonfigurasi dalam pengaturan Keamanan</string>\n    <string name=\"documentsui_error\">DocumentsUI sepertinya menghilang dari perangkat Anda. Ini merupakan komponen sistem yang penting yang diperlukan untuk seleksi dan pembuatan dokumen. Jika Anda menggunakan alat untuk &quot;debloat&quot; perangkat Anda, Anda mungkin tidak sengaja menghapusnya dan Anda harus memasang alat tersebut kembali.</string>\n    <string name=\"icon_pack_import_error\">Terjadi kesalahan ketika mencoba mengimpor sebuah paket ikon</string>\n    <string name=\"icon_pack_import_exists_error\">Paket ikon yang Anda coba impor sudah ada. Apakah Anda ingin menimpanya?</string>\n    <string name=\"icon_pack_delete_error\">Terjadi kesalahan ketika mencoba menghapus sebuah paket ikon</string>\n    <plurals name=\"icon_pack_info\">\n        <item quantity=\"other\">%d ikon</item>\n    </plurals>\n    <string name=\"icon_custom\">Kustom</string>\n    <string name=\"permission_denied\">Izin ditolak</string>\n    <string name=\"andotp_new_format\">Format baru (v0.6.3 atau terbaru) </string>\n    <string name=\"andotp_old_format\">Format lama (v0.6.2 atau terlama) </string>\n    <string name=\"choose_andotp_importer\">Format apa yang dimiliki cadangan berkas andOTP?</string>\n    <string name=\"choose_totpauth_importer\">Apakah cadangan otentikasi TOTP ini dienkripsi dengan sandi?</string>\n    <string name=\"choose_application\">Pilih aplikasi yang ingin Anda impor</string>\n    <string name=\"choose_theme\">Pilih tema yang Anda inginkan</string>\n    <string name=\"choose_account_name_position\">Pilih posisi nama akun yang Anda inginkan</string>\n    <string name=\"choose_view_mode\">Pilih mode tampilan yang Anda inginkan</string>\n    <string name=\"choose_copy_behavior\">Pilih perilaku penyalinan yang Anda inginkan</string>\n    <string name=\"parsing_file_error\">Terjadi kesalahan saat mengurai berkas</string>\n    <string name=\"file_not_found\">Kesalahan: Berkas tidak ditemukan</string>\n    <string name=\"reading_file_error\">Terjadi kesalahan saat membaca berkas</string>\n    <string name=\"app_lookup_error\">Kesalahan: Aplikasi tidak terpasang</string>\n    <string name=\"app_version_error\">Versi %s yang terinstal tidak didukung. Versi terbaru telah mulai mengenkripsi beberapa file di direktori penyimpanan internal, sehingga Aegis tidak dapat mengakses informasi yang dibutuhkan untuk impor. Mencoba mengimpor kemungkinan besar akan menghasilkan kesalahan. Apakah Anda tetap ingin melanjutkan?</string>\n    <string name=\"root_error\">Eror: Tidak bisa mendapatkan akses root</string>\n    <plurals name=\"imported_entries_count\">\n        <item quantity=\"other\">%d entri yang diimpor</item>\n    </plurals>\n    <plurals name=\"entries_shown\">\n        <item quantity=\"other\">Menampilkan %d entri</item>\n    </plurals>\n    <string name=\"intro_import_error_title\">Terjadi kesalahan saat mengimpor vault</string>\n    <string name=\"import_error_title\">Terjadi beberapakali kesalahan saat proses impor</string>\n    <string name=\"exporting_vault_error\">Terjadi kesalahan saat mengekspor brankas</string>\n    <string name=\"exported_vault\">Data brankas Anda telah diekspor</string>\n    <string name=\"encryption_set_password_error\">Terjadi kesalahan saat mengatur kata sandi.</string>\n    <string name=\"encryption_enable_biometrics_error\">Terjadi kesalahan saat mengaktifkan buka kunci biometrik. Beberapa perangkat memiliki implementasi otentikasi biometrik yang buruk dan kemungkinan perangkat Anda adalah salah satunya. Pertimbangkan untuk beralih ke pengaturan kata sandi saja.</string>\n    <string name=\"no_cameras_available\">Kamera tidak tersedia</string>\n    <string name=\"read_qr_error\">Terjadi kesalahan saat membaca kode QR</string>\n    <string name=\"read_qr_error_phonefactor\">Aegis tidak sesuai dengan algoritma 2FA milik Microsoft. Tolong untuk memastikan telah memilih \\\"Atur aplikasi tanpa notifikasi\\\" ketika mengonfigurasi 2FA di Office 365.</string>\n    <string name=\"partial_google_auth_import\">Ekspor Google Authenticator tidak lengkap terdeteksi</string>\n    <string name=\"partial_google_auth_import_warning\">Beberapa kode QR tidak ditemukan dalam impor Anda. Kode berikut ini tidak ditemukan:\\n\\n<b>%s</b>\\n\\nAnda dapat melanjutkan mengimpor ekspor parsial ini, tetapi kami sarankan untuk mencoba kembali dengan semua kode QR agar Anda tidak mengambil risiko kehilangan akses ke token apa pun.</string>\n    <string name=\"missing_qr_code_descriptor\">• - Kode QR %d</string>\n    <plurals name=\"import_partial_export_anyway\">\n        <item quantity=\"other\">Tetap mengimpor token %d</item>\n    </plurals>\n    <string name=\"import_google_auth_failure\">Mengimpor ekspor Google Authenticator gagal</string>\n    <string name=\"unrelated_google_auth_batches_error\">Ekspor berisi informasi untuk batch yang tidak terkait. Coba impor 1 batch dalam satu waktu.</string>\n    <string name=\"no_tokens_can_be_imported\">Tidak ada token yang dapat diimpor sebagai hasilnya</string>\n    <string name=\"unlocking_vault\">Buka brankas</string>\n    <string name=\"rename_group\">Ganti Nama Grup</string>\n    <string name=\"no_group_selection\">Jika sebuah entri bukan merupakan bagian dari grup mana pun, entri tersebut dapat ditemukan di bawah “Tidak ada grup”.</string>\n    <string name=\"remove_group\">Hapus kelompok</string>\n    <string name=\"remove_group_description\">Apakah Anda yakin ingin menghapus kelompok ini? Catatan dalam kelompok ini akan secara otomatis beralih ke \\'Tidak ada kelompok\\'.</string>\n    <string name=\"remove_unused_groups\">Menghapus grup yang tidak digunakan</string>\n    <string name=\"remove_unused_groups_description\">Apakah Anda yakin ingin menghapus semua grup yang tidak ditetapkan ke entri?</string>\n    <string name=\"remove_icon_pack\">Hapus Paket Ikon</string>\n    <string name=\"remove_icon_pack_description\">Apakah Anda yakin ingin menghapus paket ikon ini? Entri yang menggunakan ikon dari paket ini tidak akan terpengaruh.</string>\n    <string name=\"details\">Rincian</string>\n    <string name=\"show_error_details\">Tampilkan detil eror</string>\n    <string name=\"lock\">Kunci</string>\n    <string name=\"name\">Nama</string>\n    <string name=\"no_group\">Tidak ada kelompok</string>\n    <string name=\"sort\" comment=\"Title of the Sort button in the top action bar of the main view\">Sortir</string>\n    <string name=\"sort_alphabetically\">Penerbit (A ke Z)</string>\n    <string name=\"sort_alphabetically_reverse\">Penerbit (Z ke A)</string>\n    <string name=\"sort_alphabetically_name\">Akun (A ke Z)</string>\n    <string name=\"sort_alphabetically_name_reverse\">Akun (Z ke A)</string>\n    <string name=\"sort_usage_count\">Jumlah penggunaan</string>\n    <string name=\"sort_last_used\">Terakhir digunakan</string>\n    <string name=\"sort_custom\">Kustom</string>\n    <string name=\"last_used\">Terakhir digunakan</string>\n    <string name=\"last_used_never\">tidak pernah</string>\n    <string name=\"new_group\">Kelompok baru…</string>\n    <string name=\"group\">Kelompok</string>\n    <string name=\"group_name_hint\">Nama kelompok</string>\n    <string name=\"preference_manage_groups\">Ubah kelompok</string>\n    <string name=\"preference_manage_groups_summary\">Kelola dan hapus kelompok Anda di sini</string>\n    <string name=\"preference_reset_usage_count\">Atur ulang jumlah penggunaan</string>\n    <string name=\"preference_reset_usage_count_summary\">Atur ulang jumlah penggunaan setiap entri di brankas Anda</string>\n    <string name=\"preference_reset_usage_count_dialog\">Apakah Anda yakin ingin mengatur ulang jumlah penggunaan semua entri di brankas Anda menjadi 0?</string>\n    <string name=\"note\" comment=\"Users can add a note to an entry\">Catatan</string>\n    <string name=\"clear\">Bersihkan</string>\n    <string name=\"dialog_duplicate_entry_title\" comment=\"'Duplicate' is a noun here\">Duplikat entri</string>\n    <string name=\"dialog_duplicate_entry_message\">Entri ini memiliki nama dan penerbit yang sama dengan satu atau lebih entri yang sudah ada. Bagaimana Anda ingin melanjutkan?</string>\n    <string name=\"dialog_duplicate_entry_overwrite_title\">Ganti entri yang sudah ada</string>\n    <string name=\"dialog_duplicate_entry_overwrite_subtitle\">Ganti entri yang ada dengan entri baru. Tindakan ini tidak dapat dibatalkan</string>\n    <string name=\"dialog_duplicate_entry_suffix_title\">Tambahkan sufiks</string>\n    <string name=\"dialog_duplicate_entry_suffix_subtitle\">Tambahkan sufiks ke nama entri baru ini. Nama baru akan menjadi: %s</string>\n    <string name=\"dialog_duplicate_entry_cancel_title\">Batalkan penyimpanan</string>\n    <string name=\"dialog_duplicate_entry_cancel_subtitle\">Memungkinkan Anda untuk mengedit entri sebelum mencoba menyimpannya kembali</string>\n    <plurals name=\"dialog_duplicate_entry_overwrite_dialog_message\">\n        <item quantity=\"other\">Apakah Anda yakin ingin menghapus %d entri dengan nama berikut:\\n\\n%s - %s</item>\n    </plurals>\n    <string name=\"dialog_duplicate_entry_overwrite_dialog_title\">Konfirmasi penghapusan</string>\n    <string name=\"pref_haptic_feedback_summary\">Buat perangkat Anda bergetar saat kode sedang diperbarui</string>\n    <string name=\"pref_haptic_feedback_title\">Umpan balik haptic</string>\n    <string name=\"pref_highlight_entry_title\">Sorot token saat disentuh</string>\n    <string name=\"pref_highlight_entry_summary\">Jadikan token untuk lebih mudah dibedakan satu sama lain dengan menyorotnya saat disentuh</string>\n    <string name=\"pref_groups_multiselect_title\">Pilih berganda grup</string>\n    <string name=\"pref_groups_multiselect_summary\">Mengizinkan memilih beberapa grup pada saat yang sama</string>\n    <string name=\"pref_minimize_on_copy_title\">Meminimalkan penyalinan</string>\n    <string name=\"pref_minimize_on_copy_summary\">Meminimalkan aplikasi setelah menyalin token</string>\n    <string name=\"pref_copy_behavior_title\">Menyalin token ke papan klip</string>\n    <string name=\"pref_search_behavior_title\">Aktivitas pencarian</string>\n    <string name=\"pref_pause_entry_title\">Bekukan token ketika disentuh</string>\n    <string name=\"pref_pause_entry_summary\">Hentikan penyegaran otomatis token dengan menyentuh mereka. Token tidak akan diperbarui selama mereka difokuskan. Membutuhkan \\\"Sorot token saat disentuh\\\" atau \\\"Sentuh untuk melihat.\\\"</string>\n    <string name=\"pin_keyboard_description\">Masukkan kata sandi Anda untuk mengaktifkan keyboard PIN. Perhatikan bahwa ini hanya berfungsi jika kata sandi Anda hanya terdiri dari angka</string>\n    <string name=\"pin_keyboard_error\">Terjadi kesalahan saat mengaktifkan keyboard PIN</string>\n    <string name=\"pin_keyboard_error_description\">Tidak dapat mengatur keyboard PIN. Kata sandi Anda hanya boleh terdiri dari angka.</string>\n    <string name=\"pin_keyboard_disabled\">Kata sandi berubah. Keyboard PIN tidak akan ditampilkan lagi.</string>\n    <string name=\"selected\">Terpilih</string>\n    <string name=\"dark_theme_title\">Tema Gelap</string>\n    <string name=\"light_theme_title\">Tema Terang</string>\n    <string name=\"amoled_theme_title\">Tema AMOLED</string>\n    <string name=\"system_theme_title\">Diatur oleh mode penghemat baterai</string>\n    <string name=\"system_amoled_theme_title\">Diatur oleh mode penghemat baterai (AMOLED)</string>\n    <string name=\"normal_viewmode_title\">Normal</string>\n    <string name=\"compact_mode_title\">Ringkas</string>\n    <string name=\"small_mode_title\">Kecil</string>\n    <string name=\"tiles_mode_title\">Menu</string>\n    <string name=\"unknown_issuer\">Penerbit tidak diketahui</string>\n    <string name=\"unknown_account_name\">Nama akun tidak diketahui</string>\n    <plurals name=\"import_error_dialog\">\n        <item quantity=\"other\">Aegis tidak dapat mengimpor token %d. Token ini akan dilewati. Tekan \\'detail\\' untuk melihat informasi lebih lanjut tentang kesalahan.</item>\n    </plurals>\n    <string name=\"unable_to_process_deeplink\">Tidak dapat memproses tautan dalam</string>\n    <string name=\"unable_to_read_qrcode_file\">Tidak dapat membaca dan memproses kode QR dari berkas: %s.</string>\n    <string name=\"unable_to_process_shared_text\">Tidak dapat memproses teks bersama sebagai OTP</string>\n    <string name=\"unable_to_read_qrcode_files\">Tidak dapat membaca dan memproses sebagian kode QR. Hanya entri %1$d/%2$d yang akan diimpor.</string>\n    <string name=\"unable_to_generate_qrcode\">Tidak dapat membuat kode QR</string>\n    <string name=\"select_picture\">Pilih gambar</string>\n    <string name=\"select_icon\">Pilih ikon</string>\n    <string name=\"tile_open_vault\" comment=\"label for a quick settings tile that opens the app when tapped\">Buka brankas</string>\n    <string name=\"tile_open_scanner\" comment=\"label for a quick settings tile that opens the QR code scanner when tapped\">Buka pemindai</string>\n    <string name=\"toggle_checkboxes\">Alihkan kotak centang</string>\n    <string name=\"search\">Cari</string>\n    <string name=\"channel_name_lock_status\">Status kunci</string>\n    <string name=\"channel_description_lock_status\">Aegis dapat memberitahukan terus-menerus kepada Anda saat brankas terkunci</string>\n    <string name=\"vault_unlocked_state\">Brankas tidak terkunci. Setuh di sini untuk mengunci.</string>\n    <string name=\"version\">Versi</string>\n    <string name=\"changelog\">Catatan perubahan</string>\n    <string name=\"whats_new\">Apa yang baru</string>\n    <string name=\"github_description\">Kode sumber, masalah dan informasi</string>\n    <string name=\"license\">Lisensi</string>\n    <string name=\"license_description\">Aegis Authenticator dilisensikan dengan GPLv3</string>\n    <string name=\"third_party_licenses\">Lisensi pihak ketiga</string>\n    <string name=\"third_party_licenses_description\">Lisensi pustaka pihak ketiga yang digunakan Aegis</string>\n    <string name=\"country_netherlands\">Belanda</string>\n    <string name=\"email_us\">Tuliskan email</string>\n    <string name=\"visit_website\">Kunjungi situs web kami</string>\n    <string name=\"about_support\">Dukung</string>\n    <string name=\"support_rate\">Beri penilaian</string>\n    <string name=\"support_rate_description\">Dukung kami dengan meninggalkan ulasan di Google Play Store</string>\n    <string name=\"webview_error\">Perangkat ini tidak mendukung tampilan web yang diperlukan untuk melihat catatan perubahan dan lisensi. Komponen sistem tidak ada.</string>\n    <string name=\"email\">Email</string>\n    <string name=\"time_sync_warning_title\">Sinkronisasi waktu otomatis</string>\n    <string name=\"time_sync_warning_message\">Aegis mengandalkan waktu sistem untuk disinkronkan menjadi kode yang benar. Selisih hanya beberapa detik dapat menyebabkan kode salah. Sepertinya perangkat Anda tidak dikonfigurasi untuk menyinkronkan waktu secara otomatis. Apakah Anda ingin melakukannya sekarang?</string>\n    <string name=\"time_sync_warning_disable\">Berhenti memperingatkan saya. Saya tahu apa yang saya lakukan.</string>\n    <string name=\"google_qr_export_unrelated\">Ditemukan kode QR yang tidak terkait. Coba mulai ulang pemindai.</string>\n    <plurals name=\"google_qr_export_scanned\">\n        <item quantity=\"other\">Kode QR yang dipindai %1$d/%2$d</item>\n    </plurals>\n    <string name=\"google_qr_export_unexpected\">Kode QR yang seharusnya #%1$d, tetapi yang dipindai justru #%2$d</string>\n    <string name=\"backup_error_bar_message\"><b>Pencadangan Brankas baru-baru ini gagal</b></string>\n    <string name=\"backup_error_dialog_details\" comment=\"The first parameter is the type of backup (e.g. built-in or Android backup). The second parameter is an elapsed time in the style of 'x seconds/minutes/days ago'.\">               Upaya pencadangan brankas terkini menggunakan %1$s gagal karena terjadi kesalahan. Pencadangan telah dilakukan dengan menggunakan %2$s. Periksa pengaturan pencadangan Anda untuk memastikan pencadangan berhasil diselesaikan.</string>\n    <string name=\"backup_permission_error_dialog_details\" comment=\"The first parameter is the type of backup (e.g. built-in or Android backup). The second parameter is an elapsed time in the style of 'x seconds/minutes/days ago'.\">        Upaya pencadangan brankas terkini menggunakan %1$s gagal karena Aegis tidak memiliki izin untuk menulis ke tujuan pencadangan. Pencadangan telah dilakukan dengan menggunakan %2$s. Kesalahan ini dapat terjadi jika Anda memindahkan/mengganti nama tujuan pencadangan atau jika Anda baru saja memulihkan Aegis dari pencadangan. Harap konfigurasikan ulang tujuan pencadangan.</string>\n    <string name=\"backup_system_builtin\">Pencadangan otomatis bawaan Aegis</string>\n    <string name=\"backup_system_android\">Sistem pencadangan awan Android</string>\n    <string name=\"backup_reminder_bar_message_with_latest\" comment=\"The parameter is an elapsed time in the style of 'x seconds/minutes/days ago'\">        Backup terakhir sudah kedaluwarsa (%s)\n    </string>\n    <string name=\"backup_reminder_bar_message\">        Perubahan tidak di backup\n    </string>\n    <string name=\"backup_reminder_bar_dialog_title\">Perubahan tidak di backup</string>\n    <string name=\"backup_reminder_bar_dialog_summary\">        Perubahan terbaru pada brankas belum dicadangkan. Penting untuk melakukan pencadangan secara teratur untuk mencegah kehilangan akses ke akun Anda. Pertimbangkan untuk menyiapkan pencadangan otomatis di menu pengaturan.\n    </string>\n    <string name=\"backup_reminder_bar_dialog_accept\">Menyiapkan cadangan</string>\n    <string name=\"backup_plaintext_export_warning\"><b>Brankas baru-baru ini diekspor dalam teks biasa</b></string>\n    <string name=\"pref_show_plaintext_warning_hint\">Jangan perlihatkan peringatan ini lagi</string>\n    <string name=\"backup_plaintext_warning_explanation\">Peringatan ini ditampilkan karena Anda baru-baru ini mengekspor salinan tidak terenkripsi dari brankas. Untuk menjaga keamanan token Anda, kami merekomendasikan untuk menghapus berkas ini ketika sudah tidak dibutuhkan.</string>\n    <string name=\"switch_camera\">Beralih ke Kamera</string>\n    <string name=\"empty_list\">Tidak ada kode untuk ditampilkan. Mulai tambahkan catatan dengan menekan tanda plus di pojok kanan bawah</string>\n    <string name=\"empty_list_title\">Tidak ada catatan yang ditemukan</string>\n    <string name=\"empty_group_list\">Tidak ada kelompok untuk ditampilkan. Tambahkan kelompok di layar penyuntingan sebuah entri</string>\n    <string name=\"empty_group_list_title\">Kelompok tidak ditemukan</string>\n    <string name=\"no_icon_packs\">Belum ada paket ikon yang diimpor. Sentuh tanda plus untuk mulai mengimpor. Tip: coba <a href=\"https://aegis-icons.github.io\">aegis-icons</a>.</string>\n    <string name=\"no_icon_packs_title\">Tidak ada paket ikon</string>\n    <string name=\"pick_icon\">Pilih sebuah ikon</string>\n    <string name=\"uncategorized\">Tidak Dikategorikan</string>\n    <string name=\"done\">Selesai</string>\n    <plurals name=\"qr_count\">\n        <item quantity=\"other\">%d / %d Kode QR</item>\n    </plurals>\n    <string name=\"next\">Berikutnya</string>\n    <string name=\"previous\">Sebelumnya</string>\n    <string name=\"copy_uri\">Salin URI</string>\n    <string name=\"unable_to_copy_uri_to_clipboard\">Tidak dapat menyalin URI ke clipboard</string>\n    <string name=\"uri_copied_to_clipboard\">URI disalin ke papan klip</string>\n    <string name=\"transfer_entry_description\">Pindai kode QR ini dengan aplikasi autentikasi yang ingin Anda pindahkan ke sana entri ini</string>\n    <string name=\"transfer_entry_brightness\">Ketuk kode QR untuk mengatur kecerahan layar penuh</string>\n    <string name=\"google_auth_compatible_transfer_description\">Pindai kode QR ini dengan Aegis atau Google Authenticator.\\n\\nKarena keterbatasan aplikasi Google Authenticator, hanya token TOTP &amp; HOTP yang menggunakan SHA1 dan menghasilkan kode 6 digit yang disertakan</string>\n    <string name=\"password_strength_very_weak\">Sangat lemah</string>\n    <string name=\"password_strength_weak\">Lemah</string>\n    <string name=\"password_strength_fair\">Baik</string>\n    <string name=\"password_strength_good\">Baik</string>\n    <string name=\"password_strength_strong\">Kuat</string>\n    <string name=\"password_strength_unknown\">Kata sandi terlalu panjang untuk analisis kekuatan</string>\n    <string name=\"pref_pin_keyboard_title\">Gunakan keyboard PIN di layar kunci</string>\n    <string name=\"pref_pin_keyboard_summary\">Aktifkan ini jika Anda ingin mengaktifkan keyboard PIN di layar kunci. Ini hanya berfungsi untuk kata sandi numerik</string>\n    <string name=\"title_activity_preferences\">Pengaturan</string>\n    <string name=\"title_activity_manage_groups\">Kelola kelompok</string>\n    <string name=\"title_activity_transfer\">Pindahkan catatan</string>\n    <string name=\"title_activity_about\">Tentang</string>\n    <string name=\"title_activity_edit_entry\">Sunting entri</string>\n    <string name=\"title_activity_scan_qr\">Pindai kode QR</string>\n    <string name=\"title_activity_import_entries\">Impor entri</string>\n    <string name=\"title_activity_assign_icons\">Tetapkan ikon</string>\n    <string name=\"title_activity_licenses\">Lisensi pihak ketiga</string>\n    <string name=\"dialog_wipe_entries_title\">Hapus catatan</string>\n    <string name=\"dialog_wipe_entries_message\">Brankas Anda sudah memiliki catatan. Apakah Anda ingin menghapus catatan ini tanpa mengimpor berkas ini?\\n\\n<b>Jika ini dilakukan, Anda akan kehilangan akses secara permanen ke catatan yang ada di brankas.</b></string>\n    <string name=\"dialog_wipe_entries_checkbox\">Hapus konten brankas</string>\n    <string name=\"panic_trigger_ignore_toast\">Aegis menerima perintah darurat tetapi pengaturan dinonaktifkan, abaikan</string>\n    <string name=\"pref_panic_trigger_title\">Hapus brankas pada perintah darurat</string>\n    <string name=\"pref_panic_trigger_summary\">Hapus brankas saat menerima indikasi perintah darurat</string>\n    <string name=\"import_vault\">Mengimpor brankas Aegis</string>\n    <string name=\"import_vault_hint\">Ingin mengimpor dari aplikasi 2FA yang berbeda? Selesaikan penyiapan terlebih dahulu, lalu buka menu pengaturan.</string>\n    <plurals name=\"import_duplicate_toast\">\n        <item quantity=\"other\">Tidak dicentang %d potensi duplikat. Silakan tinjau daftar entri.</item>\n    </plurals>\n    <string name=\"importer_help_2fas\">Sediakan sebuah berkas cadangan Autetikator 2FAS.</string>\n    <string name=\"importer_help_aegis\">Siapkan berkas ekspor/cadangan Aegis.</string>\n    <string name=\"importer_help_authenticator_plus\">Siapkan berkas ekspor Authenticator Plus yang didapat melalui<b>Pengaturan -&gt; Pemulihan &amp; Cadangan -&gt; Ekspor sebagai Teks dan HTML</b>.</string>\n    <string name=\"importer_help_authy\">Siapkan salinan\n<b>/data/data/com.authy.authy/shared_prefs/com.authy.storage.tokens.authenticator.xml</b>, yang terletak di direktori penyimpanan internal Authy.</string>\n    <string name=\"importer_help_andotp\">Siapkan berkas ekspor/cadangan andOTP.</string>\n    <string name=\"importer_help_bitwarden\">Masukkan berkas cadangan/ekspor Bitwarden. Berkas terenkripsi tidak didukung.</string>\n    <string name=\"importer_help_battle_net_authenticator\">Sediakan salinan <b>/data/data/com.blizzard.messenger/shared_prefs/com.blizzard.messenger.authenticator_preferences.xml</b>, yang terletak di direktori penyimpanan internal Battle.net Authenticator.</string>\n    <string name=\"importer_help_duo\">Siapkan salinan\n<b>/data/data/com.duosecurity.duomobile/files/duokit/accounts.json</b>, yang terletak di direktori penyimpanan internal DUO.</string>\n    <string name=\"importer_help_ente_auth\">Menyediakan file ekspor Ente Auth. Saat ini hanya file yang tidak dienkripsi yang didukung.</string>\n    <string name=\"importer_help_freeotp\">FreeOTP 2: Menyediakan berkas cadangan.\\nFreeOTP 1.x: Menyediakan salinan  <b>/data/data/org.fedorahosted.freeotp/shared_prefs/tokens.xml</b>, yang terletak di direktori penyimpanan internal FreeOTP.</string>\n    <string name=\"importer_help_freeotp_plus\">Siapkan berkas ekspor FreeOTP+.</string>\n    <string name=\"importer_warning_title_freeotp2\">Kompatibilitas FreeOTP 2</string>\n    <string name=\"importer_warning_message_freeotp2\">Ada sejumlah masalah dalam FreeOTP 2 yang dapat mengakibatkan cadangan rusak. Aegis akan mencoba menyelamatkan sebanyak mungkin entri, tetapi ada kemungkinan beberapa atau bahkan semuanya gagal diimpor.</string>\n    <string name=\"importer_help_google_authenticator\"><b>Hanya berkas basis data dari Google Authenticator v5.10 dan sebelumnya yang didukung</b>.\\n\\nMasukkan salinan dari <b>/data/data/com.google.android.apps.authenticator2/databases/databases</b>, yang tersimpan di direktori penyimpanan internal Google Authenticator.</string>\n    <string name=\"importer_help_microsoft_authenticator\">Siapkan salinan\n<b>/data/data/com.azure.authenticator/databases/PhoneFactor</b>, yang terletak di direktori penyimpanan internal Microsoft Authenticator.</string>\n    <string name=\"importer_help_plain_text\">Siapkan berkas plain text Google Authenticator dengan URI di setiap baris.</string>\n    <string name=\"importer_help_proton_authenticator\">Sediakan berkas ekspor Proton Authenticator (.json) yang diperoleh melalui <b>Pengaturan -&gt; Ekspor</b>.</string>\n    <string name=\"importer_help_steam\"><b>Steam v3.0 dan yang lebih baru tidak didukung</b>. Sediakan salinan <b>/data/data/com.valvesoftware.android.steam.community/files/Steamguard-*.json</b>, yang terletak di direktori penyimpanan internal Steam.</string>\n    <string name=\"importer_help_stratum\">Sediakan berkas ekspor Stratum yang diperoleh melalui <b>Pengaturan -&gt; Cadangkan -&gt; Cadangkan ke berkas terenkripsi (disarankan)</b>.</string>\n    <string name=\"importer_help_totp_authenticator\">Siapkan berkas ekspor Autentikasi TOTP.</string>\n    <string name=\"importer_help_winauth\">Siapkan berkas ekspor WinAuth.</string>\n    <string name=\"import_assign_icons_dialog_title\">Tetapkan ikon</string>\n    <string name=\"import_assign_icons_dialog_text\">Apakah Anda ingin menetapkan ikon ke entri yang diimpor?</string>\n    <string name=\"importer_encrypted_exception_google_authenticator\">Entri terenkripsi dilewati: %s</string>\n    <string name=\"importer_help_direct\">Impor entri langsung dari %s. Ini membutuhkan aplikasi untuk diinstal pada perangkat ini dan untuk akses root diberikan ke Aegis.</string>\n    <string name=\"groups\">Kelompok-kelompok</string>\n    <string name=\"pref_focus_search\">Fokuskan pencarian saat aplikasi dimulai</string>\n    <string name=\"pref_focus_search_summary\">Fokuskan pencarian langsung setelah membuka aplikasi.</string>\n    <string name=\"pref_grouping_halves\">Dibelah dua</string>\n    <string name=\"pref_grouping_none\">Tidak dikelompokan</string>\n    <string name=\"pref_grouping_size_two\">Dua kelompok</string>\n    <string name=\"pref_grouping_size_three\">Tiga kelompok</string>\n    <string name=\"pref_grouping_size_four\">Empat kelompok</string>\n    <string name=\"pref_copy_behavior_never\">Tidak pernah</string>\n    <string name=\"pref_copy_behavior_single_tap\">Ketuk sekali</string>\n    <string name=\"pref_copy_behavior_double_tap\">Ketuk dua kali</string>\n    <string name=\"pref_account_name_position_hidden\">Tersembunyi</string>\n    <string name=\"pref_account_name_position_end\">Di sebelah emiten</string>\n    <string name=\"pref_account_name_position_below\">Di bawah emiten</string>\n    <plurals name=\"time_elapsed_seconds\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"other\">%d detik yang lalu</item>\n    </plurals>\n    <plurals name=\"time_elapsed_minutes\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"other\">%d menit yang lalu</item>\n    </plurals>\n    <plurals name=\"time_elapsed_hours\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"other\">%d jam yang lalu</item>\n    </plurals>\n    <plurals name=\"time_elapsed_days\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"other\">%d hari yang lalu</item>\n    </plurals>\n    <plurals name=\"time_elapsed_years\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"other\">%d tahun yang lalu</item>\n    </plurals>\n    <plurals name=\"dropdown_checkboxes_default_count\">\n        <item quantity=\"other\">%d item terpilih</item>\n    </plurals>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-in-rID-v29/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"system_theme_title\">Sistem standar</string>\n    <string name=\"system_amoled_theme_title\">Sistem standar (AMOLED)</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-it-rIT/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources xmlns:tools=\"http://schemas.android.com/tools\">\n    <string name=\"action_settings\">Impostazioni</string>\n    <string name=\"action_about\">Informazioni</string>\n    <string name=\"action_delete\">Elimina</string>\n    <string name=\"action_transfer\">Trasferisci</string>\n    <string name=\"action_edit_icon\">Modifica l\\'icona</string>\n    <string name=\"action_reset_usage_count\">Azzera il numero di utilizzi</string>\n    <string name=\"action_reset_usage_count_dialog\">Sei sicuro di voler riportare a zero il numero di utilizzi di questa voce?</string>\n    <string name=\"action_default_icon\">Ripristina l\\'icona predefinita</string>\n    <string name=\"discard\">Annulla</string>\n    <string name=\"save\">Salva</string>\n    <string name=\"all\">Tutti</string>\n    <string name=\"issuer\">Servizio</string>\n    <string name=\"yandex_pin\">PIN (4–16 cifre)</string>\n    <string name=\"motp_pin\">PIN (4 cifre)</string>\n    <string name=\"suggested\">Consigliato</string>\n    <string name=\"usage_count\">Numero di utilizzi</string>\n    <string name=\"warning\">Avviso</string>\n    <string name=\"pref_cat_appearance_app\">Applicazione</string>\n    <string name=\"pref_cat_appearance_entries\">Voci</string>\n    <string name=\"pref_cat_backups_android\">Android</string>\n    <string name=\"pref_cat_backups_auto\">Backup automatici</string>\n    <string name=\"pref_section_behavior_title\">Comportamento</string>\n    <string name=\"pref_section_behavior_summary\">Personalizza il comportamento quando interagisci con l\\'elenco delle voci.</string>\n    <string name=\"pref_section_appearance_title\">Aspetto</string>\n    <string name=\"pref_section_appearance_summary\">Imposta il tema, la lingua e altre impostazioni che cambiano l\\'aspetto dell\\'app.</string>\n    <string name=\"pref_section_security_title\">Sicurezza</string>\n    <string name=\"pref_section_security_summary\">Configura la crittografia, lo sblocco biometrico, il blocco automatico e altre impostazioni di sicurezza.</string>\n    <string name=\"pref_section_import_export_title\">Importa / Esporta</string>\n    <string name=\"pref_section_import_export_summary\">Importa i backup di Aegis o di altre applicazioni di autenticazione. Crea esportazioni manuali della tua cassaforte di Aegis.</string>\n    <string name=\"pref_section_audit_log_title\">Registro di controllo</string>\n    <string name=\"pref_section_audit_log_summary\">Trova un elenco di tutti gli eventi importanti segnalati che sono avvenuti nell\\'app.</string>\n    <string name=\"pref_section_backups_title\">Backup</string>\n    <string name=\"pref_section_backups_summary\">Imposta i backup automatici in una posizione a tua scelta o abilita la partecipazione al sistema di backup cloud di Android.</string>\n    <string name=\"pref_section_icon_packs\">Pacchetti di icone</string>\n    <string name=\"pref_section_icon_packs_summary\">Gestisci e importa i pacchetti di icone</string>\n    <string name=\"pref_select_theme_title\">Tema</string>\n    <string name=\"pref_dynamic_colors_title\">Colori dinamici</string>\n    <string name=\"pref_dynamic_colors_summary\">Applica una sovrapposizione basata sui colori del tema di Android</string>\n    <string name=\"pref_view_mode_title\">Visualizzazione delle voci</string>\n    <string name=\"pref_lang_title\">Lingua</string>\n    <string name=\"pref_show_icons_title\">Mostra le icone</string>\n    <string name=\"pref_show_icons_summary\">Mostra le icone accanto a ogni voce</string>\n    <string name=\"pref_code_group_size_title\">Raggruppamento delle cifre dei codici</string>\n    <string name=\"pref_code_group_size_summary\">Seleziona il numero di cifre per cui raggruppare i codici</string>\n    <string name=\"pref_account_name_position_title\">Mostra il nome dell\\'account</string>\n    <string name=\"pref_show_next_code_title\">Mostra il codice successivo</string>\n    <string name=\"pref_show_next_code_summary\">Genera e mostra il codice successivo in anticipo</string>\n    <string name=\"pref_expiration_state_title\">Mostra quando qualche codice sta per scadere</string>\n    <string name=\"pref_expiration_state_summary\">Cambia il colore e fa\\' lampeggiare i codici che stanno per scadere</string>\n    <string name=\"pref_expiration_state_fallback\">Cambia il colore dei codici quando stanno per scadere</string>\n    <string name=\"pref_shared_issuer_account_name_title\">Mostra il nome dell\\'account solo se necessario</string>\n    <string name=\"pref_shared_issuer_account_name_summary\">Mostra i nomi degli account quando condividono lo stesso servizio. I nomi degli altri account verranno nascosti.</string>\n    <string name=\"pref_account_name_position_summary_override\">Questa impostazione è sovrascritta dalla visualizzazione a schede. Il nome dell\\'account verrà mostrato sotto a quello del servizio.</string>\n    <string name=\"pref_import_file_title\">Importa da un file</string>\n    <string name=\"pref_import_file_summary\">Importa i token da un file</string>\n    <string name=\"pref_android_backups_title\">Backup cloud di Android</string>\n    <string name=\"pref_android_backups_summary\">Permetti al sistema di backup cloud di Android di includere la cassaforte di Aegis nei suoi backup. Questa funzionalità è supportata solo per casseforti crittografate.</string>\n    <string name=\"pref_android_backups_hint\"><i>I backup da dispositivo a dispositivo (D2D) sono sempre consentiti, indipendentemente dall\\'impostazione qui sopra</i></string>\n    <string name=\"pref_backups_title\">Backup automatico della cassaforte</string>\n    <string name=\"pref_backups_summary\">Effettua automaticamente un backup della cassaforte nella memoria esterna quando vengono apportate delle modifiche. Questa funzionalità è supportata solo per casseforti crittografate.</string>\n    <string name=\"pref_backups_reminder_title\">Promemoria di backup</string>\n    <string name=\"pref_backups_reminder_summary\">Mostra un promemoria per effettuare il backup della cassaforte nel caso in cui non sia stato fatto dopo le ultime modifiche.</string>\n    <string name=\"pref_backups_reminder_dialog_title\">Disabilita i promemoria di backup</string>\n    <string name=\"pref_backups_reminder_dialog_summary\">Se disabiliti i promemoria, Aegis non ti avviserà delle eventuali modifiche di cui non hai ancora effettuato il backup. Ciò comporta il rischio di perdere l\\'accesso ai tuoi token. Sei sicuro di voler disabilitare i promemoria?</string>\n    <string name=\"pref_backups_versioning_strategy_title\">Strategia di backup</string>\n    <string name=\"pref_backups_versioning_strategy_keep_x_versions\">Mantieni un numero di versioni</string>\n    <string name=\"pref_backups_versioning_strategy_single_backup\">Backup singolo</string>\n    <string name=\"pref_backups_versioning_strategy_single_backup_warning\">La strategia di backup selezionata non è affidabile e non è consigliata. Un singolo errore di backup potrebbe portare alla perdita dell\\'unico salvataggio presente.</string>\n    <string name=\"pref_backups_versioning_strategy_dialog_title\">Seleziona una strategia di backup</string>\n    <string name=\"pref_backups_location_title\">Percorso del backup</string>\n    <string name=\"pref_backups_location_summary\">I backup saranno salvati in</string>\n    <string name=\"pref_backup_location_summary\">I backup saranno salvati in</string>\n    <string name=\"pref_backups_trigger_title\">Effettua un backup</string>\n    <string name=\"pref_backups_trigger_summary\">Effettua un backup manualmente</string>\n    <string name=\"pref_backups_versions_title\">Numero di versioni da salvare</string>\n    <string name=\"pref_backups_versions_infinite\">\\u221E</string>\n    <plurals name=\"pref_backups_versions_summary\">\n        <item quantity=\"one\">Salva %1$d versione del backup</item>\n        <item quantity=\"other\">Salva %1$d versioni del backup</item>\n    </plurals>\n    <string name=\"pref_backups_versions_infinite_summary\">Mantieni un numero infinito di versioni del backup</string>\n    <string name=\"pref_import_app_title\">Importa da app</string>\n    <string name=\"pref_import_app_summary\">Importa i token da un\\'altra app (richiede i permessi di root)</string>\n    <string name=\"pref_export_title\">Esporta</string>\n    <string name=\"pref_export_summary\">Esporta la cassaforte</string>\n    <string name=\"pref_password_reminder_title\">Promemoria della password</string>\n    <string name=\"pref_google_auth_export_title\">Esporta per Google Authenticator</string>\n    <string name=\"pref_google_auth_export_descriptor\">Genera dei codici QR per l\\'esportazione compatibili con Google Authenticator</string>\n    <string name=\"pref_google_auth_export_no_data\">Nessun dato da esportare</string>\n    <plurals name=\"pref_google_auth_export_incompatible_entries\">\n        <item quantity=\"one\">Ignorata %d voce incompatibile</item>\n        <item quantity=\"other\">Ignorate %d voci incompatibili</item>\n    </plurals>\n    <string name=\"pref_password_reminder_summary\">Mostra un promemoria %s per inserire la password, in modo da non dimenticarla.</string>\n    <string name=\"pref_password_reminder_summary_disabled\">Disabilitato</string>\n    <string name=\"pref_secure_screen_title\">Sicurezza dello schermo</string>\n    <string name=\"pref_secure_screen_summary\">Blocca i tentativi di salvare schermate all\\'interno dell\\'app</string>\n    <string name=\"pref_tap_to_reveal_title\">Tocca per mostrare</string>\n    <string name=\"pref_tap_to_reveal_summary\">I token verranno nascosti. Toccane uno per mostrare il codice.</string>\n    <string name=\"pref_tap_to_reveal_time_title\">Durata della visualizzazione del codice</string>\n    <string name=\"pref_auto_lock_title\">Blocco automatico</string>\n    <string name=\"pref_auto_lock_summary\">Quando %s</string>\n    <string name=\"pref_auto_lock_summary_disabled\">Disabilitato</string>\n    <string name=\"pref_auto_lock_prompt\">Blocca automaticamente Aegis se</string>\n    <string name=\"pref_auto_lock_type_back_button\">Il tasto Indietro viene premuto</string>\n    <string name=\"pref_auto_lock_type_minimize\">L\\'app viene minimizzata</string>\n    <string name=\"pref_auto_lock_type_device_lock\">Il dispositivo viene bloccato</string>\n    <string name=\"pref_backup_password_category\">Backup ed esportazione</string>\n    <string name=\"pref_backup_password_title\">Password diversa per backup ed esportazione</string>\n    <string name=\"pref_backup_password_summary\">Se abilitato, la password utilizzata per sbloccare l\\'app non può più essere utilizzata per decifrare backup ed esportazioni.</string>\n    <string name=\"pref_backup_password_change_title\">Cambia la password per il backup e l\\'esportazione</string>\n    <string name=\"pref_backup_password_change_summary\">Imposta una nuova password che verrà utilizzata per cifrare la cassaforte durante il backup e l\\'esportazione.</string>\n    <string name=\"pref_encryption_title\">Crittografia</string>\n    <string name=\"pref_encryption_summary\">Cripta il database e sbloccalo con password o impronta digitale</string>\n    <string name=\"pref_biometrics_title\">Sblocco biometrico</string>\n    <string name=\"pref_biometrics_summary\">Consenti l\\'autenticazione biometrica per sbloccare la cassaforte</string>\n    <string name=\"pref_search_behavior_summary\">Cerca attraverso: %s</string>\n    <string name=\"pref_search_behavior_prompt\">Cerca in uno dei seguenti campi</string>\n    <string name=\"pref_search_behavior_type_name\">Nome</string>\n    <string name=\"pref_search_behavior_type_issuer\">Servizio</string>\n    <string name=\"pref_search_behavior_type_note\">Nota</string>\n    <string name=\"pref_search_behavior_type_groups\">Gruppi</string>\n    <string name=\"pref_set_password_title\">Cambia password</string>\n    <string name=\"pref_set_password_summary\">Modifica la password utilizzata per sbloccare la tua cassaforte</string>\n    <string name=\"no_events_title\">Nessun evento segnalato</string>\n    <string name=\"no_events_description\">Non sono stati segnalati eventi importanti all\\'interno dell\\'applicazione</string>\n    <string name=\"event_title_vault_unlocked\">Cassaforte sbloccata</string>\n    <string name=\"event_description_vault_unlocked\">La cassaforte è stata sbloccata con successo</string>\n    <string name=\"event_title_backup_created\">Backup creato</string>\n    <string name=\"event_description_backup_created\">Un backup della cassaforte è stato creato con successo</string>\n    <string name=\"event_title_android_backup_created\">Backup creato da Android</string>\n    <string name=\"event_description_android_backup_created\">Un backup della cassaforte è stato creato con successo da Android</string>\n    <string name=\"event_title_vault_exported\">Cassaforte esportata</string>\n    <string name=\"event_description_vault_exported\">Una copia della cassaforte è stata esportata</string>\n    <string name=\"event_title_entry_shared\">Elemento condiviso</string>\n    <string name=\"event_description_entry_shared\">Un elemento è stato condiviso</string>\n    <string name=\"event_title_vault_unlock_failed_password\">Sblocco della cassaforte non riuscito (password)</string>\n    <string name=\"event_description_vault_unlock_failed_password\">Un tentativo di sbloccare la cassaforte con una password non riuscito</string>\n    <string name=\"event_title_vault_unlock_failed_biometrics\">Sblocco della cassaforte non riuscito (biometrica)</string>\n    <string name=\"event_description_vault_unlock_failed_biometrics\">Un tentativo di sbloccare la cassaforte con dati biometrici non riuscito</string>\n    <string name=\"event_unknown\">Tipo di evento sconosciuto</string>\n    <string name=\"audit_log_entry_deleted\">(eliminato)</string>\n    <string name=\"today_at_time\">Oggi alle %1$s</string>\n    <string name=\"day_of_week_at_time\">%1$s alle %2$s</string>\n    <string name=\"export_encrypted\">Cripta la cassaforte</string>\n    <string name=\"export_help\">Questa azione esporterà la cassaforte al di fuori dello spazio di archiviazione interno di Aegis. Seleziona il formato che vorresti utilizzare per l\\'esportazione:</string>\n    <string name=\"export_warning_unencrypted\">Stai per esportare una copia non criptata della tua cassaforte Aegis. <b>Questo non è consigliato</b>.</string>\n    <string name=\"export_warning_password\">Le esportazioni vengono crittografate utilizzando una password diversa configurata nelle impostazioni di sicurezza.</string>\n    <string name=\"understand_risk_accept\">Sono consapevole del rischio</string>\n    <string name=\"export_format_aegis\">Aegis (.JSON)</string>\n    <string name=\"export_format_google_auth_uri\">File di testo (.TXT)</string>\n    <string name=\"export_format_html\">Pagina web (.HTML)</string>\n    <string name=\"export_format_hint\">Formato di esportazione</string>\n    <string name=\"export_all_groups\">Esporta tutti i gruppi</string>\n    <string name=\"export_choose_groups\">Seleziona i gruppi da esportare</string>\n    <plurals name=\"export_groups_selected_count\">\n        <item quantity=\"one\">%d gruppo selezionato</item>\n        <item quantity=\"other\">%d gruppi selezionati</item>\n    </plurals>\n    <string name=\"export_no_groups_selected\">Non sono stati selezionati gruppi da esportare</string>\n    <string name=\"export_html_title\" comment=\"The title of an HTML export document\">Esportazione di Aegis Authenticator</string>\n    <string name=\"choose_authentication_method\">Sicurezza</string>\n    <string name=\"authentication_method_explanation\">Aegis è un\\'app per l\\'autenticazione a due fattori incentrata sulla sicurezza. I token sono memorizzati in una cassaforte che può essere opzionalmente crittografata con una password. Se un utente malintenzionato ottiene il file criptato della cassaforte, non sarà in grado di accedere ai contenuti senza conoscere la password.\\n\\nAbbiamo già selezionato l\\'opzione che riteniamo più adatta per il tuo dispositivo.</string>\n    <string name=\"authentication_method_none\">Nessuna</string>\n    <string name=\"authentication_method_none_description\">La cassaforte non verrà cifrata e non sarà necessaria alcuna password per sbloccarla. <b>Questa opzione non è consigliata</b>.</string>\n    <string name=\"authentication_method_password\">Password</string>\n    <string name=\"authentication_method_password_description\">È necessaria una password per sbloccare la cassaforte.</string>\n    <string name=\"authentication_method_password_explanation\">Attenzione: Se dimentichi la password perderai definitivamente l\\'accesso ai token e non avrai modo di recuperarli.</string>\n    <string name=\"authentication_method_biometrics\">Biometrica</string>\n    <string name=\"authentication_method_biometrics_description\">Oltre a una password, i dati biometrici registrati su questo dispositivo, come un\\'impronta digitale o il tuo volto, possono essere utilizzati per sbloccare la cassaforte.</string>\n    <string name=\"authentication\">Sblocca la cassaforte</string>\n    <string name=\"authentication_multiline\" comment=\"The newline in the middle is used for aesthetic purposes\">Sblocca\\nla cassaforte</string>\n    <string name=\"auth_use_biometrics\">Oppure tocca qui per usare la <font fgcolor=\"#FF0D86C1\">biometria</font></string>\n    <string name=\"set_password\">Inserisci una password</string>\n    <string name=\"set_group\">Inserisci il nome di un gruppo</string>\n    <string name=\"set_number\">Inserisci un numero</string>\n    <string name=\"set_password_confirm\">Conferma la tua password</string>\n    <string name=\"invalid_password\">La password è errata</string>\n    <string name=\"invalidated_biometrics\">È stata rilevata una modifica delle impostazioni di sicurezza del tuo dispositivo. Vai in \\\"Aegis -&gt; Impostazioni -&gt; Sicurezza -&gt; Sblocco biometrico\\\" per disattivare e riattivare lo sblocco biometrico.</string>\n    <string name=\"password_reminder\">Inserisci la tua password. Ti chiediamo di farlo in modo da non dimenticarla.</string>\n    <string name=\"password_reminder_dialog_title\">Biometria per sblocco predefinito</string>\n    <string name=\"password_reminder_dialog_message\">Occasionalmente ti chiediamo di inserire la tua password per assicurarti di non averla dimenticata e rischiare di non potere più accedere alla tua cassaforte. Dopo aver inserito la password, Aegis reimposterà la biometria per lo sblocco predefinito, fino a quando ti verrà chiesto un nuovo promemoria password.</string>\n    <string name=\"password_reminder_freq_never\">Mai</string>\n    <string name=\"password_reminder_freq_weekly\">Ogni settimana</string>\n    <string name=\"password_reminder_freq_biweekly\">Ogni due settimane</string>\n    <string name=\"password_reminder_freq_monthly\">Ogni mese</string>\n    <string name=\"password_reminder_freq_quarterly\">Ogni tre mesi</string>\n    <string name=\"enter_password_2fas_message\">Sembra che questo backup 2FAS sia cifrato. Inserisci la password qui sotto.</string>\n    <string name=\"enter_password_authy_message\">Sembra che i tuoi token di Authy siano crittografati. Chiudi Aegis, apri Authy e sblocca i token con la password. In alternativa Aegis può anche tentare di decifrare i tuoi token Authy, se inserisci la password qui sotto.</string>\n    <string name=\"enter_password_aegis_title\">Inserisci la password d\\'importazione</string>\n    <string name=\"period_hint\">Periodo (secondi)</string>\n    <string name=\"algorithm_hint\">Funzione di hash</string>\n    <string name=\"type\">Tipo</string>\n    <string name=\"share\">Condividi</string>\n    <string name=\"yes\">Si</string>\n    <string name=\"no\">No</string>\n    <string name=\"undo\">Annulla</string>\n    <string name=\"unlock\">Sblocca</string>\n    <string name=\"advanced\">Avanzate</string>\n    <string name=\"counter\">Contatore</string>\n    <string name=\"digits\">Cifre</string>\n    <string name=\"secret\">Chiave segreta</string>\n    <string name=\"scan\">Scansiona codice QR</string>\n    <string name=\"scan_image\">Scansiona immagine</string>\n    <string name=\"enter_manually\">Inserisci manualmente</string>\n    <string name=\"set_up_biometric\">Imposta sblocco biometrico</string>\n    <string name=\"copy\">Copia</string>\n    <string name=\"edit\">Modifica</string>\n    <string name=\"select_all\">Seleziona tutto</string>\n    <string name=\"assign_icons\">Assegna icone</string>\n    <string name=\"assign_groups\">Assegna al gruppo</string>\n    <string name=\"assign_groups_dialog_summary\">Selezionare un gruppo al quale assegnare l\\'elemento selezionato.</string>\n    <string name=\"assign_groups_dialog_dropdown\">Seleziona un gruppo</string>\n    <string name=\"favorite\" comment=\"Verb\">Aggiungi ai preferiti</string>\n    <string name=\"unfavorite\" comment=\"Verb\">Rimuovi dai preferiti</string>\n    <string name=\"error_all_caps\">ERRORE</string>\n    <string name=\"password\">Password</string>\n    <string name=\"confirm_password\">Conferma password</string>\n    <string name=\"show_password\">Mostra password</string>\n    <string name=\"new_entry\">Nuovo elemento</string>\n    <string name=\"add_new_entry\">Aggiungi nuovo elemento</string>\n    <string name=\"unlock_vault_error\">Impossibile sbloccare la cassaforte</string>\n    <string name=\"unlock_vault_error_description\">Password errata. Verifica di averla inserita correttamente.</string>\n    <string name=\"password_equality_error\">Le password devono essere identiche e non vuote</string>\n    <string name=\"snackbar_authentication_method\">Seleziona un metodo di autenticazione</string>\n    <string name=\"encrypting_vault\">Crittografia della cassaforte in corso</string>\n    <string name=\"exporting_vault\">Esportazione della cassaforte in corso</string>\n    <string name=\"optimizing_icon\">Ottimizzazione icona</string>\n    <string name=\"optimizing_icon_multiple\">Ottimizzazione icone %1$d/%2$d</string>\n    <string name=\"reading_file\">Lettura del file in corso</string>\n    <string name=\"requesting_root_access\">Richiesta accesso root</string>\n    <string name=\"analyzing_qr\">Analisi del codice QR</string>\n    <string name=\"analyzing_qr_multiple\">Analisi del codice QR %1$d/%2$d (%3$s)</string>\n    <plurals name=\"added_new_entries\">\n        <item quantity=\"one\">Aggiunta %d nuova voce alla cassaforte</item>\n        <item quantity=\"other\">Aggiunte %d nuove voci alla cassaforte</item>\n    </plurals>\n    <string name=\"importing_icon_pack\">Importazione del pacchetto icone in corso</string>\n    <string name=\"delete_entry\">Elimina elemento</string>\n    <string name=\"delete_entry_description\">Sei sicuro di voler eliminare questa voce?</string>\n    <string name=\"delete_entry_explanation\">L\\'autenticazione a due fattori di:\\n<b>%s</b>\\nnon verrà disabilitata.\\nPer evitare di perdere l\\'accesso al tuo account, assicurati di avere disabilitato l\\'autenticazione a due fattori o di avere un altro modo per generare codici per questo servizio.</string>\n    <string name=\"delete_entries\">Elimina elementi</string>\n    <plurals name=\"delete_entries_description\">\n        <item quantity=\"one\">Sei sicuro di voler eliminare %d elemento?</item>\n        <item quantity=\"other\">Sei sicuro di voler eliminare %d elementi?</item>\n    </plurals>\n    <string name=\"discard_changes\">Vuoi salvare le modifiche?</string>\n    <string name=\"discard_changes_description\">Le modifiche non sono state salvate</string>\n    <string name=\"saving_profile_error\">Errore nel salvataggio del profilo</string>\n    <string name=\"saving_assign_icons_error\">Errore nell\\'assegnazione delle icone</string>\n    <string name=\"welcome\">Benvenuto</string>\n    <string name=\"app_description\">Aegis è un\\'app per l\\'autenticazione a due fattori (2FA) gratuita, sicura e open source</string>\n    <string name=\"setup_completed\">Configurazione completata</string>\n    <string name=\"setup_completed_description\">Aegis è stata configurata e può essere usata.</string>\n    <string name=\"vault_not_found\">Cassaforte non trovata, avvio della configurazione…</string>\n    <string name=\"copied\">Copiato</string>\n    <string name=\"errors_copied\">Codice errore copiato negli appunti</string>\n    <string name=\"version_copied\">Versione copiata negli appunti</string>\n    <string name=\"error_required_field\">Questo campo è necessario</string>\n    <string name=\"error_occurred\">Si è verificato un errore</string>\n    <string name=\"decryption_error\">Si è verificato un errore nello sblocco della cassaforte</string>\n    <string name=\"decryption_corrupt_error\">Si è verificato un errore durante lo sblocco della cassaforte. Il file della cassaforte potrebbe essere danneggiato.</string>\n    <string name=\"saving_error\">Si è verificato un errore durante il salvataggio della cassaforte</string>\n    <string name=\"vault_init_error\">Si è verificato un errore durante il tentativo di inizializzare la cassaforte</string>\n    <string name=\"vault_load_error\">Si è verificato un errore durante il caricamento della cassaforte dalla memoria</string>\n    <string name=\"biometric_decrypt_error\">Si è verificato un errore durante il tentativo di decrittografia della cassaforte con autenticazione biometrica. Probabilmente le impostazioni di sicurezza del dispositivo sono state modificate. Sblocca la cassaforte con la password e configura nuovamente l\\'autenticazione biometrica nelle impostazioni di Aegis.</string>\n    <string name=\"biometric_init_error\">Si è verificato un errore durante l\\'inizializzazione dell\\'autenticazione biometrica. Questo accade di solito quando le impostazioni di sicurezza del dispositivo sono state modificate. Si prega di sbloccare la cassaforte con la password e riconfigurare l\\'autenticazione biometrica nelle impostazioni di Aegis.</string>\n    <string name=\"disable_encryption\">Disabilita la crittografia</string>\n    <string name=\"disable_encryption_description\">Sei sicuro di voler disabilitare la crittografia? La cassaforte verrà salvata sotto forma di testo semplice. <b>Verranno disabilitati anche i backup automatici</b>.</string>\n    <string name=\"enable_encryption_error\">Errore durante l\\'attivazione della crittografia</string>\n    <string name=\"disable_encryption_error\">Errore durante la disattivazione della crittografia</string>\n    <string name=\"backup_successful\">Il backup è stato pianificato correttamente</string>\n    <string name=\"backup_error\">Si è verificato un errore durante il tentativo di creare un backup</string>\n    <string name=\"backup_status_success\">Backup più recente riuscito: %s</string>\n    <string name=\"backup_status_failed\">Backup più recente fallito: %s</string>\n    <string name=\"backup_status_none\">Non sono stati ancora effettuati backup</string>\n    <string name=\"backup_warning_password\">I backup vengono cifrati utilizzando una password diversa configurata nelle impostazioni di sicurezza</string>\n    <string name=\"documentsui_error\">Sembra che DocumentsUI non sia installato sul tuo dispositivo. È un componente di sistema necessario per la selezione e creazione di documenti. Se hai usato uno strumento per fare il &quot;debloat&quot; del tuo dispositivo, potresti averlo disinstallato accidentalmente e dovrai reinstallarlo.</string>\n    <string name=\"icon_pack_import_error\">Si è verificato un errore durante l\\'importazione di un pacchetto di icone</string>\n    <string name=\"icon_pack_import_exists_error\">Il pacchetto di icone che stai tentando di importare esiste già. Vuoi sovrascriverlo?</string>\n    <string name=\"icon_pack_delete_error\">Si è verificato un errore nel tentativo di eliminare un pacchetto di icone</string>\n    <plurals name=\"icon_pack_info\">\n        <item quantity=\"one\">%d icona</item>\n        <item quantity=\"other\">%d icone</item>\n    </plurals>\n    <string name=\"icon_custom\">Personalizzato</string>\n    <string name=\"permission_denied\">Autorizzazione negata</string>\n    <string name=\"andotp_new_format\">Nuovo formato (v0.6.3 o più recente) </string>\n    <string name=\"andotp_old_format\">Vecchio formato (v0.6.2 o precedente) </string>\n    <string name=\"choose_andotp_importer\">Quale formato ha il file di backup di andOTP?</string>\n    <string name=\"choose_totpauth_importer\">Questo backup di TOTP Authenticator è crittografato con una password?</string>\n    <string name=\"choose_application\">Seleziona l\\'applicazione da cui vuoi importare un database</string>\n    <string name=\"choose_theme\">Seleziona il tema</string>\n    <string name=\"choose_account_name_position\">Seleziona la tua posizione preferita per il nome dell\\'account</string>\n    <string name=\"choose_view_mode\">Seleziona la modalità di visualizzazione</string>\n    <string name=\"choose_copy_behavior\">Seleziona il comportamento desiderato per la copia</string>\n    <string name=\"parsing_file_error\">Si è verificato un errore durante l\\'analisi del file</string>\n    <string name=\"file_not_found\">Errore: File non trovato</string>\n    <string name=\"reading_file_error\">Si è verificato un errore nel tentativo di leggere il file</string>\n    <string name=\"app_lookup_error\">Errore: App non installata</string>\n    <string name=\"app_version_error\">La versione di %s installata non è supportata. Le versioni più recenti hanno iniziato a criptare alcuni dei file nella directory di archiviazione interna, rendendo Aegis incapace di accedere alle informazioni necessarie per l\\'importazione. Il tentativo di importazione è probabile che dia luogo a un errore. Vuoi continuare comunque?</string>\n    <string name=\"root_error\">Errore: Impossibile ottenere l\\'accesso root</string>\n    <plurals name=\"imported_entries_count\">\n        <item quantity=\"one\">Importato %d elemento</item>\n        <item quantity=\"other\">Importati %d elementi</item>\n    </plurals>\n    <plurals name=\"entries_shown\">\n        <item quantity=\"one\">%d voce mostrata</item>\n        <item quantity=\"other\">%d voci mostrate</item>\n    </plurals>\n    <string name=\"intro_import_error_title\">Si è verificato un errore durante l\\'importazione della cassaforte</string>\n    <string name=\"import_error_title\">Si è verificato uno o più errori durante l\\'importazione</string>\n    <string name=\"exporting_vault_error\">Si è verificato un errore durante il tentativo di esportare la cassaforte</string>\n    <string name=\"exported_vault\">La cassaforte è stata esportata</string>\n    <string name=\"encryption_set_password_error\">Si è verificato un errore durante il tentativo di impostare la password.</string>\n    <string name=\"encryption_enable_biometrics_error\">Si è verificato un errore durante il tentativo di attivare lo sblocco biometrico. Su alcuni dispositivi l\\'autenticazione biometrica non è implementata correttamente ed è probabile che il tuo dispositivo rientri fra questi. Considera il passaggio allo sblocco con password.</string>\n    <string name=\"no_cameras_available\">Nessuna fotocamera disponibile</string>\n    <string name=\"read_qr_error\">Errore di lettura del codice QR</string>\n    <string name=\"read_qr_error_phonefactor\">Aegis non è compatibile con l\\'algoritmo di autenticazione a due fattori proprietario di Microsoft. Assicurati di selezionare \\\"Configura un\\'applicazione senza notifiche\\\" quando configuri l\\'autenticazione a due fattori in Office 365.</string>\n    <string name=\"partial_google_auth_import\">Rilevata esportazione di Google Authenticator incompleta</string>\n    <string name=\"partial_google_auth_import_warning\">Alcuni codici QR non sono presenti nell\\'importazione. Non sono stati trovati i seguenti codici:\\n\\n<b>%s</b>\\n\\nPuoi continuare a importare questa esportazione parziale, ma ti consigliamo di riprovare con tutti i codici QR in modo da non perdere l\\'accesso ai token.</string>\n    <string name=\"missing_qr_code_descriptor\">• QR code %d</string>\n    <plurals name=\"import_partial_export_anyway\">\n        <item quantity=\"one\">Importa comunque il token %d</item>\n        <item quantity=\"other\">Importa comunque i token %d</item>\n    </plurals>\n    <string name=\"import_google_auth_failure\">Importazione dell\\'esportazione di Google Authenticator non riuscita</string>\n    <string name=\"unrelated_google_auth_batches_error\">L\\'esportazione contiene informazioni per un lotto non correlato. Provare a importare un lotto alla volta.</string>\n    <string name=\"no_tokens_can_be_imported\">Di conseguenza non è possibile importare token</string>\n    <string name=\"unlocking_vault\">Sblocco della cassaforte</string>\n    <string name=\"rename_group\">Rinomina gruppo</string>\n    <string name=\"no_group_selection\">Se un elemento non fa parte di alcun gruppo, può essere trovato in \\\"Nessun gruppo\\\".</string>\n    <string name=\"remove_group\">Rimuovi gruppo</string>\n    <string name=\"remove_group_description\">Sei sicuro di voler rimuovere questo gruppo? Gli elementi in questo gruppo verranno automaticamente spostati in \\'Nessun gruppo\\'.</string>\n    <string name=\"remove_unused_groups\">Elimina gruppi non utilizzati</string>\n    <string name=\"remove_unused_groups_description\">Sei sicuro di voler eliminare tutti i gruppi non assegnati a una voce?</string>\n    <string name=\"remove_icon_pack\">Rimuovi pacchetto di icone</string>\n    <string name=\"remove_icon_pack_description\">Sei sicuro di voler rimuovere questo pacchetto di icone? Le voci che usano le icone di questo pacchetto non saranno modificate.</string>\n    <string name=\"details\">Dettagli</string>\n    <string name=\"show_error_details\">Mostra dettagli dell\\'errore</string>\n    <string name=\"lock\">Blocca</string>\n    <string name=\"name\">Nome</string>\n    <string name=\"no_group\">Nessun gruppo</string>\n    <string name=\"sort\" comment=\"Title of the Sort button in the top action bar of the main view\">Ordina</string>\n    <string name=\"sort_alphabetically\">Emittente (A-Z)</string>\n    <string name=\"sort_alphabetically_reverse\">Emittente (Z-A)</string>\n    <string name=\"sort_alphabetically_name\">Account (A-Z)</string>\n    <string name=\"sort_alphabetically_name_reverse\">Account (Z-A)</string>\n    <string name=\"sort_usage_count\">Numero di utilizzi</string>\n    <string name=\"sort_last_used\">Ultimo utilizzo</string>\n    <string name=\"sort_custom\">Personalizzato</string>\n    <string name=\"last_used\">Ultimo utilizzo</string>\n    <string name=\"last_used_never\">mai</string>\n    <string name=\"new_group\">Nuovo gruppo…</string>\n    <string name=\"group\">Gruppo</string>\n    <string name=\"group_name_hint\">Nome gruppo</string>\n    <string name=\"preference_manage_groups\">Modifica gruppi</string>\n    <string name=\"preference_manage_groups_summary\">Gestisci ed elimina i tuoi gruppi qui</string>\n    <string name=\"preference_reset_usage_count\">Azzera il numero di utilizzi</string>\n    <string name=\"preference_reset_usage_count_summary\">Azzera il numero di utilizzi di ogni voce nella tua cassaforte</string>\n    <string name=\"preference_reset_usage_count_dialog\">Sei sicuro di voler riportare a zero il numero di utilizzi di ogni voce nella tua cassaforte?</string>\n    <string name=\"note\" comment=\"Users can add a note to an entry\">Nota</string>\n    <string name=\"clear\">Pulisci</string>\n    <string name=\"dialog_duplicate_entry_title\" comment=\"'Duplicate' is a noun here\">Voce duplicata</string>\n    <string name=\"dialog_duplicate_entry_message\">Questa voce ha lo stesso nome e lo stesso emittente di una o più voci esistenti. Come vuoi procedere?</string>\n    <string name=\"dialog_duplicate_entry_overwrite_title\">Sovrascrivi la voce o le voci esistenti</string>\n    <string name=\"dialog_duplicate_entry_overwrite_subtitle\">Sostituisci la voce o le voci esistenti con quella nuova. Questa azione non può essere annullata</string>\n    <string name=\"dialog_duplicate_entry_suffix_title\">Aggiungi suffisso</string>\n    <string name=\"dialog_duplicate_entry_suffix_subtitle\">Aggiungi un suffisso al nome di questa nuova voce. Il nuovo nome sarà:%s</string>\n    <string name=\"dialog_duplicate_entry_cancel_title\">Annulla salvataggio</string>\n    <string name=\"dialog_duplicate_entry_cancel_subtitle\">Consente di modificare la voce prima di tentare di salvarla di nuovo</string>\n    <plurals name=\"dialog_duplicate_entry_overwrite_dialog_message\">\n        <item quantity=\"one\">Sei sicuro di voler eliminare la voce %d con il seguente nome:\\n\\n%s - %s</item>\n        <item quantity=\"other\">Sei sicuro di voler eliminare %d voci con il seguente nome:\\n\\n%s - %s</item>\n    </plurals>\n    <string name=\"dialog_duplicate_entry_overwrite_dialog_title\">Conferma eliminazione</string>\n    <string name=\"pref_haptic_feedback_summary\">Fai vibrare il dispositivo quando i codici si aggiornano</string>\n    <string name=\"pref_haptic_feedback_title\">Feedback aptico</string>\n    <string name=\"pref_highlight_entry_title\">Evidenzia i token al tocco</string>\n    <string name=\"pref_highlight_entry_summary\">Rendi i token più facili da distinguere, evidenziandoli temporaneamente quando vengono toccati</string>\n    <string name=\"pref_groups_multiselect_title\">Gruppi multiselezione</string>\n    <string name=\"pref_groups_multiselect_summary\">Consente la selezione multipla di più gruppi contemporaneamente</string>\n    <string name=\"pref_minimize_on_copy_title\">Minimizza alla copia</string>\n    <string name=\"pref_minimize_on_copy_summary\">Minimizza l\\'app dopo aver copiato un token</string>\n    <string name=\"pref_copy_behavior_title\">Copia i token negli appunti</string>\n    <string name=\"pref_search_behavior_title\">Comportamento di ricerca</string>\n    <string name=\"pref_pause_entry_title\">Blocca i token con un tocco</string>\n    <string name=\"pref_pause_entry_summary\">Metti in pausa l\\'aggiornamento automatico dei token toccandoli. I token non si aggiorneranno finché sono evidenziati. Richiede \\\"Evidenzia i token al tocco\\\" o \\\"Tocca per mostrare\\\".</string>\n    <string name=\"pin_keyboard_description\">Inserisci la password per abilitare la tastiera PIN. Funziona solo se la password è composta di soli numeri</string>\n    <string name=\"pin_keyboard_error\">Errore nell\\'abilitare la tastiera PIN</string>\n    <string name=\"pin_keyboard_error_description\">Non è possibile impostare la tastiera PIN. La password dev\\'essere composta solo da numeri.</string>\n    <string name=\"pin_keyboard_disabled\">La password è stata modificata. La tastiera PIN non verrà più visualizzata.</string>\n    <string name=\"selected\">Selezionato</string>\n    <string name=\"dark_theme_title\">Tema scuro</string>\n    <string name=\"light_theme_title\">Tema chiaro</string>\n    <string name=\"amoled_theme_title\">Tema AMOLED</string>\n    <string name=\"system_theme_title\">Predefinito di sistema</string>\n    <string name=\"system_amoled_theme_title\">Predefinito di sistema (AMOLED)</string>\n    <string name=\"normal_viewmode_title\">Normale</string>\n    <string name=\"compact_mode_title\">Compatto</string>\n    <string name=\"small_mode_title\">Piccolo</string>\n    <string name=\"tiles_mode_title\">Schede</string>\n    <string name=\"unknown_issuer\">Emittente sconosciuto</string>\n    <string name=\"unknown_account_name\">Nome account sconosciuto</string>\n    <plurals name=\"import_error_dialog\">\n        <item quantity=\"one\">Aegis non può importare %d token. Questo token verrà ignorato. Premi \\'dettagli\\' per vedere ulteriori informazioni sull\\'errore.</item>\n        <item quantity=\"other\">Aegis non può importare %d token. Questi token verranno ignorati. Premi \\'dettagli\\' per vedere ulteriori informazioni sugli errori.</item>\n    </plurals>\n    <string name=\"unable_to_process_deeplink\">Impossibile elaborare il collegamento</string>\n    <string name=\"unable_to_read_qrcode_file\">Impossibile leggere ed elaborare il codice QR dal file: %s.</string>\n    <string name=\"unable_to_process_shared_text\">Impossibile elaborare il testo condiviso come OTP</string>\n    <string name=\"unable_to_read_qrcode_files\">Impossibile leggere ed elaborare alcuni dei codici QR. Solo %1$d/%2$d elementi verranno importati.</string>\n    <string name=\"unable_to_generate_qrcode\">Impossibile generare il codice QR</string>\n    <string name=\"select_picture\">Seleziona immagine</string>\n    <string name=\"select_icon\">Seleziona icona</string>\n    <string name=\"tile_open_vault\" comment=\"label for a quick settings tile that opens the app when tapped\">Apri cassaforte</string>\n    <string name=\"tile_open_scanner\" comment=\"label for a quick settings tile that opens the QR code scanner when tapped\">Apri scanner</string>\n    <string name=\"toggle_checkboxes\">Spunta</string>\n    <string name=\"search\">Cerca</string>\n    <string name=\"channel_name_lock_status\">Stato blocco</string>\n    <string name=\"channel_description_lock_status\">Aegis può mostrare una notifica permanente quando la cassaforte è sbloccata</string>\n    <string name=\"vault_unlocked_state\">Cassaforte sbloccata. Tocca qui per bloccare.</string>\n    <string name=\"version\">Versione</string>\n    <string name=\"changelog\">Changelog</string>\n    <string name=\"whats_new\">Novità</string>\n    <string name=\"github_description\">Codice sorgente, problemi e informazioni</string>\n    <string name=\"license\">Licenza</string>\n    <string name=\"license_description\">Aegis Authenticator è rilasciato sotto la licenza GPLv3</string>\n    <string name=\"third_party_licenses\">Licenze di terze parti</string>\n    <string name=\"third_party_licenses_description\">Licenze delle librerie di terze parti utilizzate da Aegis</string>\n    <string name=\"country_netherlands\">Paesi Bassi</string>\n    <string name=\"email_us\">Scrivici una email</string>\n    <string name=\"visit_website\">Visita il nostro sito web</string>\n    <string name=\"about_support\">Supporto</string>\n    <string name=\"support_rate\">Votaci</string>\n    <string name=\"support_rate_description\">Supportaci con una recensione nel Google Play Store</string>\n    <string name=\"webview_error\">Questo dispositivo non supporta la visualizzazione web, necessaria per visualizzare il changelog e la licenza. Manca un componente di sistema.</string>\n    <string name=\"email\">Email</string>\n    <string name=\"time_sync_warning_title\">Sincronizzazione automatica dell\\'ora</string>\n    <string name=\"time_sync_warning_message\">Aegis si basa sull\\'esatta sincronizzazione dell\\'orario di sistema per generare codici corretti. Una deviazione di pochi secondi potrebbe portare a codici errati. Sembra che il tuo dispositivo non sia configurato per sincronizzare automaticamente l\\'ora. Vuoi farlo adesso?</string>\n    <string name=\"time_sync_warning_disable\">Smettetela di avvertirmi. So cosa sto facendo.</string>\n    <string name=\"google_qr_export_unrelated\">Trovato codice QR non correlato. Prova a riavviare lo scanner.</string>\n    <plurals name=\"google_qr_export_scanned\">\n        <item quantity=\"one\">Scansionato %1$d/%2$d codici QR</item>\n        <item quantity=\"other\">Scansionati %1$d/%2$d codici QR</item>\n    </plurals>\n    <string name=\"google_qr_export_unexpected\">Atteso il codice QR #%1$d, ma invece è stato scansionato #%2$d</string>\n    <string name=\"backup_error_bar_message\"><b>Backup della cassaforte fallito recentemente</b></string>\n    <string name=\"backup_error_dialog_details\" comment=\"The first parameter is the type of backup (e.g. built-in or Android backup). The second parameter is an elapsed time in the style of 'x seconds/minutes/days ago'.\">        Un recente tentativo di backup della cassaforte con %1$s non è riuscito perché si è verificato un errore. Il backup è stato tentato %2$s. Verificare le impostazioni di backup per assicurarsi che i backup possano essere completati correttamente.\n    </string>\n    <string name=\"backup_permission_error_dialog_details\" comment=\"The first parameter is the type of backup (e.g. built-in or Android backup). The second parameter is an elapsed time in the style of 'x seconds/minutes/days ago'.\">        Un recente tentativo di backup della cassaforte con %1$s non è riuscito perché Aegis non aveva l\\'autorizzazione di scrittura nella destinazione del backup. Il backup è stato tentato %2$s. Questo errore può verificarsi se è stato spostata o rinominata la destinazione del backup o se recentemente è stato ripristinato Aegis da un backup. Configurare nuovamente la destinazione del backup.\n    </string>\n    <string name=\"backup_system_builtin\">i backup automatici integrati di Aegis</string>\n    <string name=\"backup_system_android\">il sistema di backup su cloud di Android</string>\n    <string name=\"backup_reminder_bar_message_with_latest\" comment=\"The parameter is an elapsed time in the style of 'x seconds/minutes/days ago'\">        L\\'ultimo backup è vecchio (%s)\n    </string>\n    <string name=\"backup_reminder_bar_message\">        Non è stato effettuato un backup delle modifiche\n    </string>\n    <string name=\"backup_reminder_bar_dialog_title\">Le modifiche non vengono sottoposte a backup</string>\n    <string name=\"backup_reminder_bar_dialog_summary\">        Le recenti modifiche alla cassaforte non sono ancora state sottoposte a backup. È importante eseguire backup regolari per evitare di perdere l\\'accesso ai propri account. Si consiglia di impostare i backup automatici nel menu delle impostazioni.    </string>\n    <string name=\"backup_reminder_bar_dialog_accept\">Configura i backup</string>\n    <string name=\"backup_plaintext_export_warning\"><b>La cassaforte è stata recentemente esportata in testo semplice</b></string>\n    <string name=\"pref_show_plaintext_warning_hint\">Non mostrare più questo avviso</string>\n    <string name=\"backup_plaintext_warning_explanation\">Questo avviso viene visualizzato perché di recente è stata esportata una copia non crittografata della cassaforte. Per mantenere la sicurezza dei tuoi token, ti consigliamo di eliminare questo file quando non è più necessario.</string>\n    <string name=\"switch_camera\">Cambia fotocamera</string>\n    <string name=\"empty_list\">Non ci sono codici. Aggiungine uno premendo il tasto \\'+\\' in basso a destra</string>\n    <string name=\"empty_list_title\">Nessun elemento trovato</string>\n    <string name=\"empty_group_list\">Non ci sono gruppi da mostrare. Aggiungi gruppi nella schermata di modifica di una voce</string>\n    <string name=\"empty_group_list_title\">Nessun gruppo trovato</string>\n    <string name=\"no_icon_packs\">Nessun pacchetto di icone è stato ancora importato. Suggerimento: prova <a href=\"https://aegis-icons.github.io\">aegis-icons</a>.</string>\n    <string name=\"no_icon_packs_title\">Nessun pacchetto di icone</string>\n    <string name=\"pick_icon\">Scegli un\\'icona</string>\n    <string name=\"uncategorized\">Senza categoria</string>\n    <string name=\"done\">Fine</string>\n    <plurals name=\"qr_count\">\n        <item quantity=\"one\">%d / %d codice QR</item>\n        <item quantity=\"other\">%d / %d codici QR</item>\n    </plurals>\n    <string name=\"next\">Avanti</string>\n    <string name=\"previous\">Indietro</string>\n    <string name=\"copy_uri\">Copia URI</string>\n    <string name=\"unable_to_copy_uri_to_clipboard\">Impossibile copiare l\\'URI negli appunti</string>\n    <string name=\"uri_copied_to_clipboard\">URI copiato negli appunti</string>\n    <string name=\"transfer_entry_description\">Scansiona questo codice QR con l\\'app di autenticazione a cui vuoi trasferire questa voce</string>\n    <string name=\"transfer_entry_brightness\">Tocca il codice QR per attivare o disattivare la luminosità a schermo intero</string>\n    <string name=\"google_auth_compatible_transfer_description\">Scansiona questi codici QR con Aegis o Google Authenticator.\\n\\nA causa delle limitazioni dell\\'app Google Authenticator, sono inclusi solo i token TOTP e HOTP che utilizzano SHA1 e producono codici a 6 cifre</string>\n    <string name=\"password_strength_very_weak\">Molto debole</string>\n    <string name=\"password_strength_weak\">Debole</string>\n    <string name=\"password_strength_fair\">Sufficiente</string>\n    <string name=\"password_strength_good\">Buona</string>\n    <string name=\"password_strength_strong\">Forte</string>\n    <string name=\"password_strength_unknown\">Password troppo lunga per l\\'analisi della robustezza</string>\n    <string name=\"pref_pin_keyboard_title\">Usa la tastiera PIN nella schermata di blocco</string>\n    <string name=\"pref_pin_keyboard_summary\">Abilita questa opzione se vuoi utilizzare la tastiera PIN nella schermata di blocco. Funziona solo per le password numeriche</string>\n    <string name=\"title_activity_preferences\">Impostazioni</string>\n    <string name=\"title_activity_manage_groups\">Gestisci gruppi</string>\n    <string name=\"title_activity_transfer\">Trasferisci voci</string>\n    <string name=\"title_activity_about\">Informazioni</string>\n    <string name=\"title_activity_edit_entry\">Modifica voce</string>\n    <string name=\"title_activity_scan_qr\">Scansiona un codice QR</string>\n    <string name=\"title_activity_import_entries\">Importa voci</string>\n    <string name=\"title_activity_assign_icons\">Assegna icone</string>\n    <string name=\"title_activity_licenses\">Licenze di terze parti</string>\n    <string name=\"dialog_wipe_entries_title\">Cancella voci</string>\n    <string name=\"dialog_wipe_entries_message\">La tua cassaforte contiene già delle voci. Rimuovere queste voci prima di importare questo file?\\n\\n<b>In questo modo, perderai definitivamente l\\'accesso alle voci esistenti nella cassaforte.</b></string>\n    <string name=\"dialog_wipe_entries_checkbox\">Cancella contenuto della cassaforte</string>\n    <string name=\"panic_trigger_ignore_toast\">Aegis ha ignorato il segnale di emergenza perché l\\'opzione corrispondente è disabilitata</string>\n    <string name=\"pref_panic_trigger_title\">Elimina cassaforte al segnale di emergenza</string>\n    <string name=\"pref_panic_trigger_summary\">Elimina la cassaforte quando Ripple invia un segnale di emergenza</string>\n    <string name=\"import_vault\">Importa cassaforte di Aegis</string>\n    <string name=\"import_vault_hint\">Vuoi importare da un\\'app 2FA differente? Completa prima la configurazione e poi vai al menu delle impostazioni.</string>\n    <plurals name=\"import_duplicate_toast\">\n        <item quantity=\"one\">Deselezionato %d potenziale duplicato. Si prega di rivedere l\\'elenco delle voci.</item>\n        <item quantity=\"other\">Deselezionati %d potenziali duplicati. Si prega di rivedere l\\'elenco delle voci.</item>\n    </plurals>\n    <string name=\"importer_help_2fas\">Seleziona un backup di 2FAS Authenticator.</string>\n    <string name=\"importer_help_aegis\">Seleziona un file di backup di Aegis.</string>\n    <string name=\"importer_help_authenticator_plus\">Seleziona un file di esportazione di Authenticator Plus ottenuto da <b>Impostazioni -&gt; Backup &amp; Ripristino -&gt; Esporta come testo e HTML</b>.</string>\n    <string name=\"importer_help_authy\">Seleziona una copia di <b>/data/data/com.authy.authy/shared_prefs/com.authy.storage.tokens.authenticator.xml</b>, situata nella directory della memoria interna di Authy.</string>\n    <string name=\"importer_help_andotp\">Seleziona un file di backup di andOTP.</string>\n    <string name=\"importer_help_bitwarden\">Seleziona un file di esportazione/backup di Bitwarden. I file crittografati non sono supportati.</string>\n    <string name=\"importer_help_battle_net_authenticator\">Seleziona una copia di <b>/data/data/com.blizzard.messenger/shared_prefs/com.blizzard.messenger.authenticator_preferences.xml</b>, situata nella directory della memoria interna di Battle.net Authenticator.</string>\n    <string name=\"importer_help_duo\">Seleziona una copia di <b>/data/data/com.duosecurity.duomobile/files/duokit/accounts.json</b>, che si trova nella cartella di archiviazione interna di DUO.</string>\n    <string name=\"importer_help_ente_auth\">Fornire un file di esportazione di Ente Auth. Attualmente sono supportati solo i file non criptati.</string>\n    <string name=\"importer_help_freeotp\">FreeOTP 2: Fornire un file di backup.\\nFreeOTP 1.x: Fornire una copia di <b>/data/data/org.fedorahosted.freeotp/shared_prefs/tokens.xml</b>, che si trova nella directory di archiviazione interna di FreeOTP.</string>\n    <string name=\"importer_help_freeotp_plus\">Seleziona un file di esportazione di FreeOTP+.</string>\n    <string name=\"importer_warning_title_freeotp2\">Compatibilità con FreeOTP 2</string>\n    <string name=\"importer_warning_message_freeotp2\">Ci sono diversi problemi in FreeOTP 2 che possono portare a backup danneggiati. Aegis cercherà di recuperare il maggior numero possibile di voci, ma è possibile che alcune o addirittura tutte non vengano importate.</string>\n    <string name=\"importer_help_google_authenticator\"><b>Sono supportati solo i file di database di Google Authenticator v5.10 e precedenti</b>.\\n\\nSeleziona una copia di<b>/data/data/com.google.android.apps.authenticator2/databases/databases</b>, che si trova nella cartella di archiviazione interna di Google Authenticator.</string>\n    <string name=\"importer_help_microsoft_authenticator\">Seleziona una copia di <b>/data/data/com.azure.authenticator/databases/PhoneFactor</b>, che si trova nella cartella di archiviazione interna di Microsoft Authenticator.</string>\n    <string name=\"importer_help_plain_text\">Seleziona un file di testo con un URI di Google Authenticator in ogni riga.</string>\n    <string name=\"importer_help_proton_authenticator\">Seleziona un file di esportazione di Proton Authenticator (.json) ottenuto da <b>Impostazioni -&gt; Esporta</b>.</string>\n    <string name=\"importer_help_steam\"><b>Steam v3.0 e versioni successive non sono supportate</b>. Seleziona una copia di <b>/data/data/com.valvesoftware.android.steam.community/files/Steamguard-*.json</b>, che si trova nella cartella di archiviazione interna di Steam.</string>\n    <string name=\"importer_help_stratum\">Fornire un file di esportazione di Stratum ottenuto da <b>Impostazioni -&gt; Backup -&gt; Backup su file criptato (consigliato)</b>.</string>\n    <string name=\"importer_help_totp_authenticator\">Seleziona un file di esportazione di TOTP Authenticator.</string>\n    <string name=\"importer_help_winauth\">Seleziona un file di esportazione di WinAuth.</string>\n    <string name=\"import_assign_icons_dialog_title\">Assegna icone</string>\n    <string name=\"import_assign_icons_dialog_text\">Vuoi assegnare le icone alle voci importate?</string>\n    <string name=\"importer_encrypted_exception_google_authenticator\">L\\'elemento crittografato è stato ignorato: %s</string>\n    <string name=\"importer_help_direct\">Importa le voci direttamente da %s. Questa funzionalità richiede che l\\'app sia installata sul dispositivo e che Aegis possa ottenere i permessi di root.</string>\n    <string name=\"groups\">Gruppi</string>\n    <string name=\"pref_focus_search\">Apri ricerca all\\'avvio dell\\'app</string>\n    <string name=\"pref_focus_search_summary\">Apri la ricerca subito dopo aver aperto l\\'app.</string>\n    <string name=\"pref_grouping_halves\">Metà</string>\n    <string name=\"pref_grouping_none\">Nessun raggruppamento</string>\n    <string name=\"pref_grouping_size_two\">Gruppi di 2</string>\n    <string name=\"pref_grouping_size_three\">Gruppi di 3</string>\n    <string name=\"pref_grouping_size_four\">Gruppi di 4</string>\n    <string name=\"pref_copy_behavior_never\">Mai</string>\n    <string name=\"pref_copy_behavior_single_tap\">Tocco singolo</string>\n    <string name=\"pref_copy_behavior_double_tap\">Doppio tocco</string>\n    <string name=\"pref_account_name_position_hidden\">Nascosto</string>\n    <string name=\"pref_account_name_position_end\">Accanto al servizio</string>\n    <string name=\"pref_account_name_position_below\">Sotto all\\'emittente</string>\n    <plurals name=\"time_elapsed_seconds\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"one\">%d secondo fa</item>\n        <item quantity=\"other\">%d secondi fa</item>\n    </plurals>\n    <plurals name=\"time_elapsed_minutes\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"one\">%d minuto fa</item>\n        <item quantity=\"other\">%d minuti fa</item>\n    </plurals>\n    <plurals name=\"time_elapsed_hours\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"one\">%d ora fa</item>\n        <item quantity=\"other\">%d ore fa</item>\n    </plurals>\n    <plurals name=\"time_elapsed_days\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"one\">%d giorno fa</item>\n        <item quantity=\"other\">%d giorni fa</item>\n    </plurals>\n    <plurals name=\"time_elapsed_years\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"one\">%d anno fa</item>\n        <item quantity=\"other\">%d anni fa</item>\n    </plurals>\n    <plurals name=\"dropdown_checkboxes_default_count\">\n        <item quantity=\"one\">%d elemento selezionato</item>\n        <item quantity=\"other\">%d elementi selezionati</item>\n    </plurals>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-it-rIT-v29/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"system_theme_title\">Predefinito di sistema</string>\n    <string name=\"system_amoled_theme_title\">Predefinito di sistema (AMOLED)</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-iw-rIL/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources xmlns:tools=\"http://schemas.android.com/tools\">\n    <string name=\"action_settings\">הגדרות</string>\n    <string name=\"action_about\">אודות</string>\n    <string name=\"action_delete\">מחיקה</string>\n    <string name=\"action_transfer\">העברה</string>\n    <string name=\"action_edit_icon\">עריכת סמליל</string>\n    <string name=\"action_reset_usage_count\">אפס ספירת שימוש</string>\n    <string name=\"action_reset_usage_count_dialog\">האם אתם בטוחים שאתם רוצים לשנות את ספירת השימוש בסעיף הזה ל-0?</string>\n    <string name=\"action_default_icon\">שיחזור סמליל ברירת-מחדל</string>\n    <string name=\"discard\">ביטול</string>\n    <string name=\"save\">שמירה</string>\n    <string name=\"all\">הכל</string>\n    <string name=\"issuer\">מנפיק</string>\n    <string name=\"yandex_pin\">קוד (4-16 ספרות)</string>\n    <string name=\"motp_pin\">קוד (4- ספרות)</string>\n    <string name=\"suggested\">מוצע</string>\n    <string name=\"usage_count\">ספירת שימוש</string>\n    <string name=\"warning\">אזהרה</string>\n    <string name=\"pref_cat_appearance_app\">יישום</string>\n    <string name=\"pref_cat_appearance_entries\">פריטים</string>\n    <string name=\"pref_cat_backups_android\">אנדרואיד</string>\n    <string name=\"pref_cat_backups_auto\">גיבויים אוטומטיים</string>\n    <string name=\"pref_section_behavior_title\">התנהגות</string>\n    <string name=\"pref_section_behavior_summary\">התאם בעצמך את ההתנהגות בעת שימוש ברשימת הפריטים.</string>\n    <string name=\"pref_section_appearance_title\">מראה</string>\n    <string name=\"pref_section_appearance_summary\">שנה את ערכת הנושא, השפה והגדרות נוספות שמשפיעות על מראה היישום.</string>\n    <string name=\"pref_section_security_title\">אבטחה</string>\n    <string name=\"pref_section_security_summary\">קבע הצפנה, כניסה ביומטרית, נעילה אוטומטית והגדרות אבטחה נוספות.</string>\n    <string name=\"pref_section_import_export_title\">ייבוא &amp; ייצוא</string>\n    <string name=\"pref_section_import_export_summary\">ייבא גיבויים של Aegis ויישומי אימות נוספים.\nצור ייצואים ידניים של כספת ה-Aegis שלך.</string>\n    <string name=\"pref_section_audit_log_title\">יומן ביקורת</string>\n    <string name=\"pref_section_audit_log_summary\">מצא רשימה של כל האירועים החשובים שדווחו שקרו בתוך האפליקציה.</string>\n    <string name=\"pref_section_backups_title\">גיבויים</string>\n    <string name=\"pref_section_backups_summary\">קבע גיבויים אוטומטיים למיקום לבחירתך או אפשר השתתפות במערכת הגיבוי של אנדרואיד.</string>\n    <string name=\"pref_section_icon_packs\">ערכות סמלילים</string>\n    <string name=\"pref_section_icon_packs_summary\">נהל וייבא ערכות סמלילים</string>\n    <string name=\"pref_select_theme_title\">ערכת נושא</string>\n    <string name=\"pref_dynamic_colors_title\">צבעים דינמים</string>\n    <string name=\"pref_dynamic_colors_summary\">החל שכבת-על המבוססת על הצבעים של ערכת הנושא של אנדרואיד</string>\n    <string name=\"pref_view_mode_title\">מצב תצוגה</string>\n    <string name=\"pref_lang_title\">שפה</string>\n    <string name=\"pref_show_icons_title\">הצגת סמלים</string>\n    <string name=\"pref_show_icons_summary\">הצגת סמלים לצד כל ערך</string>\n    <string name=\"pref_code_group_size_title\">קיבוץ ספרות קוד</string>\n    <string name=\"pref_code_group_size_summary\">בחר את מספר הספרות לקיבוץ קודים לפיהן</string>\n    <string name=\"pref_account_name_position_title\">הצג את שם החשבון</string>\n    <string name=\"pref_show_next_code_title\">הצג את הקוד הבא</string>\n    <string name=\"pref_show_next_code_summary\">צור והצג את הקוד הבא מבעוד מועד</string>\n    <string name=\"pref_expiration_state_title\">ציין מתי תוקף הקודים עומד לפוג</string>\n    <string name=\"pref_expiration_state_summary\">שנה את צבע הקודים ותן להם להבהב כשהם עומדים לפוג</string>\n    <string name=\"pref_expiration_state_fallback\">שנה את צבע הקודים כאשר תוקפם עומד לפוג</string>\n    <string name=\"pref_shared_issuer_account_name_title\">הצג את שם החשבון רק כאשר יש צורך</string>\n    <string name=\"pref_shared_issuer_account_name_summary\">הצג שמות חשבונות רק בכל פעם שהם חולקים את אותו מנפיק. שמות חשבונות אחרים יוסתרו.</string>\n    <string name=\"pref_import_file_title\">ייבוא מקובץ</string>\n    <string name=\"pref_import_file_summary\">ייבוא טוקנים מקובץ</string>\n    <string name=\"pref_android_backups_title\">גיבויי ענן אנדרואיד</string>\n    <string name=\"pref_android_backups_summary\">אפשר למערכת גיבוי הענן של אנדרואיד לכלול את הכספת של Aegis בגיבויים שלה. אפשרות זו נתמכת רק עבור כספות מוצפנות.</string>\n    <string name=\"pref_android_backups_hint\"><i>גיבויי התקן להתקן (D2D) מותרים תמיד, ללא קשר להגדרה לעיל</i></string>\n    <string name=\"pref_backups_title\">גיבוי אוטומטי של הכספת</string>\n    <string name=\"pref_backups_summary\">צור באופן אוטומטי גיבויים של הכספת באחסון חיצוני כאשר מתבצעים שינויים. אפשרות זו נתמכת רק עבור כספות מוצפנות.</string>\n    <string name=\"pref_backups_reminder_title\">תזכורת לגיבוי</string>\n    <string name=\"pref_backups_reminder_summary\">הצג תזכורת לגיבוי הכספת שלך למקרה שלא גיבית את השינויים האחרונים שלך.</string>\n    <string name=\"pref_backups_reminder_dialog_title\">השבת תזכורת גיבוי</string>\n    <string name=\"pref_backups_reminder_dialog_summary\">השבתת תזכורת זו פירושה ש-Aegis לא יגיד לך אם יש לך שינויים שעדיין לא מגובים. זה מעמיד אותך בסיכון לאבד גישה לאסימונים שלך. האם אתה בטוח שברצונך להשבית את התזכורת?</string>\n    <string name=\"pref_backups_versioning_strategy_title\">תכנית גיבויים</string>\n    <string name=\"pref_backups_versioning_strategy_keep_x_versions\">שמור מספר גרסאות</string>\n    <string name=\"pref_backups_versioning_strategy_single_backup\">גיבוי יחיד</string>\n    <string name=\"pref_backups_location_title\">מיקום הגיבוי</string>\n    <string name=\"pref_backups_location_summary\">הגיבויים יאוחסנו ב</string>\n    <string name=\"pref_backup_location_summary\">הגיבוי יאוחסן במיקום</string>\n    <string name=\"pref_backups_trigger_title\">הפעלת גיבוי</string>\n    <string name=\"pref_backups_trigger_summary\">הפעלה ידנית של גיבוי</string>\n    <string name=\"pref_backups_versions_title\">מספר הגירסאות שיש לשמור</string>\n    <string name=\"pref_backups_versions_infinite\">\\u221E</string>\n    <plurals name=\"pref_backups_versions_summary\">\n        <item quantity=\"one\">שמור %1$d את גירסת הגיבוי</item>\n        <item quantity=\"two\">שמור %1$d גירסאות של הגיבוי</item>\n        <item quantity=\"many\">שמור %1$d את גירסת הגיבוי</item>\n        <item quantity=\"other\">שמור %1$d את גירסת הגיבוי</item>\n    </plurals>\n    <string name=\"pref_backups_versions_infinite_summary\">שמור מספר לא מוגבל של גרסאות גיבוי</string>\n    <string name=\"pref_import_app_title\">ייבוא מיישום</string>\n    <string name=\"pref_import_app_summary\">ייבוא טוקנים מאפליקציה (דורש גישת שורש)</string>\n    <string name=\"pref_export_title\">ייצוא</string>\n    <string name=\"pref_export_summary\">ייצא את הכספת</string>\n    <string name=\"pref_password_reminder_title\">תזכורת לסיסמה</string>\n    <string name=\"pref_google_auth_export_title\">ייצוא עבור מאמת Google</string>\n    <string name=\"pref_google_auth_export_descriptor\">יוצר קודי QR לייצוא התואמים למאמת Google</string>\n    <string name=\"pref_google_auth_export_no_data\">אין נתונים לייצוא</string>\n    <plurals name=\"pref_google_auth_export_incompatible_entries\">\n        <item quantity=\"one\">דילג %d על ערך שאינו תואם</item>\n        <item quantity=\"two\">דילג %d על ערכים שאינם תואמים</item>\n        <item quantity=\"many\">דילג על %d ערך לא תואם</item>\n        <item quantity=\"other\">דילג על %d ערכים לא תואמים</item>\n    </plurals>\n    <string name=\"pref_password_reminder_summary\">הצג %s תזכורת להזנת הסיסמה, כדי שלא תשכח אותה.</string>\n    <string name=\"pref_password_reminder_summary_disabled\">מושבת</string>\n    <string name=\"pref_secure_screen_title\">אבטחת מסך</string>\n    <string name=\"pref_secure_screen_summary\">חסום צילומי מסך וניסיונות אחרים ללכוד את המסך בתוך האפליקציה</string>\n    <string name=\"pref_tap_to_reveal_title\">הקש כדי לחשוף</string>\n    <string name=\"pref_tap_to_reveal_summary\">טוקנים יוסתרו כברירת מחדל. הקש על הטוקנים כדי לחשוף קוד.</string>\n    <string name=\"pref_tap_to_reveal_time_title\">פסק זמן להקשה כדי לחשוף</string>\n    <string name=\"pref_auto_lock_title\">נעילה אוטומטית</string>\n    <string name=\"pref_auto_lock_summary\">מתי %s</string>\n    <string name=\"pref_auto_lock_summary_disabled\">מושבת</string>\n    <string name=\"pref_auto_lock_prompt\">נעילה אוטומטית של Aegis כאשר</string>\n    <string name=\"pref_auto_lock_type_back_button\">כאשר כפתור נלחץ</string>\n    <string name=\"pref_auto_lock_type_minimize\">האפליקציה ממוזערת</string>\n    <string name=\"pref_auto_lock_type_device_lock\">המכשיר נעול</string>\n    <string name=\"pref_backup_password_category\">גיבוי &amp; ייצוא</string>\n    <string name=\"pref_backup_password_title\">סיסמה נפרדת לגיבוי &amp; ייצוא</string>\n    <string name=\"pref_backup_password_summary\">אם אפשרות זו מופעלת, הסיסמה המשמשת לביטול נעילת האפליקציה אינה יכולה לשמש עוד לפענוח גיבויים וייצוא.</string>\n    <string name=\"pref_backup_password_change_title\">שינוי סיסמה לגיבוי &amp; ייצוא</string>\n    <string name=\"pref_backup_password_change_summary\">הגדר סיסמה חדשה שתשמש להצפנת הכספת במהלך הגיבוי והייצוא.</string>\n    <string name=\"pref_encryption_title\">הצפנה</string>\n    <string name=\"pref_encryption_summary\">הצפן את הכספת ופתח אותה באמצעות סיסמה או ביומטריה</string>\n    <string name=\"pref_biometrics_title\">נעילה ביומטרית</string>\n    <string name=\"pref_biometrics_summary\">אפשר אימות ביומטרי כדי לפתוח את הכספת</string>\n    <string name=\"pref_search_behavior_type_name\">שם</string>\n    <string name=\"pref_search_behavior_type_note\">הערה</string>\n    <string name=\"pref_search_behavior_type_groups\">קבוצות</string>\n    <string name=\"pref_set_password_title\">שנה סיסמא</string>\n    <string name=\"pref_set_password_summary\">הגדר סיסמה חדשה שתצטרך כדי לפתוח את נעילת הכספת שלך</string>\n    <string name=\"event_title_backup_created\">גיבוי נוצר</string>\n    <string name=\"audit_log_entry_deleted\">(נמחק)</string>\n    <string name=\"today_at_time\">היום בשעה %1$s</string>\n    <string name=\"day_of_week_at_time\">%1$s בשעה %2$s</string>\n    <string name=\"export_encrypted\">הצפנת הכספת</string>\n    <string name=\"export_help\">פעולה זו תייצא את הכספת מהאחסון הפנימי של Aegis. בחר את הפורמט שבו תרצה שהייצוא שלך יהיה:</string>\n    <string name=\"export_warning_unencrypted\">אתה עומד לייצא עותק לא מוצפן של כספת Aegis שלך. <b>זה לא מומלץ</b>.</string>\n    <string name=\"export_warning_password\">פעולות הייצוא מוצפנות באמצעות סיסמה נפרדת שהוגדרה בהגדרות האבטחה.</string>\n    <string name=\"understand_risk_accept\">אני מבין את הסיכון</string>\n    <string name=\"export_format_aegis\">Aegis (.JSON)</string>\n    <string name=\"export_format_google_auth_uri\">קובץ טקסט (.TXT)</string>\n    <string name=\"export_format_html\">דף אינטרנט (.HTML)</string>\n    <string name=\"export_format_hint\">פורמט ייצוא</string>\n    <string name=\"export_all_groups\">ייצוא כל הקבוצות</string>\n    <string name=\"export_choose_groups\">בחירת הקבוצות לייצוא</string>\n    <plurals name=\"export_groups_selected_count\">\n        <item quantity=\"one\">%d קבוצה שנבחרה</item>\n        <item quantity=\"two\">%d קבוצות שנבחרו</item>\n        <item quantity=\"many\">%d קבוצה שנבחרה</item>\n        <item quantity=\"other\">נבחרו %d קבוצות</item>\n    </plurals>\n    <string name=\"export_no_groups_selected\">לא נבחרו קבוצות לייצוא</string>\n    <string name=\"export_html_title\" comment=\"The title of an HTML export document\">Aegis מאמת ייצוא</string>\n    <string name=\"choose_authentication_method\">אבטחה</string>\n    <string name=\"authentication_method_explanation\">Aegis היא אפליקציית אימות דו-שלבי ממוקדת אבטחה. אסימונים מאוחסנים בכספת, שבאופן אופציונלי ניתן להצפין באמצעות סיסמה לבחירתך. אם תוקף משיג את קובץ הכספת המוצפן שלך, הוא לא יוכל לגשת לתוכן מבלי לדעת את הסיסמה. \\n\\nבחרנו מראש באפשרות שלדעתנו תתאים ביותר למכשיר שלך.</string>\n    <string name=\"authentication_method_none\">ללא</string>\n    <string name=\"authentication_method_none_description\">אין צורך בסיסמה כדי לפתוח את הכספת והיא לא תהיה מוצפנת. <b>אפשרות זו אינה מומלצת</b>.</string>\n    <string name=\"authentication_method_password\">סיסמא</string>\n    <string name=\"authentication_method_password_description\">יש צורך בסיסמה כדי לפתוח את הכספת.</string>\n    <string name=\"authentication_method_password_explanation\">אזהרה: אם תשכח את הסיסמה שלך, תאבד לצמיתות את הגישה לאסימונים שלך. אין דרך לשחזר אותם ללא הסיסמה.</string>\n    <string name=\"authentication_method_biometrics\">ביומטריה</string>\n    <string name=\"authentication_method_biometrics_description\">בנוסף לסיסמה, ניתן להשתמש בביומטריה הרשומה במכשיר זה, כמו טביעת אצבע או הפנים שלך, כדי לפתוח את הכספת.</string>\n    <string name=\"authentication\">פתיחת הכספת</string>\n    <string name=\"authentication_multiline\" comment=\"The newline in the middle is used for aesthetic purposes\">פתיחת \\nהכספת</string>\n    <string name=\"auth_use_biometrics\">או הקש כאן כדי להשתמש <font fgcolor=\"#FF0D86C1\">בביומטריה</font></string>\n    <string name=\"set_password\">נא להזין סיסמא</string>\n    <string name=\"set_group\">אנא הזן שם קבוצה</string>\n    <string name=\"set_number\">נא להזין מספר</string>\n    <string name=\"set_password_confirm\">אנא אשר את הסיסמה</string>\n    <string name=\"invalid_password\">הסיסמה שגויה</string>\n    <string name=\"invalidated_biometrics\">זוהה שינוי בהגדרות האבטחה של המכשיר. עבור אל \\\"\\\"הגדרות- &gt; -אבטחה&gt;- &gt; נעילה ביומטרית\\\"\\\" כדי להשבית ולהפעיל מחדש את הנעילה הביומטרית.</string>\n    <string name=\"password_reminder\">הזן את הסיסמה שלך. מדי פעם אנו מבקשים ממך לעשות זאת כדי שלא תשכח זאת.</string>\n    <string name=\"password_reminder_freq_never\">אף פעם</string>\n    <string name=\"password_reminder_freq_weekly\">שבועי</string>\n    <string name=\"password_reminder_freq_biweekly\">דו שבועי</string>\n    <string name=\"password_reminder_freq_monthly\">חודשי</string>\n    <string name=\"password_reminder_freq_quarterly\">רבעוני</string>\n    <string name=\"enter_password_2fas_message\">נראה שגיבוי 2FAS זה מוצפן. אנא הזן את הסיסמה למטה.</string>\n    <string name=\"enter_password_authy_message\">זה נראה כאילו אסימוני Authy שלך מוצפנים. אנא סגור את Aegis, פתח את Authy ובטל את נעילת האסימונים עם הסיסמה שלך. במקום זאת, Aegis יכולה גם לנסות לפענח עבורך את אסימוני Authy שלך, אם תזין את הסיסמה שלך למטה.</string>\n    <string name=\"enter_password_aegis_title\">אנא הזן את סיסמת הייבוא</string>\n    <string name=\"period_hint\">פרק זמן (שניות)</string>\n    <string name=\"algorithm_hint\">פונקציית Hash</string>\n    <string name=\"type\">סוג</string>\n    <string name=\"share\">שיתוף</string>\n    <string name=\"yes\">כן</string>\n    <string name=\"no\">לא</string>\n    <string name=\"unlock\">ביטול נעילה</string>\n    <string name=\"advanced\">מתקדם</string>\n    <string name=\"counter\">מונה</string>\n    <string name=\"digits\">ספרות</string>\n    <string name=\"secret\">סוד</string>\n    <string name=\"scan\">סריקת קוד QR</string>\n    <string name=\"scan_image\">סריקת תמונה</string>\n    <string name=\"enter_manually\">הזן באופן ידני</string>\n    <string name=\"set_up_biometric\">הגדרת נעילה ביומטרית</string>\n    <string name=\"copy\">העתק</string>\n    <string name=\"edit\">ערוך</string>\n    <string name=\"favorite\" comment=\"Verb\">מועדף</string>\n    <string name=\"unfavorite\" comment=\"Verb\">בטל ההעדפה</string>\n    <string name=\"error_all_caps\">שגיאה</string>\n    <string name=\"password\">סיסמא</string>\n    <string name=\"confirm_password\">אשר סיסמא</string>\n    <string name=\"show_password\">הצג סיסמא</string>\n    <string name=\"new_entry\">ערך חדש</string>\n    <string name=\"add_new_entry\">הוסף ערך חדש</string>\n    <string name=\"unlock_vault_error\">לא היתה אפשרות לפתוח את הכספת</string>\n    <string name=\"unlock_vault_error_description\">סיסמה שגויה. ודא שלא הקלדת את הסיסמה שלך באופן שגוי.</string>\n    <string name=\"password_equality_error\">סיסמאות צריכות להיות זהות ולא ריקות</string>\n    <string name=\"snackbar_authentication_method\">בחר שיטת אימות</string>\n    <string name=\"encrypting_vault\">הצפנת הכספת</string>\n    <string name=\"exporting_vault\">ייצוא הכספת</string>\n    <string name=\"optimizing_icon\">מייעל סמל</string>\n    <string name=\"optimizing_icon_multiple\">מייעל סמלים %1$d/%2$d</string>\n    <string name=\"reading_file\">קריאת קובץ</string>\n    <string name=\"requesting_root_access\">בקשת גישה לשורש</string>\n    <string name=\"analyzing_qr\">ניתוח קוד QR</string>\n    <plurals name=\"added_new_entries\">\n        <item quantity=\"one\">הוספה %d כניסה חדשה לכספת</item>\n        <item quantity=\"two\">נוספו %d ערכים חדשים לכספת</item>\n        <item quantity=\"many\">הוספה %d כניסה חדשה לכספת</item>\n        <item quantity=\"other\">הוספה %d כניסה חדשה לכספת</item>\n    </plurals>\n    <string name=\"importing_icon_pack\">ייבוא חבילת סמלים</string>\n    <string name=\"delete_entry\">מחיקת ערך</string>\n    <string name=\"delete_entry_description\">האם אתה בטוח שברצונך למחוק את הערך הזה?</string>\n    <string name=\"delete_entry_explanation\">פעולה זו אינה משביתה את האימות הדו-שלבי עבור\\n<b>%s</b>\\n\\n כדי למנוע אובדן גישה, לוודא שהשבתת את האימות הדו-שלבי או שיש לך דרך חלופית ליצור קודים עבור שירות זה.</string>\n    <string name=\"delete_entries\">מחיקת ערכים</string>\n    <string name=\"discard_changes\">לבטל שינויים?</string>\n    <string name=\"discard_changes_description\">השינויים שלך לא נשמרו</string>\n    <string name=\"saving_profile_error\">שגיאה בשמירת פרופיל</string>\n    <string name=\"welcome\">ברוך הבא</string>\n    <string name=\"app_description\">Aegis היא אפליקציית אימות דו-שלבי חינמית, מאובטחת וקוד פתוח</string>\n    <string name=\"setup_completed\">ההתקנה הושלמה</string>\n    <string name=\"setup_completed_description\">Aegis הוקמה והיא מוכנה לצאת לדרך.</string>\n    <string name=\"vault_not_found\">הכספת לא נמצאה, החל בהתקנה…</string>\n    <string name=\"copied\">הועתק</string>\n    <string name=\"errors_copied\">שגיאות הועתקו ללוח</string>\n    <string name=\"version_copied\">הגרסה הועתקה ללוח</string>\n    <string name=\"error_occurred\">אירעה שגיאה</string>\n    <string name=\"decryption_error\">אירעה שגיאה בעת ניסיון לפתוח את הכספת</string>\n    <string name=\"decryption_corrupt_error\">אירעה שגיאה בעת ניסיון לפתוח את הכספת. ייתכן שקובץ הכספת שלך פגום.</string>\n    <string name=\"saving_error\">אירעה שגיאה בעת ניסיון לשמור את הכספת</string>\n    <string name=\"vault_init_error\">אירעה שגיאה בעת ניסיון לאתחל את הכספת</string>\n    <string name=\"vault_load_error\">אירעה שגיאה בעת ניסיון לטעון את הכספת מהאחסון</string>\n    <string name=\"biometric_decrypt_error\">אירעה שגיאה בעת ניסיון לפענח את הכספת באמצעות אימות ביומטרי. זה בדרך כלל קורה רק אם הגדרות האבטחה של המכשיר שלך שונו. אנא פתח את נעילת הכספת עם הסיסמה שלך והגדר מחדש את האימות הביומטרי בהגדרות של Aegis.</string>\n    <string name=\"biometric_init_error\">אירעה שגיאה בעת ניסיון להכין אימות ביומטרי. זה בדרך כלל קורה רק אם הגדרות האבטחה של המכשיר שלך שונו. אנא פתח את נעילת הכספת עם הסיסמה שלך והגדר מחדש את האימות הביומטרי בהגדרות של Aegis.</string>\n    <string name=\"disable_encryption\">השבת את ההצפנה</string>\n    <string name=\"disable_encryption_description\">האם אתה בטוח שברצונך להשבית את ההצפנה? זה יגרום לאחסנת הכספת בטקסט רגיל. <b>גם גיבויים אוטומטיים יושבתו</b>.</string>\n    <string name=\"enable_encryption_error\">אירעה שגיאה בעת הפעלת ההצפנה</string>\n    <string name=\"disable_encryption_error\">אירעה שגיאה בעת השבתת ההצפנה</string>\n    <string name=\"backup_successful\">הגיבוי תוכנן בהצלחה</string>\n    <string name=\"backup_error\">אירעה שגיאה בעת ניסיון ליצור גיבוי</string>\n    <string name=\"backup_status_success\">הגיבוי האחרון הצליח: %s</string>\n    <string name=\"backup_status_failed\">הגיבוי האחרון נכשל: %s</string>\n    <string name=\"backup_status_none\">עדיין לא בוצעו גיבויים</string>\n    <string name=\"backup_warning_password\">גיבויים מוצפנים באמצעות סיסמה נפרדת המוגדרת בהגדרות אבטחה</string>\n    <string name=\"documentsui_error\">נראה כי DocumentsUI חסר במכשיר שלך. זהו מרכיב מערכת חשוב הכרחי לבחירה ויצירה של מסמכים. אם השתמשת בכלי ל- &quot;debloat&quot; המכשיר שלך, ייתכן שמחקת אותו בטעות ותצטרך להתקין אותו מחדש.</string>\n    <string name=\"icon_pack_import_error\">אירעה שגיאה בעת ניסיון לייבא חבילת אייקונים</string>\n    <string name=\"icon_pack_import_exists_error\">חבילת הסמלים שאתה מנסה לייבא כבר קיימת. האם אתה רוצה להחליף אותו?</string>\n    <string name=\"icon_pack_delete_error\">אירעה שגיאה בעת ניסיון למחוק חבילת אייקונים</string>\n    <string name=\"icon_custom\">מותאם אישית</string>\n    <string name=\"permission_denied\">הרשאה נדחתה</string>\n    <string name=\"andotp_new_format\">פורמט חדש (גרסה 0.6.3 ומעלה) </string>\n    <string name=\"andotp_old_format\">פורמט ישן (גרסה 0.6.2 ומעלה) </string>\n    <string name=\"choose_andotp_importer\">איזה פורמט יש לקובץ הגיבוי andOTP?</string>\n    <string name=\"choose_totpauth_importer\">האם גיבוי TOTP Authenticator זה מוצפן עם סיסמה?</string>\n    <string name=\"choose_application\">בחר את האפליקציה שממנה תרצה לייבא</string>\n    <string name=\"choose_theme\">בחר את הנושא הרצוי</string>\n    <string name=\"choose_view_mode\">בחר את מצב התצוגה הרצוי</string>\n    <string name=\"parsing_file_error\">אירעה שגיאה בעת ניסיון לנתח את הקובץ</string>\n    <string name=\"file_not_found\">שגיאה: הקובץ לא נמצא</string>\n    <string name=\"reading_file_error\">אירעה שגיאה בעת ניסיון לקרוא את הקובץ</string>\n    <string name=\"app_lookup_error\">שגיאה: האפליקציה לא מותקנת</string>\n    <string name=\"app_version_error\">הגרסה של %s המותקנת אינה נתמכת. גרסאות אחרונות החלו להצפין חלק מהקבצים בספריית האחסון הפנימית, מה שהופך את Aegis לא מסוגלת לגשת למידע שהיא צריכה לצורך הייבוא. ניסיון לייבא צפוי לגרום לשגיאה. האם תרצה להמשיך בכל מקרה?</string>\n    <string name=\"root_error\">שגיאה: לא ניתן להשיג גישת שורש</string>\n    <string name=\"intro_import_error_title\">אירעה שגיאה בעת ייבוא הכספת</string>\n    <string name=\"import_error_title\">אירעה שגיאה אחת או יותר במהלך הייבוא</string>\n    <string name=\"exporting_vault_error\">אירעה שגיאה בעת ניסיון לייצא את הכספת</string>\n    <string name=\"exported_vault\">הכספת יוצאה</string>\n    <string name=\"encryption_set_password_error\">אירעה שגיאה בעת ניסיון להגדיר את הסיסמה.</string>\n    <string name=\"encryption_enable_biometrics_error\">אירעה שגיאה בעת ניסיון לאפשר פתיחה ביומטרית. לחלק מהמכשירים יש יישומים גרועים של אימות ביומטרי וסביר להניח שהמכשיר שלך הוא אחד מהם. שקול להחליף לתצורה של סיסמה בלבד במקום זאת.</string>\n    <string name=\"no_cameras_available\">אין מצלמות זמינות</string>\n    <string name=\"read_qr_error\">אירעה שגיאה בעת ניסיון לקרוא את קוד ה-QR</string>\n    <string name=\"read_qr_error_phonefactor\">Aegis אינו תואם לאלגוריתם 2FA הקנייני של מיקרוסופט. אנא הקפד לבחור \\\"הגדר יישום ללא התראות\\\" בעת הגדרת 2FA ב-Office 365.</string>\n    <string name=\"partial_google_auth_import\">זוהה ייצוא לא שלם של Google Authenticator</string>\n    <string name=\"partial_google_auth_import_warning\">כמה קודי QR חסרים בייבוא שלך. הקודים הבאים לא נמצאו:\\n\\n<b>%s</b>\\n\\nתוכל להמשיך לייבא את הייצוא החלקי הזה, אך אנו ממליצים לנסות שוב עם כל קודי ה-QR כדי לא להסתכן באובדן גישה לכל קודי אסימונים.</string>\n    <string name=\"missing_qr_code_descriptor\">• קוד QR %d</string>\n    <string name=\"import_google_auth_failure\">ייבוא ייצוא מאמת Google נכשל</string>\n    <string name=\"unrelated_google_auth_batches_error\">ייצוא מכיל מידע עבור אצווה לא קשורה. נסה לייבא אצווה אחת בכל פעם.</string>\n    <string name=\"no_tokens_can_be_imported\">לא ניתן לייבא אסימונים כתוצאה מכך</string>\n    <string name=\"unlocking_vault\">פתיחת הכספת</string>\n    <string name=\"remove_group\">הסר קבוצה</string>\n    <string name=\"remove_group_description\">האם אתה בטוח שברצונך להסיר קבוצה זו? ערכים בקבוצה זו יעברו באופן אוטומטי ל\\'אין קבוצה\\'.</string>\n    <string name=\"remove_icon_pack\">הסרת חבילת סמלים</string>\n    <string name=\"remove_icon_pack_description\">האם אתה בטוח שברצונך להסיר חבילת סמלים זו? ערכים המשתמשים בסמלים מחבילה זו לא יושפעו.</string>\n    <string name=\"details\">פרטים</string>\n    <string name=\"show_error_details\">הצג פרטי שגיאה</string>\n    <string name=\"lock\">נעל</string>\n    <string name=\"name\">שם</string>\n    <string name=\"no_group\">אין קבוצה</string>\n    <string name=\"sort\" comment=\"Title of the Sort button in the top action bar of the main view\">מיין</string>\n    <string name=\"sort_alphabetically\">מנפיק (א\\' עד ת\\')</string>\n    <string name=\"sort_alphabetically_reverse\">מנפיק (ת עד א)</string>\n    <string name=\"sort_alphabetically_name\">חשבון (א\\' עד ת\\')</string>\n    <string name=\"sort_alphabetically_name_reverse\">חשבון (ת\\' עד א\\')</string>\n    <string name=\"sort_usage_count\">ספירת שימוש</string>\n    <string name=\"sort_custom\">התאמה אישית</string>\n    <string name=\"new_group\">קבוצה חדשה…</string>\n    <string name=\"group\">קבוצה</string>\n    <string name=\"group_name_hint\">שם הקבוצה</string>\n    <string name=\"preference_manage_groups\">ערוך קבוצות</string>\n    <string name=\"preference_manage_groups_summary\">נהל ומחק את הקבוצות שלך כאן</string>\n    <string name=\"preference_reset_usage_count\">אפס ספירת שימוש</string>\n    <string name=\"preference_reset_usage_count_summary\">איפוס ספירת השימוש של כל ערך בכספת</string>\n    <string name=\"preference_reset_usage_count_dialog\">האם אתה בטוח שברצונך להגדיר את ספירת השימוש של כל ערך בכספת שלך ל- 0?</string>\n    <string name=\"note\" comment=\"Users can add a note to an entry\">הערה</string>\n    <string name=\"clear\">נקה</string>\n    <string name=\"pref_highlight_entry_title\">סימון טוקנים בעת הקשה</string>\n    <string name=\"pref_highlight_entry_summary\">הפוך אסימונים לקלים יותר להבחנה זה מזה על-ידי הדגשתם באופן זמני בעת הקשה עליהם</string>\n    <string name=\"pref_minimize_on_copy_title\">מזעור בהעתקה</string>\n    <string name=\"pref_minimize_on_copy_summary\">מזעור האפליקציה לאחר העתקת אסימון</string>\n    <string name=\"pref_pause_entry_title\">הקפאת טוקנים בעת הקשה</string>\n    <string name=\"pref_pause_entry_summary\">השהה רענון אוטומטי של אסימונים על-ידי הקשה עליהם. אסימונים לא יתעדכנו כל עוד הם ממוקדים. דורש \\\"סמן אסימונים בעת הקשה\\\" או \\\"הקש כדי לחשוף\\\".</string>\n    <string name=\"pin_keyboard_description\">הזן את הסיסמה שלך כדי להפעיל את מקלדת ה- PIN. שים לב שזה עובד רק אם הסיסמה שלך מורכבת ממספרים בלבד</string>\n    <string name=\"pin_keyboard_error\">שגיאה בהפעלת מקלדת PIN</string>\n    <string name=\"pin_keyboard_error_description\">לא ניתן להגדיר מקלדת PIN. הסיסמה שלך חייבת להיות מורכבת ממספרים בלבד.</string>\n    <string name=\"pin_keyboard_disabled\">הסיסמה השתנתה. מקלדת ה- PIN לא תוצג עוד.</string>\n    <string name=\"selected\">נבחר</string>\n    <string name=\"dark_theme_title\">עיצוב כהה</string>\n    <string name=\"light_theme_title\">מצב בהיר</string>\n    <string name=\"amoled_theme_title\">ערכת הנושא \\'אמולד\\'</string>\n    <string name=\"system_theme_title\">מוגדר על ידי חיסכון בצריכת הסוללה</string>\n    <string name=\"system_amoled_theme_title\">מוגדר על-ידי חיסכון בצריכת הסוללה (AMOLED)</string>\n    <string name=\"normal_viewmode_title\">רגיל</string>\n    <string name=\"compact_mode_title\">קומפקטי</string>\n    <string name=\"small_mode_title\">קטן</string>\n    <string name=\"unknown_issuer\">מנפיק לא ידוע</string>\n    <string name=\"unknown_account_name\">שם חשבון לא ידוע</string>\n    <string name=\"unable_to_process_deeplink\">לא ניתן לעבד קישור עמוק</string>\n    <string name=\"unable_to_read_qrcode_file\">לא ניתן לקרוא ולעבד קוד QR מהקובץ: %s.</string>\n    <string name=\"unable_to_process_shared_text\">לא ניתן לעבד טקסט משותף כ-OTP</string>\n    <string name=\"unable_to_generate_qrcode\">לא ניתן ליצור קוד QR</string>\n    <string name=\"select_picture\">בחר תמונה</string>\n    <string name=\"select_icon\">בחר סמל</string>\n    <string name=\"tile_open_vault\" comment=\"label for a quick settings tile that opens the app when tapped\">פתח כספת</string>\n    <string name=\"tile_open_scanner\" comment=\"label for a quick settings tile that opens the QR code scanner when tapped\">פתח את הסורק</string>\n    <string name=\"toggle_checkboxes\">החלף את תיבות הסימון</string>\n    <string name=\"search\">חיפוש</string>\n    <string name=\"channel_name_lock_status\">מצב נעילה</string>\n    <string name=\"channel_description_lock_status\">Aegis יכולה ליצור הודעה מתמשכת כדי להודיע לך כאשר הכספת נעולה</string>\n    <string name=\"vault_unlocked_state\">הכספת לא נעולה. הקש כאן כדי לנעול.</string>\n    <string name=\"version\">גירסה</string>\n    <string name=\"changelog\">יומן שינויים</string>\n    <string name=\"whats_new\">מה חדש</string>\n    <string name=\"github_description\">קוד מקור, בעיות ומידע</string>\n    <string name=\"license\">רישיון</string>\n    <string name=\"license_description\">Aegis Authenticator מורשה תחת GPLv3</string>\n    <string name=\"third_party_licenses\">רישיונות של צד שלישי</string>\n    <string name=\"third_party_licenses_description\">רישיונות של ספריות צד שלישי שבהן משתמשת Aegis</string>\n    <string name=\"country_netherlands\">הולנד</string>\n    <string name=\"email_us\">כתוב מייל</string>\n    <string name=\"visit_website\">בקר באתר שלנו</string>\n    <string name=\"about_support\">תמיכה</string>\n    <string name=\"support_rate\">דרג</string>\n    <string name=\"support_rate_description\">תמכו בנו על ידי השארת ביקורת בחנות Google Play</string>\n    <string name=\"webview_error\">מכשיר זה אינו תומך בתצוגת אינטרנט, הנחוצה להצגת יומן השינויים והרישיון. חסר לו רכיב מערכת.</string>\n    <string name=\"email\">אימייל</string>\n    <string name=\"time_sync_warning_title\">סנכרון זמן אוטומטי</string>\n    <string name=\"time_sync_warning_message\">Aegis מסתמכת על זמן המערכת להיות מסונכרן כדי ליצור קודים נכונים. סטייה של מספר שניות בלבד עלולה לגרום לקודים שגויים. נראה שהמכשיר שלך לא מוגדר לסנכרון אוטומטי של השעה. האם תרצה לעשות זאת כעת?</string>\n    <string name=\"time_sync_warning_disable\">תפסיק להזהיר אותי. אני יודע מה אני עושה.</string>\n    <string name=\"google_qr_export_unrelated\">נמצא קוד QR לא קשור. נסה להפעיל מחדש את הסורק.</string>\n    <string name=\"backup_error_bar_message\"><b>גיבוי הכספת נכשל לאחרונה</b></string>\n    <string name=\"backup_system_builtin\">גיבויים אוטומטיים מובנים של Aegis</string>\n    <string name=\"backup_system_android\">מערכת גיבוי בענן של אנדרואיד</string>\n    <string name=\"backup_reminder_bar_message_with_latest\" comment=\"The parameter is an elapsed time in the style of 'x seconds/minutes/days ago'\">        הגיבוי האחרון מיושן (%s)\n    </string>\n    <string name=\"backup_reminder_bar_message\">        השינויים לא מגובים\n    </string>\n    <string name=\"backup_reminder_bar_dialog_title\">שינויים אינם מגובים</string>\n    <string name=\"backup_reminder_bar_dialog_summary\">        שינויים אחרונים בכספת לא גובו עדיין. חשוב לקחת גיבויים קבועים כדי למנוע איבוד גישה לחשבונות שלך. אנא שקול להגדיר גיבויים אוטומטיים בתפריט ההגדרות.\n    </string>\n    <string name=\"backup_reminder_bar_dialog_accept\">הגדר גיבויים</string>\n    <string name=\"backup_plaintext_export_warning\"><b>הכספת יצאה לאחרונה בטקסט רגיל</b></string>\n    <string name=\"pref_show_plaintext_warning_hint\">אל תראה אזהרה זו שוב</string>\n    <string name=\"backup_plaintext_warning_explanation\">אזהרה זו מוצגת מכיוון שייצאת לאחרונה עותק לא מוצפן של הכספת. כדי לשמור על אבטחת האסימונים שלך, אנו ממליצים למחוק קובץ זה ברגע שאין בו עוד צורך.</string>\n    <string name=\"switch_camera\">החלף מצלמה</string>\n    <string name=\"empty_list\">אין קודים שיוצגו. התחל להוסיף ערכים על-ידי הקשה על סימן הפלוס בפינה השמאלית התחתונה</string>\n    <string name=\"empty_list_title\">לא נמצאו נתונים</string>\n    <string name=\"empty_group_list\">אין קבוצות שיוצגו. הוספת קבוצות במסך העריכה של ערך</string>\n    <string name=\"empty_group_list_title\">לא נמצאו קבוצות</string>\n    <string name=\"no_icon_packs\">עדיין לא יובאו חבילות סמלים. הקש על סימן החיבור כדי לייבא סימן חיבור. טיפ: נסו <a href=\"https://aegis-icons.github.io\">aegis-icons</a>.</string>\n    <string name=\"no_icon_packs_title\">אין חבילות סמלים</string>\n    <string name=\"pick_icon\">בחר סמל</string>\n    <string name=\"uncategorized\">ללא קטגוריה</string>\n    <string name=\"done\">בוצע</string>\n    <string name=\"next\">הבא</string>\n    <string name=\"previous\">הקודם</string>\n    <string name=\"copy_uri\">העתק שורת כתובת</string>\n    <string name=\"unable_to_copy_uri_to_clipboard\">לא ניתן להעתיק URI ללוח</string>\n    <string name=\"uri_copied_to_clipboard\">URI שהועתק ללוח</string>\n    <string name=\"transfer_entry_description\">סרוק קוד QR זה באמצעות אפליקציית המאמת שאליה ברצונך להעביר ערך זה</string>\n    <string name=\"google_auth_compatible_transfer_description\">סרוק קודי QR אלה באמצעות Aegis אוGoogle Authenticator.\\n\\n בשל מגבלות אפליקציית מאמת Google, רק אסימוני TOTP &amp; HOTP המשתמשים ב- SHA1 ומייצרים קודים בני 6 ספרות כלולים</string>\n    <string name=\"password_strength_very_weak\">חלש מאוד</string>\n    <string name=\"password_strength_weak\">חלש</string>\n    <string name=\"password_strength_fair\">סביר</string>\n    <string name=\"password_strength_good\">טוב</string>\n    <string name=\"password_strength_strong\">חזק</string>\n    <string name=\"pref_pin_keyboard_title\">שימוש במקלדת PIN במסך הנעילה</string>\n    <string name=\"pref_pin_keyboard_summary\">הפוך אפשרות זו לזמינה אם ברצונך להפוך את מקלדת ה- PIN לזמינה במסך הנעילה. פעולה זו פועלת רק עבור סיסמאות מספריות</string>\n    <string name=\"title_activity_preferences\">הגדרות</string>\n    <string name=\"title_activity_manage_groups\">ניהול קבוצות</string>\n    <string name=\"title_activity_transfer\">העברת ערכים</string>\n    <string name=\"title_activity_about\">אודות</string>\n    <string name=\"title_activity_edit_entry\">ערוך רשומה</string>\n    <string name=\"title_activity_scan_qr\">סרוק ברקוד</string>\n    <string name=\"title_activity_import_entries\">ייבוא רשומה</string>\n    <string name=\"dialog_wipe_entries_title\">מחיקת רשומה</string>\n    <string name=\"dialog_wipe_entries_message\">הכספת שלך כבר מכילה ערכים. האם ברצונך להסיר את הערכים הללו לפני ייבוא הקובץ הזה?\\n\\n<b>בכך, תאבד לצמיתות את הגישה לערכים הקיימים בכספת.</b></string>\n    <string name=\"dialog_wipe_entries_checkbox\">מחק את תוכן הכספת</string>\n    <string name=\"panic_trigger_ignore_toast\">Aegis קיבל הפעלת פאניקה אך ההגדרה מושבתת, מתעלמת</string>\n    <string name=\"pref_panic_trigger_title\">מחק את הכספת בהפעלת הפאניקה</string>\n    <string name=\"pref_panic_trigger_summary\">מחק את הכספת בהפעלת הפאניקה</string>\n    <string name=\"importer_help_2fas\">ספק קובץ גיבוי של 2FAS Authenticator.</string>\n    <string name=\"importer_help_aegis\">ספק קובץ ייצוא/גיבוי של Aegis.</string>\n    <string name=\"importer_help_authenticator_plus\">ספק קובץ ייצוא של Authenticator Plus שהושג דרך <b>הגדרות -&gt; גיבוי &amp; שחזור -&gt; ייצוא כטקסט ו-HTML</b>.</string>\n    <string name=\"importer_help_authy\">ספק עותק של <b>/data/data/com.authy.authy/shared_prefs/com.authy.storage.tokens.authenticator.xml</b>, הממוקם בספריית האחסון הפנימית של Authy.</string>\n    <string name=\"importer_help_andotp\">ספק קובץ יצוא/גיבוי andOTP.</string>\n    <string name=\"importer_help_bitwarden\">ספק קובץ יצוא/גיבוי של Bitwarden. קבצים מוצפנים אינם נתמכים.</string>\n    <string name=\"importer_help_duo\">ספק עותק של <b>/data/data/com.duosecurity.duomobile/files/duokit/accounts.json</b>, הממוקם בספריית האחסון הפנימית של DUO.</string>\n    <string name=\"importer_help_freeotp_plus\">ספק קובץ יצוא FreeOTP+.</string>\n    <string name=\"importer_help_google_authenticator\"><b>רק קבצי מסד נתונים מ-Google Authenticator v5.10 ואילך נתמכים</b>. \\n\\nספק עותק של<b> /data/data</b>/com.google.android.apps.authenticator2/databases/databases, הממוקם בספריית האחסון הפנימית של Google Authenticator.</string>\n    <string name=\"importer_help_microsoft_authenticator\">ספק עותק של <b>/data/data/com.azure.authenticator/databases/PhoneFactor</b>, הממוקם בספריית האחסון הפנימית של Microsoft Authenticator.</string>\n    <string name=\"importer_help_plain_text\">ספק קובץ טקסט רגיל עם URI של Google Authenticator בכל שורה.</string>\n    <string name=\"importer_help_steam\"><b>Steam v3.0 ואילך אינם נתמכים</b>. ספק עותק של <b>/data/data/com.valvesoftware.android.steam.community/files/Steamguard-*.json</b>, הממוקם בספריית האחסון הפנימית של Steam.</string>\n    <string name=\"importer_help_totp_authenticator\">ספק קובץ ייצוא של TOTP Authenticator.</string>\n    <string name=\"importer_help_winauth\">ספק קובץ ייצוא של WinAuth.</string>\n    <string name=\"importer_encrypted_exception_google_authenticator\">ערך מוצפן דילג: %s</string>\n    <string name=\"importer_help_direct\">ייבא ערכים ישירות מ-%s. זה מחייב את האפליקציה להיות מותקנת במכשיר זה וכדי להעניק גישת שורש ל-Aegis.</string>\n    <string name=\"groups\">קבוצות</string>\n    <string name=\"pref_focus_search\">התמקד בחיפוש בהתחלת האפליקציה</string>\n    <string name=\"pref_focus_search_summary\">מקד את החיפוש מיד לאחר פתיחת האפליקציה.</string>\n    <string name=\"pref_grouping_halves\">חֲצָאִים</string>\n    <string name=\"pref_grouping_none\">אין קיבוץ</string>\n    <string name=\"pref_grouping_size_two\">קבוצות של 2</string>\n    <string name=\"pref_grouping_size_three\">קבוצות של 3</string>\n    <string name=\"pref_grouping_size_four\">קבוצות של 4</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-iw-rIL-v29/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources></resources>\n"
  },
  {
    "path": "app/src/main/res/values-ja-rJP/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources xmlns:tools=\"http://schemas.android.com/tools\">\n    <string name=\"action_settings\">設定</string>\n    <string name=\"action_about\">Aegis について</string>\n    <string name=\"action_delete\">削除</string>\n    <string name=\"action_transfer\">転送</string>\n    <string name=\"action_edit_icon\">アイコンを編集</string>\n    <string name=\"action_reset_usage_count\">使用回数をリセット</string>\n    <string name=\"action_reset_usage_count_dialog\">本当に、このエントリーの使用回数を 0 に設定しますか？</string>\n    <string name=\"action_default_icon\">既定のアイコンを復元</string>\n    <string name=\"discard\">破棄</string>\n    <string name=\"save\">保存</string>\n    <string name=\"all\">すべて</string>\n    <string name=\"issuer\">発行者</string>\n    <string name=\"yandex_pin\">PIN (4～16 桁)</string>\n    <string name=\"motp_pin\">PIN (4 桁)</string>\n    <string name=\"suggested\">提案</string>\n    <string name=\"usage_count\">使用回数</string>\n    <string name=\"warning\">警告</string>\n    <string name=\"pref_cat_appearance_app\">アプリ</string>\n    <string name=\"pref_cat_appearance_entries\">エントリー</string>\n    <string name=\"pref_cat_backups_android\">Android</string>\n    <string name=\"pref_cat_backups_auto\">自動バックアップ</string>\n    <string name=\"pref_section_behavior_title\">動作</string>\n    <string name=\"pref_section_behavior_summary\">エントリーリストを操作したときの動作をカスタマイズします。</string>\n    <string name=\"pref_section_appearance_title\">外観</string>\n    <string name=\"pref_section_appearance_summary\">テーマや言語など、アプリの外観に関する設定を調整します。</string>\n    <string name=\"pref_section_security_title\">セキュリティ</string>\n    <string name=\"pref_section_security_summary\">暗号化、生体認証ロック解除、自動ロック、その他のセキュリティの設定をします。</string>\n    <string name=\"pref_section_import_export_title\">インポートとエクスポート</string>\n    <string name=\"pref_section_import_export_summary\">Aegisまたは他の認証アプリのバックアップをインポートします。Aegis保管庫の手動エクスポートを作成します。</string>\n    <string name=\"pref_section_audit_log_title\">監査ログ</string>\n    <string name=\"pref_section_audit_log_summary\">アプリ内で発生した重要なイベントの一覧を表示します。</string>\n    <string name=\"pref_section_backups_title\">バックアップ</string>\n    <string name=\"pref_section_backups_summary\">任意の場所に自動バックアップを設定したり、Androidのクラウドバックアップシステムへの参加を有効にします。</string>\n    <string name=\"pref_section_icon_packs\">アイコンパック</string>\n    <string name=\"pref_section_icon_packs_summary\">アイコンパックの管理とインポート</string>\n    <string name=\"pref_select_theme_title\">テーマ</string>\n    <string name=\"pref_dynamic_colors_title\">ダイナミックカラー</string>\n    <string name=\"pref_dynamic_colors_summary\">Android のテーマカラーに基づいたオーバーレイを適用します</string>\n    <string name=\"pref_view_mode_title\">表示モード</string>\n    <string name=\"pref_lang_title\">言語</string>\n    <string name=\"pref_show_icons_title\">アイコンを表示</string>\n    <string name=\"pref_show_icons_summary\">各エントリーの横にアイコンを表示する</string>\n    <string name=\"pref_code_group_size_title\">コードの桁数のグループ化</string>\n    <string name=\"pref_code_group_size_summary\">グループ化する桁数を選択してください</string>\n    <string name=\"pref_account_name_position_title\">アカウント名を表示</string>\n    <string name=\"pref_show_next_code_title\">次のコードを表示</string>\n    <string name=\"pref_show_next_code_summary\">事前に次のコードを生成して表示します</string>\n    <string name=\"pref_expiration_state_title\">コードの有効期限が近付くと通知</string>\n    <string name=\"pref_expiration_state_summary\">有効期限が近付くとコードの色を変更し、点滅させます</string>\n    <string name=\"pref_expiration_state_fallback\">有効期限が近付くとコードの色を変更します</string>\n    <string name=\"pref_shared_issuer_account_name_title\">必要に応じてアカウント名のみ表示</string>\n    <string name=\"pref_shared_issuer_account_name_summary\">同じ発行者を共有するたびにアカウント名のみを表示します。他のアカウント名は非表示になります。</string>\n    <string name=\"pref_account_name_position_summary_override\">この設定はタイル表示モードによって上書きされます。アカウント名は発行者の下に表示されます。</string>\n    <string name=\"pref_import_file_title\">ファイルからインポート</string>\n    <string name=\"pref_import_file_summary\">ファイルからトークンをインポート</string>\n    <string name=\"pref_android_backups_title\">Androidクラウドバックアップ</string>\n    <string name=\"pref_android_backups_summary\">AndroidのクラウドバックアップシステムにAegisの保管庫を含めることを許可します。これは暗号化された保管庫でのみサポートされています。</string>\n    <string name=\"pref_android_backups_hint\"><i>上記の設定に関係なく、デバイス間(D2D) バックアップは常に許可されます</i></string>\n    <string name=\"pref_backups_title\">保管庫を自動的にバックアップする</string>\n    <string name=\"pref_backups_summary\">変更が行われると、自動的に保管庫のバックアップを外部ストレージに作成します。これは暗号化された保管庫でのみサポートされています。</string>\n    <string name=\"pref_backups_reminder_title\">バックアップのリマインダー</string>\n    <string name=\"pref_backups_reminder_summary\">最近の変更をバックアップしていない場合に、保管庫をバックアップするよう通知を表示します。</string>\n    <string name=\"pref_backups_reminder_dialog_title\">バックアップリマインダーを無効化</string>\n    <string name=\"pref_backups_reminder_dialog_summary\">このリマインダーを無効にすると、Aegisはバックアップしていない変更があるかどうかを知らせません。これにより、トークンにアクセスできなくなる危険性があります。本当にリマインダーを無効にしてもよろしいですか？</string>\n    <string name=\"pref_backups_versioning_strategy_title\">バックアップ戦略</string>\n    <string name=\"pref_backups_versioning_strategy_keep_x_versions\">複数のバージョンを保持</string>\n    <string name=\"pref_backups_versioning_strategy_single_backup\">単一バックアップ</string>\n    <string name=\"pref_backups_versioning_strategy_dialog_title\">バックアップ戦略を選択</string>\n    <string name=\"pref_backups_location_summary\">バックアップの保存場所</string>\n    <string name=\"pref_backups_trigger_title\">バックアップのトリガー</string>\n    <string name=\"pref_backups_trigger_summary\">手動でバックアップを開始する</string>\n    <string name=\"pref_backups_versions_title\">保持するバージョンの数</string>\n    <plurals name=\"pref_backups_versions_summary\">\n        <item quantity=\"other\">%1$d バージョンのバックアップを保持する</item>\n    </plurals>\n    <string name=\"pref_import_app_title\">アプリからインポート</string>\n    <string name=\"pref_import_app_summary\">アプリからトークンをインポート (root権限が必要)</string>\n    <string name=\"pref_export_title\">エクスポート</string>\n    <string name=\"pref_export_summary\">保管庫をエクスポート</string>\n    <string name=\"pref_password_reminder_title\">パスワードのリマインダー</string>\n    <string name=\"pref_google_auth_export_title\">Google Authenticator 向けにエクスポート</string>\n    <string name=\"pref_google_auth_export_descriptor\">Google Authenticator と互換性のある QR コードを生成します</string>\n    <string name=\"pref_google_auth_export_no_data\">エクスポートするデータがありません</string>\n    <plurals name=\"pref_google_auth_export_incompatible_entries\">\n        <item quantity=\"other\">互換性のない %d 個のエントリーをスキップしました</item>\n    </plurals>\n    <string name=\"pref_password_reminder_summary\">パスワードを忘れないように、パスワードを入力する%sにリマインダーを表示します。</string>\n    <string name=\"pref_password_reminder_summary_disabled\">無効</string>\n    <string name=\"pref_secure_screen_title\">画面のセキュリティ</string>\n    <string name=\"pref_secure_screen_summary\">アプリ内でスクリーンショットやその他のキャプチャをブロックする</string>\n    <string name=\"pref_tap_to_reveal_title\">タップして表示</string>\n    <string name=\"pref_tap_to_reveal_summary\">トークンはデフォルトで非表示になります。コードを表示するにはトークンをタップしてください。</string>\n    <string name=\"pref_tap_to_reveal_time_title\">タップして表示する時間</string>\n    <string name=\"pref_auto_lock_title\">オートロック</string>\n    <string name=\"pref_auto_lock_summary\">次の場合: %s</string>\n    <string name=\"pref_auto_lock_summary_disabled\">無効</string>\n    <string name=\"pref_auto_lock_prompt\">Aegisを自動的にロックする</string>\n    <string name=\"pref_auto_lock_type_back_button\">戻るボタンが押されたとき</string>\n    <string name=\"pref_auto_lock_type_minimize\">アプリが最小化されたとき</string>\n    <string name=\"pref_auto_lock_type_device_lock\">端末がロックされたとき</string>\n    <string name=\"pref_backup_password_category\">バックアップとエクスポート</string>\n    <string name=\"pref_backup_password_title\">バックアップとエクスポート用のパスワードを分離する</string>\n    <string name=\"pref_backup_password_summary\">有効にすると、アプリのロック解除に使用されるパスワードは、バックアップとエクスポートの復号化に使用できなくなります。</string>\n    <string name=\"pref_backup_password_change_title\">バックアップとエクスポートのパスワードを変更する</string>\n    <string name=\"pref_backup_password_change_summary\">バックアップとエクスポート時に保管庫を暗号化する新しいパスワードを設定します。</string>\n    <string name=\"pref_encryption_title\">暗号化</string>\n    <string name=\"pref_encryption_summary\">保管庫を暗号化し、パスワードまたは生体認証でロックを解除する</string>\n    <string name=\"pref_biometrics_title\">生体認証ロック解除</string>\n    <string name=\"pref_biometrics_summary\">生体認証による保管庫のロック解除を許可する</string>\n    <string name=\"pref_set_password_title\">パスワードの変更</string>\n    <string name=\"pref_set_password_summary\">保管庫のロックを解除する新しいパスワードを設定する</string>\n    <string name=\"export_encrypted\">保管庫を暗号化</string>\n    <string name=\"export_help\">保管庫をAegisの内部ストレージからエクスポートします。エクスポートしたいフォーマットを選択してください:</string>\n    <string name=\"export_warning_unencrypted\">暗号化されていないAegis保管庫のコピーをエクスポートしようとしています。 <b>これは推奨されません</b>。</string>\n    <string name=\"export_warning_password\">エクスポートは、セキュリティ設定で構成された個別のパスワードを使用して暗号化されます。</string>\n    <string name=\"understand_risk_accept\">危険性を承知しました</string>\n    <string name=\"export_format_aegis\">Aegis (.JSON)</string>\n    <string name=\"export_format_google_auth_uri\">テキストファイル (.TXT)</string>\n    <string name=\"export_format_html\">ウェブページ (.HTML)</string>\n    <string name=\"export_format_hint\">エクスポートフォーマット</string>\n    <string name=\"export_all_groups\">すべてのグループをエクスポート</string>\n    <string name=\"export_choose_groups\">エクスポートするグループを選択</string>\n    <plurals name=\"export_groups_selected_count\">\n        <item quantity=\"other\">%d グループを選択しました</item>\n    </plurals>\n    <string name=\"export_no_groups_selected\">エクスポートするグループが選択されていません</string>\n    <string name=\"export_html_title\" comment=\"The title of an HTML export document\">Aegis Authenticator のエクスポート</string>\n    <string name=\"choose_authentication_method\">セキュリティ</string>\n    <string name=\"authentication_method_explanation\">Aegisはセキュリティに重点を置いた2FAアプリです。トークンは保管庫に保存され、必要に応じて選択したパスワードで暗号化できます。 攻撃者が暗号化された保管庫ファイルを取得した場合、パスワードを知らずにアクセスすることはできません。\\n\\nお使いのデバイスに最適なオプションを事前に選択しました。</string>\n    <string name=\"authentication_method_none\">なし</string>\n    <string name=\"authentication_method_none_description\">保管庫のロックの解除にパスワードは必要ありません。暗号化されません。 <b>このオプションは推奨されません</b>。</string>\n    <string name=\"authentication_method_password\">パスワード</string>\n    <string name=\"authentication_method_password_description\">保管庫のロックを解除するにはパスワードが必要です。</string>\n    <string name=\"authentication_method_password_explanation\">警告: パスワードを忘れた場合、トークンへのアクセスが永久に失われます。パスワードなしで復元する方法はありません。</string>\n    <string name=\"authentication_method_biometrics\">生体認証</string>\n    <string name=\"authentication_method_biometrics_description\">パスワードに加えて、指紋や顔など、このデバイスに登録された生体認証を保管庫のロックの解除に使用することができます。</string>\n    <string name=\"authentication\">保管庫のロックを解除</string>\n    <string name=\"authentication_multiline\" comment=\"The newline in the middle is used for aesthetic purposes\">ロックを\\n解除</string>\n    <string name=\"auth_use_biometrics\"><font fgcolor=\"#FF0D86C1\">生体認証</font> を使用するにはここをタップしてください</string>\n    <string name=\"set_password\">パスワードを入力してください</string>\n    <string name=\"set_group\">グループ名を入力してください</string>\n    <string name=\"set_number\">数字を入力してください</string>\n    <string name=\"set_password_confirm\">パスワードを確認してください</string>\n    <string name=\"invalid_password\">パスワードが違います</string>\n    <string name=\"invalidated_biometrics\">デバイスのセキュリティ設定の変更が検出されました。 「Aegis -&gt; 設定 -&gt; セキュリティ -&gt; 生体認証ロック解除」にアクセスして、生体認証ロックを無効にして再度有効にしてください。</string>\n    <string name=\"password_reminder\">パスワードを入力してください。パスワードを忘れないようにするために、時々確認します。</string>\n    <string name=\"password_reminder_dialog_title\">生体認証によるロック解除</string>\n    <string name=\"password_reminder_dialog_message\">パスワードを忘れて保管庫からロックされないようにするため、時々パスワードの入力を求めます。 パスワードを確認できたら、次の確認時まではデフォルト動作を生体認証でのロック解除に戻します。</string>\n    <string name=\"password_reminder_freq_never\">しない</string>\n    <string name=\"password_reminder_freq_weekly\">1週間ごと</string>\n    <string name=\"password_reminder_freq_biweekly\">2週間ごと</string>\n    <string name=\"password_reminder_freq_monthly\">1ヶ月ごと</string>\n    <string name=\"password_reminder_freq_quarterly\">3ヶ月ごと</string>\n    <string name=\"enter_password_2fas_message\">この2FASバックアップは暗号化されています。以下にパスワードを入力してください。</string>\n    <string name=\"enter_password_authy_message\">認証トークンが暗号化されているようです。Aegisを閉じて、Authyを開いてパスワードでトークンをロック解除してください。 または、パスワードを以下に入力して、AegisがAuthyトークンの復元を試みます。</string>\n    <string name=\"enter_password_aegis_title\">インポートパスワードを入力してください</string>\n    <string name=\"period_hint\">期間 (秒)</string>\n    <string name=\"algorithm_hint\">ハッシュ関数</string>\n    <string name=\"type\">タイプ</string>\n    <string name=\"share\">共有する</string>\n    <string name=\"yes\">はい</string>\n    <string name=\"no\">いいえ</string>\n    <string name=\"undo\">元に戻す</string>\n    <string name=\"unlock\">ロック解除</string>\n    <string name=\"advanced\">高度な設定</string>\n    <string name=\"counter\">カウンター</string>\n    <string name=\"digits\">桁数</string>\n    <string name=\"secret\">秘密鍵</string>\n    <string name=\"scan\">QRコードをスキャン</string>\n    <string name=\"scan_image\">画像をスキャン</string>\n    <string name=\"enter_manually\">手動で入力</string>\n    <string name=\"set_up_biometric\">生体認証ロック解除の設定</string>\n    <string name=\"copy\">コピー</string>\n    <string name=\"edit\">編集</string>\n    <string name=\"select_all\">すべて選択</string>\n    <string name=\"assign_icons\">アイコンを割り当てる</string>\n    <string name=\"favorite\" comment=\"Verb\">お気に入りに追加</string>\n    <string name=\"unfavorite\" comment=\"Verb\">お気に入りを解除</string>\n    <string name=\"error_all_caps\">エラー</string>\n    <string name=\"password\">パスワード</string>\n    <string name=\"confirm_password\">パスワードの確認</string>\n    <string name=\"show_password\">パスワードを表示</string>\n    <string name=\"new_entry\">新しいエントリー</string>\n    <string name=\"add_new_entry\">新しいエントリーを追加</string>\n    <string name=\"unlock_vault_error\">保管庫のロックを解除できませんでした</string>\n    <string name=\"unlock_vault_error_description\">パスワードが正しくありません。パスワードを間違えていないか確認してください。</string>\n    <string name=\"password_equality_error\">パスワードが一致しません</string>\n    <string name=\"snackbar_authentication_method\">認証方法を選択してください</string>\n    <string name=\"encrypting_vault\">保管庫の暗号化</string>\n    <string name=\"exporting_vault\">保管庫のエクスポート</string>\n    <string name=\"reading_file\">ファイルを読み込み中</string>\n    <string name=\"requesting_root_access\">root権限を要求中</string>\n    <string name=\"analyzing_qr\">QRコードを解析中</string>\n    <plurals name=\"added_new_entries\">\n        <item quantity=\"other\">%d 個の新しいエントリーを保管庫に追加しました</item>\n    </plurals>\n    <string name=\"importing_icon_pack\">アイコンパックをインポート中</string>\n    <string name=\"delete_entry\">エントリーを削除</string>\n    <string name=\"delete_entry_description\">このエントリーを削除してもよろしいですか？</string>\n    <string name=\"delete_entry_explanation\">この操作は以下の2FAを無効にするものではありません:\\n<b>%s</b>\\n\\nアクセスできなくなるのを防ぐため、2FAを無効にするか、このサービスのコードを生成する別の方法があることを確認してください。</string>\n    <string name=\"delete_entries\">エントリーを削除</string>\n    <plurals name=\"delete_entries_description\">\n        <item quantity=\"other\">%d 個のエントリーを削除してもよろしいですか？</item>\n    </plurals>\n    <string name=\"discard_changes\">変更を破棄しますか？</string>\n    <string name=\"discard_changes_description\">変更は保存されていません</string>\n    <string name=\"saving_profile_error\">プロファイルの保存中にエラーが発生しました</string>\n    <string name=\"saving_assign_icons_error\">アイコンの割り当てエラー</string>\n    <string name=\"welcome\">ようこそ</string>\n    <string name=\"app_description\">Aegisは、無料で安全なオープンソースの2FAアプリです</string>\n    <string name=\"setup_completed\">セットアップが完了しました</string>\n    <string name=\"setup_completed_description\">Aegisのセットアップが完了し、準備が整いました。</string>\n    <string name=\"vault_not_found\">保管庫が見つかりません。セットアップを開始してください…</string>\n    <string name=\"copied\">コピーしました</string>\n    <string name=\"errors_copied\">エラーをクリップボードにコピーしました</string>\n    <string name=\"version_copied\">バージョンをクリップボードにコピーしました</string>\n    <string name=\"error_occurred\">エラーが発生しました</string>\n    <string name=\"decryption_error\">保管庫のロック解除中にエラーが発生しました</string>\n    <string name=\"decryption_corrupt_error\">保管庫のロック解除中にエラーが発生しました。保管庫ファイルが破損している可能性があります。</string>\n    <string name=\"saving_error\">保管庫の保存中にエラーが発生しました</string>\n    <string name=\"vault_init_error\">保管庫の初期化中にエラーが発生しました</string>\n    <string name=\"vault_load_error\">保管庫の読み込み中にエラーが発生しました</string>\n    <string name=\"biometric_decrypt_error\">生体認証で保管庫の復号中にエラーが発生しました。これは通常、デバイスのセキュリティ設定が変更された場合にのみ発生します。 パスワードで保管庫のロックを解除し、Aegisの設定で生体認証を再設定してください。</string>\n    <string name=\"biometric_init_error\">生体認証の準備中にエラーが発生しました。これは通常、デバイスのセキュリティ設定が変更された場合にのみ発生します。 パスワードで保管庫のロックを解除し、Aegisの設定で生体認証を再設定してください。</string>\n    <string name=\"disable_encryption\">暗号化を無効化</string>\n    <string name=\"disable_encryption_description\">暗号化を無効にしてもよろしいですか？これにより、保管庫は平文で保存されます。 <b>自動バックアップも無効になります</b>.</string>\n    <string name=\"enable_encryption_error\">暗号化の有効化中にエラーが発生しました</string>\n    <string name=\"disable_encryption_error\">暗号化の無効化中にエラーが発生しました</string>\n    <string name=\"backup_successful\">バックアップが正常に作成されました</string>\n    <string name=\"backup_error\">バックアップの作成中にエラーが発生しました</string>\n    <string name=\"backup_status_success\">最新のバックアップが完了しました: %s</string>\n    <string name=\"backup_status_failed\">最新のバックアップに失敗しました: %s</string>\n    <string name=\"backup_status_none\">まだバックアップは作成されていません</string>\n    <string name=\"backup_warning_password\">バックアップは、セキュリティ設定で指定された個別のパスワードを使用して暗号化されます。</string>\n    <string name=\"documentsui_error\">お使いの端末から DocumentsUI がなくなっているようです。これは、ドキュメントの選択や作成に必要な重要なシステムコンポーネントです。ツールを使って端末を&quot;デブロート&quot;した際に誤って削除してしまった可能性がありますので、再インストールする必要があります。</string>\n    <string name=\"icon_pack_import_error\">アイコンパックのインポート中にエラーが発生しました</string>\n    <string name=\"icon_pack_import_exists_error\">インポートしようとしているアイコンパックは既に存在します。上書きしますか？</string>\n    <string name=\"icon_pack_delete_error\">アイコンパックの削除中にエラーが発生しました</string>\n    <plurals name=\"icon_pack_info\">\n        <item quantity=\"other\">%d アイコン</item>\n    </plurals>\n    <string name=\"icon_custom\">カスタム</string>\n    <string name=\"permission_denied\">権限がありません</string>\n    <string name=\"andotp_new_format\">新しい形式 (v0.6.3 以降) </string>\n    <string name=\"andotp_old_format\">旧フォーマット(v0.6.2以下) </string>\n    <string name=\"choose_andotp_importer\">AndOTP バックアップファイルにはどの形式がありますか？</string>\n    <string name=\"choose_totpauth_importer\">このTOTP Authenticatorバックアップはパスワードで暗号化されていますか?</string>\n    <string name=\"choose_application\">インポートしたいアプリケーションを選択してください</string>\n    <string name=\"choose_theme\">テーマを選択してください</string>\n    <string name=\"choose_account_name_position\">アカウント名の位置を選択</string>\n    <string name=\"choose_view_mode\">表示モードを選択してください</string>\n    <string name=\"choose_copy_behavior\">コピー時の動作を選択</string>\n    <string name=\"parsing_file_error\">ファイルの解析中にエラーが発生しました</string>\n    <string name=\"file_not_found\">エラー: ファイルが見つかりません</string>\n    <string name=\"reading_file_error\">ファイルの読み取り中にエラーが発生しました</string>\n    <string name=\"app_lookup_error\">エラー: アプリがインストールされていません</string>\n    <string name=\"app_version_error\">インストールされた %s のバージョンはサポートされていません。 最近のバージョンでは、内部ストレージディレクトリ内のファイルの一部を暗号化し始めています。 Aegisがインポートに必要な情報にアクセスできなくなります。 インポートしようとしてエラーが発生する可能性があります。続行しますか？</string>\n    <string name=\"root_error\">エラー: root権限を取得できません</string>\n    <plurals name=\"imported_entries_count\">\n        <item quantity=\"other\">%d 個のエントリーをインポートしました</item>\n    </plurals>\n    <plurals name=\"entries_shown\">\n        <item quantity=\"other\">%d 個のエントリーを表示中</item>\n    </plurals>\n    <string name=\"intro_import_error_title\">保管庫のインポート中にエラーが発生しました</string>\n    <string name=\"import_error_title\">インポート中にエラーが発生しました。</string>\n    <string name=\"exporting_vault_error\">保管庫のエクスポート中にエラーが発生しました</string>\n    <string name=\"exported_vault\">保管庫はエクスポートされました</string>\n    <string name=\"encryption_set_password_error\">パスワードの設定中にエラーが発生しました。</string>\n    <string name=\"encryption_enable_biometrics_error\">生体認証ロック解除の設定中にエラーが発生しました。 一部のデバイスは生体認証の実装が不十分であり、あなたのデバイスはその1つである可能性があります。 代わりにパスワードのみの設定に切り替えることを検討してください。</string>\n    <string name=\"no_cameras_available\">利用可能なカメラがありません</string>\n    <string name=\"read_qr_error\">QRコードの読み取り中にエラーが発生しました</string>\n    <string name=\"read_qr_error_phonefactor\">AegisはMicrosoft独自の2FAアルゴリズムと互換性がありません。Office 365で2FAを設定する場合は、必ず「通知なしでアプリケーションを設定する」を選択してください。</string>\n    <string name=\"partial_google_auth_import\">不完全な Google Authenticator のエクスポートが検出されました</string>\n    <string name=\"partial_google_auth_import_warning\">インポート内の一部のQRコードが見つかりません。以下のコードが見つかりませんでした:\\n\\n<b>%s</b>\\n\\n正常な部分のみでインポートを継続することはできますが、トークンへのアクセス方法を失う危険性があるため、すべてのQRコードを再試行することをお勧めします。</string>\n    <string name=\"missing_qr_code_descriptor\">• QRコード %d</string>\n    <string name=\"import_google_auth_failure\">Google Authenticator エクスポートのインポートに失敗しました</string>\n    <string name=\"unrelated_google_auth_batches_error\">エクスポートには関連のないバッチの情報が含まれています。一度にひとつのバッチをインポートしてください。</string>\n    <string name=\"no_tokens_can_be_imported\">インポートできるトークンはありません</string>\n    <string name=\"unlocking_vault\">保管庫のロックを解除しています</string>\n    <string name=\"remove_group\">グループを削除</string>\n    <string name=\"remove_group_description\">このグループを削除してもよろしいですか？このグループのエントリーは自動的に「グループなし」に切り替わります。</string>\n    <string name=\"remove_unused_groups\">未使用のグループを削除</string>\n    <string name=\"remove_unused_groups_description\">エントリーに割り当てられていないすべてのグループを削除してもよろしいですか？</string>\n    <string name=\"remove_icon_pack\">アイコンパックを削除</string>\n    <string name=\"remove_icon_pack_description\">このアイコンパックを削除してもよろしいですか？このパックからアイコンを使用するエントリーは影響を受けません。</string>\n    <string name=\"details\">詳細</string>\n    <string name=\"show_error_details\">エラーの詳細を表示</string>\n    <string name=\"lock\">ロックする</string>\n    <string name=\"name\">名前</string>\n    <string name=\"no_group\">グループなし</string>\n    <string name=\"sort\" comment=\"Title of the Sort button in the top action bar of the main view\">並び替え</string>\n    <string name=\"sort_alphabetically\">発行者 (A to Z)</string>\n    <string name=\"sort_alphabetically_reverse\">発行者 (Z to A)</string>\n    <string name=\"sort_alphabetically_name\">アカウント (A to Z)</string>\n    <string name=\"sort_alphabetically_name_reverse\">アカウント (Z to A)</string>\n    <string name=\"sort_usage_count\">使用回数</string>\n    <string name=\"sort_custom\">カスタム</string>\n    <string name=\"new_group\">新しいグループ…</string>\n    <string name=\"group\">グループ</string>\n    <string name=\"group_name_hint\">グループ名</string>\n    <string name=\"preference_manage_groups\">グループを編集</string>\n    <string name=\"preference_manage_groups_summary\">ここでグループの管理や削除ができます</string>\n    <string name=\"preference_reset_usage_count\">使用回数をリセット</string>\n    <string name=\"preference_reset_usage_count_summary\">保管庫のすべてのエントリーの使用回数をリセットする</string>\n    <string name=\"preference_reset_usage_count_dialog\">保管庫のすべてのエントリーの使用回数を0に設定してもよろしいですか？</string>\n    <string name=\"note\" comment=\"Users can add a note to an entry\">メモ</string>\n    <string name=\"clear\">クリア</string>\n    <string name=\"pref_highlight_entry_title\">タップ時にトークンを強調表示する</string>\n    <string name=\"pref_highlight_entry_summary\">タップ時に一時的に強調表示することで、トークンが互いに区別しやすくなります。</string>\n    <string name=\"pref_minimize_on_copy_title\">コピー時に最小化</string>\n    <string name=\"pref_minimize_on_copy_summary\">トークンをコピーした後にアプリを最小化する</string>\n    <string name=\"pref_copy_behavior_title\">トークンをクリップボードにコピー</string>\n    <string name=\"pref_pause_entry_title\">タップ時にトークンの更新を停止</string>\n    <string name=\"pref_pause_entry_summary\">トークンをタップすると、トークンの自動更新を一時停止します。フォーカスされている限り、トークンは更新されません。 「タップ時にトークンを強調表示する」または「タップして表示」の設定が必要です。</string>\n    <string name=\"pin_keyboard_description\">PINキーボードを有効にするにはパスワードを入力してください。これはパスワードが数字のみで構成されている場合にのみ機能します。</string>\n    <string name=\"pin_keyboard_error\">PINキーボードの有効化に失敗しました</string>\n    <string name=\"pin_keyboard_error_description\">PINキーボードを設定できません。パスワードは数字のみで構成されている必要があります。</string>\n    <string name=\"pin_keyboard_disabled\">パスワードが変更されました。PINキーボードは表示されなくなります。</string>\n    <string name=\"selected\">選択中</string>\n    <string name=\"dark_theme_title\">ダークテーマ</string>\n    <string name=\"light_theme_title\">ライトテーマ</string>\n    <string name=\"amoled_theme_title\">AMOLED テーマ</string>\n    <string name=\"system_theme_title\">バッテリーセーバーで設定</string>\n    <string name=\"system_amoled_theme_title\">バッテリー セーバーの設定 (AMOLED)</string>\n    <string name=\"normal_viewmode_title\">標準</string>\n    <string name=\"compact_mode_title\">コンパクト</string>\n    <string name=\"small_mode_title\">スモール</string>\n    <string name=\"tiles_mode_title\">タイル</string>\n    <string name=\"unknown_issuer\">不明な発行者</string>\n    <string name=\"unknown_account_name\">不明なアカウント名</string>\n    <plurals name=\"import_error_dialog\">\n        <item quantity=\"other\">Aegisは %d 個のトークンをインポートできませんでした。これらのトークンはスキップされます。エラーの詳細を確認するには「詳細」をタップします。</item>\n    </plurals>\n    <string name=\"unable_to_process_deeplink\">ディープリンクを処理できません</string>\n    <string name=\"unable_to_read_qrcode_file\">ファイル %s からQRコードを読み取り処理できません。</string>\n    <string name=\"unable_to_process_shared_text\">OTPとして共有テキストを処理できません</string>\n    <string name=\"unable_to_generate_qrcode\">QRコードを生成できません</string>\n    <string name=\"select_picture\">画像を選択</string>\n    <string name=\"select_icon\">アイコンを選択</string>\n    <string name=\"tile_open_vault\" comment=\"label for a quick settings tile that opens the app when tapped\">保管庫を開く</string>\n    <string name=\"tile_open_scanner\" comment=\"label for a quick settings tile that opens the QR code scanner when tapped\">スキャナを開く</string>\n    <string name=\"toggle_checkboxes\">チェックボックスを切り替え</string>\n    <string name=\"search\">検索</string>\n    <string name=\"channel_name_lock_status\">ロック状態</string>\n    <string name=\"channel_description_lock_status\">保管庫をロックしたときに永続的に通知を表示することができます</string>\n    <string name=\"vault_unlocked_state\">保管庫はロックされていません。ここをタップしてロックしてください。</string>\n    <string name=\"version\">バージョン</string>\n    <string name=\"changelog\">更新履歴</string>\n    <string name=\"whats_new\">新着情報</string>\n    <string name=\"github_description\">ソースコード、問題および情報</string>\n    <string name=\"license\">ライセンス</string>\n    <string name=\"license_description\">Aegis Authenticator は GPLv3 の下でライセンスされています</string>\n    <string name=\"third_party_licenses\">サードパーティ ライセンス</string>\n    <string name=\"third_party_licenses_description\">Aegisが使用するサードパーティライブラリのライセンス</string>\n    <string name=\"country_netherlands\">オランダ</string>\n    <string name=\"email_us\">メールを書く</string>\n    <string name=\"visit_website\">ウェブサイトを表示</string>\n    <string name=\"about_support\">サポート</string>\n    <string name=\"support_rate\">評価する</string>\n    <string name=\"support_rate_description\">Google Play ストアにレビューを投稿してサポートしてください</string>\n    <string name=\"webview_error\">このデバイスはWebビューをサポートしていません。これはchangelogとライセンスを表示するために必要です。システムコンポーネントがありません。\nこのデバイスは、更新履歴やライセンスを表示するために必要なWebビューをサポートしていません。システムコンポーネントが不足しています。</string>\n    <string name=\"email\">メール</string>\n    <string name=\"time_sync_warning_title\">自動時刻同期</string>\n    <string name=\"time_sync_warning_message\">Aegisが正しいコードを生成するためには、システム時刻が正しく同期されている必要があります。 わずか数秒のずれでも誤ったコードを生成する可能性があります。このデバイスは時刻を自動的に同期するように設定されていないようです。今すぐ同期しますか？</string>\n    <string name=\"time_sync_warning_disable\">警告は不要です。</string>\n    <string name=\"google_qr_export_unrelated\">関連のないQRコードが見つかりました。スキャナーを再起動してみてください。</string>\n    <string name=\"backup_error_bar_message\"><b>保管庫のバックアップが失敗しました</b></string>\n    <string name=\"backup_system_builtin\">Aegisの内蔵自動バックアップ</string>\n    <string name=\"backup_system_android\">Androidのクラウドバックアップシステム</string>\n    <string name=\"backup_reminder_bar_message_with_latest\" comment=\"The parameter is an elapsed time in the style of 'x seconds/minutes/days ago'\">        最新のバックアップが古くなっています (%s)\n    </string>\n    <string name=\"backup_reminder_bar_message\">        変更がバックアップされていません\n    </string>\n    <string name=\"backup_reminder_bar_dialog_title\">変更がバックアップされていません</string>\n    <string name=\"backup_reminder_bar_dialog_summary\">最近行われた保管庫への変更がバックアップされていません。アカウントへのアクセス権を失わないためには、定期的なバックアップが重要です。設定メニューから自動バックアップを設定することを検討してください。\n    </string>\n    <string name=\"backup_reminder_bar_dialog_accept\">バックアップを設定する</string>\n    <string name=\"backup_plaintext_export_warning\"><b>保管庫は最近プレーンテキストでエクスポートされました</b></string>\n    <string name=\"pref_show_plaintext_warning_hint\">今後この警告を表示しない</string>\n    <string name=\"backup_plaintext_warning_explanation\">この警告は、最近暗号化されていない保管庫のコピーをエクスポートしたために表示されています。 トークンのセキュリティを維持するために、必要がなくなったらこのファイルを削除することをお勧めします。</string>\n    <string name=\"switch_camera\">カメラを切り替え</string>\n    <string name=\"empty_list\">表示するコードがありません。右下のプラス記号をタップしてエントリーを追加してください</string>\n    <string name=\"empty_list_title\">エントリーが見つかりません</string>\n    <string name=\"empty_group_list\">表示するグループがありません。エントリーの編集画面でグループを追加してください</string>\n    <string name=\"empty_group_list_title\">グループが見つかりません</string>\n    <string name=\"no_icon_packs\">アイコンパックはまだインポートされていません。＋記号をタップしてインポートしてください。ヒント: <a href=\"https://aegis-icons.github.io\">aegis-icons</a> を試してください。</string>\n    <string name=\"no_icon_packs_title\">アイコンパックがありません</string>\n    <string name=\"pick_icon\">アイコンを選択</string>\n    <string name=\"uncategorized\">未分類</string>\n    <string name=\"done\">完了</string>\n    <plurals name=\"qr_count\">\n        <item quantity=\"other\">%d / %d QRコード</item>\n    </plurals>\n    <string name=\"next\">次へ</string>\n    <string name=\"previous\">前へ</string>\n    <string name=\"copy_uri\">URIをコピー</string>\n    <string name=\"unable_to_copy_uri_to_clipboard\">URIをクリップボードにコピーできません</string>\n    <string name=\"uri_copied_to_clipboard\">URI をクリップボードにコピーしました</string>\n    <string name=\"transfer_entry_description\">このエントリーを別の認証アプリに転送するには、このQRコードをスキャンしてください</string>\n    <string name=\"google_auth_compatible_transfer_description\">QRコードを Aegis または Google Authenticator でスキャンしてください。\\n\\nGoogle Authenticator アプリの制限のため、SHA1 を使用し6桁のコードを生成する TOTP と HOTP トークンのみが含まれます。</string>\n    <string name=\"password_strength_very_weak\">非常に弱い</string>\n    <string name=\"password_strength_weak\">弱い</string>\n    <string name=\"password_strength_fair\">普通</string>\n    <string name=\"password_strength_good\">良い</string>\n    <string name=\"password_strength_strong\">強い</string>\n    <string name=\"pref_pin_keyboard_title\">ロック画面でPINキーボードを使用する</string>\n    <string name=\"pref_pin_keyboard_summary\">ロック画面でPINキーボードを有効にする場合、これを有効にします。これは数字のパスワードでのみ動作します。</string>\n    <string name=\"title_activity_preferences\">設定</string>\n    <string name=\"title_activity_manage_groups\">グループの管理</string>\n    <string name=\"title_activity_transfer\">エントリーを転送</string>\n    <string name=\"title_activity_about\">このプログラムについて</string>\n    <string name=\"title_activity_edit_entry\">エントリーを編集</string>\n    <string name=\"title_activity_scan_qr\">QRコードをスキャン</string>\n    <string name=\"title_activity_import_entries\">エントリーをインポート</string>\n    <string name=\"title_activity_assign_icons\">アイコンを割り当てる</string>\n    <string name=\"dialog_wipe_entries_title\">エントリーを消去</string>\n    <string name=\"dialog_wipe_entries_message\">あなたの保管庫には既にエントリーが含まれています。このファイルをインポートする前に、これらのエントリーを削除しますか？\\n\\n<b>その場合、保管庫内の既存のエントリーへのアクセスが永久に失われます。</b></string>\n    <string name=\"dialog_wipe_entries_checkbox\">保管庫の内容を消去</string>\n    <string name=\"panic_trigger_ignore_toast\">イージスはパニックトリガーを受信しましたが、設定は無効になっています。</string>\n    <string name=\"pref_panic_trigger_title\">パニックトリガー時に保管庫を削除</string>\n    <string name=\"pref_panic_trigger_summary\">Rippleからパニックトリガーを受信したときに保管庫を削除する</string>\n    <string name=\"import_vault\">Aegis 保管庫をインポート</string>\n    <string name=\"import_vault_hint\">別の2FAアプリからインポートしたい場合は、まずセットアップを完了してから、設定メニューに進みます。</string>\n    <plurals name=\"import_duplicate_toast\">\n        <item quantity=\"other\">%d 個の重複が見つかりました。エントリーのリストを確認してください。</item>\n    </plurals>\n    <string name=\"importer_help_2fas\">2FAS Authenticatorのバックアップファイルを提供します。</string>\n    <string name=\"importer_help_aegis\">Aegisのエクスポート/バックアップファイルを提供します。</string>\n    <string name=\"importer_help_authenticator_plus\">Authenticator Plusの<b>Settings -&gt; Backup &amp; Restore -&gt; Export as Text and HTML</b>で取得したエクスポートファイルを提供します。</string>\n    <string name=\"importer_help_authy\">Authyの内部ストレージディレクトリにある <b>/data/data/com.authy/shared_prefs/com.auth.storage.tokens.authenticator.xml</b>のコピーを提供します。</string>\n    <string name=\"importer_help_andotp\">andOTPのエクスポート/バックアップ ファイルを提供します。</string>\n    <string name=\"importer_help_bitwarden\">Bitwarden のエクスポート/バックアップファイルを提供します。暗号化されたファイルはサポートされていません。</string>\n    <string name=\"importer_help_duo\">DUOの内部ストレージディレクトリにある <b>/data/data/com.duosecurity.duomobile/files/duokit/accounts.json</b>のコピーを提供します。</string>\n    <string name=\"importer_help_freeotp_plus\">FreeOTP+のエクスポートファイルを提供します。</string>\n    <string name=\"importer_help_google_authenticator\"><b>Google Authenticator v5.10 およびそれ以前のデータベースファイルのみサポートされています。</b>.\\n\\nGoogle Authenticator の内部ストレージディレクトリにある<b>/data/data/com.google.android.apps.authenticator2/databases/databases</b> のコピーを提供します。</string>\n    <string name=\"importer_help_microsoft_authenticator\">Microsoft Authenticatorの内部ストレージディレクトリにある <b>/data/data/com.azure.authenticator/databases/PhoneFactor</b>のコピーを提供します。</string>\n    <string name=\"importer_help_plain_text\">各行にGoogle Authenticator URIを持つプレーンテキストファイルを提供します。</string>\n    <string name=\"importer_help_steam\"><b>Steam v3.0 およびそれ以降のバージョンはサポートされていません。</b>. Steam の内部ストレージディレクトリにある <b>/data/data/com.valvesoftware.android.steam.community/files/Steamguard-*.json</b>のコピーを提供します。</string>\n    <string name=\"importer_help_totp_authenticator\">TOTP Authenticatorのエクスポートファイルを提供します。</string>\n    <string name=\"importer_help_winauth\">WinAuthのエクスポートファイルを提供します。</string>\n    <string name=\"import_assign_icons_dialog_title\">アイコンを割り当てる</string>\n    <string name=\"import_assign_icons_dialog_text\">インポートされたエントリーにアイコンを割り当てますか？</string>\n    <string name=\"importer_encrypted_exception_google_authenticator\">暗号化されたエントリーがスキップされました: %s</string>\n    <string name=\"importer_help_direct\">%sからエントリーを直接インポートします。これにはアプリをデバイスにインストールし、root権限をAegisに許可する必要があります。</string>\n    <string name=\"groups\">グループ</string>\n    <string name=\"pref_focus_search\">アプリ起動時に検索にフォーカス</string>\n    <string name=\"pref_focus_search_summary\">アプリ起動直後、検索にフォーカスする。</string>\n    <string name=\"pref_grouping_halves\">半分でグループ化</string>\n    <string name=\"pref_grouping_none\">グループ化しない</string>\n    <string name=\"pref_grouping_size_two\">2桁でグループ化</string>\n    <string name=\"pref_grouping_size_three\">3桁でグループ化</string>\n    <string name=\"pref_grouping_size_four\">4桁でグループ化</string>\n    <string name=\"pref_copy_behavior_never\">何もしない</string>\n    <string name=\"pref_copy_behavior_single_tap\">シングルタップ</string>\n    <string name=\"pref_copy_behavior_double_tap\">ダブルタップ</string>\n    <string name=\"pref_account_name_position_hidden\">非表示</string>\n    <string name=\"pref_account_name_position_end\">次の発行者</string>\n    <string name=\"pref_account_name_position_below\">前の発行者</string>\n    <plurals name=\"time_elapsed_seconds\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"other\">%d 秒前</item>\n    </plurals>\n    <plurals name=\"time_elapsed_minutes\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"other\">%d 分前</item>\n    </plurals>\n    <plurals name=\"time_elapsed_hours\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"other\">%d 時間前</item>\n    </plurals>\n    <plurals name=\"time_elapsed_days\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"other\">%d 日前</item>\n    </plurals>\n    <plurals name=\"time_elapsed_years\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"other\">%d 年前</item>\n    </plurals>\n    <plurals name=\"dropdown_checkboxes_default_count\">\n        <item quantity=\"other\">%d 個のアイテムを選択</item>\n    </plurals>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-ja-rJP-v29/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"system_theme_title\">システムのデフォルト</string>\n    <string name=\"system_amoled_theme_title\">システムのデフォルト (AMOLED)</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-kn-rIN/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources xmlns:tools=\"http://schemas.android.com/tools\">\n    <string name=\"action_settings\">ಸಿದ್ಢತೆಗಳು</string>\n    <string name=\"action_about\">ಅಪ್ಲಿಕೇಶನ್ ಬಗ್ಗೆ</string>\n    <string name=\"action_delete\">ಅಳಿಸು</string>\n    <string name=\"action_transfer\">ವರ್ಗಾವಣೆ</string>\n    <string name=\"action_edit_icon\">ಐಕಾನ್ ಪರಿಷ್ಕರಿಸು</string>\n    <string name=\"action_reset_usage_count\">ಉಪಯೋಗಿಸಿದ ಸಂಖ್ಯೆಯನ್ನು ಮರುಹೊಂದಿಸು</string>\n    <string name=\"action_reset_usage_count_dialog\">ಎಷ್ಟು ಬಾರಿ ಟೋಕೆನ್ಗಳನ್ನು ಉಪಯೋಗಿಸಿದ್ದೀರಿ ಅನ್ನುವುದನ್ನು ೦ ಗೆ ಮರುಹೊಂದಿಸುವುದೇ?</string>\n    <string name=\"action_default_icon\">ಮೂಲ ಐಕಾನನ್ನು ಪುನಃಸ್ಥಾಪಿಸಿ</string>\n    <string name=\"discard\">ತಿರಸ್ಕರಿಸು</string>\n    <string name=\"save\">ಉಳಿಸು</string>\n    <string name=\"issuer\">ನೀಡುವವರು</string>\n    <string name=\"yandex_pin\">ಪಿನ್(4-16 ಅಂಕೆಗಳು)</string>\n    <string name=\"motp_pin\">ಪಿನ್(4 ಅಂಕೆಗಳು)</string>\n    <string name=\"suggested\">ಸಲಹೆ</string>\n    <string name=\"warning\">ಎಚ್ಚರಿಕೆ</string>\n    <string name=\"pref_cat_appearance_app\">ಆ್ಯಪ್</string>\n    <string name=\"pref_cat_appearance_entries\">ಎಂಟ್ರಿಗಳು</string>\n    <string name=\"pref_cat_backups_android\">ಆಂಡ್ರಾಯ್ಡ್</string>\n    <string name=\"pref_cat_backups_auto\">ಸ್ವಯಂಚಾಲಿತ ಬ್ಯಾಕಪ್‌ಗಳು</string>\n    <string name=\"pref_section_behavior_title\">ಆಪ್ ನಡವಳಿಕೆಗಳು</string>\n    <string name=\"pref_section_behavior_summary\">ಪ್ರವೇಶ ಪಟ್ಟಿಯೊಂದಿಗೆ ಸಂವಹನ ನಡೆಸುವಾಗ ಅದರ ನಡವಳಿಕೆಯನ್ನು ಕಸ್ಟಮೈಸ್ ಮಾಡಿ.</string>\n    <string name=\"pref_section_appearance_title\">ನೋಟ</string>\n    <string name=\"pref_section_appearance_summary\">ಅಪ್ಲಿಕೇಶನ್ ನ ಬಣ್ಣ, ಭಾಷೆ ಹಾಗು ಇತರೆ ಸಿದ್ಧತೆಗಳನ್ನು ಬದಲಾಯಿಸಿ.</string>\n    <string name=\"pref_section_security_title\">ಭದ್ರತೆ</string>\n    <string name=\"pref_section_security_summary\">ಗೂಢಲಿಪಿಕಾರಣ, ಬಯೋಮೆಟ್ರಿಕ್ ಹಾಗು ಭದ್ರತೆಗೆ ಸಂಬಂದಿಸಿದ ಇತರೆ ಸಿದ್ಧತೆಗಳನ್ನು ಹೊಂದಿಸಿ.</string>\n    <string name=\"pref_section_import_export_title\">ಆಮದು &amp; ರಫ್ತು</string>\n    <string name=\"pref_section_backups_title\">ಬ್ಯಾಕಪ್‍ಗಳು</string>\n    <string name=\"pref_section_icon_packs\">ಐಕಾನ್ ಪ್ಯಾಕುಗಳು</string>\n    <string name=\"pref_section_icon_packs_summary\">ಐಕಾನ್ ಪ್ಯಾಕುಗಳನ್ನು ಆಮದಿಸಿ ಹಾಗು ನಿರ್ವಹಿಸಿ</string>\n    <string name=\"pref_select_theme_title\">ಥೀಮ್</string>\n    <string name=\"pref_view_mode_title\">ವೀಕ್ಷಣೆಯ ರೀತಿ</string>\n    <string name=\"pref_lang_title\">ಭಾಷೆ</string>\n    <string name=\"pref_show_icons_title\">ಐಕಾನ್ಗಳನ್ನು ತೋರಿಸು</string>\n    <string name=\"pref_show_icons_summary\">ಪ್ರತಿ ಪ್ರವೇಶದ ಪಕ್ಕದಲ್ಲಿ ಐಕಾನ್ ಅನ್ನು ಪ್ರದರ್ಶಿಸಿ</string>\n    <string name=\"pref_code_group_size_title\">ಅಂಕೆಗಳ ಗುಂಪು</string>\n    <string name=\"pref_account_name_position_title\">ಖಾತೆಯ ಹೆಸರನ್ನು ತೋರಿಸಿ</string>\n    <string name=\"pref_shared_issuer_account_name_title\">ಅಗತ್ಯವಿದ್ದಾಗ ಮಾತ್ರ ಖಾತೆಯ ಹೆಸರನ್ನು ತೋರಿಸಿ</string>\n    <string name=\"pref_shared_issuer_account_name_summary\">ಒಂದೇ ವಿತರಕರನ್ನು ಹಂಚಿಕೊಂಡಾಗ ಮಾತ್ರ ಖಾತೆಯ ಹೆಸರುಗಳನ್ನು ತೋರಿಸಿ. ಇತರ ಖಾತೆಯ ಹೆಸರುಗಳನ್ನು ಮರೆಮಾಡಲಾಗುತ್ತದೆ.</string>\n    <string name=\"pref_import_file_title\">ಫೈಲಿಂದ ಆಮದಿಸು</string>\n    <string name=\"pref_import_file_summary\">ಫೈಲ್‌ನಿಂದ ಟೋಕನ್ಗಳ್ಳನ್ನು ಆಮದು ಮಾಡಿಕೊಳ್ಳಿ</string>\n    <string name=\"pref_android_backups_title\">ಆಂಡ್ರಾಯ್ಡ್ ಕ್ಲೌಡ್ ಬ್ಯಾಕ್‌ಅಪ್‌ಗಳು</string>\n    <string name=\"pref_android_backups_hint\"><i>ಮೇಲಿನ ಸೆಟ್ಟಿಂಗ್ ಅನ್ನು ಲೆಕ್ಕಿಸದೆಯೇ ಸಾಧನದಿಂದ ಸಾಧನಕ್ಕೆ (D2D) ಬ್ಯಾಕಪ್‌ಗಳನ್ನು ಯಾವಾಗಲೂ ಅನುಮತಿಸಲಾಗುತ್ತದೆ</i></string>\n    <string name=\"pref_backups_title\">ವಾಲ್ಟ್ ಅನ್ನು ಸ್ವಯಂಚಾಲಿತವಾಗಿ ಬ್ಯಾಕಪ್ ಮಾಡಿ</string>\n    <string name=\"pref_backups_summary\">ಬದಲಾವಣೆಗಳನ್ನು ಮಾಡಿದಾಗ ಬಾಹ್ಯ ಸಂಗ್ರಹಣೆಯಲ್ಲಿ ಸ್ವಯಂಚಾಲಿತವಾಗಿ ವಾಲ್ಟ್‌ನ ಬ್ಯಾಕಪ್‌ಗಳನ್ನು ರಚಿಸಿ. ಇದು ಎನ್‌ಕ್ರಿಪ್ಟ್ ಮಾಡಲಾದ ವಾಲ್ಟ್‌ಗಳಿಗೆ ಮಾತ್ರ ಬೆಂಬಲಿತವಾಗಿದೆ.</string>\n    <string name=\"pref_backups_reminder_title\">ಬ್ಯಾಕಪ್ ಜ್ಞಾಪನೆ</string>\n    <string name=\"pref_backups_reminder_summary\">ನಿಮ್ಮ ಇತ್ತೀಚಿನ ಬದಲಾವಣೆಗಳನ್ನು ನೀವು ಬ್ಯಾಕಪ್ ಮಾಡದಿದ್ದಲ್ಲಿ ನಿಮ್ಮ ವಾಲ್ಟ್ ಅನ್ನು ಬ್ಯಾಕಪ್ ಮಾಡಲು ಜ್ಞಾಪನೆಯನ್ನು ತೋರಿಸಲಾಗುವುದು.</string>\n    <string name=\"pref_backups_reminder_dialog_title\">ಬ್ಯಾಕಪ್ ಜ್ಞಾಪನೆಯನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಿ</string>\n    <string name=\"pref_backups_reminder_dialog_summary\">ಈ ಜ್ಞಾಪನೆಯನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸುವುದು ಎಂದರೆ ನೀವು ಇನ್ನೂ ಬ್ಯಾಕಪ್ ಮಾಡದ ಬದಲಾವಣೆಗಳನ್ನು ಹೊಂದಿದ್ದೀರಾ ಅಥವಾ ಇಲ್ಲವೇ ಎಂಬುದನ್ನು Aegis ನಿಮಗೆ ತಿಳಿಸುವುದಿಲ್ಲ. ಇದರಿಂದ ನಿಮ್ಮ ಟೋಕನ್ಗಳನ್ನೂ ಕಳೆದುಕೊಳ್ಳುವ ಸಂಭವವಿರುತ್ತದೆ. ಜ್ಞಾಪನೆಯನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲು ನೀವು ಖಚಿತವಾಗಿ ಬಯಸುವಿರಾ?</string>\n    <string name=\"pref_backups_location_summary\">ಬ್ಯಾಕಪ್‌ಗಳನ್ನು ಇಲ್ಲಿ ಸಂಗ್ರಹಿಸಲಾಗುತ್ತದೆ</string>\n    <string name=\"pref_backups_trigger_title\">ಬ್ಯಾಕಪ್ ಮಾಡು</string>\n    <string name=\"pref_backups_trigger_summary\">ಈಗಲೇ ಬ್ಯಾಕಪ್ ಮಾಡಲು ಇಲ್ಲಿ ಒತ್ತಿ</string>\n    <string name=\"pref_backups_versions_title\">ಬ್ಯಾಕಪ್ ಆವೃತ್ತಿಗಳ ಸಂಖ್ಯೆ</string>\n    <string name=\"pref_import_app_title\">ಅಪ್ಲಿಕೇಶನಿಂದ ಆಮದಿಸು</string>\n    <string name=\"pref_export_title\">ರಫ್ತು ಮಾಡು</string>\n    <string name=\"pref_export_summary\">ವಾಲ್ಟ್ ಅನ್ನು ರಫ್ತು ಮಾಡಿ</string>\n    <string name=\"pref_password_reminder_title\">ಪಾಸ್ವರ್ಡ್ ಜ್ಞಾಪನೆ</string>\n    <string name=\"pref_google_auth_export_title\">ಗೂಗಲ್ Authenticator ಗೆ ರಫ್ತು ಮಾಡಿ</string>\n    <string name=\"pref_google_auth_export_no_data\">ರವಾನಿಸಲು ಯಾವುದೇ ಡೇಟಾ ಇಲ್ಲ</string>\n    <string name=\"pref_secure_screen_title\">ಪರದೆಯ ಭದ್ರತೆ</string>\n    <string name=\"pref_secure_screen_summary\">ಅಪ್ಲಿಕೇಶನ್ ಒಳಗೆ ಪರದೆ ಚಿತ್ರ ಹಾಗು ಪರದೆಯನ್ನು ಸೆರೆಹಿಡಿಯುವ ಇತರ ಪ್ರಯತ್ನಗಳನ್ನು ನಿರ್ಬಂಧಿಸು</string>\n    <string name=\"pref_tap_to_reveal_title\">ನೋಡುವುದಕ್ಕೆ ಟ್ಯಾಪ್ ಮಾಡು</string>\n    <string name=\"pref_tap_to_reveal_summary\">ಪೂರ್ವನಿಯೋಜಿತವಾಗಿ ಟೋಕನ್ಗಳನ್ನು ಮರೆಮಾಡಲಾಗುತ್ತದೆ. ಸಂಕೇತವನ್ನು ಬಹಿರಂಗಪಡಿಸುವುದಕ್ಕೆ ಟೋಕನ್ಗಳನ್ನು ಒತ್ತು.</string>\n    <string name=\"pref_tap_to_reveal_time_title\">\\'ನೋಡುವುದಕ್ಕೆ ಟ್ಯಾಪ್ ಮಾಡಿ\\'ಗೆ ಸಮಯದ ಅವಧಿ</string>\n    <string name=\"pref_auto_lock_title\">ಸ್ವಯಂಚಾಲಿತವಾಗಿ ಬೀಗ ಹಾಕು</string>\n    <string name=\"pref_backup_password_category\">ಬ್ಯಾಕಪ್ &amp; ರವಾನಿಸು</string>\n    <string name=\"pref_encryption_title\">ಗೂಢಲಿಪೀಕರಣ</string>\n    <string name=\"pref_biometrics_title\">ಬೆರೆಳಚ್ಚಿನಿಂದ ಅನ್ಲಾಕ್ ಮಾಡಿ</string>\n    <string name=\"pref_set_password_title\">ಗುಪ್ತಪದವನ್ನು ಬದಲಾಯಿಸು</string>\n    <string name=\"pref_set_password_summary\">ವೌಲ್ಟ್ ಅನ್ನು ತೆರೆಯಲು ಹೊಸಾ ಗುಪ್ತಪದವನ್ನು ಆಯ್ಕೆ ಮಾಡಿ</string>\n    <string name=\"understand_risk_accept\">ನನಗೆ ಇದರ ಪರಿಣಾಮದ ಅರಿವಿದೆ</string>\n    <string name=\"export_format_google_auth_uri\">ಪಠ್ಯ ಫೈಲ್ (.TXT)</string>\n    <string name=\"export_format_html\">ವೆಬ್ ಪೇಜ್ (.HTML)</string>\n    <string name=\"export_format_hint\">ರಫ್ತು ಸ್ವರೂಪ</string>\n    <string name=\"export_all_groups\">ಎಲ್ಲಾ ಗುಂಪುಗಳನ್ನು ರಫ್ತು ಮಾಡಿ</string>\n    <plurals name=\"export_groups_selected_count\">\n        <item quantity=\"one\">%d ಗುಂಪನ್ನು ಆಯ್ಕೆ ಮಾಡಲಾಗಿದೆ</item>\n        <item quantity=\"other\">%d ಗುಂಪುಗಳನ್ನು ಆಯ್ಕೆ ಮಾಡಲಾಗಿದೆ</item>\n    </plurals>\n    <string name=\"choose_authentication_method\">ಭದ್ರತೆ</string>\n    <string name=\"authentication_method_none\">ಯಾವುದೂ ಇಲ್ಲ</string>\n    <string name=\"authentication_method_password\">ಗುಪ್ತಪದ</string>\n    <string name=\"authentication_method_biometrics\">ಬಯೋಮೆಟ್ರಿಕ್</string>\n    <string name=\"authentication\">ವೌಲ್ಟಿನ ಬೀಗವನ್ನು ತೆರೆ</string>\n    <string name=\"set_password\">ದಯವಿಟ್ಟು ಗುಪ್ತಪದವನ್ನು ನಮೂದಿಸಿ</string>\n    <string name=\"set_group\">ದಯವಿಟ್ಟು ಒಂದು ಗುಂಪಿನ ಹೆಸರವನ್ನು ನಮೂದಿಸಿ</string>\n    <string name=\"set_number\">ದಯವಿಟ್ಟು ಒಂದು ಸಂಖ್ಯೆಯನ್ನು ನಮೂದಿಸಿ</string>\n    <string name=\"set_password_confirm\">ದಯವಿಟ್ಟು ಗುಪ್ತಪದವನ್ನು ಖಚಿತಪಡಿಸಿ</string>\n    <string name=\"invalid_password\">ಗುಪ್ತಪದ ತಪ್ಪಾಗಿದೆ</string>\n    <string name=\"password_reminder_freq_never\">ಎಂದಿಗೂ ಇಲ್ಲ</string>\n    <string name=\"password_reminder_freq_weekly\">ವಾರಕ್ಕೊಮ್ಮೆ</string>\n    <string name=\"password_reminder_freq_biweekly\">ಎರಡು ವಾರಕ್ಕೊಮ್ಮೆ</string>\n    <string name=\"password_reminder_freq_monthly\">ಮಾಸಿಕ</string>\n    <string name=\"password_reminder_freq_quarterly\">ತ್ರೈಮಾಸಿಕ</string>\n    <string name=\"yes\">ಹೌದು</string>\n    <string name=\"no\">ಇಲ್ಲ</string>\n    <string name=\"undo\">ರದ್ದುಮಾಡು</string>\n    <string name=\"unlock\">ಬೀಗ ತೆಗೆದು ಹಾಕು</string>\n    <string name=\"advanced\">ಸುಧಾರಿತ</string>\n    <string name=\"counter\">ಎಣಿಕೆ ಮಾಡುವ ಯಂತ್ರ</string>\n    <string name=\"digits\">ಅಂಕೆಗಳು</string>\n    <string name=\"secret\">ರಹಸ್ಯ</string>\n    <string name=\"scan\">ಕ್ಯೂ ಆರ್ ಸಂಕೇತವನ್ನು ಸ್ಕ್ಯಾನ್ ಮಾಡು</string>\n    <string name=\"scan_image\">ಚಿತ್ರವನ್ನು ಸ್ಕ್ಯಾನ್ ಮಾಡು</string>\n    <string name=\"enter_manually\">ಕೈಯಾರೆ ನಮೂದಿಸಿ</string>\n    <string name=\"copy\">ನಕಲಿಸು</string>\n    <string name=\"edit\">ಸಂಪಾದಿಸು</string>\n    <string name=\"favorite\" comment=\"Verb\">ಮೆಚ್ಚಿನವುಗಳು</string>\n    <string name=\"unfavorite\" comment=\"Verb\">ಮೆಚ್ಚಿನದಲ್ಲದ</string>\n    <string name=\"error_all_caps\">ದೋಷ</string>\n    <string name=\"password\">ಗುಪ್ತಪದ</string>\n    <string name=\"confirm_password\">ಗುಪ್ತಪದವನ್ನು ಖಚಿತಗೊಳಿಸು</string>\n    <string name=\"show_password\">ಗುಪ್ತಪದ ತೋರಿಸು</string>\n    <string name=\"unlock_vault_error\">ವೌಲ್ಟಿನ ಬೀಗವನ್ನು ತೆರೆಯಲು ಆಗಲಿಲ್ಲ</string>\n    <string name=\"unlock_vault_error_description\">ಗುಪ್ತಪದ ತಪ್ಪಾಗಿದೆ. ತಪ್ಪಾಗಿ ಗುಪ್ತಪದವನ್ನು ನಮೂದಿಸಲಿಲ್ಲ ಎಂದು ಖಚಿತಗೊಳಿಸು.</string>\n    <string name=\"password_equality_error\">ಗುಪ್ತಪದಗಾಳು ಒಂದೇ ಆಗಿರಾಬೇಕು ಹಾಗು ಖಾಲಿ ಆಗಿರಬಾರದು</string>\n    <string name=\"snackbar_authentication_method\">ದಯವಿಟ್ಟು ಒಂದು ದೃಢೀಕರಣದ ವಿಧಾನವನ್ನು ಆಯ್ಕೆ ಮಾಡಿ</string>\n    <string name=\"encrypting_vault\">ವೌಲ್ಟನ್ನು ಗೂಢಲಿಪೀಕರಣ ಮಾಡಲಾಗುತ್ತಿದೆ</string>\n    <string name=\"reading_file\">ಕಡತವನ್ನು ಓದಲಾಗುತ್ತಿದೆ</string>\n    <string name=\"delete_entry\">ಎಂಟ್ರಿಯನ್ನು ಅಳಿಸು</string>\n    <string name=\"delete_entry_description\">ನಿಜವಾಗಲು ಈ ಎಂಟ್ರಿಯನ್ನು ಅಳಿಸಲು ಬಯಸುವಿರಾ?</string>\n    <string name=\"discard_changes\">ಬದಲಾವಣೆಗಳನ್ನು ತಿರಸ್ಕರಿಸುವುದಾ?</string>\n    <string name=\"discard_changes_description\">ನಿಮ್ಮ ಬದಲಾವಣೆಗಳು ಉಳಿಸಲಾಗಿಲ್ಲ</string>\n    <string name=\"saving_profile_error\">ಪ್ರೊಫೈಲನ್ನು ಉಳಿಸಲು ದೋಷವಾಯಿತು</string>\n    <string name=\"welcome\">ಸ್ವಾಗತ</string>\n    <string name=\"app_description\">Aegis ಒಂದು ಉಚಿತ, ಸುರಕ್ಷಿತ, ಹಾಗು ಮುಕ್ತ ಸಂಪನ್ಮೂಲ 2FA ಅಪ್ಲಿಕೇಶನ್</string>\n    <string name=\"setup_completed\">ತಯಾರಿ ಪೂರ್ಣಗೊಂಡಿದೆ</string>\n    <string name=\"vault_not_found\">ವೌಲ್ಟ್ ಸಿಗಲಿಲ್ಲ, ತಯಾರಿಯನ್ನು ಪ್ರಾರಂಭಿಸಲಾಗುತ್ತಿದೆ…</string>\n    <string name=\"errors_copied\">ದೋಷಗಳು ಕ್ಲಿಪ್ಬೋರ್ಡಿಗೆ ನಕಲಿಸಲಾಗಿದೆ</string>\n    <string name=\"version_copied\">ಅವೃತ್ತಿ ಕ್ಲಿಪ್ಬೋರ್ಡಿಗೆ ನಕಲಿಸಲಾಗಿದೆ</string>\n    <string name=\"decryption_error\">ವೌಲ್ಟಿನ ಬೀಗವನ್ನು ತೆರೆಯುವಾಗ ಒಂದು ದೋಷ ಸಂಭವಿಸಿದೆ</string>\n    <string name=\"saving_error\">ವೌಲ್ಟನ್ನು ಉಳಿಸುವಾಗ ಒಂದು ದೋಷ ಸಂಭವಿಸಿದೆ</string>\n    <string name=\"disable_encryption\">ಗೂಢಲಿಪೀಕರಣವನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸು</string>\n    <string name=\"enable_encryption_error\">ಗೂಢಲಿಪೀಕರಣವನ್ನು ಸಕ್ರಿಯಗೊಳಿಸುವಾಗ ಒಂದು ದೋಷ ಸಂಭವಿಸಿದೆ</string>\n    <string name=\"disable_encryption_error\">ಗೂಢಲಿಪೀಕರಣವನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸುವಾಗ ಒಂದು ದೋಷ ಸಂಭವಿಸಿದೆ</string>\n    <string name=\"backup_successful\">ಬ್ಯಾಕಪ್ ಅನ್ನು ಯಶಸ್ವಿಯಾಗಿ ನಿಗದಿಪಡಿಸಲಾಗಿದೆ</string>\n    <string name=\"backup_error\">ಬ್ಯಾಕಪ್ ರಚಿಸಲು ಪ್ರಯತ್ನಿಸುತ್ತಿರುವಾಗ ದೋಷ ಸಂಭವಿಸಿದೆ</string>\n    <string name=\"backup_status_success\">ಇತ್ತೀಚಿನ ಬ್ಯಾಕಪ್ ಯಶಸ್ವಿಯಾಗಿದೆ: %s</string>\n    <string name=\"backup_status_failed\">ಇತ್ತೀಚಿನ ಬ್ಯಾಕಪ್ ವಿಫಲವಾಗಿದೆ: %s</string>\n    <string name=\"backup_status_none\">ಯಾವುದೇ ಬ್ಯಾಕ್‌ಅಪ್‌ಗಳನ್ನು ಇನ್ನೂ ಮಾಡಲಾಗಿಲ್ಲ</string>\n    <string name=\"permission_denied\">ಅನುಮತಿ ನಿರಾಕರಿಸಲಾಗಿದೆ</string>\n    <string name=\"choose_theme\">ನಿಮ್ಮ ಇಚ್ಛೆಯ ಥೀಮನ್ನು ಆಯ್ಕೆ ಮಾಡಿ</string>\n    <string name=\"choose_view_mode\">ನಿಮ್ಮ ಇಚ್ಛೆಯ ವೀಕ್ಷಣೆ ರೀತಿಯನ್ನು ಆಯ್ಕೆ ಮಾಡಿ</string>\n    <string name=\"parsing_file_error\">ಫೈಲನ್ನು ಪಾರ್ಸ್ ಮಾಡುವಾಗ ಒಂದು ದೋಷ ಸಂಭವಿಸಿದೆ</string>\n    <string name=\"file_not_found\">ದೋಷ: ಫೈಲ್ ಕಂಡುಬಂದಿಲ್ಲ</string>\n    <string name=\"reading_file_error\">ಫೈಲನ್ನು ಓದಲು ಪ್ರಯತ್ನಿಸುವಾಗ ಒಂದು ದೋಷ ಸಂಭವಿಸಿದೆ</string>\n    <string name=\"app_lookup_error\">ದೋಷ: ಅಪ್ಲಿಕೇಶನ್ನು ಸ್ಥಾಪನೆಗೊಂಡಿಲ್ಲ</string>\n    <string name=\"import_error_title\">ಅಮದಿಸುವಾಗ ಒಂದು ಅಥವಾ ಜಾಸ್ತಿ ದೋಷಗಳು ಸಂಭವಿಸಿದೆ</string>\n    <string name=\"no_cameras_available\">ಯಾವುದೇ ಕ್ಯಾಮರಾಗಳು ಲಭ್ಯವಿಲ್ಲ</string>\n    <string name=\"read_qr_error\">ಕ್ಯೂ ಆರ್ ಸಂಕೇತವನ್ನು ಓದಲು ಪ್ರಯತ್ನಿಸುವಾಗ ಒಂದು ದೋಷ ಸಂಭವಿಸಿದೆ</string>\n    <string name=\"unlocking_vault\">ವೌಲ್ಟಿನ ಬೀಗವನ್ನು ತೆರೆಯಲಾಗುತ್ತಿದೆ</string>\n    <string name=\"remove_group\">ಗುಂಪನ್ನು ತೆಗೆದುಹಾಕು</string>\n    <string name=\"remove_group_description\">ನಿಜವಾಗಲು ಈ ಗುಂಪನ್ನು ತೆರೆಯಾಲು ಬಯಸುವಿರಾ? ಈ ಗುಂಪಿನಾಲ್ಲಿರುವ ಎಂಟ್ರಿಗಳು ಸ್ವಯಂಚಾಲಿತವಾಗಿ \\'ಗುಂಪಿಲ್ಲ\\'ಗೆ ಬದಲಾವಣೆ ಆಗುತ್ತವೆ.</string>\n    <string name=\"details\">ವಿವರಗಳು</string>\n    <string name=\"show_error_details\">ದೋಷ ವಿವರಗಳನ್ನು ತೋರಿಸಿ</string>\n    <string name=\"lock\">ಬೀಗ ಹಾಕು</string>\n    <string name=\"name\">ಹೆಸರು</string>\n    <string name=\"no_group\">ಗುಂಪಿಲ್ಲ</string>\n    <string name=\"sort_alphabetically\">ನೀಡುವವರು (ವರ್ಣಮಾಲೆಯಂತೆ)</string>\n    <string name=\"sort_alphabetically_reverse\">ನೀಡುವವರು (ವರ್ಣಮಾಲೆಯ ಹಿಮ್ಮುಖವಾಗಿಯಾಗಿ)</string>\n    <string name=\"sort_alphabetically_name\">ಖಾತೆ (ವರ್ಣಮಾಲೆಯಂತೆ)</string>\n    <string name=\"sort_alphabetically_name_reverse\">ಖಾತೆ (ವರ್ಣಮಾಲೆಯ ಹಿಮ್ಮುಖವಾಗಿಯಾಗಿ)</string>\n    <string name=\"sort_custom\">ನಿಮ್ಮ ಇಚ್ಛೆ</string>\n    <string name=\"new_group\">ಹೊಸ ಗುಂಪು…</string>\n    <string name=\"group\">ಗುಂಪು</string>\n    <string name=\"group_name_hint\">ಗುಂಪಿನ ಹೆಸರು</string>\n    <string name=\"preference_manage_groups\">ಗುಂಪುಗಳನ್ನು ಸಂಪಾದಿಸು</string>\n    <string name=\"preference_manage_groups_summary\">ಇಲ್ಲಿ ನಿಮ್ಮ ಗುಂಪುಗಳನ್ನು ನಿರ್ವಹಿಸು ಮತ್ತು ಅಳಿಸು</string>\n    <string name=\"note\" comment=\"Users can add a note to an entry\">ಟಿಪ್ಪಣಿ</string>\n    <string name=\"selected\">ಆಯ್ಕೆ ಮಾಡಿರುವುದು</string>\n    <string name=\"dark_theme_title\">ಗಾಢ ಥೀಮ್</string>\n    <string name=\"light_theme_title\">ತಿಳಿ ಥೀಮ್</string>\n    <string name=\"normal_viewmode_title\">ಸಾಮಾನ್ಯ</string>\n    <string name=\"compact_mode_title\">ದಟ್ಟ</string>\n    <string name=\"small_mode_title\">ಸಣ್ಣ</string>\n    <string name=\"tiles_mode_title\">ಟೈಲ್ಸ್ ಗಳು</string>\n    <string name=\"unknown_issuer\">ಗೊತ್ತಿಲ್ಲದಿರುವ ನೀಡುವವರು</string>\n    <string name=\"unknown_account_name\">ಗೊತ್ತಿಲ್ಲದಿರುವ ಖಾತೆಯ ಹೆಸರು</string>\n    <string name=\"select_picture\">ಚಿತ್ರವನ್ನು ಆಯ್ಕೆ ಮಾಡು</string>\n    <string name=\"toggle_checkboxes\">ಚೆಕ್ಬಾಕ್ಸ್ಗಳನ್ನು ಟಾಗಲ್ ಮಾಡು</string>\n    <string name=\"search\">ಹುಡುಕು</string>\n    <string name=\"channel_name_lock_status\">ಬೀಗ ಹಾಕಿರುವ ಸ್ಥಿತಿ</string>\n    <string name=\"channel_description_lock_status\">Aegis ವೌಲ್ಟಿನ ಬೀಗ ಹಾಕಿದೆ ಎಂದು ನಿನಗೆ ತಿಳಿಸಲು ಒಂದು ಶಾಶ್ವತ ಅಧಿಸೂಚನೆಯನ್ನು ರಚಿಸಬುಹುದು</string>\n    <string name=\"vault_unlocked_state\">ವೌಲ್ಟಿನ ಬೀಗ ಹಾಕಿಲ್ಲ. ಬೀಗವನ್ನು ಹಾಕುವುದಕ್ಕೆ ಇಲ್ಲಿ ಒತ್ತಿ.</string>\n    <string name=\"version\">ಆವೃತ್ತಿ</string>\n    <string name=\"changelog\">ಬದಲಾವಣೆ ಲಾಗ್</string>\n    <string name=\"whats_new\">ಹೊಸತೇನಿದೆ</string>\n    <string name=\"github_description\">ಮೂಲ ಕೋಡ್, ಸಮಸ್ಯೆಗಳು ಹಾಗು ಮಾಹಿತಿ</string>\n    <string name=\"country_netherlands\">ನೆದರ್ಲೆಂಡ್ಸ್</string>\n    <string name=\"email_us\">ಈಮೇಲನ್ನು ಬರಿ</string>\n    <string name=\"visit_website\">ನಮ್ಮ ಅಂತರ್ಜಾಲದ ಪುಟವನ್ನು ಭೇಟಿ ಮಾಡು</string>\n    <string name=\"about_support\">ಬೆಂಬಲ</string>\n    <string name=\"support_rate\">ಅಂಕಗಳನ್ನು ಕೊಡು</string>\n    <string name=\"support_rate_description\">ಗೂಗಲ್ ಪ್ಲೇ ಅಂಗಡಿಯಲ್ಲಿ ಸಮೀಕ್ಷೆಯನ್ನು ಬಿಟ್ಟು ನಮ್ಮನ್ನ ಬೆಂಬಲಿಸು</string>\n    <string name=\"email\">ಈಮೇಲ್</string>\n    <string name=\"empty_list\">ತೋರಿಸುವುದಕ್ಕೆ ಯಾವುದೇ ಸಂಕೇತವು ಇಲ್ಲ. ಎಂಟ್ರಿಗಳನ್ನು ಸೇರಿಸಲು ಕೆಳಗಿನ ಬಲ ಮೂಲೆಯಲ್ಲಿರುವ ಹೆಚ್ಚಿನ ಚಿಹ್ನೆಯನ್ನು ಒತ್ತು</string>\n    <string name=\"empty_list_title\">ಯಾವುದೇ ಎಂಟ್ರಿಗಳು ಕಂಡುಬಂದಿಲ್ಲ</string>\n    <string name=\"title_activity_manage_groups\">ಗುಂಪುಗಳನ್ನು ನಿರ್ವಹಿಸು</string>\n    <string name=\"title_activity_about\">ಅಪ್ಲಿಕೇಶನ್ ಬಗ್ಗೆ</string>\n    <plurals name=\"time_elapsed_seconds\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"one\">%d ಸೆಕೆಂಡ್ ಹಿಂದೆ</item>\n        <item quantity=\"other\">%d ಸೆಕೆಂಡ್ಗಳ ಹಿಂದೆ</item>\n    </plurals>\n    <plurals name=\"time_elapsed_minutes\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"one\">%d ನಿಮಿಷದ ಹಿಂದೆ</item>\n        <item quantity=\"other\">%d ನಿಮಿಷಗಳ ಹಿಂದೆ</item>\n    </plurals>\n    <plurals name=\"time_elapsed_hours\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"one\">%d ಗಂಟೆಯ ಹಿಂದೆ</item>\n        <item quantity=\"other\">%d ಗಂಟೆಗಳ ಹಿಂದೆ</item>\n    </plurals>\n    <plurals name=\"time_elapsed_days\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"one\">%d ದಿನಗಳ ಹಿಂದೆ</item>\n        <item quantity=\"other\">%d ದಿನಗಳ ಹಿಂದೆ</item>\n    </plurals>\n    <plurals name=\"time_elapsed_years\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"one\">%d ವರ್ಷದ ಹಿಂದೆ</item>\n        <item quantity=\"other\">%d ವರ್ಷಗಳ ಹಿಂದೆ</item>\n    </plurals>\n    <plurals name=\"dropdown_checkboxes_default_count\">\n        <item quantity=\"one\">%d ಐಟಂ ಆಯ್ಕೆ ಮಾಡಲಾಗಿದೆ</item>\n        <item quantity=\"other\">%d ಐಟಂಗಳನ್ನು ಆಯ್ಕೆ ಮಾಡಲಾಗಿದೆ</item>\n    </plurals>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-kn-rIN-v29/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources></resources>\n"
  },
  {
    "path": "app/src/main/res/values-ko-rKR/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources xmlns:tools=\"http://schemas.android.com/tools\">\n    <string name=\"action_settings\">설정</string>\n    <string name=\"action_about\">정보</string>\n    <string name=\"action_delete\">삭제</string>\n    <string name=\"action_transfer\">전송</string>\n    <string name=\"action_edit_icon\">아이콘 편집</string>\n    <string name=\"action_reset_usage_count\">사용횟수 초기화</string>\n    <string name=\"action_reset_usage_count_dialog\">정말로 사용횟수를 0으로 초기화하시겠어요?</string>\n    <string name=\"action_default_icon\">기본 아이콘으로 초기화</string>\n    <string name=\"discard\">취소</string>\n    <string name=\"save\">저장</string>\n    <string name=\"all\">전체</string>\n    <string name=\"issuer\">서비스명</string>\n    <string name=\"yandex_pin\">PIN (숫자 4-16자리)</string>\n    <string name=\"motp_pin\">PIN (숫자 4자리)</string>\n    <string name=\"suggested\">추천</string>\n    <string name=\"usage_count\">사용횟수</string>\n    <string name=\"warning\">경고</string>\n    <string name=\"pref_cat_appearance_app\">앱</string>\n    <string name=\"pref_cat_appearance_entries\">항목</string>\n    <string name=\"pref_cat_backups_android\">Android</string>\n    <string name=\"pref_cat_backups_auto\">자동 백업</string>\n    <string name=\"pref_section_behavior_title\">동작</string>\n    <string name=\"pref_section_behavior_summary\">항목들과 상호작용 할 때의 행동을 사용자 지정합니다.</string>\n    <string name=\"pref_section_appearance_title\">모양</string>\n    <string name=\"pref_section_appearance_summary\">테마, 언어와 같이 앱의 모습에 영향을 주는 설정들을 조정합니다.</string>\n    <string name=\"pref_section_security_title\">보안</string>\n    <string name=\"pref_section_security_summary\">암호화, 생체 인식, 자동 잠금과 같은 보안 설정을 조정합니다.</string>\n    <string name=\"pref_section_import_export_title\">가져오기 &amp; 내보내기</string>\n    <string name=\"pref_section_import_export_summary\">다른 2FA 앱이나 Aegis의 백업을 가져옵니다. Aegis 보관함을 수동으로 내보내주세요.</string>\n    <string name=\"pref_section_audit_log_title\">이벤트 로그</string>\n    <string name=\"pref_section_audit_log_summary\">앱 내에서 발생한 모든 신고된 중요한 이벤트의 목록을 확인하세요.</string>\n    <string name=\"pref_section_backups_title\">백업</string>\n    <string name=\"pref_section_backups_summary\">원하는 위치에 자동 백업을 설정하거나 안드로이드 클라우드 백업 시스템에 참여하도록 설정하세요.</string>\n    <string name=\"pref_section_icon_packs\">아이콘 팩</string>\n    <string name=\"pref_section_icon_packs_summary\">아이콘 팩 관리 및 가져오기</string>\n    <string name=\"pref_select_theme_title\">테마</string>\n    <string name=\"pref_dynamic_colors_title\">동적 색상</string>\n    <string name=\"pref_dynamic_colors_summary\">안드로이드 테마에 맞춰 오버레이가 적용됩니다</string>\n    <string name=\"pref_view_mode_title\">보기 모드</string>\n    <string name=\"pref_lang_title\">언어</string>\n    <string name=\"pref_show_icons_title\">아이콘 표시</string>\n    <string name=\"pref_show_icons_summary\">각각의 항목 옆에 아이콘이 표시됩니다</string>\n    <string name=\"pref_code_group_size_title\">코드 숫자 그룹화</string>\n    <string name=\"pref_code_group_size_summary\">코드를 그룹화할 자릿수를 선택합니다</string>\n    <string name=\"pref_account_name_position_title\">계정 이름 표시</string>\n    <string name=\"pref_show_next_code_title\">다음 코드 보기</string>\n    <string name=\"pref_show_next_code_summary\">미리 다음 코드를 생성하고 보여줍니다</string>\n    <string name=\"pref_expiration_state_title\">코드가 곧 만료됨을 표시</string>\n    <string name=\"pref_expiration_state_summary\">코드가 곧 만료될 때, 색이 변경되고 깜빡입니다</string>\n    <string name=\"pref_expiration_state_fallback\">코드가 곧 만료될 때, 색이 변경됩니다</string>\n    <string name=\"pref_shared_issuer_account_name_title\">필요할 때만 계정 이름 표시</string>\n    <string name=\"pref_shared_issuer_account_name_summary\">동일한 발급자를 공유하는 경우에만 계정 이름을 표시합니다. 다른 계정 이름은 숨겨집니다.</string>\n    <string name=\"pref_account_name_position_summary_override\">이 설정은 타일 보기 모드에서 재정의됩니다. 계정 이름은 항상 발급자 아래에 표시됩니다.</string>\n    <string name=\"pref_import_file_title\">파일에서 가져오기</string>\n    <string name=\"pref_import_file_summary\">파일에서 토큰 가져오기</string>\n    <string name=\"pref_android_backups_title\">Android 클라우드 백업</string>\n    <string name=\"pref_android_backups_summary\">안드로이드 클라우드 백업 시스템에 Aegis 보관함 백업을 포함하도록 합니다. 암호화된 보관함에서만 지원됩니다.</string>\n    <string name=\"pref_android_backups_hint\"><i>위 설정과 관계 없이 장치 간 백업(D2D)은 항상 허용됩니다.</i></string>\n    <string name=\"pref_backups_title\">자동 백업</string>\n    <string name=\"pref_backups_summary\">변경 사항이 있을 때 외부 디렉토리에 자동으로 백업을 생성합니다. 암호화된 보관함에서만 지원됩니다.</string>\n    <string name=\"pref_backups_reminder_title\">백업 알림</string>\n    <string name=\"pref_backups_reminder_summary\">마지막 변경 이후에 백업하지 않았을 때 백업하라는 알림을 표시합니다.</string>\n    <string name=\"pref_backups_reminder_dialog_title\">백업 알림 해제</string>\n    <string name=\"pref_backups_reminder_dialog_summary\">이 알림을 비활성화하면 아직 백업되지 않은 변경사항이 있는지를 \\\"아무도\\\" 알려주지 않습니다. 따라서 토큰에 대한 액세스 권한을 잃을 위험이 있습니다. 알림을 비활성화하시겠나요?</string>\n    <string name=\"pref_backups_versioning_strategy_title\">백업 방법</string>\n    <string name=\"pref_backups_versioning_strategy_keep_x_versions\">여러 버전 유지</string>\n    <string name=\"pref_backups_versioning_strategy_single_backup\">단일 백업</string>\n    <string name=\"pref_backups_versioning_strategy_single_backup_warning\">선택돤 백업 방법은 신뢰 및 권장되지 않습니다. 단일 백업 실패는 단 하나의 백업을 잃는 것입니다.</string>\n    <string name=\"pref_backups_versioning_strategy_dialog_title\">백업 방법을 선택해주세요</string>\n    <string name=\"pref_backups_location_title\">백업 위치</string>\n    <string name=\"pref_backups_location_summary\">백업이 보관될 위치:</string>\n    <string name=\"pref_backup_location_summary\">백업이 보관될 위치:</string>\n    <string name=\"pref_backups_trigger_title\">백업하기</string>\n    <string name=\"pref_backups_trigger_summary\">수동으로 백업을 실행합니다</string>\n    <string name=\"pref_backups_versions_title\">유지할 버전 수</string>\n    <string name=\"pref_backups_versions_infinite\">\\u221E</string>\n    <plurals name=\"pref_backups_versions_summary\">\n        <item quantity=\"other\">백업 버전 %1$d(을)를 유지합니다</item>\n    </plurals>\n    <string name=\"pref_backups_versions_infinite_summary\">백업 버전을 무제한으로 유지하세요.</string>\n    <string name=\"pref_import_app_title\">앱에서 가져오기</string>\n    <string name=\"pref_import_app_summary\">앱에서 토큰 가져오기 (root 필요)</string>\n    <string name=\"pref_export_title\">내보내기</string>\n    <string name=\"pref_export_summary\">보관함 내보내기</string>\n    <string name=\"pref_password_reminder_title\">비밀번호 알림</string>\n    <string name=\"pref_google_auth_export_title\">Google Authenticator으로 내보내기</string>\n    <string name=\"pref_google_auth_export_descriptor\">Google Authenticator에 호환되는 QR코드를 생성합합니다.</string>\n    <string name=\"pref_google_auth_export_no_data\">내보낼 데이터가 없습니다</string>\n    <plurals name=\"pref_google_auth_export_incompatible_entries\">\n        <item quantity=\"other\">호환되지 않는 %d개 항목 건너뜀</item>\n    </plurals>\n    <string name=\"pref_password_reminder_summary\">비밀번호를 입력하라는 %s 알림을 표시하여 비밀번호를 잊어버리지 않도록 합니다.</string>\n    <string name=\"pref_password_reminder_summary_disabled\">비활성화됨</string>\n    <string name=\"pref_secure_screen_title\">화면 보안</string>\n    <string name=\"pref_secure_screen_summary\">앱 내에서 스크린샷과 같은 화면을 찍으려는 시도를 차단합니다</string>\n    <string name=\"pref_tap_to_reveal_title\">눌러서 확인하기</string>\n    <string name=\"pref_tap_to_reveal_summary\">토큰은 기본적으로 숨겨집니다. 탭하면 표시됩니다.</string>\n    <string name=\"pref_tap_to_reveal_time_title\">탭 이후 가려지기까지..</string>\n    <string name=\"pref_auto_lock_title\">자동 잠금</string>\n    <string name=\"pref_auto_lock_summary\">%s인 경우</string>\n    <string name=\"pref_auto_lock_summary_disabled\">비활성화됨</string>\n    <string name=\"pref_auto_lock_prompt\">자동으로 잠기는 상황</string>\n    <string name=\"pref_auto_lock_type_back_button\">뒤로 버튼이 눌렸음</string>\n    <string name=\"pref_auto_lock_type_minimize\">앱이 최소화되었음</string>\n    <string name=\"pref_auto_lock_type_device_lock\">기기가 잠겼을 때</string>\n    <string name=\"pref_backup_password_category\">백업 &amp; 내보내기</string>\n    <string name=\"pref_backup_password_title\">백업 &amp; 복원에 다른 비밀번호 설정</string>\n    <string name=\"pref_backup_password_summary\">활성화시, 앱 잠금을 해제하는 데 사용된 비밀번호를 더 이상 백업 및 복원의 잠금 해제에 사용할 수 없습니다.</string>\n    <string name=\"pref_backup_password_change_title\">백업 &amp; 복원의 비밀번호 변경</string>\n    <string name=\"pref_backup_password_change_summary\">백업 및 복원 중에 암호화하는 데 사용할 새 비밀번호를 설정합니다.</string>\n    <string name=\"pref_encryption_title\">암호화</string>\n    <string name=\"pref_encryption_summary\">보관함을 잠그고 비밀번호 또는 생체 인식으로 해제합니다</string>\n    <string name=\"pref_biometrics_title\">생체 인식 사용</string>\n    <string name=\"pref_biometrics_summary\">잠금 해제에 생체 인식을 사용합니다</string>\n    <string name=\"pref_search_behavior_summary\">검색 범위: %s</string>\n    <string name=\"pref_search_behavior_prompt\">제공된 필드에서 검색합니다</string>\n    <string name=\"pref_search_behavior_type_name\">이름</string>\n    <string name=\"pref_search_behavior_type_issuer\">서비스명</string>\n    <string name=\"pref_search_behavior_type_note\">메모</string>\n    <string name=\"pref_search_behavior_type_groups\">그룹</string>\n    <string name=\"pref_set_password_title\">비밀번호 변경</string>\n    <string name=\"pref_set_password_summary\">잠금 해제가 필요할 때 쓸 새로운 비밀번호를 설정합니다</string>\n    <string name=\"no_events_title\">보고된 이벤트 없음</string>\n    <string name=\"no_events_description\">앱에서 보고된 중요한 이벤트 없음</string>\n    <string name=\"event_title_vault_unlocked\">잠금 해제됨</string>\n    <string name=\"event_description_vault_unlocked\">성공적으로 잠금이 해제되었습니다</string>\n    <string name=\"event_title_backup_created\">백업 생성됨</string>\n    <string name=\"event_description_backup_created\">성공적으로 백업이 생성되었습니다</string>\n    <string name=\"event_title_android_backup_created\">안드로이드에서 백업 생성됨</string>\n    <string name=\"event_description_android_backup_created\">성공적으로 안드로이드에서 백업이 생성되었습니다</string>\n    <string name=\"event_title_vault_exported\">내보내기됨</string>\n    <string name=\"event_description_vault_exported\">보관함의 복사본 내보내기에 성공했습니다</string>\n    <string name=\"event_title_entry_shared\">항목 공유됨</string>\n    <string name=\"event_description_entry_shared\">항목이 공유되었습니다</string>\n    <string name=\"event_title_vault_unlock_failed_password\">잠금 해제 실패 (비밀번호)</string>\n    <string name=\"event_description_vault_unlock_failed_password\">비밀번호를 사용한 잠금 해제에 실패했습니다</string>\n    <string name=\"event_title_vault_unlock_failed_biometrics\">잠금 해제 실패 (생체 인식)</string>\n    <string name=\"event_description_vault_unlock_failed_biometrics\">생체 인식을 사용한 잠금 해제에 실패했습니다</string>\n    <string name=\"event_unknown\">알 수 없는 이벤트 유형</string>\n    <string name=\"audit_log_entry_deleted\">(삭제됨)</string>\n    <string name=\"today_at_time\">오늘 %1$s</string>\n    <string name=\"day_of_week_at_time\">%1$s %2$s</string>\n    <string name=\"export_encrypted\">보관함 암호화하기</string>\n    <string name=\"export_help\">이 작업을 수행하면 Aegis의 내부 저장소에서 보관함을 내보냅니다. 내보낼 형식 선택:</string>\n    <string name=\"export_warning_unencrypted\">암호화되지 않은 보관함을 내보내려는 것 같습니다. <b>이것은 권장되지 않습니다</b>.</string>\n    <string name=\"export_warning_password\">내보내기는 보안 설정에서 설정된 별도의 비밀번호를 사용하여 암호화됩니다.</string>\n    <string name=\"understand_risk_accept\">아 예 위험하군요</string>\n    <string name=\"export_format_aegis\">Aegis (.JSON)</string>\n    <string name=\"export_format_google_auth_uri\">텍스트 파일 (.TXT)</string>\n    <string name=\"export_format_html\">웹 페이지 (.HTML)</string>\n    <string name=\"export_format_hint\">내보내기 형식</string>\n    <string name=\"export_all_groups\">모든 그룹 내보내기</string>\n    <string name=\"export_choose_groups\">내보낼 그룹 선택하기</string>\n    <plurals name=\"export_groups_selected_count\">\n        <item quantity=\"other\">그룹 %d개 선택됨</item>\n    </plurals>\n    <string name=\"export_no_groups_selected\">아무 그룹도 선택받지 못했습니다</string>\n    <string name=\"export_html_title\" comment=\"The title of an HTML export document\">Aegis Authenticator로부터</string>\n    <string name=\"choose_authentication_method\">보안</string>\n    <string name=\"authentication_method_explanation\">Aegis는 보안에 중점을 둔 2FA 앱입니다. 토큰은 사용자가 선택한 비밀번호로 선택적으로 암호화할 수 있는 보관함에 저장됩니다. 공격자가 암호화된 보관함 파일을 입수하면 암호를 모르면 콘텐츠에 액세스할 수 없습니다.\\n\\n우리는 이미 당신의 장치에 가장 적합하다고 생각되는 옵션을 선택해 두었습니다.</string>\n    <string name=\"authentication_method_none\">없음</string>\n    <string name=\"authentication_method_none_description\">보관함 해제에 비밀번호가 필요하지 않고고 이는 암호화되지 않음을 의미합니다. <b>이 설정은 권장되지 않습니다</b>.</string>\n    <string name=\"authentication_method_password\">비밀번호</string>\n    <string name=\"authentication_method_password_description\">보관함 해제에 비밀번호가 필요합니다.</string>\n    <string name=\"authentication_method_password_explanation\">경고: 만약 비밀번호를 잊어버렸다면, 영원히, 영원히 토큰에 접근할 수 없게 됩니다. 비밀번호 없이는 \\\"절대\\\" 복구가 불가능합니다.</string>\n    <string name=\"authentication_method_biometrics\">생체 인식</string>\n    <string name=\"authentication_method_biometrics_description\">비밀번호에 추가로, 지문과 같이 이 장치에 등록된 생체 인식을 잠금 해제에 사용합니다.</string>\n    <string name=\"authentication\">보관함 잠금 해제</string>\n    <string name=\"authentication_multiline\" comment=\"The newline in the middle is used for aesthetic purposes\">보관함\\n잠금 해제</string>\n    <string name=\"auth_use_biometrics\">또는 <font fgcolor=\"#FF0D86C1\">여기</font>를 눌러 생체 인식 사용</string>\n    <string name=\"set_password\">비밀번호를 입력해주세요</string>\n    <string name=\"set_group\">그룹 이름을 입력해주세요</string>\n    <string name=\"set_number\">숫자를 입력해주세요</string>\n    <string name=\"set_password_confirm\">비밀번호를 확인해주세요</string>\n    <string name=\"invalid_password\">비밀번호가 올바르지 않습니다</string>\n    <string name=\"invalidated_biometrics\">기기의 보안 설정이 변경되었습니다. \\\"Aegis -&gt; 설정 -&gt; 보안 -&gt; 생체 인식 잠금 해제\\\"에서 생체 인식을 비활성화한 후 다시 활성화 해주세요.</string>\n    <string name=\"password_reminder\">비밀번호를 입력해주세요. 잊어버리지 않도록 가끔 물어볼 수 있습니다.</string>\n    <string name=\"password_reminder_dialog_title\">기본적으로 생체 인식 사용</string>\n    <string name=\"password_reminder_dialog_message\">비밀번호를 잊어버리지 않고 보관함이 잠기지 않도록 비밀번호를 입력하라는 메시지가 가끔 표시됩니다. 비밀번호를 한 번 입력하면 다시 비밀번호 알림이 표시될 때까지 Aegis는 기본적으로 생체 인식 잠금 해제로 돌아갑니다.</string>\n    <string name=\"password_reminder_freq_never\">없음</string>\n    <string name=\"password_reminder_freq_weekly\">1주</string>\n    <string name=\"password_reminder_freq_biweekly\">2주</string>\n    <string name=\"password_reminder_freq_monthly\">1개월</string>\n    <string name=\"password_reminder_freq_quarterly\">3개월</string>\n    <string name=\"enter_password_2fas_message\">2FAS 백업이 암호화되어 있습니다. 아래에 비밀번호를 입력해주세요.</string>\n    <string name=\"enter_password_authy_message\">Authy 토큰이 암호화된 것으로 보입니다. Aegis를 닫은 다음 Authy를 열고 비밀번호로 토큰을 해제해주세요. 아래에 비밀번호를 입력해서도 Aegis가 대신 Authy 토큰을 해독할 수 있습니다.</string>\n    <string name=\"enter_password_aegis_title\">가져오기 비밀번호를 입력해주세요</string>\n    <string name=\"period_hint\">주기 (초)</string>\n    <string name=\"algorithm_hint\">해시 함수</string>\n    <string name=\"type\">유형</string>\n    <string name=\"share\">공유</string>\n    <string name=\"yes\">예</string>\n    <string name=\"no\">아니요</string>\n    <string name=\"undo\">실행 취소</string>\n    <string name=\"unlock\">잠금 해제</string>\n    <string name=\"advanced\">고급</string>\n    <string name=\"counter\">카운터</string>\n    <string name=\"digits\">숫자</string>\n    <string name=\"secret\">비밀키</string>\n    <string name=\"scan\">QR코드 스캔</string>\n    <string name=\"scan_image\">이미지 스캔</string>\n    <string name=\"enter_manually\">수동으로 입력</string>\n    <string name=\"set_up_biometric\">생체 인식 잠금 설정하기</string>\n    <string name=\"copy\">복사</string>\n    <string name=\"edit\">수정</string>\n    <string name=\"select_all\">전체 선택</string>\n    <string name=\"assign_icons\">아이콘 할당</string>\n    <string name=\"assign_groups\">그룹에 할당하기</string>\n    <string name=\"assign_groups_dialog_summary\">선택된 항목을 어떤 그룹에 할당할지 선택해주세요．</string>\n    <string name=\"assign_groups_dialog_dropdown\">그룹 선택하기</string>\n    <string name=\"favorite\" comment=\"Verb\">즐겨찾기</string>\n    <string name=\"unfavorite\" comment=\"Verb\">즐겨찾기 해제</string>\n    <string name=\"error_all_caps\">오류</string>\n    <string name=\"password\">비밀번호</string>\n    <string name=\"confirm_password\">비밀번호 확인</string>\n    <string name=\"show_password\">비밀번호 표시</string>\n    <string name=\"new_entry\">새 항목</string>\n    <string name=\"add_new_entry\">새 항목 추가</string>\n    <string name=\"unlock_vault_error\">보관함 잠금 해제 실패</string>\n    <string name=\"unlock_vault_error_description\">비밀번호가 올바르지 않습니다. 잘못 입력하지는 않았는지 확인해주세요.</string>\n    <string name=\"password_equality_error\">비밀번호는 동일하고 비어있지 않아야 합니다</string>\n    <string name=\"snackbar_authentication_method\">인증 수단을 선택해주세요</string>\n    <string name=\"encrypting_vault\">보관함을 암호화하는 중</string>\n    <string name=\"exporting_vault\">보관함을 내보내는 중</string>\n    <string name=\"optimizing_icon\">아이콘 최적화</string>\n    <string name=\"optimizing_icon_multiple\">아이콘 최적화 중 %1$d/%2$d</string>\n    <string name=\"reading_file\">파일 읽는 중</string>\n    <string name=\"requesting_root_access\">루트 권한 필요</string>\n    <string name=\"analyzing_qr\">QR 코드 분석 중</string>\n    <string name=\"analyzing_qr_multiple\">QR 코드 분석 중 %1$d/%2$d (%3$s)</string>\n    <plurals name=\"added_new_entries\">\n        <item quantity=\"other\">새 항목 %d개가 추가되었습니다</item>\n    </plurals>\n    <string name=\"importing_icon_pack\">아이콘 팩을 불러오는 중</string>\n    <string name=\"delete_entry\">항목 삭제</string>\n    <string name=\"delete_entry_description\">정말로 이 항목을 삭제하시겠어요?</string>\n    <string name=\"delete_entry_explanation\">이 행동(%s)은 2단계 인증(2FA)를 비활성화하지 않습니다. 접근 권한을 잃지 않으려면 2FA를 비활성화했거나 이 서비스에 대한 코드를 생성할 수 있는 대체 방법이 있는지 확인하세요.</string>\n    <string name=\"delete_entries\">항목 삭제</string>\n    <plurals name=\"delete_entries_description\">\n        <item quantity=\"other\">정말로 %d개의 항목을 삭제하시겠나요?</item>\n    </plurals>\n    <string name=\"discard_changes\">변경을 취소하시겠어요?</string>\n    <string name=\"discard_changes_description\">변경 사항이 저장되지 않았습니다</string>\n    <string name=\"saving_profile_error\">프로필 저장 오류</string>\n    <string name=\"saving_assign_icons_error\">아이콘 할당 오류</string>\n    <string name=\"welcome\">환영합니다!!</string>\n    <string name=\"app_description\">Ageis는 무료고, 자유롭고, 보안에, 무려 오픈 소스인 2FA 앱입니다.</string>\n    <string name=\"setup_completed\">설정 완료</string>\n    <string name=\"setup_completed_description\">Aegis가 설정되고, 이제 사용할 준비가 되었습니다!</string>\n    <string name=\"vault_not_found\">보관함이 없었고, 설정을 시작하는 중…</string>\n    <string name=\"copied\">복사됨</string>\n    <string name=\"errors_copied\">클립보드에 복사 중 오류</string>\n    <string name=\"version_copied\">버전을 클립보드에 복사했습니다</string>\n    <string name=\"error_required_field\">필수로 기입해야 합니다</string>\n    <string name=\"error_occurred\">오류 발생</string>\n    <string name=\"decryption_error\">보관함 잠금 해제 중 오류 발생</string>\n    <string name=\"decryption_corrupt_error\">보관함 잠금 해제 중 오류가 발생했습니다. 보관함 파일이 손상되었는지 확인해주세요.</string>\n    <string name=\"saving_error\">보관함 저장 중 오류 발생</string>\n    <string name=\"vault_init_error\">보관함 초기화 중 오류 발생</string>\n    <string name=\"vault_load_error\">저장소에서 보관함 가져오던 중 오류 발생</string>\n    <string name=\"biometric_decrypt_error\">생체 인증으로 보관함의 암호를 해독하는 동안 오류가 발생했습니다. 일반적으로 장치의 보안 설정이 변경된 경우에만 발생합니다. 비밀번호로 보관함의 잠금을 해제하고 Aegis의 설정에서 생체 인증을 다시 설정하세요.</string>\n    <string name=\"biometric_init_error\">생체 인증을 준비하는 동안 오류가 발생했습니다. 이는 일반적으로 장치의 보안 설정이 변경된 경우에만 발생합니다. 비밀번호로 보관함의 잠금을 해제하고 Aegis의 설정에서 생체 인증을 다시 설정하세요.</string>\n    <string name=\"disable_encryption\">암호화 비활성화</string>\n    <string name=\"disable_encryption_description\">암호화를 비활성화하시겠나요? 그렇게 하면 보관함이 일반 텍스트로 저장됩니다. <b>자동 백업도 비활성화됩니다.</b></string>\n    <string name=\"enable_encryption_error\">암호화 활성화 중 오류 발생</string>\n    <string name=\"disable_encryption_error\">암호화 비활성화 중 오류 발생</string>\n    <string name=\"backup_successful\">백업이 성공적으로 예약되었습니다</string>\n    <string name=\"backup_error\">백업 생성 중 오류 발생</string>\n    <string name=\"backup_status_success\">마지막으로 성공한 백업: %s</string>\n    <string name=\"backup_status_failed\">마지막으로 실패한 백업: %s</string>\n    <string name=\"backup_status_none\">아직 아무 백업도 만들어지지 않았습니다</string>\n    <string name=\"backup_warning_password\">백업은 보안 설정에서 설정된 별도의 비밀번호를 사용하여 암호화됩니다</string>\n    <string name=\"documentsui_error\">장치에서 DocumentsUI가 누락된 것 같습니다. 이는 문서를 선택하고 작성하는 데 필요한 중요한 시스템 구성 요소입니다. 도구를 사용하여 장치를 &quot;삭제\n&quot;한 경우 실수로 삭제했을 수 있으므로 다시 설치해야 합니다．</string>\n    <string name=\"icon_pack_import_error\">아이콘 팩 생성 중 오류 발생</string>\n    <string name=\"icon_pack_import_exists_error\">가져오려는 아이콘 팩이 이미 있는 것 같습니다. 덮어쓰시겠나요?</string>\n    <string name=\"icon_pack_delete_error\">아이콘 팩 삭제 중 오류 발생</string>\n    <plurals name=\"icon_pack_info\">\n        <item quantity=\"other\">%d 아이콘</item>\n    </plurals>\n    <string name=\"icon_custom\">사용자 지정</string>\n    <string name=\"permission_denied\">승인 거부됨</string>\n    <string name=\"andotp_new_format\">새 형식 (v0.6.3 또는 신버전) </string>\n    <string name=\"andotp_old_format\">구 형식 (v0.6.2 또는 구버전) </string>\n    <string name=\"choose_andotp_importer\">andOTP 백업 파일은 어떤 형식인가요?</string>\n    <string name=\"choose_totpauth_importer\">이 TOTP 인증자 백업은 비밀번호로 암호화되어 있나요?</string>\n    <string name=\"choose_application\">불러오려는 앱을 선택해주세요</string>\n    <string name=\"choose_theme\">원하는 테마를 선택해주세요</string>\n    <string name=\"choose_account_name_position\">계정 이름 위치를 선택해주세요</string>\n    <string name=\"choose_view_mode\">보기 모드를 선택해주세요</string>\n    <string name=\"choose_copy_behavior\">복사 방법을 선택해주세요</string>\n    <string name=\"parsing_file_error\">파일 파싱 중 오류 발생</string>\n    <string name=\"file_not_found\">오류: 파일을 찾을 수 없습니다</string>\n    <string name=\"reading_file_error\">파일을 읽던 중 오류가 발생했습니다</string>\n    <string name=\"app_lookup_error\">오류: 앱이 설치되지 않았습니다</string>\n    <string name=\"app_version_error\">이 버전의 %s는 지원되지 않습니다. 최근 버전에서는 내부 저장소 디렉터리의 일부 파일이 암호화되기 시작하여 Aegis가 가져오기에 필요한 정보에 액세스할 수 없습니다. 가져오기를 시도하면 오류가 발생할 수 있습니다. 그래도 계속하시겠나요?</string>\n    <string name=\"root_error\">오류: 루트 권한을 얻을 수 없습니다</string>\n    <plurals name=\"imported_entries_count\">\n        <item quantity=\"other\">%d 개 불러옴</item>\n    </plurals>\n    <plurals name=\"entries_shown\">\n        <item quantity=\"other\">%d개 표시 중</item>\n    </plurals>\n    <string name=\"intro_import_error_title\">보관함을 불러오던 중 오류가 발생했습니다</string>\n    <string name=\"import_error_title\">불러오기 중 하나 이상의 오류가 발생했습니다</string>\n    <string name=\"exporting_vault_error\">보관함을 내보내던 중 오류가 발생했습니다</string>\n    <string name=\"exported_vault\">보관함을 내보냈습니다</string>\n    <string name=\"encryption_set_password_error\">암호를 설정하던 중 오류가 발생했습니다.</string>\n    <string name=\"encryption_enable_biometrics_error\">생체 인식 잠금 해제를 활성화하는 동안 오류가 발생했습니다. 일부 기기에서는 생체 인증이 제대로 구현되지 않으며, 사용 중인 기기도 여기에 해당할 수 있습니다. 대신 비밀번호 전용 구성으로 전환해 보세요.</string>\n    <string name=\"no_cameras_available\">사용 가능한 카메라 없음</string>\n    <string name=\"read_qr_error\">QR 코드를 읽던 중 오류가 발생했습니다</string>\n    <string name=\"read_qr_error_phonefactor\">Aegis는 Microsoft의 독점적인 2FA 알고리즘과 호환되지 않습니다. Office 365에서 2FA를 설정할 때 \\'알림 없이 애플리케이션 설정\\'을 선택해야 합니다.</string>\n    <string name=\"partial_google_auth_import\">불완전한 Google 인증자 내보내기가 감지되었습니다</string>\n    <string name=\"partial_google_auth_import_warning\">일부 QR 코드가 불러오기에서 누락되었습니다. 다음 코드들이 발견되지 않았습니다: \\n\\n<b>%s</b>\\n\\n이 부분 불러오기를 계속할 수 있지만 토큰에 대한 액세스 권한을 잃을 위험이 없도록 모든 QR 코드를 사용하여 다시 시도하는 것이 좋습니다.</string>\n    <string name=\"missing_qr_code_descriptor\">• QR 코드 %d</string>\n    <plurals name=\"import_partial_export_anyway\">\n        <item quantity=\"other\">어쨋든 토큰 %d개를 불러오기</item>\n    </plurals>\n    <string name=\"import_google_auth_failure\">Google 인증자 내보내기를 불러오지 못했습니다</string>\n    <string name=\"unrelated_google_auth_batches_error\">내보내기에 관련 없는 배치에 대한 정보가 포함되어 있습니다. 한 번에 하나의 배치를 가져와 보세요.</string>\n    <string name=\"no_tokens_can_be_imported\">아무 토큰도 가져오지 못했습니다</string>\n    <string name=\"unlocking_vault\">보관함 잠금 해제 중</string>\n    <string name=\"rename_group\">그룹 이름 바꾸기</string>\n    <string name=\"no_group_selection\">어떤 그룹에도 속하지 않은 항목은, \\\"그룹 없음\\\"에서 발견될 수 있습니다.</string>\n    <string name=\"remove_group\">그룹 삭제</string>\n    <string name=\"remove_group_description\">정말로 이 그룹을 삭제하시겠나요? 그룹 내의 항목들은 자동적으로 \\'그룹 없음\\'으로 변경됩니다.</string>\n    <string name=\"remove_unused_groups\">사용하지 않는 그룹 삭제</string>\n    <string name=\"remove_unused_groups_description\">정말로 항목이 할당되지 않은 모든 그룹을 삭제하시겠나요?</string>\n    <string name=\"remove_icon_pack\">아이콘 팩 삭제</string>\n    <string name=\"remove_icon_pack_description\">정말로 이 아이콘 팩을 삭제하시겠나요? 이 아이콘 팩의 아이콘을 사용하는 항목들은 영향이 없습니다.</string>\n    <string name=\"details\">상세</string>\n    <string name=\"show_error_details\">오류 상세 표시</string>\n    <string name=\"lock\">잠금</string>\n    <string name=\"name\">이름</string>\n    <string name=\"no_group\">그룹 없음</string>\n    <string name=\"sort\" comment=\"Title of the Sort button in the top action bar of the main view\">정렬</string>\n    <string name=\"sort_alphabetically\">서비스명 (이름순)</string>\n    <string name=\"sort_alphabetically_reverse\">서비스명 (이름 역순)</string>\n    <string name=\"sort_alphabetically_name\">계정 (이름순)</string>\n    <string name=\"sort_alphabetically_name_reverse\">계정 (이름 역순)</string>\n    <string name=\"sort_usage_count\">사용 횟수</string>\n    <string name=\"sort_last_used\">최근 사용</string>\n    <string name=\"sort_custom\">사용자 지정</string>\n    <string name=\"last_used\">최근 사용</string>\n    <string name=\"last_used_never\">없음</string>\n    <string name=\"new_group\">새 그룹...</string>\n    <string name=\"group\">그룹</string>\n    <string name=\"group_name_hint\">그룹명</string>\n    <string name=\"preference_manage_groups\">그룹 편집</string>\n    <string name=\"preference_manage_groups_summary\">여기에서 그룹을 관리하거나 삭제할 수 있습니다</string>\n    <string name=\"preference_reset_usage_count\">사용 횟수 초기화</string>\n    <string name=\"preference_reset_usage_count_summary\">보관함에서 모든 항목의 사용횟수 초기화</string>\n    <string name=\"preference_reset_usage_count_dialog\">보관함 속 모든 항목의 사용횟수를 0으로 초기화하시겠나요?</string>\n    <string name=\"note\" comment=\"Users can add a note to an entry\">메모</string>\n    <string name=\"clear\">지우기</string>\n    <string name=\"dialog_duplicate_entry_title\" comment=\"'Duplicate' is a noun here\">항목 복제</string>\n    <string name=\"dialog_duplicate_entry_message\">이 항목과 같은 공급자와 이름을 가진 항목이 존재합니다. 진행하시겠나요?</string>\n    <string name=\"dialog_duplicate_entry_overwrite_title\">존재하는 항목 덮어쓰기</string>\n    <string name=\"dialog_duplicate_entry_overwrite_subtitle\">기존에 존재하던 항목을 덮어씁니다. 다시 되돌릴 수 없습니다</string>\n    <string name=\"dialog_duplicate_entry_suffix_title\">접미사 추가</string>\n    <string name=\"dialog_duplicate_entry_suffix_subtitle\">새로운 항목 이름에 접미사를 추가합니다. 앞으로의 이렇게 됩니다: %s</string>\n    <string name=\"dialog_duplicate_entry_cancel_title\">저장 취소</string>\n    <string name=\"dialog_duplicate_entry_cancel_subtitle\">저장을 다시하기 전에 편집할 수 있게 합니다</string>\n    <plurals name=\"dialog_duplicate_entry_overwrite_dialog_message\">\n        <item quantity=\"other\">다음 이름을 가진 %d개 항목을 삭제하시겠나요?\\n\\n%s - %s</item>\n    </plurals>\n    <string name=\"dialog_duplicate_entry_overwrite_dialog_title\">삭제 확인</string>\n    <string name=\"pref_haptic_feedback_summary\">코드가 갱신될 때 기기가 진동합니다</string>\n    <string name=\"pref_haptic_feedback_title\">햅틱 피드백</string>\n    <string name=\"pref_highlight_entry_title\">터치되었을 때 토큰 강조하기</string>\n    <string name=\"pref_highlight_entry_summary\">터치되었을 때 일시적으로 토큰을 강조하여 구분하기 쉽게 합니다</string>\n    <string name=\"pref_groups_multiselect_title\">다중 그룹 선택</string>\n    <string name=\"pref_groups_multiselect_summary\">한 번에 여러 개의 그룹을 선택할 수 있게 합니다</string>\n    <string name=\"pref_minimize_on_copy_title\">복사할 때 최소화하기</string>\n    <string name=\"pref_minimize_on_copy_summary\">토큰을 복사한 후, 앱을 최소화합니다</string>\n    <string name=\"pref_copy_behavior_title\">클립보드에 토큰 복사하기</string>\n    <string name=\"pref_search_behavior_title\">검색 행동</string>\n    <string name=\"pref_pause_entry_title\">터치되었을 때 토큰 얼리기</string>\n    <string name=\"pref_pause_entry_summary\">토큰을 탭하여 토큰의 자동 새로 고침을 일시 중지합니다. 토큰이 초점이 맞춰져 있는 동안에는 토큰이 업데이트되지 않습니다. “탭하면 토큰 강조 표시” 또는 ‘탭하여 표시’가 필요합니다.</string>\n    <string name=\"pin_keyboard_description\">비밀번호를 입력하여 PIN 키보드를 활성화합니다. 비밀번호가 숫자로만 구성된 경우에만 작동합니다</string>\n    <string name=\"pin_keyboard_error\">PIN 키보드를 활성화하던 중 오류가 발생했습니다</string>\n    <string name=\"pin_keyboard_error_description\">PIN 키보드를 설정할 수 없습니다. 비밀번호가 반드시 숫자만을 포함해야 합니다.</string>\n    <string name=\"pin_keyboard_disabled\">비밀번호가 변경되었습니다. PIN 키보드는 더 이상 보여지지 않습니다.</string>\n    <string name=\"selected\">선택됨</string>\n    <string name=\"dark_theme_title\">다크 테마</string>\n    <string name=\"light_theme_title\">라이트 테마</string>\n    <string name=\"amoled_theme_title\">AMOLED 테마</string>\n    <string name=\"system_theme_title\">배터리 절약 모드</string>\n    <string name=\"system_amoled_theme_title\">배터리 절약 모드 (AMOLED)</string>\n    <string name=\"normal_viewmode_title\">보통</string>\n    <string name=\"compact_mode_title\">간단히</string>\n    <string name=\"small_mode_title\">작게</string>\n    <string name=\"tiles_mode_title\">타일</string>\n    <string name=\"unknown_issuer\">알 수 없는 공급자</string>\n    <string name=\"unknown_account_name\">알 수 없는 계정명</string>\n    <plurals name=\"import_error_dialog\">\n        <item quantity=\"other\">Aegis가 토큰 %d개를 불러오지 못했습니다. 이 토큰들은 스킵될 것입니다. \\'상세\\'를 눌러 오류에 대한 정보를 더 확인할 수 있습니다.</item>\n    </plurals>\n    <string name=\"unable_to_process_deeplink\">딥 링크를 처리할 수 없음</string>\n    <string name=\"unable_to_read_qrcode_file\">파일로부터 QR 코드를 읽고 처리할 수 없음: %s.</string>\n    <string name=\"unable_to_process_shared_text\">공유 텍스트를 OTP로 처리할 수 없음</string>\n    <string name=\"unable_to_read_qrcode_files\">일부 QR 코드를 읽고 처리할 수 없음, %1$d/%2$d개 항목만 불러와졌습니다.</string>\n    <string name=\"unable_to_generate_qrcode\">QR 코드를 생성할 수 없음</string>\n    <string name=\"select_picture\">사진 선택</string>\n    <string name=\"select_icon\">아이콘 선택</string>\n    <string name=\"tile_open_vault\" comment=\"label for a quick settings tile that opens the app when tapped\">보관함 열기</string>\n    <string name=\"tile_open_scanner\" comment=\"label for a quick settings tile that opens the QR code scanner when tapped\">스캐너 열기</string>\n    <string name=\"toggle_checkboxes\">확인란 토글</string>\n    <string name=\"search\">검색</string>\n    <string name=\"channel_name_lock_status\">잠금 상태</string>\n    <string name=\"channel_description_lock_status\">Aegis는 보관함이 잠겨 있을 때 영구 알림을 생성하여 사용자에게 알릴 수 있습니다</string>\n    <string name=\"vault_unlocked_state\">보관함이 잠금 해제되었습니다. 여기를 눌러 잠그세요.</string>\n    <string name=\"version\">버전</string>\n    <string name=\"changelog\">변경 내역</string>\n    <string name=\"whats_new\">새로운 소식</string>\n    <string name=\"github_description\">소스코드, 문제 및 정보</string>\n    <string name=\"license\">라이선스</string>\n    <string name=\"license_description\">Aegis 인증자는 GPLv3 라이선스 하에 있습니다</string>\n    <string name=\"third_party_licenses\">서드파티 라이선스</string>\n    <string name=\"third_party_licenses_description\">Aegis가 사용하는 서드파티 라이브러리</string>\n    <string name=\"country_netherlands\">네덜란드</string>\n    <string name=\"email_us\">이메일 쓰기</string>\n    <string name=\"visit_website\">웹사이트 방문하기</string>\n    <string name=\"about_support\">지원</string>\n    <string name=\"support_rate\">평가</string>\n    <string name=\"support_rate_description\">구글 플레이 스토어에서 리뷰를 남겨 응원해주세요</string>\n    <string name=\"webview_error\">이 기기는 변경 내역 및 라이선스를 보는 데 필요한 웹 뷰를 지원하지 않습니다. 시스템 구성 요소가 누락된 것입니다.</string>\n    <string name=\"email\">이메일</string>\n    <string name=\"time_sync_warning_title\">자동 시간 동기화</string>\n    <string name=\"time_sync_warning_message\">Aegis는 올바른 코드를 생성하기 위해 시스템 동기화 시간에 의존합니다. 몇 초만 벗어나도 잘못된 코드가 생성될 수 있습니다. 장치가 시간을 자동으로 동기화하도록 설정되지 않은 것 같습니다. 지금 변경하시겠나요?</string>\n    <string name=\"time_sync_warning_disable\">그만해!! 나는 다 알아!!</string>\n    <string name=\"google_qr_export_unrelated\">관련 없는 QR 코드가 발견되었습니다. 스캐너를 재시작해보세요.</string>\n    <plurals name=\"google_qr_export_scanned\">\n        <item quantity=\"other\">QR 코드 %1$d/%2$d개가 스캔됨</item>\n    </plurals>\n    <string name=\"google_qr_export_unexpected\">QR 코드 #%1$d가 아닌 QR 코드 #%2$d가 스캔됨</string>\n    <string name=\"backup_error_bar_message\"><b>보관함 백업이 최근에 실패했습니다</b></string>\n    <string name=\"backup_error_dialog_details\" comment=\"The first parameter is the type of backup (e.g. built-in or Android backup). The second parameter is an elapsed time in the style of 'x seconds/minutes/days ago'.\">        최근에 %1$s를 사용한 보관함 백업에 오류가 발생했습니다. 백업이 %2$s에 시도되었습니다. 백업이 완전하게 이루어질 수 있는지 설정을 확인해주세요.\n    </string>\n    <string name=\"backup_permission_error_dialog_details\" comment=\"The first parameter is the type of backup (e.g. built-in or Android backup). The second parameter is an elapsed time in the style of 'x seconds/minutes/days ago'.\">        Aegis에 백업 대상에 대한 쓰기 권한이 없어서 %1$s를 사용하여 최근 보관함 백업을 시도하지 못했습니다. 백업이 %2$s에 시도되었습니다. 이 오류는 백업 대상을 이동/이름을 변경했거나 최근에 백업에서 Aegis를 복원한 경우에 발생할 수 있습니다. 백업 대상을 다시 설정하세요.    </string>\n    <string name=\"backup_system_builtin\">Aegis의 내부 자동 백업</string>\n    <string name=\"backup_system_android\">안드로이드 클라우드 백업 시스템</string>\n    <string name=\"backup_reminder_bar_message_with_latest\" comment=\"The parameter is an elapsed time in the style of 'x seconds/minutes/days ago'\">        마지막 백업이 오래되었습니다 (%s)\n    </string>\n    <string name=\"backup_reminder_bar_message\">        변경 사항이 백업되지 않았습니다\n    </string>\n    <string name=\"backup_reminder_bar_dialog_title\">변경 사항이 백업되지 않았습니다</string>\n    <string name=\"backup_reminder_bar_dialog_summary\">        최근 보관함의 변경 사항이 아직 백업되지 않았습니다. 계정에 대한 액세스 권한을 잃지 않으려면 정기적으로 백업을 하는 것이 중요합니다. 설정 메뉴에서 자동 백업을 설정해 보세요.\n    </string>\n    <string name=\"backup_reminder_bar_dialog_accept\">백업 설정하기</string>\n    <string name=\"backup_plaintext_export_warning\"><b>보관함이 최근에 일반 글자로 내보내졌습니다</b></string>\n    <string name=\"pref_show_plaintext_warning_hint\">이 경고 다시 보여주지 않기</string>\n    <string name=\"backup_plaintext_warning_explanation\">이 경고는 최근에 암호화되지 않은 보관함 사본을 내보냈기 때문에 보여집니다. 토큰의 보안을 위해서, 파일이 필요하지 않아지면 삭제하는 것을 권장합니다.</string>\n    <string name=\"switch_camera\">카메라 변경</string>\n    <string name=\"empty_list\">보여줄 코드가 없습니다. 오른쪽 아래 구석의 플러스 표시를 눌러 항목 추가를 시작해보세요!</string>\n    <string name=\"empty_list_title\">항목이 없습니다</string>\n    <string name=\"empty_group_list\">보여줄 그룹이 없습니다. 항목 편집 화면에서 그룹을 추가하세요</string>\n    <string name=\"empty_group_list_title\">그룹이 없습니다</string>\n    <string name=\"no_icon_packs\">불러온 아이콘 팩이 없습니다. 플러스 버튼을 눌러 불러와보세요. 팁: <a href=\"https://aegis-icons.github.io\">aegis-icons(Aegis 아이콘)</a>을 시도해보세요.</string>\n    <string name=\"no_icon_packs_title\">아이콘 팩이 없습니다</string>\n    <string name=\"pick_icon\">아이콘 선택하기</string>\n    <string name=\"uncategorized\">분류되지 않음</string>\n    <string name=\"done\">완료</string>\n    <plurals name=\"qr_count\">\n        <item quantity=\"other\">%d / %d QR 코드</item>\n    </plurals>\n    <string name=\"next\">다음</string>\n    <string name=\"previous\">이전</string>\n    <string name=\"copy_uri\">URI 복사하기</string>\n    <string name=\"unable_to_copy_uri_to_clipboard\">URI를 클립보드에 복사할 수 없습니다</string>\n    <string name=\"uri_copied_to_clipboard\">URI를 클립보드에 복사했습니다</string>\n    <string name=\"transfer_entry_description\">이 항목을 전송하려는 인증 앱으로 이 QR 코드를 스캔하세요</string>\n    <string name=\"transfer_entry_brightness\">화면 밝기를 최대로 변경하려면 QR 코드를 누르세요</string>\n    <string name=\"google_auth_compatible_transfer_description\">이 QR 코드를 Aegis 또는 Google Authenticator로 스캔하세요.\\n\\nGoogle Authenticator 앱의 제한으로 인해 SHA1을 사용하고 6자리 코드를 생성하는 TOTP &amp; HOTP 토큰만 포함되어 있습니다</string>\n    <string name=\"password_strength_very_weak\">매우 약함</string>\n    <string name=\"password_strength_weak\">약함</string>\n    <string name=\"password_strength_fair\">적당함</string>\n    <string name=\"password_strength_good\">좋음</string>\n    <string name=\"password_strength_strong\">강함</string>\n    <string name=\"password_strength_unknown\">강함을 분석하기엔 비밀번호가 너무 깁니다</string>\n    <string name=\"pref_pin_keyboard_title\">잠금화면에서 PIN 키보드 사용하기</string>\n    <string name=\"pref_pin_keyboard_summary\">PIN 키보드를 잠금화면에서 사용하려면 활성화하세요. 숫자로만 이루어진 비밀번호에만 작동합니다</string>\n    <string name=\"title_activity_preferences\">설정</string>\n    <string name=\"title_activity_manage_groups\">그룹 관리</string>\n    <string name=\"title_activity_transfer\">항목 이동</string>\n    <string name=\"title_activity_about\">정보</string>\n    <string name=\"title_activity_edit_entry\">항목 편집</string>\n    <string name=\"title_activity_scan_qr\">QR 코드 스캔</string>\n    <string name=\"title_activity_import_entries\">항목 불러오기</string>\n    <string name=\"title_activity_assign_icons\">아이콘 할당하기</string>\n    <string name=\"title_activity_licenses\">제 3자 라이선스</string>\n    <string name=\"dialog_wipe_entries_title\">항목 지우기</string>\n    <string name=\"dialog_wipe_entries_message\">보관함이 항목들을 포함합니다. 이 파일을 불러오기 전에 중복되는 항목을 제거하시겠나요?\\n\\n<b>이렇게 하면, 보관함에 있는 기존 항목에 영구적으로 액세스할 수 없게 됩니다.</b></string>\n    <string name=\"dialog_wipe_entries_checkbox\">보관함 내용 지우기</string>\n    <string name=\"panic_trigger_ignore_toast\">Aeigs가 패닉 트리거를 수신했지만 비활성화이므로, 무시합니다</string>\n    <string name=\"pref_panic_trigger_title\">패닉 트리거의 보관함 삭제</string>\n    <string name=\"pref_panic_trigger_summary\">Ripple에서 패닉 트리거를 수신하면 보관함 삭제</string>\n    <string name=\"import_vault\">Aegis 보관함 불러오기</string>\n    <string name=\"import_vault_hint\">다른 2FA 앱에서 불러오실건가요? 설정을 먼저 끝내고 설정 메뉴로 가보세요.</string>\n    <plurals name=\"import_duplicate_toast\">\n        <item quantity=\"other\">%d개의 잠재적 중복을 확인하지 않았습니다. 전체 목록을 검토해주세요.</item>\n    </plurals>\n    <string name=\"importer_help_2fas\">2FAS Authenticator 백업 파일을 제공해주세요.</string>\n    <string name=\"importer_help_aegis\">Aegis 백업 파일을 제공해주세요.</string>\n    <string name=\"importer_help_authenticator_plus\"><b>설정 -&gt; 백업 &amp; 복원- &gt; 글자 또는 HTML로 내보내기</b>에서 얻은 Authenticator Plus 내보내기 파일을 제공해주세요.</string>\n    <string name=\"importer_help_authy\">Authy의 내부 저장소 위치 <b>/data/data/com.authy.authy/shared_prefs/com.authy.storage.tokens.authenticator.xml</b>에 있는 파일의 사본을 제공해주세요.</string>\n    <string name=\"importer_help_andotp\">andOTP 내보내기 파일을 제공해주세요.</string>\n    <string name=\"importer_help_bitwarden\">Bitwarden 내보내기 파일을 제공해주세요. 암호화된 파일은 지원되지 않습니다.</string>\n    <string name=\"importer_help_battle_net_authenticator\">Battle.net Authenticator의 내부 저장소 위치 <b>/data/data/com.blizzard.messenger/shared_prefs/com.blizzard.messenger.authenticator_preferences.xml</b>에 있는 파일의 사본을 제공해주세요.</string>\n    <string name=\"importer_help_duo\">DUO의 내부 저장소 위치 <b>/data/data/com.duosecurity.duomobile/files/duokit/accounts.json</b>에 있는 파일의 사본을 제공해주세요.</string>\n    <string name=\"importer_help_ente_auth\">Ente Auth 내보내기 파일을 제공해주세요. 현재 암호화되지 않은 파일만 지원됩니다.</string>\n    <string name=\"importer_help_freeotp\">FreeOTP 2: 백업 파일을 제공해주세요.\\nFreeOTP 1.x: FreeOTP의 내부 저장소 위치 <b>/data/data/org.fedorahosted.freeotp/shared_prefs/tokens.xml</b>에 있는 파일의 사본을 제공해주세요.</string>\n    <string name=\"importer_help_freeotp_plus\">FreeOTP+ 내보내기 파일을 제공해주세요.</string>\n    <string name=\"importer_warning_title_freeotp2\">FreeOTP 2 호환성</string>\n    <string name=\"importer_warning_message_freeotp2\">백업이 손상될 수 있는 FreeOTP 2의 여러 문제가 있습니다. Aegis는 가능한 한 많은 항목을 복구하려고 시도하지만, 일부 또는 전체 항목을 불러오지 못할 수도 있습니다.</string>\n    <string name=\"importer_help_google_authenticator\"><b>Google Authenticator v5.10 및 이전 버전의 데이터베이스 파일만 지원됩니다</b>.\\n\\nGoogle Authenticator의 내부 저장소 위치 <b>/data/data/com.google.android.apps.authenticator2/databases/databases</b>에 존재하는 파일의 사본을 제공해주세요.</string>\n    <string name=\"importer_help_microsoft_authenticator\">Microsoft Authenticator의 내부 저장소 위치 <b>/data/data/com.azure.authenticator/databases/PhoneFactor</b>에 있는 파일의 사본을 제공해주세요.</string>\n    <string name=\"importer_help_plain_text\">각 줄에 Google Authenticator URI가 포함된 일반 텍스트 파일을 제공해주세요.</string>\n    <string name=\"importer_help_proton_authenticator\"><b>설정 -&gt; 내보내기</b>를 통해Proton Authenticator의 내보내기 파일 (.json)을 지원합니다.</string>\n    <string name=\"importer_help_steam\"><b>Steam v3.0과 이후 버전은 지원되지 않습니다</b>. Steam의 내부 저장소 위치 <b>/data/data/com.valvesoftware.android.steam.community/files/Steamguard-*.json</b>에 있는 파일의 사본을 제공해주세요.</string>\n    <string name=\"importer_help_stratum\"><b>설정 -&gt; 백업 -&gt; 암호화된 파일로 백업하기 (권장)</b>으로 얻은 Stratum 내보내기 파일을 제공해주세요.</string>\n    <string name=\"importer_help_totp_authenticator\">TOTP Authenticator 내보내기 파일을 제공해주세요.</string>\n    <string name=\"importer_help_winauth\">WinAuth 내보내기 파일을 제공해주세요.</string>\n    <string name=\"import_assign_icons_dialog_title\">아이콘 할당하기</string>\n    <string name=\"import_assign_icons_dialog_text\">불러온 항목에 아이콘을 할당하시겠나요?</string>\n    <string name=\"importer_encrypted_exception_google_authenticator\">암호화된 항목은 스킵되었습니다: %s</string>\n    <string name=\"importer_help_direct\">%s에서 직접 항목을 가져옵니다. 이를 위해서는 이 기기에 앱이 설치되어 있어야 하며 Aegis에 루트 접근 권한이 부여되어야 합니다.</string>\n    <string name=\"groups\">그룹</string>\n    <string name=\"pref_focus_search\">앱 시작 시 바로 검색하기</string>\n    <string name=\"pref_focus_search_summary\">앱이 열리면 즉시 검색을 실시합니다.</string>\n    <string name=\"pref_grouping_halves\">절반</string>\n    <string name=\"pref_grouping_none\">그룹 없음</string>\n    <string name=\"pref_grouping_size_two\">2개 그룹</string>\n    <string name=\"pref_grouping_size_three\">3개 그룹</string>\n    <string name=\"pref_grouping_size_four\">4개 그룹</string>\n    <string name=\"pref_copy_behavior_never\">없음</string>\n    <string name=\"pref_copy_behavior_single_tap\">단일 탭</string>\n    <string name=\"pref_copy_behavior_double_tap\">두 번 탭</string>\n    <string name=\"pref_account_name_position_hidden\">숨김</string>\n    <string name=\"pref_account_name_position_end\">공급자 옆에</string>\n    <string name=\"pref_account_name_position_below\">공급자 아래에</string>\n    <plurals name=\"time_elapsed_seconds\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"other\">%d 초 전</item>\n    </plurals>\n    <plurals name=\"time_elapsed_minutes\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"other\">%d 분 전</item>\n    </plurals>\n    <plurals name=\"time_elapsed_hours\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"other\">%d 시간 전</item>\n    </plurals>\n    <plurals name=\"time_elapsed_days\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"other\">%d 일 전</item>\n    </plurals>\n    <plurals name=\"time_elapsed_years\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"other\">%d 년 전</item>\n    </plurals>\n    <plurals name=\"dropdown_checkboxes_default_count\">\n        <item quantity=\"other\">%d개 항목 선택됨</item>\n    </plurals>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-ko-rKR-v29/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"system_theme_title\">시스템 기본값</string>\n    <string name=\"system_amoled_theme_title\">시스템 기본값 (검정)</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-lt-rLT/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources xmlns:tools=\"http://schemas.android.com/tools\">\n    <string name=\"action_settings\">Nustatymai</string>\n    <string name=\"action_about\">Apie</string>\n    <string name=\"action_delete\">Ištrinti</string>\n    <string name=\"action_transfer\">Perkelti</string>\n    <string name=\"action_edit_icon\">Redaguoti piktogramą</string>\n    <string name=\"action_reset_usage_count\">Atstatyti naudojimų skaičių</string>\n    <string name=\"action_reset_usage_count_dialog\">Ar tikrai norite nustatyti šio įrašo naudojimų skaičių į 0?</string>\n    <string name=\"action_default_icon\">Atkurti numatytąją piktogramą</string>\n    <string name=\"discard\">Atmesti</string>\n    <string name=\"save\">Išsaugoti</string>\n    <string name=\"all\">Viskas</string>\n    <string name=\"issuer\">Leidėjas</string>\n    <string name=\"yandex_pin\">PIN kodas (4–16 skaitmenų)</string>\n    <string name=\"motp_pin\">PIN kodas (4 skaitmenys)</string>\n    <string name=\"usage_count\">Naudojimų skaičius</string>\n    <string name=\"warning\">Įspėjimas</string>\n    <string name=\"pref_cat_appearance_app\">Programėlė</string>\n    <string name=\"pref_cat_appearance_entries\">Įrašai</string>\n    <string name=\"pref_cat_backups_android\">„Android“</string>\n    <string name=\"pref_cat_backups_auto\">Automatinės atsarginės kopijos</string>\n    <string name=\"pref_section_behavior_title\">Elgsena</string>\n    <string name=\"pref_section_behavior_summary\">Tinkinti sąveikos su įrašų sąrašu elgseną.</string>\n    <string name=\"pref_section_appearance_title\">Išvaizda</string>\n    <string name=\"pref_section_appearance_summary\">Derinti apipavidalinimą, kalbą ir kitus nustatymus, kurie paveikia programėlės išvaizdą.</string>\n    <string name=\"pref_section_security_title\">Saugumas</string>\n    <string name=\"pref_section_security_summary\">Konfigūruoti šifravimą, biometrinį atrakinimą, automatinį užrakinimą ir kitus saugumo nustatymus.</string>\n    <string name=\"pref_section_import_export_title\">Importavimas ir eksportavimas</string>\n    <string name=\"pref_section_import_export_summary\">Importuoti Aegis ar kitų tapatybės nustatymo programėlių atsargines kopijas. Sukurti rankinius jūsų Aegis slėptuvės eksportavimus.</string>\n    <string name=\"pref_section_backups_title\">Atsarginės kopijos</string>\n    <string name=\"pref_section_icon_packs\">Piktogramų paketai</string>\n    <string name=\"pref_section_icon_packs_summary\">Tvarkyti ir importuoti piktogramų paketus</string>\n    <string name=\"pref_select_theme_title\">Apipavidalinimas</string>\n    <string name=\"pref_dynamic_colors_title\">Dinaminės spalvos</string>\n    <string name=\"pref_dynamic_colors_summary\">Taikyti perdangą, pagrįstą Android apipavidalinimo spalvomis</string>\n    <string name=\"pref_view_mode_title\">Rodinio veiksena</string>\n    <string name=\"pref_lang_title\">Kalba</string>\n    <string name=\"pref_show_icons_title\">Rodyti piktogramas</string>\n    <string name=\"pref_show_icons_summary\">Rodyti piktogramas prie kiekvieno įrašo</string>\n    <string name=\"pref_code_group_size_title\">Kodo skaitmenų grupavimas</string>\n    <string name=\"pref_account_name_position_title\">Rodyti paskyros pavadinimą</string>\n    <string name=\"pref_show_next_code_title\">Rodyti kitą kodą</string>\n    <string name=\"pref_show_next_code_summary\">Generuoti ir anksčiau laiko rodyti kitą kodą</string>\n    <string name=\"pref_shared_issuer_account_name_title\">Rodyti paskyros pavadinimą tik tada, kai būtina</string>\n    <string name=\"pref_shared_issuer_account_name_summary\">Rodyti paskyrų pavadinimus kas kartą, kai jos yra to paties leidėjo. Kitų paskyrų pavadinimai bus paslėpti.</string>\n    <string name=\"pref_import_file_title\">Importuoti iš failo</string>\n    <string name=\"pref_import_file_summary\">Importuoti prieigos raktus iš failo</string>\n    <string name=\"pref_android_backups_title\">„Android“ debesijos atsarginės kopijos</string>\n    <string name=\"pref_android_backups_summary\">Leisti „Android“ debesijos atsarginių kopijų sistemai įtraukti Aegis slėptuves į „Android“ atsargines kopijas. Tai palaikoma tik šifruotoms slėptuvėms.</string>\n    <string name=\"pref_backups_title\">Automatiškai daryti slėptuvės atsargines kopijas</string>\n    <string name=\"pref_backups_summary\">Atlikus pakeitimus, automatiškai daryti slėptuvės atsarginę kopiją išorinėje saugykloje. Tai palaikoma tik šifruotoms slėptuvėms.</string>\n    <string name=\"pref_backups_reminder_title\">Priminimas apie atsarginę kopiją</string>\n    <string name=\"pref_backups_reminder_summary\">Rodyti priminimą apie tai, kad pasidarytumėte slėptuvės atsarginę kopiją tuo atveju, jei dar nesate padarę naujausių pakeitimų atsarginės kopijos.</string>\n    <string name=\"pref_backups_reminder_dialog_title\">Išjungti priminimą apie atsarginę kopiją</string>\n    <string name=\"pref_backups_reminder_dialog_summary\">Jei išjungsite šį priminimą, Aegis nepraneš jums apie tai, ar turite pakeitimų, kurių atsarginė kopija dar nėra padaryta, ar ne. Tai sukelia jums riziką prarasti prieigą prie prieigos raktų. Ar tikrai norite išjungti priminimą?</string>\n    <string name=\"pref_backups_location_summary\">Atsarginės kopijos bus saugomos ties</string>\n    <string name=\"pref_backups_versions_infinite\">\\u221E</string>\n    <plurals name=\"pref_backups_versions_summary\">\n        <item quantity=\"one\">Laikyti %1$d atsarginės kopijos versiją</item>\n        <item quantity=\"few\">Laikyti %1$d atsarginės kopijos versijas</item>\n        <item quantity=\"many\">Laikyti %1$d atsarginės kopijos versijų</item>\n        <item quantity=\"other\">Laikyti %1$d atsarginės kopijos versiją</item>\n    </plurals>\n    <string name=\"pref_import_app_title\">Importuoti iš programėlės</string>\n    <string name=\"pref_export_title\">Eksportuoti</string>\n    <string name=\"pref_export_summary\">Eksportuoti slėptuvę</string>\n    <string name=\"pref_secure_screen_title\">Ekrano saugumas</string>\n    <string name=\"pref_secure_screen_summary\">Blokuoti ekrano kopijas ar kitus bandymus fotografuoti ekraną programėlės viduje</string>\n    <string name=\"pref_tap_to_reveal_title\">Bakstelėti, kad būtų atskleista</string>\n    <string name=\"pref_tap_to_reveal_summary\">Pagal numatymą, prieigos raktai bus paslėpti. Bakstelėkite ant prieigos raktų, kad atskleistumėte kodą.</string>\n    <string name=\"pref_tap_to_reveal_time_title\">Po kiek laiko slėpti atskleistą prieigos raktą</string>\n    <string name=\"pref_auto_lock_title\">Automatinis užraktas</string>\n    <string name=\"pref_auto_lock_summary\">Kai %s</string>\n    <string name=\"pref_auto_lock_summary_disabled\">Išjungtas</string>\n    <string name=\"pref_auto_lock_prompt\">Automatiškai užrakinti Aegis, kai</string>\n    <string name=\"pref_auto_lock_type_back_button\">Paspaudžiamas mygtukas „Atgal“</string>\n    <string name=\"pref_auto_lock_type_minimize\">Programėlė yra suskleidžiama</string>\n    <string name=\"pref_auto_lock_type_device_lock\">Įrenginys yra užrakinamas</string>\n    <string name=\"pref_backup_password_category\">Atsarginė kopija ir eksportavimas</string>\n    <string name=\"pref_encryption_title\">Šifravimas</string>\n    <string name=\"pref_encryption_summary\">Šifruoti slėptuvę ir atrakinti ją naudojant slaptažodį ar biometriką</string>\n    <string name=\"pref_biometrics_title\">Biometrinis atrakinimas</string>\n    <string name=\"pref_biometrics_summary\">Leisti biometrinį tapatybės nustatymą, norint atrakinti slėptuvę</string>\n    <string name=\"pref_search_behavior_type_issuer\">Leidėjas</string>\n    <string name=\"pref_set_password_title\">Keisti slaptažodį</string>\n    <string name=\"pref_set_password_summary\">Nustatyti naują slaptažodį, kuris bus naudojamas slėptuvės atrakinimui</string>\n    <string name=\"event_title_vault_unlocked\">Slėptuvė atrakinta</string>\n    <string name=\"event_description_vault_unlocked\">Slėptuvė sėkmingai atrakinta</string>\n    <string name=\"event_title_backup_created\">Sukurta atsarginė kopija</string>\n    <string name=\"event_description_backup_created\">Slėptuvės atsarginė kopija sėkmingai sukurta</string>\n    <string name=\"event_title_android_backup_created\">Android sukūrė atsarginę kopiją</string>\n    <string name=\"event_description_android_backup_created\">Android sėkmingai sukūrė slėptuvės atsarginę kopiją</string>\n    <string name=\"event_title_vault_exported\">Slėptuvė eksportuota</string>\n    <string name=\"event_description_vault_exported\">Slėptuvės kopija eksportuota</string>\n    <string name=\"event_title_vault_unlock_failed_password\">Nepavyko atrakinti slėptuvės (slaptažodis)</string>\n    <string name=\"event_description_vault_unlock_failed_password\">Bandymas atrakinti slėptuvę naudojant slaptažodį patyrė nesėkmę</string>\n    <string name=\"event_title_vault_unlock_failed_biometrics\">Nepavyko atrakinti slėptuvės (biometrika)</string>\n    <string name=\"event_description_vault_unlock_failed_biometrics\">Bandymas atrakinti slėptuvę naudojant biometriką patyrė nesėkmę</string>\n    <string name=\"event_unknown\">Nežinomas įvykio tipas</string>\n    <string name=\"today_at_time\">Šiandien %1$s</string>\n    <string name=\"day_of_week_at_time\">%1$s %2$s</string>\n    <string name=\"export_encrypted\">Šifruoti slėptuvę</string>\n    <string name=\"export_help\">Šis veiksmas eksportuos slėptuvę iš Aegis vidinės saugyklos. Pasirinkite formatą, kuriuo norėtumėte eksportuoti:</string>\n    <string name=\"export_warning_unencrypted\">Jūs ketinate eksportuoti nešifruotą savo Aegis slėptuvės kopiją. <b>Tai nerekomenduojama</b>.</string>\n    <string name=\"understand_risk_accept\">Aš suprantu riziką</string>\n    <string name=\"export_format_aegis\">Aegis (.JSON)</string>\n    <string name=\"export_format_google_auth_uri\">Tekstinis failas (.TXT)</string>\n    <string name=\"export_format_html\">Saityno puslapis (.HTML)</string>\n    <string name=\"export_format_hint\">Eksportavimo formatas</string>\n    <string name=\"choose_authentication_method\">Saugumas</string>\n    <string name=\"authentication_method_explanation\">Aegis yra į saugumą orientuota 2FA programėlė. Prieigos raktai yra saugomi slėptuvėje, kuri gali būti pasirinktinai šifruojama naudojant pasirinktą slaptažodį. Jei užpuolikas gaus jūsų šifruotą slėptuvės failą, jis, nežinodamas slaptažodžio, negalės pasiekti slėptuvės turinio.\\n\\nMes iš anksto pažymėjome parinktį, kuri mūsų manymu labiausiai tinka jūsų įrenginiui.</string>\n    <string name=\"authentication_method_none\">Nėra</string>\n    <string name=\"authentication_method_none_description\">Slėptuvės atrakinimui nereikės jokio slaptažodžio ir ji nebus šifruota. <b>Ši parinktis yra nerekomenduojama</b>.</string>\n    <string name=\"authentication_method_password\">Slaptažodis</string>\n    <string name=\"authentication_method_password_description\">Slėptuvės atrakinimui reikės slaptažodžio.</string>\n    <string name=\"authentication_method_password_explanation\">Įspėjimas: Jei pamiršite savo slaptažodį, jūs visam laikui prarasite prieigą prie prieigos raktų. Be slaptažodžio niekaip nebegalėsite jų atkurti.</string>\n    <string name=\"authentication_method_biometrics\">Biometrika</string>\n    <string name=\"authentication_method_biometrics_description\">Papildomai prie slaptažodžio, gali būti naudojama šiame įrenginyje registruota biometrika, tokia kaip piršto atspaudas ar jūsų veidas.</string>\n    <string name=\"authentication\">Atrakinti slėptuvę</string>\n    <string name=\"authentication_multiline\" comment=\"The newline in the middle is used for aesthetic purposes\">Atrakinkite\\nslėptuvę</string>\n    <string name=\"auth_use_biometrics\">Arba bakstelėkite čia, norėdami naudoti <font fgcolor=\"#FF0D86C1\">biometriką</font></string>\n    <string name=\"set_password\">Įveskite slaptažodį</string>\n    <string name=\"set_group\">Įveskite grupės pavadinimą</string>\n    <string name=\"set_password_confirm\">Pakartokite slaptažodį</string>\n    <string name=\"invalid_password\">Slaptažodis yra neteisingas</string>\n    <string name=\"password_reminder_freq_never\">Niekada</string>\n    <string name=\"period_hint\">Laikotarpis (sek.)</string>\n    <string name=\"algorithm_hint\">Maišos funkcija</string>\n    <string name=\"type\">Tipas</string>\n    <string name=\"share\">Bendrinti</string>\n    <string name=\"yes\">Taip</string>\n    <string name=\"no\">Ne</string>\n    <string name=\"undo\">Atšaukti</string>\n    <string name=\"unlock\">Atrakinti</string>\n    <string name=\"advanced\">Išplėstiniai</string>\n    <string name=\"digits\">Skaitmenys</string>\n    <string name=\"secret\">Paslaptis</string>\n    <string name=\"scan\">Skenuoti QR kodą</string>\n    <string name=\"scan_image\">Skenuoti atvaizdą</string>\n    <string name=\"enter_manually\">Įvesti rankiniu būdu</string>\n    <string name=\"copy\">Kopijuoti</string>\n    <string name=\"edit\">Taisyti</string>\n    <string name=\"error_all_caps\">KLAIDA</string>\n    <string name=\"password\">Slaptažodis</string>\n    <string name=\"show_password\">Rodyti slaptažodį</string>\n    <string name=\"new_entry\">Naujas įrašas</string>\n    <string name=\"add_new_entry\">Pridėti naują įrašą</string>\n    <string name=\"unlock_vault_error\">Nepavyko atrakinti slėptuvės</string>\n    <string name=\"unlock_vault_error_description\">Neteisingas slaptažodis. Įsitikinkite, kad rinkdami slaptažodį nepadarėte klaidų.</string>\n    <string name=\"password_equality_error\">Slaptažodžiai turėtų būti vienodi ir netušti</string>\n    <string name=\"snackbar_authentication_method\">Pasirinkite tapatybės nustatymo metodą</string>\n    <string name=\"encrypting_vault\">Šifruojama slėptuvė</string>\n    <string name=\"analyzing_qr\">Analizuojamas QR kodas</string>\n    <string name=\"analyzing_qr_multiple\">Analizuojamas QR kodas %1$d/%2$d (%3$s)</string>\n    <string name=\"importing_icon_pack\">Importuojamas piktogramų paketas</string>\n    <string name=\"delete_entry\">Ištrinti įrašą</string>\n    <string name=\"delete_entry_description\">Ar tikrai norite ištrinti šį įrašą?</string>\n    <string name=\"delete_entries\">Ištrinti įrašus</string>\n    <plurals name=\"delete_entries_description\">\n        <item quantity=\"one\">Ar tikrai norite ištrinti %d įrašą?</item>\n        <item quantity=\"few\">Ar tikrai norite ištrinti %d įrašus?</item>\n        <item quantity=\"many\">Ar tikrai norite ištrinti %d įrašų?</item>\n        <item quantity=\"other\">Ar tikrai norite ištrinti %d įrašą?</item>\n    </plurals>\n    <string name=\"discard_changes\">Atmesti pakeitimus?</string>\n    <string name=\"discard_changes_description\">Jūsų pakeitimai neįrašyti</string>\n    <string name=\"saving_profile_error\">Klaida įrašant profilį</string>\n    <string name=\"saving_assign_icons_error\">Klaida priskiriant piktogramas</string>\n    <string name=\"welcome\">Sveiki</string>\n    <string name=\"app_description\">Aegis yra nemokama, saugi ir atvirojo kodo dviejų faktorių tapatybės nustatymo (2FA) programėlė</string>\n    <string name=\"setup_completed\">Sąranka užbaigta</string>\n    <string name=\"setup_completed_description\">Aegis nustatyta ir paruošta naudojimui.</string>\n    <string name=\"vault_not_found\">Slėptuvė nerasta, pradedama sąranka…</string>\n    <string name=\"copied\">Nukopijuota</string>\n    <string name=\"errors_copied\">Klaidos nukopijuotos į iškarpinę</string>\n    <string name=\"version_copied\">Versija nukopijuota į iškarpinę</string>\n    <string name=\"error_occurred\">Įvyko klaida</string>\n    <string name=\"decryption_error\">Bandant atrakinti slėptuvę, įvyko klaida</string>\n    <string name=\"decryption_corrupt_error\">Bandant atrakinti slėptuvę, įvyko klaida. Gali būti, kad jūsų slėptuvės failas yra pažeistas.</string>\n    <string name=\"saving_error\">Bandant įrašyti slėptuvę įvyko klaida</string>\n    <string name=\"vault_init_error\">Bandant inicijuoti slėptuvę įvyko klaida</string>\n    <string name=\"vault_load_error\">Bandant įkelti slėptuvę iš saugyklos įvyko klaida</string>\n    <string name=\"disable_encryption\">Išjungti šifravimą</string>\n    <string name=\"enable_encryption_error\">Įjungiant šifravimą, įvyko klaida</string>\n    <string name=\"disable_encryption_error\">Išjungiant šifravimą, įvyko klaida</string>\n    <string name=\"backup_error\">Klaida bandant sukurti atsarginę kopiją</string>\n    <string name=\"icon_pack_import_error\">Bandant importuoti piktogramų paketą, įvyko klaida</string>\n    <string name=\"icon_pack_import_exists_error\">Piktogramų paketas, kurį bandote importuoti, jau yra. Ar norite jį perrašyti?</string>\n    <string name=\"icon_pack_delete_error\">Bandant ištrinti piktogramų paketą, įvyko klaida</string>\n    <plurals name=\"icon_pack_info\">\n        <item quantity=\"one\">%d piktograma</item>\n        <item quantity=\"few\">%d piktogramos</item>\n        <item quantity=\"many\">%d piktogramų</item>\n        <item quantity=\"other\">%d piktograma</item>\n    </plurals>\n    <string name=\"icon_custom\">Tinkinta</string>\n    <string name=\"permission_denied\">Leidimas atmestas</string>\n    <string name=\"andotp_new_format\">Naujas formatas (v0.6.3 ar naujesnė) </string>\n    <string name=\"andotp_old_format\">Senas formatas (v0.6.2 ar senesnė) </string>\n    <string name=\"choose_application\">Pasirinkite programėlę, iš kurios norėtumėte importuoti</string>\n    <string name=\"choose_theme\">Pasirinkite pageidaujamą apipavidalinimą</string>\n    <string name=\"choose_view_mode\">Pasirinkite pageidaujamą rodinio veikseną</string>\n    <string name=\"parsing_file_error\">Bandant išnagrinėti failą, įvyko klaida</string>\n    <string name=\"file_not_found\">Klaida: Failas nerastas</string>\n    <string name=\"reading_file_error\">Bandant perskaityti failą, įvyko klaida</string>\n    <string name=\"app_lookup_error\">Klaida: Programėlė neįdiegta</string>\n    <plurals name=\"imported_entries_count\">\n        <item quantity=\"one\">Importuotas %d įrašas</item>\n        <item quantity=\"few\">Importuoti %d įrašai</item>\n        <item quantity=\"many\">Importuota %d įrašų</item>\n        <item quantity=\"other\">Importuotas %d įrašas</item>\n    </plurals>\n    <plurals name=\"entries_shown\">\n        <item quantity=\"one\">Rodomas %d įrašas</item>\n        <item quantity=\"few\">Rodomi %d įrašai</item>\n        <item quantity=\"many\">Rodoma %d įrašų</item>\n        <item quantity=\"other\">Rodomas %d įrašas</item>\n    </plurals>\n    <string name=\"intro_import_error_title\">Importuojant slėptuvę įvyko klaida</string>\n    <string name=\"import_error_title\">Importuojant įvyko viena ar daugiau klaidų</string>\n    <string name=\"exporting_vault_error\">Bandant eksportuoti slėptuvę, įvyko klaida</string>\n    <string name=\"exported_vault\">Slėptuvė eksportuota</string>\n    <string name=\"encryption_set_password_error\">Bandant nustatyti slaptažodį, įvyko klaida.</string>\n    <string name=\"no_cameras_available\">Nėra prieinamų kamerų</string>\n    <string name=\"read_qr_error\">Bandant perskaityti QR kodą, įvyko klaida</string>\n    <string name=\"missing_qr_code_descriptor\">• QR kodas %d</string>\n    <string name=\"unlocking_vault\">Atrakinama slėptuvė</string>\n    <string name=\"rename_group\">Pervadinti grupę</string>\n    <string name=\"remove_group\">Šalinti grupę</string>\n    <string name=\"remove_unused_groups\">Ištrinti nenaudojamas grupes</string>\n    <string name=\"remove_icon_pack\">Šalinti piktogramų paketą</string>\n    <string name=\"remove_icon_pack_description\">Ar tikrai norite pašalinti šį piktogramų paketą? Tai nepaveiks įrašų, kurie naudoja piktogramas iš šio paketo.</string>\n    <string name=\"details\">Išsamiau</string>\n    <string name=\"show_error_details\">Rodyti išsamesnę informaciją apie klaidą</string>\n    <string name=\"lock\">Užrakinti</string>\n    <string name=\"name\">Pavadinimas</string>\n    <string name=\"no_group\">Nėra grupės</string>\n    <string name=\"sort\" comment=\"Title of the Sort button in the top action bar of the main view\">Rikiuoti</string>\n    <string name=\"sort_alphabetically\">Leidėjas (A–Ž)</string>\n    <string name=\"sort_alphabetically_reverse\">Leidėjas (Ž–A)</string>\n    <string name=\"sort_alphabetically_name\">Paskyra (A-Ž)</string>\n    <string name=\"sort_alphabetically_name_reverse\">Paskyra (Ž-A)</string>\n    <string name=\"sort_usage_count\">Naudojimų skaičius</string>\n    <string name=\"last_used_never\">niekada</string>\n    <string name=\"new_group\">Nauja grupė…</string>\n    <string name=\"group\">Grupė</string>\n    <string name=\"group_name_hint\">Grupės pavadinimas</string>\n    <string name=\"preference_manage_groups\">Taisyti grupes</string>\n    <string name=\"preference_manage_groups_summary\">Čia tvarkykite ir ištrinkite savo grupes</string>\n    <string name=\"preference_reset_usage_count\">Atstatyti naudojimų skaičių</string>\n    <string name=\"preference_reset_usage_count_summary\">Atstatyti kiekvieno slėptuvėje esančio įrašo naudojimų skaičių</string>\n    <string name=\"preference_reset_usage_count_dialog\">Ar tikrai norite nustatyti kiekvieno slėptuvėje esančio įrašo naudojimų skaičių į 0?</string>\n    <string name=\"note\" comment=\"Users can add a note to an entry\">Pastaba</string>\n    <string name=\"clear\">Išvalyti</string>\n    <string name=\"pref_highlight_entry_title\">Bakstelėjus, paryškinti prieigos raktus</string>\n    <string name=\"pref_highlight_entry_summary\">Bakstelėjus ant prieigos raktų, laikinai juos paryškinti ir padaryti taip, kad juos būtų lengviau atskirti</string>\n    <string name=\"pref_minimize_on_copy_title\">Nukopijavus suskleisti</string>\n    <string name=\"pref_minimize_on_copy_summary\">Suskleisti programėlę po to, kai priegos raktas buvo nukopijuotas</string>\n    <string name=\"pref_search_behavior_title\">Paieškos elgsena</string>\n    <string name=\"pin_keyboard_description\">Norėdami įjungti PIN kodo klaviatūrą, įveskite slaptažodį. Turėkite omenyje, jog tai veikia tik tuo atveju, jei jūsų slaptažodis yra sudarytas tik iš skaitmenų</string>\n    <string name=\"pin_keyboard_error\">Klaida įjungiant PIN kodo klaviatūrą</string>\n    <string name=\"pin_keyboard_error_description\">Neįmanoma nustatyti PIN kodo klaviatūros. Jūsų slaptažodis privalo būti sudarytas tik iš skaitmenų.</string>\n    <string name=\"pin_keyboard_disabled\">Slaptažodis pakeistas. PIN kodo klaviatūra daugiau nebebus rodoma.</string>\n    <string name=\"selected\">Pasirinkta</string>\n    <string name=\"dark_theme_title\">Tamsus apipavidalinimas</string>\n    <string name=\"light_theme_title\">Šviesus apipavidalinimas</string>\n    <string name=\"amoled_theme_title\">AMOLED apipavidalinimas</string>\n    <string name=\"normal_viewmode_title\">Įprasta</string>\n    <string name=\"compact_mode_title\">Kompaktiška</string>\n    <string name=\"small_mode_title\">Maža</string>\n    <string name=\"unknown_issuer\">Nežinomas leidėjas</string>\n    <string name=\"unknown_account_name\">Nežinomas paskyros pavadinimas</string>\n    <string name=\"unable_to_read_qrcode_file\">Nepavyko perskaityti ir apdoroti QR kodo iš failo: %s.</string>\n    <string name=\"unable_to_generate_qrcode\">Nepavyko sukurti QR kodo</string>\n    <string name=\"tile_open_vault\" comment=\"label for a quick settings tile that opens the app when tapped\">Atverti slėptuvę</string>\n    <string name=\"vault_unlocked_state\">Slėptuvė atrakinta. Bakstelėkite čia, norėdami užrakinti.</string>\n    <string name=\"version\">Versija</string>\n    <string name=\"changelog\">Keitinių žurnalas</string>\n    <string name=\"whats_new\">Kas naujo</string>\n    <string name=\"github_description\">Pirminis kodas, klaidos ir informacija</string>\n    <string name=\"license\">Licencija</string>\n    <string name=\"license_description\">Aegis Authenticator yra licencijuota pagal GPLv3</string>\n    <string name=\"third_party_licenses\">Trečiųjų šalių licencijos</string>\n    <string name=\"third_party_licenses_description\">Aegis naudojamų trečiųjų šalių bibliotekų licencijos</string>\n    <string name=\"country_netherlands\">Nyderlandai</string>\n    <string name=\"email_us\">Rašyti el. laišką</string>\n    <string name=\"visit_website\">Apsilankyti mūsų internetinėje svetainėje</string>\n    <string name=\"about_support\">Palaikymas</string>\n    <string name=\"support_rate\">Įvertinti</string>\n    <string name=\"support_rate_description\">Palaikykite mus parašydami apžvalgą „Google Play“ parduotuvėje</string>\n    <string name=\"webview_error\">Šis įrenginys nepalaiko saityno rodinio, kuris yra būtinas norint rodyti keitinių žurnalą ir licenciją. Įrenginyje trūksta sisteminio komponento.</string>\n    <string name=\"email\">El. paštas</string>\n    <string name=\"time_sync_warning_title\">Automatinis laiko sinchronizavimas</string>\n    <string name=\"time_sync_warning_disable\">Daugiau manęs nebeįspėkite. Aš žinau, ką darau.</string>\n    <string name=\"google_qr_export_unrelated\">Rastas nesusijęs QR kodas. Pabandykite paleisti skenerį iš naujo.</string>\n    <string name=\"backup_reminder_bar_message\">        Pakeitimų atsarginė kopija nėra daroma\n    </string>\n    <string name=\"pref_show_plaintext_warning_hint\">Daugiau neberodyti šio įspėjimo</string>\n    <string name=\"backup_plaintext_warning_explanation\">Šis įspėjimas yra rodomas, nes neseniai eksportavote nešifruotą slėptuvės kopiją. Norint palaikyti prieigos raktų saugumą, rekomenduojame ištrinti šį failą iš karto, kai jo nebereikės.</string>\n    <string name=\"switch_camera\">Perjungti kamerą</string>\n    <string name=\"empty_list\">Nėra kodų, kuriuos rodyti. Pridėkite įrašus, baksteldami apatinėje ekrano dešinėje esantį pliuso ženkliuką</string>\n    <string name=\"empty_list_title\">Nerasta jokių įrašų</string>\n    <string name=\"empty_group_list_title\">Nerasta jokių grupių</string>\n    <string name=\"no_icon_packs\">Kol kas nėra importuota jokių piktogramų paketų. Bakstelėkite pliuso ženkliuką norėdami importuoti. Patarimas: išbandykite <a href=\"https://aegis-icons.github.io\">aegis-icons</a>.</string>\n    <string name=\"no_icon_packs_title\">Nėra piktogramų paketų</string>\n    <string name=\"pick_icon\">Pasirinkti piktogramą</string>\n    <string name=\"done\">Atlikta</string>\n    <string name=\"next\">Kitas</string>\n    <string name=\"previous\">Ankstesnis</string>\n    <string name=\"copy_uri\">Kopijuoti URI</string>\n    <string name=\"unable_to_copy_uri_to_clipboard\">Nepavyko nukopijuoti URI į iškarpinę</string>\n    <string name=\"uri_copied_to_clipboard\">URI nukopijuotas į iškarpinę</string>\n    <string name=\"transfer_entry_description\">Nuskenuokite šį QR kodą naudodami tapatybės nustatymo programėlę, į kurią norite perkelti šį įrašą</string>\n    <string name=\"password_strength_very_weak\">Labai silpnas</string>\n    <string name=\"password_strength_weak\">Silpnas</string>\n    <string name=\"password_strength_fair\">Neblogas</string>\n    <string name=\"password_strength_good\">Geras</string>\n    <string name=\"password_strength_strong\">Stiprus</string>\n    <string name=\"pref_pin_keyboard_title\">Naudoti užrakinimo ekrane PIN kodo klaviatūrą</string>\n    <string name=\"pref_pin_keyboard_summary\">Įjunkite, jei užrakinimo ekrane norite įjungti PIN kodo klaviatūrą. Tai veikia tik slaptažodžiams, kuriuose naudojami tik skaitmenys</string>\n    <string name=\"title_activity_preferences\">Nustatymai</string>\n    <string name=\"title_activity_manage_groups\">Tvarkyti grupes</string>\n    <string name=\"title_activity_transfer\">Perkelti įrašus</string>\n    <string name=\"title_activity_about\">Apie</string>\n    <string name=\"title_activity_edit_entry\">Taisyti įrašą</string>\n    <string name=\"title_activity_scan_qr\">Skenuokite QR kodą</string>\n    <string name=\"title_activity_import_entries\">Importuoti įrašus</string>\n    <string name=\"title_activity_assign_icons\">Priskirti piktogramas</string>\n    <string name=\"title_activity_licenses\">Trečiųjų šalių licencijos</string>\n    <string name=\"dialog_wipe_entries_title\">Išvalyti įrašus</string>\n    <string name=\"dialog_wipe_entries_message\">Jūsų slėptuvėje jau yra įrašai. Ar prieš importuodami šį failą, norite pašalinti šiuos įrašus?\\n\\n<b>Tai atlikę, visam laikui prarasite prieigą prie šiuo metu slėptuvėje esančių įrašų.</b></string>\n    <string name=\"dialog_wipe_entries_checkbox\">Išvalyti slėptuvės turinį</string>\n    <string name=\"import_vault\">Importuoti Aegis slėptuvę</string>\n    <string name=\"import_vault_hint\">Norite importuoti iš kitos 2FA programėlės? Iš pradžių, užbaikite sąranką, o tada pereikite į nustatymų meniu.</string>\n    <string name=\"importer_help_2fas\">Pateikite 2FAS Authenticator atsarginės kopijos failą.</string>\n    <string name=\"importer_help_aegis\">Pateikite Aegis eksportuotą/atsarginės kopijos failą.</string>\n    <string name=\"importer_help_authenticator_plus\">Pateikite Authenticator Plus eksportuotą failą, gautą per <b>Nustatymai (angl. Settings) -&gt; Atsarginė kopija ir atkūrimas (angl. Backup &amp; Restore) -&gt; Eksportuoti kaip tekstą ir HTML (angl. Export as Text and HTML)</b>.</string>\n    <string name=\"importer_help_authy\">Pateikite <b>/data/data/com.authy.authy/shared_prefs/com.authy.storage.tokens.authenticator.xml</b> kopiją, esančią Authy vidinės saugyklos kataloge.</string>\n    <string name=\"importer_help_andotp\">Pateikite andOTP eksportuotą/atsarginės kopijos failą.</string>\n    <string name=\"importer_help_bitwarden\">Pateikite Bitwarden eksportuotą/atsarginės kopijos failą. Šifruoti failai yra nepalaikomi.</string>\n    <string name=\"importer_help_freeotp_plus\">Pateikite FreeOTP+ eksportuotą failą.</string>\n    <string name=\"importer_help_microsoft_authenticator\">Pateikite <b>/data/data/com.azure.authenticator/databases/PhoneFactor</b> kopiją, esančią Microsoft Authenticator vidinės saugyklos kataloge.</string>\n    <string name=\"importer_help_plain_text\">Pateikite grynojo teksto failą, kurio kiekvienoje eilutėje būtų Google Authenticator URI.</string>\n    <string name=\"importer_help_totp_authenticator\">Pateikite TOTP Authenticator eksportuotą failą.</string>\n    <string name=\"importer_help_winauth\">Pateikite WinAuth eksportuotą failą.</string>\n    <string name=\"import_assign_icons_dialog_title\">Priskirti piktogramas</string>\n    <string name=\"import_assign_icons_dialog_text\">Ar norite importuotiems įrašams priskirti piktogramas?</string>\n    <string name=\"importer_encrypted_exception_google_authenticator\">Šifruotas įrašas buvo praleistas: %s</string>\n    <string name=\"groups\">Grupės</string>\n    <string name=\"pref_focus_search\">Paleidus programėlę, fokusuoti paiešką</string>\n    <string name=\"pref_focus_search_summary\">Atvėrus programėlę, nedelsiant fokusuoti paieškos laukelį.</string>\n    <string name=\"pref_copy_behavior_never\">Niekada</string>\n    <string name=\"pref_account_name_position_hidden\">Paslėptas</string>\n    <string name=\"pref_account_name_position_end\">Šalia leidėjo</string>\n    <string name=\"pref_account_name_position_below\">Po leidėju</string>\n    <plurals name=\"time_elapsed_seconds\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"one\">prieš %d sekundę</item>\n        <item quantity=\"few\">prieš %d sekundes</item>\n        <item quantity=\"many\">prieš %d sekundžių</item>\n        <item quantity=\"other\">prieš %d sekundę</item>\n    </plurals>\n    <plurals name=\"time_elapsed_minutes\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"one\">prieš %d minutę</item>\n        <item quantity=\"few\">prieš %d minutes</item>\n        <item quantity=\"many\">prieš %d minučių</item>\n        <item quantity=\"other\">prieš %d minutę</item>\n    </plurals>\n    <plurals name=\"time_elapsed_hours\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"one\">prieš %d valandą</item>\n        <item quantity=\"few\">prieš %d valandas</item>\n        <item quantity=\"many\">prieš %d valandų</item>\n        <item quantity=\"other\">prieš %d valandą</item>\n    </plurals>\n    <plurals name=\"time_elapsed_days\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"one\">prieš %d dieną</item>\n        <item quantity=\"few\">prieš %d dienas</item>\n        <item quantity=\"many\">prieš %d dienų</item>\n        <item quantity=\"other\">prieš %d dieną</item>\n    </plurals>\n    <plurals name=\"time_elapsed_years\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"one\">prieš %d metus</item>\n        <item quantity=\"few\">prieš %d metus</item>\n        <item quantity=\"many\">prieš %d metų</item>\n        <item quantity=\"other\">prieš %d metus</item>\n    </plurals>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-lt-rLT-v29/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"system_theme_title\">Sistemos numatytasis</string>\n    <string name=\"system_amoled_theme_title\">Sistemos numatytasis (AMOLED)</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-lv-rLV/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources xmlns:tools=\"http://schemas.android.com/tools\">\n    <string name=\"action_settings\">Iestatījumi</string>\n    <string name=\"action_about\">Par</string>\n    <string name=\"action_delete\">Dzēst</string>\n    <string name=\"action_transfer\">Pārsūtīt</string>\n    <string name=\"action_edit_icon\">Labot ikonu</string>\n    <string name=\"action_reset_usage_count\">Atiestatīt izmantošanas reižu skaitu</string>\n    <string name=\"action_reset_usage_count_dialog\">Vai tiešām iestatīt šī ieraksta izmantošanas reižu skaitu 0?</string>\n    <string name=\"action_default_icon\">Atjaunot noklusējuma ikonu</string>\n    <string name=\"discard\">Atmest</string>\n    <string name=\"save\">Saglabāt</string>\n    <string name=\"all\">Visas</string>\n    <string name=\"issuer\">Izsniedzējs</string>\n    <string name=\"yandex_pin\">PIN (4-16 cipari)</string>\n    <string name=\"motp_pin\">PIN (4 cipari)</string>\n    <string name=\"suggested\">Ieteikts</string>\n    <string name=\"usage_count\">Izmantošanas reižu skaits</string>\n    <string name=\"warning\">Brīdinājums</string>\n    <string name=\"pref_cat_appearance_app\">Lietotne</string>\n    <string name=\"pref_cat_appearance_entries\">Ieraksti</string>\n    <string name=\"pref_cat_backups_android\">Android</string>\n    <string name=\"pref_cat_backups_auto\">Automātiska rezerves kopēšana</string>\n    <string name=\"pref_section_behavior_title\">Uzvedība</string>\n    <string name=\"pref_section_behavior_summary\">Pielāgot uzvedību, kad notiek mijiedarbība ar ierakstu sarakstu.</string>\n    <string name=\"pref_section_appearance_title\">Izskats</string>\n    <string name=\"pref_section_appearance_summary\">Pielāgot izskatu, valodu un citus iestatījumus, kas ietekmē lietotnes veidolu.</string>\n    <string name=\"pref_section_security_title\">Drošība</string>\n    <string name=\"pref_section_security_summary\">Uzstādīt šifrēšanu, atslēgšanu ar biometriju, automātisku aizslēgšanu un citus drošības iestatījumus.</string>\n    <string name=\"pref_section_import_export_title\">Ievietot un izgūt</string>\n    <string name=\"pref_section_import_export_summary\">Aegis vai citu autentificēšanās lietotņu rezerves kopiju ievietošana. Aegis glabātavas satura pašrocīga izgūšana.</string>\n    <string name=\"pref_section_audit_log_title\">Audita žurnāls</string>\n    <string name=\"pref_section_audit_log_summary\">Saraksts, kurā ir ierakstīti visi svarīgie notiekumi, kas ir bijuši lietotnē.</string>\n    <string name=\"pref_section_backups_title\">Rezerves kopijas</string>\n    <string name=\"pref_section_backups_summary\">Uzstādīt automātisko rezerves kopēšanu paša izvēlētā vietā vai iespējot dalību Android mākoņa dublēšanas sistēmā.</string>\n    <string name=\"pref_section_icon_packs\">Ikonu pakotnes</string>\n    <string name=\"pref_section_icon_packs_summary\">Pārvaldīt un ievietot ikonu pakotnes</string>\n    <string name=\"pref_select_theme_title\">Izskats</string>\n    <string name=\"pref_dynamic_colors_title\">Dinamiskas krāsas</string>\n    <string name=\"pref_dynamic_colors_summary\">Pielietot pārklājumu, kas pielāgots izvēlētā Android izskata krāsām</string>\n    <string name=\"pref_view_mode_title\">Skata veids</string>\n    <string name=\"pref_lang_title\">Valoda</string>\n    <string name=\"pref_show_icons_title\">Rādīt ikonas</string>\n    <string name=\"pref_show_icons_summary\">Rādīt ikonu pie katra ieraksta</string>\n    <string name=\"pref_code_group_size_title\">Koda ciparu kopošana</string>\n    <string name=\"pref_code_group_size_summary\">Atlasīt koda ciparu kopu lielumu</string>\n    <string name=\"pref_account_name_position_title\">Rādīt konta nosaukumu</string>\n    <string name=\"pref_show_next_code_title\">Rādīt nākamo kodu</string>\n    <string name=\"pref_show_next_code_summary\">Izveidot un rādīt nākamo kodu pirms laika</string>\n    <string name=\"pref_expiration_state_title\">Norādīt, kad beigsies kodu derīgums</string>\n    <string name=\"pref_expiration_state_summary\">Mainīt kodu krāsu un likt tiem mirgot, kad to derīgums tūlīt beigsies</string>\n    <string name=\"pref_expiration_state_fallback\">Mainīt kodu krāsu, kad to derīgums tūlīt beigsies</string>\n    <string name=\"pref_shared_issuer_account_name_title\">Radīt konta nosaukumu tikai tad, kad nepieciešams</string>\n    <string name=\"pref_shared_issuer_account_name_summary\">Rādīt kontu nosaukumu kad vien tiem ir viens un tas pats izdevējs. Citu kontu nosaukums būs paslēpts.</string>\n    <string name=\"pref_account_name_position_summary_override\">Šis iestatījums netiek ņemts vērā mozaīkas skatā. Konta nosaukums tiks parādīts zem izdevēja.</string>\n    <string name=\"pref_import_file_title\">Ievietot no datnes</string>\n    <string name=\"pref_import_file_summary\">Ievietot kodus no datnes</string>\n    <string name=\"pref_android_backups_title\">Android mākoņa rezerves kopijas</string>\n    <string name=\"pref_android_backups_summary\">Ļaut Android mākoņa rezerves kopēšanas sistēmai iekļaut Aegis glabātavu rezerves kopijās. Tas tiek nodrošināts tikai šifrētām glabātavām.</string>\n    <string name=\"pref_android_backups_hint\"><i>No ierīces uz ierīci (angliski Device-to-device (D2D)) rezerves kopijas vienmēr ir atļautas, neatkarīgi no augstāk esošā iestatījuma</i></string>\n    <string name=\"pref_backups_title\">Automātiski veikt glabātavas rezerves kopēšanu</string>\n    <string name=\"pref_backups_summary\">Automātiski izveidot glabātavas rezerves kopijas ārējā krātuvē, kad tiek veiktas izmaiņas. Tas tiek nodrošināts tikai šifrētām glabātavām.</string>\n    <string name=\"pref_backups_reminder_title\">Rezerves kopiju veidošanas atgādinājums</string>\n    <string name=\"pref_backups_reminder_summary\">Rādīt glabātavas rezerves kopijas izveidošanas atgādinājumu gadījumā, ja pēdējās izmaiņas nav iekļautas rezerves kopijās.</string>\n    <string name=\"pref_backups_reminder_dialog_title\">Atspējot rezerves kopiju izveidošanas atgādinājumu</string>\n    <string name=\"pref_backups_reminder_dialog_summary\">Šī atgādinājuma atspējošana nozīmē, ka Aegis neziņos, vai ir vai nav izmaiņu, kuras vēl nav iekļautas rezerves kopijās. Tas rada iespējamību zaudēt piekļuvi kodiem. Vai tiešām atspējot atgādinājumu?</string>\n    <string name=\"pref_backups_versioning_strategy_title\">Rezerves kopiju stratēģija</string>\n    <string name=\"pref_backups_versioning_strategy_keep_x_versions\">Paturēt noteiktu versiju skaitu</string>\n    <string name=\"pref_backups_versioning_strategy_single_backup\">Viena rezerves kopija</string>\n    <string name=\"pref_backups_versioning_strategy_single_backup_warning\">Atlasītā rezerves kopiju stratēģija nav uzticama, tāpēc tā nav ieteicama. Kļūme vienīgajā rezerves kopijā var novest pie vienīgās rezerves kopijas zaudēšanas.</string>\n    <string name=\"pref_backups_versioning_strategy_dialog_title\">Atlasīt rezerves kopiju stratēģiju</string>\n    <string name=\"pref_backups_location_title\">Rezerves kopiju atrašanās vieta</string>\n    <string name=\"pref_backups_location_summary\">Rezerves kopijas tiks glabātas</string>\n    <string name=\"pref_backup_location_summary\">Rezerves kopijas tiks glabātas</string>\n    <string name=\"pref_backups_trigger_title\">Izraisīt rezerves kopēšanu</string>\n    <string name=\"pref_backups_trigger_summary\">Pašrocīgi izraisīt rezerves kopēšanu</string>\n    <string name=\"pref_backups_versions_title\">Paturamo rezerves kopiju skaits</string>\n    <string name=\"pref_backups_versions_infinite\">\\u221E</string>\n    <plurals name=\"pref_backups_versions_summary\">\n        <item quantity=\"zero\">Paturēt %1$d rezerves kopijas</item>\n        <item quantity=\"one\">Paturēt %1$d rezerves kopiju</item>\n        <item quantity=\"other\">Paturēt %1$d rezerves kopijas</item>\n    </plurals>\n    <string name=\"pref_backups_versions_infinite_summary\">Paturēt neierobežotu skaitu rezerves kopiju</string>\n    <string name=\"pref_import_app_title\">Ievietot no lietotnes</string>\n    <string name=\"pref_import_app_summary\">Ievietot kodus no lietotnes (nepieciešama saknes piekļuve)</string>\n    <string name=\"pref_export_title\">Izgūt</string>\n    <string name=\"pref_export_summary\">Izgūt glabātavas saturu</string>\n    <string name=\"pref_password_reminder_title\">Paroles atgādinājums</string>\n    <string name=\"pref_google_auth_export_title\">Izgūt izmantošanai Google Authenticator</string>\n    <string name=\"pref_google_auth_export_descriptor\">Izveido izgūšanas kvadrātkodus, kas ir saderīgi ar Google Authenticator</string>\n    <string name=\"pref_google_auth_export_no_data\">Nav satura, ko izgūt</string>\n    <plurals name=\"pref_google_auth_export_incompatible_entries\">\n        <item quantity=\"zero\">Izlaisti %d nesaderīgu ierakstu</item>\n        <item quantity=\"one\">Izlaists %d nesaderīgs ieraksts</item>\n        <item quantity=\"other\">Izlaisti %d nesaderīgi ieraksti</item>\n    </plurals>\n    <string name=\"pref_password_reminder_summary\">Rādīt %s atgādinājumu, lai laiku pa laikam ievadītu paroli, lai to neaizmirstu.</string>\n    <string name=\"pref_password_reminder_summary_disabled\">Atspējots</string>\n    <string name=\"pref_secure_screen_title\">Ekrāna drošība</string>\n    <string name=\"pref_secure_screen_summary\">Lietotnē neļaut ekrānuzņēmumus un citus ekrāna tveršanas mēģinājumus</string>\n    <string name=\"pref_tap_to_reveal_title\">Piesist, lai atklātu</string>\n    <string name=\"pref_tap_to_reveal_summary\">Kodi pēc noklusējuma būs slēpti. Tiem jāpiesit, lai tos atklātu.</string>\n    <string name=\"pref_tap_to_reveal_time_title\">Noildze, lai parādītu pēc piesitiena</string>\n    <string name=\"pref_auto_lock_title\">Automātiskā aizslēgšana</string>\n    <string name=\"pref_auto_lock_summary\">Kad %s</string>\n    <string name=\"pref_auto_lock_summary_disabled\">Atspējots</string>\n    <string name=\"pref_auto_lock_prompt\">Automātiski aizslēgt Aegis, kad</string>\n    <string name=\"pref_auto_lock_type_back_button\">Ir nospiesta poga \\\"Atpakaļ\\\"</string>\n    <string name=\"pref_auto_lock_type_minimize\">Lietotne ir samazināta</string>\n    <string name=\"pref_auto_lock_type_device_lock\">Ierīce ir aizslēgta</string>\n    <string name=\"pref_backup_password_category\">Rezerves kopēšana un izgūšana</string>\n    <string name=\"pref_backup_password_title\">Atsevišķa rezerves kopēšanas un izgūšanas parole</string>\n    <string name=\"pref_backup_password_summary\">Ja iespējots, paroli, kas tiek izmantota lietotnes atslēgšanai, nevarēs izmantot rezerves kopiju un izgūšanas datņu atšifrēšanai.</string>\n    <string name=\"pref_backup_password_change_title\">Mainīt rezerves kopēšanas un izgūšanas paroli</string>\n    <string name=\"pref_backup_password_change_summary\">Iestatīt jaunu paroli, kas tiks izmantota, lai šifrētu glabātavu rezerves kopēšanas un izgūšanas laikā.</string>\n    <string name=\"pref_encryption_title\">Šifrēšana</string>\n    <string name=\"pref_encryption_summary\">Šifrēt glabātavu un atslēgt to ar paroli vai biometriju</string>\n    <string name=\"pref_biometrics_title\">Atslēgšana ar biometriju</string>\n    <string name=\"pref_biometrics_summary\">Ļaut atslēgt glabātavu ar biometriju</string>\n    <string name=\"pref_search_behavior_summary\">Meklē: %s</string>\n    <string name=\"pref_search_behavior_prompt\">Meklēt jebkurā no zemāk esošajiem laukiem</string>\n    <string name=\"pref_search_behavior_type_name\">Nosaukums</string>\n    <string name=\"pref_search_behavior_type_issuer\">Izsniedzējs</string>\n    <string name=\"pref_search_behavior_type_note\">Piezīme</string>\n    <string name=\"pref_search_behavior_type_groups\">Kopas</string>\n    <string name=\"pref_set_password_title\">Mainīt paroli</string>\n    <string name=\"pref_set_password_summary\">Uzstādīt jaunu paroli, kas būs nepieciešama, lai atslēgtu glabātavu</string>\n    <string name=\"no_events_title\">Nav notikumu</string>\n    <string name=\"no_events_description\">Nav ziņots par svarīgiem notikumiem, kas ir bijuši lietotnē</string>\n    <string name=\"event_title_vault_unlocked\">Glabātava atslēgta</string>\n    <string name=\"event_description_vault_unlocked\">Glabātava tika sekmīgi atslēgta</string>\n    <string name=\"event_title_backup_created\">Rezerves kopija izveidota</string>\n    <string name=\"event_description_backup_created\">Glabātavas rezerves kopija tika sekmīgi izveidota</string>\n    <string name=\"event_title_android_backup_created\">Android izveidota rezerves kopija</string>\n    <string name=\"event_description_android_backup_created\">Android sekmīgi izveidoja glabātavas rezerves kopiju</string>\n    <string name=\"event_title_vault_exported\">Glabātava izgūta</string>\n    <string name=\"event_description_vault_exported\">Tika izgūta glabātavas kopija</string>\n    <string name=\"event_title_entry_shared\">Ieraksts kopīgots</string>\n    <string name=\"event_description_entry_shared\">Ieraksts tika kopīgots</string>\n    <string name=\"event_title_vault_unlock_failed_password\">Glabātavas atslēgšana neizdevās (parole)</string>\n    <string name=\"event_description_vault_unlock_failed_password\">Mēģinājums atslēgt glabātavu ar paroli neizdevās</string>\n    <string name=\"event_title_vault_unlock_failed_biometrics\">Glabātavas atslēgšana neizdevās (biometrija)</string>\n    <string name=\"event_description_vault_unlock_failed_biometrics\">Mēģinājums atslēgt glabātavu ar biometriju neizdevās</string>\n    <string name=\"event_unknown\">Nezināms notikuma veids</string>\n    <string name=\"audit_log_entry_deleted\">(izdzēsts)</string>\n    <string name=\"today_at_time\">Šodien %1$s</string>\n    <string name=\"day_of_week_at_time\">%1$s %2$s</string>\n    <string name=\"export_encrypted\">Šifrēt glabātavu</string>\n    <string name=\"export_help\">Šī darbība izgūs glabātavas saturu no Aegis iekšējās krātuves. Jāatlasa veidols, kurā izgūt datus:</string>\n    <string name=\"export_warning_unencrypted\">Tiks izgūts nešifrēts Aegis glabātavas atveidojums. <b>Tas nav ieteicams</b>.</string>\n    <string name=\"export_warning_password\">Izgūstamās datnes ir šifrētas ar paroli, kas ir norādīta drošības iestatījumos.</string>\n    <string name=\"understand_risk_accept\">Es apzinos bīstamību</string>\n    <string name=\"export_format_aegis\">Aegis (.json)</string>\n    <string name=\"export_format_google_auth_uri\">Teksta datne (.txt)</string>\n    <string name=\"export_format_html\">Tīmekļa lapa (.HTML)</string>\n    <string name=\"export_format_hint\">Izgūšanas veidols</string>\n    <string name=\"export_all_groups\">Izgūt visas kopas</string>\n    <string name=\"export_choose_groups\">Jāatlasa, kuras kopas izgūt</string>\n    <plurals name=\"export_groups_selected_count\">\n        <item quantity=\"zero\">Atlasītas %d kopu</item>\n        <item quantity=\"one\">Atlasīta %d kopa</item>\n        <item quantity=\"other\">Atlasītas %d kopas</item>\n    </plurals>\n    <string name=\"export_no_groups_selected\">Nav atlasītu kopu izgūšanai</string>\n    <string name=\"export_html_title\" comment=\"The title of an HTML export document\">Aegis Authenticator izgūšana</string>\n    <string name=\"choose_authentication_method\">Drošība</string>\n    <string name=\"authentication_method_explanation\">Aegis ir uz drošību vērsta 2FA lietotne. Kodi tiek turēti glabātavā, ko ir iespējams šifrēt ar paša izvēlētu paroli. Ja uzbrucēji iegūst šifrēto glabātavas datni, tie nevarēs piekļūt tās saturam, nezinot paroli.\\n\\nTika atlasīta iespēja, kurai vajadzētu būt vispiemērotākajai šai ierīcei.</string>\n    <string name=\"authentication_method_none\">Nekas</string>\n    <string name=\"authentication_method_none_description\">Parole nav nepieciešama, lai atslēgtu glabātavu, kas netiks šifrēta. <b>Šī iespēja nav ieteicama</b>.</string>\n    <string name=\"authentication_method_password\">Parole</string>\n    <string name=\"authentication_method_password_description\">Ir nepieciešama parole, lai atslēgtu glabātavu.</string>\n    <string name=\"authentication_method_password_explanation\">Brīdinājums: ja tiks aizmirsta parole, neatgriezeniski tiks zaudēta piekļuve kodiem. Bez paroles nav iespējams tos atgūt.</string>\n    <string name=\"authentication_method_biometrics\">Biometrija</string>\n    <string name=\"authentication_method_biometrics_description\">Papildus parolei glabātavas atslēgšanai var izmantot arī ierīcē pievinotos biometriskos datus, piemēram, pirkstu nospiedumu vai seju.</string>\n    <string name=\"authentication\">Atslēgt glabātavu</string>\n    <string name=\"authentication_multiline\" comment=\"The newline in the middle is used for aesthetic purposes\">Atslēgt\\nglabātavu</string>\n    <string name=\"auth_use_biometrics\">Vai piesist šeit, lai izmantotu <font fgcolor=\"#FF0D86C1\">biometriju</font></string>\n    <string name=\"set_password\">Lūgums ievadīt paroli</string>\n    <string name=\"set_group\">Lūgums ievadīt kopas nosaukumu</string>\n    <string name=\"set_number\">Lūgums ievadīt skaitli</string>\n    <string name=\"set_password_confirm\">Lūgums apstiprināt paroli</string>\n    <string name=\"invalid_password\">Parole ir nepareiza</string>\n    <string name=\"invalidated_biometrics\">Ir noteiktas izmaiņas ierīces drošības iestatījumos. Lūgums doties uz \\\"Aegis -&gt; Iestatījumi -&gt; Drošība -&gt; Atslēgšana ar biometriju\\\", lai atspējotu un atkal iespējotu atslēgšanu ar biometriju.</string>\n    <string name=\"password_reminder\">Lūgums ievadīt paroli. Tā laiku pa laikam tiks vaicāta, lai netiktu aizmirsta.</string>\n    <string name=\"password_reminder_dialog_title\">Biometriskā atslēgšana pēc noklusējuma</string>\n    <string name=\"password_reminder_dialog_message\">Laiku pa laikam tiks vaicāts pēc paroles, lai nodrošinātu, ka tā nav aizmirsta, tādējādi zaudējot piekļuvi glabātavai. Kad parole būs vienreiz ievadīta, Aegis pēc noklusējuma izmantos biometrisko atslēgšanu līdz pienāks laiks nākamajam paroles atgādinājumam.</string>\n    <string name=\"password_reminder_freq_never\">Nekad</string>\n    <string name=\"password_reminder_freq_weekly\">Ik nedēļu</string>\n    <string name=\"password_reminder_freq_biweekly\">Divreiz nedēļā</string>\n    <string name=\"password_reminder_freq_monthly\">Ik mēnesi</string>\n    <string name=\"password_reminder_freq_quarterly\">Ik ceturksni</string>\n    <string name=\"enter_password_2fas_message\">Izskatās, ka šī 2FAS rezerves kopija ir šifrēta. Lūgums zemāk ievadīt paroli.</string>\n    <string name=\"enter_password_authy_message\">Izskatās, ka Authy kodi ir šifrēti. Lūgums aizvērt Aegis, atvērt Authy un atslēgt kodus ar paroli. Aegis var arī mēģināt atšifrēt Authy kodus, ja tiek ievadīta parole zemāk esošajā laukā.</string>\n    <string name=\"enter_password_aegis_title\">Lūgums ievadīt ievietošanas paroli</string>\n    <string name=\"period_hint\">Laika posms (sekundes)</string>\n    <string name=\"algorithm_hint\">Jaukšanas funkcija</string>\n    <string name=\"type\">Veids</string>\n    <string name=\"share\">Kopīgot</string>\n    <string name=\"yes\">Jā</string>\n    <string name=\"no\">Nē</string>\n    <string name=\"undo\">Atsaukt</string>\n    <string name=\"unlock\">Atslēgt</string>\n    <string name=\"advanced\">Papildu</string>\n    <string name=\"counter\">Skaitītājs</string>\n    <string name=\"digits\">Cipari</string>\n    <string name=\"secret\">Noslēpums</string>\n    <string name=\"scan\">Nolasīt kvadrātkodu</string>\n    <string name=\"scan_image\">Nolasīt attēlu</string>\n    <string name=\"enter_manually\">Ievadīt pašrocīgi</string>\n    <string name=\"set_up_biometric\">Uzstādīt atslēgšanu ar biometriju</string>\n    <string name=\"copy\">Ievietot starpliktuvē</string>\n    <string name=\"edit\">Labot</string>\n    <string name=\"select_all\">Atlasīt visus</string>\n    <string name=\"assign_icons\">Piešķirt ikonas</string>\n    <string name=\"assign_groups\">Piešķirt kopai</string>\n    <string name=\"assign_groups_dialog_summary\">Jāatlasa kopa, kurai piešķirt atlasītos ierakstus.</string>\n    <string name=\"assign_groups_dialog_dropdown\">Atlasīt kopu</string>\n    <string name=\"favorite\" comment=\"Verb\">Pievienot izlasei</string>\n    <string name=\"unfavorite\" comment=\"Verb\">Izņemt no izlases</string>\n    <string name=\"error_all_caps\">KĻŪDA</string>\n    <string name=\"password\">Parole</string>\n    <string name=\"confirm_password\">Apstiprināt paroli</string>\n    <string name=\"show_password\">Rādīt paroli</string>\n    <string name=\"new_entry\">Jauns ieraksts</string>\n    <string name=\"add_new_entry\">Pievienot jaunu ierakstu</string>\n    <string name=\"unlock_vault_error\">Nevarēja atslēgt glabātavu</string>\n    <string name=\"unlock_vault_error_description\">Nepareiza parole. Jāpārliecinās, ka tā netika ierakstīta nepareizi.</string>\n    <string name=\"password_equality_error\">Parolēm ir jāsakrīt un tās nedrīkst būt tukšas</string>\n    <string name=\"snackbar_authentication_method\">Lūgums atlasīt autentificēšanās veidu</string>\n    <string name=\"encrypting_vault\">Šifrē glabātavu</string>\n    <string name=\"exporting_vault\">Izgūst glabātavu</string>\n    <string name=\"optimizing_icon\">Optimizē ikonu</string>\n    <string name=\"optimizing_icon_multiple\">Optimizē ikonas: %1$d/%2$d</string>\n    <string name=\"reading_file\">Nolasa datni</string>\n    <string name=\"requesting_root_access\">Pieprasa neierobežotu piekļuvi</string>\n    <string name=\"analyzing_qr\">Notiek kvadrātkoda nolasīšana</string>\n    <string name=\"analyzing_qr_multiple\">Apstrādā kvadrātkodu %1$d/%2$d (%3$s)</string>\n    <plurals name=\"added_new_entries\">\n        <item quantity=\"zero\">Glabātavai pievienoti %d jaunu ierakstu</item>\n        <item quantity=\"one\">Glabātavai pievienots %d jauns ieraksts</item>\n        <item quantity=\"other\">Glabātavai pievienoti %d jauni ieraksti</item>\n    </plurals>\n    <string name=\"importing_icon_pack\">Ievieto ikonu pakotni</string>\n    <string name=\"delete_entry\">Dzēst ierakstu</string>\n    <string name=\"delete_entry_description\">Vai tiešām izdzēst šo ierakstu?</string>\n    <string name=\"delete_entry_explanation\">Šī darbība neatspējo 2FA:\\n<b>%s</b>\\n\\nLai novērstu piekļuves zaudēšanu, jāpārliecinās, ka ir atspējots 2FA vai ka ir cits veids, kā izveidot kodus šim pakalpojumam.</string>\n    <string name=\"delete_entries\">Dzēst ierakstus</string>\n    <plurals name=\"delete_entries_description\">\n        <item quantity=\"zero\">Vai tiešām izdēst %d ierakstu?</item>\n        <item quantity=\"one\">Vai tiešām izdzēst %d ierakstu?</item>\n        <item quantity=\"other\">Vai tiešām izdzēst %d ierakstus?</item>\n    </plurals>\n    <string name=\"discard_changes\">Atmest izmaiņas?</string>\n    <string name=\"discard_changes_description\">Izmaiņas netika saglabātas</string>\n    <string name=\"saving_profile_error\">Kļūda saglabājot profilu</string>\n    <string name=\"saving_assign_icons_error\">Ikonu piešķiršanā atgadījās kļūda</string>\n    <string name=\"welcome\">Sveiciens!</string>\n    <string name=\"app_description\">Aegis ir bezmaksas, atvērta pirmkoda un droša 2FA lietotne</string>\n    <string name=\"setup_completed\">Uzstādīšana pabeigta</string>\n    <string name=\"setup_completed_description\">Aegis ir uzstādīta un ir gatava izmantošanai.</string>\n    <string name=\"vault_not_found\">Nav atrasta glabātava, tiek uzsākta uzstādīšana…</string>\n    <string name=\"copied\">Ievietots starpliktuvē</string>\n    <string name=\"errors_copied\">Kļūdas ir ievietotas starpliktuvē</string>\n    <string name=\"version_copied\">Laidiena numurs ir ievietots starpliktuvē</string>\n    <string name=\"error_required_field\">Šis lauks ir nepieciešams</string>\n    <string name=\"error_occurred\">Atgadījusies kļūda</string>\n    <string name=\"decryption_error\">Atgadījusies kļūda glabātavas atslēgšanā</string>\n    <string name=\"decryption_corrupt_error\">Atgadījusies kļūda glabātavas atslēgšanā. Tās datne var būt bojāta.</string>\n    <string name=\"saving_error\">Atgadījusies kļūda glabātavas saglabāšanā</string>\n    <string name=\"vault_init_error\">Atgadījusies kļūda glabātavas sāknēšanā</string>\n    <string name=\"vault_load_error\">Atgadījusies kļūda glabātavas ielādēšanā no krātuves</string>\n    <string name=\"biometric_decrypt_error\">Atgadījusies kļūda glabātavas atšifrēšanā ar biometrisko autentificēšanos. Tā parasti notiek tikai tad, ja tika mainīti ierīces drošības iestatījumi. Lūgums atslēgt glabātavu ar paroli un atkārtoti uzstādīt biometrisko autentificēšanos Aegis iestatījumos.</string>\n    <string name=\"biometric_init_error\">Atgadījusies kļūda biometriskās autentificēšanās sagatavošanā. Tā parasti notiek tikai tad, ja tika mainīti ierīces drošības iestatījumi. Lūgums atslēgt glabātavu ar paroli un atkārtoti uzstādīt biometrisko autentificēšanos Aegis iestatījumos.</string>\n    <string name=\"disable_encryption\">Atspējot šifrēšanu</string>\n    <string name=\"disable_encryption_description\">Vai tiešām atspējot šifrēšanu? Tādējādi glabātava tiks glabāta kā vienkāršs teksts. <b>Tiks atspējota arī automātiskā rezerves kopēšana</b>.</string>\n    <string name=\"enable_encryption_error\">Atgadījusies kļūda šifrēšanas iespējošanā</string>\n    <string name=\"disable_encryption_error\">Atgadījusies kļūda šifrēšanas atspējošanā</string>\n    <string name=\"backup_successful\">Rezerves kopēšana tika sekmīgi ieplānota</string>\n    <string name=\"backup_error\">Atgadījusies kļūda rezerves kopijas izveidošanā</string>\n    <string name=\"backup_status_success\">Visjaunākā sekmīgā rezerves kopija: %s</string>\n    <string name=\"backup_status_failed\">Visjaunākā neizdevusies rezerves kopija: %s</string>\n    <string name=\"backup_status_none\">Vēl nav veikta neviena rezerves kopēšana</string>\n    <string name=\"backup_warning_password\">Rezerves kopijas ir ar šifrētas ar paroli, kas ir norādīta drošības iestatījumos</string>\n    <string name=\"documentsui_error\">Izskatās, ka ierīcē nav DocumentsUI. Tā ir būtiska sistēmas sastāvdaļa, kas nepieciešama dokumentu atlasīšanai un izveidošanai. Var gadīties, ka tā ir nejauši izdzēsta, ja ir izmantots rīks lieko sistēmas lietotņu noņemšanai, un ir nepieciešams DocumentsUI pārinstalēt.</string>\n    <string name=\"icon_pack_import_error\">Atgadījusies kļūda ikonu pakotnes ievietošanas mēģinājumā</string>\n    <string name=\"icon_pack_import_exists_error\">Ievietojamā ikonu pakotne jau pastāv. Vai pārrakstīt to?</string>\n    <string name=\"icon_pack_delete_error\">Atgadījusies kļūda ikonu pakotnes dzēšanas mēģinājumā</string>\n    <plurals name=\"icon_pack_info\">\n        <item quantity=\"zero\">%d ikonu</item>\n        <item quantity=\"one\">%d ikona</item>\n        <item quantity=\"other\">%d ikonas</item>\n    </plurals>\n    <string name=\"icon_custom\">Pielāgots</string>\n    <string name=\"permission_denied\">Atļauja liegta</string>\n    <string name=\"andotp_new_format\">Jaunais veidols (v0.6.3 vai jaunāks) </string>\n    <string name=\"andotp_old_format\">Vecais veidols (v0.6.2 vai vecāks) </string>\n    <string name=\"choose_andotp_importer\">Kāds ir andOTP rezerves kopijas datnes veidols?</string>\n    <string name=\"choose_totpauth_importer\">Vai šī TOTP autentificētāja rezerves kopija ir šifrēta ar paroli?</string>\n    <string name=\"choose_application\">Atlasīt lietotni, no kuras ievietot</string>\n    <string name=\"choose_theme\">Atlasīt vēlamo izskatu</string>\n    <string name=\"choose_account_name_position\">Atlasīt vēlamo konta nosaukuma atrašanās vietu</string>\n    <string name=\"choose_view_mode\">Atlasīt vēlamo skata veidu</string>\n    <string name=\"choose_copy_behavior\">Atlasīt vēlamo kopēšanas uzvedību</string>\n    <string name=\"parsing_file_error\">Atgadījusies kļūda datnes satura apstrādāšanā</string>\n    <string name=\"file_not_found\">Kļūda: datne nav atrasta</string>\n    <string name=\"reading_file_error\">Atgadījusies kļūda datnes nolasīšanā</string>\n    <string name=\"app_lookup_error\">Kļūda: lietotne nav uzstādīta</string>\n    <string name=\"app_version_error\">%s laidiens, kas ir uzstādīts, netiek atbalstīts. Neseās versijās ir uzsākta atsevišķu datņu šifrēšana iekšējā krātuves mapē, padarot nepieejamu nepieciešamo informāciju, kas Aegis ir nepieciešama ievietošanai. Ievietošanas mēģinājums, visticamāk, beigsies ar kļūdu. Vai vienalga turpināt?</string>\n    <string name=\"root_error\">Kļūda: Nav iespējams iegūt neirobežotu piekļuvi</string>\n    <plurals name=\"imported_entries_count\">\n        <item quantity=\"zero\">Ievietoti %d ierakstu</item>\n        <item quantity=\"one\">Ievietots %d ieraksts</item>\n        <item quantity=\"other\">Ievietoti %d ieraksti</item>\n    </plurals>\n    <plurals name=\"entries_shown\">\n        <item quantity=\"zero\">Rāda %d ierakstu</item>\n        <item quantity=\"one\">Rāda %d ierakstu</item>\n        <item quantity=\"other\">Rāda %d ierakstus</item>\n    </plurals>\n    <string name=\"intro_import_error_title\">Notika kļūda glabātavas ievietošanas laikā</string>\n    <string name=\"import_error_title\">Ievietošanas laikā radās viena vai vairākas kļūdas</string>\n    <string name=\"exporting_vault_error\">Atgadījās kļūda glabātavas izgūšanas laikā</string>\n    <string name=\"exported_vault\">Glabātava tika izgūta</string>\n    <string name=\"encryption_set_password_error\">Atgadījusies kļūda paroles uzstādīšanā.</string>\n    <string name=\"encryption_enable_biometrics_error\">Atgadījusies kļūda mēģinājumā iespējot atslēgšanu ar biometriju. Dažām ierīcēm ir vāji īstenota biometriskā autentifikācija, un ļoti iespējams, ka šī ir viena no tādām. Ieteicams apsvērt uzstādījumos izmantot tikai paroli.</string>\n    <string name=\"no_cameras_available\">Kameras nav pieejamas</string>\n    <string name=\"read_qr_error\">Atgadījusies kļūda kvadrātkoda nolasīšanā</string>\n    <string name=\"read_qr_error_phonefactor\">Aegis nav saderīgs ar Microsoft piederošo 2FA algoritmu. Lūgums pārliecināties, ka ir izvēlēts \\\"Uzstādīt lietotni bez paziņojumiem\\\", kad Office 365 tiek uzstādīts 2FA.</string>\n    <string name=\"partial_google_auth_import\">Noteikta nepilnīga Google Authenticator izgūšanas datne</string>\n    <string name=\"partial_google_auth_import_warning\">Trūkst dažu kvadrātkodu no ievietošanas. Šie kodi netika atrasti:\\n\\n<b>%s</b>\\n\\nVar turpināt ievietošanu no šīs nepilnīgās izgūšanas datnes, bet mēs iesakām mēģināt atkārtoti ar visiem kvadrātkodiem, lai nebūtu jāzaudē piekļuve kodiem.</string>\n    <string name=\"missing_qr_code_descriptor\">• kvadrātkods %d</string>\n    <plurals name=\"import_partial_export_anyway\">\n        <item quantity=\"zero\">Vienalga ievietot %d kodus</item>\n        <item quantity=\"one\">Vienalga ievietot %d kodu</item>\n        <item quantity=\"other\">Vienalga ievietot %d kodus</item>\n    </plurals>\n    <string name=\"import_google_auth_failure\">Neizdevās ievietošana no Google Authenticator izgūšanas datnes</string>\n    <string name=\"unrelated_google_auth_batches_error\">Izgūšanas datne satur informāciju par nesaistītu kopumu. Var mēģināt ievietot atsevišķi pa vienam kopumam.</string>\n    <string name=\"no_tokens_can_be_imported\">Iznākumā nevar ievietot nevienu kodu</string>\n    <string name=\"unlocking_vault\">Atslēgšana ar biometriju</string>\n    <string name=\"rename_group\">Pārdēvēt kopu</string>\n    <string name=\"no_group_selection\">Ja ieraksts nav daļa no kādas kopas, to var atrast zem \\\"Nav kopas\\\".</string>\n    <string name=\"remove_group\">Noņemt kopu</string>\n    <string name=\"remove_group_description\">Vai tiešām noņemt šo kopu? Tās ieraksti tiks pārmainīti uz \\\"Nav kopas\\\".</string>\n    <string name=\"remove_unused_groups\">Izdzēst neizmantotās kopas</string>\n    <string name=\"remove_unused_groups_description\">Vai tiešām izdzēst visas kopas, kas nav piesaistītas kādam ierakstam?</string>\n    <string name=\"remove_icon_pack\">Noņemt ikonu pakotni</string>\n    <string name=\"remove_icon_pack_description\">Vai tiešām noņemt šo ikonu pakotni? Netiks ietekmēti ieraksti, kuros ir izmantotas pakotnē esošās ikonas.</string>\n    <string name=\"details\">Izklāsts</string>\n    <string name=\"show_error_details\">Rādīt kļūdu izklāstu</string>\n    <string name=\"lock\">Aizslēgt</string>\n    <string name=\"name\">Nosaukums</string>\n    <string name=\"no_group\">Bez kopas</string>\n    <string name=\"sort\" comment=\"Title of the Sort button in the top action bar of the main view\">Kārtot</string>\n    <string name=\"sort_alphabetically\">Izsniedzējs (no A līdz Z)</string>\n    <string name=\"sort_alphabetically_reverse\">Izsniedzējs (no Z līdz A)</string>\n    <string name=\"sort_alphabetically_name\">Konts (no A līdz Z)</string>\n    <string name=\"sort_alphabetically_name_reverse\">Konts (no Z līdz A)</string>\n    <string name=\"sort_usage_count\">Izmantošanas reižu skaits</string>\n    <string name=\"sort_last_used\">Pēdējoreiz izmantots</string>\n    <string name=\"sort_custom\">Pielāgots</string>\n    <string name=\"last_used\">Pēdējoreiz izmantots</string>\n    <string name=\"last_used_never\">nekad</string>\n    <string name=\"new_group\">Jauna kopa…</string>\n    <string name=\"group\">Kopa</string>\n    <string name=\"group_name_hint\">Kopas nosaukums</string>\n    <string name=\"preference_manage_groups\">Labot kopas</string>\n    <string name=\"preference_manage_groups_summary\">Šeit var pārvaldīt un dzēst kopas</string>\n    <string name=\"preference_reset_usage_count\">Atiestatīt izmantošanas reižu skaitu</string>\n    <string name=\"preference_reset_usage_count_summary\">Atiestatīt izmantošanas reižu skaitu ikkatram glabātavas ierakstam</string>\n    <string name=\"preference_reset_usage_count_dialog\">Vai tiešām kā visu glabātavas ierakstu izmantošanas reižu skaitu norādīt 0?</string>\n    <string name=\"note\" comment=\"Users can add a note to an entry\">Piezīme</string>\n    <string name=\"clear\">Notīrīt</string>\n    <string name=\"dialog_duplicate_entry_title\" comment=\"'Duplicate' is a noun here\">Ieraksts atkārtojas</string>\n    <string name=\"dialog_duplicate_entry_message\">Šim ierakstam ir tāds pats nosaukums un izdevējs kā vienaim vai vairākiem citiem esošiem ierakstiem. Kā Tu vēlētos turpināt?</string>\n    <string name=\"dialog_duplicate_entry_overwrite_title\">Izvietot esošo ierakstu/ierakstus</string>\n    <string name=\"dialog_duplicate_entry_overwrite_subtitle\">Aizvietot esošo ierakstu vai ierakstus ar jauno. Šī darbība ir neatgriezeniska</string>\n    <string name=\"dialog_duplicate_entry_suffix_title\">Pievienot piedēkli</string>\n    <string name=\"dialog_duplicate_entry_suffix_subtitle\">Pievienot piedēkli jaunajam ierakstam. Jaunais nosaukums būs: %s</string>\n    <string name=\"dialog_duplicate_entry_cancel_title\">Atcelt saglabāšanu</string>\n    <string name=\"dialog_duplicate_entry_cancel_subtitle\">Ļauj labot ierakstu pirms vēlreiz mēģināt to saglabāt</string>\n    <plurals name=\"dialog_duplicate_entry_overwrite_dialog_message\">\n        <item quantity=\"zero\">Vai tiešām izdzēst %d ierakstu ar šādu nosaukumu:\\n\\n%s - %s</item>\n        <item quantity=\"one\">Vai tiešām izdzēst %d ierakstu ar šādu nosaukumu:\\n\\n%s - %s</item>\n        <item quantity=\"other\">Vai tiešām izdzēst %d ierakstus ar šādu nosaukumu:\\n\\n%s - %s</item>\n    </plurals>\n    <string name=\"dialog_duplicate_entry_overwrite_dialog_title\">Apstiprināt izdzēšanu</string>\n    <string name=\"pref_haptic_feedback_summary\">Likt ierīcēi ietrīcēties, kad kodi tiek atsvaidzināti</string>\n    <string name=\"pref_haptic_feedback_title\">Sajūtu atgriezeniskā saite</string>\n    <string name=\"pref_highlight_entry_title\">Izcelt kodus, kad piesit</string>\n    <string name=\"pref_highlight_entry_summary\">Padarīt kodus vieglāk atšķiramus citu no cita, īslaicīgi izceļot tos, kad tiem piesit</string>\n    <string name=\"pref_groups_multiselect_title\">Vairāku kopu atlasīšana</string>\n    <string name=\"pref_groups_multiselect_summary\">Ļaut vienlaicīgi atlasīt vairākas kopas</string>\n    <string name=\"pref_minimize_on_copy_title\">Samazināt pēc ievietošanas starpliktuvē</string>\n    <string name=\"pref_minimize_on_copy_summary\">Samazināt lietotni pēc koda ievietošanas starpliktuvē</string>\n    <string name=\"pref_copy_behavior_title\">Ievietot tekstvienības starpliktuvē</string>\n    <string name=\"pref_search_behavior_title\">Meklēšanas uzvedība</string>\n    <string name=\"pref_pause_entry_title\">Iesaldēt kodus pēc piesišanas tiem</string>\n    <string name=\"pref_pause_entry_summary\">Apturēt kodu atsvaidzināšanu, kad piesit. Kods netiks atjaunots, kamēr vien tas ir izcelts. Ir nepieciešams ieslēgt iestatījumu \\\"Izcelt kodus, kad piesit\\\" vai \\\"Piesist, lai atklātu\\\".</string>\n    <string name=\"pin_keyboard_description\">Jāievada parole, lai iespējotu PIN tastatūru. Jāņem vērā, ka tā darbojas tikai tad, ja parole sastāv tikai no cipariem</string>\n    <string name=\"pin_keyboard_error\">Kļūda iespējojot PIN tastatūru</string>\n    <string name=\"pin_keyboard_error_description\">Nav iespējams iestatīt PIN tastatūru. Parolei ir jāsastāv tikai no cipariem.</string>\n    <string name=\"pin_keyboard_disabled\">Parole ir mainīta. PIN tastatūra vairs netiks rādīta.</string>\n    <string name=\"selected\">Atlasīts</string>\n    <string name=\"dark_theme_title\">Tumšs izskats</string>\n    <string name=\"light_theme_title\">Gaišs izskats</string>\n    <string name=\"amoled_theme_title\">AMOLED izskats</string>\n    <string name=\"system_theme_title\">Akumulatora taupītāja iestatīts</string>\n    <string name=\"system_amoled_theme_title\">Akumulatora taupītāja iestatīts (AMOLED)</string>\n    <string name=\"normal_viewmode_title\">Ierasts</string>\n    <string name=\"compact_mode_title\">Ciešs</string>\n    <string name=\"small_mode_title\">Mazs</string>\n    <string name=\"tiles_mode_title\">Mozaīka</string>\n    <string name=\"unknown_issuer\">Nezināms izsniedzējs</string>\n    <string name=\"unknown_account_name\">Nezināms konta nosaukums</string>\n    <plurals name=\"import_error_dialog\">\n        <item quantity=\"zero\">Aegis nevarēja ievietot %d kodus. Tie tiks izlaisti. Spiest uz \\\"Izklāsts\\\", lai redzētu vairāk informācijas par kļūdām.</item>\n        <item quantity=\"one\">Aegis nevarēja ievietot %d kodu. Tas tiks izlaists. Spiest uz \\\"Izklāsts\\\", lai redzētu vairāk informācijas par kļūdām.</item>\n        <item quantity=\"other\">Aegis nevarēja ievietot %d kodus. Tie tiks izlaisti. Spiest uz \\\"Izklāsts\\\", lai redzētu vairāk informācijas par kļūdām.</item>\n    </plurals>\n    <string name=\"unable_to_process_deeplink\">Nevar apstrādāt dziļo saiti</string>\n    <string name=\"unable_to_read_qrcode_file\">Nav iespējams nolasīt un apstrādāt kvadrātkodu no datnes: %s.</string>\n    <string name=\"unable_to_process_shared_text\">Nav iespējams apstrādāt kopīgoto tekstu kā OTP</string>\n    <string name=\"unable_to_read_qrcode_files\">Nav iespējams nolasīt un apstrādāt dažus no kvadrātkodiem. Tiks ievietoti tikai %1$d/%2$d ieraksti.</string>\n    <string name=\"unable_to_generate_qrcode\">Nav iespējams izveidot kvadrātkodu</string>\n    <string name=\"select_picture\">Atlasīt attēlu</string>\n    <string name=\"select_icon\">Atlasīt ikonu</string>\n    <string name=\"tile_open_vault\" comment=\"label for a quick settings tile that opens the app when tapped\">Atvērt glabātavu</string>\n    <string name=\"tile_open_scanner\" comment=\"label for a quick settings tile that opens the QR code scanner when tapped\">Atvērt nolasītāju</string>\n    <string name=\"toggle_checkboxes\">Pārslēgt izvēles rūtiņas</string>\n    <string name=\"search\">Meklēt</string>\n    <string name=\"channel_name_lock_status\">Aizslēga stāvoklis</string>\n    <string name=\"channel_description_lock_status\">Aegis var izveidot paliekošu paziņojumu, lai paziņotu, kad glabātava ir aizslēgta</string>\n    <string name=\"vault_unlocked_state\">Glabātava ir atslēgta. Piesist, lai aizslēgtu.</string>\n    <string name=\"version\">Laidiens</string>\n    <string name=\"changelog\">Izmaiņu žurnāls</string>\n    <string name=\"whats_new\">Kas jauns</string>\n    <string name=\"github_description\">Pirmkods, pieteikumi un informācija</string>\n    <string name=\"license\">Licence</string>\n    <string name=\"license_description\">Aegis autentificētājs ir licencēts ar GPLv3</string>\n    <string name=\"third_party_licenses\">Trešo pušu licences</string>\n    <string name=\"third_party_licenses_description\">Trešo pušu bibliotēku, ko Aegis izmanto, licences</string>\n    <string name=\"country_netherlands\">Nīderlande</string>\n    <string name=\"email_us\">Rakstīt e-pastu</string>\n    <string name=\"visit_website\">Apmeklēt mūsu vietni</string>\n    <string name=\"about_support\">Atbalsts</string>\n    <string name=\"support_rate\">Novērtēt</string>\n    <string name=\"support_rate_description\">Mūs var atbalstīt ar pārskatu Google Play veikalā</string>\n    <string name=\"webview_error\">Šajā ierīcē netiek atbalstīts tīmekļa skats, kas ir nepieciešams, lai apskatīt izmaiņu sarakstu un licenci. Tam trūkst sistēmas sastāvdaļas.</string>\n    <string name=\"email\">E-pasts</string>\n    <string name=\"time_sync_warning_title\">Automātiska laika sinhronizēšana</string>\n    <string name=\"time_sync_warning_message\">Aegis paļaujas, ka sistēmas laiks sakrīt, lai izveidotu pareizus kodus. Dažu sekunžu nobīde var izraisīt nepareizus kodus. Izskatās, ka šī ierīce nav uzstādīta, lai automātiski sinhronizētu laiku. Vai izdarīt to tagad?</string>\n    <string name=\"time_sync_warning_disable\">Nebrīdināt mani. Es zinu, ko es daru.</string>\n    <string name=\"google_qr_export_unrelated\">Atrasts nesaistīts kvadrātkods. Jāmēģina pārsāknēt nolasītāju.</string>\n    <plurals name=\"google_qr_export_scanned\">\n        <item quantity=\"zero\">Nolasīti %1$d/%2$d kvadrātkodi</item>\n        <item quantity=\"one\">Nolasīts %1$d/%2$d kvadrātkods</item>\n        <item quantity=\"other\">Nolasīti %1$d/%2$d QR attēliem</item>\n    </plurals>\n    <string name=\"google_qr_export_unexpected\">Sagaidāms kvadrātkods #%1$d, bet tā vietā nolasīts #%2$d</string>\n    <string name=\"backup_error_bar_message\"><b>Glabātavas rezerves kopēšana nesen neizdevās</b></string>\n    <string name=\"backup_error_dialog_details\" comment=\"The first parameter is the type of backup (e.g. built-in or Android backup). The second parameter is an elapsed time in the style of 'x seconds/minutes/days ago'.\">        Nesens rezerves kopijas veidošanas mēģinājums, izmantojot %1$s, neizdevās, jo atgadījās kļūda. Rezerves kopiju tika mēģināts izveidot %2$s. Lūgums pārskatīt rezerves kopēšanas iestatījumus, lai pārliecinātos, ka var sekmīgi veikt rezerves kopiju izveidošanu.\n    </string>\n    <string name=\"backup_permission_error_dialog_details\" comment=\"The first parameter is the type of backup (e.g. built-in or Android backup). The second parameter is an elapsed time in the style of 'x seconds/minutes/days ago'.\">        Nesens glabātavas rezerves kopēšanas mēģinājums ar %1$s neizdevās, jo Aegis nebija atļaujas rakstīt rezerves kopijas paredzētajā vietā. Rezerves kopēšana tika mēģināta %2$s. Šī kļūda var atgadīties, ja tika pārvietota vai pāsaukta rezerves kopiju atrašanās vieta vai ja nesen Aegis tika atjaunots no rezerves kopijas. Lūgums atkārtoti iestatīt rezerves kopiju atrašanās vietu.\n    </string>\n    <string name=\"backup_system_builtin\">Aegis iebūvētā automātiskā rezerves kopēšana</string>\n    <string name=\"backup_system_android\">Android mākoņa rezerves kopiju sistēma</string>\n    <string name=\"backup_reminder_bar_message_with_latest\" comment=\"The parameter is an elapsed time in the style of 'x seconds/minutes/days ago'\">        Jaunākā rezerves kopija ir novecojusi (%s)\n    </string>\n    <string name=\"backup_reminder_bar_message\">        Izmaiņas nav rezerves kopijās\n    </string>\n    <string name=\"backup_reminder_bar_dialog_title\">Izmaiņās nav rezerves kopijās</string>\n    <string name=\"backup_reminder_bar_dialog_summary\">        Nesenas glabātavas izmaiņas vēl nav rezerves kopijās. Ir svarīgi laiku pa laikam veidot rezerves kopijas, lai novērstu kontu piekļuves zaudēšanu. Lūgums apsvērt iestatīt automātisko rezerves kopiju veidošanu iestatījumu izvēlnē.\n    </string>\n    <string name=\"backup_reminder_bar_dialog_accept\">Iestatīt rezerves kopiju veidošanu</string>\n    <string name=\"backup_plaintext_export_warning\"><b>Glabātava nesen tika izgūta kā vienkāršs teksts</b></string>\n    <string name=\"pref_show_plaintext_warning_hint\">Vairs nerādīt šo brīdinājumu</string>\n    <string name=\"backup_plaintext_warning_explanation\">Šis brīdinājums tiek parādīts, jo nesen tika izgūta nešifrēta glabātavas kopija. Lai nodrošinātu kodu drošību, ir ieteicams izdzēst šo datni, tiklīdz tā vairs nav nepieciešama.</string>\n    <string name=\"switch_camera\">Pārslēgt kameru</string>\n    <string name=\"empty_list\">Nav kodu, ko attēlot. Ierakstus var pievienot, piesitot apakšējā labajā stūrī esošajai \\\"+\\\" zīmei</string>\n    <string name=\"empty_list_title\">Nav atrastu ierakstu</string>\n    <string name=\"empty_group_list\">Nav kopu, ko attēlot. Tās var pievienot ieraksta labošanas skatā</string>\n    <string name=\"empty_group_list_title\">Nav atrastu kopu</string>\n    <string name=\"no_icon_packs\">Pagaidām nav ievietota neviena ikonu pakotne. Jāpiesit \\\"+\\\", lai kādu pievienotu. Padoms: var izmēģināt <a href=\"https://aegis-icons.github.io\">aegis-icons</a>.</string>\n    <string name=\"no_icon_packs_title\">Nav ikonu pakotņu</string>\n    <string name=\"pick_icon\">Izvēlēties ikonu</string>\n    <string name=\"uncategorized\">Bez kopas</string>\n    <string name=\"done\">Izpildīts</string>\n    <plurals name=\"qr_count\">\n        <item quantity=\"zero\">%d / %d kvadrātkodu</item>\n        <item quantity=\"one\">%d / %d kvadrātkods</item>\n        <item quantity=\"other\">%d / %d kvadrātkodi</item>\n    </plurals>\n    <string name=\"next\">Nākamais</string>\n    <string name=\"previous\">Iepriekšējais</string>\n    <string name=\"copy_uri\">Ievietot URI starpliktuvē</string>\n    <string name=\"unable_to_copy_uri_to_clipboard\">Nebija iespējams ievietot URI starpliktuvē</string>\n    <string name=\"uri_copied_to_clipboard\">URI tika ievietots starpliktuvē</string>\n    <string name=\"transfer_entry_description\">Nolasīt šo kvadrātkodu ar autentificētāja lietotni, uz kuru ir vēlme pārvietot šo ierakstu</string>\n    <string name=\"transfer_entry_brightness\">Piesist kvadrātkodam, lai pārslēgtu pilnu ekrāna spilgtumu</string>\n    <string name=\"google_auth_compatible_transfer_description\">Nolasīt šos kvadrātkodus ar Aegis vai Google Authenticator.\\n\\nIerobežojumu dēļ Google Authenticator lietotnē, ir iekļautas tikai TOTP un HOTP pilnvaras, kam ir izmantots SHA1 un kas veido sešciparu kodus</string>\n    <string name=\"password_strength_very_weak\">Ļoti vāja</string>\n    <string name=\"password_strength_weak\">Vāja</string>\n    <string name=\"password_strength_fair\">Pieņemama</string>\n    <string name=\"password_strength_good\">Laba</string>\n    <string name=\"password_strength_strong\">Spēcīga</string>\n    <string name=\"password_strength_unknown\">Parole ir pārāk gara stipruma novērtēšanai</string>\n    <string name=\"pref_pin_keyboard_title\">Izmantot PIN tastatūru slēgšanas ekrānā</string>\n    <string name=\"pref_pin_keyboard_summary\">Iespējot, ja ir vēlme izmantot PIN tastatūru slēgšanas ekrānā. Šī iespēja darbojas tikai ar parolēm, kas sastāv tikai no cipariem</string>\n    <string name=\"title_activity_preferences\">Iestatījumi</string>\n    <string name=\"title_activity_manage_groups\">Pārvaldīt kopas</string>\n    <string name=\"title_activity_transfer\">Pārvietot ierakstus</string>\n    <string name=\"title_activity_about\">Par</string>\n    <string name=\"title_activity_edit_entry\">Labot ierakstu</string>\n    <string name=\"title_activity_scan_qr\">Nolasīt kvadrātkodu</string>\n    <string name=\"title_activity_import_entries\">Ievietot ierakstus</string>\n    <string name=\"title_activity_assign_icons\">Piešķirt ikonas</string>\n    <string name=\"title_activity_licenses\">Trešo pušu licences</string>\n    <string name=\"dialog_wipe_entries_title\">Notīrīt ierakstus</string>\n    <string name=\"dialog_wipe_entries_message\">Glabātava jau satur ierakstus. Vai tos noņemt, pirms tiek ievietota šī datne?\\n\\n<b>Šādi rīkojoties, tiks zaudēta piekļuve pašreizējiem glabātavas ierakstiem.</b></string>\n    <string name=\"dialog_wipe_entries_checkbox\">Notīrīt glabātavas saturu</string>\n    <string name=\"import_from_clipboard_title\">Ievietot no starpliktuves</string>\n    <string name=\"import_from_clipboard_message\">Starpliktuvē tika atrasts derīgs otpauth URI.\\n\\n<b>Nosaukums</b>:%1$s\\n<b>Izdevējs</b>: %2$s\\n\\nVai izmantot to, lai aizpildītu šo ievadi?</string>\n    <string name=\"panic_trigger_ignore_toast\">Aegis saņēma trauksmes izsaukumu, bet iestatījums ir atspējots, tādēļ tas netiek ņemts vērā</string>\n    <string name=\"pref_panic_trigger_title\">Izdzēst glabātavu pēc trauksmes izsaukuma</string>\n    <string name=\"pref_panic_trigger_summary\">Izdzēst glabātavu, kad trauksmes izsaukums ir saņemts no Ripple</string>\n    <string name=\"import_vault\">Ievietot Aegis glabātavu</string>\n    <string name=\"import_vault_hint\">Ir vēlēšanās ievietot no citas 2FA lietotnes? Vispirms jāpabeidz uzstādīšana un tad jādodas uz iestatījumu izvēlni.</string>\n    <plurals name=\"import_duplicate_toast\">\n        <item quantity=\"zero\">Noņemta atzīme %d iespējamiem dublikātiem. Lūgums pārskatīt ierakstu sarakstu.</item>\n        <item quantity=\"one\">Noņemta atzīme %d iespējamam dublikātam. Lūgums pārskatīt ierakstu sarakstu.</item>\n        <item quantity=\"other\">Noņemta atzīme %d iespējamiem dublikātiem. Lūgums pārskatīt ierakstu sarakstu.</item>\n    </plurals>\n    <string name=\"importer_help_2fas\">Jāiesniedz 2FAS Authenticator izgūšanas datne.</string>\n    <string name=\"importer_help_aegis\">Jāiesniedz Aegis izgūšanas / rezerves kopijas datne.</string>\n    <string name=\"importer_help_authenticator_plus\">Jāiesniedz Authenticator Plus izgūšanas datne, kas ir iegūta ar <b>Iestatījumi -&gt; Rezerves kopēšana un atjaunošana -&gt; Izgūt kā tekstu un HTML</b>.</string>\n    <string name=\"importer_help_authy\">Jāiesniedz <b>/data/data/com.authy.authy/shared_prefs/com.authy.storage.tokens.authenticator.xml</b> kopija, kas atrodas iekšējās krātuves Authy mapē.</string>\n    <string name=\"importer_help_andotp\">Jāiesniedz andOTP izgūšanas / rezerves kopijas datne.</string>\n    <string name=\"importer_help_bitwarden\">Jāiesniedz Bitwarden izgūšanas / rezerves kopijas datne. Šifrētas datnes netiek atbalstītas.</string>\n    <string name=\"importer_help_battle_net_authenticator\">Jāiesniedz <b>/data/data/com.blizzard.messenger/shared_prefs/com.blizzard.messenger.authenticator_preferences.xml</b> kopija, kas atrodas iekšējās krātuves Battle.net Authenticator mapē.</string>\n    <string name=\"importer_help_duo\">Jāiesniedz <b>/data/data/com.duosecurity.duomobile/files/duokit/accounts.json</b> kopija, kas atrodas iekšējās krātuves DUO mapē.</string>\n    <string name=\"importer_help_ente_auth\">Jāiesniedz Ente Auth izgūšanas datne. Pašlaik tiek atbalstītas tikai nešifrētas datnes.</string>\n    <string name=\"importer_help_freeotp\">FreeOTP 2: jāpadod rezerves kopijas datne.\\nFreeOTP 1.x: jāpadod <b>/data/data/org.fedorahosted.freeotp/shared_prefs/tokens.xml</b> kopija, kas atrodas iekšējās krātuves FreeOTP mapē.</string>\n    <string name=\"importer_help_freeotp_plus\">Jāiesniedz FreeOTP+ izgūšanas datne.</string>\n    <string name=\"importer_warning_title_freeotp2\">FreeOTP 2 saderība</string>\n    <string name=\"importer_warning_message_freeotp2\">Pastāv vairākas FreeOTP 2 nepilnības, kas var beigties ar bojātām rezerves kopijām. Aegis mēģinās saglābt pēc iespējas vairāk ierakstu, bet ir iespējams, ka dažus no tiem vai pat visus neizdodas ievietot.</string>\n    <string name=\"importer_help_google_authenticator\"><b>Tek atbalstītas tikai datubāzes datnes no Goole Authenticator v5.10 un agrāka</b>.\\n\\nJāiesniedz kopija no <b>/data/data/com.google.android.apps.authenticator2/databases/databases</b>, kas atrodas iekšējās krātuves Google Authenticator mapē.</string>\n    <string name=\"importer_help_microsoft_authenticator\">Jāiesniedz <b>/data/data/com.azure.authenticator/databases/PhoneFactor</b> kopija, kas atrodas iekšējās krātuves Microsoft Authenticator mapē.</string>\n    <string name=\"importer_help_plain_text\">Jāiesniedz vienkārša teksta datne, kuras katra līnija satur vienu Google Authenticator URI.</string>\n    <string name=\"importer_help_proton_authenticator\">Jānorāda Proton Authenticator izguves datne (.json), kas iegūta <b>Settings -&gt; Export</b>.</string>\n    <string name=\"importer_help_steam\"><b>Steam v3.0 un jaunāks netiek atbalstīts</b>. Jāiesniedz <b>/data/data/com.valvesoftware.android.steam.community/files/Steamguard-*.json</b> kopija, kas atrodas iekšējās krātuves Steam mapē.</string>\n    <string name=\"importer_help_stratum\">Jāiesniedz Stratum izgūšanas datne, kas ir iegūstama <b>Iestatījumi -&gt; Rezerves kopijas -&gt; Dublēt šifrētā datnē (ieteicams)</b>.</string>\n    <string name=\"importer_help_totp_authenticator\">Jāiesniedz TOTP Authenticator izgūšanas datne.</string>\n    <string name=\"importer_help_winauth\">Jāiesniedz WinAuth izgūšanas datne.</string>\n    <string name=\"import_assign_icons_dialog_title\">Piešķirt ikonas</string>\n    <string name=\"import_assign_icons_dialog_text\">Vai piešķirt ikonas ievietotajiem ierakstiem?</string>\n    <string name=\"importer_encrypted_exception_google_authenticator\">Tika izlaists šifrēts ieraksts: %s</string>\n    <string name=\"importer_help_direct\">Ievietot ierakstus uzreiz no %s. Tam ir nepieciešams, lai lietotne ir uzstādīta šajā ierīcē un lai Aegis ir nodrošināta saknes piekļuve.</string>\n    <string name=\"groups\">Kopas</string>\n    <string name=\"pref_focus_search\">Izcelt meklēšanas lauku pēc lietotnes sāknēšanas</string>\n    <string name=\"pref_focus_search_summary\">Izcelt meklēšanas lauku uzreiz pēc lietotnes atvēršanas.</string>\n    <string name=\"pref_grouping_halves\">Puses</string>\n    <string name=\"pref_grouping_none\">Bez kopām</string>\n    <string name=\"pref_grouping_size_two\">Kopas no 2</string>\n    <string name=\"pref_grouping_size_three\">Kopas no 3</string>\n    <string name=\"pref_grouping_size_four\">Kopas no 4</string>\n    <string name=\"pref_copy_behavior_never\">Nekad</string>\n    <string name=\"pref_copy_behavior_single_tap\">Viens piesitiens</string>\n    <string name=\"pref_copy_behavior_double_tap\">Divkāršs piesitiens</string>\n    <string name=\"pref_account_name_position_hidden\">Paslēpts</string>\n    <string name=\"pref_account_name_position_end\">Aiz izdevēja</string>\n    <string name=\"pref_account_name_position_below\">Zem izdevēja</string>\n    <plurals name=\"time_elapsed_seconds\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"zero\">pirms %d sekundēm</item>\n        <item quantity=\"one\">pirms %d sekundes</item>\n        <item quantity=\"other\">Pirms %d sekundēm</item>\n    </plurals>\n    <plurals name=\"time_elapsed_minutes\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"zero\">Pirms %d minūtēm</item>\n        <item quantity=\"one\">Pirms %d minūtes</item>\n        <item quantity=\"other\">Pirms %d minūtēm</item>\n    </plurals>\n    <plurals name=\"time_elapsed_hours\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"zero\">Pirms %d stundām</item>\n        <item quantity=\"one\">Pirms %d stundas</item>\n        <item quantity=\"other\">Pirms %d stundām</item>\n    </plurals>\n    <plurals name=\"time_elapsed_days\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"zero\">Pirms %d dienām</item>\n        <item quantity=\"one\">Pirms %d dienas</item>\n        <item quantity=\"other\">Pirms %d dienām</item>\n    </plurals>\n    <plurals name=\"time_elapsed_years\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"zero\">Pirms %d gadiem</item>\n        <item quantity=\"one\">Pirms %d gada</item>\n        <item quantity=\"other\">Pirms %d gadiem</item>\n    </plurals>\n    <plurals name=\"dropdown_checkboxes_default_count\">\n        <item quantity=\"zero\">Atlasīti %d vienumu</item>\n        <item quantity=\"one\">Atlasīts %d vienums</item>\n        <item quantity=\"other\">Atlasīti %d vienumi</item>\n    </plurals>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-lv-rLV-v29/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"system_theme_title\">Sistēmas noklusējums</string>\n    <string name=\"system_amoled_theme_title\">Sistēmas noklusējums (AMOLED)</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-ml-rIN/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources xmlns:tools=\"http://schemas.android.com/tools\">\n    <string name=\"action_settings\">ക്രമീകരണങ്ങൾ</string>\n    <string name=\"action_about\">കുറിച്ച്</string>\n    <string name=\"action_delete\">ഇല്ലാതാക്കുക</string>\n    <string name=\"action_transfer\">മാറ്റിസ്ഥാപിക്കുക</string>\n    <string name=\"action_edit_icon\">തിരുത്തുക ഐക്കൺ</string>\n    <string name=\"action_reset_usage_count\">ഉപയോഗ എണ്ണം പുനഃസജ്ജമാക്കുക</string>\n    <string name=\"action_reset_usage_count_dialog\">ഈ എൻട്രിയുടെ ഉപയോഗ എണ്ണം 0 ആയി സജ്ജീകരിക്കണമെന്ന് തീർച്ചയാണോ?</string>\n    <string name=\"action_default_icon\">സ്ഥിരസ്ഥിതി ഐക്കൺ പുനഃസ്ഥാപിക്കുക</string>\n    <string name=\"discard\">കളയുക</string>\n    <string name=\"save\">ഓർക്കുക</string>\n    <string name=\"issuer\">പ്രസാധകൻ</string>\n    <string name=\"yandex_pin\">പിൻ (4–16 അക്കങ്ങൾ)</string>\n    <string name=\"motp_pin\">പിൻ (4 അക്കങ്ങൾ)</string>\n    <string name=\"suggested\">നിർദ്ദേശിcha</string>\n    <string name=\"usage_count\">ഉപയോഗ എണ്ണം</string>\n    <string name=\"warning\">മുന്നറിയിപ്പ്</string>\n    <string name=\"pref_cat_appearance_app\">ആപ്പ്</string>\n    <string name=\"pref_cat_appearance_entries\">ഇനങ്ങൾ</string>\n    <string name=\"pref_cat_backups_android\">ആൻഡ്രോയിഡ്</string>\n    <string name=\"pref_cat_backups_auto\">യാന്ത്രിക ബാക്കപ്പുകൾ</string>\n    <string name=\"pref_section_behavior_title\">പെരുമാറ്റം</string>\n    <string name=\"pref_section_behavior_summary\">എൻട്രി ലിസ്റ്റുമായി ഇടപഴകുമ്പോൾ പെരുമാറ്റം ഇഷ്ടാനുസൃതമാക്കുക.</string>\n    <string name=\"pref_section_appearance_title\">രൂപഭാവം</string>\n    <string name=\"pref_section_appearance_summary\">ആപ്പിൻ്റെ രൂപഭാവത്തെ ബാധിക്കുന്ന തീം, ഭാഷ, മറ്റ് ക്രമീകരണങ്ങൾ എന്നിവ ക്രമീകരിക്കുക.</string>\n    <string name=\"pref_section_security_title\">സുരക്ഷ</string>\n    <string name=\"pref_section_security_summary\">എൻക്രിപ്ഷൻ, ബയോമെട്രിക് അൺലോക്ക്, ഓട്ടോ ലോക്ക്, മറ്റ് സുരക്ഷാ ക്രമീകരണങ്ങൾ എന്നിവ കോൺഫിഗർ ചെയ്യുക.</string>\n    <string name=\"pref_section_import_export_title\">ഇറക്കുമതി &amp; കയറ്റുമതി</string>\n    <string name=\"pref_section_import_export_summary\">ഏജിസ് അല്ലെങ്കിൽ മറ്റ് ഓതൻ്റിക്കേറ്റർ ആപ്പുകളുടെ ബാക്കപ്പുകൾ ഇറക്കുമതി ചെയ്യുക. നിങ്ങളുടെ ഏജിസ് നിലവറയുടെ മാനുവൽ എക്‌സ്‌പോർട്ടുകൾ സൃഷ്‌ടിക്കുക.</string>\n    <string name=\"pref_section_backups_title\">ബാക്കപ്പുകൾ</string>\n    <string name=\"pref_section_backups_summary\">നിങ്ങൾ തിരഞ്ഞെടുക്കുന്ന സ്ഥലത്തേക്ക് സ്വയമേവയുള്ള ബാക്കപ്പുകൾ സജ്ജീകരിക്കുക അല്ലെങ്കിൽ Android-ൻ്റെ ക്ലൗഡ് ബാക്കപ്പ് സിസ്റ്റത്തിൽ പങ്കാളിത്തം പ്രവർത്തനക്ഷമമാക്കുക.</string>\n    <string name=\"pref_section_icon_packs\">ഐക്കൺ പായ്ക്കുകൾ</string>\n    <string name=\"pref_section_icon_packs_summary\">ഐക്കൺ പായ്ക്കുകൾ നിയന്ത്രിക്കുകയും ഇറക്കുമതി ചെയ്യുകയും ചെയ്യുക</string>\n    <string name=\"pref_select_theme_title\">തീം</string>\n    <string name=\"pref_dynamic_colors_title\">ഡൈനാമിക് നിറങ്ങൾ</string>\n    <string name=\"pref_dynamic_colors_summary\">നിങ്ങളുടെ Android തീമിൻ്റെ നിറങ്ങളെ അടിസ്ഥാനമാക്കി ഒരു ഓവർലേ പ്രയോഗിക്കുക</string>\n    <string name=\"pref_view_mode_title\">കാഴ്ചയുടെ രീതി</string>\n    <string name=\"pref_lang_title\">ഭാഷ</string>\n    <string name=\"pref_show_icons_title\">ഐക്കണുകൾ കാണിക്കുക</string>\n    <string name=\"pref_show_icons_summary\">ഓരോ എൻട്രിക്കും അടുത്തുള്ള ഐക്കണുകൾ പ്രദർശിപ്പിക്കുക</string>\n    <string name=\"pref_code_group_size_title\">കോഡ് അക്കം ഒന്നിച്ചുചേർക്കൽ</string>\n    <string name=\"pref_code_group_size_summary\">ഒന്നിച്ചുചേർക്കൽ കോഡുകളിലേക്കുള്ള അക്കങ്ങളുടെ എണ്ണം</string>\n    <string name=\"pref_account_name_position_title\">അക്കൗണ്ട് പേര് കാണിക്കുക</string>\n    <string name=\"pref_shared_issuer_account_name_title\">ആവശ്യമുള്ളപ്പോൾ മാത്രം അക്കൗണ്ട് പേര് കാണിക്കുക</string>\n    <string name=\"pref_shared_issuer_account_name_summary\">ഒരേ പ്രസാധകനെ അവർ പങ്കിടുമ്പോഴെല്ലാം അക്കൗണ്ട് പേരുകൾ മാത്രം കാണിക്കുക. മറ്റ് അക്കൗണ്ട് പേരുകൾ മറയ്ക്കപ്പെടും.</string>\n    <string name=\"pref_import_file_title\">ഫയലിൽ നിന്ന് ഇറക്കുമതി ചെയ്യുക</string>\n    <string name=\"pref_import_file_summary\">ഫയലിൽ നിന്ന് ടോക്കണുകൾ ഇറക്കുമതി ചെയ്യുക</string>\n    <string name=\"pref_android_backups_title\">ആൻഡ്രോയിഡ് ക്ലൗഡ് ബാക്കപ്പുകൾ</string>\n    <string name=\"pref_android_backups_summary\">ആൻഡ്രോയിഡിൻ്റെ ക്ലൗഡ് ബാക്കപ്പ് സിസ്റ്റത്തെ അതിൻ്റെ ബാക്കപ്പുകളിൽ ഏജിസിൻ്റെ നിലവറ ഉൾപ്പെടുത്താൻ അനുവദിക്കുക. എൻക്രിപ്റ്റ് ചെയ്ത നിലവറകൾക്ക് മാത്രമേ ഇത് പിന്തുണയ്ക്കൂ.</string>\n    <string name=\"pref_android_backups_hint\"><i>മുകളിലെ ക്രമീകരണം പരിഗണിക്കാതെ തന്നെ ഡിവൈസ് ടു ഡിവൈസ് (D2D) ബാക്കപ്പുകൾ എപ്പോഴും അനുവദനീയമാണ്</i></string>\n    <string name=\"pref_backups_title\">നിലവറ സ്വയമേവ ബാക്കപ്പ് ചെയ്യുക</string>\n    <string name=\"pref_backups_summary\">മാറ്റങ്ങൾ സ്വയമേവ ബാഹ്യ സംഭരണത്തിൽ നിലവറയുടെ ബാക്കപ്പുകൾ സൃഷ്ടിക്കുമ്പോൾ. എൻക്രിപ്റ്റ് ചെയ്ത നിലവറകൾക്ക് മാത്രമേ ഇത് പിന്തുണയ്ക്കൂ.</string>\n    <string name=\"pref_backups_reminder_title\">ബാക്കപ്പ് ഓർമ്മപ്പെടുത്തൽ</string>\n    <string name=\"pref_backups_reminder_summary\">നിങ്ങളുടെ ഏറ്റവും പുതിയ മാറ്റങ്ങൾ ബാക്കപ്പ് ചെയ്‌തിട്ടില്ലെങ്കിൽ, നിങ്ങളുടെ നിലവറ ബാക്കപ്പ് ചെയ്യുന്നതിനുള്ള ഒരു ഓർമ്മപ്പെടുത്തൽ കാണിക്കുക.</string>\n    <string name=\"pref_backups_reminder_dialog_title\">ബാക്കപ്പ് ഓർമ്മപ്പെടുത്തൽ പ്രവർത്തനരഹിതമാക്കുക</string>\n    <string name=\"pref_backups_reminder_dialog_summary\">ഈ ഓർമ്മപ്പെടുത്തൽ പ്രവർത്തനരഹിതമാക്കുക എന്നതിനർത്ഥം, ഇതുവരെ ബാക്കപ്പ് ചെയ്യാത്ത മാറ്റങ്ങൾ നിങ്ങൾക്കുണ്ടോ ഇല്ലയോ എന്ന് ഏജിസ് നിങ്ങളോട് പറയില്ല എന്നാണ്. ഇത് നിങ്ങളുടെ ടോക്കണുകളിലേക്കുള്ള പ്രവേശനം നഷ്‌ടപ്പെടാനുള്ള അപകടസാധ്യത ഉണ്ടാക്കുന്നു. ഓർമ്മപ്പെടുത്തൽ പ്രവർത്തനരഹിതമാക്കണമെന്ന് തീർച്ചയാണോ?</string>\n    <string name=\"pref_backups_location_summary\">ബാക്കപ്പുകൾ സംഭരിക്കും</string>\n    <string name=\"pref_backups_trigger_title\">ബാക്കപ്പ് ട്രിഗർ ചെയ്യുക</string>\n    <string name=\"pref_backups_trigger_summary\">ഒരു ബാക്കപ്പ് സ്വമേധയാ ട്രിഗർ ചെയ്യുക</string>\n    <string name=\"pref_backups_versions_title\">സൂക്ഷിക്കേണ്ട പതിപ്പുകളുടെ എണ്ണം</string>\n    <plurals name=\"pref_backups_versions_summary\">\n        <item quantity=\"one\">ബാക്കപ്പിൻ്റെ %1$d പതിപ്പ് സൂക്ഷിക്കുക</item>\n        <item quantity=\"other\">ബാക്കപ്പിൻ്റെ %1$d പതിപ്പുകൾ സൂക്ഷിക്കുക</item>\n    </plurals>\n    <string name=\"pref_import_app_title\">ആപ്പിൽ നിന്ന് ഇറക്കുമതി ചെയ്യുക</string>\n    <string name=\"pref_import_app_summary\">ഒരു ആപ്പിൽ നിന്ന് ടോക്കണുകൾ ഇറക്കുമതി ചെയ്യുക (റൂട്ട് ആക്സസ് ആവശ്യമാണ്)</string>\n    <string name=\"pref_export_title\">കയറ്റുമതി</string>\n    <string name=\"pref_export_summary\">നിലവറ കയറ്റുമതി ചെയ്യുക</string>\n    <string name=\"pref_password_reminder_title\">പാസ്‌വേഡ് ഓർമ്മപ്പെടുത്തൽ</string>\n    <string name=\"pref_google_auth_export_title\">ഗൂഗിൾ ഓതൻ്റിക്കേറ്റർ-നായി കയറ്റുമതി ചെയ്യുക</string>\n    <string name=\"pref_google_auth_export_descriptor\">ഗൂഗിൾ ഓതൻ്റിക്കേറ്റർ-ന് അനുയോജ്യമായ എക്സ്പോർട്ട് ക്യുആർ കോഡുകൾ സൃഷ്ടിക്കുന്നു</string>\n    <string name=\"pref_google_auth_export_no_data\">കയറ്റുമതി ചെയ്യാൻ ഡാറ്റയില്ല</string>\n    <plurals name=\"pref_google_auth_export_incompatible_entries\">\n        <item quantity=\"one\">പൊരുത്തമില്ലാത്ത %d എൻട്രി ഒഴിവാക്കി</item>\n        <item quantity=\"other\">പൊരുത്തമില്ലാത്ത %d എൻട്രികൾ ഒഴിവാക്കി</item>\n    </plurals>\n    <string name=\"pref_password_reminder_summary\">പാസ്‌വേഡ് നൽകാനുള്ള %s ഓർമ്മപ്പെടുത്തൽ കാണിക്കുക, അതുവഴി നിങ്ങൾ അത് മറക്കരുത്.</string>\n    <string name=\"pref_password_reminder_summary_disabled\">അപ്രാപ്തമാക്കി</string>\n    <string name=\"pref_secure_screen_title\">സ്ക്രീൻ സുരക്ഷ</string>\n    <string name=\"pref_secure_screen_summary\">സ്‌ക്രീൻഷോട്ടുകളും ആപ്പിനുള്ളിൽ സ്‌ക്രീൻ ക്യാപ്‌ചർ ചെയ്യാനുള്ള മറ്റ് ശ്രമങ്ങളും തടയുക</string>\n    <string name=\"pref_tap_to_reveal_title\">വെളിപ്പെടുത്താൻ ടാപ്പ് ചെയ്യുക</string>\n    <string name=\"pref_tap_to_reveal_summary\">ടോക്കണുകൾ സ്ഥിരസ്ഥിതി മറയ്‌ക്കും. കോഡ് വെളിപ്പെടുത്താൻ ടോക്കണുകളിൽ ടാപ്പുചെയ്യുക.</string>\n    <string name=\"pref_tap_to_reveal_time_title\">ടാപ്പ് വെളിപ്പെടുത്താനുള്ള സമയപരിധി</string>\n    <string name=\"pref_auto_lock_title\">ഓട്ടോ ലോക്ക്</string>\n    <string name=\"pref_auto_lock_summary\">എപ്പോൾ %s</string>\n    <string name=\"pref_auto_lock_summary_disabled\">അപ്രാപ്തമാക്കി</string>\n    <string name=\"pref_auto_lock_prompt\">എജിസ് ഓട്ടോമാറ്റിക് ലോക്ക് എപ്പോൾ</string>\n    <string name=\"pref_auto_lock_type_back_button\">ബാക്ക് ബട്ടൺ അമർത്തി</string>\n    <string name=\"pref_auto_lock_type_minimize\">ആപ്പ് ചെറുതാക്കി</string>\n    <string name=\"pref_auto_lock_type_device_lock\">ഉപകരണം ലോക്ക് ചെയ്തിരിക്കുന്നു</string>\n    <string name=\"pref_backup_password_category\">ബാക്കപ്പ് &amp; കയറ്റുമതി</string>\n    <string name=\"pref_backup_password_title\">ബാക്കപ്പിനായി പ്രത്യേക പാസ്‌വേഡ് &amp; കയറ്റുമതി</string>\n    <string name=\"pref_backup_password_summary\">പ്രവർത്തനക്ഷമമാക്കിയാൽ, ആപ്പ് അൺലോക്ക് ചെയ്യാൻ ഉപയോഗിക്കുന്ന പാസ്‌വേഡ് ബാക്കപ്പും കയറ്റുമതി ഡീക്രിപ്റ്റ് ചെയ്യാൻ ഇനി ഉപയോഗിക്കാനാകില്ല.</string>\n    <string name=\"pref_backup_password_change_title\">ബാക്കപ്പിനായി പാസ്‌വേഡ് മാറ്റുക &amp; കയറ്റുമതി</string>\n    <string name=\"pref_backup_password_change_summary\">ബാക്കപ്പ് ചെയ്യുമ്പോഴും കയറ്റുമതി ചെയ്യുമ്പോഴും നിലവറ എൻക്രിപ്റ്റ് ചെയ്യാൻ ഉപയോഗിക്കുന്ന ഒരു പുതിയ പാസ്‌വേഡ് സജ്ജീകരിക്കുക.</string>\n    <string name=\"pref_encryption_title\">എൻക്രിപ്ഷൻ</string>\n    <string name=\"pref_encryption_summary\">നിലവറ എൻക്രിപ്റ്റ് ചെയ്‌ത് പാസ്‌വേഡ് അല്ലെങ്കിൽ ബയോമെട്രിക്‌സ് ഉപയോഗിച്ച് അൺലോക്ക് ചെയ്യുക</string>\n    <string name=\"pref_biometrics_title\">ബയോമെട്രിക് അൺലോക്ക്</string>\n    <string name=\"pref_biometrics_summary\">നിലവറ അൺലോക്ക് ചെയ്യാൻ ബയോമെട്രിക് പ്രാമാണീകരണം അനുവദിക്കുക</string>\n    <string name=\"pref_set_password_title\">പാസ്വേഡ് മാറ്റുക</string>\n    <string name=\"pref_set_password_summary\">നിങ്ങളുടെ നിലവറ അൺലോക്ക് ചെയ്യുന്നതിന് ഒരു പുതിയ പാസ്‌വേഡ് സജ്ജമാക്കുക</string>\n    <string name=\"export_encrypted\">നിലവറ എൻക്രിപ്റ്റ് ചെയ്യുക</string>\n    <string name=\"export_help\">ഈ പ്രവർത്തനം എജീസിൻ്റെ ആന്തരിക സംഭരണത്തിൽ നിന്ന് നിലവറ കയറ്റുമതി ചെയ്യും. നിങ്ങൾ കയറ്റുമതി ചെയ്യാൻ ആഗ്രഹിക്കുന്ന ഫോർമാറ്റ് തിരഞ്ഞെടുക്കുക:</string>\n    <string name=\"export_warning_unencrypted\">നിങ്ങളുടെ ഏജിസ് നിലവറയുടെ എൻക്രിപ്റ്റ് ചെയ്യാത്ത ഒരു പകർപ്പ് നിങ്ങൾ കയറ്റുമതി ചെയ്യാൻ പോകുകയാണ്. <b>ഇത് ശുപാർശ ചെയ്യുന്നില്ല</b>.</string>\n    <string name=\"export_warning_password\">സുരക്ഷാ ക്രമീകരണങ്ങളിൽ കോൺഫിഗർ ചെയ്‌തിരിക്കുന്ന പ്രത്യേക പാസ്‌വേഡ് ഉപയോഗിച്ചാണ് കയറ്റുമതി എൻക്രിപ്റ്റ് ചെയ്യുന്നത്.</string>\n    <string name=\"understand_risk_accept\">അപകടസാധ്യത ഞാൻ മനസ്സിലാക്കുന്നു</string>\n    <string name=\"export_format_aegis\">Aegis (.JSON)</string>\n    <string name=\"export_format_google_auth_uri\">Text file (.TXT)</string>\n    <string name=\"export_format_html\">Web page (.HTML)</string>\n    <string name=\"export_format_hint\">കയറ്റുമതി ഫോർമാറ്റ്</string>\n    <string name=\"export_all_groups\">എല്ലാ ഗ്രൂപ്പുകളും കയറ്റുമതി ചെയ്യുക</string>\n    <string name=\"export_choose_groups\">കയറ്റുമതി ചെയ്യേണ്ട ഗ്രൂപ്പുകൾ തിരഞ്ഞെടുക്കുക</string>\n    <plurals name=\"export_groups_selected_count\">\n        <item quantity=\"one\">%d തിരഞ്ഞെടുത്ത ഗ്രൂപ്പ്</item>\n        <item quantity=\"other\">%d തിരഞ്ഞെടുത്ത ഗ്രൂപ്പുകൾ</item>\n    </plurals>\n    <string name=\"export_no_groups_selected\">കയറ്റുമതി ചെയ്യാൻ ഗ്രൂപ്പുകളൊന്നും തിരഞ്ഞെടുത്തിട്ടില്ല</string>\n    <string name=\"export_html_title\" comment=\"The title of an HTML export document\">ഏജിസ് ഓതൻ്റിക്കേറ്റർ കയറ്റുമതി</string>\n    <string name=\"choose_authentication_method\">സുരക്ഷ</string>\n    <string name=\"authentication_method_explanation\">സുരക്ഷാ കേന്ദ്രീകൃതമായ 2FA ആപ്പാണ് ഏജിസ്. ടോക്കണുകൾ ഒരു നിലവറയിൽ സംഭരിച്ചിരിക്കുന്നു, അത് നിങ്ങൾ തിരഞ്ഞെടുക്കുന്ന പാസ്‌വേഡ് ഉപയോഗിച്ച് ഓപ്ഷണലായി എൻക്രിപ്റ്റ് ചെയ്യാവുന്നതാണ്. ഒരു ആക്രമണകാരിക്ക് നിങ്ങളുടെ എൻക്രിപ്റ്റ് ചെയ്ത വോൾട്ട് ഫയൽ ലഭിച്ചാൽ, പാസ്‌വേഡ് അറിയാതെ അവർക്ക് ഉള്ളടക്കം ആക്‌സസ് ചെയ്യാൻ കഴിയില്ല.\\n\\nനിങ്ങളുടെ ഉപകരണത്തിന് ഏറ്റവും അനുയോജ്യമെന്ന് ഞങ്ങൾ കരുതുന്ന ഓപ്ഷൻ ഞങ്ങൾ മുൻകൂട്ടി തിരഞ്ഞെടുത്തു.</string>\n    <string name=\"authentication_method_none\">ഒന്നുമില്ല</string>\n    <string name=\"authentication_method_none_description\">നിലവറ അൺലോക്ക് ചെയ്യാൻ പാസ്‌വേഡ് ആവശ്യമില്ല, അത് എൻക്രിപ്റ്റ് ചെയ്യപ്പെടില്ല. <b>നിലവറ അൺലോക്ക് ചെയ്യാൻ പാസ്‌വേഡ് ആവശ്യമില്ല, അത് എൻക്രിപ്റ്റ് ചെയ്യപ്പെടില്ല</b>.</string>\n    <string name=\"authentication_method_password\">പാസ്വേഡ്</string>\n    <string name=\"authentication_method_password_description\">നിലവറ അൺലോക്ക് ചെയ്യുന്നതിന് ഒരു പാസ്‌വേഡ് ആവശ്യമാണ്.</string>\n    <string name=\"authentication_method_password_explanation\">മുന്നറിയിപ്പ്: നിങ്ങൾ പാസ്‌വേഡ് മറന്നാൽ, നിങ്ങളുടെ ടോക്കണുകളിലേക്കുള്ള ആക്‌സസ് ശാശ്വതമായി നഷ്‌ടമാകും. പാസ്‌വേഡ് ഇല്ലാതെ അവ വീണ്ടെടുക്കാൻ ഒരു മാർഗവുമില്ല.</string>\n    <string name=\"authentication_method_biometrics\">ബയോമെട്രിക്സ്</string>\n    <string name=\"authentication_method_biometrics_description\">ഒരു പാസ്‌വേഡിന് പുറമേ, ഈ ഉപകരണത്തിൽ രജിസ്‌റ്റർ ചെയ്‌തിരിക്കുന്ന വിരലടയാളമോ നിങ്ങളുടെ മുഖമോ പോലുള്ള ബയോമെട്രിക്‌സും നിലവറ അൺലോക്ക് ചെയ്യാൻ ഉപയോഗിക്കാം.</string>\n    <string name=\"authentication\">നിലവറ അൺലോക്ക് ചെയ്യുക</string>\n    <string name=\"authentication_multiline\" comment=\"The newline in the middle is used for aesthetic purposes\">നിലവറ\\nഅൺലോക്ക് ചെയ്യുക</string>\n    <string name=\"auth_use_biometrics\">അല്ലെങ്കിൽ <font fgcolor=\"#FF0D86C1\">ബയോമെട്രിക്‌സ്</font> ഉപയോഗിക്കാൻ ഇവിടെ ടാപ്പ് ചെയ്യുക</string>\n    <string name=\"set_password\">ദയവായി ഒരു പാസ്‌വേഡ് നൽകുക</string>\n    <string name=\"set_group\">ദയവായി ഒരു ഗ്രൂപ്പിൻ്റെ പേര് നൽകുക</string>\n    <string name=\"set_number\">ദയവായി ഒരു അക്കം നൽകുക</string>\n    <string name=\"set_password_confirm\">ദയവായി പാസ്‌വേഡ് സ്ഥിരീകരിക്കുക</string>\n    <string name=\"invalid_password\">പാസ്‌വേഡ് തെറ്റാണ്</string>\n    <string name=\"invalidated_biometrics\">നിങ്ങളുടെ ഉപകരണത്തിൻ്റെ സുരക്ഷാ ക്രമീകരണത്തിൽ ഒരു മാറ്റം കണ്ടെത്തി. ബയോമെട്രിക് അൺലോക്ക് പ്രവർത്തനരഹിതമാക്കുന്നതിനും വീണ്ടും പ്രവർത്തനക്ഷമമാക്കുന്നതിനും ദയവായി \\\"Aegis -&gt; ക്രമീകരണങ്ങൾ -&gt; സുരക്ഷ -&gt; ബയോമെട്രിക് അൺലോക്ക്\\\" എന്നതിലേക്ക് പോകുക.</string>\n    <string name=\"password_reminder\">ദയവായി നിങ്ങളുടെ പാസ്‌വേഡ് നൽകുക. ഇത് മറക്കാതിരിക്കാൻ ഞങ്ങൾ ഇടയ്ക്കിടെ നിങ്ങളോട് ആവശ്യപ്പെടാറുണ്ട്.</string>\n    <string name=\"password_reminder_dialog_title\">സ്ഥിരസ്ഥിതി ബയോമെട്രിക് അൺലോക്ക്</string>\n    <string name=\"password_reminder_dialog_message\">നിങ്ങളുടെ പാസ്‌വേഡ് നിങ്ങൾ മറന്നിട്ടില്ലെന്നും നിങ്ങളുടെ നിലവറയിൽ നിന്ന് ലോക്ക് ചെയ്യപ്പെടില്ലെന്നും ഉറപ്പാക്കാൻ പകരം അത് നൽകാൻ ഞങ്ങൾ ഇടയ്ക്കിടെ നിങ്ങളോട് ആവശ്യപ്പെടും. ഒരിക്കൽ നിങ്ങളുടെ പാസ്‌വേഡ് നൽകിയതിന് ശേഷം, മറ്റൊരു പാസ്‌വേഡ് ഓർമ്മപ്പെടുത്തലിനുള്ള സമയം ആകുന്നത് വരെ Aegis ബയോമെട്രിക് അൺലോക്കിലേക്ക് സ്ഥിരസ്ഥിതി ആയി മടങ്ങും.</string>\n    <string name=\"password_reminder_freq_never\">ഒരിക്കലും</string>\n    <string name=\"password_reminder_freq_weekly\">പ്രതിവാരം</string>\n    <string name=\"password_reminder_freq_biweekly\">ദ്വൈവാരം</string>\n    <string name=\"password_reminder_freq_monthly\">പ്രതിമാസ</string>\n    <string name=\"password_reminder_freq_quarterly\">ത്രൈമാസ</string>\n    <string name=\"enter_password_2fas_message\">ഈ 2FAS ബാക്കപ്പ് എൻക്രിപ്റ്റ് ചെയ്തതായി തോന്നുന്നു. ദയവായി താഴെ പാസ്‌വേഡ് നൽകുക.</string>\n    <string name=\"enter_password_authy_message\">നിങ്ങളുടെ Authy ടോക്കണുകൾ എൻക്രിപ്റ്റ് ചെയ്തതായി തോന്നുന്നു. ദയവായി Aegis അടയ്ക്കുക, Authy തുറന്ന് നിങ്ങളുടെ പാസ്‌വേഡ് ഉപയോഗിച്ച് ടോക്കണുകൾ അൺലോക്ക് ചെയ്യുക. പകരം, നിങ്ങളുടെ പാസ്‌വേഡ് ചുവടെ നൽകിയാൽ, നിങ്ങളുടെ Authy ടോക്കണുകൾ ഡീക്രിപ്റ്റ് ചെയ്യാനും ഏജിസിന് ശ്രമിക്കാം.</string>\n    <string name=\"enter_password_aegis_title\">ഇറക്കുമതി പാസ്‌വേഡ് നൽകുക</string>\n    <string name=\"period_hint\">കാലയളവ് (സെക്കൻ്റുകൾ)</string>\n    <string name=\"algorithm_hint\">ഹാഷ് ഫംഗ്ഷൻ</string>\n    <string name=\"type\">വൈവിധ്യം</string>\n    <string name=\"share\">പങ്കിടുക</string>\n    <string name=\"yes\">അതെ</string>\n    <string name=\"no\">ഇല്ല</string>\n    <string name=\"undo\">പഴയപടിയാക്കുക</string>\n    <string name=\"unlock\">അൺലോക്ക്</string>\n    <string name=\"advanced\">വിപുലമായത്</string>\n    <string name=\"counter\">കൗണ്ടർ</string>\n    <string name=\"digits\">അക്കങ്ങൾ</string>\n    <string name=\"secret\">രഹസ്യം</string>\n    <string name=\"scan\">ക്യുആർ കോഡ് സ്കാൻ ചെയ്യുക</string>\n    <string name=\"scan_image\">ചിത്രം സ്കാൻ ചെയ്യുക</string>\n    <string name=\"enter_manually\">സ്വമേധയാ നൽകുക</string>\n    <string name=\"set_up_biometric\">ബയോമെട്രിക് അൺലോക്ക് സജ്ജീകരിക്കുക</string>\n    <string name=\"copy\">പകര്‍ത്തുക</string>\n    <string name=\"edit\">തിരുത്തുക</string>\n    <string name=\"select_all\">എല്ലാം തിരഞ്ഞെടുക്കുക</string>\n    <string name=\"assign_icons\">ഐക്കണുകൾ നിയോഗിക്കുക</string>\n    <string name=\"favorite\" comment=\"Verb\">പ്രിയപ്പെട്ടത്</string>\n    <string name=\"unfavorite\" comment=\"Verb\">പ്രിയപ്പെട്ടതല്ല</string>\n    <string name=\"error_all_caps\">പിശക്</string>\n    <string name=\"password\">പാസ്വേഡ്</string>\n    <string name=\"confirm_password\">പാസ്‌വേഡ് സ്ഥിരീകരിക്കുക</string>\n    <string name=\"show_password\">പാസ്‌വേഡ് കാണിക്കുക</string>\n    <string name=\"new_entry\">പുതിയ എൻട്രി</string>\n    <string name=\"add_new_entry\">പുതിയ എൻട്രി ചേർക്കുക</string>\n    <string name=\"unlock_vault_error\">നിലവറ അൺലോക്ക് ചെയ്യാനായില്ല</string>\n    <string name=\"unlock_vault_error_description\">തെറ്റായ പാസ്‌വേഡ്. നിങ്ങളുടെ പാസ്‌വേഡ് തെറ്റായി ടൈപ്പ് ചെയ്തിട്ടില്ലെന്ന് ഉറപ്പാക്കുക.</string>\n    <string name=\"password_equality_error\">പാസ്‌വേഡുകൾ സമാനവും ശൂന്യമല്ലാത്തതുമായിരിക്കണം</string>\n    <string name=\"snackbar_authentication_method\">ഒരു പ്രാമാണീകരണ രീതി തിരഞ്ഞെടുക്കുക</string>\n    <string name=\"encrypting_vault\">നിലവറ എൻക്രിപ്റ്റ് ചെയ്യുക</string>\n    <string name=\"exporting_vault\">നിലവറ കയറ്റുമതി ചെയ്യുന്നു</string>\n    <string name=\"reading_file\">ഫയൽ വായിക്കുന്നു</string>\n    <string name=\"requesting_root_access\">റൂട്ട് അനുമതി അഭ്യർത്ഥിക്കുന്നു</string>\n    <string name=\"analyzing_qr\">ക്യുആർ കോഡ് വിശകലനം ചെയ്യുന്നു</string>\n    <plurals name=\"added_new_entries\">\n        <item quantity=\"one\">നിലവറയിലേക്ക് %d പുതിയ എൻട്രി ചേർത്തു</item>\n        <item quantity=\"other\">നിലവറയിലേക്ക് %d പുതിയ എൻട്രികൾ ചേർത്തു</item>\n    </plurals>\n    <string name=\"importing_icon_pack\">ഐക്കൺ പായ്ക്ക് ഇറക്കുമതി ചെയ്യുന്നു</string>\n    <string name=\"delete_entry\">എൻട്രി ഇല്ലാതാക്കുക</string>\n    <string name=\"delete_entry_description\">ഈ എൻട്രി ഇല്ലാതാക്കണമെന്ന് തീർച്ചയാണോ?</string>\n    <string name=\"delete_entry_explanation\">ഈ പ്രവർത്തനം ഇതിനായി 2FA അപ്രാപ്‌തമാക്കുന്നില്ല:\\n<b>%s</b>\\n\\n പ്രവേശനം നഷ്‌ടപ്പെടുന്നത് തടയാൻ, നിങ്ങൾ 2FA അപ്രാപ്‌തമാക്കിയിട്ടുണ്ടെന്ന് അല്ലെങ്കിൽ ഈ സേവനത്തിനായി കോഡുകൾ സൃഷ്‌ടിക്കുന്നതിന് നിങ്ങൾക്ക് ഒരു ബദൽ മാർഗമുണ്ടെന്ന് ഉറപ്പാക്കുക.</string>\n    <string name=\"delete_entries\">എൻട്രികൾ ഇല്ലാതാക്കുക</string>\n    <plurals name=\"delete_entries_description\">\n        <item quantity=\"one\">%d എൻട്രി ഇല്ലാതാക്കണമെന്ന് തീർച്ചയാണോ?</item>\n        <item quantity=\"other\">%d എൻട്രികൾ ഇല്ലാതാക്കണമെന്ന് തീർച്ചയാണോ?</item>\n    </plurals>\n    <string name=\"discard_changes\">മാറ്റങ്ങൾ ഉപേക്ഷിക്കുക?</string>\n    <string name=\"discard_changes_description\">നിങ്ങളുടെ മാറ്റങ്ങൾ സംരക്ഷിച്ചിട്ടില്ല</string>\n    <string name=\"saving_profile_error\">പ്രൊഫൈൽ സംരക്ഷിക്കുന്നതിൽ പിശക്</string>\n    <string name=\"saving_assign_icons_error\">ഐക്കണുകൾ നൽകുന്നതിൽ പിശക്</string>\n    <string name=\"welcome\">സ്വാഗതം</string>\n    <string name=\"app_description\">Aegis ഒരു സൗജന്യവും സുരക്ഷിതവും ഓപ്പൺ സോഴ്‌സ് 2FA ആപ്പാണ്</string>\n    <string name=\"setup_completed\">സജ്ജീകരണം പൂർത്തിയായി</string>\n    <string name=\"setup_completed_description\">ഏജീസ് സജ്ജീകരിച്ചു, പോകാൻ തയ്യാറാണ്.</string>\n    <string name=\"vault_not_found\">നിലവറ കണ്ടെത്തിയില്ല, സജ്ജീകരണം ആരംഭിക്കുന്നു…</string>\n    <string name=\"copied\">പകർത്തി</string>\n    <string name=\"errors_copied\">പിശകുകൾ ക്ലിപ്പ്ബോർഡിലേക്ക് പകർത്തി</string>\n    <string name=\"version_copied\">പതിപ്പ് ക്ലിപ്പ്ബോർഡിലേക്ക് പകർത്തി</string>\n    <string name=\"error_occurred\">ഒരു പിശക് സംഭവിച്ചു</string>\n    <string name=\"decryption_error\">നിലവറ അൺലോക്ക് ചെയ്യാൻ ശ്രമിക്കുന്നതിനിടെ ഒരു പിശക് സംഭവിച്ചു</string>\n    <string name=\"decryption_corrupt_error\">നിലവറ അൺലോക്ക് ചെയ്യാൻ ശ്രമിക്കുന്നതിനിടെ ഒരു പിശക് സംഭവിച്ചു. നിങ്ങളുടെ നിലവറ ഫയൽ കേടായേക്കാം.</string>\n    <string name=\"saving_error\">നിലവറ സംരക്ഷിക്കാൻ ശ്രമിക്കുന്നതിനിടെ ഒരു പിശക് സംഭവിച്ചു</string>\n    <string name=\"vault_init_error\">നിലവറ ആരംഭിക്കാൻ ശ്രമിക്കുന്നതിനിടെ ഒരു പിശക് സംഭവിച്ചു</string>\n    <string name=\"vault_load_error\">സംഭരണത്തിൽ നിന്ന് നിലവറ ലോഡുചെയ്യാൻ ശ്രമിക്കുന്നതിനിടെ ഒരു പിശക് സംഭവിച്ചു</string>\n    <string name=\"biometric_decrypt_error\">ബയോമെട്രിക് പ്രാമാണീകരണം ഉപയോഗിച്ച് നിലവറ ഡീക്രിപ്റ്റ് ചെയ്യാൻ ശ്രമിക്കുന്നതിനിടെ ഒരു പിശക് സംഭവിച്ചു. നിങ്ങളുടെ ഉപകരണത്തിൻ്റെ സുരക്ഷാ ക്രമീകരണങ്ങൾ മാറ്റിയാൽ മാത്രമേ ഇത് സാധാരണയായി സംഭവിക്കുകയുള്ളൂ. നിങ്ങളുടെ പാസ്‌വേഡ് ഉപയോഗിച്ച് നിലവറ അൺലോക്ക് ചെയ്യുക, എജിസിൻ്റെ ക്രമീകരണങ്ങളിൽ ബയോമെട്രിക് പ്രാമാണീകരണം പുനഃക്രമീകരിക്കുക.</string>\n    <string name=\"biometric_init_error\">ബയോമെട്രിക് പ്രാമാണീകരണം തയ്യാറാക്കാൻ ശ്രമിക്കുന്നതിനിടെ ഒരു പിശക് സംഭവിച്ചു. നിങ്ങളുടെ ഉപകരണത്തിൻ്റെ സുരക്ഷാ ക്രമീകരണങ്ങൾ മാറ്റിയാൽ മാത്രമേ ഇത് സാധാരണയായി സംഭവിക്കുകയുള്ളൂ. നിങ്ങളുടെ പാസ്‌വേഡ് ഉപയോഗിച്ച് നിലവറ അൺലോക്ക് ചെയ്യുക, എജിസിൻ്റെ ക്രമീകരണങ്ങളിൽ ബയോമെട്രിക് പ്രാമാണീകരണം പുനഃക്രമീകരിക്കുക.</string>\n    <string name=\"disable_encryption\">എൻക്രിപ്ഷൻ പ്രവർത്തനരഹിതമാക്കുക</string>\n    <string name=\"disable_encryption_description\">എൻക്രിപ്ഷൻ പ്രവർത്തനരഹിതമാക്കണമെന്ന് തീർച്ചയാണോ? ഇത് നിലവറ പ്ലെയിൻ ടെക്സ്റ്റിൽ സൂക്ഷിക്കാൻ ഇടയാക്കും. <b>യാന്ത്രിക ബാക്കപ്പുകളും പ്രവർത്തനരഹിതമാക്കും</b>.</string>\n    <string name=\"enable_encryption_error\">എൻക്രിപ്ഷൻ പ്രവർത്തനക്ഷമമാക്കുമ്പോൾ ഒരു പിശക് സംഭവിച്ചു</string>\n    <string name=\"disable_encryption_error\">എൻക്രിപ്ഷൻ പ്രവർത്തനരഹിതമാക്കുമ്പോൾ ഒരു പിശക് സംഭവിച്ചു</string>\n    <string name=\"backup_successful\">ബാക്കപ്പ് വിജയകരമായി ഷെഡ്യൂൾ ചെയ്തു</string>\n    <string name=\"backup_error\">ഒരു ബാക്കപ്പ് സൃഷ്ടിക്കാൻ ശ്രമിക്കുമ്പോൾ ഒരു പിശക് സംഭവിച്ചു</string>\n    <string name=\"backup_status_success\">ഏറ്റവും പുതിയ ബാക്കപ്പ് വിജയകരം: %s</string>\n    <string name=\"backup_status_failed\">ഏറ്റവും പുതിയ ബാക്കപ്പ് പരാജയപ്പെട്ടു: %s</string>\n    <string name=\"backup_status_none\">ഇതുവരെ ബാക്കപ്പുകളൊന്നും ഉണ്ടാക്കിയിട്ടില്ല</string>\n    <string name=\"backup_warning_password\">സുരക്ഷാ ക്രമീകരണങ്ങളിൽ കോൺഫിഗർ ചെയ്‌തിരിക്കുന്ന ഒരു പ്രത്യേക പാസ്‌വേഡ് ഉപയോഗിച്ചാണ് ബാക്കപ്പുകൾ എൻക്രിപ്റ്റ് ചെയ്യുന്നത്</string>\n    <string name=\"documentsui_error\">നിങ്ങളുടെ ഉപകരണത്തിൽ DocumentsUI നഷ്‌ടമായതായി തോന്നുന്നു. പ്രമാണങ്ങൾ തിരഞ്ഞെടുക്കുന്നതിനും സൃഷ്ടിക്കുന്നതിനും ആവശ്യമായ ഒരു പ്രധാന സിസ്റ്റം ഘടകമാണിത്. നിങ്ങൾ &quot;ഡീബ്ലോറ്റ്&quot; നിങ്ങളുടെ ഉപകരണം, നിങ്ങൾ അത് അബദ്ധവശാൽ ഇല്ലാതാക്കിയിരിക്കാം, അത് വീണ്ടും ഇൻസ്റ്റാൾ ചെയ്യേണ്ടിവരും.</string>\n    <string name=\"icon_pack_import_error\">ഒരു ഐക്കൺ പായ്ക്ക് ഇറക്കുമതി ചെയ്യാൻ ശ്രമിക്കുന്നതിനിടെ ഒരു പിശക് സംഭവിച്ചു</string>\n    <string name=\"icon_pack_import_exists_error\">നിങ്ങൾ ഇറക്കുമതി ചെയ്യാൻ ശ്രമിക്കുന്ന ഐക്കൺ പായ്ക്ക് ഇതിനകം നിലവിലുണ്ട്. നിങ്ങൾക്ക് അത് തിരുത്തിയെഴുതണോ?</string>\n    <string name=\"icon_pack_delete_error\">ഒരു ഐക്കൺ പായ്ക്ക് ഇല്ലാതാക്കാൻ ശ്രമിക്കുന്നതിനിടെ ഒരു പിശക് സംഭവിച്ചു</string>\n    <string name=\"icon_custom\">നിർദ്ദേശാനുസരണം</string>\n    <string name=\"permission_denied\">അനുമതി നിഷേധിച്ചു</string>\n    <string name=\"andotp_new_format\">പുതിയ ഫോർമാറ്റ് (v0.6.3 അല്ലെങ്കിൽ പുതിയത്) </string>\n    <string name=\"andotp_old_format\">പഴയ ഫോർമാറ്റ് (v0.6.2 അല്ലെങ്കിൽ പഴയത്) </string>\n    <string name=\"choose_andotp_importer\">andOTP ബാക്കപ്പ് ഫയലിന് ഏത് ഫോർമാറ്റാണ് ഉള്ളത്?</string>\n    <string name=\"choose_totpauth_importer\">ഈ TOTP ഓതൻ്റിക്കേറ്റർ ബാക്കപ്പ് ഒരു പാസ്‌വേഡ് ഉപയോഗിച്ച് എൻക്രിപ്റ്റ് ചെയ്തതാണോ?</string>\n    <string name=\"choose_application\">നിങ്ങൾ ഇറക്കുമതി ചെയ്യാൻ ആഗ്രഹിക്കുന്ന ആപ്ലിക്കേഷൻ തിരഞ്ഞെടുക്കുക</string>\n    <string name=\"choose_theme\">നിങ്ങൾ ആഗ്രഹിക്കുന്ന തീം തിരഞ്ഞെടുക്കുക</string>\n    <string name=\"choose_account_name_position\">നിങ്ങൾ ആഗ്രഹിക്കുന്ന അക്കൗണ്ട് പേര് സ്ഥാനം തിരഞ്ഞെടുക്കുക</string>\n    <string name=\"choose_view_mode\">നിങ്ങൾക്ക് ആവശ്യമുള്ള വ്യൂ മോഡ് തിരഞ്ഞെടുക്കുക</string>\n    <string name=\"choose_copy_behavior\">നിങ്ങൾ ആഗ്രഹിക്കുന്ന പകർപ്പ് സ്വഭാവം തിരഞ്ഞെടുക്കുക</string>\n    <string name=\"parsing_file_error\">ഫയൽ പാഴ്‌സ് ചെയ്യാൻ ശ്രമിക്കുന്നതിനിടെ ഒരു പിശക് സംഭവിച്ചു</string>\n    <string name=\"file_not_found\">പിശക്: ഫയൽ കണ്ടെത്തിയില്ല</string>\n    <string name=\"reading_file_error\">ഫയൽ വായിക്കാൻ ശ്രമിക്കുന്നതിനിടെ ഒരു പിശക് സംഭവിച്ചു</string>\n    <string name=\"app_lookup_error\">പിശക്: ആപ്പ് ഇൻസ്റ്റാൾ ചെയ്തിട്ടില്ല</string>\n    <string name=\"app_version_error\">ഇൻസ്റ്റാൾ ചെയ്ത %s-ൻ്റെ പതിപ്പ് പിന്തുണയ്ക്കുന്നില്ല. സമീപകാല പതിപ്പുകൾ ഇൻ്റേണൽ സ്റ്റോറേജ് ഡയറക്‌ടറിയിലെ ചില ഫയലുകൾ എൻക്രിപ്റ്റ് ചെയ്യാൻ തുടങ്ങി, അത് ഇറക്കുമതിക്ക് ആവശ്യമായ വിവരങ്ങൾ ആക്‌സസ് ചെയ്യാൻ Aegis-ന് കഴിയുന്നില്ല. ഇറക്കുമതി ചെയ്യാൻ ശ്രമിക്കുന്നത് ഒരു പിശകിന് കാരണമാകും. എന്തായാലും തുടരാൻ നിങ്ങൾ ആഗ്രഹിക്കുന്നുണ്ടോ?</string>\n    <string name=\"root_error\">പിശക്: റൂട്ട് ആക്സസ് നേടാനായില്ല</string>\n    <plurals name=\"imported_entries_count\">\n        <item quantity=\"one\">%d എൻട്രി ഇറക്കുമതി ചെയ്തു</item>\n        <item quantity=\"other\">%d എൻട്രികൾ ഇറക്കുമതി ചെയ്തു</item>\n    </plurals>\n    <plurals name=\"entries_shown\">\n        <item quantity=\"one\">%d എൻട്രി കാണിക്കുന്നു</item>\n        <item quantity=\"other\">%d എൻട്രികൾ കാണിക്കുന്നു</item>\n    </plurals>\n    <string name=\"intro_import_error_title\">നിലവറ ഇറക്കുമതി ചെയ്യുമ്പോൾ ഒരു പിശക് സംഭവിച്ചു</string>\n    <string name=\"import_error_title\">ഇറക്കുമതി ചെയ്യുമ്പോൾ ഒന്നോ അതിലധികമോ പിശകുകൾ സംഭവിച്ചു</string>\n    <string name=\"exporting_vault_error\">നിലവറ കയറ്റുമതി ചെയ്യാൻ ശ്രമിക്കുന്നതിനിടെ ഒരു പിശക് സംഭവിച്ചു</string>\n    <string name=\"exported_vault\">നിലവറ കയറ്റുമതി ചെയ്തു</string>\n    <string name=\"encryption_set_password_error\">പാസ്‌വേഡ് സജ്ജീകരിക്കാൻ ശ്രമിക്കുന്നതിനിടെ ഒരു പിശക് സംഭവിച്ചു.</string>\n    <string name=\"encryption_enable_biometrics_error\">ബയോമെട്രിക് അൺലോക്ക് പ്രവർത്തനക്ഷമമാക്കാൻ ശ്രമിക്കുന്നതിനിടെ ഒരു പിശക് സംഭവിച്ചു. ചില ഉപകരണങ്ങൾക്ക് ബയോമെട്രിക് പ്രാമാണീകരണത്തിൻ്റെ മോശം നിർവ്വഹണങ്ങൾ ഉണ്ട്, നിങ്ങളുടേത് അവയിലൊന്നായിരിക്കാം. പകരം പാസ്‌വേഡ് മാത്രമുള്ള കോൺഫിഗറേഷനിലേക്ക് മാറുന്നത് പരിഗണിക്കുക.</string>\n    <string name=\"no_cameras_available\">ക്യാമറകളൊന്നും ലഭ്യമല്ല</string>\n    <string name=\"read_qr_error\">QR കോഡ് വായിക്കാൻ ശ്രമിക്കുന്നതിനിടെ ഒരു പിശക് സംഭവിച്ചു</string>\n    <string name=\"read_qr_error_phonefactor\">മൈക്രോസോഫ്റ്റിൻ്റെ ഉടമസ്ഥതയിലുള്ള 2FA അൽഗോരിതവുമായി ഏജിസ് പൊരുത്തപ്പെടുന്നില്ല. ഓഫീസ് 365-ൽ 2FA കോൺഫിഗർ ചെയ്യുമ്പോൾ \\\"അറിയിപ്പുകളില്ലാതെ ആപ്ലിക്കേഷൻ സജ്ജീകരിക്കുക\\\" എന്നത് തിരഞ്ഞെടുക്കുന്നത് ഉറപ്പാക്കുക.</string>\n    <string name=\"partial_google_auth_import\">അപൂർണ്ണമായ Google Authenticator കയറ്റുമതി കണ്ടെത്തി</string>\n    <string name=\"partial_google_auth_import_warning\">നിങ്ങളുടെ ഇമ്പോർട്ടിൽ ചില QR കോഡുകൾ കാണുന്നില്ല. ഇനിപ്പറയുന്ന കോഡുകൾ കണ്ടെത്തിയില്ല:\\n\\n<b>%s</b>\\n\\nനിങ്ങൾക്ക് ഈ ഭാഗിക കയറ്റുമതി ഇമ്പോർട്ടുചെയ്യുന്നത് തുടരാം, എന്നാൽ എല്ലാ QR കോഡുകളും ഉപയോഗിച്ച് വീണ്ടും ശ്രമിക്കാൻ ഞങ്ങൾ ശുപാർശ ചെയ്യുന്നു, അതിനാൽ നിങ്ങൾക്ക് ആക്‌സസ് നഷ്‌ടമാകില്ല ടോക്കണുകൾ.</string>\n    <string name=\"missing_qr_code_descriptor\">• QR കോഡ് %d</string>\n    <string name=\"import_google_auth_failure\">Google Authenticator കയറ്റുമതി ഇമ്പോർട്ടുചെയ്യുന്നത് പരാജയപ്പെട്ടു</string>\n    <string name=\"unrelated_google_auth_batches_error\">കയറ്റുമതിയിൽ ബന്ധമില്ലാത്ത ഒരു ബാച്ചിനുള്ള വിവരങ്ങൾ അടങ്ങിയിരിക്കുന്നു. ഒരു സമയം 1 ബാച്ച് ഇറക്കുമതി ചെയ്യാൻ ശ്രമിക്കുക.</string>\n    <string name=\"no_tokens_can_be_imported\">തൽഫലമായി ടോക്കണുകളൊന്നും ഇറക്കുമതി ചെയ്യാൻ കഴിയില്ല</string>\n    <string name=\"unlocking_vault\">നിലവറ അൺലോക്ക് ചെയ്യുന്നു</string>\n    <string name=\"remove_group\">ഗ്രൂപ്പ് നീക്കം ചെയ്യുക</string>\n    <string name=\"remove_group_description\">ഈ ഗ്രൂപ്പ് നീക്കം ചെയ്യണമെന്ന് തീർച്ചയാണോ? ഈ ഗ്രൂപ്പിലെ എൻട്രികൾ സ്വയമേവ \\'ഗ്രൂപ്പില്ല\\' എന്നതിലേക്ക് മാറും.</string>\n    <string name=\"remove_unused_groups\">ഉപയോഗിക്കാത്ത ഗ്രൂപ്പുകൾ ഇല്ലാതാക്കുക</string>\n    <string name=\"remove_unused_groups_description\">ഒരു എൻട്രിയിൽ അസൈൻ ചെയ്യാത്ത എല്ലാ ഗ്രൂപ്പുകളും ഇല്ലാതാക്കണമെന്ന് തീർച്ചയാണോ?</string>\n    <string name=\"remove_icon_pack\">ഐക്കൺ പായ്ക്ക് നീക്കം ചെയ്യുക</string>\n    <string name=\"remove_icon_pack_description\">ഈ ഐക്കൺ പായ്ക്ക് നീക്കം ചെയ്യണമെന്ന് തീർച്ചയാണോ? ഈ പാക്കിൽ നിന്നുള്ള ഐക്കണുകൾ ഉപയോഗിക്കുന്ന എൻട്രികളെ ബാധിക്കില്ല.</string>\n    <string name=\"details\">വിശദാംശങ്ങൾ</string>\n    <string name=\"show_error_details\">പിശക് വിശദാംശങ്ങൾ കാണിക്കുക</string>\n    <string name=\"lock\">പൂട്ടുക</string>\n    <string name=\"name\">പേര്</string>\n    <string name=\"no_group\">ഗ്രൂപ്പില്ല</string>\n    <string name=\"sort\" comment=\"Title of the Sort button in the top action bar of the main view\">അടുക്കുക</string>\n    <string name=\"sort_alphabetically\">പ്രസാധകർ (A മുതൽ Z വരെ)</string>\n    <string name=\"sort_alphabetically_reverse\">പ്രസാധകർ (Z മുതൽ A വരെ)</string>\n    <string name=\"sort_alphabetically_name\">അക്കൗണ്ട് (A മുതൽ Z വരെ)</string>\n    <string name=\"sort_alphabetically_name_reverse\">അക്കൗണ്ട് (Z മുതൽ A വരെ)</string>\n    <string name=\"sort_usage_count\">ഉപയോഗ എണ്ണം</string>\n    <string name=\"sort_last_used\">അവസാനം ഉപയോഗിച്ചത്</string>\n    <string name=\"sort_custom\">നിർദ്ദേശാനുസരണം</string>\n    <string name=\"last_used\">അവസാനം ഉപയോഗിച്ചത്</string>\n    <string name=\"last_used_never\">ഒരിക്കലും</string>\n    <string name=\"new_group\">പുതിയ ഗ്രൂപ്പ്…</string>\n    <string name=\"group\">ഗ്രൂപ്പ്</string>\n    <string name=\"group_name_hint\">ഗ്രൂപ്പിന്റെ പേര്</string>\n    <string name=\"preference_manage_groups\">ഗ്രൂപ്പ് എഡിറ്റ് ചെയ്യുക</string>\n    <string name=\"preference_manage_groups_summary\">ഇവിടെ നിങ്ങളുടെ ഗ്രൂപ്പുകൾ മാനേജ് ചെയ്യുക, ഇല്ലാതാക്കുക</string>\n    <string name=\"preference_reset_usage_count\">ഉപയോഗ എണ്ണം പുനഃസജ്ജമാക്കുക</string>\n    <string name=\"preference_reset_usage_count_summary\">നിങ്ങളുടെ നിലവറയിലെ ഓരോ എൻട്രിയുടെയും ഉപയോഗ എണ്ണം പുനഃസജ്ജമാക്കുക</string>\n    <string name=\"preference_reset_usage_count_dialog\">നിങ്ങളുടെ നിലവറയിലെ എല്ലാ എൻട്രികളുടെയും ഉപയോഗ എണ്ണം 0 ആയി സജ്ജീകരിക്കണമെന്ന് തീർച്ചയാണോ?</string>\n    <string name=\"note\" comment=\"Users can add a note to an entry\">കുറിപ്പ്</string>\n    <string name=\"clear\">മായ്ക്കുക</string>\n    <string name=\"pref_highlight_entry_title\">ടാപ്പുചെയ്യുമ്പോൾ ടോക്കണുകൾ ഹൈലൈറ്റ് ചെയ്യുക</string>\n    <string name=\"pref_highlight_entry_summary\">ടാപ്പുചെയ്യുമ്പോൾ താൽക്കാലികമായി ഹൈലൈറ്റ് ചെയ്തുകൊണ്ട് പരസ്പരം വേർതിരിച്ചറിയാൻ ടോക്കണുകൾ എളുപ്പമാക്കുക</string>\n    <string name=\"pref_minimize_on_copy_title\">പകർപ്പിൽ ചെറുതാക്കുക</string>\n    <string name=\"pref_minimize_on_copy_summary\">ഒരു ടോക്കൺ പകർത്തിയ ശേഷം ആപ്പ് ചെറുതാക്കുക</string>\n    <string name=\"pref_copy_behavior_title\">ക്ലിപ്പ്ബോർഡിലേക്ക് ടോക്കണുകൾ പകർത്തുക</string>\n    <string name=\"pref_pause_entry_title\">ടാപ്പുചെയ്യുമ്പോൾ ടോക്കണുകൾ ഫ്രീസ് ചെയ്യുക</string>\n    <string name=\"pref_pause_entry_summary\">ടോക്കണുകൾ ടാപ്പുചെയ്യുന്നതിലൂടെ അവയുടെ യാന്ത്രിക പുതുക്കൽ താൽക്കാലികമായി നിർത്തുക. ടോക്കണുകൾ ഫോക്കസ് ചെയ്തിരിക്കുന്നിടത്തോളം കാലം അവ അപ്‌ഡേറ്റ് ചെയ്യില്ല. \\\"ടാപ്പുചെയ്യുമ്പോൾ ടോക്കണുകൾ ഹൈലൈറ്റ് ചെയ്യുക\\\" അല്ലെങ്കിൽ \\\"വെളിപ്പെടുത്താൻ ടാപ്പ് ചെയ്യുക\\\" ആവശ്യമാണ്.</string>\n    <string name=\"pin_keyboard_description\">പിൻ കീബോർഡ് പ്രവർത്തനക്ഷമമാക്കാൻ നിങ്ങളുടെ പാസ്‌വേഡ് നൽകുക. നിങ്ങളുടെ പാസ്‌വേഡിൽ അക്കങ്ങൾ മാത്രം അടങ്ങിയിട്ടുണ്ടെങ്കിൽ മാത്രമേ ഇത് പ്രവർത്തിക്കൂ എന്നത് ശ്രദ്ധിക്കുക</string>\n    <string name=\"pin_keyboard_error\">പിൻ കീബോർഡ് പ്രവർത്തനക്ഷമമാക്കുന്നതിൽ പിശക്</string>\n    <string name=\"pin_keyboard_error_description\">പിൻ കീബോർഡ് സജ്ജീകരിക്കാൻ സാധ്യമല്ല. നിങ്ങളുടെ പാസ്‌വേഡിൽ അക്കങ്ങൾ മാത്രമേ ഉണ്ടാകാവൂ.</string>\n    <string name=\"pin_keyboard_disabled\">പാസ്‌വേഡ് മാറ്റി. പിൻ കീബോർഡ് ഇനി കാണിക്കില്ല.</string>\n    <string name=\"selected\">തിരഞ്ഞെടുത്തു</string>\n    <string name=\"dark_theme_title\">ഇരുണ്ട തീം</string>\n    <string name=\"light_theme_title\">ലൈറ്റ് തീം</string>\n    <string name=\"amoled_theme_title\">AMOLED തീം</string>\n    <string name=\"system_theme_title\">ബാറ്ററി സേവർ സജ്ജമാക്കിയത്</string>\n    <string name=\"system_amoled_theme_title\">ബാറ്ററി സേവർ സജ്ജമാക്കിയത് (AMOLED)</string>\n    <string name=\"normal_viewmode_title\">സാധാരണ</string>\n    <string name=\"compact_mode_title\">ഒതുക്കമുള്ളത്</string>\n    <string name=\"small_mode_title\">ചെറുത്</string>\n    <string name=\"tiles_mode_title\">ടൈലുകൾ</string>\n    <string name=\"unknown_issuer\">അജ്ഞാത പ്രസാധകൻ</string>\n    <string name=\"unknown_account_name\">അജ്ഞാത അക്കൗണ്ട് പേര്</string>\n    <plurals name=\"import_error_dialog\">\n        <item quantity=\"one\">ഏജിസിന് %d ടോക്കൺ ഇറക്കുമതി ചെയ്യാൻ കഴിഞ്ഞില്ല. ഈ ടോക്കൺ ഒഴിവാക്കപ്പെടും. പിശകിനെക്കുറിച്ചുള്ള കൂടുതൽ വിവരങ്ങൾ കാണുന്നതിന് \\'വിശദാംശങ്ങൾ\\' അമർത്തുക.</item>\n        <item quantity=\"other\">ഏജിസിന് %d ടോക്കണുകൾ ഇറക്കുമതി ചെയ്യാൻ കഴിഞ്ഞില്ല. ഈ ടോക്കണുകൾ ഒഴിവാക്കപ്പെടും. പിശകുകളെക്കുറിച്ചുള്ള കൂടുതൽ വിവരങ്ങൾ കാണുന്നതിന് \\'വിശദാംശങ്ങൾ\\' അമർത്തുക.</item>\n    </plurals>\n    <string name=\"unable_to_process_deeplink\">ആഴത്തിലുള്ള ലിങ്ക് പ്രോസസ്സ് ചെയ്യാനായില്ല</string>\n    <string name=\"unable_to_read_qrcode_file\">ഫയലിൽ നിന്ന് ക്യുആർ കോഡ് വായിക്കാനും പ്രോസസ്സ് ചെയ്യാനും കഴിയുന്നില്ല: %s.</string>\n    <string name=\"unable_to_process_shared_text\">പങ്കിട്ട ടെക്‌സ്‌റ്റ് OTP ആയി പ്രോസസ്സ് ചെയ്യാൻ കഴിയുന്നില്ല</string>\n    <string name=\"unable_to_generate_qrcode\">QR കോഡ് സൃഷ്‌ടിക്കാനായില്ല</string>\n    <string name=\"select_picture\">ചിത്രം തിരഞ്ഞെടുക്കുക</string>\n    <string name=\"select_icon\">ഐക്കൺ തിരഞ്ഞെടുക്കുക</string>\n    <string name=\"tile_open_vault\" comment=\"label for a quick settings tile that opens the app when tapped\">നിലവറ തുറക്കുക</string>\n    <string name=\"tile_open_scanner\" comment=\"label for a quick settings tile that opens the QR code scanner when tapped\">സ്കാനർ തുറക്കുക</string>\n    <string name=\"toggle_checkboxes\">ചെക്ക്ബോക്സുകൾ ടോഗിൾ ചെയ്യുക</string>\n    <string name=\"search\">തിരയുക</string>\n    <string name=\"channel_name_lock_status\">ലോക്ക് നില</string>\n    <string name=\"channel_description_lock_status\">നിലവറ പൂട്ടിയിരിക്കുമ്പോൾ നിങ്ങളെ അറിയിക്കാൻ ഏജിസിന് സ്ഥിരമായ ഒരു അറിയിപ്പ് സൃഷ്ടിക്കാൻ കഴിയും</string>\n    <string name=\"vault_unlocked_state\">നിലവറ അൺലോക്ക് ചെയ്തു. ലോക്ക് ചെയ്യാൻ ഇവിടെ ടാപ്പ് ചെയ്യുക.</string>\n    <string name=\"version\">പതിപ്പ്</string>\n    <string name=\"changelog\">ചേഞ്ച്ലോഗ്</string>\n    <string name=\"whats_new\">പുതിയതെന്താണ്</string>\n    <string name=\"github_description\">കോഡ്, പ്രശ്നങ്ങൾ, വിവരങ്ങൾ</string>\n    <string name=\"license\">ലൈസൻസ്</string>\n    <string name=\"license_description\">GPLv3 പ്രകാരം Aegis Authenticator ലൈസൻസ് ചെയ്തിട്ടുണ്ട്</string>\n    <string name=\"third_party_licenses\">മൂന്നാം കക്ഷി ലൈസൻസുകൾ</string>\n    <string name=\"third_party_licenses_description\">ഏജിസ് ഉപയോഗിക്കുന്ന മൂന്നാം കക്ഷി ലൈബ്രറികളുടെ ലൈസൻസുകൾ</string>\n    <string name=\"country_netherlands\">നെതർലാൻഡ്സ്</string>\n    <string name=\"email_us\">ഒരു ഇ - മെയിൽ എഴുതുക</string>\n    <string name=\"visit_website\">ഞങ്ങളുടെ വെബ്സൈറ്റ് സന്ദർശിക്കുക</string>\n    <string name=\"about_support\">പിന്തുണ</string>\n    <string name=\"support_rate\">നിരക്ക്</string>\n    <string name=\"support_rate_description\">Google Play Store-ൽ ഒരു അവലോകനം നൽകി ഞങ്ങളെ പിന്തുണയ്ക്കുക</string>\n    <string name=\"webview_error\">ഈ ഉപകരണം വെബ് കാഴ്‌ചയെ പിന്തുണയ്‌ക്കുന്നില്ല, ഇത് ചേഞ്ച്‌ലോഗും ലൈസൻസും കാണുന്നതിന് ആവശ്യമാണ്. ഇതിന് ഒരു സിസ്റ്റം ഘടകം നഷ്‌ടമായിരിക്കുന്നു.</string>\n    <string name=\"email\">ഇമെയിൽ</string>\n    <string name=\"time_sync_warning_title\">യാന്ത്രിക സമന്വയം</string>\n    <string name=\"time_sync_warning_message\">ശരിയായ കോഡുകൾ സൃഷ്‌ടിക്കുന്നതിന് ഏജിസ് സിസ്റ്റം സമയത്തെ ആശ്രയിക്കുന്നു. കുറച്ച് സെക്കൻ്റുകൾ മാത്രം വ്യതിചലിക്കുന്നത് തെറ്റായ കോഡുകൾക്ക് കാരണമായേക്കാം. സമയം സ്വയമേവ സമന്വയിപ്പിക്കുന്നതിന് നിങ്ങളുടെ ഉപകരണം കോൺഫിഗർ ചെയ്തിട്ടില്ലെന്ന് തോന്നുന്നു. ഇപ്പോൾ അങ്ങനെ ചെയ്യാൻ നിങ്ങൾ ആഗ്രഹിക്കുന്നുണ്ടോ?</string>\n    <string name=\"time_sync_warning_disable\">എനിക്ക് മുന്നറിയിപ്പ് നൽകുന്നത് നിർത്തുക. ഞാൻ എന്താണ് ചെയ്യുന്നതെന്ന് എനിക്കറിയാം.</string>\n    <string name=\"google_qr_export_unrelated\">ബന്ധമില്ലാത്ത QR കോഡ് കണ്ടെത്തി. സ്കാനർ പുനരാരംഭിക്കാൻ ശ്രമിക്കുക.</string>\n    <string name=\"backup_error_bar_message\"><b>വോൾട്ട് ബാക്കപ്പ് അടുത്തിടെ പരാജയപ്പെട്ടു</b></string>\n    <string name=\"backup_system_builtin\">ഏജീസ നിർമ്മിച്ചിരിക്കുന്നത് ഓട്ടോമാറ്റിക് ബാക്കപ്പുകൾ</string>\n    <string name=\"backup_system_android\">ആൻഡ്രോയിഡ് ക്ലൗഡ് ബാക്കപ്പ് സിസ്റ്റം</string>\n    <string name=\"backup_reminder_bar_message_with_latest\" comment=\"The parameter is an elapsed time in the style of 'x seconds/minutes/days ago'\">         ഏറ്റവും പുതിയ ബാക്കപ്പ് കാലഹരണപ്പെട്ടതാണ് (%s)\n    </string>\n    <string name=\"backup_reminder_bar_message\">         മാറ്റങ്ങൾ ബാക്കപ്പ് ചെയ്തിട്ടില്ല\n    </string>\n    <string name=\"backup_reminder_bar_dialog_title\">മാറ്റങ്ങൾ ബാക്കപ്പ് ചെയ്തിട്ടില്ല</string>\n    <string name=\"backup_reminder_bar_dialog_summary\">നിലവറയിലെ സമീപകാല മാറ്റങ്ങൾ ഇതുവരെ ബാക്കപ്പ് ചെയ്തിട്ടില്ല. നിങ്ങളുടെ അക്കൗണ്ടുകളിലേക്കുള്ള ആക്‌സസ് നഷ്‌ടപ്പെടുന്നത് തടയാൻ പതിവായി ബാക്കപ്പുകൾ എടുക്കേണ്ടത് പ്രധാനമാണ്. ക്രമീകരണ മെനുവിൽ സ്വയമേവയുള്ള ബാക്കപ്പുകൾ സജ്ജീകരിക്കുന്നത് പരിഗണിക്കുക.    </string>\n    <string name=\"backup_reminder_bar_dialog_accept\">ബാക്കപ്പുകൾ സജ്ജീകരിക്കുക</string>\n    <string name=\"backup_plaintext_export_warning\"><b>നിലവറ അടുത്തിടെ പ്ലെയിൻ ടെക്‌സ്‌റ്റിൽ കയറ്റുമതി ചെയ്‌തു</b></string>\n    <string name=\"pref_show_plaintext_warning_hint\">ഈ മുന്നറിയിപ്പ് വീണ്ടും കാണിക്കരുത്</string>\n    <string name=\"backup_plaintext_warning_explanation\">നിങ്ങൾ അടുത്തിടെ നിലവറയുടെ എൻക്രിപ്റ്റ് ചെയ്യാത്ത ഒരു പകർപ്പ് കയറ്റുമതി ചെയ്തതിനാലാണ് ഈ മുന്നറിയിപ്പ് കാണിക്കുന്നത്. നിങ്ങളുടെ ടോക്കണുകളുടെ സുരക്ഷ നിലനിർത്താൻ, ഈ ഫയൽ ആവശ്യമില്ലെങ്കിൽ അത് ഇല്ലാതാക്കാൻ ഞങ്ങൾ ശുപാർശ ചെയ്യുന്നു.</string>\n    <string name=\"switch_camera\">ക്യാമറ മാറുക</string>\n    <string name=\"empty_list\">കാണിക്കാൻ കോഡുകളൊന്നുമില്ല. ചുവടെ വലത് കോണിലുള്ള പ്ലസ് ചിഹ്നത്തിൽ ടാപ്പുചെയ്‌ത് എൻട്രികൾ ചേർക്കുന്നത് ആരംഭിക്കുക</string>\n    <string name=\"empty_list_title\">എൻട്രികളൊന്നും കണ്ടെത്തിയില്ല</string>\n    <string name=\"empty_group_list\">കാണിക്കാൻ ഗ്രൂപ്പുകളൊന്നുമില്ല. ഒരു എൻട്രിയുടെ എഡിറ്റ് സ്ക്രീനിൽ ഗ്രൂപ്പുകൾ ചേർക്കുക</string>\n    <string name=\"empty_group_list_title\">ഗ്രൂപ്പുകളൊന്നും കണ്ടെത്തിയില്ല</string>\n    <string name=\"no_icon_packs\">ഐക്കൺ പാക്കുകളൊന്നും ഇതുവരെ ഇറക്കുമതി ചെയ്തിട്ടില്ല. ഒരെണ്ണം ഇറക്കുമതി ചെയ്യാൻ പ്ലസ് ചിഹ്നത്തിൽ ടാപ്പ് ചെയ്യുക. നുറുങ്ങ്: <a href=\"https://aegis-icons.github.io\">aegis-icons</a> പരീക്ഷിക്കുക.</string>\n    <string name=\"no_icon_packs_title\">ഐക്കൺ പായ്ക്കുകളൊന്നുമില്ല</string>\n    <string name=\"pick_icon\">ഒരു ഐക്കൺ തിരഞ്ഞെടുക്കുക</string>\n    <string name=\"uncategorized\">വർഗ്ഗീകരിക്കാത്തത്</string>\n    <string name=\"done\">ചെയ്‌തു</string>\n    <plurals name=\"qr_count\">\n        <item quantity=\"one\">%d / %d QR കോഡ്</item>\n        <item quantity=\"other\">%d / %d QR കോഡുകൾ</item>\n    </plurals>\n    <string name=\"next\">അടുത്തത്</string>\n    <string name=\"previous\">മുമ്പത്തെ</string>\n    <string name=\"copy_uri\">URI പകർത്തുക</string>\n    <string name=\"unable_to_copy_uri_to_clipboard\">URI ക്ലിപ്പ്ബോർഡിലേക്ക് പകർത്താനായില്ല</string>\n    <string name=\"uri_copied_to_clipboard\">URI ക്ലിപ്പ്ബോർഡിലേക്ക് പകർത്തി</string>\n    <string name=\"transfer_entry_description\">നിങ്ങൾ ഈ എൻട്രി കൈമാറാൻ ആഗ്രഹിക്കുന്ന ഓതൻ്റിക്കേറ്റർ ആപ്പ് ഉപയോഗിച്ച് ഈ QR കോഡ് സ്കാൻ ചെയ്യുക</string>\n    <string name=\"password_strength_very_weak\">വളരെ ദുർബലമായ</string>\n    <string name=\"password_strength_weak\">ദുർബലമായ</string>\n    <string name=\"password_strength_fair\">മേള</string>\n    <string name=\"password_strength_good\">നല്ലത്</string>\n    <string name=\"password_strength_strong\">ശക്തമായത്</string>\n    <string name=\"password_strength_unknown\">ശക്തി വിശകലനത്തിന് പാസ്‌വേഡ് ദൈർഘ്യമേറിയതാണ്</string>\n    <string name=\"pref_pin_keyboard_title\">ലോക്ക് സ്ക്രീനിൽ പിൻ കീബോർഡ് ഉപയോഗിക്കുക</string>\n    <string name=\"pref_pin_keyboard_summary\">ലോക്ക് സ്‌ക്രീനിൽ പിൻ കീബോർഡ് പ്രവർത്തനക്ഷമമാക്കണമെങ്കിൽ ഇത് പ്രവർത്തനക്ഷമമാക്കുക. ഇത് സംഖ്യാ പാസ്വേഡുകൾക്ക് മാത്രമേ പ്രവർത്തിക്കൂ</string>\n    <string name=\"title_activity_preferences\">ക്രമീകരണങ്ങള്‍</string>\n    <string name=\"title_activity_manage_groups\">ഗ്രൂപ്പുകൾ നിയന്ത്രിക്കുക</string>\n    <string name=\"title_activity_transfer\">ഗ്രൂപ്പുകൾ നിയന്ത്രിക്കുക</string>\n    <string name=\"title_activity_about\">കുറിച്ച്‌</string>\n    <string name=\"title_activity_edit_entry\">എൻട്രി എഡിറ്റ് ചെയ്യുക</string>\n    <string name=\"title_activity_scan_qr\">ഒരു QR കോഡ് സ്കാൻ ചെയ്യുക</string>\n    <string name=\"title_activity_import_entries\">എൻട്രികൾ ഇറക്കുമതി ചെയ്യുക</string>\n    <string name=\"title_activity_assign_icons\">ഐക്കണുകൾ അസൈൻ ചെയ്യുക</string>\n    <string name=\"title_activity_licenses\">മൂന്നാം കക്ഷി ലൈസൻസുകൾ</string>\n    <string name=\"dialog_wipe_entries_title\">എൻട്രികൾ മായ്‌ക്കുക</string>\n    <string name=\"dialog_wipe_entries_message\">നിങ്ങളുടെ നിലവറയിൽ ഇതിനകം എൻട്രികൾ അടങ്ങിയിരിക്കുന്നു. ഈ ഫയൽ ഇറക്കുമതി ചെയ്യുന്നതിന് മുമ്പ് നിങ്ങൾക്ക് ഈ എൻട്രികൾ നീക്കം ചെയ്യണോ?\\n\\n<b>അങ്ങനെ ചെയ്യുമ്പോൾ, നിലവറയിലെ നിലവിലുള്ള എൻട്രികളിലേക്കുള്ള ആക്സസ് നിങ്ങൾക്ക് ശാശ്വതമായി നഷ്‌ടമാകും.</b></string>\n    <string name=\"dialog_wipe_entries_checkbox\">നിലവറയിലെ ഉള്ളടക്കങ്ങൾ മായ്‌ക്കുക</string>\n    <string name=\"panic_trigger_ignore_toast\">എജിസിന് പാനിക് ട്രിഗർ ലഭിച്ചു, പക്ഷേ അവഗണിച്ച് ക്രമീകരണം പ്രവർത്തനരഹിതമാക്കി</string>\n    <string name=\"pref_panic_trigger_title\">പാനിക് ട്രിഗറിൽ നിലവറ ഇല്ലാതാക്കുക</string>\n    <string name=\"pref_panic_trigger_summary\">റിപ്പിളിൽ നിന്ന് ഒരു പാനിക് ട്രിഗർ ലഭിക്കുമ്പോൾ നിലവറ ഇല്ലാതാക്കുക</string>\n    <string name=\"import_vault\">ഏജിസ് നിലവറ ഇറക്കുമതി ചെയ്യുക</string>\n    <string name=\"import_vault_hint\">മറ്റൊരു 2FA ആപ്പിൽ നിന്ന് ഇറക്കുമതി ചെയ്യണോ? ആദ്യം സജ്ജീകരണം പൂർത്തിയാക്കുക, തുടർന്ന് ക്രമീകരണ മെനുവിലേക്ക് പോകുക.</string>\n    <plurals name=\"import_duplicate_toast\">\n        <item quantity=\"one\">%d സാധ്യതയുള്ള ഡ്യൂപ്ലിക്കേറ്റ് അൺചെക്ക് ചെയ്‌തു. എൻട്രികളുടെ ലിസ്റ്റ് അവലോകനം ചെയ്യുക.</item>\n        <item quantity=\"other\">%d സാധ്യതയുള്ള ഡ്യൂപ്ലിക്കേറ്റുകൾ അൺചെക്ക് ചെയ്തു. എൻട്രികളുടെ ലിസ്റ്റ് അവലോകനം ചെയ്യുക.</item>\n    </plurals>\n    <string name=\"importer_help_2fas\">ഒരു 2FAS ഓതൻ്റിക്കേറ്റർ ബാക്കപ്പ് ഫയൽ നൽകുക.</string>\n    <string name=\"importer_help_aegis\">ഒരു എജിസ് കയറ്റുമതി/ബാക്കപ്പ് ഫയൽ നൽകുക.</string>\n    <string name=\"importer_help_andotp\">ഒരു andOTP കയറ്റുമതി/ബാക്കപ്പ് ഫയൽ നൽകുക.</string>\n    <string name=\"importer_help_bitwarden\">ഒരു ബിറ്റ്വാർഡൻ കയറ്റുമതി/ബാക്കപ്പ് ഫയൽ നൽകുക. എൻക്രിപ്റ്റ് ചെയ്ത ഫയലുകൾ പിന്തുണയ്ക്കുന്നില്ല.</string>\n    <string name=\"importer_help_freeotp_plus\">ഒരു FreeOTP+ കയറ്റുമതി ഫയൽ നൽകുക.</string>\n    <string name=\"importer_help_totp_authenticator\">ഒരു TOTP ഓതൻ്റിക്കേറ്റർ കയറ്റുമതി ഫയൽ നൽകുക.</string>\n    <string name=\"importer_help_winauth\">ഒരു WinAuth കയറ്റുമതി ഫയൽ നൽകുക.</string>\n    <string name=\"import_assign_icons_dialog_title\">ഐക്കണുകൾ അസൈൻ ചെയ്യുക</string>\n    <string name=\"import_assign_icons_dialog_text\">ഇറക്കുമതി ചെയ്ത എൻട്രികൾക്ക് ഐക്കണുകൾ നൽകണോ?</string>\n    <string name=\"importer_encrypted_exception_google_authenticator\">എൻക്രിപ്റ്റ് ചെയ്ത എൻട്രി ഒഴിവാക്കി: %s</string>\n    <string name=\"importer_help_direct\">%s-ൽ നിന്ന് നേരിട്ട് എൻട്രികൾ ഇറക്കുമതി ചെയ്യുക. ഇതിന് ഈ ഉപകരണത്തിൽ ആപ്പ് ഇൻസ്റ്റാൾ ചെയ്യുകയും റൂട്ട് ആക്‌സസ്സ് Aegis-ന് നൽകുകയും വേണം.</string>\n    <string name=\"groups\">ഗ്രൂപ്പുകൾ</string>\n    <string name=\"pref_focus_search\">ആപ്പ് ആരംഭത്തിൽ സെർച്ച് ഫോക്കസ് ചെയ്യുക</string>\n    <string name=\"pref_focus_search_summary\">ആപ്പ് തുറന്ന ഉടനെ സെർച്ചിൽ ഫോക്കസ് ചെയ്യുക.</string>\n    <string name=\"pref_grouping_halves\">പകുതി</string>\n    <string name=\"pref_grouping_none\">ഗ്രൂപ്പിംഗ് ഇല്ല</string>\n    <string name=\"pref_grouping_size_two\">രണ്ടു പേരുടെ ഗ്രൂപ്പുകൾ</string>\n    <string name=\"pref_grouping_size_three\">മൂന്ന് പേരടങ്ങുന്ന ഗ്രൂപ്പുകൾ</string>\n    <string name=\"pref_grouping_size_four\">നാലംഗ സംഘങ്ങൾ</string>\n    <string name=\"pref_copy_behavior_never\">ഒരിക്കലും പകർത്തരുത്</string>\n    <string name=\"pref_copy_behavior_single_tap\">ഒറ്റ ടാപ്പ്</string>\n    <string name=\"pref_copy_behavior_double_tap\">രണ്ടുതവണ ടാപ്പ് ചെയ്യുക</string>\n    <string name=\"pref_account_name_position_hidden\">മറച്ചിരിക്കുന്നു</string>\n    <string name=\"pref_account_name_position_end\">പ്രസാധകൻ്റെ അടുത്ത്</string>\n    <string name=\"pref_account_name_position_below\">പ്രസാധകൻ്റെ താഴെ</string>\n    <plurals name=\"time_elapsed_seconds\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"one\">%d സെക്കൻഡ് മുമ്പ്</item>\n        <item quantity=\"other\">%d സെക്കൻ്റുകൾ മുമ്പ്</item>\n    </plurals>\n    <plurals name=\"time_elapsed_minutes\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"one\">%d മിനിറ്റ് മുമ്പ്</item>\n        <item quantity=\"other\">%d മിനിറ്റ് മുമ്പ്</item>\n    </plurals>\n    <plurals name=\"time_elapsed_hours\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"one\">%d മണിക്കൂർ മുമ്പ്</item>\n        <item quantity=\"other\">%d മണിക്കൂറുകള്ക്ക് മുന്പ്</item>\n    </plurals>\n    <plurals name=\"time_elapsed_days\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"one\">%d ദിവസം മുമ്പ്</item>\n        <item quantity=\"other\">%d ദിവസങ്ങൾക്ക് മുൻപ്</item>\n    </plurals>\n    <plurals name=\"time_elapsed_years\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"one\">%d വർഷം മുമ്പ്</item>\n        <item quantity=\"other\">%d വർഷങ്ങൾക്ക് മുമ്പ്</item>\n    </plurals>\n    <plurals name=\"dropdown_checkboxes_default_count\">\n        <item quantity=\"one\">%d തിരഞ്ഞെടുത്ത ഇനം</item>\n        <item quantity=\"other\">%d തിരഞ്ഞെടുത്ത ഇനങ്ങൾ</item>\n    </plurals>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-ml-rIN-v29/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources></resources>\n"
  },
  {
    "path": "app/src/main/res/values-nb-rNO/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources xmlns:tools=\"http://schemas.android.com/tools\">\n    <string name=\"action_settings\">Innstillinger</string>\n    <string name=\"action_about\">Om</string>\n    <string name=\"action_delete\">Slett</string>\n    <string name=\"action_transfer\">Overfør</string>\n    <string name=\"action_edit_icon\">Endre ikon</string>\n    <string name=\"action_reset_usage_count\">Tilbakestill bruksfrekvens</string>\n    <string name=\"action_reset_usage_count_dialog\">Er du sikker på at du vil nullstille bruksfrekvensen til denne oppføringen?</string>\n    <string name=\"action_default_icon\">Gjenopprett standardikon</string>\n    <string name=\"discard\">Forkast</string>\n    <string name=\"save\">Lagre</string>\n    <string name=\"all\">Alle</string>\n    <string name=\"issuer\">Utsteder</string>\n    <string name=\"yandex_pin\">PIN (4-16 sifre)</string>\n    <string name=\"motp_pin\">PIN (4 sifre)</string>\n    <string name=\"suggested\">Foreslått</string>\n    <string name=\"usage_count\">Bruksfrekvens</string>\n    <string name=\"warning\">Advarsel</string>\n    <string name=\"pref_cat_appearance_app\">App</string>\n    <string name=\"pref_cat_appearance_entries\">Oppføringer</string>\n    <string name=\"pref_cat_backups_android\">Android</string>\n    <string name=\"pref_cat_backups_auto\">Automatisk sikkerhetskopiering</string>\n    <string name=\"pref_section_behavior_title\">Oppførsel</string>\n    <string name=\"pref_section_behavior_summary\">Tilpass oppførselen når du samhandler med oppføringslisten.</string>\n    <string name=\"pref_section_appearance_title\">Utseende</string>\n    <string name=\"pref_section_appearance_summary\">Tilpass tema, språk og andre innstillinger som påvirker utseende til appen.</string>\n    <string name=\"pref_section_security_title\">Sikkerhet</string>\n    <string name=\"pref_section_security_summary\">Konfigurer kryptering, biometrisk opplåsing, automatisk låsing og andre sikkerhetsinnstillinger.</string>\n    <string name=\"pref_section_import_export_title\">Import &amp; Eksport</string>\n    <string name=\"pref_section_import_export_summary\">Importer sikkerhetskopier av Aegis eller andre autentiseringsapper. Opprett en manuell eksport av Aegis-hvelvet ditt.</string>\n    <string name=\"pref_section_audit_log_title\">Revisjonslogg</string>\n    <string name=\"pref_section_audit_log_summary\">Finn en liste over alle rapporterte viktige hendelser i appen.</string>\n    <string name=\"pref_section_backups_title\">Sikkerhetskopier</string>\n    <string name=\"pref_section_backups_summary\">Sett opp automatiske sikkerhetskopier til en egenvalgt plassering, eller aktiver lagring via Android-sikkerhetskopiering i skyen.</string>\n    <string name=\"pref_section_icon_packs\">Ikonpakker</string>\n    <string name=\"pref_section_icon_packs_summary\">Behandle og importer ikonpakker</string>\n    <string name=\"pref_select_theme_title\">Tema</string>\n    <string name=\"pref_dynamic_colors_title\">Dynamiske farger</string>\n    <string name=\"pref_dynamic_colors_summary\">Tilpass appens farger basert på Android-temaet</string>\n    <string name=\"pref_view_mode_title\">Visningsmodus</string>\n    <string name=\"pref_lang_title\">Språk</string>\n    <string name=\"pref_show_icons_title\">Vis ikoner</string>\n    <string name=\"pref_show_icons_summary\">Vis ikoner ved sidden av hver oppføring</string>\n    <string name=\"pref_code_group_size_title\">Gruppering av kodesifre</string>\n    <string name=\"pref_code_group_size_summary\">Velg antall sifre å gruppere kodene etter</string>\n    <string name=\"pref_account_name_position_title\">Vis brukernavnet</string>\n    <string name=\"pref_show_next_code_title\">Vis neste kode</string>\n    <string name=\"pref_show_next_code_summary\">Generer og vis neste kode på forhånd</string>\n    <string name=\"pref_expiration_state_title\">Indiker når koder er i ferd med å utløpe</string>\n    <string name=\"pref_expiration_state_summary\">Endre farge på koder og få dem til å blinke når de er i ferd med å utløpe</string>\n    <string name=\"pref_expiration_state_fallback\">Endre farge på koder når de er i ferd med å utløpe</string>\n    <string name=\"pref_shared_issuer_account_name_title\">Bare vis brukernavn ved behov</string>\n    <string name=\"pref_shared_issuer_account_name_summary\">Vis kun brukernavn hvis oppføringene har felles utsteder. Andre brukernavn vil være skjult.</string>\n    <string name=\"pref_account_name_position_summary_override\">Denne innstillingen blir overstyrt av visningsmodusen «Fliser». Kontonavn vil vises under utstederen.</string>\n    <string name=\"pref_import_file_title\">Importer fra fil</string>\n    <string name=\"pref_import_file_summary\">Importer nøkler fra en fil</string>\n    <string name=\"pref_android_backups_title\">Android-sikkerhetskopiering i skyen</string>\n    <string name=\"pref_android_backups_summary\">Tillat at Android-sikkerhetskopiering i skyen inkluderer Aegis-hvelvet i sine sikkerhetskopier. Dette støttes kun for krypterte hvelv.</string>\n    <string name=\"pref_android_backups_hint\"><i>Enhet-til-enhet (D2D) sikkerhetskopiering er alltid tillat, uavhengig av innstillingene over</i></string>\n    <string name=\"pref_backups_title\">Sikkerhetskopier hvelvet automatisk</string>\n    <string name=\"pref_backups_summary\">Opprett sikkerhetskopier av hvelvet automatisk på ekstern lagringsenhet når noe endres. Gjelder bare for krypterte hvelv.</string>\n    <string name=\"pref_backups_reminder_title\">Påminnelse om sikkerhetskopiering</string>\n    <string name=\"pref_backups_reminder_summary\">Vis en påminnelse om å ta en sikkerhetskopi av hvelvet hvis du ikke har sikkerhetskopiert de nyeste endringene.</string>\n    <string name=\"pref_backups_reminder_dialog_title\">Skru av varsler om sikkerhetskopiering</string>\n    <string name=\"pref_backups_reminder_dialog_summary\">Ved å skru av disse varslene vil du ikke få beskjed hvis du har endringer som ikke er sikkerhetskopiert. Da risikerer du å miste tilgang til nøkler. Er du sikker på at du ønsker å skru av dette?</string>\n    <string name=\"pref_backups_versioning_strategy_title\">Sikkerhetskopistrategi</string>\n    <string name=\"pref_backups_versioning_strategy_keep_x_versions\">Behold et antall versjoner</string>\n    <string name=\"pref_backups_versioning_strategy_single_backup\">Enkel sikkerhetskopi</string>\n    <string name=\"pref_backups_location_summary\">Sikkerhetskopier vil lagres ved</string>\n    <string name=\"pref_backups_trigger_title\">Sikkerhetskopier nå</string>\n    <string name=\"pref_backups_trigger_summary\">Start sikkerhetskopiering manuelt</string>\n    <string name=\"pref_backups_versions_title\">Antall versjoner å beholde</string>\n    <string name=\"pref_backups_versions_infinite\">\\u221E</string>\n    <plurals name=\"pref_backups_versions_summary\">\n        <item quantity=\"one\">Behold %1$d versjon av sikkerhetskopien</item>\n        <item quantity=\"other\">Behold %1$d versjoner av sikkerhetskopien</item>\n    </plurals>\n    <string name=\"pref_backups_versions_infinite_summary\">Behold et uendelig antall sikkerhetskopier</string>\n    <string name=\"pref_import_app_title\">Importer fra app</string>\n    <string name=\"pref_import_app_summary\">Importer nøkler fra en app (krever root-tilgang)</string>\n    <string name=\"pref_export_title\">Eksporter</string>\n    <string name=\"pref_export_summary\">Eksporter hvelvet</string>\n    <string name=\"pref_password_reminder_title\">Passordpåminnelse</string>\n    <string name=\"pref_google_auth_export_title\">Eksporter for Google Autentisering</string>\n    <string name=\"pref_google_auth_export_descriptor\">Genererer QR-koder for eksport til Google Autentisering</string>\n    <string name=\"pref_google_auth_export_no_data\">Ingen data å eksportere</string>\n    <plurals name=\"pref_google_auth_export_incompatible_entries\">\n        <item quantity=\"one\">Hoppet over %d inkompatibel oppføring</item>\n        <item quantity=\"other\">Hoppet over %d inkompatible oppføringer</item>\n    </plurals>\n    <string name=\"pref_password_reminder_summary\">Viser en %s påminnelse for å skrive inn passordet så du ikke glemmer det.</string>\n    <string name=\"pref_password_reminder_summary_disabled\">Deaktivert</string>\n    <string name=\"pref_secure_screen_title\">Skjermsikkerhet</string>\n    <string name=\"pref_secure_screen_summary\">Blokker skjermbilder og skjermopptak av appen</string>\n    <string name=\"pref_tap_to_reveal_title\">Trykk for å vise</string>\n    <string name=\"pref_tap_to_reveal_summary\">Koder vil være skjult til vanlig. Trykk på oppføringen for å vise koden.</string>\n    <string name=\"pref_tap_to_reveal_time_title\">Tidsavbrudd for «Trykk for å vise»</string>\n    <string name=\"pref_auto_lock_title\">Lås automatisk</string>\n    <string name=\"pref_auto_lock_summary\">Når %s</string>\n    <string name=\"pref_auto_lock_summary_disabled\">Deaktivert</string>\n    <string name=\"pref_auto_lock_prompt\">Lås Aegis automatisk når</string>\n    <string name=\"pref_auto_lock_type_back_button\">Tilbakeknappen trykkes</string>\n    <string name=\"pref_auto_lock_type_minimize\">Appen er minimert</string>\n    <string name=\"pref_auto_lock_type_device_lock\">Enheten er låst</string>\n    <string name=\"pref_backup_password_category\">Sikkerhetskopi &amp; Eksport</string>\n    <string name=\"pref_backup_password_title\">Ulike passord for sikkerhetskopi &amp; eksport</string>\n    <string name=\"pref_backup_password_summary\">Ved å aktivere dette, vil ikke passordet for å låse opp appen kunne brukes til å dekryptere sikkerhetskopier og eksport lenger.</string>\n    <string name=\"pref_backup_password_change_title\">Bytt passord for sikkerhetskopi &amp; eksport</string>\n    <string name=\"pref_backup_password_change_summary\">Angi et nytt passord for å kryptere hvelvet ved sikkerhetskopiering og eksport.</string>\n    <string name=\"pref_encryption_title\">Kryptering</string>\n    <string name=\"pref_encryption_summary\">Krypter hvelvet og lås det opp med passord eller biometri</string>\n    <string name=\"pref_biometrics_title\">Biometrisk opplåsing</string>\n    <string name=\"pref_biometrics_summary\">Tillat biometrisk autentisering for å låse opp hvelvet</string>\n    <string name=\"pref_search_behavior_summary\">Søk igjennom: %s</string>\n    <string name=\"pref_search_behavior_prompt\">Søk i følgende felter</string>\n    <string name=\"pref_search_behavior_type_name\">Navn</string>\n    <string name=\"pref_search_behavior_type_issuer\">Utsteder</string>\n    <string name=\"pref_search_behavior_type_note\">Notat</string>\n    <string name=\"pref_search_behavior_type_groups\">Grupper</string>\n    <string name=\"pref_set_password_title\">Bytt passord</string>\n    <string name=\"pref_set_password_summary\">Angi et nytt passord til opplåsing av hvelvet ditt</string>\n    <string name=\"no_events_title\">Ingen rapporterte hendelser</string>\n    <string name=\"no_events_description\">Ingen viktige hendelser har blitt rapportert i appen</string>\n    <string name=\"event_title_vault_unlocked\">Hvelvet låst opp</string>\n    <string name=\"event_description_vault_unlocked\">Vellykket opplåsing av hvelvet</string>\n    <string name=\"event_title_backup_created\">Sikkerhetskopi opprettet</string>\n    <string name=\"event_description_backup_created\">Vellykket sikkerhetskopi av hvelvet</string>\n    <string name=\"event_title_android_backup_created\">Sikkerhetskopi fra Android</string>\n    <string name=\"event_description_android_backup_created\">Vellykket Android-sikkerhetskopi av hvelvet</string>\n    <string name=\"event_title_vault_exported\">Hvelv eksportert</string>\n    <string name=\"event_description_vault_exported\">En kopi av hvelvet har blitt eksportert</string>\n    <string name=\"event_title_entry_shared\">Oppføring delt</string>\n    <string name=\"event_description_entry_shared\">En oppføring ble delt</string>\n    <string name=\"event_title_vault_unlock_failed_password\">Feil ved opplåsing av hvelvet (passord)</string>\n    <string name=\"event_description_vault_unlock_failed_password\">Et forsøk på å låse opp hvelvet med passord feilet</string>\n    <string name=\"event_title_vault_unlock_failed_biometrics\">Feil ved opplåsing av hvelvet (biometri)</string>\n    <string name=\"event_description_vault_unlock_failed_biometrics\">Et forsøk på å låse opp hvelvet med biometri feilet</string>\n    <string name=\"event_unknown\">Ukjent hendelsestype</string>\n    <string name=\"audit_log_entry_deleted\">(slettet)</string>\n    <string name=\"today_at_time\">I dag ved %1$s</string>\n    <string name=\"day_of_week_at_time\">%1$s ved %2$s</string>\n    <string name=\"export_encrypted\">Krypter hvelvet</string>\n    <string name=\"export_help\">Denne handlingen vil eksportere hvelvet utenfor Aegis\\' interne lagring. Velg filformat du vil eksportere til:</string>\n    <string name=\"export_warning_unencrypted\">Du er i ferd med å eksportere en ukryptert kopi av Aegis hvelvet ditt. <b>Dette er ikke anbefalt</b>.</string>\n    <string name=\"export_warning_password\">Eksporter er kryptert med et separat passord satt opp i sikkerhetsinnstillingene.</string>\n    <string name=\"understand_risk_accept\">Jeg forstår risikoen</string>\n    <string name=\"export_format_aegis\">Aegis (.JSON)</string>\n    <string name=\"export_format_google_auth_uri\">Tekstfil (.TXT)</string>\n    <string name=\"export_format_html\">Nettside (.HTML)</string>\n    <string name=\"export_format_hint\">Eksporteringsformat</string>\n    <string name=\"export_all_groups\">Eksporter alle grupper</string>\n    <string name=\"export_choose_groups\">Velg hvilke grupper som skal eksporteres</string>\n    <plurals name=\"export_groups_selected_count\">\n        <item quantity=\"one\">%d gruppe valgt</item>\n        <item quantity=\"other\">%d grupper valgt</item>\n    </plurals>\n    <string name=\"export_no_groups_selected\">Ingen grupper valgt for eksportering</string>\n    <string name=\"export_html_title\" comment=\"The title of an HTML export document\">Aegis Authenticator eksportering</string>\n    <string name=\"choose_authentication_method\">Sikkerhet</string>\n    <string name=\"authentication_method_explanation\">Aegis er en sikkerhetsfokusert app for tofaktorautentisering (2FA). Nøklene blir lagret i et hvelv, som kan krypteres med passord etter eget ønske. Hvis en angriper får tilgang til den krypterte hvelv-filen, vil de i så fall ikke kunne få tilgang til innholdet uten passordet.\\n\\nVi har forhåndsvalgt løsningen vi mener passer best til enheten din.</string>\n    <string name=\"authentication_method_none\">Ingen</string>\n    <string name=\"authentication_method_none_description\">Det trengs ikke passord for å låse opp hvelvet, og hvelvet vil ikke bli kryptert. <b>Dette er ikke anbefalt</b>.</string>\n    <string name=\"authentication_method_password\">Passordd</string>\n    <string name=\"authentication_method_password_description\">Et passord kreves for å låse opp hvelvet.</string>\n    <string name=\"authentication_method_password_explanation\">Advarsel: Hvis du glemmer passordet ditt vil du kunne miste permanent tilgang til nøklene dine. Det er ikke mulig å gjenopprette disse uten passordet.</string>\n    <string name=\"authentication_method_biometrics\">Biometri</string>\n    <string name=\"authentication_method_biometrics_description\">I tillegg til et passord, så kan biometri som fingeravtrykk eller ansikt brukes til å låse opp hvelvet.</string>\n    <string name=\"authentication\">Lås opp hvelvet</string>\n    <string name=\"authentication_multiline\" comment=\"The newline in the middle is used for aesthetic purposes\">Lås opp\\nhvelvet</string>\n    <string name=\"auth_use_biometrics\">Eller trykk her for å bruke <font fgcolor=\"#FF0D86C1\">biometri</font></string>\n    <string name=\"set_password\">Vennligst skriv inn et passord</string>\n    <string name=\"set_group\">Vennligst skriv inn et gruppenavn</string>\n    <string name=\"set_number\">Vennligst skriv inn et nummer</string>\n    <string name=\"set_password_confirm\">Vennligst bekreft passordet</string>\n    <string name=\"invalid_password\">Passordet er feil</string>\n    <string name=\"invalidated_biometrics\">En endring har blitt oppdaget i enhetens sikkerhetsinnstillinger. Vennligst gå til «Aegis -&gt; Innstillinger -&gt; Sikkerhet - &gt; Biometrisk opplåsing» for å skru av og på biometrisk opplåsing.</string>\n    <string name=\"password_reminder\">Vennligst skriv inn passordet ditt. Vi ber deg om dette av og til så du ikke glemmer det.</string>\n    <string name=\"password_reminder_dialog_title\">Biometrisk opplåsning som standard</string>\n    <string name=\"password_reminder_dialog_message\">Vi ber deg av og til om å skrive inn passordet ditt for å passe på at du ikke har glemt det, slik at du ikke blir låst ute av hvelvet ditt. Etter å ha skrevet inn passordet vil Aegis gå tilbake til biometrisk opplåsning frem til neste passordpåminnelse.</string>\n    <string name=\"password_reminder_freq_never\">Aldri</string>\n    <string name=\"password_reminder_freq_weekly\">Ukentlig</string>\n    <string name=\"password_reminder_freq_biweekly\">Annenhver uke</string>\n    <string name=\"password_reminder_freq_monthly\">Månedlig</string>\n    <string name=\"password_reminder_freq_quarterly\">Kvartalvis</string>\n    <string name=\"enter_password_2fas_message\">Det ser ut som at denne 2FAS sikkerhetskopien er kryptert. Vennligst skriv inn passordet under.</string>\n    <string name=\"enter_password_authy_message\">Det ser ut som at nøklene i Authy er krypterte. Vennligst lukk Aegis, åpne Authy og lås opp nøklene med passordet ditt. Alternativt kan Aegis forsøke å dekryptere Authy nøklene dine om du skriver passordet ditt nedenfor.</string>\n    <string name=\"enter_password_aegis_title\">Vennligst skriv inn det importerte passordet</string>\n    <string name=\"period_hint\">Periode (sekunder)</string>\n    <string name=\"algorithm_hint\">Hashfunksjon</string>\n    <string name=\"type\">Type</string>\n    <string name=\"share\">Del</string>\n    <string name=\"yes\">Ja</string>\n    <string name=\"no\">Nei</string>\n    <string name=\"undo\">Angre</string>\n    <string name=\"unlock\">Lås opp</string>\n    <string name=\"advanced\">Avansert</string>\n    <string name=\"counter\">Teller</string>\n    <string name=\"digits\">Sifre</string>\n    <string name=\"secret\">Nøkkel</string>\n    <string name=\"scan\">Skann QR-kode</string>\n    <string name=\"scan_image\">Skann bilde</string>\n    <string name=\"enter_manually\">Skriv inn manuelt</string>\n    <string name=\"set_up_biometric\">Sett opp biometrisk opplåsing</string>\n    <string name=\"copy\">Kopier</string>\n    <string name=\"edit\">Rediger</string>\n    <string name=\"select_all\">Velg alle</string>\n    <string name=\"assign_icons\">Tildel ikoner</string>\n    <string name=\"assign_groups\">Legg til i gruppe</string>\n    <string name=\"assign_groups_dialog_summary\">Velg i hvilken gruppe du vil legge til de valgte oppføringene.</string>\n    <string name=\"assign_groups_dialog_dropdown\">Velg gruppe</string>\n    <string name=\"favorite\" comment=\"Verb\">Legg til som favoritt</string>\n    <string name=\"unfavorite\" comment=\"Verb\">Fjern fra favoritter</string>\n    <string name=\"error_all_caps\">FEIL</string>\n    <string name=\"password\">Passord</string>\n    <string name=\"confirm_password\">Bekreft passord</string>\n    <string name=\"show_password\">Vis passord</string>\n    <string name=\"new_entry\">Ny oppføring</string>\n    <string name=\"add_new_entry\">Legg til ny oppføring</string>\n    <string name=\"unlock_vault_error\">Kunne ikke låse opp hvelvet</string>\n    <string name=\"unlock_vault_error_description\">Feil passord. Kontroller at det er skrevet inn korrekt.</string>\n    <string name=\"password_equality_error\">Passordene bør være identiske og ikke være tomme</string>\n    <string name=\"snackbar_authentication_method\">Vennligst velg en autentiseringsmetode</string>\n    <string name=\"encrypting_vault\">Krypterer hvelvet</string>\n    <string name=\"exporting_vault\">Eksporterer hvelvet</string>\n    <string name=\"optimizing_icon\">Optimaliserer ikon</string>\n    <string name=\"optimizing_icon_multiple\">Optimaliserer ikoner %1$d/%2$d</string>\n    <string name=\"reading_file\">Leser fil</string>\n    <string name=\"requesting_root_access\">Ber om root-tilgang</string>\n    <string name=\"analyzing_qr\">Analyserer QR-kode</string>\n    <string name=\"analyzing_qr_multiple\">Analyserer QR-kode %1$d/%2$d (%3$s)</string>\n    <plurals name=\"added_new_entries\">\n        <item quantity=\"one\">La til %d ny oppføring i hvelvet</item>\n        <item quantity=\"other\">La til %d nye oppføringer i hvelvet</item>\n    </plurals>\n    <string name=\"importing_icon_pack\">Importerer ikonpakke</string>\n    <string name=\"delete_entry\">Slett oppføring</string>\n    <string name=\"delete_entry_description\">Er du sikker på at du vil slette denne oppføringen?</string>\n    <string name=\"delete_entry_explanation\">Dette deaktiverer ikke 2FA for: \\n<b>%s</b>\\n\\nSørg for å skru av 2FA, eller at du har en alternativ metode for å generere koder for denne tjenesten. Hvis ikke risikerer du å miste tilgang til den.</string>\n    <string name=\"delete_entries\">Slett oppføringer</string>\n    <plurals name=\"delete_entries_description\">\n        <item quantity=\"one\">Er du sikker på at du vil slette %d oppføring?</item>\n        <item quantity=\"other\">Er du sikker på at du vil slette %d oppføringer?</item>\n    </plurals>\n    <string name=\"discard_changes\">Forkast endringer?</string>\n    <string name=\"discard_changes_description\">Endringene ble ikke lagret</string>\n    <string name=\"saving_profile_error\">Feil ved lagring av profil</string>\n    <string name=\"saving_assign_icons_error\">Feil ved tildeling av ikoner</string>\n    <string name=\"welcome\">Velkommen</string>\n    <string name=\"app_description\">Aegis er en gratis og sikker 2FA app med åpen kildekode</string>\n    <string name=\"setup_completed\">Oppsett fullført</string>\n    <string name=\"setup_completed_description\">Aegis er satt opp og er klar for bruk.</string>\n    <string name=\"vault_not_found\">Finner ikke hvelv, starter oppsett…</string>\n    <string name=\"copied\">Kopiert</string>\n    <string name=\"errors_copied\">Feil kopiert til utklippstavlen</string>\n    <string name=\"version_copied\">Versjon kopiert til utklippstavlen</string>\n    <string name=\"error_required_field\">Dette feltet er påkrevd</string>\n    <string name=\"error_occurred\">En feil oppstod</string>\n    <string name=\"decryption_error\">En feil oppstod ved opplåsing av hvelvet</string>\n    <string name=\"decryption_corrupt_error\">En feil oppstod ved opplåsing av hvelvet. Hvelv-filen kan være skadet.</string>\n    <string name=\"saving_error\">En feil oppstod ved lagring av hvelvet</string>\n    <string name=\"vault_init_error\">En feil oppstod ved initialisering av hvelvet</string>\n    <string name=\"vault_load_error\">Det oppsto en feil under forsøk på å laste inn hvelvet</string>\n    <string name=\"biometric_decrypt_error\">En feil oppstod under forsøk på å dekryptere hvelvet med biometrisk godkjenning. Dette skjer vanligvis bare hvis sikkerhetsinnstillingene for enheten ble endret. Lås opp hvelvet med passordet ditt og sett opp biometrisk autentisering på nytt i innstillingene til Aegis.</string>\n    <string name=\"biometric_init_error\">En feil oppsto ved forsøk på å forberede biometrisk autentisering. Dette skjer vanligvis bare hvis sikkerhetsinnstillingene til enheten ble endret. Lås opp hvelvet med passordet ditt og sett opp biometrisk autentiseringpå nytt i innstillingene til Aegis.</string>\n    <string name=\"disable_encryption\">Deaktiver kryptering</string>\n    <string name=\"disable_encryption_description\">Er du sikker på at du vil deaktivere kryptering? Dette vil føre til at hvelvet lagres i klartekst. <b>automatiske sikkerhetskopier vil også bli deaktivert</b>.</string>\n    <string name=\"enable_encryption_error\">En feil oppstod under aktivering av kryptering</string>\n    <string name=\"disable_encryption_error\">En feil oppstod under deaktivering av kryptering</string>\n    <string name=\"backup_successful\">Vellykket planlegging av sikkerhetskopi</string>\n    <string name=\"backup_error\">En feil oppstod ved forsøk på å lage en sikkerhetskopi</string>\n    <string name=\"backup_status_success\">Nyeste sikkerhetskopi vellykket: %s</string>\n    <string name=\"backup_status_failed\">Nyeste sikkerhetskopi feilet: %s</string>\n    <string name=\"backup_status_none\">Det er ikke opprettet noen sikkerhetskopier enda</string>\n    <string name=\"backup_warning_password\">Sikkerhetskopier er kryptert med eget passord konfigurert i sikkerhetsinnstillingene</string>\n    <string name=\"documentsui_error\">DocumentsUI ser ut til å mangle på enheten. Dette er en viktig systemkomponent som er nødvendig for valg og oppretting av dokumenter. Hvis du brukte et verktøy til &quot;slanke&quot; enheten, kan det ha blitt slettet ved et uhell og du må installere det på nytt.</string>\n    <string name=\"icon_pack_import_error\">Det oppsto en feil under forsøk på å importere en ikonpakke</string>\n    <string name=\"icon_pack_import_exists_error\">Ikonpakken du prøver å importere finnes allerede. Vil du overskrive den?</string>\n    <string name=\"icon_pack_delete_error\">Det oppstod en feil under forsøk på å slette en ikonpakke</string>\n    <plurals name=\"icon_pack_info\">\n        <item quantity=\"one\">%d ikon</item>\n        <item quantity=\"other\">%d ikoner</item>\n    </plurals>\n    <string name=\"icon_custom\">Egendefinert</string>\n    <string name=\"permission_denied\">Tilgang nektet</string>\n    <string name=\"andotp_new_format\">Nytt format (v0.6.3 eller nyere) </string>\n    <string name=\"andotp_old_format\">Gammelt format (v0.6.2 eller eldre) </string>\n    <string name=\"choose_andotp_importer\">Hvilket filformat har sikkerhetskopien fra andOTP?</string>\n    <string name=\"choose_totpauth_importer\">Er sikkerhetskopien fra TOTP Authenticator kryptert med et passord?</string>\n    <string name=\"choose_application\">Velg applikasjonen du ønsker å importere fra</string>\n    <string name=\"choose_theme\">Velg ønsket tema</string>\n    <string name=\"choose_account_name_position\">Velg ønsket plassering av brukernavn</string>\n    <string name=\"choose_view_mode\">Velg ønsket visningsmodus</string>\n    <string name=\"choose_copy_behavior\">Velg ønsket oppførsel for kopiering</string>\n    <string name=\"parsing_file_error\">Det oppsto en feil under forsøk på å analysere filen</string>\n    <string name=\"file_not_found\">Feil: Finner ikke filen</string>\n    <string name=\"reading_file_error\">Det oppsto en feil under forsøk på å lese filen</string>\n    <string name=\"app_lookup_error\">Feil: Appen er ikke installert</string>\n    <string name=\"app_version_error\">Versjonen av %s som er installert støttes ikke. Nylige versjoner har begynt å kryptere noen av filene i den interne lagringsmappen, slik at Aegis ikke får tilgang til den informasjonen den trenger for å importere dataene. Om du prøver å importere dataene vil det sannsynligvis resultere i en feil. Ønsker du likevel å fortsette?</string>\n    <string name=\"root_error\">Feil: Kunne ikke få root-tilgang</string>\n    <plurals name=\"imported_entries_count\">\n        <item quantity=\"one\">Importerte %d oppføring</item>\n        <item quantity=\"other\">Importerte %d oppføringer</item>\n    </plurals>\n    <plurals name=\"entries_shown\">\n        <item quantity=\"one\">Viser %d oppføring</item>\n        <item quantity=\"other\">Viser %d oppføringer</item>\n    </plurals>\n    <string name=\"intro_import_error_title\">En feil oppstod under import av hvelvet</string>\n    <string name=\"import_error_title\">En eller flere feil oppstod under importeringen</string>\n    <string name=\"exporting_vault_error\">En feil oppstod ved eksportering av hvelvet</string>\n    <string name=\"exported_vault\">Hvelvet ble eksportert</string>\n    <string name=\"encryption_set_password_error\">Det oppstod en feil under forsøk på å angi passordet.</string>\n    <string name=\"encryption_enable_biometrics_error\">Det oppsto en feil under forsøk på å aktivere biometrisk opplåsing. Noen enheter har dårlige implementeringer av biometriske godkjenninger, og det er sannsynlig at din enhet er en av dem. Vurder å bytte til annen konfigurasjon som kun bruker passord i stedet.</string>\n    <string name=\"no_cameras_available\">Ingen kameraer tilgjengelig</string>\n    <string name=\"read_qr_error\">Det oppstod en feil under forsøk på å lese QR-koden</string>\n    <string name=\"read_qr_error_phonefactor\">Aegis er ikke kompatibel med Microsofts egenutviklede 2FA algoritme. Vennligst velg \\\"Oppsett app uten varsler\\\" når du konfigurerer 2FA i Office 365.</string>\n    <string name=\"partial_google_auth_import\">Ufullstendig eksport av Google Authenticator funnet</string>\n    <string name=\"partial_google_auth_import_warning\">Noen QR-koder mangler i de importerte dataene. Følgende koder ble ikke funnet:\\n\\n<b>%s</b>\\n\\nDu kan fortsette å importere denne ufullstendige eksporten, men vi anbefaler at du prøver på nytt med alle QR-kodene slik at du ikke risikerer å miste tilgang til noen av nøklene.</string>\n    <string name=\"missing_qr_code_descriptor\">• QR-kode %d</string>\n    <plurals name=\"import_partial_export_anyway\">\n        <item quantity=\"one\">Importer %d nøkkel likevel</item>\n        <item quantity=\"other\">Importer %d nøkler likevel</item>\n    </plurals>\n    <string name=\"import_google_auth_failure\">Importering av eksport fra Google Authenticator mislyktes</string>\n    <string name=\"no_tokens_can_be_imported\">Ingen nøkler kan importeres som resultat</string>\n    <string name=\"unlocking_vault\">Låser opp hvelvet</string>\n    <string name=\"rename_group\">Endre gruppenavn</string>\n    <string name=\"remove_group\">Fjern gruppe</string>\n    <string name=\"remove_unused_groups\">Slett ubrukte grupper</string>\n    <string name=\"remove_unused_groups_description\">Er du sikker på at du ønsker å slette alle grupper som ikke brukes av noen oppføringer?</string>\n    <string name=\"remove_icon_pack\">Fjern ikonpakke</string>\n    <string name=\"details\">Detaljer</string>\n    <string name=\"show_error_details\">Vis feildetaljer</string>\n    <string name=\"lock\">Lås</string>\n    <string name=\"name\">Navn</string>\n    <string name=\"no_group\">Ingen gruppe</string>\n    <string name=\"sort\" comment=\"Title of the Sort button in the top action bar of the main view\">Sorter</string>\n    <string name=\"sort_alphabetically\">Utsteder (A til Å)</string>\n    <string name=\"sort_alphabetically_reverse\">Utsteder (Å til A)</string>\n    <string name=\"sort_alphabetically_name\">Konto (A til Å)</string>\n    <string name=\"sort_alphabetically_name_reverse\">Konto (Å til A)</string>\n    <string name=\"sort_usage_count\">Bruksfrekvens</string>\n    <string name=\"sort_last_used\">Sist brukt</string>\n    <string name=\"sort_custom\">Egendefinert</string>\n    <string name=\"last_used\">Sist brukt</string>\n    <string name=\"last_used_never\">aldri</string>\n    <string name=\"new_group\">Ny gruppe…</string>\n    <string name=\"group\">Gruppe</string>\n    <string name=\"group_name_hint\">Gruppenavn</string>\n    <string name=\"preference_manage_groups\">Rediger grupper</string>\n    <string name=\"preference_manage_groups_summary\">Administrer og slett gruppene dine her</string>\n    <string name=\"preference_reset_usage_count\">Tilbakestill bruksfrekvens</string>\n    <string name=\"note\" comment=\"Users can add a note to an entry\">Notat</string>\n    <string name=\"clear\">Tøm</string>\n    <string name=\"pref_highlight_entry_title\">Fremhev koder ved trykk</string>\n    <string name=\"pref_highlight_entry_summary\">Gjør det lettere å skille mellom koder ved å fremheve dem ved trykk</string>\n    <string name=\"pref_minimize_on_copy_title\">Minimer ved kopi</string>\n    <string name=\"pref_minimize_on_copy_summary\">Minimer appen etter å ha kopiert en kode</string>\n    <string name=\"pref_copy_behavior_title\">Kopier koder til utklippstavlen</string>\n    <string name=\"pref_pause_entry_title\">Frys koder ved trykk</string>\n    <string name=\"pref_pause_entry_summary\">Pause autmatisk oppdatering av koder ved å trykke på dem. Koder vil ikke oppdateres så lenge de er i fokus. Krever «Fremhev koder ved trykk» eller «Trykk for å vise».</string>\n    <string name=\"pin_keyboard_description\">Skriv inn passordet ditt for å aktivere PIN-tastaturet. Merk at dette kun fungerer dersom passordet bare består av tall</string>\n    <string name=\"pin_keyboard_error\">Feil ved aktivering av PIN-tastatur</string>\n    <string name=\"pin_keyboard_error_description\">Det er ikke mulig å aktivere PIN-tastatur. Passordet ditt kan bare bestå av tall.</string>\n    <string name=\"pin_keyboard_disabled\">Passord endret. PIN-tastaturet vil ikke lenger bli vist.</string>\n    <string name=\"selected\">Valgt</string>\n    <string name=\"dark_theme_title\">Mørkt tema</string>\n    <string name=\"light_theme_title\">Lyst tema</string>\n    <string name=\"amoled_theme_title\">AMOLED tema</string>\n    <string name=\"system_theme_title\">Følg systemet</string>\n    <string name=\"system_amoled_theme_title\">Følg systemet (AMOLED)</string>\n    <string name=\"normal_viewmode_title\">Normal</string>\n    <string name=\"compact_mode_title\">Kompakt</string>\n    <string name=\"small_mode_title\">Liten</string>\n    <string name=\"tiles_mode_title\">Fliser</string>\n    <string name=\"unknown_issuer\">Ukjent utsteder</string>\n    <string name=\"unknown_account_name\">Ukjent brukernavn</string>\n    <string name=\"unable_to_generate_qrcode\">Kunne ikke generere QR-kode</string>\n    <string name=\"select_picture\">Velg bilde</string>\n    <string name=\"select_icon\">Velg ikon</string>\n    <string name=\"tile_open_vault\" comment=\"label for a quick settings tile that opens the app when tapped\">Åpne hvelv</string>\n    <string name=\"tile_open_scanner\" comment=\"label for a quick settings tile that opens the QR code scanner when tapped\">Åpne skanner</string>\n    <string name=\"search\">Søk</string>\n    <string name=\"channel_name_lock_status\">Låsestatus</string>\n    <string name=\"channel_description_lock_status\">Aegis kan opprette et vedvarende varsel for å informere deg når hvelvet er låst</string>\n    <string name=\"vault_unlocked_state\">Hvelvet er låst opp. Trykk her for å låse.</string>\n    <string name=\"version\">Versjon</string>\n    <string name=\"changelog\">Endringslogg</string>\n    <string name=\"whats_new\">Nyheter</string>\n    <string name=\"github_description\">Kildekode, problemer og informasjon</string>\n    <string name=\"license\">Lisens</string>\n    <string name=\"license_description\">Aegis Authenticator er lisensiert under GPLv3</string>\n    <string name=\"third_party_licenses\">Tredjepartslisenser</string>\n    <string name=\"third_party_licenses_description\">Lisenser til tredjepartsbiblioteker Aegis benytter</string>\n    <string name=\"country_netherlands\">Nederland</string>\n    <string name=\"email_us\">Skriv en e-post</string>\n    <string name=\"visit_website\">Besøk nettsiden våres</string>\n    <string name=\"about_support\">Støtte</string>\n    <string name=\"support_rate\">Ranger</string>\n    <string name=\"support_rate_description\">Støtt oss ved å skrive en anmeldelse i Google Play Butikk</string>\n    <string name=\"email\">E-post</string>\n    <string name=\"backup_system_builtin\">Aegis\\' innebygde automatiske sikkerhetskopier</string>\n    <string name=\"backup_system_android\">System for Android-sikkerhetskopiering i skyen</string>\n    <string name=\"backup_reminder_bar_message_with_latest\" comment=\"The parameter is an elapsed time in the style of 'x seconds/minutes/days ago'\">        Siste sikkerhetskopi er utdatert (%s)\n    </string>\n    <string name=\"backup_reminder_bar_message\">        Endringer er ikke sikkerhetskopiert\n    </string>\n    <string name=\"backup_reminder_bar_dialog_title\">Endringer er ikke sikkerhetskopiert</string>\n    <string name=\"backup_reminder_bar_dialog_summary\">        Nylige endringer i hvelvet er ikke sikkerhetskopiert enda. Det er viktig å sikkerhetskopiere regelmessig for å unngå at du mister tilgang til kontoene dine. Vennligst vurder å sette opp automatisk sikkerhetskopiering i innstillingene.\n    </string>\n    <string name=\"backup_reminder_bar_dialog_accept\">Sett opp sikkerhetskopier</string>\n    <string name=\"backup_plaintext_export_warning\"><b>Hvelvet ble nylig eksportert i klartekst</b></string>\n    <string name=\"pref_show_plaintext_warning_hint\">Ikke vis denne advarselen igjen</string>\n    <string name=\"backup_plaintext_warning_explanation\">Denne advarselen blir vist fordi du nylig eksporterte en ukryptert kopi av hvelvet ditt. For å opprettholde sikkerheten for nøklene dine, vil vi anbefale deg å slette denne filen når den ikke trengs lenger.</string>\n    <string name=\"switch_camera\">Bytt kamera</string>\n    <string name=\"empty_list\">Det er ingen koder å vise. Legg til oppføringer ved å trykke på pluss-ikonet nederst til høyre</string>\n    <string name=\"empty_list_title\">Ingen oppføringer funnet</string>\n    <string name=\"empty_group_list\">Det er ingen grupper å vise. Legg til grupper når du redigerer oppføringer</string>\n    <string name=\"empty_group_list_title\">Ingen grupper funnet</string>\n    <string name=\"no_icon_packs\">Ingen importerte ikonpakker enda. Trykk på pluss-ikonet for å importere en. Tips: prøv <a href=\"https://aegis-icons.github.io\">aegis-icons</a>.</string>\n    <string name=\"no_icon_packs_title\">Ingen ikonpakker</string>\n    <string name=\"pick_icon\">Velg et ikon</string>\n    <string name=\"uncategorized\">Ukategorisert</string>\n    <string name=\"done\">Ferdig</string>\n    <plurals name=\"qr_count\">\n        <item quantity=\"one\">%d / %d QR-kode</item>\n        <item quantity=\"other\">%d / %d QR-koder</item>\n    </plurals>\n    <string name=\"next\">Neste</string>\n    <string name=\"previous\">Forrige</string>\n    <string name=\"copy_uri\">Kopier URI</string>\n    <string name=\"unable_to_copy_uri_to_clipboard\">Kunne ikke kopiere URI til utklippstavlen</string>\n    <string name=\"uri_copied_to_clipboard\">URI kopiert til utklippstavlen</string>\n    <string name=\"transfer_entry_description\">Skann denne QR-koden med autentiseringsappen du ønsker å overføre denne oppføringen til</string>\n    <string name=\"google_auth_compatible_transfer_description\">Skann disse QR-kodene med Aegis eller Google Authenticator.\\n\\nPå grunn av begrensningene i Google Authenticator appen, vil kun TOTP og HOTP nøkler som benytter SHA1 og produserer 6-sifrede koder bli inkludert</string>\n    <string name=\"password_strength_very_weak\">Veldig svakt</string>\n    <string name=\"password_strength_weak\">Svak</string>\n    <string name=\"password_strength_fair\">Middels</string>\n    <string name=\"password_strength_good\">Bra</string>\n    <string name=\"password_strength_strong\">Sterkt</string>\n    <string name=\"password_strength_unknown\">Passordet er for langt for styrkeanalyse</string>\n    <string name=\"pref_pin_keyboard_title\">Bruk PIN-kode tastatur på appens låseskjerm</string>\n    <string name=\"title_activity_preferences\">Innstillinger</string>\n    <string name=\"title_activity_manage_groups\">Administrer grupper</string>\n    <string name=\"title_activity_transfer\">Overfør oppføringer</string>\n    <string name=\"title_activity_about\">Om</string>\n    <string name=\"title_activity_edit_entry\">Rediger oppføring</string>\n    <string name=\"title_activity_scan_qr\">Skann en QR-kode</string>\n    <string name=\"title_activity_import_entries\">Importer oppføring</string>\n    <string name=\"title_activity_assign_icons\">Tildel ikoner</string>\n    <string name=\"title_activity_licenses\">Tredjepartslisenser</string>\n    <string name=\"dialog_wipe_entries_title\">Tøm oppføringner</string>\n    <string name=\"dialog_wipe_entries_checkbox\">Destruer hvelv</string>\n    <string name=\"import_vault\">Importer Aegis hvelv</string>\n    <string name=\"importer_help_2fas\">Legg ved en 2FAS Authenticator sikkerhetskopi.</string>\n    <string name=\"importer_help_aegis\">Legg ved en Aegis eksportfil eller sikkerhetskopi.</string>\n    <string name=\"importer_help_andotp\">Legg ved en andOTP eksportfil eller sikkerhetskopi.</string>\n    <string name=\"importer_help_bitwarden\">Legg ved en Bitwarden eksportfil eller sikkerhetskopi. Krypterte filer støttes ikke.</string>\n    <string name=\"importer_help_freeotp_plus\">Legg ved en FreeOTP+ eksportfil.</string>\n    <string name=\"importer_help_totp_authenticator\">Legg ved en TOTP Authenticator eksportfil.</string>\n    <string name=\"importer_help_winauth\">Legg ved en WinAuth eksportfil.</string>\n    <string name=\"import_assign_icons_dialog_title\">Tildel ikoner</string>\n    <string name=\"import_assign_icons_dialog_text\">Ønsker du å tildele ikoner til de importerte oppføringene?</string>\n    <string name=\"importer_encrypted_exception_google_authenticator\">Kryptert oppføring ble hoppet over: %s</string>\n    <string name=\"importer_help_direct\">Importer oppføringer direkte fra %s. Dette krever at appen er installert på denne enheten og at Aegis har root-tilgang.</string>\n    <string name=\"groups\">Grupper</string>\n    <string name=\"pref_focus_search\">Fokuser på søkefelt når appen startes</string>\n    <string name=\"pref_focus_search_summary\">Fokuser på søkefelt med en gang appen er åpnet.</string>\n    <string name=\"pref_grouping_halves\">Halvert</string>\n    <string name=\"pref_grouping_none\">Ingen gruppering</string>\n    <string name=\"pref_grouping_size_two\">Grupper på 2</string>\n    <string name=\"pref_grouping_size_three\">Grupper på 3</string>\n    <string name=\"pref_grouping_size_four\">Grupper på 4</string>\n    <string name=\"pref_copy_behavior_never\">Aldri</string>\n    <string name=\"pref_copy_behavior_single_tap\">Enkelttrykk</string>\n    <string name=\"pref_copy_behavior_double_tap\">Dobbelttrykk</string>\n    <string name=\"pref_account_name_position_hidden\">Skjult</string>\n    <string name=\"pref_account_name_position_end\">Ved siden av utstederen</string>\n    <string name=\"pref_account_name_position_below\">Under utstederen</string>\n    <plurals name=\"time_elapsed_seconds\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"one\">%d sekund siden</item>\n        <item quantity=\"other\">%d sekunder siden</item>\n    </plurals>\n    <plurals name=\"time_elapsed_minutes\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"one\">%d minutt siden</item>\n        <item quantity=\"other\">%d minutter siden</item>\n    </plurals>\n    <plurals name=\"time_elapsed_hours\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"one\">%d time siden</item>\n        <item quantity=\"other\">%d timer siden</item>\n    </plurals>\n    <plurals name=\"time_elapsed_days\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"one\">%d dag siden</item>\n        <item quantity=\"other\">%d dager siden</item>\n    </plurals>\n    <plurals name=\"time_elapsed_years\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"one\">%d år siden</item>\n        <item quantity=\"other\">%d år siden</item>\n    </plurals>\n    <plurals name=\"dropdown_checkboxes_default_count\">\n        <item quantity=\"one\">%d element valgt</item>\n        <item quantity=\"other\">%d elementer valgt</item>\n    </plurals>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-nb-rNO-v29/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"system_amoled_theme_title\">Systemstandard (AMOLED)</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-nl-rNL/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources xmlns:tools=\"http://schemas.android.com/tools\">\n    <string name=\"action_settings\">Instellingen</string>\n    <string name=\"action_about\">Over</string>\n    <string name=\"action_delete\">Verwijderen</string>\n    <string name=\"action_transfer\">Overzetten</string>\n    <string name=\"action_edit_icon\">Pictogram bewerken</string>\n    <string name=\"action_reset_usage_count\">Gebruikteller opnieuw instellen</string>\n    <string name=\"action_reset_usage_count_dialog\">Weet je zeker dat je de gebruikteller van dit item op 0 wilt zetten?</string>\n    <string name=\"action_default_icon\">Standaard pictogram herstellen</string>\n    <string name=\"discard\">Ongedaan maken</string>\n    <string name=\"save\">Opslaan</string>\n    <string name=\"all\">Alle</string>\n    <string name=\"issuer\">Uitgever</string>\n    <string name=\"yandex_pin\">Pin (4–16 cijfers)</string>\n    <string name=\"motp_pin\">Pin (4 cijfers)</string>\n    <string name=\"suggested\">Voorgesteld</string>\n    <string name=\"usage_count\">Gebruikteller</string>\n    <string name=\"warning\">Waarschuwing</string>\n    <string name=\"pref_cat_appearance_app\">App</string>\n    <string name=\"pref_cat_appearance_entries\">Items</string>\n    <string name=\"pref_cat_backups_android\">Android</string>\n    <string name=\"pref_cat_backups_auto\">Automatische back-ups</string>\n    <string name=\"pref_section_behavior_title\">Gedrag</string>\n    <string name=\"pref_section_behavior_summary\">Het gedrag bij het gebruiken van de itemlijst aanpassen.</string>\n    <string name=\"pref_section_appearance_title\">Uiterlijk</string>\n    <string name=\"pref_section_appearance_summary\">Pas het thema, de taal en andere instellingen aan die van invloed zijn op het uiterlijk van de app.</string>\n    <string name=\"pref_section_security_title\">Beveiliging</string>\n    <string name=\"pref_section_security_summary\">Instellen van versleuteling, biometrische ontgrendeling, automatische vergrendeling en andere beveiligingsinstellingen.</string>\n    <string name=\"pref_section_import_export_title\">Importeren &amp; Exporteren</string>\n    <string name=\"pref_section_import_export_summary\">Back-ups van Aegis of andere authenticator-apps importeren. Maak handmatige export van je Aegis-kluis aan.</string>\n    <string name=\"pref_section_audit_log_title\">Auditlogboek</string>\n    <string name=\"pref_section_audit_log_summary\">Lijst met alle gerapporteerde belangrijke gebeurtenissen in de app bekijken.</string>\n    <string name=\"pref_section_backups_title\">Back-ups</string>\n    <string name=\"pref_section_backups_summary\">Automatische back-ups op een zelfgekozen locatie instellen, of meedoen met Androids cloud-back-upsysteem inschakelen.</string>\n    <string name=\"pref_section_icon_packs\">Pictogrampakketten</string>\n    <string name=\"pref_section_icon_packs_summary\">Pictogrampakketten beheren en importeren.</string>\n    <string name=\"pref_select_theme_title\">Thema</string>\n    <string name=\"pref_dynamic_colors_title\">Dynamische kleuren</string>\n    <string name=\"pref_dynamic_colors_summary\">Overlay toepassen op basis van de kleuren van je Android-thema</string>\n    <string name=\"pref_view_mode_title\">Weergavemodus</string>\n    <string name=\"pref_lang_title\">Taal</string>\n    <string name=\"pref_show_icons_title\">Pictogrammen tonen</string>\n    <string name=\"pref_show_icons_summary\">Pictogrammen weergeven naast elk item</string>\n    <string name=\"pref_code_group_size_title\">Codecijfergroepering</string>\n    <string name=\"pref_code_group_size_summary\">Selecteer aantal cijfers om de codes op te groeperen</string>\n    <string name=\"pref_account_name_position_title\">Accountnaam tonen</string>\n    <string name=\"pref_show_next_code_title\">Volgende code tonen</string>\n    <string name=\"pref_show_next_code_summary\">Genereer en toon de volgende code vooraf</string>\n    <string name=\"pref_expiration_state_title\">Geef aan wanneer codes op het punt staan te verlopen</string>\n    <string name=\"pref_expiration_state_summary\">Wijzig de kleur van de codes en laat ze knipperen wanneer ze op het punt staan te verlopen</string>\n    <string name=\"pref_expiration_state_fallback\">Wijzig de kleur van de codes wanneer ze op het punt staan te verlopen</string>\n    <string name=\"pref_shared_issuer_account_name_title\">Accountnaam alleen indien nodig tonen</string>\n    <string name=\"pref_shared_issuer_account_name_summary\">Accountnamen alleen tonen wanneer ze dezelfde uitgever hebben. Andere accountnamen worden verborgen.</string>\n    <string name=\"pref_account_name_position_summary_override\">Instelling wordt overschreven door de weergavemodus Tegels. Accountnaam wordt getoond onder de uitgever.</string>\n    <string name=\"pref_import_file_title\">Importeren vanuit een bestand</string>\n    <string name=\"pref_import_file_summary\">Importeer tokens vanuit een bestand</string>\n    <string name=\"pref_android_backups_title\">Android-cloudback-ups</string>\n    <string name=\"pref_android_backups_summary\">Laat de kluis van Aegis opnemen in Androids cloudback-upsysteem. Dit wordt alleen ondersteund voor versleutelde kluizen.</string>\n    <string name=\"pref_android_backups_hint\"><i>Device-to-device (D2D) back-ups zijn altijd toegestaan, ongeacht de instelling hierboven</i></string>\n    <string name=\"pref_backups_title\">Automatisch kluisback-up maken</string>\n    <string name=\"pref_backups_summary\">Automatisch back-ups maken van de kluis op externe opslag wanneer er wijzigingen zijn. Alleen ondersteund voor versleutelde kluizen.</string>\n    <string name=\"pref_backups_reminder_title\">Back-up herinnering</string>\n    <string name=\"pref_backups_reminder_summary\">Toon een herinnering om een back-up van je kluis te maken, als je nog geen back-up hebt van de laatste wijzigingen.</string>\n    <string name=\"pref_backups_reminder_dialog_title\">Back-up herinnering uitschakelen</string>\n    <string name=\"pref_backups_reminder_dialog_summary\">Uitschakelen van deze herinnering betekent dat Aegis je niet zal vertellen of je wijzigingen hebt die nog niet zijn geback-upt. Hiermee loop je het risico om de toegang tot tokens te verliezen. Weet je zeker dat je deze herinnering wil uitschakelen?</string>\n    <string name=\"pref_backups_versioning_strategy_title\">Back-upstrategie</string>\n    <string name=\"pref_backups_versioning_strategy_keep_x_versions\">Een aantal versies behouden</string>\n    <string name=\"pref_backups_versioning_strategy_single_backup\">Een enkele back-up</string>\n    <string name=\"pref_backups_versioning_strategy_single_backup_warning\">De geselecteerde back-upstrategie is niet betrouwbaar en wordt niet aanbevolen. Een enkele mislukte back-up kan leiden tot het verliezen van de enige back-up.</string>\n    <string name=\"pref_backups_versioning_strategy_dialog_title\">Selecteer een back-upstrategie</string>\n    <string name=\"pref_backups_location_title\">Back-uplocatie</string>\n    <string name=\"pref_backups_location_summary\">Back-ups zullen worden opgeslagen in</string>\n    <string name=\"pref_backup_location_summary\">Back-up zal worden opgeslagen in</string>\n    <string name=\"pref_backups_trigger_title\">Maak nu een back-up</string>\n    <string name=\"pref_backups_trigger_summary\">Handmatig een back-up aanzetten</string>\n    <string name=\"pref_backups_versions_title\">Aantal versies om te behouden</string>\n    <string name=\"pref_backups_versions_infinite\">\\u221E</string>\n    <plurals name=\"pref_backups_versions_summary\">\n        <item quantity=\"one\">Behoud %1$d versie van de back-up</item>\n        <item quantity=\"other\">Behoud %1$d versies van de back-up</item>\n    </plurals>\n    <string name=\"pref_backups_versions_infinite_summary\">Oneindig aantal versies van de back-up bewaren</string>\n    <string name=\"pref_import_app_title\">Importeren vanuit een app</string>\n    <string name=\"pref_import_app_summary\">Importeer tokens vanuit een app (vereist root-access)</string>\n    <string name=\"pref_export_title\">Exporteren</string>\n    <string name=\"pref_export_summary\">Kluis exporteren</string>\n    <string name=\"pref_password_reminder_title\">Wachtwoordherinnering</string>\n    <string name=\"pref_google_auth_export_title\">Exporteren voor Google Authenticator</string>\n    <string name=\"pref_google_auth_export_descriptor\">Genereert QR-codes die werken met Google Authenticator</string>\n    <string name=\"pref_google_auth_export_no_data\">Geen gegevens om te exporteren</string>\n    <plurals name=\"pref_google_auth_export_incompatible_entries\">\n        <item quantity=\"one\">%d incompatibel item overgeslagen</item>\n        <item quantity=\"other\">%d incompatibele items overgeslagen</item>\n    </plurals>\n    <string name=\"pref_password_reminder_summary\">Toon een herinnering %s om het wachtwoord in te voeren, zodat je deze niet vergeet.</string>\n    <string name=\"pref_password_reminder_summary_disabled\">Uitgeschakeld</string>\n    <string name=\"pref_secure_screen_title\">Schermbeveiliging</string>\n    <string name=\"pref_secure_screen_summary\">Blokkeer screenshots en andere pogingen tot schermopnamen binnen deze app</string>\n    <string name=\"pref_tap_to_reveal_title\">Aantikken om te tonen</string>\n    <string name=\"pref_tap_to_reveal_summary\">Codes standaard verbergen. Tik items aan om de code te tonen.</string>\n    <string name=\"pref_tap_to_reveal_time_title\">Time-out voor aantikken om te onthullen</string>\n    <string name=\"pref_auto_lock_title\">Automatisch vergrendelen</string>\n    <string name=\"pref_auto_lock_summary\">Wanneer %s</string>\n    <string name=\"pref_auto_lock_summary_disabled\">Uitgeschakeld</string>\n    <string name=\"pref_auto_lock_prompt\">Aegis automatisch vergrendelen wanneer</string>\n    <string name=\"pref_auto_lock_type_back_button\">De terugknop is ingedrukt</string>\n    <string name=\"pref_auto_lock_type_minimize\">De app is geminimaliseerd</string>\n    <string name=\"pref_auto_lock_type_device_lock\">Het apparaat is vergrendeld</string>\n    <string name=\"pref_backup_password_category\">Back-up maken &amp; exporteren</string>\n    <string name=\"pref_backup_password_title\">Apart wachtwoord back-up &amp; export</string>\n    <string name=\"pref_backup_password_summary\">Indien ingeschakeld, kan het wachtwoord voor ontgrendelen van de app niet meer worden gebruikt om back-ups en exportbestanden te decoderen.</string>\n    <string name=\"pref_backup_password_change_title\">Wachtwoord wijzigen voor back-up maken &amp; exporteren</string>\n    <string name=\"pref_backup_password_change_summary\">Stel een nieuw wachtwoord in voor het versleutelen van de kluis tijdens back-ups maken en exporteren.</string>\n    <string name=\"pref_encryption_title\">Versleuteling</string>\n    <string name=\"pref_encryption_summary\">Versleutel de kluis en ontgrendel deze met een wachtwoord of biometrie</string>\n    <string name=\"pref_biometrics_title\">Ontgrendelen met biometrie</string>\n    <string name=\"pref_biometrics_summary\">Sta biometrische authenticatie toe om de kluis te ontgrendelen</string>\n    <string name=\"pref_search_behavior_summary\">Zoek door: %s</string>\n    <string name=\"pref_search_behavior_prompt\">Zoek in een van de volgende velden</string>\n    <string name=\"pref_search_behavior_type_name\">Naam</string>\n    <string name=\"pref_search_behavior_type_issuer\">Uitgever</string>\n    <string name=\"pref_search_behavior_type_note\">Notitie</string>\n    <string name=\"pref_search_behavior_type_groups\">Groepen</string>\n    <string name=\"pref_set_password_title\">Wachtwoord wijzigen</string>\n    <string name=\"pref_set_password_summary\">Stel een nieuw wachtwoord in waarmee je de kluis kunt ontgrendelen</string>\n    <string name=\"no_events_title\">Geen gerapporteerde gebeurtenissen</string>\n    <string name=\"no_events_description\">Geen belangrijke gebeurtenissen in de app gerapporteerd</string>\n    <string name=\"event_title_vault_unlocked\">Kluis ontgrendeld</string>\n    <string name=\"event_description_vault_unlocked\">De kluis is met succes ontgrendeld</string>\n    <string name=\"event_title_backup_created\">Back-up gemaakt</string>\n    <string name=\"event_description_backup_created\">Er is met succes een back-up van de kluis gemaakt</string>\n    <string name=\"event_title_android_backup_created\">Back-up gemaakt door Android</string>\n    <string name=\"event_description_android_backup_created\">Er is met succes een back-up van de kluis gemaakt door Android</string>\n    <string name=\"event_title_vault_exported\">Kluis geëxporteerd</string>\n    <string name=\"event_description_vault_exported\">Een kopie van de kluis is geëxporteerd</string>\n    <string name=\"event_title_entry_shared\">Item gedeeld</string>\n    <string name=\"event_description_entry_shared\">Een item is gedeeld</string>\n    <string name=\"event_title_vault_unlock_failed_password\">Kluis ontgrendelen mislukt (wachtwoord)</string>\n    <string name=\"event_description_vault_unlock_failed_password\">Een poging om de kluis met een wachtwoord te ontgrendelen is mislukt</string>\n    <string name=\"event_title_vault_unlock_failed_biometrics\">Kluis ontgrendelen mislukt (biometrie)</string>\n    <string name=\"event_description_vault_unlock_failed_biometrics\">Een poging om de kluis te ontgrendelen met biometrie is mislukt</string>\n    <string name=\"event_unknown\">Onbekende gebeurtenis</string>\n    <string name=\"audit_log_entry_deleted\">(verwijderd)</string>\n    <string name=\"today_at_time\">Vandaag om %1$s</string>\n    <string name=\"day_of_week_at_time\">%1$s om %2$s</string>\n    <string name=\"export_encrypted\">Kluis versleutelen</string>\n    <string name=\"export_help\">Deze actie zal de kluis exporteren uit de interne opslag van Aegis. Selecteer het formaat waarin je de export wilt:</string>\n    <string name=\"export_warning_unencrypted\">Je staat op het punt een onversleutelde kopie van de Aegis-kluis te exporteren. <b>Dit wordt niet aanbevolen</b>.</string>\n    <string name=\"export_warning_password\">Exporten worden versleuteld met een apart wachtwoord ingesteld in de beveiligingsinstellingen.</string>\n    <string name=\"understand_risk_accept\">Ik begrijp het risico</string>\n    <string name=\"export_format_aegis\">Aegis (.JSON)</string>\n    <string name=\"export_format_google_auth_uri\">Tekstbestand (.TXT)</string>\n    <string name=\"export_format_html\">Webpagina (.HTML)</string>\n    <string name=\"export_format_hint\">Bestandsformaat</string>\n    <string name=\"export_all_groups\">Alle groepen exporteren</string>\n    <string name=\"export_choose_groups\">Groepen kiezen om te exporteren</string>\n    <plurals name=\"export_groups_selected_count\">\n        <item quantity=\"one\">%d groep geselecteerd</item>\n        <item quantity=\"other\">%d groepen geselecteerd</item>\n    </plurals>\n    <string name=\"export_no_groups_selected\">Geen groepen gekozen om te exporteren</string>\n    <string name=\"export_html_title\" comment=\"The title of an HTML export document\">Aegis Authenticator Export</string>\n    <string name=\"choose_authentication_method\">Beveiliging</string>\n    <string name=\"authentication_method_explanation\">Aegis is een op veiligheid gerichte 2FA-applicatie. Tokens worden opgeslagen in een kluis, die optioneel kan worden versleuteld met een wachtwoord naar keuze. Als een aanvaller je versleutelde kluisbestand in handen krijgt, zal deze geen toegang hebben tot de inhoud zonder het wachtwoord te kennen.\\n\\nWij hebben de optie gekozen die volgens ons het beste past bij jouw apparaat.</string>\n    <string name=\"authentication_method_none\">Geen</string>\n    <string name=\"authentication_method_none_description\">Je hebt geen wachtwoord nodig om de kluis te ontgrendelen en de kluis zal niet worden versleuteld. <b>Deze optie wordt niet aanbevolen</b>.</string>\n    <string name=\"authentication_method_password\">Wachtwoord</string>\n    <string name=\"authentication_method_password_description\">Een wachtwoord is nodig om de kluis te ontgrendelen.</string>\n    <string name=\"authentication_method_password_explanation\">Waarschuwing: Als je je wachtwoord vergeet, verlies je permanent toegang tot je tokens. Er is geen manier om deze te herstellen zonder het wachtwoord.</string>\n    <string name=\"authentication_method_biometrics\">Biometrie</string>\n    <string name=\"authentication_method_biometrics_description\">Naast een wachtwoord kan biometrie die geregistreerd is op dit apparaat, zoals een vingerafdruk of je gezicht, gebruikt worden om de kluis te ontgrendelen.</string>\n    <string name=\"authentication\">Ontgrendel de kluis</string>\n    <string name=\"authentication_multiline\" comment=\"The newline in the middle is used for aesthetic purposes\">Ontgrendel\\nde kluis</string>\n    <string name=\"auth_use_biometrics\">Of tik hier om <font fgcolor=\"#FF0D86C1\">biometrie</font> te gebruiken</string>\n    <string name=\"set_password\">Vul een wachtwoord in</string>\n    <string name=\"set_group\">Vul een groepsnaam in</string>\n    <string name=\"set_number\">Kies een getal</string>\n    <string name=\"set_password_confirm\">Bevestig het wachtwoord</string>\n    <string name=\"invalid_password\">Het wachtwoord is onjuist</string>\n    <string name=\"invalidated_biometrics\">Er is een verandering in de beveiligingsinstellingen van je toestel gedetecteerd. Ga naar \\\"Aegis -&gt; Instellingen -&gt; Beveiliging -&gt; Ontgrendelen met biometrie\\\" om biometrische verificatie weer in te schakelen.</string>\n    <string name=\"password_reminder\">Voer je wachtwoord in. We vragen je af en toe om dit te doen, zodat je het niet vergeet.</string>\n    <string name=\"password_reminder_dialog_title\">Standaard biometrisch ontgrendelen</string>\n    <string name=\"password_reminder_dialog_message\">We vragen je af en toe om je wachtwoord in te voeren zodat je het niet vergeet en je de toegang tot je kluis verliest. Nadat je het wachtwoord hebt ingevoerd, zal Aegis teruggaan naar standaard biometrisch ontgrendelen, totdat het tijd is voor de volgende herinnering.</string>\n    <string name=\"password_reminder_freq_never\">Nooit</string>\n    <string name=\"password_reminder_freq_weekly\">Wekelijks</string>\n    <string name=\"password_reminder_freq_biweekly\">Tweewekelijks</string>\n    <string name=\"password_reminder_freq_monthly\">Maandelijks</string>\n    <string name=\"password_reminder_freq_quarterly\">Driemaandelijks</string>\n    <string name=\"enter_password_2fas_message\">Het lijkt erop dat deze 2FAS back-up is versleuteld. Voer het wachtwoord hieronder in.</string>\n    <string name=\"enter_password_authy_message\">Het lijkt erop dat je Authy-tokens zijn versleuteld. Sluit Aegis, open Authy en ontgrendel de tokens met je wachtwoord. In plaats daarvan kan Aegis ook proberen om je Authy-tokens te decoderen als je hieronder je wachtwoord invult.</string>\n    <string name=\"enter_password_aegis_title\">Voer het importwachtwoord in</string>\n    <string name=\"period_hint\">Tijd (seconden)</string>\n    <string name=\"algorithm_hint\">Hash-functie</string>\n    <string name=\"type\">Type</string>\n    <string name=\"share\">Delen</string>\n    <string name=\"yes\">Ja</string>\n    <string name=\"no\">Nee</string>\n    <string name=\"undo\">Ongedaan maken</string>\n    <string name=\"unlock\">Ontgrendel</string>\n    <string name=\"advanced\">Geavanceerd</string>\n    <string name=\"counter\">Teller</string>\n    <string name=\"digits\">Cijfers</string>\n    <string name=\"secret\">Sleutel</string>\n    <string name=\"scan\">Scan QR-code</string>\n    <string name=\"scan_image\">Scan afbeelding</string>\n    <string name=\"enter_manually\">Handmatig invoeren</string>\n    <string name=\"set_up_biometric\">Biometrische ontgrendeling instellen</string>\n    <string name=\"copy\">Kopiëren</string>\n    <string name=\"edit\">Bewerken</string>\n    <string name=\"select_all\">Alles selecteren</string>\n    <string name=\"assign_icons\">Pictogrammen toewijzen</string>\n    <string name=\"assign_groups\">Toewijzen aan groep</string>\n    <string name=\"assign_groups_dialog_summary\">Selecteer een groep waaraan u de geselecteerde items wilt toewijzen.</string>\n    <string name=\"assign_groups_dialog_dropdown\">Groep selecteren</string>\n    <string name=\"favorite\" comment=\"Verb\">Aan favorieten toevoegen</string>\n    <string name=\"unfavorite\" comment=\"Verb\">Uit favorieten verwijderen</string>\n    <string name=\"error_all_caps\">FOUT</string>\n    <string name=\"password\">Wachtwoord</string>\n    <string name=\"confirm_password\">Wachtwoord bevestigen</string>\n    <string name=\"show_password\">Wachtwoord tonen</string>\n    <string name=\"new_entry\">Nieuw item</string>\n    <string name=\"add_new_entry\">Nieuw item toevoegen</string>\n    <string name=\"unlock_vault_error\">Kluis kon niet worden ontgrendeld</string>\n    <string name=\"unlock_vault_error_description\">Wachtwoord onjuist. Controleer of je het wachtwoord correct hebt ingevoerd.</string>\n    <string name=\"password_equality_error\">Wachtwoorden moeten overeen komen en mogen niet leeg zijn</string>\n    <string name=\"snackbar_authentication_method\">Kies een inlogmethode</string>\n    <string name=\"encrypting_vault\">De kluis wordt versleuteld</string>\n    <string name=\"exporting_vault\">De kluis wordt geëxporteerd</string>\n    <string name=\"optimizing_icon\">Pictogram wordt geoptimaliseerd</string>\n    <string name=\"optimizing_icon_multiple\">Pictogrammen %1$d/%2$d worden geoptimaliseerd</string>\n    <string name=\"reading_file\">Bestand lezen</string>\n    <string name=\"requesting_root_access\">Root-toegang wordt aangevraagd</string>\n    <string name=\"analyzing_qr\">QR-code analyseren</string>\n    <string name=\"analyzing_qr_multiple\">QR-code analyseren %1$d/%2$d (%3$s)</string>\n    <plurals name=\"added_new_entries\">\n        <item quantity=\"one\">%d nieuwe items aan de kluis toegevoegd</item>\n        <item quantity=\"other\">%d nieuwe items aan de kluis toegevoegd</item>\n    </plurals>\n    <string name=\"importing_icon_pack\">Pictogrampakket importeren</string>\n    <string name=\"delete_entry\">Item verwijderen</string>\n    <string name=\"delete_entry_description\">Weet je zeker dat je dit item wilt verwijderen?</string>\n    <string name=\"delete_entry_explanation\">Deze actie schakelt 2FA niet uit voor:\\n<b>%s</b>\\n\\n. Zorg ervoor dat je 2FA hebt uitgeschakeld of dat je een andere manier hebt om codes voor deze dienst te genereren, om te voorkomen dat je toegang verliest.</string>\n    <string name=\"delete_entries\">Items verwijderen</string>\n    <plurals name=\"delete_entries_description\">\n        <item quantity=\"one\">Weet je zeker dat je dit item wilt verwijderen?</item>\n        <item quantity=\"other\">Weet je zeker dat je %d items wilt verwijderen?</item>\n    </plurals>\n    <string name=\"discard_changes\">Wijzigingen ongedaan maken?</string>\n    <string name=\"discard_changes_description\">Je wijzigingen zijn niet opgeslagen</string>\n    <string name=\"saving_profile_error\">Fout bij opslaan profiel</string>\n    <string name=\"saving_assign_icons_error\">Fout bij toewijzen pictogrammen</string>\n    <string name=\"welcome\">Welkom</string>\n    <string name=\"app_description\">Aegis is een gratis en veilige open-source 2FA-app.</string>\n    <string name=\"setup_completed\">Configuratie voltooid</string>\n    <string name=\"setup_completed_description\">Aegis is geconfigureerd en is klaar voor gebruik.</string>\n    <string name=\"vault_not_found\">Kluis niet gevonden, configuratie wordt gestart…</string>\n    <string name=\"copied\">Gekopieerd</string>\n    <string name=\"errors_copied\">Fouten zijn naar klembord gekopieerd</string>\n    <string name=\"version_copied\">Versie is naar het klembord gekopieerd</string>\n    <string name=\"error_required_field\">Dit veld is vereist</string>\n    <string name=\"error_occurred\">Er is een fout opgetreden</string>\n    <string name=\"decryption_error\">Er is een fout opgetreden tijdens het ontgrendelen van de kluis</string>\n    <string name=\"decryption_corrupt_error\">Er is een fout opgetreden tijdens het ontgrendelen van de kluis. Het kluisbestand kan beschadigd zijn.</string>\n    <string name=\"saving_error\">Er is een fout opgetreden tijdens het opslaan van de kluis</string>\n    <string name=\"vault_init_error\">Er is een fout opgetreden bij het initialiseren van de kluis</string>\n    <string name=\"vault_load_error\">Er is een fout opgetreden tijdens het inladen van de kluis vanuit de opslag</string>\n    <string name=\"biometric_decrypt_error\">Er is een fout opgetreden tijdens het decoderen van de kluis met biometrische verificatie. Dit gebeurt meestal alleen als de beveiligingsinstellingen van je apparaat zijn gewijzigd. Ontgrendel de kluis met je wachtwoord en configureer biometrische authenticatie opnieuw in de instellingen van Aegis.</string>\n    <string name=\"biometric_init_error\">Er is een fout opgetreden tijdens het instellen van biometrische verificatie. Dit gebeurt meestal alleen als de beveiligingsinstellingen van je apparaat zijn gewijzigd. Ontgrendel de kluis met je wachtwoord en configureer biometrische authenticatie opnieuw in de instellingen van Aegis.</string>\n    <string name=\"disable_encryption\">Versleuteling uitschakelen</string>\n    <string name=\"disable_encryption_description\">Weet je zeker dat je versleuteling wil uitschakelen? Hierdoor zal de kluis in platte tekst worden opgeslagen. <b>Automatische back-ups worden ook uitgeschakeld</b>.</string>\n    <string name=\"enable_encryption_error\">Er is een fout opgetreden bij het inschakelen van versleuteling</string>\n    <string name=\"disable_encryption_error\">Er is een fout opgetreden bij het uitschakelen van versleuteling</string>\n    <string name=\"backup_successful\">Plannen van de back-up is geslaagd</string>\n    <string name=\"backup_error\">Er is een fout opgetreden bij maken van een back-up</string>\n    <string name=\"backup_status_success\">De meest recent geslaagde back-up: %s</string>\n    <string name=\"backup_status_failed\">De meest recent mislukte back-up: %s</string>\n    <string name=\"backup_status_none\">Er zijn nog geen back-ups gemaakt</string>\n    <string name=\"backup_warning_password\">Back-ups worden versleuteld met een apart wachtwoord ingesteld in de beveiligingsinstellingen.</string>\n    <string name=\"documentsui_error\">DocumentsUI lijkt te ontbreken op je apparaat. Dit is een belangrijk systeemonderdeel, nodig voor het selecteren en maken van documenten. Als je een tool hebt gebruikt om je apparaat te &quot;debloaten&quot; heb je het mogelijk per ongeluk verwijderd en zal je het opnieuw moeten installeren.</string>\n    <string name=\"icon_pack_import_error\">Er is een fout opgetreden tijdens het importeren van een pictogrampakket</string>\n    <string name=\"icon_pack_import_exists_error\">Het pictogrampakket dat je probeert te importeren bestaat al. Wil je het overschrijven?</string>\n    <string name=\"icon_pack_delete_error\">Er is een fout opgetreden tijdens het verwijderen van een pictogrampakket</string>\n    <plurals name=\"icon_pack_info\">\n        <item quantity=\"one\">%d pictogram</item>\n        <item quantity=\"other\">%d pictogrammen</item>\n    </plurals>\n    <string name=\"icon_custom\">Aangepast</string>\n    <string name=\"permission_denied\">Toestemming geweigerd</string>\n    <string name=\"andotp_new_format\">Nieuw formaat (v0.6.3 of nieuwer) </string>\n    <string name=\"andotp_old_format\">Oud formaat (v0.6.2 of ouder) </string>\n    <string name=\"choose_andotp_importer\">Welk formaat heeft het andOTP-back-upbestand?</string>\n    <string name=\"choose_totpauth_importer\">Is deze TOTP Authenticator-back-up versleuteld met een wachtwoord?</string>\n    <string name=\"choose_application\">Selecteer de applicatie waaruit je wil importeren</string>\n    <string name=\"choose_theme\">Selecteer je gewenste thema</string>\n    <string name=\"choose_account_name_position\">Selecteer de plaats van de accountnaam</string>\n    <string name=\"choose_view_mode\">Selecteer je gewenste weergavemodus</string>\n    <string name=\"choose_copy_behavior\">Selecteer het gedrag voor kopiëren</string>\n    <string name=\"parsing_file_error\">Er is een fout opgetreden tijdens het vertalen van het bestand</string>\n    <string name=\"file_not_found\">Fout: Bestand niet gevonden</string>\n    <string name=\"reading_file_error\">Er is een fout opgetreden tijdens het lezen van het bestand</string>\n    <string name=\"app_lookup_error\">Fout: App is niet geïnstalleerd</string>\n    <string name=\"app_version_error\">De geïnstalleerde versie van %s wordt niet ondersteund. Recente versies zijn begonnen met het versleutelen van enkele bestanden in de interne opslagmap. Hierdoor heeft Aegis geen toegang tot de informatie die nodig is om te importeren. Importeren zal waarschijnlijk een fout opleveren. Wil je toch doorgaan?</string>\n    <string name=\"root_error\">Fout: Kan geen root-toegang verkrijgen</string>\n    <plurals name=\"imported_entries_count\">\n        <item quantity=\"one\">%d item geïmporteerd</item>\n        <item quantity=\"other\">%d items geïmporteerd</item>\n    </plurals>\n    <plurals name=\"entries_shown\">\n        <item quantity=\"one\">%d item</item>\n        <item quantity=\"other\">%d items</item>\n    </plurals>\n    <string name=\"intro_import_error_title\">Fout opgetreden tijdens het importeren van de kluis</string>\n    <string name=\"import_error_title\">Er zijn fouten opgetreden tijdens het importeren</string>\n    <string name=\"exporting_vault_error\">Er is een fout opgetreden tijdens het exporteren van de kluis</string>\n    <string name=\"exported_vault\">De kluis is geëxporteerd</string>\n    <string name=\"encryption_set_password_error\">Er is een fout opgetreden tijdens het instellen van het wachtwoord.</string>\n    <string name=\"encryption_enable_biometrics_error\">Er is een fout opgetreden bij het aanzetten van biometrisch ontgrendelen. Sommige apparaten hebben een slechte implementatie van biometrische authenticatie, die van jou is er waarschijnlijk een van. Overweeg om alleen een wachtwoord te gebruiken.</string>\n    <string name=\"no_cameras_available\">Geen camera’s beschikbaar</string>\n    <string name=\"read_qr_error\">Er is een fout opgetreden tijdens het lezen van de QR-code</string>\n    <string name=\"read_qr_error_phonefactor\">Aegis is niet compatibel met het eigen 2FA-algoritme van Microsoft. Zorg ervoor dat je ‘Setup applicatie zonder meldingen’ selecteert bij het configureren van 2FA in Office 365.</string>\n    <string name=\"partial_google_auth_import\">Onvolledige Google Authenticator-export gedetecteerd</string>\n    <string name=\"partial_google_auth_import_warning\">Enkele QR-codes ontbreken in de import. De volgende codes zijn niet gevonden:\\n\\n<b>%s</b>\\n\\nJe kan doorgaan met het importeren van deze gedeeltelijke export, maar we raden aan het opnieuw te proberen met alle QR-codes, zodat je niet het risico loopt de toegang tot tokens te verliezen.</string>\n    <string name=\"missing_qr_code_descriptor\">• QR-code %d</string>\n    <plurals name=\"import_partial_export_anyway\">\n        <item quantity=\"one\">%d token toch importeren</item>\n        <item quantity=\"other\">%d tokens toch importeren</item>\n    </plurals>\n    <string name=\"import_google_auth_failure\">Importeren van Google Authenticator-export mislukt</string>\n    <string name=\"unrelated_google_auth_batches_error\">Export bevat informatie voor een niet gerelateerde batch. Probeer 1 batch tegelijk te importeren.</string>\n    <string name=\"no_tokens_can_be_imported\">Hierdoor kunnen geen tokens worden geïmporteerd</string>\n    <string name=\"unlocking_vault\">Kluis wordt ontgrendeld</string>\n    <string name=\"rename_group\">Groep hernoemen</string>\n    <string name=\"no_group_selection\">Als een item niet in een groep zit, kan dit worden gevonden onder ‘Geen groep’.</string>\n    <string name=\"remove_group\">Groep verwijderen</string>\n    <string name=\"remove_group_description\">Weet je zeker dat je deze groep wilt verwijderen? Alle items binnen deze groep worden automatisch verplaatst naar ‘Geen groep’.</string>\n    <string name=\"remove_unused_groups\">Ongebruikte groepen verwijderen</string>\n    <string name=\"remove_unused_groups_description\">Weet je zeker dat je alle groepen, die niet aan een item zijn toegewezen, wilt verwijderen?</string>\n    <string name=\"remove_icon_pack\">Pictogrammenpakket verwijderen</string>\n    <string name=\"remove_icon_pack_description\">Weet je zeker dat je dit pictogrampakket wil verwijderen? Items die pictogrammen uit dit pakket gebruiken, worden niet beïnvloed.</string>\n    <string name=\"details\">Details</string>\n    <string name=\"show_error_details\">Details van fout tonen</string>\n    <string name=\"lock\">Vergrendel</string>\n    <string name=\"name\">Naam</string>\n    <string name=\"no_group\">Geen groep</string>\n    <string name=\"sort\" comment=\"Title of the Sort button in the top action bar of the main view\">Sorteren</string>\n    <string name=\"sort_alphabetically\">Uitgever (A t/m Z)</string>\n    <string name=\"sort_alphabetically_reverse\">Uitgever (Z t/m A)</string>\n    <string name=\"sort_alphabetically_name\">Account (A t/m Z)</string>\n    <string name=\"sort_alphabetically_name_reverse\">Account (Z t/m A)</string>\n    <string name=\"sort_usage_count\">Gebruikteller</string>\n    <string name=\"sort_last_used\">Laatst gebruikt</string>\n    <string name=\"sort_custom\">Aangepast</string>\n    <string name=\"last_used\">Laatst gebruikt</string>\n    <string name=\"last_used_never\">nooit</string>\n    <string name=\"new_group\">Nieuwe groep…</string>\n    <string name=\"group\">Groep</string>\n    <string name=\"group_name_hint\">Groepsnaam</string>\n    <string name=\"preference_manage_groups\">Groepen bewerken</string>\n    <string name=\"preference_manage_groups_summary\">Beheer en verwijder hier je groepen</string>\n    <string name=\"preference_reset_usage_count\">Gebruikteller resetten</string>\n    <string name=\"preference_reset_usage_count_summary\">Reset de gebruikteller van elk item in je kluis</string>\n    <string name=\"preference_reset_usage_count_dialog\">Weet je zeker dat je de gebruikteller van alle items in de kluis op 0 wilt zetten?</string>\n    <string name=\"note\" comment=\"Users can add a note to an entry\">Notitie</string>\n    <string name=\"clear\">Wissen</string>\n    <string name=\"dialog_duplicate_entry_title\" comment=\"'Duplicate' is a noun here\">Item bestaat al</string>\n    <string name=\"dialog_duplicate_entry_message\">Dit item heeft dezelfde naam en uitgever als een of meer bestaande items. Hoe wil je verder gaan?</string>\n    <string name=\"dialog_duplicate_entry_overwrite_title\">Bestaande item(s) overschrijven</string>\n    <string name=\"dialog_duplicate_entry_overwrite_subtitle\">Vervang de bestaande items door de nieuwe. Deze actie kan niet ongedaan worden gemaakt</string>\n    <string name=\"dialog_duplicate_entry_suffix_title\">Achtervoegsel toevoegen</string>\n    <string name=\"dialog_duplicate_entry_suffix_subtitle\">Voeg een achtervoegsel toe aan de naam van het nieuwe item. De nieuwe naam wordt %s</string>\n    <string name=\"dialog_duplicate_entry_cancel_title\">Opslaan annuleren</string>\n    <string name=\"dialog_duplicate_entry_cancel_subtitle\">Hiermee kan je het item bewerken voordat je het opnieuw probeert op te slaan</string>\n    <plurals name=\"dialog_duplicate_entry_overwrite_dialog_message\">\n        <item quantity=\"one\">Weet je zeker dat je %d item met de volgende naam wil verwijderen:\\n\\n%s - %s</item>\n        <item quantity=\"other\">Weet je zeker dat je %d items met de volgende naam wil verwijderen:\\n\\n%s - %s</item>\n    </plurals>\n    <string name=\"dialog_duplicate_entry_overwrite_dialog_title\">Verwijdering bevestigen</string>\n    <string name=\"pref_haptic_feedback_summary\">Laat je apparaat trillen wanneer de codes verversen</string>\n    <string name=\"pref_haptic_feedback_title\">Haptische feedback</string>\n    <string name=\"pref_highlight_entry_title\">Codes markeren na aantikken</string>\n    <string name=\"pref_highlight_entry_summary\">Maak codes makkelijker te onderscheiden van elkaar door ze tijdelijk te markeren na het aantikken</string>\n    <string name=\"pref_groups_multiselect_title\">Meerdere groepen selecteren</string>\n    <string name=\"pref_groups_multiselect_summary\">Selectie van meerdere groepen tegelijkertijd toestaan</string>\n    <string name=\"pref_minimize_on_copy_title\">Na kopiëren minimaliseren</string>\n    <string name=\"pref_minimize_on_copy_summary\">Na kopiëren van een code de app minimaliseren</string>\n    <string name=\"pref_copy_behavior_title\">Codes naar het klembord kopiëren</string>\n    <string name=\"pref_search_behavior_title\">Zoekgedrag</string>\n    <string name=\"pref_pause_entry_title\">Codes bevriezen na aantikken</string>\n    <string name=\"pref_pause_entry_summary\">Pauzeer automatisch verversen van codes door erop te tikken. Codes zullen niet worden bijgewerkt zolang ze gefocust zijn. Vereist ‘Codes markeren na aantikken’ of ‘Aantikken om te laten zien’.</string>\n    <string name=\"pin_keyboard_description\">Voer je wachtwoord in om het PIN-toetsenbord in te schakelen. Let op: dit werkt alleen als je wachtwoord uit cijfers bestaat</string>\n    <string name=\"pin_keyboard_error\">Fout bij inschakelen van PIN-toetsenbord</string>\n    <string name=\"pin_keyboard_error_description\">Het is niet mogelijk om PIN-toetsenbord in te stellen. Het wachtwoord mag alleen uit cijfers bestaan.</string>\n    <string name=\"pin_keyboard_disabled\">Wachtwoord gewijzigd. Het PIN-toetsenbord wordt niet meer weergegeven.</string>\n    <string name=\"selected\">Geselecteerd</string>\n    <string name=\"dark_theme_title\">Donker thema</string>\n    <string name=\"light_theme_title\">Licht thema</string>\n    <string name=\"amoled_theme_title\">AMOLED-thema</string>\n    <string name=\"system_theme_title\">Ingesteld door batterijbesparing</string>\n    <string name=\"system_amoled_theme_title\">Ingesteld door batterijbesparing (AMOLED)</string>\n    <string name=\"normal_viewmode_title\">Normaal</string>\n    <string name=\"compact_mode_title\">Compact</string>\n    <string name=\"small_mode_title\">Klein</string>\n    <string name=\"tiles_mode_title\">Tegels</string>\n    <string name=\"unknown_issuer\">Onbekende uitgever</string>\n    <string name=\"unknown_account_name\">Onbekende accountnaam</string>\n    <plurals name=\"import_error_dialog\">\n        <item quantity=\"one\">Aegis kan %d token niet importeren. Dit token zal worden overgeslagen. Druk op ‘details’ voor meer informatie over de fouten.</item>\n        <item quantity=\"other\">Aegis kan %d tokens niet importeren. Deze tokens zullen worden overgeslagen. Druk op ‘details’ voor meer informatie over de fouten.</item>\n    </plurals>\n    <string name=\"unable_to_process_deeplink\">Kan de deeplink niet verwerken</string>\n    <string name=\"unable_to_read_qrcode_file\">Kan de QR-code van bestand niet lezen en verwerken: %s.</string>\n    <string name=\"unable_to_process_shared_text\">Kan gedeelde tekst niet verwerken als OTP</string>\n    <string name=\"unable_to_read_qrcode_files\">Kan sommige QR-codes niet lezen en verwerken. Alleen %1$d/%2$d items worden geïmporteerd.</string>\n    <string name=\"unable_to_generate_qrcode\">Kan de QR-code niet genereren</string>\n    <string name=\"select_picture\">Foto selecteren</string>\n    <string name=\"select_icon\">Icoon selecteren</string>\n    <string name=\"tile_open_vault\" comment=\"label for a quick settings tile that opens the app when tapped\">Kluis openen</string>\n    <string name=\"tile_open_scanner\" comment=\"label for a quick settings tile that opens the QR code scanner when tapped\">Scanner openen</string>\n    <string name=\"toggle_checkboxes\">Selectie omdraaien</string>\n    <string name=\"search\">Zoeken</string>\n    <string name=\"channel_name_lock_status\">Vergrendelstatus</string>\n    <string name=\"channel_description_lock_status\">Aegis kan een permanente melding tonen wanneer de kluis is vergrendeld</string>\n    <string name=\"vault_unlocked_state\">Kluis is ontgrendeld. Tik hier om te vergrendelen.</string>\n    <string name=\"version\">Versie</string>\n    <string name=\"changelog\">Wijzigingen</string>\n    <string name=\"whats_new\">Vernieuwingen</string>\n    <string name=\"github_description\">Broncode, problemen en informatie</string>\n    <string name=\"license\">Licentie</string>\n    <string name=\"license_description\">Aegis Authenticator is gelicenseerd onder de GPLv3</string>\n    <string name=\"third_party_licenses\">Licenties van derden</string>\n    <string name=\"third_party_licenses_description\">Licenties van bibliotheken van derden gebruikt door Aegis</string>\n    <string name=\"country_netherlands\">Nederland</string>\n    <string name=\"email_us\">Schrijf een e-mailbericht</string>\n    <string name=\"visit_website\">Bekijk de website</string>\n    <string name=\"about_support\">Ondersteuning</string>\n    <string name=\"support_rate\">Beoordeel</string>\n    <string name=\"support_rate_description\">Steun ons door een review in de Google Play Store achter te laten</string>\n    <string name=\"webview_error\">Dit apparaat ondersteunt geen webview, welke nodig is om de wijzigingen te bekijken. Het mist een systeemcomponent.</string>\n    <string name=\"email\">E-mailadres</string>\n    <string name=\"time_sync_warning_title\">Automatische tijdsynchronisatie</string>\n    <string name=\"time_sync_warning_message\">Aegis is afhankelijk van gesynchroniseerde systeemtijd om juiste codes te genereren. Een afwijking van slechts enkele seconden kan leiden tot onjuiste codes. Het lijkt erop dat je apparaat niet is ingesteld om de tijd automatisch te synchroniseren. Wil je dit nu doen?</string>\n    <string name=\"time_sync_warning_disable\">Stop met me te waarschuwen. Ik weet wat ik doe.</string>\n    <string name=\"google_qr_export_unrelated\">Ongerelateerde QR-code gevonden. Probeer de scanner opnieuw te starten.</string>\n    <plurals name=\"google_qr_export_scanned\">\n        <item quantity=\"one\">%1$d/%2$d QR-codes gescand</item>\n        <item quantity=\"other\">%1$d/%2$d QR-codes gescand</item>\n    </plurals>\n    <string name=\"google_qr_export_unexpected\">QR-code #%1$d verwacht, in plaats daarvan #%2$d gescand</string>\n    <string name=\"backup_error_bar_message\"><b>Kluis back-up onlangs mislukt</b></string>\n    <string name=\"backup_error_dialog_details\" comment=\"The first parameter is the type of backup (e.g. built-in or Android backup). The second parameter is an elapsed time in the style of 'x seconds/minutes/days ago'.\">        Een recente back-up van de kluis met %1$s mislukte omdat er iets misging. De back-uppoging was %2$s. Controleer de back-upinstellingen om zeker te zijn dat back-ups met succes kunnen worden voltooid.\n    </string>\n    <string name=\"backup_permission_error_dialog_details\" comment=\"The first parameter is the type of backup (e.g. built-in or Android backup). The second parameter is an elapsed time in the style of 'x seconds/minutes/days ago'.\">        Een recente poging een reservekopie van de kluis te maken met %1$s is mislukt. Aegis heeft geen toestemming om te schrijven naar de back-uplocatie. De De back-uppoging was %2$s. Deze fout kan optreden als je de back-uplocatie hebt verplaatst/hernoemd of als je onlangs een Aegis hebt hersteld met een back-up. Configureer de back-uplocatie opnieuw.\n    </string>\n    <string name=\"backup_system_builtin\">het ingebouwde automatische back-ups van Aegis</string>\n    <string name=\"backup_system_android\">het cloud back-upsysteem van Android</string>\n    <string name=\"backup_reminder_bar_message_with_latest\" comment=\"The parameter is an elapsed time in the style of 'x seconds/minutes/days ago'\">        De meest recente back-up is verouderd (%s)\n    </string>\n    <string name=\"backup_reminder_bar_message\">        Geen back-up gemaakt van wijzigingen\n    </string>\n    <string name=\"backup_reminder_bar_dialog_title\">Nog geen back-up van wijzigingen</string>\n    <string name=\"backup_reminder_bar_dialog_summary\">        Er is nog geen back-up van recente wijzigingen in de kluis. Het is belangrijk om regelmatig back-ups te maken om de toegang tot accounts niet te verliezen. Overweeg om automatische back-ups in te stellen in het instellingenmenu.\n    </string>\n    <string name=\"backup_reminder_bar_dialog_accept\">Back-ups instellen</string>\n    <string name=\"backup_plaintext_export_warning\"><b>De kluis is recent geëxporteerd in platte tekst</b></string>\n    <string name=\"pref_show_plaintext_warning_hint\">Deze waarschuwing niet opnieuw weergeven</string>\n    <string name=\"backup_plaintext_warning_explanation\">Deze waarschuwing wordt weergegeven omdat je recent een onversleutelde kopie van de kluis hebt geëxporteerd. Om je tokens veilig te houden, raden we aan dit bestand te verwijderen als je het niet meer nodig hebt.</string>\n    <string name=\"switch_camera\">Camera wisselen</string>\n    <string name=\"empty_list\">Er zijn geen codes om te tonen. Begin met het toevoegen van items door op het plusteken in de rechteronderhoek te tikken</string>\n    <string name=\"empty_list_title\">Geen items gevonden</string>\n    <string name=\"empty_group_list\">Er zijn geen groepen om te tonen. Voeg groepen toe in het bewerkingsscherm van een item</string>\n    <string name=\"empty_group_list_title\">Geen groepen gevonden</string>\n    <string name=\"no_icon_packs\">Er zijn nog geen pictogrampakketten geïmporteerd. Tik op het plusteken om er een te importeren. Tip: probeer <a href=\"https://aegis-icons.github.io\">aegis-icons</a>.</string>\n    <string name=\"no_icon_packs_title\">Geen pictogrampakketten</string>\n    <string name=\"pick_icon\">Kies een icoon</string>\n    <string name=\"uncategorized\">Niet gecategoriseerd</string>\n    <string name=\"done\">Klaar</string>\n    <plurals name=\"qr_count\">\n        <item quantity=\"one\">%d / %d QR-code</item>\n        <item quantity=\"other\">%d / %d QR-codes</item>\n    </plurals>\n    <string name=\"next\">Volgende</string>\n    <string name=\"previous\">Vorige</string>\n    <string name=\"copy_uri\">URI kopiëren</string>\n    <string name=\"unable_to_copy_uri_to_clipboard\">Kan URI niet naar klembord kopiëren</string>\n    <string name=\"uri_copied_to_clipboard\">URI naar klembord gekopieerd</string>\n    <string name=\"transfer_entry_description\">Scan deze QR-code met de authenticator-app waar je dit item naar wilt overzetten</string>\n    <string name=\"transfer_entry_brightness\">QR-code aantikken om helderheid op volledig scherm te schakelen</string>\n    <string name=\"google_auth_compatible_transfer_description\">Scan deze QR-codes met Aegis of Google Authenticator.\\n\\nVanwege beperkingen van de Google Authenticator app, zijn alleen TOTP- &amp; HOTP-tokens die SHA1 gebruiken en 6-cijferige codes produceren opgenomen</string>\n    <string name=\"password_strength_very_weak\">Zeer zwak</string>\n    <string name=\"password_strength_weak\">Zwak</string>\n    <string name=\"password_strength_fair\">Redelijk</string>\n    <string name=\"password_strength_good\">Goed</string>\n    <string name=\"password_strength_strong\">Sterk</string>\n    <string name=\"password_strength_unknown\">Wachtwoord te lang voor sterkte-analyse</string>\n    <string name=\"pref_pin_keyboard_title\">PIN-toetsen op vergrendelscherm</string>\n    <string name=\"pref_pin_keyboard_summary\">Schakel dit in als je het PIN-toetsenbord op het vergrendelscherm wilt gebruiken. Werkt alleen bij numerieke wachtwoorden</string>\n    <string name=\"title_activity_preferences\">Instellingen</string>\n    <string name=\"title_activity_manage_groups\">Groepen beheren</string>\n    <string name=\"title_activity_transfer\">Items overzetten</string>\n    <string name=\"title_activity_about\">Over</string>\n    <string name=\"title_activity_edit_entry\">Item bewerken</string>\n    <string name=\"title_activity_scan_qr\">QR-code scannen</string>\n    <string name=\"title_activity_import_entries\">Items importeren</string>\n    <string name=\"title_activity_assign_icons\">Pictogrammen toewijzen</string>\n    <string name=\"title_activity_licenses\">Licenties van derden</string>\n    <string name=\"dialog_wipe_entries_title\">Items wissen</string>\n    <string name=\"dialog_wipe_entries_message\">Je kluis bevat al items. Wil je deze items verwijderen voordat je dit bestand importeert?\\n\\n<b>Hiermee verlies je permanent toegang tot de bestaande items in de kluis.</b></string>\n    <string name=\"dialog_wipe_entries_checkbox\">Inhoud van kluis wissen</string>\n    <string name=\"import_from_clipboard_title\">Van klembord importeren</string>\n    <string name=\"import_from_clipboard_message\">We vonden een geldige otpauth-uri op je klembord.\\n\\n<b>Naam</b>: %1$s\\n<b>Uitgever</b>: %2$s\\n\\nWil je dit gebruiken om dit item te vullen?</string>\n    <string name=\"panic_trigger_ignore_toast\">Aegis heeft paniektrigger ontvangen, maar instelling is uitgeschakeld, wordt genegeerd</string>\n    <string name=\"pref_panic_trigger_title\">Kluis bij paniektrigger verwijderen</string>\n    <string name=\"pref_panic_trigger_summary\">Kluis bij ontvangen van Ripple-paniektrigger verwijderen</string>\n    <string name=\"import_vault\">Aegis-kluis importeren</string>\n    <string name=\"import_vault_hint\">Wil je uit een andere 2FA-app importeren? Voltooi eerst de configuratie en ga dan naar het instellingenmenu.</string>\n    <plurals name=\"import_duplicate_toast\">\n        <item quantity=\"one\">%d potentiële dubbeling niet aangevinkt. Controleer de lijst met items.</item>\n        <item quantity=\"other\">%d potentiële dubbelingen niet aangevinkt. Controleer de lijst met items.</item>\n    </plurals>\n    <string name=\"importer_help_2fas\">Lever een 2FAS Authenticator-back-upbestand aan.</string>\n    <string name=\"importer_help_aegis\">Lever een Aegis-export/-back-upbestand aan.</string>\n    <string name=\"importer_help_authenticator_plus\">Lever een Authenticator Plus-exportbestand aan verkregen via <b>Instellingen -&gt; Back-up &amp; Herstellen -&gt; Exporteren als Tekst en HTML</b>.</string>\n    <string name=\"importer_help_authy\">Lever een kopie aan van <b>/data/data/com.authy.authy/shared_prefs/com.authy.storage.tokens.authenticator.xml</b>, geplaatst in de interne opslagmap van Authy.</string>\n    <string name=\"importer_help_andotp\">Lever een andOTP-export/-back-upbestand aan.</string>\n    <string name=\"importer_help_bitwarden\">Lever een Bitwarden-export/-back-upbestand aan. Versleutelde bestanden worden niet ondersteund.</string>\n    <string name=\"importer_help_battle_net_authenticator\">Lever een kopie aan van <b>/data/data/com.blizzard.messenger/shared_prefs/com.blizzard.messenger.authenticator_preferences.xml</b>, geplaatst in de interne opslagmap van Battle.net Authenticator.</string>\n    <string name=\"importer_help_duo\">Lever een kopie aan van <b>/data/data/com.duosecurity.duomobile/files/duokit/accounts.json</b>, geplaatst in de interne opslagmap van DUO.</string>\n    <string name=\"importer_help_ente_auth\">Lever een Ente Auth-exportbestand aan. Momenteel worden alleen niet-versleutelde bestanden ondersteund.</string>\n    <string name=\"importer_help_freeotp\">FreeOTP 2: Lever een back-upbestand.\\nFreeOTP 1.x: Lever een kopie aan van <b>/data/data/org.fedorahosted.freeotp/shared_prefs/tokens.xml</b>, geplaatst in de interne opslagmap van FreeOTP.</string>\n    <string name=\"importer_help_freeotp_plus\">Lever een FreeOTP+-exportbestand aan.</string>\n    <string name=\"importer_warning_title_freeotp2\">Compatibiliteit met FreeOTP 2</string>\n    <string name=\"importer_warning_message_freeotp2\">Er zijn een aantal problemen in FreeOTP 2 die tot beschadigde back-ups kunnen leiden. Aegis zal proberen zoveel mogelijk items te redden, maar mogelijk kunnen sommige items of zelfs alles niet worden geïmporteerd.</string>\n    <string name=\"importer_help_google_authenticator\"><b>Alleen database-bestanden van Google Authenticator v5.10 en eerder worden ondersteund</b>.\\n\\nLever een kopie aan van <b>/data/data/com.google.android.apps.authenticator2/databases/databases</b>, geplaatst in de interne opslagmap van Google Authenticator.</string>\n    <string name=\"importer_help_microsoft_authenticator\">Lever een kopie aan van <b>/data/data/com.azure.authenticator/databases/PhoneFactor</b>, geplaatst in de interne opslagmap van Microsoft Authenticator.</string>\n    <string name=\"importer_help_plain_text\">Lever een tekstbestand aan met een Google Authenticator URI op elke regel.</string>\n    <string name=\"importer_help_proton_authenticator\">Lever een Proton Authenticator-exportbestand (.json) verkregen via <b>Instellingen -&gt; Exporteren</b>.</string>\n    <string name=\"importer_help_steam\"><b>Steam v3.0 en nieuwer worden niet ondersteund</b>. Zorg voor een kopie van <b>/data/data/com.valvesoftware.android.steam.community/files/Steamguard-*.json</b>, te vinden in de interne opslagmap van Steam.</string>\n    <string name=\"importer_help_stratum\">Lever een Stratum-exportbestand aan verkregen via <b>Instellingen -&gt; Back-up -&gt; Back-up naar versleuteld bestand (aanbevolen)</b>.</string>\n    <string name=\"importer_help_totp_authenticator\">Lever een TOTP Authenticator-exportbestand aan.</string>\n    <string name=\"importer_help_winauth\">Lever een WinAuth-exportbestand aan.</string>\n    <string name=\"import_assign_icons_dialog_title\">Pictogrammen toewijzen</string>\n    <string name=\"import_assign_icons_dialog_text\">Wil je pictogrammen aan de geïmporteerde items toewijzen?</string>\n    <string name=\"importer_encrypted_exception_google_authenticator\">Versleuteld item is overgeslagen: %s</string>\n    <string name=\"importer_help_direct\">Importeer items rechtstreeks van %s. Dit vereist dat de app op dit apparaat staat en dat root-toegang aan Aegis wordt verleend.</string>\n    <string name=\"groups\">Groepen</string>\n    <string name=\"pref_focus_search\">Focus zoekveld na starten app</string>\n    <string name=\"pref_focus_search_summary\">Focus het zoekveld direct na het openen van de app.</string>\n    <string name=\"pref_grouping_halves\">Helften</string>\n    <string name=\"pref_grouping_none\">Geen groepering</string>\n    <string name=\"pref_grouping_size_two\">Groepen van 2</string>\n    <string name=\"pref_grouping_size_three\">Groepen van 3</string>\n    <string name=\"pref_grouping_size_four\">Groepen van 4</string>\n    <string name=\"pref_copy_behavior_never\">Nooit</string>\n    <string name=\"pref_copy_behavior_single_tap\">Enkele tik</string>\n    <string name=\"pref_copy_behavior_double_tap\">Dubbele tik</string>\n    <string name=\"pref_account_name_position_hidden\">Verborgen</string>\n    <string name=\"pref_account_name_position_end\">Naast de uitgever</string>\n    <string name=\"pref_account_name_position_below\">Onder de uitgever</string>\n    <plurals name=\"time_elapsed_seconds\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"one\">%d seconde geleden</item>\n        <item quantity=\"other\">%d seconden geleden</item>\n    </plurals>\n    <plurals name=\"time_elapsed_minutes\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"one\">%d minuut geleden</item>\n        <item quantity=\"other\">%d minuten geleden</item>\n    </plurals>\n    <plurals name=\"time_elapsed_hours\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"one\">%d uur geleden</item>\n        <item quantity=\"other\">%d uur geleden</item>\n    </plurals>\n    <plurals name=\"time_elapsed_days\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"one\">%d dag geleden</item>\n        <item quantity=\"other\">%d dagen geleden</item>\n    </plurals>\n    <plurals name=\"time_elapsed_years\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"one\">%d jaar geleden</item>\n        <item quantity=\"other\">%d jaar geleden</item>\n    </plurals>\n    <plurals name=\"dropdown_checkboxes_default_count\">\n        <item quantity=\"one\">%d item geselecteerd</item>\n        <item quantity=\"other\">%d items geselecteerd</item>\n    </plurals>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-nl-rNL-v29/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"system_theme_title\">Systeemstandaard</string>\n    <string name=\"system_amoled_theme_title\">Systeemstandaard (AMOLED)</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-pl-rPL/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources xmlns:tools=\"http://schemas.android.com/tools\">\n    <string name=\"action_settings\">Ustawienia</string>\n    <string name=\"action_about\">O aplikacji</string>\n    <string name=\"action_delete\">Usuń</string>\n    <string name=\"action_transfer\">Przenieś</string>\n    <string name=\"action_edit_icon\">Edytuj ikonę</string>\n    <string name=\"action_reset_usage_count\">Resetuj licznik użycia</string>\n    <string name=\"action_reset_usage_count_dialog\">Czy na pewno chcesz ustawić liczbę użyć tego wpisu na 0?</string>\n    <string name=\"action_default_icon\">Przywróć domyślną ikonę</string>\n    <string name=\"discard\">Odrzuć</string>\n    <string name=\"save\">Zapisz</string>\n    <string name=\"all\">Wszystkie</string>\n    <string name=\"issuer\">Wydawca</string>\n    <string name=\"yandex_pin\">PIN (4–16 cyfr)</string>\n    <string name=\"motp_pin\">PIN (4 cyfry)</string>\n    <string name=\"suggested\">Polecane</string>\n    <string name=\"usage_count\">Licznik użycia</string>\n    <string name=\"warning\">Ostrzeżenie</string>\n    <string name=\"pref_cat_appearance_app\">Aplikacja</string>\n    <string name=\"pref_cat_appearance_entries\">Wpisy</string>\n    <string name=\"pref_cat_backups_android\">Android</string>\n    <string name=\"pref_cat_backups_auto\">Automatyczne kopie zapasowe</string>\n    <string name=\"pref_section_behavior_title\">Zachowanie</string>\n    <string name=\"pref_section_behavior_summary\">Dostosuj zachowanie podczas interakcji z listą wpisów.</string>\n    <string name=\"pref_section_appearance_title\">Wygląd</string>\n    <string name=\"pref_section_appearance_summary\">Dostosuj motyw, język i inne ustawienia, które wpływają na wygląd aplikacji.</string>\n    <string name=\"pref_section_security_title\">Bezpieczeństwo</string>\n    <string name=\"pref_section_security_summary\">Skonfiguruj szyfrowanie, autoryzację biometryczną, automatyczną blokadę i inne ustawienia bezpieczeństwa.</string>\n    <string name=\"pref_section_import_export_title\">Import i eksport</string>\n    <string name=\"pref_section_import_export_summary\">Importuj kopie zapasowe aplikacji Aegis lub innych aplikacji uwierzytelniających. Utwórz ręczne kopie zapasowe sejfu Aegis.</string>\n    <string name=\"pref_section_audit_log_title\">Dziennik zdarzeń</string>\n    <string name=\"pref_section_audit_log_summary\">Znajdź listę wszystkich zgłoszonych ważnych zdarzeń, które miały miejsce w aplikacji.</string>\n    <string name=\"pref_section_backups_title\">Kopie zapasowe</string>\n    <string name=\"pref_section_backups_summary\">Skonfiguruj automatyczne kopie zapasowe w wybranej lokalizacji lub włącz uczestnictwo w systemie kopii zapasowej w chmurze Android.</string>\n    <string name=\"pref_section_icon_packs\">Pakiety ikon</string>\n    <string name=\"pref_section_icon_packs_summary\">Zarządzaj i importuj pakiety ikon</string>\n    <string name=\"pref_select_theme_title\">Motyw</string>\n    <string name=\"pref_dynamic_colors_title\">Dynamiczne kolory</string>\n    <string name=\"pref_dynamic_colors_summary\">Zastosuj nakładkę opartą na kolorach twojego motywu Androida</string>\n    <string name=\"pref_view_mode_title\">Tryb wyświetlania</string>\n    <string name=\"pref_lang_title\">Język</string>\n    <string name=\"pref_show_icons_title\">Pokaż ikony</string>\n    <string name=\"pref_show_icons_summary\">Wyświetlaj ikony obok każdego wpisu</string>\n    <string name=\"pref_code_group_size_title\">Grupowanie cyfr kodu</string>\n    <string name=\"pref_code_group_size_summary\">Wybierz liczbę cyfr do grupowania według</string>\n    <string name=\"pref_account_name_position_title\">Pokaż nazwę konta</string>\n    <string name=\"pref_show_next_code_title\">Pokaż następny kod</string>\n    <string name=\"pref_show_next_code_summary\">Wygeneruj i pokaż następny kod z wyprzedzeniem</string>\n    <string name=\"pref_expiration_state_title\">Wskaż, gdy kody mają wygasnąć</string>\n    <string name=\"pref_expiration_state_summary\">Zmień kolor kodów i spraw, aby migały, gdy mają wygasnąć</string>\n    <string name=\"pref_expiration_state_fallback\">Zmień kolor kodów, gdy mają wygasnąć</string>\n    <string name=\"pref_shared_issuer_account_name_title\">Pokaż nazwę konta tylko w razie potrzeby</string>\n    <string name=\"pref_shared_issuer_account_name_summary\">Pokazuj nazwy kont tylko, gdy są z tego samego wydawcy. Inne nazwy kont zostaną ukryte.</string>\n    <string name=\"pref_account_name_position_summary_override\">To ustawienie jest nadpisane przez tryb wyświetlania pól. Nazwa konta będzie wyświetlana pod wydawcą.</string>\n    <string name=\"pref_import_file_title\">Importuj z pliku</string>\n    <string name=\"pref_import_file_summary\">Importuj tokeny z aplikacji</string>\n    <string name=\"pref_android_backups_title\">Kopia zapasowa Android w chmurze</string>\n    <string name=\"pref_android_backups_summary\">Zezwalaj systemowi kopii zapasowej w chmurze Androida na zawarcie sejfu Aegis do jego kopii zapasowej. Jest to obsługiwane tylko dla szyfrowanych sejfów.</string>\n    <string name=\"pref_android_backups_hint\"><i>Kopie zapasowe urządzenia-do-urządzenia (D2D) są zawsze dozwolone, niezależnie od powyższych ustawień</i></string>\n    <string name=\"pref_backups_title\">Automatycznie utwórz kopię zapasową sejfu</string>\n    <string name=\"pref_backups_summary\">Automatycznie utwórz kopie zapasowe sejfu w pamięci zewnętrznej. Funkcja ta wspiera tylko zaszyfrowane sejfy.</string>\n    <string name=\"pref_backups_reminder_title\">Przypomnienia o kopii zapasowej</string>\n    <string name=\"pref_backups_reminder_summary\">Pokaż przypomnienie o kopii zapasowej twojego sejfu na wypadek, gdybyś nie zrobił kopii zapasowej najnowszych zmian.</string>\n    <string name=\"pref_backups_reminder_dialog_title\">Wyłącz przypomnienia o kopii zapasowej</string>\n    <string name=\"pref_backups_reminder_dialog_summary\">Wyłączenie tych powiadomień, oznacza że Aegis nie powie, czy masz zmiany, które nie są jeszcze zapisane w kopii zapasowej. To naraża cię na ryzyko utraty dostępu do twoich tokenów. Czy na pewno chcesz wyłączyć te powiadomienia?</string>\n    <string name=\"pref_backups_versioning_strategy_title\">Strategia tworzenia kopii zapasowych</string>\n    <string name=\"pref_backups_versioning_strategy_keep_x_versions\">Zachowuj wiele wersji</string>\n    <string name=\"pref_backups_versioning_strategy_single_backup\">Pojedyncza kopia zapasowa</string>\n    <string name=\"pref_backups_versioning_strategy_single_backup_warning\">Wybrana strategia tworzenia kopii zapasowych jest zawodna i niezalecana. Pojedyncza awaria kopii zapasowej może doprowadzić do utraty jedynej kopii zapasowej.</string>\n    <string name=\"pref_backups_versioning_strategy_dialog_title\">Wybierz strategię tworzenia kopii zapasowych</string>\n    <string name=\"pref_backups_location_title\">Lokalizacja kopii zapasowych</string>\n    <string name=\"pref_backups_location_summary\">Kopie zapasowe będą przechowywane w</string>\n    <string name=\"pref_backup_location_summary\">Kopie zapasowe będą przechowywane w</string>\n    <string name=\"pref_backups_trigger_title\">Uruchom kopie zapasowe</string>\n    <string name=\"pref_backups_trigger_summary\">Utwórz kopię zapasową ręcznie</string>\n    <string name=\"pref_backups_versions_title\">Liczba kopii do zachowania</string>\n    <string name=\"pref_backups_versions_infinite\">\\u221E</string>\n    <plurals name=\"pref_backups_versions_summary\">\n        <item quantity=\"one\">Zachowaj %1$d wersję kopii zapasowej</item>\n        <item quantity=\"few\">Zachowaj %1$d wersje kopii zapasowej</item>\n        <item quantity=\"many\">Zachowaj %1$d wersji kopii zapasowej</item>\n        <item quantity=\"other\">Zachowaj %1$d wersji kopii zapasowej</item>\n    </plurals>\n    <string name=\"pref_backups_versions_infinite_summary\">Zachowuj nieskończoną liczbę wersji kopii zapasowej</string>\n    <string name=\"pref_import_app_title\">Importuj z aplikacji</string>\n    <string name=\"pref_import_app_summary\">Importuj tokeny z innej aplikacji (wymagane jest konto root)</string>\n    <string name=\"pref_export_title\">Eksportuj</string>\n    <string name=\"pref_export_summary\">Eksportuj sejf</string>\n    <string name=\"pref_password_reminder_title\">Przypomnienie hasła</string>\n    <string name=\"pref_google_auth_export_title\">Eksport dla Google Authenticator</string>\n    <string name=\"pref_google_auth_export_descriptor\">Tworzy eksport kodów QR kompatybilnych z Google Authenticator</string>\n    <string name=\"pref_google_auth_export_no_data\">Brak danych do eksportu</string>\n    <plurals name=\"pref_google_auth_export_incompatible_entries\">\n        <item quantity=\"one\">Pominięto %d niezgodny wpis</item>\n        <item quantity=\"few\">Pominięto %d niezgodne wpisy</item>\n        <item quantity=\"many\">Pominięto %d niezgodnych wpisów</item>\n        <item quantity=\"other\">Pominięto %d niezgodnych wpisów</item>\n    </plurals>\n    <string name=\"pref_password_reminder_summary\">Co %s pokazuj przypomnienie, aby wpisać hasło. Dzięki temu go nie zapomnisz.</string>\n    <string name=\"pref_password_reminder_summary_disabled\">Wyłączone</string>\n    <string name=\"pref_secure_screen_title\">Zabezpieczenie ekranu</string>\n    <string name=\"pref_secure_screen_summary\">Zablokuj zrzuty ekranu i inne próby przechwycenia ekranu w aplikacji</string>\n    <string name=\"pref_tap_to_reveal_title\">Kliknij, aby odkryć</string>\n    <string name=\"pref_tap_to_reveal_summary\">Tokeny zostaną domyślnie ukryte. Kliknij na token, aby pokazać kod.</string>\n    <string name=\"pref_tap_to_reveal_time_title\">Limit czasu dla odkrycia</string>\n    <string name=\"pref_auto_lock_title\">Automatyczna blokada</string>\n    <string name=\"pref_auto_lock_summary\">Kiedy %s</string>\n    <string name=\"pref_auto_lock_summary_disabled\">Wyłączona</string>\n    <string name=\"pref_auto_lock_prompt\">Automatycznie zablokuj aplikację Aegis kiedy</string>\n    <string name=\"pref_auto_lock_type_back_button\">Przycisk wstecz jest naciśnięty</string>\n    <string name=\"pref_auto_lock_type_minimize\">Aplikacja jest zminimalizowana</string>\n    <string name=\"pref_auto_lock_type_device_lock\">Urządzenie jest zablokowane</string>\n    <string name=\"pref_backup_password_category\">Kopia zapasowa i eksport</string>\n    <string name=\"pref_backup_password_title\">Oddzielne hasło do kopii zapasowej i eksportu</string>\n    <string name=\"pref_backup_password_summary\">Jeśli włączone, hasło, które jest używane do odblokowania aplikacji, nie może być użyte do odszyfrowania kopii zapasowych i eksportu.</string>\n    <string name=\"pref_backup_password_change_title\">Zmień hasło do kopii zapasowej i eksportu</string>\n    <string name=\"pref_backup_password_change_summary\">Ustaw nowe hasło, które będzie używane do szyfrowania sejfu podczas tworzenia kopii zapasowej i eksportu.</string>\n    <string name=\"pref_encryption_title\">Szyfrowanie</string>\n    <string name=\"pref_encryption_summary\">Zaszyfruj sejf i odblokuj go za pomocą hasła lub autoryzacji biometrycznej</string>\n    <string name=\"pref_biometrics_title\">Autoryzacja biometryczna</string>\n    <string name=\"pref_biometrics_summary\">Zezwalaj na odblokowywanie aplikacji za pomocą autoryzacji biometrycznej</string>\n    <string name=\"pref_search_behavior_summary\">Przeszukaj przez: %s</string>\n    <string name=\"pref_search_behavior_prompt\">Szukaj w którymkolwiek z następujących pól</string>\n    <string name=\"pref_search_behavior_type_name\">Nazwa</string>\n    <string name=\"pref_search_behavior_type_issuer\">Wydawca</string>\n    <string name=\"pref_search_behavior_type_note\">Notatka</string>\n    <string name=\"pref_search_behavior_type_groups\">Grupy</string>\n    <string name=\"pref_set_password_title\">Zmień hasło</string>\n    <string name=\"pref_set_password_summary\">Ustaw nowe hasło do odblokowywania sejfu</string>\n    <string name=\"no_events_title\">Brak zgłoszonych zdarzeń</string>\n    <string name=\"no_events_description\">Żadne ważne zdarzenia nie zostały zgłoszone w aplikacji</string>\n    <string name=\"event_title_vault_unlocked\">Sejf odblokowany</string>\n    <string name=\"event_description_vault_unlocked\">Sejf został pomyślnie odblokowany</string>\n    <string name=\"event_title_backup_created\">Kopia zapasowa utworzona</string>\n    <string name=\"event_description_backup_created\">Kopia zapasowa sejfu została pomyślnie utworzona</string>\n    <string name=\"event_title_android_backup_created\">Kopia zapasowa utworzona przez Androida</string>\n    <string name=\"event_description_android_backup_created\">Kopia zapasowa sejfu została pomyślnie utworzona przez Androida</string>\n    <string name=\"event_title_vault_exported\">Sejf został wyeksportowany</string>\n    <string name=\"event_description_vault_exported\">Kopia sejfu została wyeksportowana</string>\n    <string name=\"event_title_entry_shared\">Wpis udostępniony</string>\n    <string name=\"event_description_entry_shared\">Wpis został udostępniony</string>\n    <string name=\"event_title_vault_unlock_failed_password\">Odblokowanie sejfu nie powiodło się (hasło)</string>\n    <string name=\"event_description_vault_unlock_failed_password\">Próba odblokowania sejfu z hasłem nie powiodła się</string>\n    <string name=\"event_title_vault_unlock_failed_biometrics\">Odblokowanie sejfu nie powiodło się (biometryczne)</string>\n    <string name=\"event_description_vault_unlock_failed_biometrics\">Próba odblokowania sejfu za pomocą biometrii nie powiodła się</string>\n    <string name=\"event_unknown\">Nieznany typ zdarzenia</string>\n    <string name=\"audit_log_entry_deleted\">(usunięty)</string>\n    <string name=\"today_at_time\">Dzisiaj o %1$s</string>\n    <string name=\"day_of_week_at_time\">%1$s o %2$s</string>\n    <string name=\"export_encrypted\">Zaszyfruj sejf</string>\n    <string name=\"export_help\">Ta czynność wyeksportuje sejf z wewnętrznej przestrzeni dyskowej aplikacji Aegis. Wybierz format eksportowanego pliku:</string>\n    <string name=\"export_warning_unencrypted\">Wyeksportujesz sejf aplikacji Aegis w niezaszyfrowanym formacie. <b>Ta opcja nie jest zalecana</b>.</string>\n    <string name=\"export_warning_password\">Eksport jest szyfrowany przy użyciu osobnego hasła skonfigurowanego w ustawieniach bezpieczeństwa.</string>\n    <string name=\"understand_risk_accept\">Rozumiem ryzyko</string>\n    <string name=\"export_format_aegis\">Aegis (.JSON)</string>\n    <string name=\"export_format_google_auth_uri\">Plik tekstowy (.TXT)</string>\n    <string name=\"export_format_html\">Strona internetowa (.HTML)</string>\n    <string name=\"export_format_hint\">Format eksportu</string>\n    <string name=\"export_all_groups\">Eksportuj wszystkie grupy</string>\n    <string name=\"export_choose_groups\">Wybierz grupy do wyeksportowania</string>\n    <plurals name=\"export_groups_selected_count\">\n        <item quantity=\"one\">%d zaznaczona grupa</item>\n        <item quantity=\"few\">%d zaznaczone grupy</item>\n        <item quantity=\"many\">%d zaznaczonych grup</item>\n        <item quantity=\"other\">%d zaznaczonych grup</item>\n    </plurals>\n    <string name=\"export_no_groups_selected\">Nie wybrano grup do eksportu</string>\n    <string name=\"export_html_title\" comment=\"The title of an HTML export document\">Eksport Aegis Authenticator</string>\n    <string name=\"choose_authentication_method\">Bezpieczeństwo</string>\n    <string name=\"authentication_method_explanation\">Aegis to aplikacja uwierzytelniająca zorientowana na bezpieczeństwo. Tokeny są przechowywane w sejfie, który może zostać opcjonalnie zaszyfrowany przy użyciu wybranego przez Ciebie hasła. Jeśli atakujący uzyska zaszyfrowany plik sejfu, nie będzie mógł uzyskać dostępu do zawartości bez znajomości hasła.\\n\\nZaznaczyliśmy opcję, która najlepiej powinna pasować do Twojego urządzenia.</string>\n    <string name=\"authentication_method_none\">Brak</string>\n    <string name=\"authentication_method_none_description\">Hasło nie jest wymagane, aby odblokować sejf i dane nie zostaną zaszyfrowane. <b>Ta opcja nie jest zalecana</b>.</string>\n    <string name=\"authentication_method_password\">Hasło</string>\n    <string name=\"authentication_method_password_description\">Hasło jest wymagane, aby odblokować sejf.</string>\n    <string name=\"authentication_method_password_explanation\">Ostrzeżenie: Jeśli zapomnisz hasła, utracisz dostęp do swoich tokenów. Bez użycia hasła, nie ma sposobu na ich odzyskanie.</string>\n    <string name=\"authentication_method_biometrics\">Autoryzacja biometryczna</string>\n    <string name=\"authentication_method_biometrics_description\">Oprócz hasła, do odblokowania sejfu możesz użyć danych biometrycznej przechowywanych na tym urządzeniu, takich jak odcisk palca lub twarz.</string>\n    <string name=\"authentication\">Odblokuj sejf</string>\n    <string name=\"authentication_multiline\" comment=\"The newline in the middle is used for aesthetic purposes\">Odblokuj\\nsejf</string>\n    <string name=\"auth_use_biometrics\">Lub kliknij tutaj, aby użyć <font fgcolor=\"#FF0D86C1\">danych biometrycznych</font></string>\n    <string name=\"set_password\">Wpisz hasło</string>\n    <string name=\"set_group\">Wpisz nazwę grupy</string>\n    <string name=\"set_number\">Wpisz numer</string>\n    <string name=\"set_password_confirm\">Potwierdź hasło</string>\n    <string name=\"invalid_password\">Hasło jest nieprawidłowe</string>\n    <string name=\"invalidated_biometrics\">Ustawienia zabezpieczeń urządzenia zostały zmienione. Przejdź do \\\"Aegis -&gt; Ustawienia -&gt; Bezpieczeństwo -&gt; Autoryzacja biometryczna\\\" i włącz ponownie tę funkcję.</string>\n    <string name=\"password_reminder\">Wpisz hasło. Co pewien czas zostaniesz o nie zapytany, aby nie zapomnieć hasła.</string>\n    <string name=\"password_reminder_dialog_title\">Domyślne odblokowanie biometryczne</string>\n    <string name=\"password_reminder_dialog_message\">Czasami prosimy, abyś wprowadził swoje hasło, aby upewnić się, że nie zapomniałeś o nim i nie zostaniesz zablokowany z Twojego sejfu. Po wprowadzeniu hasła Aegis powróci do odblokowania biometrycznego, dopóki nie nadszedł czas na przypomnienie hasła.</string>\n    <string name=\"password_reminder_freq_never\">Nigdy</string>\n    <string name=\"password_reminder_freq_weekly\">Co tydzień</string>\n    <string name=\"password_reminder_freq_biweekly\">Co dwa tygodnie</string>\n    <string name=\"password_reminder_freq_monthly\">Co miesiąc</string>\n    <string name=\"password_reminder_freq_quarterly\">Co kwartał</string>\n    <string name=\"enter_password_2fas_message\">Wygląda na to, że ta kopia zapasowa 2FA jest zaszyfrowana. Wprowadź hasło poniżej.</string>\n    <string name=\"enter_password_authy_message\">Wygląda na to, że Twoje tokeny Authy są zaszyfrowane. Zamknij aplikację Aegis, otwórz Authy i odblokuj tokeny za pomocą hasła. Możesz również wpisać poniżej te hasło i aplikacja Aegis spróbuje odszyfrować tokeny Authy.</string>\n    <string name=\"enter_password_aegis_title\">Wprowadź hasło importu</string>\n    <string name=\"period_hint\">Okres (w sekundach)</string>\n    <string name=\"algorithm_hint\">Funkcja skrótu kryptograficznego</string>\n    <string name=\"type\">Typ</string>\n    <string name=\"share\">Udostępnij</string>\n    <string name=\"yes\">Tak</string>\n    <string name=\"no\">Nie</string>\n    <string name=\"undo\">Cofnij</string>\n    <string name=\"unlock\">Odblokuj</string>\n    <string name=\"advanced\">Zaawansowane</string>\n    <string name=\"counter\">Licznik</string>\n    <string name=\"digits\">Cyfry</string>\n    <string name=\"secret\">Klucz</string>\n    <string name=\"scan\">Skanuj kod QR</string>\n    <string name=\"scan_image\">Skanuj zdjęcie</string>\n    <string name=\"enter_manually\">Wpisz ręcznie</string>\n    <string name=\"set_up_biometric\">Ustaw autoryzację biometryczną</string>\n    <string name=\"copy\">Kopiuj</string>\n    <string name=\"edit\">Edytuj</string>\n    <string name=\"select_all\">Wybierz wszystko</string>\n    <string name=\"assign_icons\">Przypisz ikony</string>\n    <string name=\"assign_groups\">Przypisz do grupy</string>\n    <string name=\"assign_groups_dialog_summary\">Wybierz grupę, do której chcesz przypisać wybrane wpisy.</string>\n    <string name=\"assign_groups_dialog_dropdown\">Wybierz grupę</string>\n    <string name=\"favorite\" comment=\"Verb\">Dodaj do ulubionych</string>\n    <string name=\"unfavorite\" comment=\"Verb\">Usuń z ulubionych</string>\n    <string name=\"error_all_caps\">BŁĄD</string>\n    <string name=\"password\">Hasło</string>\n    <string name=\"confirm_password\">Potwierdź hasło</string>\n    <string name=\"show_password\">Pokaż hasło</string>\n    <string name=\"new_entry\">Nowy wpis</string>\n    <string name=\"add_new_entry\">Dodaj nowy wpis</string>\n    <string name=\"unlock_vault_error\">Nie można odblokować sejfu</string>\n    <string name=\"unlock_vault_error_description\">Hasło jest nieprawidłowe. Upewnij się, że nie popełniłeś literówki.</string>\n    <string name=\"password_equality_error\">Hasła muszą być identyczne i nie mogą być puste</string>\n    <string name=\"snackbar_authentication_method\">Wybierz metodę uwierzytelnienia</string>\n    <string name=\"encrypting_vault\">Szyfrowanie sejfu</string>\n    <string name=\"exporting_vault\">Eksportowanie sejfu</string>\n    <string name=\"optimizing_icon\">Optymalizacja ikony</string>\n    <string name=\"optimizing_icon_multiple\">Optymalizacja ikon %1$d/%2$d</string>\n    <string name=\"reading_file\">Odczytywanie pliku</string>\n    <string name=\"requesting_root_access\">Żądanie dostępu do roota</string>\n    <string name=\"analyzing_qr\">Analizowanie kodu QR</string>\n    <string name=\"analyzing_qr_multiple\">Analizowanie kodu QR %1$d/%2$d (%3$s)</string>\n    <plurals name=\"added_new_entries\">\n        <item quantity=\"one\">Dodano %d nowy wpis do sejfu</item>\n        <item quantity=\"few\">Dodano %d nowe wpisy do sejfu</item>\n        <item quantity=\"many\">Dodano %d nowych wpisów do sejfu</item>\n        <item quantity=\"other\">Dodano %d nowych wpisów do sejfu</item>\n    </plurals>\n    <string name=\"importing_icon_pack\">Importowanie pakietu ikon</string>\n    <string name=\"delete_entry\">Usuń wpis</string>\n    <string name=\"delete_entry_description\">Czy na pewno chcesz usunąć ten wpis?</string>\n    <string name=\"delete_entry_explanation\">Ta akcja nie wyłącza uwierzytelniania dwustopniowego dla:\\n<b>%s</b>\\n\\n. Aby zapobiec utracie dostępu, upewnij się, że dla tej usługi wyłączyłeś uwierzytelnianie lub posiadasz alternatywny sposób generowania kodów.</string>\n    <string name=\"delete_entries\">Usuń wpisy</string>\n    <plurals name=\"delete_entries_description\">\n        <item quantity=\"one\">Czy na pewno chcesz usunąć %d wpis?</item>\n        <item quantity=\"few\">Czy na pewno chcesz usunąć %d wpisy?</item>\n        <item quantity=\"many\">Czy na pewno chcesz usunąć %d wpisów?</item>\n        <item quantity=\"other\">Czy na pewno chcesz usunąć %d wpisów?</item>\n    </plurals>\n    <string name=\"discard_changes\">Czy chcesz odrzucić zmiany?</string>\n    <string name=\"discard_changes_description\">Zmiany nie zostały zapisane</string>\n    <string name=\"saving_profile_error\">Wystąpił błąd podczas zapisywania profilu</string>\n    <string name=\"saving_assign_icons_error\">Błąd podczas przypisywania ikon</string>\n    <string name=\"welcome\">Witaj</string>\n    <string name=\"app_description\">Aegis jest darmową, bezpieczną i otwartoźródłową aplikacją uwierzytelniającą</string>\n    <string name=\"setup_completed\">Konfiguracja została zakończona</string>\n    <string name=\"setup_completed_description\">Aplikacja Aegis została skonfigurowana i jest gotowa do użycia.</string>\n    <string name=\"vault_not_found\">Sejf nie został znaleziony. Rozpoczynam konfigurację…</string>\n    <string name=\"copied\">Skopiowano</string>\n    <string name=\"errors_copied\">Błędy zostały skopiowane do schowka</string>\n    <string name=\"version_copied\">Wersja została skopiowana do schowka</string>\n    <string name=\"error_required_field\">To pole jest wymagane</string>\n    <string name=\"error_occurred\">Wystąpił błąd</string>\n    <string name=\"decryption_error\">Wystąpił błąd podczas odblokowywania sejfu</string>\n    <string name=\"decryption_corrupt_error\">Wystąpił błąd podczas odblokowywania sejfu. Plik sejfu może być uszkodzony.</string>\n    <string name=\"saving_error\">Wystąpił błąd podczas zapisywania sejfu</string>\n    <string name=\"vault_init_error\">Wystąpił błąd podczas uruchamiania sejfu</string>\n    <string name=\"vault_load_error\">Wystąpił błąd podczas ładowania sejfu z pamięci zewnętrznej</string>\n    <string name=\"biometric_decrypt_error\">Wystąpił błąd podczas odszyfrowywania sejfu za pomocą autoryzacji biometrycznej. Zazwyczaj dzieje się tak tylko wtedy, kiedy ustawienia zabezpieczeń urządzenia zostały zmienione. Odblokuj sejf za pomocą hasła i ponownie skonfiguruj autoryzację biometryczną w ustawieniach aplikacji Aegis.</string>\n    <string name=\"biometric_init_error\">Wystąpił błąd podczas autoryzacji biometrycznej. Zazwyczaj dzieje się tak tylko wtedy, kiedy ustawienia zabezpieczeń urządzenia zostały zmienione. Odblokuj sejf za pomocą hasła i ponownie skonfiguruj autoryzację biometryczną w ustawieniach aplikacji Aegis.</string>\n    <string name=\"disable_encryption\">Wyłącz szyfrowanie</string>\n    <string name=\"disable_encryption_description\">Czy na pewno chcesz wyłączyć szyfrowanie? Spowoduje to przechowywanie sejfu w zwykłym tekście. <b>Automatyczne kopie zapasowe zostaną wyłączone</b>.</string>\n    <string name=\"enable_encryption_error\">Wystąpił błąd podczas włączania szyfrowania</string>\n    <string name=\"disable_encryption_error\">Wystąpił błąd podczas wyłączania szyfrowania</string>\n    <string name=\"backup_successful\">Kopia zapasowa została zaplanowana</string>\n    <string name=\"backup_error\">Wystąpił błąd podczas tworzenia kopii zapasowej</string>\n    <string name=\"backup_status_success\">Ostatnia kopia zapasowa zakończona sukcesem: %s</string>\n    <string name=\"backup_status_failed\">Ostatnia kopia zapasowa nie powiodła się: %s</string>\n    <string name=\"backup_status_none\">Nie utworzono jeszcze żadnej kopii zapasowych</string>\n    <string name=\"backup_warning_password\">Kopie zapasowe są szyfrowane przy użyciu osobnego hasła skonfigurowanego w ustawieniach zabezpieczeń</string>\n    <string name=\"documentsui_error\">Na Twoim urządzeniu brakuje modułu DocumentsUI. To jest ważny element systemu niezbędny do odczytu i tworzenia dokumentów. Jeśli użyłeś narzędzia do &quot;czyszczenia systemu&quot;, mogłeś przypadkowo usunąć ten moduł i musisz go ponownie zainstalować.</string>\n    <string name=\"icon_pack_import_error\">Wystąpił błąd podczas importowania pakietu ikon</string>\n    <string name=\"icon_pack_import_exists_error\">Pakiet ikon, który chcesz zaimportować już istnieje. Czy chcesz go nadpisać?</string>\n    <string name=\"icon_pack_delete_error\">Wystąpił błąd podczas usuwania pakietu ikon</string>\n    <plurals name=\"icon_pack_info\">\n        <item quantity=\"one\">%d ikona</item>\n        <item quantity=\"few\">%d ikony</item>\n        <item quantity=\"many\">%d ikony</item>\n        <item quantity=\"other\">%d ikon</item>\n    </plurals>\n    <string name=\"icon_custom\">Niestandardowa</string>\n    <string name=\"permission_denied\">Odmowa uprawnienia</string>\n    <string name=\"andotp_new_format\">Nowy format (wersja 0.6.3 lub nowsza) </string>\n    <string name=\"andotp_old_format\">Stary format (wersja 0.6.2 lub starsza) </string>\n    <string name=\"choose_andotp_importer\">Jaki format pliku kopii zapasowej aplikacji andOTP posiadasz?</string>\n    <string name=\"choose_totpauth_importer\">Czy kopia zapasowa aplikacji TOTP Authenticator jest zaszyfrowana za pomocą hasła?</string>\n    <string name=\"choose_application\">Wybierz aplikację z której chcesz zaimportować dane</string>\n    <string name=\"choose_theme\">Wybierz motyw jaki chcesz</string>\n    <string name=\"choose_account_name_position\">Wybierz miejsce nazwy konta</string>\n    <string name=\"choose_view_mode\">Wybierz widok jaki chcesz</string>\n    <string name=\"choose_copy_behavior\">Wybierz pożądane zachowanie kopii</string>\n    <string name=\"parsing_file_error\">Wystąpił błąd podczas przetwarzania pliku</string>\n    <string name=\"file_not_found\">Błąd: Nie znaleziono pliku</string>\n    <string name=\"reading_file_error\">Wystąpił błąd podczas odczytywania pliku</string>\n    <string name=\"app_lookup_error\">Błąd: Aplikacja nie jest zainstalowana</string>\n    <string name=\"app_version_error\">Zainstalowana wersja %s nie jest obsługiwana. Ostatnie wersje zaczęły szyfrować niektóre pliki w katalogu pamięci wewnętrznej, przez co Aegis nie może uzyskać dostępu do informacji potrzebnych do importu. Próba importu prawdopodobnie zakończy się błędem. Czy mimo to chcesz kontynuować?</string>\n    <string name=\"root_error\">Błąd: Nie można uzyskać dostępu do konta root</string>\n    <plurals name=\"imported_entries_count\">\n        <item quantity=\"one\">%d wpis został zaimportowany</item>\n        <item quantity=\"few\">%d wpisy zostały zaimportowane</item>\n        <item quantity=\"many\">%d wpisów zostało zaimportowanych</item>\n        <item quantity=\"other\">%d wpisów zostało zaimportowanych</item>\n    </plurals>\n    <plurals name=\"entries_shown\">\n        <item quantity=\"one\">Wyświetlanie %d wpisu</item>\n        <item quantity=\"few\">Wyświetlanie %d wpisów</item>\n        <item quantity=\"many\">Wyświetlanie %d wpisów</item>\n        <item quantity=\"other\">Wyświetlanie %d wpisów</item>\n    </plurals>\n    <string name=\"intro_import_error_title\">Wystąpił błąd podczas importowania sejfu</string>\n    <string name=\"import_error_title\">Wystąpił co najmniej jeden błąd podczas importowania</string>\n    <string name=\"exporting_vault_error\">Wystąpił błąd podczas eksportowania sejfu</string>\n    <string name=\"exported_vault\">Sejf został wyeksportowany</string>\n    <string name=\"encryption_set_password_error\">Wystąpił błąd podczas ustawiania hasła.</string>\n    <string name=\"encryption_enable_biometrics_error\">Wystąpił błąd podczas włączania autoryzacji biometrycznej. Niektóre urządzenia posiadają słabe wsparcie dla tej funkcji i jest prawdopodobne, że Twoje urządzenie jest jednym z nich. Rozważ zmianę konfiguracji za pomocą hasła.</string>\n    <string name=\"no_cameras_available\">Aparat jest niedostępny</string>\n    <string name=\"read_qr_error\">Wystąpił błąd podczas odczytywania kodu QR</string>\n    <string name=\"read_qr_error_phonefactor\">Aplikacja Aegis nie jest kompatybilna z algorytmem uwierzytelniającym firmy Microsoft. Podczas konfigurowania uwierzytelniania w aplikacji Office 365 wybierz opcję \\\"Skonfiguruj aplikację bez powiadomień\\\".</string>\n    <string name=\"partial_google_auth_import\">Wykryto niekompletny eksport z Google Authenticator</string>\n    <string name=\"partial_google_auth_import_warning\">W imporcie brakuje niektórych kodów QR. Następujące kody nie zostały znalezione:\\n\\n<b>%s</b>\\n\\nMożesz kontynuować importowanie tego częściowego eksportu, ale zalecamy ponowną próbę z wszystkimi kodami QR, aby nie ryzykować utraty dostępu do tokenów.</string>\n    <string name=\"missing_qr_code_descriptor\">• Kod QR %d</string>\n    <plurals name=\"import_partial_export_anyway\">\n        <item quantity=\"one\">Zaimportuj %d token mimo to</item>\n        <item quantity=\"few\">Zaimportuj %d tokeny mimo to</item>\n        <item quantity=\"many\">Zaimportuj %d tokenów mimo to</item>\n        <item quantity=\"other\">Zaimportuj %d tokenów mimo to</item>\n    </plurals>\n    <string name=\"import_google_auth_failure\">Importowanie danych z Google Authenticator nie powiodło się</string>\n    <string name=\"unrelated_google_auth_batches_error\">Eksport zawiera informacje dla niepowiązanej partii. Spróbuj importować 1 partię jednocześnie.</string>\n    <string name=\"no_tokens_can_be_imported\">Nie można zaimportować żadnych tokenów</string>\n    <string name=\"unlocking_vault\">Odblokowywanie sejfu</string>\n    <string name=\"rename_group\">Zmień Nazwę Grupy</string>\n    <string name=\"no_group_selection\">Jeśli wpis nie jest częścią żadnej grupy, można go znaleźć pod \\\"Brak grupy\\\".</string>\n    <string name=\"remove_group\">Usuń grupę</string>\n    <string name=\"remove_group_description\">Czy na pewno chcesz usunąć tę grupę? Wpisy z tej grupy zostaną automatycznie przeniesione do kategorii \\'Brak grupy\\'.</string>\n    <string name=\"remove_unused_groups\">Usuń nieużywane grupy</string>\n    <string name=\"remove_unused_groups_description\">Czy na pewno chcesz usunąć wszystkie grupy, które nie mają przypisanego żadnego wpisu?</string>\n    <string name=\"remove_icon_pack\">Usuń pakiet ikon</string>\n    <string name=\"remove_icon_pack_description\">Czy na pewno chcesz usunąć ten pakiet ikon? Wpisy, które używają ikon z tego pakietu nie zostaną zmienione.</string>\n    <string name=\"details\">Szczegóły</string>\n    <string name=\"show_error_details\">Pokaż szczegóły błędu</string>\n    <string name=\"lock\">Zablokuj</string>\n    <string name=\"name\">Nazwa</string>\n    <string name=\"no_group\">Brak grupy</string>\n    <string name=\"sort\" comment=\"Title of the Sort button in the top action bar of the main view\">Sortuj</string>\n    <string name=\"sort_alphabetically\">Wydawca (od A do Z)</string>\n    <string name=\"sort_alphabetically_reverse\">Wydawca (od Z do A)</string>\n    <string name=\"sort_alphabetically_name\">Konto (od A do Z)</string>\n    <string name=\"sort_alphabetically_name_reverse\">Konto (od Z do A)</string>\n    <string name=\"sort_usage_count\">Licznik użycia</string>\n    <string name=\"sort_last_used\">Ostatnie użycie</string>\n    <string name=\"sort_custom\">Niestandardowe</string>\n    <string name=\"last_used\">Ostatnio używane</string>\n    <string name=\"last_used_never\">nigdy</string>\n    <string name=\"new_group\">Nowa grupa…</string>\n    <string name=\"group\">Grupa</string>\n    <string name=\"group_name_hint\">Nazwa grupy</string>\n    <string name=\"preference_manage_groups\">Edytuj grupy</string>\n    <string name=\"preference_manage_groups_summary\">Zarządzaj i usuwaj grupy tutaj</string>\n    <string name=\"preference_reset_usage_count\">Zeruj licznik użycia</string>\n    <string name=\"preference_reset_usage_count_summary\">Zresetuj liczbę użyć każdego wpisu w Twoim sejfie</string>\n    <string name=\"preference_reset_usage_count_dialog\">Czy na pewno chcesz ustawić liczbę użyć każdego wpisu w sejfie na 0?</string>\n    <string name=\"note\" comment=\"Users can add a note to an entry\">Notatki</string>\n    <string name=\"clear\">Wyczyść</string>\n    <string name=\"dialog_duplicate_entry_title\" comment=\"'Duplicate' is a noun here\">Duplikat wpisu</string>\n    <string name=\"dialog_duplicate_entry_message\">Ten wpis ma tę samą nazwę i wystawcę co jeden lub więcej istniejących wpisów. Jak chcesz kontynuować?</string>\n    <string name=\"dialog_duplicate_entry_overwrite_title\">Nadpisz istniejący wpis/wpisy</string>\n    <string name=\"dialog_duplicate_entry_overwrite_subtitle\">Zastąp istniejący wpis lub wpisy nowym. Tej czynności nie można cofnąć</string>\n    <string name=\"dialog_duplicate_entry_suffix_title\">Dodaj przyrostek</string>\n    <string name=\"dialog_duplicate_entry_suffix_subtitle\">Dodaj przyrostek do nazwy tego nowego wpisu. Nowa nazwa to: %s</string>\n    <string name=\"dialog_duplicate_entry_cancel_title\">Anuluj zapis</string>\n    <string name=\"dialog_duplicate_entry_cancel_subtitle\">Umożliwia edycję wpisu przed ponowną próbą jego zapisania</string>\n    <plurals name=\"dialog_duplicate_entry_overwrite_dialog_message\">\n        <item quantity=\"one\">Czy na pewno chcesz usunąć %d wpis o następującej nazwie:\\n\\n%s - %s</item>\n        <item quantity=\"few\">Czy na pewno chcesz usunąć %d wpisy o następującej nazwie:\\n\\n%s - %s</item>\n        <item quantity=\"many\">Czy na pewno chcesz usunąć %d wpisów o następującej nazwie:\\n\\n%s - %s</item>\n        <item quantity=\"other\">Czy na pewno chcesz usunąć %d wpisów o następującej nazwie:\\n\\n%s - %s</item>\n    </plurals>\n    <string name=\"dialog_duplicate_entry_overwrite_dialog_title\">Potwiedź usunięcie</string>\n    <string name=\"pref_haptic_feedback_summary\">Spraw, aby urządzenie wibrowało podczas odświeżania kodów</string>\n    <string name=\"pref_haptic_feedback_title\">Dotykowe sprzężenie zwrotne</string>\n    <string name=\"pref_highlight_entry_title\">Podświetl tokeny podczas kliknięcia</string>\n    <string name=\"pref_highlight_entry_summary\">Wyróżnij tokeny od siebie poprzez tymczasowe podświetlenie po ich kliknięciu</string>\n    <string name=\"pref_groups_multiselect_title\">Wybór wielokrotny grup</string>\n    <string name=\"pref_groups_multiselect_summary\">Zezwalaj na wybór wielu grup jednocześnie</string>\n    <string name=\"pref_minimize_on_copy_title\">Zminimalizuj przy skopiowaniu</string>\n    <string name=\"pref_minimize_on_copy_summary\">Zminimalizuj aplikację po skopiowaniu tokenu</string>\n    <string name=\"pref_copy_behavior_title\">Skopiuj tokeny do schowka</string>\n    <string name=\"pref_search_behavior_title\">Zachowanie wyszukiwania</string>\n    <string name=\"pref_pause_entry_title\">Zamroź tokeny po naciśnięciu</string>\n    <string name=\"pref_pause_entry_summary\">Wstrzymaj automatyczne odświeżanie tokenów poprzez dotknięcie ich. Tokeny nie będą aktualizowane tak długo, jak długo są podświetlone. Wymaga \\\"Podświetl tokeny podczas kliknięcia\\\" lub \\\"Kliknij, aby odkryć\\\".</string>\n    <string name=\"pin_keyboard_description\">Wpisz hasło, aby włączyć klawiaturę numeryczną. Pamiętaj, że ta klawiatura działa tylko dla hasła numerycznego</string>\n    <string name=\"pin_keyboard_error\">Wystąpił błąd podczas włączania klawiatury numerycznej</string>\n    <string name=\"pin_keyboard_error_description\">Ustawienie klawiatury numerycznej jest niemożliwe. Hasło musi zawierać tylko cyfry.</string>\n    <string name=\"pin_keyboard_disabled\">Hasło zostało zamienione. Klawiatura numeryczna już nie będzie się pojawiać.</string>\n    <string name=\"selected\">Wybrany</string>\n    <string name=\"dark_theme_title\">Motyw ciemny</string>\n    <string name=\"light_theme_title\">Motyw jasny</string>\n    <string name=\"amoled_theme_title\">Motyw AMOLED</string>\n    <string name=\"system_theme_title\">Ustawiony przy funkcję oszczędzania energii</string>\n    <string name=\"system_amoled_theme_title\">Ustawiony przy funkcję oszczędzania energii (AMOLED)</string>\n    <string name=\"normal_viewmode_title\">Normalny</string>\n    <string name=\"compact_mode_title\">Kompaktowy</string>\n    <string name=\"small_mode_title\">Mały</string>\n    <string name=\"tiles_mode_title\">Pola</string>\n    <string name=\"unknown_issuer\">Nieznany wydawca</string>\n    <string name=\"unknown_account_name\">Nieznana nazwa konta</string>\n    <plurals name=\"import_error_dialog\">\n        <item quantity=\"one\">Aplikacja Aegis nie może zaimportować %d token. Ten token zostanie pominięty. Kliknij \\'szczegóły\\', aby zobaczyć więcej informacji o błędzie.</item>\n        <item quantity=\"few\">Aplikacja Aegis nie może zaimportować %d tokenów. Te tokeny zostaną pominięte. Kliknij \\'szczegóły\\', aby zobaczyć więcej informacji o błędach.</item>\n        <item quantity=\"many\">Aplikacja Aegis nie może zaimportować %d tokenów. Te tokeny zostaną pominięte. Kliknij \\'szczegóły\\', aby zobaczyć więcej informacji o błędach.</item>\n        <item quantity=\"other\">Aplikacja Aegis nie może zaimportować %d tokenów. Te tokeny zostaną pominięte. Kliknij \\'szczegóły\\', aby zobaczyć więcej informacji o błędach.</item>\n    </plurals>\n    <string name=\"unable_to_process_deeplink\">Nie można przetworzyć głębokiego linku</string>\n    <string name=\"unable_to_read_qrcode_file\">Nie można odczytać i przetworzyć kodu QR z pliku: %s.</string>\n    <string name=\"unable_to_process_shared_text\">Nie można przetworzyć udostępnionego tekstu jako OTP</string>\n    <string name=\"unable_to_read_qrcode_files\">Nie można odczytać i przetworzyć niektórych kodów QR. Zaimportowano tylko %1$d/%2$d wpisów.</string>\n    <string name=\"unable_to_generate_qrcode\">Nie udało się wygenerować kodu QR</string>\n    <string name=\"select_picture\">Wybierz obraz</string>\n    <string name=\"select_icon\">Wybierz ikonę</string>\n    <string name=\"tile_open_vault\" comment=\"label for a quick settings tile that opens the app when tapped\">Otwórz sejf</string>\n    <string name=\"tile_open_scanner\" comment=\"label for a quick settings tile that opens the QR code scanner when tapped\">Otwórz skaner</string>\n    <string name=\"toggle_checkboxes\">Przełącz pola wyboru</string>\n    <string name=\"search\">Szukaj</string>\n    <string name=\"channel_name_lock_status\">Status blokady</string>\n    <string name=\"channel_description_lock_status\">Aplikacja Aegis może utworzyć stałe powiadomienie, aby powiadomić Cię, gdy sejf jest zamknięty</string>\n    <string name=\"vault_unlocked_state\">Sejf jest odblokowany. Kliknij, aby zablokować.</string>\n    <string name=\"version\">Wersja</string>\n    <string name=\"changelog\">Lista zmian</string>\n    <string name=\"whats_new\">Co nowego</string>\n    <string name=\"github_description\">Kod źródłowy, problemy i informacje</string>\n    <string name=\"license\">Licencja</string>\n    <string name=\"license_description\">Aplikacja Aegis Authenticator jest oparta na licencji GPLv3</string>\n    <string name=\"third_party_licenses\">Licencje innych firm</string>\n    <string name=\"third_party_licenses_description\">Licencje bibliotek zewnętrznych, z których korzysta aplikacja Aegis</string>\n    <string name=\"country_netherlands\">Holandia</string>\n    <string name=\"email_us\">Napisz wiadomość e-mail</string>\n    <string name=\"visit_website\">Odwiedź naszą stronę</string>\n    <string name=\"about_support\">Wsparcie</string>\n    <string name=\"support_rate\">Oceń</string>\n    <string name=\"support_rate_description\">Wesprzyj nas zostawiając opinię w Sklepie Google Play</string>\n    <string name=\"webview_error\">To urządzenie nie wspiera widoku internetowego, który jest niezbędny do wyświetlenia listy zmian i licencji. To brakujący element systemu operacyjnego.</string>\n    <string name=\"email\">Adres e-mail</string>\n    <string name=\"time_sync_warning_title\">Automatyczna synchronizacja czasu</string>\n    <string name=\"time_sync_warning_message\">Aby wygenerować poprawne kody, aplikacja Aegis korzysta z synchronizacji czasu systemowego. Różnica czasu zaledwie kilku sekund może spowodować nieprawidłowe kody. Wygląda na to, że Twoje urządzenie nie jest skonfigurowane do automatycznej synchronizacji czasu. Czy chcesz skorzystać z tej funkcji?</string>\n    <string name=\"time_sync_warning_disable\">Nie ostrzegaj mnie. Wiem co robię.</string>\n    <string name=\"google_qr_export_unrelated\">Znaleziono niepowiązany kod QR. Spróbuj ponownie uruchomić skaner.</string>\n    <plurals name=\"google_qr_export_scanned\">\n        <item quantity=\"one\">Zeskanowano %1$d/%2$d kod QR</item>\n        <item quantity=\"few\">Zeskanowano %1$d/%2$d kody QR</item>\n        <item quantity=\"many\">Zeskanowano %1$d/%2$d kodów QR</item>\n        <item quantity=\"other\">Zeskanowano %1$d/%2$d kodów QR</item>\n    </plurals>\n    <string name=\"google_qr_export_unexpected\">Aplikacja oczekiwała kodu QR nr %1$d, lecz zeskanowano kod nr %2$d</string>\n    <string name=\"backup_error_bar_message\"><b>Ostatnia kopia zapasowa sejfu nie powiodła się</b></string>\n    <string name=\"backup_error_dialog_details\" comment=\"The first parameter is the type of backup (e.g. built-in or Android backup). The second parameter is an elapsed time in the style of 'x seconds/minutes/days ago'.\">Ostatnia próba wykonania kopii zapasowej sejfu z użyciem %1$s nie powiodła się, ponieważ wystąpił błąd. Kopia zapasowa została wykonana w: %2$s. Sprawdź ustawienia kopii zapasowej, aby upewnić się, że wykonywanie kopii zapasowych może się pomyślnie zakończyć.    </string>\n    <string name=\"backup_permission_error_dialog_details\" comment=\"The first parameter is the type of backup (e.g. built-in or Android backup). The second parameter is an elapsed time in the style of 'x seconds/minutes/days ago'.\">Niedawna próba wykonania kopii zapasowej używając %1$s nie powiodła się, ponieważ Aegis nie miał uprawnienia do zapisu w wybranym folderze. Próba zapisu była wykonana %2$s. Teb błąd może wystąpić po przeniesieniu/zmianie nazwy wybranego folderu lub po niedawnym przywróceniu Aegis z kopii zapasowej. Proszę wybrać poprawny folder.\n    </string>\n    <string name=\"backup_system_builtin\">Wbudowane automatyczne kopie zapasowe Aegis</string>\n    <string name=\"backup_system_android\">System kopii zapasowej w chmurze Android</string>\n    <string name=\"backup_reminder_bar_message_with_latest\" comment=\"The parameter is an elapsed time in the style of 'x seconds/minutes/days ago'\">        Najnowsza kopia zapasowa jest nieaktualna (%s)\n    </string>\n    <string name=\"backup_reminder_bar_message\">Zmiany nie są zapisane w kopii zapasowej\n    </string>\n    <string name=\"backup_reminder_bar_dialog_title\">Zmiany nie zostały zapisane w kopii zapasowej</string>\n    <string name=\"backup_reminder_bar_dialog_summary\">        Zmiany w sejfie nie zostały jeszcze zapisane w kopii zapasowej. Ważne jest wykonywanie regularnych kopii zapasowych, aby zapobiec utracie dostępu do twoich kont. Rozważ włączenie automatycznych kopii zapasowych w menu ustawień.\n    </string>\n    <string name=\"backup_reminder_bar_dialog_accept\">Skonfiguruj tworzenie kopii zapasowych</string>\n    <string name=\"backup_plaintext_export_warning\"><b>Sejf został ostatnio wyeksportowany w jawnym tekście</b></string>\n    <string name=\"pref_show_plaintext_warning_hint\">Nie pokazuj tego ostrzeżenia ponownie</string>\n    <string name=\"backup_plaintext_warning_explanation\">To ostrzeżenie jest wyświetlane, ponieważ ostatnio wyeksportowano nieszyfrowaną kopię sejfu. Aby zachować bezpieczeństwo tokenów, zalecamy usunięcie tego pliku, gdy nie będzie już potrzebny.</string>\n    <string name=\"switch_camera\">Przełącz aparat</string>\n    <string name=\"empty_list\">Brak kodów do wyświetlenia. Dodaj wpisy, klikając na znak plusa w prawym dolnym rogu</string>\n    <string name=\"empty_list_title\">Nie znaleziono wpisów</string>\n    <string name=\"empty_group_list\">Nie znaleziono grup do wyświetlenia. Dodaj grupy na ekranie edycji wpisu</string>\n    <string name=\"empty_group_list_title\">Nie znaleziono grup</string>\n    <string name=\"no_icon_packs\">Nie zaimportowałeś żadnych pakietów ikon. Importuj ikony, klikając na znak plusa. Wskazówka: wypróbuj pakiet <a href=\"https://aegis-icons.github.io\">aegis-icons</a>.</string>\n    <string name=\"no_icon_packs_title\">Brak pakietów ikon</string>\n    <string name=\"pick_icon\">Wybierz ikonę</string>\n    <string name=\"uncategorized\">Bez kategorii</string>\n    <string name=\"done\">Gotowe</string>\n    <plurals name=\"qr_count\">\n        <item quantity=\"one\">%d / %d kod QR</item>\n        <item quantity=\"few\">%d / %d kody QR</item>\n        <item quantity=\"many\">%d / %d kodów QR</item>\n        <item quantity=\"other\">%d / %d kody QR</item>\n    </plurals>\n    <string name=\"next\">Następny</string>\n    <string name=\"previous\">Poprzedni</string>\n    <string name=\"copy_uri\">Kopiuj URI</string>\n    <string name=\"unable_to_copy_uri_to_clipboard\">Nie można skopiować URI do schowka</string>\n    <string name=\"uri_copied_to_clipboard\">Skopiowano URI do schowka</string>\n    <string name=\"transfer_entry_description\">Zeskanuj kod QR za pomocą aplikacji uwierzytelniającej, do której chcesz przenieść ten wpis</string>\n    <string name=\"transfer_entry_brightness\">Stuknij kod QR, aby przełączyć pełną jasność ekranu</string>\n    <string name=\"google_auth_compatible_transfer_description\">Zeskanuj te kody QR za pomocą Aegis lub Google Authenticator.\\n\\nZ powodu ograniczeń w aplikacji Google Authenticator, tylko tokeny TOTP &amp; HOTP, które używają SHA1 i generują 6 cyfrowe kody są uwzględniane</string>\n    <string name=\"password_strength_very_weak\">Bardzo słabe</string>\n    <string name=\"password_strength_weak\">Słabe</string>\n    <string name=\"password_strength_fair\">Przyzwoite</string>\n    <string name=\"password_strength_good\">Dobre</string>\n    <string name=\"password_strength_strong\">Silne</string>\n    <string name=\"password_strength_unknown\">Hasło jest zbyt długie, by przeprowadzić analizę bezpieczeństwa</string>\n    <string name=\"pref_pin_keyboard_title\">Używaj klawiatury numerycznej na ekranie blokady</string>\n    <string name=\"pref_pin_keyboard_summary\">Włącz tę opcję, jeśli chcesz włączyć klawiaturę numeryczną na ekranie blokady. Ta klawiatura działa tylko z numerycznymi hasłami</string>\n    <string name=\"title_activity_preferences\">Ustawienia</string>\n    <string name=\"title_activity_manage_groups\">Zarządzaj grupami</string>\n    <string name=\"title_activity_transfer\">Przenieś wpisy</string>\n    <string name=\"title_activity_about\">O aplikacji</string>\n    <string name=\"title_activity_edit_entry\">Edytuj wpis</string>\n    <string name=\"title_activity_scan_qr\">Skanuj kod QR</string>\n    <string name=\"title_activity_import_entries\">Importuj wpisy</string>\n    <string name=\"title_activity_assign_icons\">Przypisz ikony</string>\n    <string name=\"title_activity_licenses\">Licencje innych firm</string>\n    <string name=\"dialog_wipe_entries_title\">Wyczyść wpisy</string>\n    <string name=\"dialog_wipe_entries_message\">Twój sejf zawiera już wpisy. Czy chcesz usunąć te wpisy przed zaimportowaniem tego pliku?\\n\\n<b>W ten sposób trwale stracisz dostęp do obecnych wpisów w sejfie.</b></string>\n    <string name=\"dialog_wipe_entries_checkbox\">Wyczyść zawartość sejfu</string>\n    <string name=\"import_from_clipboard_title\">Importuj ze schowka</string>\n    <string name=\"import_from_clipboard_message\">Znaleźliśmy prawidłowy identyfikator URI otpauth w schowku.\\n\\n<b>Nazwa</b>: %1$s\\n<b>Wydawca</b>: %2$s\\n\\nCzy chcesz go użyć do wstępnego wypełnienia tego wpisu?</string>\n    <string name=\"panic_trigger_ignore_toast\">Aegis otrzymał wyzwalacz paniki, ale ustawienie jest wyłączone, ignorowanie</string>\n    <string name=\"pref_panic_trigger_title\">Usuń sejf przy wyzwalaczu paniki</string>\n    <string name=\"pref_panic_trigger_summary\">Usuń sejf po otrzymaniu wyzwalacza paniki z Ripple</string>\n    <string name=\"import_vault\">Zaimportuj sejf Aegis</string>\n    <string name=\"import_vault_hint\">Chcesz zaimportować z innej aplikacji 2FA? Ukończ konfigurację, a następnie przejdź do menu ustawień.</string>\n    <plurals name=\"import_duplicate_toast\">\n        <item quantity=\"one\">Odznaczono %d potencjalny duplikat. Sprawdź listę.</item>\n        <item quantity=\"few\">Odznaczono %d potencjalne duplikaty. Sprawdź listę.</item>\n        <item quantity=\"many\">Odznaczono %d potencjalnych duplikatów. Sprawdź listę.</item>\n        <item quantity=\"other\">Odznaczono %d potencjalnych duplikatów. Sprawdź listę.</item>\n    </plurals>\n    <string name=\"importer_help_2fas\">Dostarcz plik zapasowy 2FAS Authenticator.</string>\n    <string name=\"importer_help_aegis\">Dostarcz plik zapasowy Aegis.</string>\n    <string name=\"importer_help_authenticator_plus\">Dostarcz plik eksportu Authenticator Plus uzyskany w <b>Ustawienia -&gt; Kopia zapasowa &amp; Przywróć -&gt; Eksportuj jako tekst i HTML</b>.</string>\n    <string name=\"importer_help_authy\">Dostarcz kopię <b>/data/data/com.authy.authy/shared_prefs/com.authy.storage.tokens.authenticator.xml</b>, znajdującą się w wewnętrznym katalogu pamięci Authy.</string>\n    <string name=\"importer_help_andotp\">Dostarcz plik andOTP eksportu/kopii zapasowej.</string>\n    <string name=\"importer_help_bitwarden\">Dostarcz plik kopii zapasowej Bitwarden. Zaszyfrowane pliki nie są obsługiwane.</string>\n    <string name=\"importer_help_battle_net_authenticator\">Dostarcz kopię\n<b>/data/data/com.blizzard.messenger/shared_prefs/com.blizzard.messenger.authenticator_preferences.xml</b>, znajdującą się w wewnętrznym katalogu pamięci Battle.net Authenticator.</string>\n    <string name=\"importer_help_duo\">Dostarcz kopię <b>/data/data/com.duosecurity.duomobile/files/duokit/accounts.json</b>, znajdującą się w wewnętrznym katalogu pamięci DUO.</string>\n    <string name=\"importer_help_ente_auth\">Dostarcz plik eksportu Ente Auth. Obecnie obsługiwane są tylko niezaszyfrowane pliki.</string>\n    <string name=\"importer_help_freeotp\">FreeOTP 2: Dostarcz plik kopii zapasowej.\\nFreeOTP 1.x: Dostarcz kopię pliku <b>/data/data/org.fedorahosted.freeotp/shared_prefs/tokens.xml</b> znajdującego się w katalogu FreeOTP pamięci wewnętrznej.</string>\n    <string name=\"importer_help_freeotp_plus\">Dostarcz plik eksportu FreeOTP+.</string>\n    <string name=\"importer_warning_title_freeotp2\">Zgodność z FreeOTP 2</string>\n    <string name=\"importer_warning_message_freeotp2\">Istnieje szereg problemów w FreeOTP 2, które mogą skutkować uszkodzonymi kopiami zapasowymi. Aegis spróbuje odzyskać jak najwięcej wpisów, ale możliwe, że niektóre lub nawet wszystkie z nich nie zostaną zaimportowane.</string>\n    <string name=\"importer_help_google_authenticator\"><b>Obsługiwane są tylko pliki bazy danych z Google Authenticator v5.10 i wcześniej</b>.\\n\\nDostarcz kopię <b>/data/com.google.android.apps.authenticator2/databases/databases</b>, zlokalizowane w wewnętrznym katalogu pamięci Google Authenticator.</string>\n    <string name=\"importer_help_microsoft_authenticator\">Dostarcz kopię <b>/data/data/com.azure.authenticator/databases/PhoneFactor</b>, znajdującą się w wewnętrznym katalogu pamięci Microsoft Authenticator.</string>\n    <string name=\"importer_help_plain_text\">Dostarcz plik tekstowy z URI Google Authenticator w każdej linii.</string>\n    <string name=\"importer_help_proton_authenticator\">Dostarcz plik eksportowy Proton Authenticator (.json) uzyskany poprzez <b>Ustawienia -&gt; Eksportuj</b>.</string>\n    <string name=\"importer_help_steam\"><b>Steam v3.0 i nowsze nie są wspierane</b>. Dostarcz kopię \n<b>/data/data/com.valvesoftware.android.steam.community/files/Steamguard-*.json</b>,\nzlokalizowanego w wewnętrznym katalogu Steam.</string>\n    <string name=\"importer_help_stratum\">Dostarcz plik eksportu Stratum uzyskany przez <b>Ustawienia -&gt; Kopia zapasowa -&gt; Kopia zapasowa do zaszyfrowanego pliku (zalecana)</b>.</string>\n    <string name=\"importer_help_totp_authenticator\">Dostarcz plik eksportowy TOTP Authenticator.</string>\n    <string name=\"importer_help_winauth\">Dostarcz plik eksportowy WinAuth.</string>\n    <string name=\"import_assign_icons_dialog_title\">Przypisz ikony</string>\n    <string name=\"import_assign_icons_dialog_text\">Czy chcesz przypisać ikony do zaimportowanych wpisów?</string>\n    <string name=\"importer_encrypted_exception_google_authenticator\">Zaszyfrowany wpis został pominięty: %s</string>\n    <string name=\"importer_help_direct\">Importuj wpisy bezpośrednio z %s. Wymaga to zainstalowania aplikacji na tym urządzeniu i dostępu roota dla Aegis.</string>\n    <string name=\"groups\">Grupy</string>\n    <string name=\"pref_focus_search\">Podświetl wyszukiwanie na starcie aplikacji</string>\n    <string name=\"pref_focus_search_summary\">Przejdź do wyszukiwania natychmiast po otwarciu aplikacji.</string>\n    <string name=\"pref_grouping_halves\">Połówki</string>\n    <string name=\"pref_grouping_none\">Brak grupowania</string>\n    <string name=\"pref_grouping_size_two\">Grupy z 2 elementami</string>\n    <string name=\"pref_grouping_size_three\">Grupy z 3 elementami</string>\n    <string name=\"pref_grouping_size_four\">Grupy z 4 elementami</string>\n    <string name=\"pref_copy_behavior_never\">Nigdy</string>\n    <string name=\"pref_copy_behavior_single_tap\">Pojedyncze dotknięcie</string>\n    <string name=\"pref_copy_behavior_double_tap\">Podwójne dotknięcie</string>\n    <string name=\"pref_account_name_position_hidden\">Ukryta</string>\n    <string name=\"pref_account_name_position_end\">Obok wydawcy</string>\n    <string name=\"pref_account_name_position_below\">Pod wydawcą</string>\n    <plurals name=\"time_elapsed_seconds\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"one\">%d sekundę temu</item>\n        <item quantity=\"few\">%d sekundy temu</item>\n        <item quantity=\"many\">%d sekund temu</item>\n        <item quantity=\"other\">%d sekund temu</item>\n    </plurals>\n    <plurals name=\"time_elapsed_minutes\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"one\">%d minutę temu</item>\n        <item quantity=\"few\">%d minuty temu</item>\n        <item quantity=\"many\">%d minut temu</item>\n        <item quantity=\"other\">%d minut temu</item>\n    </plurals>\n    <plurals name=\"time_elapsed_hours\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"one\">%d godzinę temu</item>\n        <item quantity=\"few\">%d godziny temu</item>\n        <item quantity=\"many\">%d godzin temu</item>\n        <item quantity=\"other\">%d godzin temu</item>\n    </plurals>\n    <plurals name=\"time_elapsed_days\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"one\">%d dzień temu</item>\n        <item quantity=\"few\">%d dni temu</item>\n        <item quantity=\"many\">%d dni temu</item>\n        <item quantity=\"other\">%d dni temu</item>\n    </plurals>\n    <plurals name=\"time_elapsed_years\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"one\">%d rok temu</item>\n        <item quantity=\"few\">%d lata temu</item>\n        <item quantity=\"many\">%d lat temu</item>\n        <item quantity=\"other\">%d lat temu</item>\n    </plurals>\n    <plurals name=\"dropdown_checkboxes_default_count\">\n        <item quantity=\"one\">Wybrano %d element</item>\n        <item quantity=\"few\">Wybrano %d elementy</item>\n        <item quantity=\"many\">Wybrano %d elementów</item>\n        <item quantity=\"other\">Wybrano %d elementów</item>\n    </plurals>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-pl-rPL-v29/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"system_theme_title\">Domyślny systemu</string>\n    <string name=\"system_amoled_theme_title\">Domyślny systemu (AMOLED)</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-pt-rBR/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources xmlns:tools=\"http://schemas.android.com/tools\">\n    <string name=\"action_settings\">Configurações</string>\n    <string name=\"action_about\">Sobre</string>\n    <string name=\"action_delete\">Apagar</string>\n    <string name=\"action_transfer\">Transferir</string>\n    <string name=\"action_edit_icon\">Editar ícone</string>\n    <string name=\"action_reset_usage_count\">Reconfigurar contagem de uso</string>\n    <string name=\"action_reset_usage_count_dialog\">Tem certeza que deseja configurar a contagem de uso deste item para 0?</string>\n    <string name=\"action_default_icon\">Restaurar ícone padrão</string>\n    <string name=\"discard\">Descartar</string>\n    <string name=\"save\">Salvar</string>\n    <string name=\"all\">Tudo</string>\n    <string name=\"issuer\">Emissor</string>\n    <string name=\"yandex_pin\">PIN (4–16 dígitos)</string>\n    <string name=\"motp_pin\">PIN (4 dígitos)</string>\n    <string name=\"suggested\">Sugerido</string>\n    <string name=\"usage_count\">Contagem de uso</string>\n    <string name=\"warning\">Atenção</string>\n    <string name=\"pref_cat_appearance_app\">Aplicativo</string>\n    <string name=\"pref_cat_appearance_entries\">Itens</string>\n    <string name=\"pref_cat_backups_android\">Android</string>\n    <string name=\"pref_cat_backups_auto\">Backups automáticos</string>\n    <string name=\"pref_section_behavior_title\">Comportamento</string>\n    <string name=\"pref_section_behavior_summary\">Personalize o comportamento ao interagir com a lista de itens.</string>\n    <string name=\"pref_section_appearance_title\">Aparência</string>\n    <string name=\"pref_section_appearance_summary\">Ajuste o tema, idioma e outras configurações que afetam a aparência do aplicativo.</string>\n    <string name=\"pref_section_security_title\">Segurança</string>\n    <string name=\"pref_section_security_summary\">Configure a criptografia, desbloqueio biométrico, bloqueio automático e outras configurações de segurança.</string>\n    <string name=\"pref_section_import_export_title\">Importação e Exportação</string>\n    <string name=\"pref_section_import_export_summary\">Importe backups do Aegis ou de outros aplicativos de autenticação. Crie exportações manuais do seu cofre do Aegis.</string>\n    <string name=\"pref_section_audit_log_title\">Registro de auditoria</string>\n    <string name=\"pref_section_audit_log_summary\">Encontre uma lista de todos os eventos importantes reportados que aconteceram dentro do aplicativo.</string>\n    <string name=\"pref_section_backups_title\">Backups</string>\n    <string name=\"pref_section_backups_summary\">Configure os backups automáticos em um local da sua escolha ou ative a participação no sistema de backup em nuvem do Android.</string>\n    <string name=\"pref_section_icon_packs\">Pacotes de ícones</string>\n    <string name=\"pref_section_icon_packs_summary\">Gerencie e importe pacotes de ícones</string>\n    <string name=\"pref_select_theme_title\">Tema</string>\n    <string name=\"pref_dynamic_colors_title\">Cores dinâmicas</string>\n    <string name=\"pref_dynamic_colors_summary\">Aplicar uma sobreposição baseada nas cores do seu tema Android</string>\n    <string name=\"pref_view_mode_title\">Modo de visualização</string>\n    <string name=\"pref_lang_title\">Idioma</string>\n    <string name=\"pref_show_icons_title\">Mostrar ícones</string>\n    <string name=\"pref_show_icons_summary\">Mostrar ícones ao lado de cada item</string>\n    <string name=\"pref_code_group_size_title\">Agrupamento de dígitos</string>\n    <string name=\"pref_code_group_size_summary\">Selecione o número de dígitos para agrupar códigos</string>\n    <string name=\"pref_account_name_position_title\">Mostrar o nome da conta</string>\n    <string name=\"pref_show_next_code_title\">Mostrar próximo código</string>\n    <string name=\"pref_show_next_code_summary\">Gerar e mostrar o próximo código antes do tempo</string>\n    <string name=\"pref_expiration_state_title\">Indicar quando códigos estão prestes a expirar</string>\n    <string name=\"pref_expiration_state_summary\">Mudar a cor dos códigos e fazê-los piscar quando estão prestes a expirar</string>\n    <string name=\"pref_expiration_state_fallback\">Mudar a cor dos códigos quando estão prestes a expirar</string>\n    <string name=\"pref_shared_issuer_account_name_title\">Apenas mostrar o nome da conta quando necessário</string>\n    <string name=\"pref_shared_issuer_account_name_summary\">Mostra os nomes de conta apenas quando eles compartilham o mesmo emissor. Outros nomes de conta serão ocultados.</string>\n    <string name=\"pref_account_name_position_summary_override\">Esta configuração é sobrescrita pelo modo de visualização em grade. O nome da conta será mostrado abaixo do emissor.</string>\n    <string name=\"pref_import_file_title\">Importar de um arquivo</string>\n    <string name=\"pref_import_file_summary\">Importe tokens de um arquivo</string>\n    <string name=\"pref_android_backups_title\">Backups na nuvem do Android</string>\n    <string name=\"pref_android_backups_summary\">Permitir que o sistema de backup na nuvem do Android inclua o cofre do Aegis em seus backups. Essa opção só é suportada para cofres criptografados.</string>\n    <string name=\"pref_android_backups_hint\"><i>Os backups de dispositivo para dispositivo (D2D) são sempre permitidos, independente da configuração acima</i></string>\n    <string name=\"pref_backups_title\">Fazer backup do cofre automaticamente</string>\n    <string name=\"pref_backups_summary\">Criar backups do cofre automaticamente em armazenamento externo ao acontecer mudanças. Essa opção só é suportada para cofres criptografados.</string>\n    <string name=\"pref_backups_reminder_title\">Lembrete de backup</string>\n    <string name=\"pref_backups_reminder_summary\">Mostrar um lembrete para que você faça backup do seu cofre caso você não tenha feito um após alterações recentes.</string>\n    <string name=\"pref_backups_reminder_dialog_title\">Desativar lembrete de backup</string>\n    <string name=\"pref_backups_reminder_dialog_summary\">Ao desativar este lembrete, o Aegis não té avisará quando há mudanças quais não tiveram seu backup feito. Isso te coloca em risco de perder o acesso aos seus tokens. Tem certeza que quer desativar o lembrete?</string>\n    <string name=\"pref_backups_versioning_strategy_title\">Estratégia de backup</string>\n    <string name=\"pref_backups_versioning_strategy_keep_x_versions\">Manter várias versões</string>\n    <string name=\"pref_backups_versioning_strategy_single_backup\">Um único backup</string>\n    <string name=\"pref_backups_versioning_strategy_single_backup_warning\">A estratégia de backup selecionada não é adequada e não é recomendada. Uma única falha no backup pode levar à perda de seu único backup.</string>\n    <string name=\"pref_backups_versioning_strategy_dialog_title\">Selecione uma estratégia de backup</string>\n    <string name=\"pref_backups_location_title\">Local de backup</string>\n    <string name=\"pref_backups_location_summary\">Os backups serão armazenados em</string>\n    <string name=\"pref_backup_location_summary\">O backup será armazenado em</string>\n    <string name=\"pref_backups_trigger_title\">Executar backup</string>\n    <string name=\"pref_backups_trigger_summary\">Executa um backup manualmente</string>\n    <string name=\"pref_backups_versions_title\">Quantas versões manter</string>\n    <string name=\"pref_backups_versions_infinite\">\\u221E</string>\n    <plurals name=\"pref_backups_versions_summary\">\n        <item quantity=\"one\">Manter %1$d versão do backup</item>\n        <item quantity=\"other\">Manter %1$d versões do backup</item>\n    </plurals>\n    <string name=\"pref_backups_versions_infinite_summary\">Manter um número infinito de versões do backup</string>\n    <string name=\"pref_import_app_title\">Importar de um app</string>\n    <string name=\"pref_import_app_summary\">Importe tokens de um app (requer acesso ao root)</string>\n    <string name=\"pref_export_title\">Exportar</string>\n    <string name=\"pref_export_summary\">Exporte o cofre</string>\n    <string name=\"pref_password_reminder_title\">Lembrete de senha</string>\n    <string name=\"pref_google_auth_export_title\">Exportar para o Google Authenticator</string>\n    <string name=\"pref_google_auth_export_descriptor\">Gera QR codes compatíveis com o Google Authenticator</string>\n    <string name=\"pref_google_auth_export_no_data\">Não há dados para exportar</string>\n    <plurals name=\"pref_google_auth_export_incompatible_entries\">\n        <item quantity=\"one\">%d item incompatível foi pulado</item>\n        <item quantity=\"other\">%d itens incompatíveis foram pulados</item>\n    </plurals>\n    <string name=\"pref_password_reminder_summary\">Mostrar um lembrete %s para digitar a senha, para que você não a esqueça.</string>\n    <string name=\"pref_password_reminder_summary_disabled\">Desativado</string>\n    <string name=\"pref_secure_screen_title\">Segurança de tela</string>\n    <string name=\"pref_secure_screen_summary\">Bloqueie capturas de tela e outros métodos de captura de tela dentro do app</string>\n    <string name=\"pref_tap_to_reveal_title\">Tocar para revelar</string>\n    <string name=\"pref_tap_to_reveal_summary\">Os tokens ficarão ocultos por padrão. Toque nos tokens para revelar o código.</string>\n    <string name=\"pref_tap_to_reveal_time_title\">Tempo máximo de exibição do código</string>\n    <string name=\"pref_auto_lock_title\">Bloqueio automático</string>\n    <string name=\"pref_auto_lock_summary\">Quando %s</string>\n    <string name=\"pref_auto_lock_summary_disabled\">Desativado</string>\n    <string name=\"pref_auto_lock_prompt\">Bloquear o Aegis automaticamente quando</string>\n    <string name=\"pref_auto_lock_type_back_button\">O botão de voltar for pressionado</string>\n    <string name=\"pref_auto_lock_type_minimize\">O app for minimizado</string>\n    <string name=\"pref_auto_lock_type_device_lock\">O dispositivo for bloqueado</string>\n    <string name=\"pref_backup_password_category\">Backup e Exportação</string>\n    <string name=\"pref_backup_password_title\">Senha separada para backups e exportação</string>\n    <string name=\"pref_backup_password_summary\">Se ativada, a senha usada para desbloquear o aplicativo não poderá ser mais utilizada para descriptografar backups e exportações.</string>\n    <string name=\"pref_backup_password_change_title\">Alterar senha para backups e exportação</string>\n    <string name=\"pref_backup_password_change_summary\">Configure uma nova senha que será usada para criptografar o cofre durante backups e exportação.</string>\n    <string name=\"pref_encryption_title\">Criptografia</string>\n    <string name=\"pref_encryption_summary\">Criptografe o cofre e o desbloqueie com uma senha ou com biometria</string>\n    <string name=\"pref_biometrics_title\">Desbloqueio biométrico</string>\n    <string name=\"pref_biometrics_summary\">Permitir autenticação por biometria para desbloquear o cofre</string>\n    <string name=\"pref_search_behavior_summary\">Pesquisar dentro de: %s</string>\n    <string name=\"pref_search_behavior_prompt\">Pesquise nos seguintes campos</string>\n    <string name=\"pref_search_behavior_type_name\">Nome</string>\n    <string name=\"pref_search_behavior_type_issuer\">Emissor</string>\n    <string name=\"pref_search_behavior_type_note\">Observação</string>\n    <string name=\"pref_search_behavior_type_groups\">Grupos</string>\n    <string name=\"pref_set_password_title\">Alterar senha</string>\n    <string name=\"pref_set_password_summary\">Configure uma nova senha que será necessária para desbloquear o cofre</string>\n    <string name=\"no_events_title\">Não há eventos reportados</string>\n    <string name=\"no_events_description\">Não há eventos importados que foram reportados dentro do app</string>\n    <string name=\"event_title_vault_unlocked\">Cofre desbloqueado</string>\n    <string name=\"event_description_vault_unlocked\">O cofre foi desbloqueado com sucesso</string>\n    <string name=\"event_title_backup_created\">Backup criado</string>\n    <string name=\"event_description_backup_created\">Um backup do cofre foi criado com sucesso</string>\n    <string name=\"event_title_android_backup_created\">Backup criado pelo Android</string>\n    <string name=\"event_description_android_backup_created\">Um backup do cofre foi criado com sucesso pelo Android</string>\n    <string name=\"event_title_vault_exported\">Cofre exportado</string>\n    <string name=\"event_description_vault_exported\">Uma cópia do cofre foi exportada</string>\n    <string name=\"event_title_entry_shared\">Item compartilhado</string>\n    <string name=\"event_description_entry_shared\">Um item foi compartilhado</string>\n    <string name=\"event_title_vault_unlock_failed_password\">Falha ao desbloquear o cofre (senha)</string>\n    <string name=\"event_description_vault_unlock_failed_password\">Uma tentativa de desbloquear o cofre com uma senha falhou</string>\n    <string name=\"event_title_vault_unlock_failed_biometrics\">Falha ao desbloquear o cofre (biometria)</string>\n    <string name=\"event_description_vault_unlock_failed_biometrics\">Uma tentativa de desbloquear o cofre com a biometria falhou</string>\n    <string name=\"event_unknown\">Tipo de evento desconhecido</string>\n    <string name=\"audit_log_entry_deleted\">(apagado)</string>\n    <string name=\"today_at_time\">Hoje às %1$s</string>\n    <string name=\"day_of_week_at_time\">%1$s às %2$s</string>\n    <string name=\"export_encrypted\">Criptografar o cofre</string>\n    <string name=\"export_help\">Esta ação irá exportar o cofre para fora do armazenamento interno do Aegis. Selecione o formato em que você gostaria que sua exportação esteja:</string>\n    <string name=\"export_warning_unencrypted\">Você está prestes a exportar uma cópia sem criptografia de seu cofre do Aegis. <b>Isto não é recomendado</b>.</string>\n    <string name=\"export_warning_password\">As exportações são criptografadas usando uma senha separada, configurada nas configurações de segurança.</string>\n    <string name=\"understand_risk_accept\">Eu compreendo o risco</string>\n    <string name=\"export_format_aegis\">Aegis (.JSON)</string>\n    <string name=\"export_format_google_auth_uri\">Arquivo de texto (.TXT)</string>\n    <string name=\"export_format_html\">Página da web (.HTML)</string>\n    <string name=\"export_format_hint\">Formato de exportação</string>\n    <string name=\"export_all_groups\">Exportar todos os grupos</string>\n    <string name=\"export_choose_groups\">Selecione quais grupos exportar</string>\n    <plurals name=\"export_groups_selected_count\">\n        <item quantity=\"one\">%d grupo selecionado</item>\n        <item quantity=\"other\">%d grupos selecionados</item>\n    </plurals>\n    <string name=\"export_no_groups_selected\">Nenhum grupo selecionado para exportar</string>\n    <string name=\"export_html_title\" comment=\"The title of an HTML export document\">Exportação do Aegis Authenticator</string>\n    <string name=\"choose_authentication_method\">Segurança</string>\n    <string name=\"authentication_method_explanation\">O Aegis é um app de 2FA focado em segurança. Os tokens serão armazenados em um cofre, que pode opcionalmente ser criptografado com uma senha da sua escolha. Caso um invasor obtenha seu arquivo do cofre criptografado, ele não será capaz de acessar os conteúdos sem saber sua senha.\\n\\nNós pré-selecionamos a opção que nós pensamos que melhor se adapta ao seu dispositivo.</string>\n    <string name=\"authentication_method_none\">Nenhuma</string>\n    <string name=\"authentication_method_none_description\">Nenhuma senha é necessária para desbloquear o cofre e ele não será criptografado. <b>Essa opção não é recomendada</b>.</string>\n    <string name=\"authentication_method_password\">Senha</string>\n    <string name=\"authentication_method_password_description\">Uma senha é necessária para desbloquear o cofre.</string>\n    <string name=\"authentication_method_password_explanation\">Atenção: Se você esquecer sua senha, você perderá definitivamente acesso aos seus tokens. Não há como recuperá-los sem a senha.</string>\n    <string name=\"authentication_method_biometrics\">Biometria</string>\n    <string name=\"authentication_method_biometrics_description\">Em adição a uma senha, você pode usar a biometria registrada no dispositivo, como uma impressão digital ou seu rosto, para desbloquear o cofre.</string>\n    <string name=\"authentication\">Desbloqueie o cofre</string>\n    <string name=\"authentication_multiline\" comment=\"The newline in the middle is used for aesthetic purposes\">Desbloqueie\\no cofre</string>\n    <string name=\"auth_use_biometrics\">Ou toque aqui para usar a <font fgcolor=\"#FF0D86C1\">biometria</font></string>\n    <string name=\"set_password\">Por favor, digite uma senha</string>\n    <string name=\"set_group\">Por favor, digite um nome de grupo</string>\n    <string name=\"set_number\">Por favor, digite um número</string>\n    <string name=\"set_password_confirm\">Por favor, confirme a senha</string>\n    <string name=\"invalid_password\">A senha está incorreta</string>\n    <string name=\"invalidated_biometrics\">Foi detectada uma alteração nas configurações de segurança do seu dispositivo. Por favor, vá até \\\"Aegis -&gt; Configurações -&gt; Segurança -&gt; Desbloqueio biométrico\\\" para desativar e reativar o desbloqueio biométrico.</string>\n    <string name=\"password_reminder\">Por favor, digite sua senha. Nós ocasionalmente pedimos que você faça isso para que não a esqueça.</string>\n    <string name=\"password_reminder_dialog_title\">Desbloqueio biométrico por padrão</string>\n    <string name=\"password_reminder_dialog_message\">Ocasionalmente pedimos que você digite sua senha para garantir que você não se esqueça dela e não consiga desbloquear seu cofre. Depois de digitar sua senha uma vez, o Aegis retornará ao desbloqueio biométrico até que seja hora de outro lembrete de senha.</string>\n    <string name=\"password_reminder_freq_never\">Nunca</string>\n    <string name=\"password_reminder_freq_weekly\">Semanalmente</string>\n    <string name=\"password_reminder_freq_biweekly\">Quinzenalmente</string>\n    <string name=\"password_reminder_freq_monthly\">Mensalmente</string>\n    <string name=\"password_reminder_freq_quarterly\">Trimestralmente</string>\n    <string name=\"enter_password_2fas_message\">Parece que este backup do 2FAS está criptografado. Por favor, digite a senha abaixo.</string>\n    <string name=\"enter_password_authy_message\">Parece que seus tokens do Authy estão criptografados. Por favor, feche o Aegis, abra o Authy e desbloqueie os tokens com sua senha. Alternativamente, o Aegis também pode tentar descriptografar seus Authy tokens para você, se você digitar sua senha abaixo.</string>\n    <string name=\"enter_password_aegis_title\">Por favor, digite a senha de importação</string>\n    <string name=\"period_hint\">Intervalo (segundos)</string>\n    <string name=\"algorithm_hint\">Função de hash</string>\n    <string name=\"type\">Tipo</string>\n    <string name=\"share\">Compartilhar</string>\n    <string name=\"yes\">Sim</string>\n    <string name=\"no\">Não</string>\n    <string name=\"undo\">Desfazer</string>\n    <string name=\"unlock\">Desbloquear</string>\n    <string name=\"advanced\">Avançado</string>\n    <string name=\"counter\">Contador</string>\n    <string name=\"digits\">Dígitos</string>\n    <string name=\"secret\">Segredo</string>\n    <string name=\"scan\">Ler código QR</string>\n    <string name=\"scan_image\">Ler de uma imagem</string>\n    <string name=\"enter_manually\">Digitar manualmente</string>\n    <string name=\"set_up_biometric\">Configurar o desbloqueio biométrico</string>\n    <string name=\"copy\">Copiar</string>\n    <string name=\"edit\">Editar</string>\n    <string name=\"select_all\">Selecionar tudo</string>\n    <string name=\"assign_icons\">Atribuir ícones</string>\n    <string name=\"assign_groups\">Atribuir grupos</string>\n    <string name=\"assign_groups_dialog_summary\">Selecione um grupo para o qual deseja atribuir os itens selecionados.</string>\n    <string name=\"assign_groups_dialog_dropdown\">Selecionar grupo</string>\n    <string name=\"favorite\" comment=\"Verb\">Curtir</string>\n    <string name=\"unfavorite\" comment=\"Verb\">Descurtir</string>\n    <string name=\"error_all_caps\">ERRO</string>\n    <string name=\"password\">Senha</string>\n    <string name=\"confirm_password\">Confirmar senha</string>\n    <string name=\"show_password\">Mostrar senha</string>\n    <string name=\"new_entry\">Novo item</string>\n    <string name=\"add_new_entry\">Adicionar novo item</string>\n    <string name=\"unlock_vault_error\">Não foi possível desbloquear o cofre</string>\n    <string name=\"unlock_vault_error_description\">Senha incorreta. Confira se você não errou algum caractere.</string>\n    <string name=\"password_equality_error\">As senhas devem ser iguais e não vazias</string>\n    <string name=\"snackbar_authentication_method\">Por favor, selecione um método de autenticação</string>\n    <string name=\"encrypting_vault\">Criptografando o cofre</string>\n    <string name=\"exporting_vault\">Exportando o cofre</string>\n    <string name=\"optimizing_icon\">Otimizando ícone</string>\n    <string name=\"optimizing_icon_multiple\">Otimizando ícones %1$d/%2$d</string>\n    <string name=\"reading_file\">Lendo arquivo</string>\n    <string name=\"requesting_root_access\">Solicitando acesso root</string>\n    <string name=\"analyzing_qr\">Analisando código QR</string>\n    <string name=\"analyzing_qr_multiple\">Lendo código QR %1$d/%2$d (%3$s)</string>\n    <plurals name=\"added_new_entries\">\n        <item quantity=\"one\">%d item adicionado ao cofre</item>\n        <item quantity=\"other\">%d itens adicionados ao cofre</item>\n    </plurals>\n    <string name=\"importing_icon_pack\">Importando pacote de ícones</string>\n    <string name=\"delete_entry\">Apagar item</string>\n    <string name=\"delete_entry_description\">Tem certeza que deseja apagar este item?</string>\n    <string name=\"delete_entry_explanation\">Esta ação não desativa a autenticação de dois fatores de:\\n<b>%s</b>\\n\\nPara evitar perder acesso, certifique-se de ter desativado a autenticação de dois fatores ou de ter uma maneira alternativa de gerar códigos para este serviço.</string>\n    <string name=\"delete_entries\">Apagar itens</string>\n    <plurals name=\"delete_entries_description\">\n        <item quantity=\"one\">Tem certeza que deseja apagar %d item?</item>\n        <item quantity=\"other\">Tem certeza que deseja apagar %d itens?</item>\n    </plurals>\n    <string name=\"discard_changes\">Descartar alterações?</string>\n    <string name=\"discard_changes_description\">Suas alterações não foram salvas</string>\n    <string name=\"saving_profile_error\">Erro ao salvar o perfil</string>\n    <string name=\"saving_assign_icons_error\">Erro ao atribuir ícones</string>\n    <string name=\"welcome\">Boas-vindas</string>\n    <string name=\"app_description\">O Aegis é um app de 2FA livre, seguro e de código aberto</string>\n    <string name=\"setup_completed\">Configuração concluída</string>\n    <string name=\"setup_completed_description\">O Aegis foi configurado e está pronto para uso.</string>\n    <string name=\"vault_not_found\">Não foi encontrado um cofre, iniciando a configuração…</string>\n    <string name=\"copied\">Copiado</string>\n    <string name=\"errors_copied\">Erros copiados pra área de transferência</string>\n    <string name=\"version_copied\">Versão copiada pra área de transferência</string>\n    <string name=\"error_required_field\">Este campo é obrigatório</string>\n    <string name=\"error_occurred\">Ocorreu um erro</string>\n    <string name=\"decryption_error\">Ocorreu um erro ao tentar desbloquear o cofre</string>\n    <string name=\"decryption_corrupt_error\">Ocorreu um erro ao tentar desbloquear o cofre. O arquivo do seu cofre pode estar corrompido.</string>\n    <string name=\"saving_error\">Ocorreu um erro ao tentar salvar o cofre</string>\n    <string name=\"vault_init_error\">Ocorreu um erro ao tentar inicializar o cofre</string>\n    <string name=\"vault_load_error\">Ocorreu um erro ao tentar carregar o cofre do armazenamento</string>\n    <string name=\"biometric_decrypt_error\">Ocorreu um erro ao tentar descriptografar o cofre com a autenticação biométrica. Isso normalmente acontece se as configurações de segurança do seu dispositivo mudaram. Por favor, desbloqueie o cofre com a sua senha e reconfigure a autenticação biométrica nas configurações do Aegis.</string>\n    <string name=\"biometric_init_error\">Ocorreu um erro ao tentar preparar a autenticação biométrica. Isso normalmente acontece se as configurações do seu dispositivo mudaram. Por favor, desbloqueie o cofre com a sua senha e reconfigure a autenticação biométrica nas configurações do Aegis.</string>\n    <string name=\"disable_encryption\">Desativar criptografia</string>\n    <string name=\"disable_encryption_description\">Tem certeza que deseja desativar a criptografia? Isso fará com que o cofre seja armazenado em texto simples. <b>Os backups automáticos também serão desativados</b>.</string>\n    <string name=\"enable_encryption_error\">Ocorreu um erro ao ativar a criptografia</string>\n    <string name=\"disable_encryption_error\">Ocorreu um erro ao desativar a criptografia</string>\n    <string name=\"backup_successful\">O backup foi agendado com sucesso</string>\n    <string name=\"backup_error\">Ocorreu um erro ao tentar criar um backup</string>\n    <string name=\"backup_status_success\">Backup mais recente bem-sucedido: %s</string>\n    <string name=\"backup_status_failed\">O backup mais recente falhou: %s</string>\n    <string name=\"backup_status_none\">Nenhum backup foi feito ainda</string>\n    <string name=\"backup_warning_password\">Os backups são criptografados usando uma senha separada, configurada nas configurações de segurança</string>\n    <string name=\"documentsui_error\">O DocumentsUI parece estar ausente no seu dispositivo. Este é um componente importante do sistema necessário para a seleção e criação de documentos. Se você usou uma ferramenta para &quot;remover aplicativos do sistema&quot; do seu dispositivo, você pode ter apagado acidentalmente e terá que reinstalá-lo.</string>\n    <string name=\"icon_pack_import_error\">Ocorreu um erro ao tentar importar um pacote de ícones</string>\n    <string name=\"icon_pack_import_exists_error\">O pacote de ícones que você está tentando importar já existe. Deseja substituí-lo?</string>\n    <string name=\"icon_pack_delete_error\">Ocorreu um erro ao tentar apagar um pacote de ícones</string>\n    <plurals name=\"icon_pack_info\">\n        <item quantity=\"one\">%d ícone</item>\n        <item quantity=\"other\">%d ícones</item>\n    </plurals>\n    <string name=\"icon_custom\">Personalizado</string>\n    <string name=\"permission_denied\">Permissão negada</string>\n    <string name=\"andotp_new_format\">Novo formato (v0.6.3 ou mais novo) </string>\n    <string name=\"andotp_old_format\">Antigo formato (v0.6.2 ou mais antigo) </string>\n    <string name=\"choose_andotp_importer\">Qual o formato do arquivo de backup do andOTP?</string>\n    <string name=\"choose_totpauth_importer\">Esse backup do TOTP Authenticator está criptografado com uma senha?</string>\n    <string name=\"choose_application\">Selecione o aplicativo do qual você gostaria de importar</string>\n    <string name=\"choose_theme\">Selecione o tema desejado</string>\n    <string name=\"choose_account_name_position\">Selecione a posição desejada para o nome da conta</string>\n    <string name=\"choose_view_mode\">Selecione o modo desejado para visualização</string>\n    <string name=\"choose_copy_behavior\">Selecione o comportamento desejado para copiar</string>\n    <string name=\"parsing_file_error\">Ocorreu um erro ao tentar interpretar o arquivo</string>\n    <string name=\"file_not_found\">Erro: Arquivo não encontrado</string>\n    <string name=\"reading_file_error\">Ocorreu um erro ao tentar ler o arquivo</string>\n    <string name=\"app_lookup_error\">Erro: O aplicativo não está instalado</string>\n    <string name=\"app_version_error\">A versão do %s que está instalada não é suportada. Versões recentes começaram a criptografar alguns dos arquivos no diretório de armazenamento interno, tornando o Aegis incapaz de acessar as informações de que necessita para a importação. É provável que a tentativa de importar resulte em um erro. Gostaria de continuar mesmo assim?</string>\n    <string name=\"root_error\">Erro: Não é possível obter acesso ao root</string>\n    <plurals name=\"imported_entries_count\">\n        <item quantity=\"one\">%d item importado</item>\n        <item quantity=\"other\">%d itens importados</item>\n    </plurals>\n    <plurals name=\"entries_shown\">\n        <item quantity=\"one\">Mostrando %d item</item>\n        <item quantity=\"other\">Mostrando %d itens</item>\n    </plurals>\n    <string name=\"intro_import_error_title\">Ocorreu um erro ao importar o cofre</string>\n    <string name=\"import_error_title\">Ocorreu um ou mais erros durante a importação</string>\n    <string name=\"exporting_vault_error\">Ocorreu um erro ao tentar exportar o cofre</string>\n    <string name=\"exported_vault\">O cofre foi exportado</string>\n    <string name=\"encryption_set_password_error\">Ocorreu um erro ao tentar configurar a senha.</string>\n    <string name=\"encryption_enable_biometrics_error\">Ocorreu um erro ao tentar ativar o desbloqueio biométrico. Alguns dispositivos têm implementações ruins do desbloqueio biométrico, e é provável que o seu é um deles. Considere usar somente a senha.</string>\n    <string name=\"no_cameras_available\">Nenhuma câmera disponível</string>\n    <string name=\"read_qr_error\">Ocorreu um erro ao tentar ler o código QR</string>\n    <string name=\"read_qr_error_phonefactor\">O Aegis não é compatível com o algoritmo de 2FA proprietário da Microsoft. Certifique-se de selecionar \\\"Configurar aplicativo sem notificações\\\" ao configurar 2FA no Office 365.</string>\n    <string name=\"partial_google_auth_import\">Exportação incompleta do Google Authenticator detectada</string>\n    <string name=\"partial_google_auth_import_warning\">Alguns códigos QR estão faltando em sua importação. Os seguintes códigos não foram encontrados:\\n\\n<b>%s</b>\\n\\nVocê pode continuar importando esta exportação parcial, mas recomendamos tentar novamente com todos os códigos QR para que não corra o risco de perder o acesso a nenhum token.</string>\n    <string name=\"missing_qr_code_descriptor\">• Código QR %d</string>\n    <plurals name=\"import_partial_export_anyway\">\n        <item quantity=\"one\">Importar %d token mesmo assim</item>\n        <item quantity=\"other\">Importar %d tokens mesmo assim</item>\n    </plurals>\n    <string name=\"import_google_auth_failure\">Falha ao importar exportação do Google Authenticator</string>\n    <string name=\"unrelated_google_auth_batches_error\">A exportação contém informações para um lote irrelevante. Tente importar 1 lote de cada vez.</string>\n    <string name=\"no_tokens_can_be_imported\">Como resultado, nenhum token pode ser importado</string>\n    <string name=\"unlocking_vault\">Desbloqueando o cofre</string>\n    <string name=\"rename_group\">Renomear Grupo</string>\n    <string name=\"no_group_selection\">Se um item não faz parte de qualquer grupo, ele pode ser encontrada em \\\"Sem grupo\\\".</string>\n    <string name=\"remove_group\">Remover grupo</string>\n    <string name=\"remove_group_description\">Você tem certeza que deseja remover este grupo? Itens neste grupo serão alterados automaticamente para \\'Sem grupo\\'.</string>\n    <string name=\"remove_unused_groups\">Apagar grupos não utilizados</string>\n    <string name=\"remove_unused_groups_description\">Tem certeza que deseja apagar todos os grupos que não são atribuídos a um item?</string>\n    <string name=\"remove_icon_pack\">Remover pacote de ícones</string>\n    <string name=\"remove_icon_pack_description\">Tem certeza que deseja remover este pacote de ícones? Itens que usam ícones deste pacote não serão afetados.</string>\n    <string name=\"details\">Detalhes</string>\n    <string name=\"show_error_details\">Mostrar detalhes do erro</string>\n    <string name=\"lock\">Bloquear</string>\n    <string name=\"name\">Nome</string>\n    <string name=\"no_group\">Sem grupo</string>\n    <string name=\"sort\" comment=\"Title of the Sort button in the top action bar of the main view\">Ordenar</string>\n    <string name=\"sort_alphabetically\">Emissor (A a Z)</string>\n    <string name=\"sort_alphabetically_reverse\">Emissor (Z a A)</string>\n    <string name=\"sort_alphabetically_name\">Conta (A a Z)</string>\n    <string name=\"sort_alphabetically_name_reverse\">Conta (Z a A)</string>\n    <string name=\"sort_usage_count\">Contagem de uso</string>\n    <string name=\"sort_last_used\">Último uso</string>\n    <string name=\"sort_custom\">Personalizado</string>\n    <string name=\"last_used\">Último uso</string>\n    <string name=\"last_used_never\">nunca</string>\n    <string name=\"new_group\">Novo grupo…</string>\n    <string name=\"group\">Grupo</string>\n    <string name=\"group_name_hint\">Nome do grupo</string>\n    <string name=\"preference_manage_groups\">Editar grupos</string>\n    <string name=\"preference_manage_groups_summary\">Gerencie e apague seus grupos aqui</string>\n    <string name=\"preference_reset_usage_count\">Reconfigurar contagem de uso</string>\n    <string name=\"preference_reset_usage_count_summary\">Reconfigure a contagem de uso de todos os itens no seu cofre</string>\n    <string name=\"preference_reset_usage_count_dialog\">Tem certeza que deseja configurar a contagem de uso de todos os itens no seu cofre para 0?</string>\n    <string name=\"note\" comment=\"Users can add a note to an entry\">Observação</string>\n    <string name=\"clear\">Limpar</string>\n    <string name=\"dialog_duplicate_entry_title\" comment=\"'Duplicate' is a noun here\">Item duplicado</string>\n    <string name=\"dialog_duplicate_entry_message\">Este item tem o mesmo nome e emissor que um ou mais itens existentes. Como você gostaria de prosseguir?</string>\n    <string name=\"dialog_duplicate_entry_overwrite_title\">Sobrescrever itens existentes</string>\n    <string name=\"dialog_duplicate_entry_overwrite_subtitle\">Substituir os itens existentes com os novos. Esta ação não poderá ser desfeita</string>\n    <string name=\"dialog_duplicate_entry_suffix_title\">Adicionar sufixo</string>\n    <string name=\"dialog_duplicate_entry_suffix_subtitle\">Adicione um sufixo ao nome do novo item. O nome novo será: %s</string>\n    <string name=\"dialog_duplicate_entry_cancel_title\">Cancelar salvamento</string>\n    <string name=\"dialog_duplicate_entry_cancel_subtitle\">Permite a edição da entrada antes de tentar salvá-la novamente</string>\n    <plurals name=\"dialog_duplicate_entry_overwrite_dialog_message\">\n        <item quantity=\"one\">Tem certeza de que deseja apagar %d item com o seguinte nome:\\n\\n%s - %s</item>\n        <item quantity=\"other\">Tem certeza de que deseja apagar %d itens com os seguintes nomes:\\n\\n%s - %s</item>\n    </plurals>\n    <string name=\"dialog_duplicate_entry_overwrite_dialog_title\">Confirmar apagamento</string>\n    <string name=\"pref_haptic_feedback_summary\">Faça que seu dispositivo vibre na atualização dos códigos</string>\n    <string name=\"pref_haptic_feedback_title\">Retorno tátil</string>\n    <string name=\"pref_highlight_entry_title\">Destacar tokens ao tocar</string>\n    <string name=\"pref_highlight_entry_summary\">Torna tokens mais fáceis de distinguir dos outros destacando eles temporariamente quando tocados</string>\n    <string name=\"pref_groups_multiselect_title\">Múltipla seleção de grupos</string>\n    <string name=\"pref_groups_multiselect_summary\">Permitir a seleção de vários grupos ao mesmo tempo</string>\n    <string name=\"pref_minimize_on_copy_title\">Minimizar ao copiar</string>\n    <string name=\"pref_minimize_on_copy_summary\">Minimizar o aplicativo após copiar um token</string>\n    <string name=\"pref_copy_behavior_title\">Copiar tokens pra área de transferência</string>\n    <string name=\"pref_search_behavior_title\">Comportamento da pesquisa</string>\n    <string name=\"pref_pause_entry_title\">Congelar tokens ao tocar</string>\n    <string name=\"pref_pause_entry_summary\">Pausar a atualização automática dos tokens ao tocá-los. Tokens não serão atualizados desde que o foco esteja neles. Requer \\\"Destacar tokens ao tocar\\\" ou \\\"Tocar para revelar\\\".</string>\n    <string name=\"pin_keyboard_description\">Digite sua senha para ativar o teclado de dígitos. Observe que isso só funciona se a sua senha for constituída apenas por números</string>\n    <string name=\"pin_keyboard_error\">Erro ao ativar o teclado de dígitos</string>\n    <string name=\"pin_keyboard_error_description\">Não é possível configurar o teclado de dígitos. A sua senha deve ser composta apenas por números.</string>\n    <string name=\"pin_keyboard_disabled\">Senha alterada. O teclado de dígitos não será mais exibido.</string>\n    <string name=\"selected\">Selecionados</string>\n    <string name=\"dark_theme_title\">Tema escuro</string>\n    <string name=\"light_theme_title\">Tema claro</string>\n    <string name=\"amoled_theme_title\">Tema AMOLED</string>\n    <string name=\"system_theme_title\">Configurado pela economia de bateria</string>\n    <string name=\"system_amoled_theme_title\">Configurado pela economia de bateria (AMOLED)</string>\n    <string name=\"normal_viewmode_title\">Normal</string>\n    <string name=\"compact_mode_title\">Compacto</string>\n    <string name=\"small_mode_title\">Pequeno</string>\n    <string name=\"tiles_mode_title\">Grade</string>\n    <string name=\"unknown_issuer\">Emissor desconhecido</string>\n    <string name=\"unknown_account_name\">Nome da conta desconhecido</string>\n    <plurals name=\"import_error_dialog\">\n        <item quantity=\"one\">O Aegis não pôde importar %d token. Este token será ignorado. Pressione \\'detalhes\\' para ver mais informações sobre o erro.</item>\n        <item quantity=\"other\">O Aegis não pôde importar %d tokens. Esses tokens serão ignorados. Pressione \\'detalhes\\' para ver mais informações sobre os erros.</item>\n    </plurals>\n    <string name=\"unable_to_process_deeplink\">Não é possível processar link profundo</string>\n    <string name=\"unable_to_read_qrcode_file\">Não é possível ler e processar o código QR do arquivo: %s.</string>\n    <string name=\"unable_to_process_shared_text\">Não é possível processar texto compartilhado como OTP</string>\n    <string name=\"unable_to_read_qrcode_files\">Não foi possível ler e processar alguns dos códigos QR. Somente %1$d de %2$d itens serão importados.</string>\n    <string name=\"unable_to_generate_qrcode\">Não é possível gerar o código QR</string>\n    <string name=\"select_picture\">Selecionar imagem</string>\n    <string name=\"select_icon\">Selecionar ícone</string>\n    <string name=\"tile_open_vault\" comment=\"label for a quick settings tile that opens the app when tapped\">Abrir cofre</string>\n    <string name=\"tile_open_scanner\" comment=\"label for a quick settings tile that opens the QR code scanner when tapped\">Abrir leitor</string>\n    <string name=\"toggle_checkboxes\">Alternar caixas de seleção</string>\n    <string name=\"search\">Pesquisar</string>\n    <string name=\"channel_name_lock_status\">Estado de bloqueio</string>\n    <string name=\"channel_description_lock_status\">O Aegis pode criar uma notificação persistente para notificar você quando o cofre está bloqueado</string>\n    <string name=\"vault_unlocked_state\">O cofre está desbloqueado. Toque aqui para bloquear.</string>\n    <string name=\"version\">Versão</string>\n    <string name=\"changelog\">Registro de alterações</string>\n    <string name=\"whats_new\">O que há de novo</string>\n    <string name=\"github_description\">Código-fonte, problemas e informações</string>\n    <string name=\"license\">Licença</string>\n    <string name=\"license_description\">O Aegis Authenticator é licenciado sob a GPLv3</string>\n    <string name=\"third_party_licenses\">Licenças de terceiros</string>\n    <string name=\"third_party_licenses_description\">Licenças das bibliotecas de terceiros usadas pelo Aegis</string>\n    <string name=\"country_netherlands\">Países Baixos</string>\n    <string name=\"email_us\">Envie-nos um e-mail</string>\n    <string name=\"visit_website\">Visite nosso site</string>\n    <string name=\"about_support\">Apoio</string>\n    <string name=\"support_rate\">Avaliar</string>\n    <string name=\"support_rate_description\">Apoie-nos deixando uma avaliação na Google Play Store</string>\n    <string name=\"webview_error\">Este dispositivo não suporta web view, que é necessário para visualizar o registro de alterações e a licença. Falta um componente do sistema.</string>\n    <string name=\"email\">E-mail</string>\n    <string name=\"time_sync_warning_title\">Sincronização automática do horário</string>\n    <string name=\"time_sync_warning_message\">O Aegis requer que o horário do sistema esteja em sincronia para gerar os códigos corretos. Uma diferença de apenas alguns segundos poderia resultar em códigos incorretos. Parece que seu dispositivo não está configurado para sincronizar o horário automaticamente. Gostaria de ativar essa opção agora?</string>\n    <string name=\"time_sync_warning_disable\">Pare de me avisar. Eu sei o que estou fazendo.</string>\n    <string name=\"google_qr_export_unrelated\">Código QR irrelevante encontrado. Tente reiniciar o leitor.</string>\n    <plurals name=\"google_qr_export_scanned\">\n        <item quantity=\"one\">Foi lido %1$d de %2$d códigos QR</item>\n        <item quantity=\"other\">Foram lidos %1$d de %2$d códigos QR</item>\n    </plurals>\n    <string name=\"google_qr_export_unexpected\">Código QR esperava-se ser #%1$d, em vez disso, foi lido um #%2$d</string>\n    <string name=\"backup_error_bar_message\"><b>O backup do cofre falhou recentemente</b></string>\n    <string name=\"backup_error_dialog_details\" comment=\"The first parameter is the type of backup (e.g. built-in or Android backup). The second parameter is an elapsed time in the style of 'x seconds/minutes/days ago'.\">        Uma tentativa recente de backup do cofre utilizando %1$s falhou porque ocorreu um erro. A tentativa foi em %2$s. Verifique as suas configurações de backup para garantir que os backups funcionem.\n    </string>\n    <string name=\"backup_permission_error_dialog_details\" comment=\"The first parameter is the type of backup (e.g. built-in or Android backup). The second parameter is an elapsed time in the style of 'x seconds/minutes/days ago'.\">        Uma tentativa recente de backup do cofre utilizando %1$s falhou pois o Aegis não tem permissão para gravar no local de backup. A tentativa foi feita em %2$s. Esse erro pode acontecer se você moveu/renomeou o local de backup ou se você restaurou o Aegis a partir de um backup. Por favor, reconfigure o local de backup.\n    </string>\n    <string name=\"backup_system_builtin\">Backups automáticos integrados do Aegis</string>\n    <string name=\"backup_system_android\">Sistema de backup em nuvem do Android</string>\n    <string name=\"backup_reminder_bar_message_with_latest\" comment=\"The parameter is an elapsed time in the style of 'x seconds/minutes/days ago'\">        O backup mais recente está desatualizado (%s)\n    </string>\n    <string name=\"backup_reminder_bar_message\">        As alterações não foram salvas no backup\n    </string>\n    <string name=\"backup_reminder_bar_dialog_title\">As alterações não foram salvas no backup</string>\n    <string name=\"backup_reminder_bar_dialog_summary\">        As alterações recentes no cofre ainda não foram salvas no backup. É importante ter backups regulares para evitar perder o acesso às suas contas. Por favor, considere a criação de backups automáticos no menu de configurações.\n    </string>\n    <string name=\"backup_reminder_bar_dialog_accept\">Configurar backups</string>\n    <string name=\"backup_plaintext_export_warning\"><b>O cofre foi exportado recentemente sem criptografia</b></string>\n    <string name=\"pref_show_plaintext_warning_hint\">Não mostrar este aviso novamente</string>\n    <string name=\"backup_plaintext_warning_explanation\">Este aviso é exibido porque você exportou recentemente uma cópia sem criptografia do cofre. Para manter a segurança de seus tokens, recomendamos apagar este arquivo no momento que ele não seja mais necessário.</string>\n    <string name=\"switch_camera\">Virar câmera</string>\n    <string name=\"empty_list\">Não há códigos para mostrar. Comece adicionando itens tocando no sinal de mais no canto inferior direito</string>\n    <string name=\"empty_list_title\">Nenhum item encontrado</string>\n    <string name=\"empty_group_list\">Não há grupos para mostrar. Adicione grupos na tela de edição de um item</string>\n    <string name=\"empty_group_list_title\">Nenhum grupo encontrado</string>\n    <string name=\"no_icon_packs\">Nenhum pacote de ícones foi importado ainda. Toque no sinal de mais para importar um. Dica: experimente o <a href=\"https://aegis-icons.github.io\">aegis-icons</a>.</string>\n    <string name=\"no_icon_packs_title\">Nenhum pacote de ícones</string>\n    <string name=\"pick_icon\">Selecione um ícone</string>\n    <string name=\"uncategorized\">Sem categoria</string>\n    <string name=\"done\">Pronto</string>\n    <plurals name=\"qr_count\">\n        <item quantity=\"one\">%d / %d códigos QR</item>\n        <item quantity=\"other\">%d / %d códigos QR</item>\n    </plurals>\n    <string name=\"next\">Avançar</string>\n    <string name=\"previous\">Voltar</string>\n    <string name=\"copy_uri\">Copiar URI</string>\n    <string name=\"unable_to_copy_uri_to_clipboard\">Não foi possível copiar o URI pra área de transferência</string>\n    <string name=\"uri_copied_to_clipboard\">URI copiada pra área de transferência</string>\n    <string name=\"transfer_entry_description\">Leia este código QR com o aplicativo de autenticação para o qual você gostaria de transferir este item</string>\n    <string name=\"transfer_entry_brightness\">Toque no código QR para ativar o brilho máximo da tela</string>\n    <string name=\"google_auth_compatible_transfer_description\">Leia esses códigos QR com o Aegis ou o Google Authenticator.\\n\\nDevido a limitações do aplicativo do Google Authenticator, apenas tokens TOTP e HOTP que usam SHA1 e produzem códigos de 6 dígitos estão incluídos</string>\n    <string name=\"password_strength_very_weak\">Muito fraca</string>\n    <string name=\"password_strength_weak\">Fraca</string>\n    <string name=\"password_strength_fair\">Razoável</string>\n    <string name=\"password_strength_good\">Boa</string>\n    <string name=\"password_strength_strong\">Forte</string>\n    <string name=\"password_strength_unknown\">Senha muito longa para análise de força</string>\n    <string name=\"pref_pin_keyboard_title\">Usar o teclado de dígitos na tela de bloqueio</string>\n    <string name=\"pref_pin_keyboard_summary\">Ative esta opção se quiser ativar o teclado de dígitos na tela de bloqueio. Isso só funciona para senhas numéricas</string>\n    <string name=\"title_activity_preferences\">Configurações</string>\n    <string name=\"title_activity_manage_groups\">Gerenciar grupos</string>\n    <string name=\"title_activity_transfer\">Transferir itens</string>\n    <string name=\"title_activity_about\">Sobre</string>\n    <string name=\"title_activity_edit_entry\">Editar item</string>\n    <string name=\"title_activity_scan_qr\">Ler código QR</string>\n    <string name=\"title_activity_import_entries\">Importar itens</string>\n    <string name=\"title_activity_assign_icons\">Atribuir ícones</string>\n    <string name=\"title_activity_licenses\">Licenças de terceiros</string>\n    <string name=\"dialog_wipe_entries_title\">Limpar itens</string>\n    <string name=\"dialog_wipe_entries_message\">O seu cofre já contém itens. Você quer remover esses itens antes de importar este arquivo?\\n\\n<b>Ao fazer isso, você perderá permanentemente o acesso às entradas existentes no cofre.</b></string>\n    <string name=\"dialog_wipe_entries_checkbox\">Limpar conteúdo do cofre</string>\n    <string name=\"import_from_clipboard_title\">Importar da área de transferência</string>\n    <string name=\"import_from_clipboard_message\">Encontramos um URI de otpauth válido na sua área de transferência.\\n\\n<b>Nome</b>: %1$s\\n<b>Emissor</b>: %2$s\\n\\nQuer usá-lo para preencher esta entrada?</string>\n    <string name=\"panic_trigger_ignore_toast\">O Aegis recebeu um gatilho de pânico, mas a configuração está desativada, portanto será ignorado</string>\n    <string name=\"pref_panic_trigger_title\">Apagar cofre após gatilho de pânico</string>\n    <string name=\"pref_panic_trigger_summary\">Apagar cofre ao receber um gatilho de pânico do Ripple</string>\n    <string name=\"import_vault\">Importar cofre do Aegis</string>\n    <string name=\"import_vault_hint\">Quer importar de um aplicativo de 2FA diferente? Termine a configuração primeiro e depois vá para o menu de configurações.</string>\n    <plurals name=\"import_duplicate_toast\">\n        <item quantity=\"one\">%d possível duplicata foi desmarcada. Por favor, reveja a lista de itens.</item>\n        <item quantity=\"other\">%d possíveis duplicatas foram desmarcadas. Por favor, reveja a lista de itens.</item>\n    </plurals>\n    <string name=\"importer_help_2fas\">Forneça um arquivo de backup do 2FAS Authenticator.</string>\n    <string name=\"importer_help_aegis\">Forneça um arquivo de exportação/backup do Aegis.</string>\n    <string name=\"importer_help_authenticator_plus\">Forneça um arquivo de exportação do Authenticator Plus obtido através de <b>Configurações -&gt; Backup &amp; Restaurar -&gt; Exportar como Texto e HTML</b>.</string>\n    <string name=\"importer_help_authy\">Forneça uma cópia de <b>/data/data/com.authy.authy/shared_prefs/com.authy.storage.tokens.authenticator.xml</b>, localizado no diretório de armazenamento interno do Authy.</string>\n    <string name=\"importer_help_andotp\">Forneça um arquivo de exportação/backup do andOTP.</string>\n    <string name=\"importer_help_bitwarden\">Forneça um arquivo de exportação/backup do Bitwarden. Arquivos criptografados não são suportados.</string>\n    <string name=\"importer_help_battle_net_authenticator\">Forneça uma cópia de <b>/data/data/com.blizzard.messenger/shared_prefs/com.blizzard.messenger.authenticator_preferences.xml</b>, localizado no diretório de armazenamento interno do Battle.net Authenticator.</string>\n    <string name=\"importer_help_duo\">Forneça uma cópia de <b>/data/data/com.duosecurity.duomobile/files/duokit/accounts.json</b>, localizada no diretório de armazenamento interno do DUO.</string>\n    <string name=\"importer_help_ente_auth\">Forneça um arquivo de exportação do Ente Auth. No momento, são suportados apenas arquivos não criptografados.</string>\n    <string name=\"importer_help_freeotp\">FreeOTP 2: Forneça um arquivo de backup.\\nFreeOTP 1.x: Forneça uma cópia de <b>/data/data/org.fedorahosted.freeotp/shared_prefs/tokens.xml</b>, localizado na pasta de armazenamento interno do FreeOTP.</string>\n    <string name=\"importer_help_freeotp_plus\">Forneça um arquivo de exportação do FreeOTP+.</string>\n    <string name=\"importer_warning_title_freeotp2\">Compatibilidade com o FreeOTP 2</string>\n    <string name=\"importer_warning_message_freeotp2\">Existe um número de problemas com o FreeOTP 2 que podem resultar em backups corrompidos. O Aegis tentará recuperar o máximo de itens possíveis, mas é possível que alguns ou até todos falhem ao ser importados.</string>\n    <string name=\"importer_help_google_authenticator\"><b>Apenas os arquivos de banco de dados do Google Authenticator v5.10 e anteriores são suportados</b>.\\n\\nForneça uma cópia de <b>/data/data/com.google.android.apps.authenticator2/databases/databases</b>, localizado no diretório de armazenamento interno do Google Authenticator.</string>\n    <string name=\"importer_help_microsoft_authenticator\">Forneça uma cópia de <b>/data/data/com.azure.authenticator/databases/PhoneFactor</b>, localizado no diretório de armazenamento interno do Microsoft Authenticator.</string>\n    <string name=\"importer_help_plain_text\">Forneça um arquivo de texto simples com um URI do Google Authenticator em cada linha.</string>\n    <string name=\"importer_help_proton_authenticator\">Forneça um arquivo de exportação de Proton Authenticator (.json) obtido usando a opção <b>Configurações -&gt; Exportar</b>.</string>\n    <string name=\"importer_help_steam\"><b>Steam v3.0 e mais recentes não são suportadas</b>. Forneça uma cópia de <b>/data/data/com.valvesoftware. ndroid.steam.community/files/Steamguard-*.json</b>, localizado no diretório de armazenamento interno da Steam.</string>\n    <string name=\"importer_help_stratum\">Forneça um arquivo de exportação do Stratum obtido através das <b>Configurações -&gt; Backup -&gt; Fazer backup para arquivo criptografado (recomendado)</b>.</string>\n    <string name=\"importer_help_totp_authenticator\">Forneça um arquivo de exportação do TOTP Authenticator.</string>\n    <string name=\"importer_help_winauth\">Forneça um arquivo de exportação do WinAuth.</string>\n    <string name=\"import_assign_icons_dialog_title\">Atribuir ícones</string>\n    <string name=\"import_assign_icons_dialog_text\">Você quer atribuir ícones para os itens importados?</string>\n    <string name=\"importer_encrypted_exception_google_authenticator\">Item criptografado foi ignorado: %s</string>\n    <string name=\"importer_help_direct\">Importar itens diretamente de %s. Isto requer que o app esteja instalado neste dispositivo e que o acesso ao root seja concedido ao Aegis.</string>\n    <string name=\"groups\">Grupos</string>\n    <string name=\"pref_focus_search\">Abrir pesquisa ao abrir o app</string>\n    <string name=\"pref_focus_search_summary\">Focar o campo de pesquisa logo após abrir o aplicativo.</string>\n    <string name=\"pref_grouping_halves\">Metade</string>\n    <string name=\"pref_grouping_none\">Sem agrupamento</string>\n    <string name=\"pref_grouping_size_two\">Grupos de 2</string>\n    <string name=\"pref_grouping_size_three\">Grupos de 3</string>\n    <string name=\"pref_grouping_size_four\">Grupos de 4</string>\n    <string name=\"pref_copy_behavior_never\">Nunca</string>\n    <string name=\"pref_copy_behavior_single_tap\">Um toque</string>\n    <string name=\"pref_copy_behavior_double_tap\">Dois toques</string>\n    <string name=\"pref_account_name_position_hidden\">Oculto</string>\n    <string name=\"pref_account_name_position_end\">Ao lado do nome do serviço</string>\n    <string name=\"pref_account_name_position_below\">Abaixo do nome do serviço</string>\n    <plurals name=\"time_elapsed_seconds\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"one\">%d segundo atrás</item>\n        <item quantity=\"other\">%d segundos atrás</item>\n    </plurals>\n    <plurals name=\"time_elapsed_minutes\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"one\">%d minuto atrás</item>\n        <item quantity=\"other\">%d minutos atrás</item>\n    </plurals>\n    <plurals name=\"time_elapsed_hours\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"one\">%d hora atrás</item>\n        <item quantity=\"other\">%d horas atrás</item>\n    </plurals>\n    <plurals name=\"time_elapsed_days\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"one\">%d dia atrás</item>\n        <item quantity=\"other\">%d dias atrás</item>\n    </plurals>\n    <plurals name=\"time_elapsed_years\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"one\">%d ano atrás</item>\n        <item quantity=\"other\">%d anos atrás</item>\n    </plurals>\n    <plurals name=\"dropdown_checkboxes_default_count\">\n        <item quantity=\"one\">%d item selecionado</item>\n        <item quantity=\"other\">%d itens selecionados</item>\n    </plurals>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-pt-rBR-v29/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"system_theme_title\">Padrão do sistema</string>\n    <string name=\"system_amoled_theme_title\">Padrão do sistema (AMOLED)</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-pt-rPT/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources xmlns:tools=\"http://schemas.android.com/tools\">\n    <string name=\"action_settings\">Definições</string>\n    <string name=\"action_about\">Acerca de</string>\n    <string name=\"action_delete\">Eliminar</string>\n    <string name=\"action_transfer\">Transferir</string>\n    <string name=\"action_edit_icon\">Editar ícone</string>\n    <string name=\"action_reset_usage_count\">Repor contador de utilização</string>\n    <string name=\"action_reset_usage_count_dialog\">Tem a certeza de que deseja remover o número de utilizações desta entrada?</string>\n    <string name=\"action_default_icon\">Restaurar ícone padrão</string>\n    <string name=\"discard\">Descartar</string>\n    <string name=\"save\">Guardar</string>\n    <string name=\"all\">Tudo</string>\n    <string name=\"issuer\">Emitente</string>\n    <string name=\"yandex_pin\">PIN (4-16 dígitos)</string>\n    <string name=\"motp_pin\">PIN (4 dígitos)</string>\n    <string name=\"suggested\">Sugerido</string>\n    <string name=\"usage_count\">Número de utilizações</string>\n    <string name=\"warning\">Aviso</string>\n    <string name=\"pref_cat_appearance_app\">Aplicação</string>\n    <string name=\"pref_cat_appearance_entries\">Entradas</string>\n    <string name=\"pref_cat_backups_android\">Android</string>\n    <string name=\"pref_cat_backups_auto\">Backups automáticos</string>\n    <string name=\"pref_section_behavior_title\">Comportamento</string>\n    <string name=\"pref_section_behavior_summary\">Personalizar comportamento ao interagir com a lista de entradas.</string>\n    <string name=\"pref_section_appearance_title\">Aparência</string>\n    <string name=\"pref_section_appearance_summary\">Ajuste o tema, o idioma e outras definições que afetam a aparência da aplicação.</string>\n    <string name=\"pref_section_security_title\">Segurança</string>\n    <string name=\"pref_section_security_summary\">Configurar criptografia, desbloqueio biométrico, bloqueio automático e outras definições de segurança.</string>\n    <string name=\"pref_section_import_export_title\">Importar e exportar</string>\n    <string name=\"pref_section_import_export_summary\">Importar backups Aegis ou de outras aplicações de autenticação. Crie exportações manuais do seu cofre Aegis.</string>\n    <string name=\"pref_section_audit_log_title\">Registo de auditoria</string>\n    <string name=\"pref_section_audit_log_summary\">Encontre uma lista de todos os eventos importantes relatados que ocorreram na aplicação.</string>\n    <string name=\"pref_section_backups_title\">Backups</string>\n    <string name=\"pref_section_backups_summary\">Configure backups automáticos para uma localização à escolha ou ative a possibilidade de backup na nuvem Android.</string>\n    <string name=\"pref_section_icon_packs\">Pacotes de ícones</string>\n    <string name=\"pref_section_icon_packs_summary\">Gerir e importar pacotes de ícones</string>\n    <string name=\"pref_select_theme_title\">Tema</string>\n    <string name=\"pref_dynamic_colors_title\">Cores dinâmicas</string>\n    <string name=\"pref_dynamic_colors_summary\">Aplicar uma sobreposição baseada nas cores do seu tema Android</string>\n    <string name=\"pref_view_mode_title\">Modo de exibição</string>\n    <string name=\"pref_lang_title\">Idioma</string>\n    <string name=\"pref_show_icons_title\">Mostrar ícones</string>\n    <string name=\"pref_show_icons_summary\">Mostrar ícones ao lado de cada entrada</string>\n    <string name=\"pref_code_group_size_title\">Agrupamento de dígitos</string>\n    <string name=\"pref_code_group_size_summary\">Selecione o número de dígitos para agrupar os códigos</string>\n    <string name=\"pref_account_name_position_title\">Mostrar nome da conta</string>\n    <string name=\"pref_show_next_code_title\">Mostrar próximo código</string>\n    <string name=\"pref_show_next_code_summary\">Gerar e mostrar o próximo código antes do tempo</string>\n    <string name=\"pref_expiration_state_title\">Indicar quando os códigos estão prestes a expirar</string>\n    <string name=\"pref_expiration_state_summary\">Alterar a cor dos códigos e fazê-los piscar quando eles estiverem prestes a expirar</string>\n    <string name=\"pref_expiration_state_fallback\">Alterar a cor dos códigos quando eles estiverem prestes a expirar</string>\n    <string name=\"pref_shared_issuer_account_name_title\">Exibir o nome da conta apenas quando necessário</string>\n    <string name=\"pref_shared_issuer_account_name_summary\">Mostrar apenas os nomes das contas sempre que estas partilhem o mesmo titular. Os outros nomes de contas serão ocultados.</string>\n    <string name=\"pref_account_name_position_summary_override\">Esta definição é anulada pelo modo de visualização em mosaico. O nome da conta será apresentado por baixo do emissor.</string>\n    <string name=\"pref_import_file_title\">Importar de um ficheiro</string>\n    <string name=\"pref_import_file_summary\">Importar \\'tokens\\' de um ficheiro</string>\n    <string name=\"pref_android_backups_title\">Backups na nuvem Android</string>\n    <string name=\"pref_android_backups_summary\">Permitir que o sistema de backup na nuvem Android inclua o cofre Aegis nos seus backups. Apenas possível para cofres encriptados.</string>\n    <string name=\"pref_android_backups_hint\"><i>Backups \\'Device-to-device\\' (D2D) serão sempre permitidos, independentemente das definições acima</i></string>\n    <string name=\"pref_backups_title\">Backup automático do cofre</string>\n    <string name=\"pref_backups_summary\">Cria automaticamente backups no armazenamento externo, sempre que forem efetuadas alterações. Apenas possível para cofres cifrados.</string>\n    <string name=\"pref_backups_reminder_title\">Lembrete de backup</string>\n    <string name=\"pref_backups_reminder_summary\">Mostrar lembrete para efetuar os backups, se as últimas alterações não tiverem sido guardadas.</string>\n    <string name=\"pref_backups_reminder_dialog_title\">Desativar lembrete de backup</string>\n    <string name=\"pref_backups_reminder_dialog_summary\">Se desativar esta opção, a aplicação não irá mostrar o lembrete mesmo que as últimas alterações não tenham sido guardadas. Desta forma, os seus \\'tokens\\' de acesso estarão em risco. Tem a certeza de que deseja desativar o lembrete?</string>\n    <string name=\"pref_backups_versioning_strategy_title\">Estratégia de backup</string>\n    <string name=\"pref_backups_versioning_strategy_keep_x_versions\">Manter várias versões</string>\n    <string name=\"pref_backups_versioning_strategy_single_backup\">Cópia de segurança única</string>\n    <string name=\"pref_backups_versioning_strategy_single_backup_warning\">A estratégia de backup selecionada não é nem fiável, nem recomendada. Uma única falha no backup pode levar à perda da sua única cópia de segurança.</string>\n    <string name=\"pref_backups_versioning_strategy_dialog_title\">Selecione uma estratégia de backup</string>\n    <string name=\"pref_backups_location_title\">Localização da cópia de segurança</string>\n    <string name=\"pref_backups_location_summary\">Os backups serão guardados em</string>\n    <string name=\"pref_backup_location_summary\">As cópias de segurança serão guardadas em</string>\n    <string name=\"pref_backups_trigger_title\">Ativar backup</string>\n    <string name=\"pref_backups_trigger_summary\">Ativar manualmente</string>\n    <string name=\"pref_backups_versions_title\">Número de versões a manter</string>\n    <string name=\"pref_backups_versions_infinite\">\\u221E</string>\n    <plurals name=\"pref_backups_versions_summary\">\n        <item quantity=\"one\">Manter %1$d versão do backup</item>\n        <item quantity=\"other\">Manter %1$d versões do backup</item>\n    </plurals>\n    <string name=\"pref_backups_versions_infinite_summary\">Manter todas as versões de cópias de segurança efetuadas</string>\n    <string name=\"pref_import_app_title\">Importar de uma aplicação</string>\n    <string name=\"pref_import_app_summary\">Importar tokens de uma aplicação (requer acesso root)</string>\n    <string name=\"pref_export_title\">Exportar</string>\n    <string name=\"pref_export_summary\">Exportar cofre</string>\n    <string name=\"pref_password_reminder_title\">Lembrete de palavra-passe</string>\n    <string name=\"pref_google_auth_export_title\">Exportar para Google Authenticator</string>\n    <string name=\"pref_google_auth_export_descriptor\">Gera códigos QR, compatíveis com Google Authenticator</string>\n    <string name=\"pref_google_auth_export_no_data\">Não existem dados para exportar</string>\n    <plurals name=\"pref_google_auth_export_incompatible_entries\">\n        <item quantity=\"one\">Ignorada %d entrada incompatível</item>\n        <item quantity=\"other\">Ignoradas %d entradas incompatíveis</item>\n    </plurals>\n    <string name=\"pref_password_reminder_summary\">Mostra um lembrete %s para introduzir a palavra-passe, para que não se esqueça dela.</string>\n    <string name=\"pref_password_reminder_summary_disabled\">Desativado</string>\n    <string name=\"pref_secure_screen_title\">Segurança do ecrã</string>\n    <string name=\"pref_secure_screen_summary\">Bloquear capturas de ecrã e outras tentativas de capturar o ecrã na aplicação</string>\n    <string name=\"pref_tap_to_reveal_title\">Toque para mostrar</string>\n    <string name=\"pref_tap_to_reveal_summary\">Os \\'tokens\\' serão ocultados por definição. Toque nos \\'tokens\\' para mostrar o código.</string>\n    <string name=\"pref_tap_to_reveal_time_title\">Tempo limite para a opção</string>\n    <string name=\"pref_auto_lock_title\">Bloqueio automático</string>\n    <string name=\"pref_auto_lock_summary\">Quando %s</string>\n    <string name=\"pref_auto_lock_summary_disabled\">Desativado</string>\n    <string name=\"pref_auto_lock_prompt\">Bloquear Aegis automaticamente se</string>\n    <string name=\"pref_auto_lock_type_back_button\">O botão Recuar for pressionado</string>\n    <string name=\"pref_auto_lock_type_minimize\">A aplicação for minimizada</string>\n    <string name=\"pref_auto_lock_type_device_lock\">O dispositivo for bloqueado</string>\n    <string name=\"pref_backup_password_category\">Backup e exportação</string>\n    <string name=\"pref_backup_password_title\">Palavra-passe distinta para backups e exportação</string>\n    <string name=\"pref_backup_password_summary\">Se ativa, a palavra-passe utilizada para desbloquear a aplicação não pode ser utilizada para decifrar backups e exportações.</string>\n    <string name=\"pref_backup_password_change_title\">Alterar palavra-passe para backups e exportação</string>\n    <string name=\"pref_backup_password_change_summary\">Defina a nova palavra-passe que será utilizada para encriptar o cofre durante cópias de segurança e exportação.</string>\n    <string name=\"pref_encryption_title\">Encriptação</string>\n    <string name=\"pref_encryption_summary\">Encriptar o cofre e apenas desbloquear com palavra-passe ou biometria</string>\n    <string name=\"pref_biometrics_title\">Desbloqueio biométrico</string>\n    <string name=\"pref_biometrics_summary\">Permitir autenticação biométrica para desbloquear o cofre</string>\n    <string name=\"pref_search_behavior_summary\">Pesquisar por %s</string>\n    <string name=\"pref_search_behavior_prompt\">Pesquisar em qualquer um dos seguintes campos</string>\n    <string name=\"pref_search_behavior_type_name\">Nome</string>\n    <string name=\"pref_search_behavior_type_issuer\">Emissor</string>\n    <string name=\"pref_search_behavior_type_note\">Nota</string>\n    <string name=\"pref_search_behavior_type_groups\">Grupos</string>\n    <string name=\"pref_set_password_title\">Alterar palavra-passe</string>\n    <string name=\"pref_set_password_summary\">Defina a palavra-passe que será utilizada para desbloquear o cofre</string>\n    <string name=\"no_events_title\">Sem eventos relatados</string>\n    <string name=\"no_events_description\">Nenhum evento importante foi relatado na aplicação</string>\n    <string name=\"event_title_vault_unlocked\">Cofre desbloqueado</string>\n    <string name=\"event_description_vault_unlocked\">O cofre foi desbloqueado com sucesso</string>\n    <string name=\"event_title_backup_created\">Backup criado</string>\n    <string name=\"event_description_backup_created\">Um backup do cofre foi criado com sucesso</string>\n    <string name=\"event_title_android_backup_created\">Backup criado pelo Android</string>\n    <string name=\"event_description_android_backup_created\">Um backup do cofre foi criado com sucesso pelo Android</string>\n    <string name=\"event_title_vault_exported\">Cofre exportado</string>\n    <string name=\"event_description_vault_exported\">Uma cópia do cofre foi exportada</string>\n    <string name=\"event_title_entry_shared\">Entrada partilhada</string>\n    <string name=\"event_description_entry_shared\">Uma entrada foi partilhada</string>\n    <string name=\"event_title_vault_unlock_failed_password\">O desbloqueio do cofre falhou (palavra-passe)</string>\n    <string name=\"event_description_vault_unlock_failed_password\">Falha ao tentar desbloquear o cofre com a palavra-passe</string>\n    <string name=\"event_title_vault_unlock_failed_biometrics\">O desbloqueio do cofre falhou (biometria)</string>\n    <string name=\"event_description_vault_unlock_failed_biometrics\">Falha ao tentar desbloquear o cofre com biometria</string>\n    <string name=\"event_unknown\">Tipo de evento desconhecido</string>\n    <string name=\"audit_log_entry_deleted\">(apagada)</string>\n    <string name=\"today_at_time\">Hoje às %1$s</string>\n    <string name=\"day_of_week_at_time\">%1$s às %2$s</string>\n    <string name=\"export_encrypted\">Encriptar o cofre</string>\n    <string name=\"export_help\">Esta ação irá exportar o cofre para fora do armazenamento interno do Aegis. Selecione o formato para a exportação:</string>\n    <string name=\"export_warning_unencrypted\">Está prestes a exportar uma cópia não encriptada do seu cofre Aegis. <b>Isto não é recomendado</b>.</string>\n    <string name=\"export_warning_password\">As exportações serão encriptadas com a palavra-passe definida nas definições de segurança.</string>\n    <string name=\"understand_risk_accept\">Eu compreendo os riscos</string>\n    <string name=\"export_format_aegis\">Aegis (.JSON)</string>\n    <string name=\"export_format_google_auth_uri\">Ficheiro de texto (.TXT)</string>\n    <string name=\"export_format_html\">Página Web (.HTML)</string>\n    <string name=\"export_format_hint\">Formato de exportação</string>\n    <string name=\"export_all_groups\">Exportar todos os grupos</string>\n    <string name=\"export_choose_groups\">Selecionar os grupos a exportar</string>\n    <plurals name=\"export_groups_selected_count\">\n        <item quantity=\"one\">%d grupo selecionado</item>\n        <item quantity=\"other\">%d grupos selecionados</item>\n    </plurals>\n    <string name=\"export_no_groups_selected\">Nenhum grupo selecionado para exportar</string>\n    <string name=\"export_html_title\" comment=\"The title of an HTML export document\">Exportação do Aegis Authenticator</string>\n    <string name=\"choose_authentication_method\">Segurança</string>\n    <string name=\"authentication_method_explanation\">O Aegis é uma aplicação 2FA focada em segurança. Tokens são armazenados num cofre, que pode opcionalmente ser criptografado com uma palavra-passe da sua escolha. Se um invasor obtiver o ficheiro criptografado do cofre, não conseguirá aceder ao conteúdo sem saber a palavra-passe.\\n\\nA opção que achamos que seria melhor para o seu dispositivo foi pré-selecionada.</string>\n    <string name=\"authentication_method_none\">Nenhum</string>\n    <string name=\"authentication_method_none_description\">Não será necessária uma palavra-passe para desbloquear o cofre e este não será encriptado. <b>Esta opção não é recomendada</b>.</string>\n    <string name=\"authentication_method_password\">Palavra-passe</string>\n    <string name=\"authentication_method_password_description\">É necessária uma palavra-passe para desbloquear o cofre.</string>\n    <string name=\"authentication_method_password_explanation\">Aviso: Se se esquecer da sua palavra-passe, perderá permanentemente o acesso aos seus tokens. Não há como recuperá-los sem a mesma.</string>\n    <string name=\"authentication_method_biometrics\">Biometria</string>\n    <string name=\"authentication_method_biometrics_description\">Para além de uma palavra-passe, a biometria registada neste dispositivo, como uma impressão digital ou o seu rosto, pode ser usada para desbloquear o cofre.</string>\n    <string name=\"authentication\">Desbloquear o cofre</string>\n    <string name=\"authentication_multiline\" comment=\"The newline in the middle is used for aesthetic purposes\">Desbloqueie\\no seu cofre</string>\n    <string name=\"auth_use_biometrics\">Ou toque aqui para usar <font fgcolor=\"#FF0D86C1\">biometria</font></string>\n    <string name=\"set_password\">Introduza uma palavra-passe</string>\n    <string name=\"set_group\">Por favor, insira o nome do grupo</string>\n    <string name=\"set_number\">Por favor, insira um número</string>\n    <string name=\"set_password_confirm\">Confirme a palavra-passe</string>\n    <string name=\"invalid_password\">A senha está incorreta</string>\n    <string name=\"invalidated_biometrics\">Foi detetada uma alteração nas definições de segurança do dispositivo. Aceda a \\\"Aegis -&gt; Definições -&gt; Segurança -&gt; Desbloqueio biométrico\\\" para desativar e reativar o desbloqueio biométrico.</string>\n    <string name=\"password_reminder\">Por favor, introduza a palavra-passe. Ocasionalmente, pedimos-lhe que o faça para que não se esqueça dela.</string>\n    <string name=\"password_reminder_dialog_title\">Desbloqueio biométrico por predefinição</string>\n    <string name=\"password_reminder_dialog_message\">Ocasionalmente, pedimos-lhe que introduza a sua palavra-passe para garantir que não se esquece dela e que não ficará bloqueado fora do cofre. Após introduzir a palavra-passe, o Aegis voltará a utilizar o desbloqueio biométrico por predefinição até ser altura de voltar a relembrar a palavra-passe.</string>\n    <string name=\"password_reminder_freq_never\">Nunca</string>\n    <string name=\"password_reminder_freq_weekly\">Semanal</string>\n    <string name=\"password_reminder_freq_biweekly\">Quinzenal</string>\n    <string name=\"password_reminder_freq_monthly\">Mensal</string>\n    <string name=\"password_reminder_freq_quarterly\">Trimestral</string>\n    <string name=\"enter_password_2fas_message\">Parece que esta cópia de segurança 2FAS está encriptada. Introduza abaixo a palavra-passe.</string>\n    <string name=\"enter_password_authy_message\">Parece que os seus tokens do Authy estão encriptados. Por favor, feche o Aegis, abra o Authy e desbloqueie os tokens com a sua palavra-passe. Em vez disso, o Aegis também pode tentar desencriptar os seus tokens do Authy por si, se inserir a sua palavra-passe abaixo.</string>\n    <string name=\"enter_password_aegis_title\">Por favor, introduza a palavra-passe de importação</string>\n    <string name=\"period_hint\">Período (segundos)</string>\n    <string name=\"algorithm_hint\">Função hash</string>\n    <string name=\"type\">Tipo</string>\n    <string name=\"share\">Compartilhar</string>\n    <string name=\"yes\">Sim</string>\n    <string name=\"no\">Não</string>\n    <string name=\"undo\">Desfazer</string>\n    <string name=\"unlock\">Desbloquear</string>\n    <string name=\"advanced\">Avançado</string>\n    <string name=\"counter\">Contador</string>\n    <string name=\"digits\">Dígitos</string>\n    <string name=\"secret\">Segredo</string>\n    <string name=\"scan\">Ler código QR</string>\n    <string name=\"scan_image\">Digitalizar imagem</string>\n    <string name=\"enter_manually\">Inserir manualmente</string>\n    <string name=\"set_up_biometric\">Configurar o desbloqueio biométrico</string>\n    <string name=\"copy\">Copiar</string>\n    <string name=\"edit\">Editar</string>\n    <string name=\"select_all\">Selecionar tudo</string>\n    <string name=\"assign_icons\">Atribuir ícones</string>\n    <string name=\"assign_groups\">Atribuir ao grupo</string>\n    <string name=\"assign_groups_dialog_summary\">Selecione o grupo ao qual deseja atribuir os itens selecionados.</string>\n    <string name=\"assign_groups_dialog_dropdown\">Selecione o grupo</string>\n    <string name=\"favorite\" comment=\"Verb\">Favorito</string>\n    <string name=\"unfavorite\" comment=\"Verb\">Remover dos favoritos</string>\n    <string name=\"error_all_caps\">ERRO</string>\n    <string name=\"password\">Palavra-passe</string>\n    <string name=\"confirm_password\">Confirme a Senha</string>\n    <string name=\"show_password\">Mostrar palavra-passe</string>\n    <string name=\"new_entry\">Nova entrada</string>\n    <string name=\"add_new_entry\">Adicionar nova entrada</string>\n    <string name=\"unlock_vault_error\">Não foi possível desbloquear o cofre</string>\n    <string name=\"unlock_vault_error_description\">Palavra-passe incorreta. Certifique-se de que não a digitou incorretamente.</string>\n    <string name=\"password_equality_error\">As palavras-passe devem ser idênticas e não vazias</string>\n    <string name=\"snackbar_authentication_method\">Por favor, selecione um método de autenticação</string>\n    <string name=\"encrypting_vault\">A encriptar o cofre</string>\n    <string name=\"exporting_vault\">A exportar o cofre</string>\n    <string name=\"optimizing_icon\">Otimizando o ícone</string>\n    <string name=\"optimizing_icon_multiple\">Otimizando os ícones %1$d/%2$d</string>\n    <string name=\"reading_file\">A ler o ficheiro</string>\n    <string name=\"requesting_root_access\">Pedir acesso root</string>\n    <string name=\"analyzing_qr\">A analisar o código QR</string>\n    <string name=\"analyzing_qr_multiple\">Analisando o código QR %1$d/%2$d (%3$s)</string>\n    <plurals name=\"added_new_entries\">\n        <item quantity=\"one\">Adicionada %d nova entrada ao cofre</item>\n        <item quantity=\"other\">Adicionadas %d novas entradas ao cofre</item>\n    </plurals>\n    <string name=\"importing_icon_pack\">A importar o pacote de ícones</string>\n    <string name=\"delete_entry\">Eliminar entrada</string>\n    <string name=\"delete_entry_description\">Tem a certeza de que quer excluir esta entrada?</string>\n    <string name=\"delete_entry_explanation\">Esta ação não desativa a 2FA para:\\n<b>%s</b>\\n\\nPara evitar a perda de acesso, certifique-se de que desativou a 2FA ou de que tem uma forma alternativa de gerar códigos para este serviço.</string>\n    <string name=\"delete_entries\">Eliminar entradas</string>\n    <plurals name=\"delete_entries_description\">\n        <item quantity=\"one\">Você tem certeza que deseja deletar %d entrada?</item>\n        <item quantity=\"other\">Você tem certeza que deseja deletar %d entradas?</item>\n    </plurals>\n    <string name=\"discard_changes\">Descartar alterações?</string>\n    <string name=\"discard_changes_description\">As suas alterações não foram guardadas</string>\n    <string name=\"saving_profile_error\">Erro ao guardar o perfil</string>\n    <string name=\"saving_assign_icons_error\">Erro ao atribuir ícones</string>\n    <string name=\"welcome\">Bem-vindo</string>\n    <string name=\"app_description\">O Aegis é uma aplicação 2FA gratuita, segura e de código aberto</string>\n    <string name=\"setup_completed\">Configuração concluída</string>\n    <string name=\"setup_completed_description\">O Aegis foi configurado e está pronto a ser usado.</string>\n    <string name=\"vault_not_found\">Cofre não encontrado, a iniciar configuração…</string>\n    <string name=\"copied\">Copiado</string>\n    <string name=\"errors_copied\">Erros copiados para a área de transferência</string>\n    <string name=\"version_copied\">Versão copiada para a área de transferência</string>\n    <string name=\"error_required_field\">Este campo é necessário</string>\n    <string name=\"error_occurred\">Ocorreu um erro</string>\n    <string name=\"decryption_error\">Ocorreu um erro ao tentar desbloquear o cofre</string>\n    <string name=\"decryption_corrupt_error\">Ocorreu um erro ao tentar desbloquear o cofre. O ficheiro do cofre pode estar corrompido.</string>\n    <string name=\"saving_error\">Ocorreu um erro ao tentar guardar o cofre</string>\n    <string name=\"vault_init_error\">Ocorreu um erro ao tentar iniciar o cofre</string>\n    <string name=\"vault_load_error\">Ocorreu um erro ao tentar carregar o cofre do armazenamento</string>\n    <string name=\"biometric_decrypt_error\">Ocorreu um erro ao tentar desencriptar o cofre com autenticação biométrica. Isto só acontece normalmente se as definições de segurança do seu dispositivo foram alteradas. Por favor, desbloqueie o cofre com a sua palavra-passe e redefina a autenticação biométrica nas configurações do Aegis.</string>\n    <string name=\"biometric_init_error\">Ocorreu um erro ao tentar preparar a autenticação biométrica. Isto só acontece normalmente se as definições de segurança do seu dispositivo foram alteradas. Por favor, desbloqueie o cofre com a sua palavra-passe e redefina a autenticação biométrica nas configurações do Aegis.</string>\n    <string name=\"disable_encryption\">Desativar encriptação</string>\n    <string name=\"disable_encryption_description\">Tem a certeza de que deseja desativar a encriptação? Isto fará com que o cofre seja armazenado em texto simples. <b>Os backups automáticos também serão desativados</b>.</string>\n    <string name=\"enable_encryption_error\">Ocorreu um erro ao ativar a encriptação</string>\n    <string name=\"disable_encryption_error\">Ocorreu um erro ao desativar a encriptação</string>\n    <string name=\"backup_successful\">O ‘backup’ foi agendado com sucesso</string>\n    <string name=\"backup_error\">Ocorreu um erro ao tentar criar um ‘backup’</string>\n    <string name=\"backup_status_success\">Backup mais recente realizado com sucesso: %s</string>\n    <string name=\"backup_status_failed\">A realização de um backup recente falhou: %s</string>\n    <string name=\"backup_status_none\">Ainda não houve nenhum backup realizado</string>\n    <string name=\"backup_warning_password\">Os backups são encriptados utilizando uma palavra-passe separada configurada nas definições de segurança</string>\n    <string name=\"documentsui_error\">O módulo DocumentsUI parece estar em falta no seu dispositivo. Trata-se de um componente do sistema necessário para a seleção e criação de documentos. Se utilizou uma ferramenta para &quot;limpar&quot; o seu dispositivo, pode tê-lo eliminado acidentalmente e terá de o reinstalar.</string>\n    <string name=\"icon_pack_import_error\">Ocorreu um erro durante o processo de importação do pacote de ícones</string>\n    <string name=\"icon_pack_import_exists_error\">O pacote de ícones que tenta importar já existe. Pretende substituí-lo?</string>\n    <string name=\"icon_pack_delete_error\">Ocorreu um erro durante o processo de exclusão de um pacote de ícones</string>\n    <plurals name=\"icon_pack_info\">\n        <item quantity=\"one\">%d ícone</item>\n        <item quantity=\"other\">%d ícones</item>\n    </plurals>\n    <string name=\"icon_custom\">Personalizar</string>\n    <string name=\"permission_denied\">Permissão negada</string>\n    <string name=\"andotp_new_format\">Novo formato (v0.6.3 ou mais recente) </string>\n    <string name=\"andotp_old_format\">Formato antigo (v0.6.2 ou antigo) </string>\n    <string name=\"choose_andotp_importer\">Qual o formato do arquivo de backup andOTP?</string>\n    <string name=\"choose_totpauth_importer\">Este backup TOTP Authenticator é criptografado com uma senha?</string>\n    <string name=\"choose_application\">Selecione a aplicação da qual gostaria de importar</string>\n    <string name=\"choose_theme\">Selecione o tema</string>\n    <string name=\"choose_account_name_position\">Selecione a posição do nome da conta desejada</string>\n    <string name=\"choose_view_mode\">Selecione o modo de visualização</string>\n    <string name=\"choose_copy_behavior\">Selecione o estilo de cópia que deseja efetuar </string>\n    <string name=\"parsing_file_error\">Ocorreu um erro ao tentar analisar o ficheiro</string>\n    <string name=\"file_not_found\">Erro: Ficheiro não encontrado</string>\n    <string name=\"reading_file_error\">Ocorreu um erro ao tentar ler o ficheiro</string>\n    <string name=\"app_lookup_error\">Erro: A aplicação não está instalada</string>\n    <string name=\"app_version_error\">A versão de %s que está instalada não é suportada. As versões recentes começaram a encriptar alguns dos ficheiros no armazenamento interno, tornando o Aegis incapaz de aceder às informações necessárias para a importação. É provável que a tentativa de importação resulte num erro. Gostaria de continuar na mesma?</string>\n    <string name=\"root_error\">Erro: Não é possível obter acesso root</string>\n    <plurals name=\"imported_entries_count\">\n        <item quantity=\"one\">%d entrada importada</item>\n        <item quantity=\"other\">%d entradas importadas</item>\n    </plurals>\n    <plurals name=\"entries_shown\">\n        <item quantity=\"one\">A mostrar %d entrada</item>\n        <item quantity=\"other\">A mostrar %d entradas</item>\n    </plurals>\n    <string name=\"intro_import_error_title\">Ocorreu um erro ao importar o cofre</string>\n    <string name=\"import_error_title\">Um ou mais erros ocorreram durante a importação</string>\n    <string name=\"exporting_vault_error\">Ocorreu um erro ao tentar exportar o cofre</string>\n    <string name=\"exported_vault\">O cofre foi exportado</string>\n    <string name=\"encryption_set_password_error\">Ocorreu um erro ao tentar definir a palavra-passe.</string>\n    <string name=\"encryption_enable_biometrics_error\">Ocorreu um erro ao tentar ativar o desbloqueio biométrico. Alguns dispositivos têm más implementações da autenticação biométrica e é provável que o seu seja um deles. Considere mudar para uma configuração com apenas palavra-passe.</string>\n    <string name=\"no_cameras_available\">Nenhuma câmara disponível</string>\n    <string name=\"read_qr_error\">Ocorreu um erro ao tentar ler o código QR</string>\n    <string name=\"read_qr_error_phonefactor\">Aegis é incompatível com o algoritmo 2FA das propriedades da Microsoft. Por favor, selecione \\\"Configurar aplicação sem notificações\\\" quando configurar 2FA no Office 365. </string>\n    <string name=\"partial_google_auth_import\">Foi detetada uma exportação incompleta do Google Authenticator </string>\n    <string name=\"partial_google_auth_import_warning\">Faltam alguns códigos QR na sua importação. Os seguintes códigos não foram encontrados:\\n\\n<b>%s</b>\\n\\nPode continuar a importar esta exportação parcial, mas recomendamos que tente novamente com todos os códigos QR para não correr o risco de perder o acesso a quaisquer tokens.</string>\n    <string name=\"missing_qr_code_descriptor\">• Código QR %d</string>\n    <plurals name=\"import_partial_export_anyway\">\n        <item quantity=\"one\">Importar %d token mesmo assim</item>\n        <item quantity=\"other\">Importar %d tokens mesmo assim</item>\n    </plurals>\n    <string name=\"import_google_auth_failure\">Falha ao importar a exportação do Google Authenticator</string>\n    <string name=\"unrelated_google_auth_batches_error\">A exportação contém informações para um lote não relacionado. Experimente importar um lote de cada vez.</string>\n    <string name=\"no_tokens_can_be_imported\">Nenhum token pode ser importado como resultado</string>\n    <string name=\"unlocking_vault\">A desbloquear o cofre</string>\n    <string name=\"rename_group\">Mudar o nome do grupo</string>\n    <string name=\"no_group_selection\">Se uma entrada não faz parte de um grupo, pode ser encontrada em \\\"Sem grupo\\\".</string>\n    <string name=\"remove_group\">Remover grupo</string>\n    <string name=\"remove_group_description\">Tem a certeza de que pretende remover este grupo? As entradas neste grupo mudarão automaticamente para \\'Sem grupo\\'.</string>\n    <string name=\"remove_unused_groups\">Apagar grupos não utilizados</string>\n    <string name=\"remove_unused_groups_description\">Tem a certeza de que pretende eliminar todos os grupos que não estão atribuídos a uma entrada?</string>\n    <string name=\"remove_icon_pack\">Remover pacote de ícones</string>\n    <string name=\"remove_icon_pack_description\">Tem a certeza de que pretende remover este pacote de ícones? As entradas que utilizam ícones deste pacote não serão afetadas.</string>\n    <string name=\"details\">Detalhes</string>\n    <string name=\"show_error_details\">Mostrar detalhes do erro</string>\n    <string name=\"lock\">Bloquear</string>\n    <string name=\"name\">Nome</string>\n    <string name=\"no_group\">Sem grupo</string>\n    <string name=\"sort\" comment=\"Title of the Sort button in the top action bar of the main view\">Ordenar</string>\n    <string name=\"sort_alphabetically\">Emissor (A a Z)</string>\n    <string name=\"sort_alphabetically_reverse\">Emissor (Z a A)</string>\n    <string name=\"sort_alphabetically_name\">Conta (A a Z)</string>\n    <string name=\"sort_alphabetically_name_reverse\">Conta (Z a A)</string>\n    <string name=\"sort_usage_count\">Número de utilizações</string>\n    <string name=\"sort_last_used\">Última utilização</string>\n    <string name=\"sort_custom\">Personalizado</string>\n    <string name=\"last_used\">Última utilização</string>\n    <string name=\"last_used_never\">nunca</string>\n    <string name=\"new_group\">Novo grupo…</string>\n    <string name=\"group\">Grupo</string>\n    <string name=\"group_name_hint\">Nome do grupo</string>\n    <string name=\"preference_manage_groups\">Editar grupos</string>\n    <string name=\"preference_manage_groups_summary\">Gira e elimine os seus grupos aqui</string>\n    <string name=\"preference_reset_usage_count\">Repor a contagem de utilização</string>\n    <string name=\"preference_reset_usage_count_summary\">Repor a contagem de utilização de cada entrada no seu cofre</string>\n    <string name=\"preference_reset_usage_count_dialog\">Tem a certeza de que pretende definir a contagem de utilização de cada entrada no seu cofre como 0?</string>\n    <string name=\"note\" comment=\"Users can add a note to an entry\">Nota</string>\n    <string name=\"clear\">Limpar</string>\n    <string name=\"dialog_duplicate_entry_title\" comment=\"'Duplicate' is a noun here\">Entrada duplicada</string>\n    <string name=\"dialog_duplicate_entry_message\">Esta entrada tem o mesmo nome e emissor que uma ou mais entradas já existentes. Como gostaria de proceder?</string>\n    <string name=\"dialog_duplicate_entry_overwrite_title\">Substituir entrada(s) existente(s)</string>\n    <string name=\"dialog_duplicate_entry_overwrite_subtitle\">Substituir a(s) entrada(s) existente(s) pela nova. Esta ação não pode ser anulada.</string>\n    <string name=\"dialog_duplicate_entry_suffix_title\">Adicionar sufixo</string>\n    <string name=\"dialog_duplicate_entry_suffix_subtitle\">Adicione um sufixo ao nome desta nova entrada. O novo nome será: %s</string>\n    <string name=\"dialog_duplicate_entry_cancel_title\">Cancelar guardar</string>\n    <string name=\"dialog_duplicate_entry_cancel_subtitle\">Permite-lhe editar a entrada antes de tentar guardá-la novamente.</string>\n    <plurals name=\"dialog_duplicate_entry_overwrite_dialog_message\">\n        <item quantity=\"one\">Tem a certeza de que pretende eliminar %d entrada com o seguinte nome:\\n\\n%s - %s</item>\n        <item quantity=\"other\">Tem a certeza de que pretende eliminar %d entradas com o seguinte nome:\\n\\n%s - %s</item>\n    </plurals>\n    <string name=\"dialog_duplicate_entry_overwrite_dialog_title\">Confirmar eliminação</string>\n    <string name=\"pref_haptic_feedback_summary\">Faça o seu dispositivo vibrar quando os códigos forem atualizados</string>\n    <string name=\"pref_haptic_feedback_title\">Resposta háptica</string>\n    <string name=\"pref_highlight_entry_title\">Realçar tokens quando tocados</string>\n    <string name=\"pref_highlight_entry_summary\">Torne os tokens mais fáceis de distinguir uns dos outros, destacando-os temporariamente quando toca neles</string>\n    <string name=\"pref_groups_multiselect_title\">Seleção múltipla de grupos</string>\n    <string name=\"pref_groups_multiselect_summary\">Permitir a seleção de vários grupos ao mesmo tempo</string>\n    <string name=\"pref_minimize_on_copy_title\">Minimizar ao copiar</string>\n    <string name=\"pref_minimize_on_copy_summary\">Após copiar um token, minimizar a aplicação </string>\n    <string name=\"pref_copy_behavior_title\">Copiar tokens para a área de transferência</string>\n    <string name=\"pref_search_behavior_title\">Comportamento da pesquisa</string>\n    <string name=\"pref_pause_entry_title\">Congelar tokens quando tocados</string>\n    <string name=\"pref_pause_entry_summary\">Pausar a atualização automática dos tokens ao tocar neles. Os tokens não serão atualizados desde que estejam em foco. Requer \\\"Realçar tokens quando tocados\\\" ou \\\"Toque para mostrar\\\".</string>\n    <string name=\"pin_keyboard_description\">Digite sua senha para ativar o teclado PIN. Observe que isso só funciona se a sua senha for constituída apenas por números</string>\n    <string name=\"pin_keyboard_error\">Erro ao habilitar o teclado PIN</string>\n    <string name=\"pin_keyboard_error_description\">Não é possível configurar o teclado PIN. A sua senha deve ser composta apenas por números.</string>\n    <string name=\"pin_keyboard_disabled\">Senha alterada. O teclado PIN não será mais exibido.</string>\n    <string name=\"selected\">Selecionado</string>\n    <string name=\"dark_theme_title\">Tema escuro</string>\n    <string name=\"light_theme_title\">Tema claro</string>\n    <string name=\"amoled_theme_title\">Tema AMOLED</string>\n    <string name=\"system_theme_title\">Definido pela Poupança de Bateria</string>\n    <string name=\"system_amoled_theme_title\">Definido pela Economia de bateria (AMOLED)</string>\n    <string name=\"normal_viewmode_title\">Normal</string>\n    <string name=\"compact_mode_title\">Compacto</string>\n    <string name=\"small_mode_title\">Pequeno</string>\n    <string name=\"tiles_mode_title\">Blocos</string>\n    <string name=\"unknown_issuer\">Emissor desconhecido</string>\n    <string name=\"unknown_account_name\">Nome de conta desconhecido</string>\n    <plurals name=\"import_error_dialog\">\n        <item quantity=\"one\">O Aegis não conseguiu importar %d token. Este token será ignorado. Prima \\\"detalhes\\\" para obter mais informações sobre o erro.</item>\n        <item quantity=\"other\">O Aegis não conseguiu importar %d tokens. Estes tokens serão ignorados. Prima \\\"detalhes\\\" para obter mais informações sobre os erros.</item>\n    </plurals>\n    <string name=\"unable_to_process_deeplink\">Não é possível processar a ligação profunda</string>\n    <string name=\"unable_to_read_qrcode_file\">Não foi possível ler e processar o código QR do ficheiro: %s.</string>\n    <string name=\"unable_to_process_shared_text\">Não é possível processar o texto partilhado como OTP</string>\n    <string name=\"unable_to_read_qrcode_files\">Impossível ler e processar alguns códigos QR. Apenas as entradas %1$d/%2$d serão importadas.</string>\n    <string name=\"unable_to_generate_qrcode\">Não foi possível gerar o código QR</string>\n    <string name=\"select_picture\">Selecionar imagem</string>\n    <string name=\"select_icon\">Selecionar ícone</string>\n    <string name=\"tile_open_vault\" comment=\"label for a quick settings tile that opens the app when tapped\">Abrir cofre</string>\n    <string name=\"tile_open_scanner\" comment=\"label for a quick settings tile that opens the QR code scanner when tapped\">Abrir digitalizador</string>\n    <string name=\"toggle_checkboxes\">Alternar caixas de seleção</string>\n    <string name=\"search\">Pesquisar</string>\n    <string name=\"channel_name_lock_status\">Estado de bloqueio</string>\n    <string name=\"channel_description_lock_status\">O Aegis pode criar uma notificação persistente para informá-lo quando o cofre estiver bloqueado</string>\n    <string name=\"vault_unlocked_state\">O cofre está desbloqueado. Toque aqui para bloquear.</string>\n    <string name=\"version\">Versão</string>\n    <string name=\"changelog\">Registo de alterações</string>\n    <string name=\"whats_new\">O que há de novo</string>\n    <string name=\"github_description\">Código fonte, problemas e informações</string>\n    <string name=\"license\">Licença</string>\n    <string name=\"license_description\">O Autenticador Aegis está licenciado sob GPLv3</string>\n    <string name=\"third_party_licenses\">Licenças de terceiros</string>\n    <string name=\"third_party_licenses_description\">Licenças das bibliotecas de terceiros utilizadas pelo Aegis</string>\n    <string name=\"country_netherlands\">Holanda</string>\n    <string name=\"email_us\">Escreva um e-mail</string>\n    <string name=\"visit_website\">Visite o nosso site</string>\n    <string name=\"about_support\">Suporte</string>\n    <string name=\"support_rate\">Avaliar</string>\n    <string name=\"support_rate_description\">Apoie-nos deixando uma avaliação na Google Play Store</string>\n    <string name=\"webview_error\">Este dispositivo não suporta a vista web, necessária para ver o registo de alterações e a licença. Falta-lhe um componente do sistema.</string>\n    <string name=\"email\">Email</string>\n    <string name=\"time_sync_warning_title\">Sincronização de tempo automática</string>\n    <string name=\"time_sync_warning_message\">O Aegis depende da hora do sistema para estar sincronizado para gerar códigos corretos. Um desvio de apenas alguns segundos pode resultar em códigos incorretos. Parece que o seu dispositivo não está configurado para sincronizar automaticamente o tempo. Gostaria de o fazer agora?</string>\n    <string name=\"time_sync_warning_disable\">Para de me avisar. Eu sei o que estou a fazer.</string>\n    <string name=\"google_qr_export_unrelated\">Código QR não relacionado. Experimente reiniciar o digitalizador.</string>\n    <plurals name=\"google_qr_export_scanned\">\n        <item quantity=\"one\">%1$d/%2$d códigos QR digitalizados</item>\n        <item quantity=\"other\">%1$d/%2$d códigos QR digitalizados</item>\n    </plurals>\n    <string name=\"google_qr_export_unexpected\">Esperado o código QR #%1$d, mas digitalizado #%2$d em vez disso</string>\n    <string name=\"backup_error_bar_message\"><b>O ‘backup’ do cofre falhou recentemente</b></string>\n    <string name=\"backup_error_dialog_details\" comment=\"The first parameter is the type of backup (e.g. built-in or Android backup). The second parameter is an elapsed time in the style of 'x seconds/minutes/days ago'.\">Uma tentativa recente de backup do cofre usando %1$s falhou devido a um erro. A tentativa ocorreu %2$s. Por favor, verifique as suas configurações de backup para assegurar que os backups possam ser concluídos com sucesso.</string>\n    <string name=\"backup_permission_error_dialog_details\" comment=\"The first parameter is the type of backup (e.g. built-in or Android backup). The second parameter is an elapsed time in the style of 'x seconds/minutes/days ago'.\">Uma tentativa recente de backup do cofre usando %1$s falhou devido à falta de permissão do Aegis para escrever no destino do backup. A tentativa ocorreu %2$s. Este erro pode acontecer se alterou o local/nome do destino do backup ou se restaurou o Aegis a partir de um backup, recentemente. Por favor, redefina novamente o destino do backup.</string>\n    <string name=\"backup_system_builtin\">backups automáticos do Aegis</string>\n    <string name=\"backup_system_android\">sistema de backup na nuvem do Android</string>\n    <string name=\"backup_reminder_bar_message_with_latest\" comment=\"The parameter is an elapsed time in the style of 'x seconds/minutes/days ago'\">O último backup está desatualizado (%s)</string>\n    <string name=\"backup_reminder_bar_message\">As mudanças não foram gravadas</string>\n    <string name=\"backup_reminder_bar_dialog_title\">As mudanças não foram gravadas</string>\n    <string name=\"backup_reminder_bar_dialog_summary\">        As alterações recentes ao cofre ainda não foram objeto de backup. É importante efetuar backups regulares para evitar a perda de acesso às suas contas. Considere a possibilidade de configurar backups automáticos nas definições.\n    </string>\n    <string name=\"backup_reminder_bar_dialog_accept\">Configurar backups</string>\n    <string name=\"backup_plaintext_export_warning\"><b>O cofre foi exportado recentemente em texto simples</b></string>\n    <string name=\"pref_show_plaintext_warning_hint\">Não mostrar este aviso novamente</string>\n    <string name=\"backup_plaintext_warning_explanation\">Este aviso é mostrado porque exportou recentemente uma cópia não encriptada do cofre. Para manter a segurança dos seus tokens, recomendamos que elimine este ficheiro quando já não for necessário.</string>\n    <string name=\"switch_camera\">Trocar câmara</string>\n    <string name=\"empty_list\">Não há códigos a mostrar. Comece a adicionar entradas através do botão + no canto inferior direito</string>\n    <string name=\"empty_list_title\">Nenhuma entrada encontrada</string>\n    <string name=\"empty_group_list\">Não existem grupos a mostrar. Adicione grupos no ecrã de edição de uma entrada</string>\n    <string name=\"empty_group_list_title\">Nenhum grupo encontrado</string>\n    <string name=\"no_icon_packs\">Ainda não foram importados quaisquer pacotes de ícones. Toque no botão + para importar um. Dica: experimente os <a href=\"https://aegis-icons.github.io\">aegis-icons</a>.</string>\n    <string name=\"no_icon_packs_title\">Sem pacotes de ícones</string>\n    <string name=\"pick_icon\">Selecionar ícone</string>\n    <string name=\"uncategorized\">Sem categoria</string>\n    <string name=\"done\">Concluído</string>\n    <plurals name=\"qr_count\">\n        <item quantity=\"one\">%d / %d QR code</item>\n        <item quantity=\"other\">Códigos QR %d / %d</item>\n    </plurals>\n    <string name=\"next\">Próximo</string>\n    <string name=\"previous\">Anterior</string>\n    <string name=\"copy_uri\">Copiar URI</string>\n    <string name=\"unable_to_copy_uri_to_clipboard\">Não é possível copiar o URI para a área de transferência</string>\n    <string name=\"uri_copied_to_clipboard\">URI copiado para a área de transferência</string>\n    <string name=\"transfer_entry_description\">Digitalize este código QR com a aplicação de autenticação para a qual gostaria de transferir esta entrada</string>\n    <string name=\"transfer_entry_brightness\">Clique no código QR para ativar/desativar o brilho máximo no ecrã inteiro</string>\n    <string name=\"google_auth_compatible_transfer_description\">Digitalize estes códigos QR com o Aegis ou o Google Authenticator.\\n\\nDevido às limitações do Google Authenticator, apenas estão incluídos os tokens TOTP e HOTP que utilizam SHA1 e produzem códigos de 6 dígitos</string>\n    <string name=\"password_strength_very_weak\">Muito Fraca</string>\n    <string name=\"password_strength_weak\">Fraca</string>\n    <string name=\"password_strength_fair\">Média</string>\n    <string name=\"password_strength_good\">Boa</string>\n    <string name=\"password_strength_strong\">Forte</string>\n    <string name=\"password_strength_unknown\">Palavra-passe demasiado longa para a análise de resistência</string>\n    <string name=\"pref_pin_keyboard_title\">Usar o teclado numérico no ecrã de bloqueio</string>\n    <string name=\"pref_pin_keyboard_summary\">Ative esta opção se quiser ativar o teclado numérico no ecrã de bloqueio. Isto só funciona para palavras-passe numéricas</string>\n    <string name=\"title_activity_preferences\">Configurações</string>\n    <string name=\"title_activity_manage_groups\">Gerir grupos</string>\n    <string name=\"title_activity_transfer\">Transferir entradas</string>\n    <string name=\"title_activity_about\">Sobre</string>\n    <string name=\"title_activity_edit_entry\">Editar entrada</string>\n    <string name=\"title_activity_scan_qr\">Escanear um código QR</string>\n    <string name=\"title_activity_import_entries\">Importar entradas</string>\n    <string name=\"title_activity_assign_icons\">Atribuir ícones</string>\n    <string name=\"title_activity_licenses\">Licenças de terceiros</string>\n    <string name=\"dialog_wipe_entries_title\">Limpar entradas</string>\n    <string name=\"dialog_wipe_entries_message\">O seu cofre já contém entradas. Você quer remover essas entradas antes de importar este arquivo?\\n\\n<b>Ao fazer isso, você perderá permanentemente o acesso às entradas existentes no cofre.</b></string>\n    <string name=\"dialog_wipe_entries_checkbox\">Limpar conteúdo do cofre</string>\n    <string name=\"panic_trigger_ignore_toast\">Aegis recebeu um gatilho de pânico, mas essa configuração está desativada, portanto será ignorado</string>\n    <string name=\"pref_panic_trigger_title\">Excluir cofre após gatilho de pânico</string>\n    <string name=\"pref_panic_trigger_summary\">Excluir cofre quando um gatilho de pânico é recebido do Ripple</string>\n    <string name=\"import_vault\">Importar cofre do Aegis</string>\n    <string name=\"import_vault_hint\">Quer importar de uma aplicação 2FA diferente? Conclua a configuração inicial e aceda às definições.</string>\n    <plurals name=\"import_duplicate_toast\">\n        <item quantity=\"one\">Desmarcado %d potencial duplo. Reveja a lista de entradas.</item>\n        <item quantity=\"other\">Desmarcados %d potencial duplos. Reveja a lista de entradas.</item>\n    </plurals>\n    <string name=\"importer_help_2fas\">Fornecer um arquivo de backup de 2FAS Authenticator.</string>\n    <string name=\"importer_help_aegis\">Fornecer um arquivo de exportação/backup do Aegis.</string>\n    <string name=\"importer_help_authenticator_plus\">Fornecer um arquivo de exportação do Autenticador Plus obtido através de <b>Configurações -&gt; Backup &amp; Restaurar -&gt; Exportar como Texto e HTML</b>.</string>\n    <string name=\"importer_help_authy\">Fornecer uma cópia de <b>/data/data/com.authy.authy/shared_prefs/com.authy.storage.tokens.authenticator.xml</b>, localizado no diretório de armazenamento interno do Authy.</string>\n    <string name=\"importer_help_andotp\">Fornecer um arquivo de exportação/backup do andOTP.</string>\n    <string name=\"importer_help_bitwarden\">Forneça um ficheiro de exportação/backup Bitwarden. Os ficheiros encriptados não são suportados.</string>\n    <string name=\"importer_help_battle_net_authenticator\">Forneça uma cópia de <b>/data/data/com.blizzard.messenger/shared_prefs/com.blizzard.messenger.authenticator_preferences.xml</b>, localizado no diretório de armazenamento interno do Autenticador Battle.net.</string>\n    <string name=\"importer_help_duo\">Forneça uma cópia de <b>/data/data/com.duosecurity.duomobile/files/duokit/accounts.json</b>, localizada no diretório de armazenamento interno do DUO.</string>\n    <string name=\"importer_help_ente_auth\">Disponibilize um ficheiro de exportação do Ente Auth. De momento, só são aceites ficheiros não encriptados.</string>\n    <string name=\"importer_help_freeotp\">FreeOTP 2: Disponibilize um ficheiro de backup.\\nFreeOTP 1.x: Disponibilize uma cópia do ficheiro <b>/data/data/org.fedorahosted.freeotp/shared_prefs/tokens.xml</b>, presente no armazenamento interno do FreeOTP.</string>\n    <string name=\"importer_help_freeotp_plus\">Fornecer um arquivo de exportação FreeOTP+.</string>\n    <string name=\"importer_warning_title_freeotp2\">Compatibilidade FreeOTP 2</string>\n    <string name=\"importer_warning_message_freeotp2\">No FreeOTP 2, existem diversos problemas que podem resultar em backups danificados. O Aegis tentará recuperar o maior número possível de entradas, mas é possível que algumas ou mesmo todas falhem ao importar.</string>\n    <string name=\"importer_help_google_authenticator\"><b>Apenas são suportados ficheiros de bases de dados do Google Authenticator v5.10 e anteriores</b>.\\n\\nForneça uma cópia de <b>/data/data/com.google.android.apps.authenticator2/databases/databases</b>, localizada no diretório de armazenamento interno do Google Authenticator.</string>\n    <string name=\"importer_help_microsoft_authenticator\">Fornecer uma cópia de <b>/data/data/com.azure.authenticator/databases/PhoneFactor</b>, localizado no diretório de armazenamento interno do Microsoft Authenticator.</string>\n    <string name=\"importer_help_plain_text\">Fornecer um arquivo de texto simples com um URI do Google Authenticator em cada linha.</string>\n    <string name=\"importer_help_proton_authenticator\">Forneça um arquivo de exportação do Proton Authenticator (.json) obtido através de <b>Configurações -&gt; Exportar</b>.</string>\n    <string name=\"importer_help_steam\"><b>Steam v3.0 e versões mais recentes não são suportadas</b>. Forneça uma cópia de <b>/data/data/com.valvesoftware.android.steam.community/files/Steamguard-*.json</b>, localizada no diretório de armazenamento interno do Steam.</string>\n    <string name=\"importer_help_stratum\">Disponibilize um ficheiro de exportação Stratum obtido através de <b>Definições —&gt; Backup —&gt; Fazer backup para ficheiro encriptado (recomendado)</b>.</string>\n    <string name=\"importer_help_totp_authenticator\">Fornecer um arquivo de exportação de Autenticador TOTP.</string>\n    <string name=\"importer_help_winauth\">Fornecer um arquivo de exportação do WinAuth.</string>\n    <string name=\"import_assign_icons_dialog_title\">Atribuir ícones</string>\n    <string name=\"import_assign_icons_dialog_text\">Pretende atribuir ícones às entradas importadas?</string>\n    <string name=\"importer_encrypted_exception_google_authenticator\">A entrada encriptada foi ignorada: %s</string>\n    <string name=\"importer_help_direct\">Importar entradas diretamente de %s. Isto requer que a aplicação seja instalada neste dispositivo e que acesso root seja concedido ao Aegis.</string>\n    <string name=\"groups\">Grupos</string>\n    <string name=\"pref_focus_search\">Focar pesquisa no início da aplicação</string>\n    <string name=\"pref_focus_search_summary\">Focar a pesquisa imediatamente após abrir a aplicação.</string>\n    <string name=\"pref_grouping_halves\">Metades</string>\n    <string name=\"pref_grouping_none\">Sem grupo</string>\n    <string name=\"pref_grouping_size_two\">Grupos de 2</string>\n    <string name=\"pref_grouping_size_three\">Grupos de 3</string>\n    <string name=\"pref_grouping_size_four\">Grupos de 4</string>\n    <string name=\"pref_copy_behavior_never\">Nunca</string>\n    <string name=\"pref_copy_behavior_single_tap\">Apenas um toque</string>\n    <string name=\"pref_copy_behavior_double_tap\">Duplo toque</string>\n    <string name=\"pref_account_name_position_hidden\">Ocultar / Ocultos</string>\n    <string name=\"pref_account_name_position_end\">Ao lado do emissor</string>\n    <string name=\"pref_account_name_position_below\">Abaixo do emissor</string>\n    <plurals name=\"time_elapsed_seconds\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"one\">há %d segundo</item>\n        <item quantity=\"other\">há %d segundos</item>\n    </plurals>\n    <plurals name=\"time_elapsed_minutes\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"one\">há %d minuto</item>\n        <item quantity=\"other\">há %d minutos</item>\n    </plurals>\n    <plurals name=\"time_elapsed_hours\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"one\">há %d hora</item>\n        <item quantity=\"other\">há %d horas</item>\n    </plurals>\n    <plurals name=\"time_elapsed_days\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"one\">há %d dia</item>\n        <item quantity=\"other\">há %d dias</item>\n    </plurals>\n    <plurals name=\"time_elapsed_years\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"one\">Há %d ano</item>\n        <item quantity=\"other\">Há %d anos</item>\n    </plurals>\n    <plurals name=\"dropdown_checkboxes_default_count\">\n        <item quantity=\"one\">%d item selecionado</item>\n        <item quantity=\"other\">%d itens selecionados</item>\n    </plurals>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-pt-rPT-v29/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"system_theme_title\">Predefinição do sistema</string>\n    <string name=\"system_amoled_theme_title\">Predefinição do sistema (AMOLED)</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-ro-rRO/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources xmlns:tools=\"http://schemas.android.com/tools\">\n    <string name=\"action_settings\">Setări</string>\n    <string name=\"action_about\">Despre</string>\n    <string name=\"action_delete\">Șterge</string>\n    <string name=\"action_transfer\">Transfer</string>\n    <string name=\"action_edit_icon\">Editează pictogramă</string>\n    <string name=\"action_reset_usage_count\">Resetează numărul utilizărilor</string>\n    <string name=\"action_reset_usage_count_dialog\">Sunteţi sigur că doriţi să setaţi numărul de utilizare a acestei intrări la 0?</string>\n    <string name=\"action_default_icon\">Resetare pictogramă</string>\n    <string name=\"discard\">Anulează</string>\n    <string name=\"save\">Salvare</string>\n    <string name=\"all\">Toate</string>\n    <string name=\"issuer\">Emitent</string>\n    <string name=\"yandex_pin\">PIN (4–16 cifre)</string>\n    <string name=\"motp_pin\">PIN (4 cifre)</string>\n    <string name=\"suggested\">Sugerat</string>\n    <string name=\"usage_count\">Numărul de utilizări</string>\n    <string name=\"warning\">Atenţie</string>\n    <string name=\"pref_cat_appearance_app\">Aplicație</string>\n    <string name=\"pref_cat_appearance_entries\">Intrări</string>\n    <string name=\"pref_cat_backups_android\">Android</string>\n    <string name=\"pref_cat_backups_auto\">Backup automat</string>\n    <string name=\"pref_section_behavior_title\">Comportament</string>\n    <string name=\"pref_section_behavior_summary\">Personalizați comportamentul când interacționați cu lista intrărilor.</string>\n    <string name=\"pref_section_appearance_title\">Prezentare</string>\n    <string name=\"pref_section_appearance_summary\">Reglați setările temei, limbii și altor setări care afectează aspectul aplicației.</string>\n    <string name=\"pref_section_security_title\">Securitate</string>\n    <string name=\"pref_section_security_summary\">Configurați criptarea, deblocarea biometrică, blocarea automată și alte setări de securitate.</string>\n    <string name=\"pref_section_import_export_title\">Importă &amp; Exportă</string>\n    <string name=\"pref_section_import_export_summary\">Importă copii de rezervă ale Aegis sau ale altor aplicații de autentificare. Creează exporturi manuale în seiful dvs. Aegis.</string>\n    <string name=\"pref_section_audit_log_title\">Jurnal de audit</string>\n    <string name=\"pref_section_audit_log_summary\">Găsiți o listă cu toate evenimentele importante raportate care s-au întâmplat în cadrul aplicației.</string>\n    <string name=\"pref_section_backups_title\">Backup-uri</string>\n    <string name=\"pref_section_backups_summary\">Configurați backup-urile automate într-o locație în care alegeți sau activați participarea la sistemul Android de backup în cloud.</string>\n    <string name=\"pref_section_icon_packs\">Set de pictograme</string>\n    <string name=\"pref_section_icon_packs_summary\">Gestionați și importați pachete de pictograme</string>\n    <string name=\"pref_select_theme_title\">Temă</string>\n    <string name=\"pref_dynamic_colors_title\">Culori dinamice</string>\n    <string name=\"pref_dynamic_colors_summary\">Aplică o culoare principală pe baza culorilor temei tale Android</string>\n    <string name=\"pref_view_mode_title\">Mod de vizualizare</string>\n    <string name=\"pref_lang_title\">Limbă</string>\n    <string name=\"pref_show_icons_title\">Arată pictograme</string>\n    <string name=\"pref_show_icons_summary\">Afişare pictograme lângă fiecare intrare</string>\n    <string name=\"pref_code_group_size_title\">Grupare cifre cod</string>\n    <string name=\"pref_code_group_size_summary\">Selectează numărul de cifre pentru a grupa codurile</string>\n    <string name=\"pref_account_name_position_title\">Arată numele contului</string>\n    <string name=\"pref_show_next_code_title\">Arată următorul cod</string>\n    <string name=\"pref_show_next_code_summary\">Generează și arată codul următor înainte</string>\n    <string name=\"pref_expiration_state_title\">Indică momentul când codurile sunt pe cale să expire</string>\n    <string name=\"pref_expiration_state_summary\">Schimbă culoarea codurilor și fă codurile să clipească în momentul în care expiră</string>\n    <string name=\"pref_expiration_state_fallback\">Schimbă culoarea codurilor când sunt pe cale să expire</string>\n    <string name=\"pref_shared_issuer_account_name_title\">Arată numele contului doar atunci când este necesar</string>\n    <string name=\"pref_shared_issuer_account_name_summary\">Arată numai numele de cont ce au același emitent. Alte nume de cont vor fi ascunse.</string>\n    <string name=\"pref_account_name_position_summary_override\">Această setare este suprascrisă de modul vizualizare dale. Numele contului va fi afișat mai jos de emitent.</string>\n    <string name=\"pref_import_file_title\">Importă din fișier</string>\n    <string name=\"pref_import_file_summary\">Importă token-uri dintr-un fișier</string>\n    <string name=\"pref_android_backups_title\">Backup-uri Android în cloud</string>\n    <string name=\"pref_android_backups_summary\">Permite sistemului de backup Android să includă seiful Addis în copiile de rezervă. Acest lucru este acceptat doar pentru seifurile criptate.</string>\n    <string name=\"pref_android_backups_hint\"><i>Backup-urile de la un dispozitiv la altul (D2D) sunt întotdeauna permise, indiferent de setarea de mai sus</i></string>\n    <string name=\"pref_backups_title\">Salvează automat seiful</string>\n    <string name=\"pref_backups_summary\">Creează automat copii de rezervă ale seifului pe stocarea externă atunci când se fac modificări. Acest lucru este disponibil doar pentru seifurile criptate.</string>\n    <string name=\"pref_backups_reminder_title\">Alertă backup</string>\n    <string name=\"pref_backups_reminder_summary\">Arată un mesaj pentru a salva seiful în cazul în care nu ai făcut backup la ultimele modificări.</string>\n    <string name=\"pref_backups_reminder_dialog_title\">Dezactivează alerta de backup</string>\n    <string name=\"pref_backups_reminder_dialog_summary\">Dezactivarea acestei alerte înseamnă că Addis nu îți va spune dacă ai sau nu schimbări care nu sunt încă salvate. Acest lucru te pune în pericol de a pierde accesul la Cohen-urile tale. Ești sigur că vrei să dezactivezi alerta?</string>\n    <string name=\"pref_backups_versioning_strategy_title\">Strategie de backup</string>\n    <string name=\"pref_backups_versioning_strategy_keep_x_versions\">Păstrează un număr de versiuni</string>\n    <string name=\"pref_backups_versioning_strategy_single_backup\">O singură copie de rezervă</string>\n    <string name=\"pref_backups_versioning_strategy_single_backup_warning\">Strategia de backup selectată nu este fiabilă și nu este recomandată. Un singur backup nereușit ar putea duce la pierderea singurei tale copii de rezervă.</string>\n    <string name=\"pref_backups_versioning_strategy_dialog_title\">Selectează o strategie de backup</string>\n    <string name=\"pref_backups_location_title\">Locație backup</string>\n    <string name=\"pref_backups_location_summary\">Copiile de rezervă vor fi stocate la</string>\n    <string name=\"pref_backup_location_summary\">Copiile de rezervă vor fi stocate la</string>\n    <string name=\"pref_backups_trigger_title\">Declanșare copie de rezervă</string>\n    <string name=\"pref_backups_trigger_summary\">Declanșează manual o copie de rezervă</string>\n    <string name=\"pref_backups_versions_title\">Numărul de versiuni de păstrat</string>\n    <string name=\"pref_backups_versions_infinite\">\\u221E</string>\n    <plurals name=\"pref_backups_versions_summary\">\n        <item quantity=\"one\">Păstraţi %1$d versiune a copiei de rezervă</item>\n        <item quantity=\"few\">Păstraţi %1$d versiune a copiei de rezervă</item>\n        <item quantity=\"other\">Păstraţi %1$d de versiuni ale copiei de rezervă</item>\n    </plurals>\n    <string name=\"pref_backups_versions_infinite_summary\">Păstrează un număr infinit de versiuni ale copiei de rezervă</string>\n    <string name=\"pref_import_app_title\">Importă din aplicație</string>\n    <string name=\"pref_import_app_summary\">Importă tokeni dintr-o aplicație (necesită acces root)</string>\n    <string name=\"pref_export_title\">Exportă</string>\n    <string name=\"pref_export_summary\">Exportă seiful</string>\n    <string name=\"pref_password_reminder_title\">Reamintire parolă</string>\n    <string name=\"pref_google_auth_export_title\">Exportă pentru Google Authenticator</string>\n    <string name=\"pref_google_auth_export_descriptor\">Generează coduri QR de export compatibile cu Google Authenticator</string>\n    <string name=\"pref_google_auth_export_no_data\">Nu există date de exportat</string>\n    <plurals name=\"pref_google_auth_export_incompatible_entries\">\n        <item quantity=\"one\">%d intrare incompatibilă a fost omisă</item>\n        <item quantity=\"few\">%d intrari incompatibile au fost omise</item>\n        <item quantity=\"other\">%d de intrari incompatibile au fost omise</item>\n    </plurals>\n    <string name=\"pref_password_reminder_summary\">Arată un %s memento pentru a introduce parola, astfel încât să nu o uiți.</string>\n    <string name=\"pref_password_reminder_summary_disabled\">Dezactivat</string>\n    <string name=\"pref_secure_screen_title\">Securitatea ecranului</string>\n    <string name=\"pref_secure_screen_summary\">Blochează capturile de ecran și alte încercări de a captura ecranul în cadrul aplicației</string>\n    <string name=\"pref_tap_to_reveal_title\">Atinge pentru a descoperi</string>\n    <string name=\"pref_tap_to_reveal_summary\">Token-urile vor fi ascunse în mod implicit. Apăsați pe token-uri pentru a dezvălui codul.</string>\n    <string name=\"pref_tap_to_reveal_time_title\">Expirare pentru apăsare și descoperire</string>\n    <string name=\"pref_auto_lock_title\">Blocare automată</string>\n    <string name=\"pref_auto_lock_summary\">Când %s</string>\n    <string name=\"pref_auto_lock_summary_disabled\">Dezactivat</string>\n    <string name=\"pref_auto_lock_prompt\">Blocare automată Aegis când</string>\n    <string name=\"pref_auto_lock_type_back_button\">Butonul înapoi este apăsat</string>\n    <string name=\"pref_auto_lock_type_minimize\">Aplicația este minimizată</string>\n    <string name=\"pref_auto_lock_type_device_lock\">Dispozitivul este blocat</string>\n    <string name=\"pref_backup_password_category\">Backup &amp; Export</string>\n    <string name=\"pref_backup_password_title\">Parolă separată pentru backup &amp; export</string>\n    <string name=\"pref_backup_password_summary\">Dacă este activată, parola folosită pentru a debloca aplicația nu mai poate fi utilizat ăpentru a decripta copiile de rezervă și exporturi.</string>\n    <string name=\"pref_backup_password_change_title\">Schimbă parola pentru backup &amp; export</string>\n    <string name=\"pref_backup_password_change_summary\">Setează o parolă nouă care va fi folosită pentru a cripta seiful în timpul procedurii de backup and export.</string>\n    <string name=\"pref_encryption_title\">Criptare</string>\n    <string name=\"pref_encryption_summary\">Criptează seiful și deblochează-l cu o parolă sau biometrice</string>\n    <string name=\"pref_biometrics_title\">Deblocare biometrică</string>\n    <string name=\"pref_biometrics_summary\">Permite autentificarea biometrică pentru a debloca seiful</string>\n    <string name=\"pref_search_behavior_summary\">Căutare prin: %s</string>\n    <string name=\"pref_search_behavior_prompt\">Căutare în oricare dintre următoarele câmpuri</string>\n    <string name=\"pref_search_behavior_type_name\">Nume</string>\n    <string name=\"pref_search_behavior_type_issuer\">Emitent</string>\n    <string name=\"pref_search_behavior_type_note\">Notă</string>\n    <string name=\"pref_search_behavior_type_groups\">Grupuri</string>\n    <string name=\"pref_set_password_title\">Schimbă parola</string>\n    <string name=\"pref_set_password_summary\">Setează o parolă nouă cu care va trebui să deblochezi seiful</string>\n    <string name=\"no_events_title\">Nu s-au raportat evenimente</string>\n    <string name=\"no_events_description\">Nu au fost raportate evenimente importante în cadrul aplicației</string>\n    <string name=\"event_title_vault_unlocked\">Seif deblocat</string>\n    <string name=\"event_description_vault_unlocked\">Seiful a fost deblocat cu succes</string>\n    <string name=\"event_title_backup_created\">Copie de rezervă creată</string>\n    <string name=\"event_description_backup_created\">O copie de rezervă a seifului a fost creată cu succes</string>\n    <string name=\"event_title_android_backup_created\">Android a creat o copie de rezervă</string>\n    <string name=\"event_description_android_backup_created\">O copie de rezervă a seifului a fost creată cu succes de Android</string>\n    <string name=\"event_title_vault_exported\">Seif exportat</string>\n    <string name=\"event_description_vault_exported\">O copie a seifului a fost exportată</string>\n    <string name=\"event_title_entry_shared\">Element distribuit</string>\n    <string name=\"event_description_entry_shared\">Un element a fost distribuit</string>\n    <string name=\"event_title_vault_unlock_failed_password\">Deblocarea seifului a eșuat (parolă)</string>\n    <string name=\"event_description_vault_unlock_failed_password\">Încercarea de a debloca seiful cu o parolă a eșuat</string>\n    <string name=\"event_title_vault_unlock_failed_biometrics\">Deblocarea seifului a eșuat (biometrie)</string>\n    <string name=\"event_description_vault_unlock_failed_biometrics\">Încercarea de a debloca seiful cu datele biometrice a eșuat</string>\n    <string name=\"event_unknown\">Tipul evenimentului este necunoscut</string>\n    <string name=\"audit_log_entry_deleted\">(șters)</string>\n    <string name=\"today_at_time\">Astăzi, la %1$s</string>\n    <string name=\"day_of_week_at_time\">%1$s la %2$s</string>\n    <string name=\"export_encrypted\">Criptează seiful</string>\n    <string name=\"export_help\">Această acțiune va exporta seiful din spațiul de stocare al aplicaţiei. Selectează formatul în care dorești exportul:</string>\n    <string name=\"export_warning_unencrypted\">Ești pe cale să exportezi o copie necriptată a seifului Aegis. <b>Acest lucru nu este recomandat</b>.</string>\n    <string name=\"export_warning_password\">Exporturile sunt criptate folosind o parolă separată configurată în setările de securitate.</string>\n    <string name=\"understand_risk_accept\">Înțeleg riscul</string>\n    <string name=\"export_format_aegis\">Aegis (.JSON)</string>\n    <string name=\"export_format_google_auth_uri\">Fișier text (.TXT)</string>\n    <string name=\"export_format_html\">Pagină web (.HTML)</string>\n    <string name=\"export_format_hint\">Formatul în care se exportă</string>\n    <string name=\"export_all_groups\">Exportă toate grupurile</string>\n    <string name=\"export_choose_groups\">Selectează ce grupuri să exporți</string>\n    <plurals name=\"export_groups_selected_count\">\n        <item quantity=\"one\">%d grup selectat</item>\n        <item quantity=\"few\">%d grupuri selectate</item>\n        <item quantity=\"other\">%d de grupuri selectate</item>\n    </plurals>\n    <string name=\"export_no_groups_selected\">Nici un grup selectat pentru export</string>\n    <string name=\"export_html_title\" comment=\"The title of an HTML export document\">Exportul aplicației Aegis Authenticator</string>\n    <string name=\"choose_authentication_method\">Securitate</string>\n    <string name=\"authentication_method_explanation\">Aegis este o aplicație 2FA concentrată pe securitate. Token-urile sunt stocate într-un seif, care poate criptat cu o parolă aleasă. Dacă un atacator obține fișierul criptat al seifului, nu va putea accesa conținutul fără a cunoaște parola.\\n\\nAm selectat opțiunea pe care o credem cea mai potrivită pentru dispozitivul tău.</string>\n    <string name=\"authentication_method_none\">Fără</string>\n    <string name=\"authentication_method_none_description\">Nu este necesară nicio parolă pentru a debloca seiful și nu va fi criptată. <b>Această opțiune nu este recomandată</b>.</string>\n    <string name=\"authentication_method_password\">Parolă</string>\n    <string name=\"authentication_method_password_description\">O parolă este necesară pentru a debloca seiful.</string>\n    <string name=\"authentication_method_password_explanation\">Avertisment: Dacă îți uiți parola, vei pierde definitiv accesul la token-urile dvs. Nu există nicio modalitate de a le recupera fără parolă.</string>\n    <string name=\"authentication_method_biometrics\">Biometrice</string>\n    <string name=\"authentication_method_biometrics_description\">În plus față de o parolă, datele biometrice înregistrate pe acest dispozitiv, cum ar fi o amprentă sau fața ta, pot fi folosite pentru a debloca seiful.</string>\n    <string name=\"authentication\">Deblocare seif</string>\n    <string name=\"authentication_multiline\" comment=\"The newline in the middle is used for aesthetic purposes\">Deblocare\\nseif</string>\n    <string name=\"auth_use_biometrics\">Sau apasă aici pentru a utiliza <font fgcolor=\"#FF0D86C1\">datele biometrice</font></string>\n    <string name=\"set_password\">Te rugăm să introduci o parolă</string>\n    <string name=\"set_group\">Te rugăm să introduci un nume de grup</string>\n    <string name=\"set_number\">Te rugăm să introduci un număr</string>\n    <string name=\"set_password_confirm\">Te rugăm să confirmi parola</string>\n    <string name=\"invalid_password\">Parola este incorectă</string>\n    <string name=\"invalidated_biometrics\">A fost detectată o modificare a setărilor de securitate ale dispozitivului. Vă rugăm să mergeţi la \\\"Aegis -&gt; Setări -&gt; Securitate -&gt; Deblocare biometrică\\\" pentru a dezactiva şi reactiva deblocarea biometrică.</string>\n    <string name=\"password_reminder\">Te rugăm să introduci parola. Uneori îți cerem să faci asta pentru a nu o uita.</string>\n    <string name=\"password_reminder_dialog_title\">Deblocare biometrică în mod implicit</string>\n    <string name=\"password_reminder_dialog_message\">Vă recomandăm ocazional să introduci parola pentru a te asigura că nu ai uitat-o. După introducerea parolei o dată, Aegis va reveni la deblocarea biometrică până când este timpul pentru o altă reamintire a parolei.</string>\n    <string name=\"password_reminder_freq_never\">Niciodată</string>\n    <string name=\"password_reminder_freq_weekly\">Săptămânal</string>\n    <string name=\"password_reminder_freq_biweekly\">La doua săptămâni</string>\n    <string name=\"password_reminder_freq_monthly\">Lunar</string>\n    <string name=\"password_reminder_freq_quarterly\">Trimestrial</string>\n    <string name=\"enter_password_2fas_message\">Se pare că această copie de rezervă 2FAS este criptată. Introduceți parola mai jos.</string>\n    <string name=\"enter_password_authy_message\">Se pare că token-urile tale Authy sunt criptate. Te rugăm să închizi Aegis, să deschizi Authy și să deblochezi tokenurile cu parola ta. În schimb, Aegis poate încerca, de asemenea, să decripteze tokenurile Authy pentru tine, dacă introduci parola mai jos.</string>\n    <string name=\"enter_password_aegis_title\">Vă rugăm să introduceți parola curentă</string>\n    <string name=\"period_hint\">Timp (secunde)</string>\n    <string name=\"algorithm_hint\">Funcția Hash</string>\n    <string name=\"type\">Tip</string>\n    <string name=\"share\">Distribuie</string>\n    <string name=\"yes\">Da</string>\n    <string name=\"no\">Nu</string>\n    <string name=\"undo\">Anulare</string>\n    <string name=\"unlock\">Deblocare</string>\n    <string name=\"advanced\">Avansat</string>\n    <string name=\"counter\">Contor</string>\n    <string name=\"digits\">Cifre</string>\n    <string name=\"secret\">Secret</string>\n    <string name=\"scan\">Scanare cod QR</string>\n    <string name=\"scan_image\">Scanare imagine</string>\n    <string name=\"enter_manually\">Introducere manuală</string>\n    <string name=\"set_up_biometric\">Configurează deblocarea biometrică</string>\n    <string name=\"copy\">Copiere</string>\n    <string name=\"edit\">Editare</string>\n    <string name=\"select_all\">Selectează tot</string>\n    <string name=\"assign_icons\">Atribuie pictograme</string>\n    <string name=\"assign_groups\">Abonează în grup</string>\n    <string name=\"assign_groups_dialog_summary\">Selectează un grup căruia dorești să îi atribui intrările selectate.</string>\n    <string name=\"assign_groups_dialog_dropdown\">Selectează grupul</string>\n    <string name=\"favorite\" comment=\"Verb\">Favorit</string>\n    <string name=\"unfavorite\" comment=\"Verb\">Elimină din favorite</string>\n    <string name=\"error_all_caps\">EROARE</string>\n    <string name=\"password\">Parolă</string>\n    <string name=\"confirm_password\">Confirmă parola</string>\n    <string name=\"show_password\">Arată parola</string>\n    <string name=\"new_entry\">Poziție nouă</string>\n    <string name=\"add_new_entry\">Adăugare intrare nouă</string>\n    <string name=\"unlock_vault_error\">Nu s-a putut debloca seiful</string>\n    <string name=\"unlock_vault_error_description\">Parolă incorectă. Asigură-te că nu ai greșit parola.</string>\n    <string name=\"password_equality_error\">Parolele trebuie să fie identice și negoale</string>\n    <string name=\"snackbar_authentication_method\">Te rugăm să selectezi o metodă de autentificare</string>\n    <string name=\"encrypting_vault\">Criptează seiful</string>\n    <string name=\"exporting_vault\">Exportă seiful</string>\n    <string name=\"optimizing_icon\">Se optimizează pictograma</string>\n    <string name=\"optimizing_icon_multiple\">Se optimizează pictogramele %1$d/%2$d</string>\n    <string name=\"reading_file\">Citire fişier</string>\n    <string name=\"requesting_root_access\">Solicită acces root</string>\n    <string name=\"analyzing_qr\">Se analizează codul QR</string>\n    <string name=\"analyzing_qr_multiple\">Analizând QR code %1$d/%2$d (%3$s)</string>\n    <plurals name=\"added_new_entries\">\n        <item quantity=\"one\">Au fost adăugate %d de noi intrări în seif</item>\n        <item quantity=\"few\">Au fost adăugate %d noi intrări în seif</item>\n        <item quantity=\"other\">Au fost adăugate %d de noi intrări în seif</item>\n    </plurals>\n    <string name=\"importing_icon_pack\">Se importă pachetul de pictograme</string>\n    <string name=\"delete_entry\">Ștergere intrare</string>\n    <string name=\"delete_entry_description\">Ești sigur că dorești să ştergi această intrare?</string>\n    <string name=\"delete_entry_explanation\">Această acțiune nu dezactivează 2FA pentru\\n <b>%s</b>\\n\\n. Pentru a preveni pierderea accesului, asigurați-vă că ați dezactivat 2FA sau că aveți o modalitate alternativă de a genera coduri pentru acest serviciu.</string>\n    <string name=\"delete_entries\">Ştergere intrări</string>\n    <plurals name=\"delete_entries_description\">\n        <item quantity=\"one\">Sigur vrei să ștergi %d element?</item>\n        <item quantity=\"few\">Sigur vrei să ștergi %d elemente?</item>\n        <item quantity=\"other\">Sigur vrei să ștergi %d elemente?</item>\n    </plurals>\n    <string name=\"discard_changes\">Renunți la modificări?</string>\n    <string name=\"discard_changes_description\">Modificările nu au fost salvate</string>\n    <string name=\"saving_profile_error\">Eroare la salvarea profilului</string>\n    <string name=\"saving_assign_icons_error\">Eroare la atribuirea pictogramelor</string>\n    <string name=\"welcome\">Bun venit</string>\n    <string name=\"app_description\">Aegis este o aplicație 2FA gratuită, sigură și cu sursă deschisă</string>\n    <string name=\"setup_completed\">Configurare finalizată</string>\n    <string name=\"setup_completed_description\">Aegis a fost configurat cu succes.</string>\n    <string name=\"vault_not_found\">Seiful nu a fost găsit, se pornește configurarea…</string>\n    <string name=\"copied\">Copiat</string>\n    <string name=\"errors_copied\">Erori copiate în clipboard</string>\n    <string name=\"version_copied\">Versiune copiată în clipboard</string>\n    <string name=\"error_required_field\">Acest câmp este obligatoriu</string>\n    <string name=\"error_occurred\">A apărut o eroare</string>\n    <string name=\"decryption_error\">A apărut o eroare în timpul deblocării seifului</string>\n    <string name=\"decryption_corrupt_error\">A apărut o eroare în timp ce se încerca deblocarea seiful. Seiful poate fi corupt.</string>\n    <string name=\"saving_error\">A apărut o eroare în timpul salvării seifului</string>\n    <string name=\"vault_init_error\">A apărut o eroare în timpul inițializării seifului</string>\n    <string name=\"vault_load_error\">A apărut o eroare la încărcarea seifului din stocare</string>\n    <string name=\"biometric_decrypt_error\">A apărut o eroare în timp ce se încerca decriptarea seifului cu autentificarea biometrică. Acest lucru se întâmplă de obicei numai dacă setările de securitate ale dispozitivului au fost modificate. Te rugăm să deblochezi seiful cu parola și să reconfigurezi autentificarea biometrică în setările Aegis.</string>\n    <string name=\"biometric_init_error\">A apărut o eroare în timp ce se încerca pregătirea autentificării biometrice. Acest lucru se întâmplă de obicei numai dacă setările de securitate ale dispozitivului dvs. au fost modificate. Te rugăm să deblochezi seiful cu parola și să reconfigurezi autentificarea biometrică în setările Aegis.</string>\n    <string name=\"disable_encryption\">Dezactivare criptare</string>\n    <string name=\"disable_encryption_description\">Ești sigur că dorești să dezactivezi criptarea? Aceasta va face ca seiful să fie stocat în text simplu. <b>Copiile de rezervă automate vor fi de asemenea dezactivate</b>.</string>\n    <string name=\"enable_encryption_error\">A apărut o eroare la activarea criptării</string>\n    <string name=\"disable_encryption_error\">A apărut o eroare la dezactivarea criptării</string>\n    <string name=\"backup_successful\">Copia de rezervă a fost creată cu succes</string>\n    <string name=\"backup_error\">A apărut o eroare în timpul creării unei copii de rezervă</string>\n    <string name=\"backup_status_success\">Cea mai recentă copie de rezervă a reușit: %s</string>\n    <string name=\"backup_status_failed\">Cea mai recentă copie de rezervă a eșuat: %s</string>\n    <string name=\"backup_status_none\">Nu au fost generate copii de rezervă</string>\n    <string name=\"backup_warning_password\">Copiile de rezervă sunt criptate folosind o parolă separată configurată în setările de securitate</string>\n    <string name=\"documentsui_error\">DocumentsUI pare să lipsească de pe dispozitivul tău. Aceasta este o componentă de sistem importantă, necesară pentru selectarea și crearea documentelor. Dacă ai folosit o unealtă pentru a &quot;debloata&quot; dispozitivul tău, este posibil să fi șters-o din greșeală și să trebuiască să o reinstalezi.</string>\n    <string name=\"icon_pack_import_error\">S-a produs o eroare în timpul importării unui pachet de pictograme</string>\n    <string name=\"icon_pack_import_exists_error\">Pachetul de pictograme pe care încercați să îl importați există deja. Doriți să îl suprascrieți?</string>\n    <string name=\"icon_pack_delete_error\">A apărut o eroare în timp ce se încerca ștergerea unui pachet de pictograme</string>\n    <plurals name=\"icon_pack_info\">\n        <item quantity=\"one\">Pictogramă %d</item>\n        <item quantity=\"few\">Pictograme %d</item>\n        <item quantity=\"other\">%d pictograme</item>\n    </plurals>\n    <string name=\"icon_custom\">Personalizat</string>\n    <string name=\"permission_denied\">Permisiune refuzată</string>\n    <string name=\"andotp_new_format\">Format nou (v0.6.3 sau mai nou) </string>\n    <string name=\"andotp_old_format\">Format vechi (v0.6.2 sau mai vechi) </string>\n    <string name=\"choose_andotp_importer\">Ce format are fişierul de rezervă din andOTP?</string>\n    <string name=\"choose_totpauth_importer\">Este această copie de rezervă a autentificatorului TOTP criptată cu o parolă?</string>\n    <string name=\"choose_application\">Selectează aplicația din care dorești să imporți</string>\n    <string name=\"choose_theme\">Selectează tema dorită</string>\n    <string name=\"choose_account_name_position\">Selectați poziția dorită a numelui de cont</string>\n    <string name=\"choose_view_mode\">Selectează modul de vizualizare dorit</string>\n    <string name=\"choose_copy_behavior\">Selectați comportamentul dorit la copiere</string>\n    <string name=\"parsing_file_error\">A apărut o eroare în timpul analizării fișierului</string>\n    <string name=\"file_not_found\">Eroare: Fișierul nu a fost găsit</string>\n    <string name=\"reading_file_error\">A apărut o eroare în timpul citirii fișierului</string>\n    <string name=\"app_lookup_error\">Eroare: Aplicația nu este instalată</string>\n    <string name=\"app_version_error\">Versiunea %s care este instalată nu este suportată. Versiunile recente au început criptarea unora dintre fișierele din directorul de stocare internă, Aegis devenind incapabil de a accesa informațiile de care are nevoie pentru import. Este posibil ca încercarea de a importa să ducă la o eroare. Doriţi să continuaţi oricum?</string>\n    <string name=\"root_error\">Eroare: nu se poate obține acces root</string>\n    <plurals name=\"imported_entries_count\">\n        <item quantity=\"one\">Importată %d intrare</item>\n        <item quantity=\"few\">Importate %d intrare</item>\n        <item quantity=\"other\">Importate %d intrări</item>\n    </plurals>\n    <plurals name=\"entries_shown\">\n        <item quantity=\"one\">Se afișează %d intrare</item>\n        <item quantity=\"few\">Se afișează %d intrări</item>\n        <item quantity=\"other\">Se afișează %d de intrări</item>\n    </plurals>\n    <string name=\"intro_import_error_title\">A apărut o eroare în timpul importării seifului</string>\n    <string name=\"import_error_title\">Una sau mai multe erori au apărut în timpul importului</string>\n    <string name=\"exporting_vault_error\">A apărut o eroare în timpul exportării seifului</string>\n    <string name=\"exported_vault\">Seiful a fost exportat</string>\n    <string name=\"encryption_set_password_error\">A aparut o eroare la setarea parolei.</string>\n    <string name=\"encryption_enable_biometrics_error\">A apărut o eroare în timp ce se încerca activarea deblocării biometrice. Unele dispozitive au implementări slabe ale autentificării biometrice şi este probabil ca aceasta să fie una dintre ele. Consideră comutarea la o configurație exclusiv parolă.</string>\n    <string name=\"no_cameras_available\">Nu sunt camere disponibile</string>\n    <string name=\"read_qr_error\">A apărut o eroare în timp ce se încerca citirea codului QR</string>\n    <string name=\"read_qr_error_phonefactor\">Aegis nu este compatibil cu algoritmul 2FA brevetat al Microsoft. Te rugăm să selectezi \\\"Configurare aplicație fără notificări\\\" la configurarea 2FA în Office 365.</string>\n    <string name=\"partial_google_auth_import\">S-a detectat exportul incomplet a datelor din autentificatorul Google</string>\n    <string name=\"partial_google_auth_import_warning\">Unele coduri QR lipsesc din fișerul importat. Următoarele coduri nu au fost găsite:\\n\\n<b>%s</b>\\n\\nPuteţi continua importul acestui fișier parţial, dar vă recomandăm să încercaţi din nou cu toate codurile QR pentru a nu risca pierderea niciunui token.</string>\n    <string name=\"missing_qr_code_descriptor\">• codul QR %d</string>\n    <string name=\"import_google_auth_failure\">Importarea din Google Authenticator a eșuat</string>\n    <string name=\"unrelated_google_auth_batches_error\">Exportul conține informații pentru un calup neasociat. Încercați să importați câte un calup pe rând.</string>\n    <string name=\"no_tokens_can_be_imported\">Nu se pot importa token-uri drept rezultat</string>\n    <string name=\"unlocking_vault\">Deblocarea seifului</string>\n    <string name=\"rename_group\">Redenumește grupul</string>\n    <string name=\"no_group_selection\">În cazul în care o intrare nu face parte din niciun grup, aceasta poate fi găsită în categoria „Niciun grup”.</string>\n    <string name=\"remove_group\">Elimină grupul</string>\n    <string name=\"remove_group_description\">Ești sigur că dorești să ștergi acest grup? Intrările din acest grup vor comuta automat la \\'Niciun grup\\'.</string>\n    <string name=\"remove_unused_groups\">Ștergeți grupurile neutilizate</string>\n    <string name=\"remove_unused_groups_description\">Sunteţi sigur că doriţi să ştergeţi toate grupurile care nu sunt atribuite unei intrări?</string>\n    <string name=\"remove_icon_pack\">Ștergeți pachetul de pictograme</string>\n    <string name=\"remove_icon_pack_description\">Sunteţi sigur că doriţi să ştergeţi acest pachet de pictograme? Intrările care folosesc pictograme din acest pachet nu vor fi afectate.</string>\n    <string name=\"details\">Detalii</string>\n    <string name=\"show_error_details\">Arată detaliile erorii</string>\n    <string name=\"lock\">Blocare</string>\n    <string name=\"name\">Nume</string>\n    <string name=\"no_group\">Niciun grup</string>\n    <string name=\"sort\" comment=\"Title of the Sort button in the top action bar of the main view\">Sortează</string>\n    <string name=\"sort_alphabetically\">Emitent (A - Z)</string>\n    <string name=\"sort_alphabetically_reverse\">Emitent (Z - A)</string>\n    <string name=\"sort_alphabetically_name\">Cont (A - Z)</string>\n    <string name=\"sort_alphabetically_name_reverse\">Cont (Z - A)</string>\n    <string name=\"sort_usage_count\">Numărul de utilizări</string>\n    <string name=\"sort_last_used\">Utilizat ultima dată</string>\n    <string name=\"sort_custom\">Personalizat</string>\n    <string name=\"last_used\">Utilizat ultima dată</string>\n    <string name=\"last_used_never\">niciodată</string>\n    <string name=\"new_group\">Grup nou…</string>\n    <string name=\"group\">Grup</string>\n    <string name=\"group_name_hint\">Numele grupului</string>\n    <string name=\"preference_manage_groups\">Editează grupuri</string>\n    <string name=\"preference_manage_groups_summary\">Gestionează și șterge grupurile tale aici</string>\n    <string name=\"preference_reset_usage_count\">Resetează numărul de utilizări</string>\n    <string name=\"preference_reset_usage_count_summary\">Resetează numărul de utilizări al fiecărei intrări din seiful tău</string>\n    <string name=\"preference_reset_usage_count_dialog\">Sunteţi sigur că doriţi să setaţi numărul de utilizări pentru fiecare intrare din seif la 0?</string>\n    <string name=\"note\" comment=\"Users can add a note to an entry\">Notă</string>\n    <string name=\"clear\">Șterge</string>\n    <string name=\"dialog_duplicate_entry_title\" comment=\"'Duplicate' is a noun here\">Intrare duplicat</string>\n    <string name=\"dialog_duplicate_entry_message\">Această intrare are același nume și emitent ca una sau mai multe intrări existente. Cum ați dori să continuați?</string>\n    <string name=\"dialog_duplicate_entry_overwrite_title\">Rescrie intrarea/intrările existente</string>\n    <string name=\"dialog_duplicate_entry_overwrite_subtitle\">Înlocuiţi intrarea sau intrările existente cu cea nouă. Această acţiune nu poate fi anulată</string>\n    <string name=\"dialog_duplicate_entry_suffix_title\">Adaugă sufix</string>\n    <string name=\"dialog_duplicate_entry_suffix_subtitle\">Adaugă un sufix la numele acestei noi intrări. Noul nume va fi: %s</string>\n    <string name=\"dialog_duplicate_entry_cancel_title\">Anulează salvarea</string>\n    <string name=\"dialog_duplicate_entry_cancel_subtitle\">Vă permite să editaţi intrarea înainte de a încerca să o salvaţi din nou</string>\n    <string name=\"dialog_duplicate_entry_overwrite_dialog_title\">Confirmă ștergerea</string>\n    <string name=\"pref_highlight_entry_title\">Evidențiază simbolurile când apăsați</string>\n    <string name=\"pref_highlight_entry_summary\">Fă token-urile mai ușor să se distingă între ele prin evidențierea lor temporară atunci când sunt apăsate</string>\n    <string name=\"pref_groups_multiselect_title\">Grupuri multiple</string>\n    <string name=\"pref_groups_multiselect_summary\">Permite selecția mai multor grupuri în același timp</string>\n    <string name=\"pref_minimize_on_copy_title\">Minimizează după copiere</string>\n    <string name=\"pref_minimize_on_copy_summary\">Minimizează aplicația după copierea unui token</string>\n    <string name=\"pref_copy_behavior_title\">Copiați tokenul în clipboard</string>\n    <string name=\"pref_search_behavior_title\">Mod de căutare</string>\n    <string name=\"pref_pause_entry_title\">Îngheață jetoanele când sunt apăsate</string>\n    <string name=\"pref_pause_entry_summary\">Oprește reîmprospătarea automată a jetoanelor prin apăsarea lor. Token-urile nu se vor actualiza atâta timp cât sunt evidențiate. Necesită \\\"Evidențierea tokenurilor atunci când sunt apasate\\\" sau \\\"Atinge pentru a arăta\\\".</string>\n    <string name=\"pin_keyboard_description\">Introdu parola pentru a activa tastatura PIN. Reține că aceasta funcționează doar dacă parola constă doar din numere</string>\n    <string name=\"pin_keyboard_error\">Eroare la activarea tastaturii PIN</string>\n    <string name=\"pin_keyboard_error_description\">Nu este posibil să setați tastatura PIN. Parola ta trebuie să conțină doar numere.</string>\n    <string name=\"pin_keyboard_disabled\">Parola a fost schimbată. Tastatura PIN nu va mai fi afișată.</string>\n    <string name=\"selected\">Selectat</string>\n    <string name=\"dark_theme_title\">Temă întunecată</string>\n    <string name=\"light_theme_title\">Temă luminoasă</string>\n    <string name=\"amoled_theme_title\">Temă AMOLED</string>\n    <string name=\"system_theme_title\">Setată de economisirea bateriei</string>\n    <string name=\"system_amoled_theme_title\">Setată de economisirea bateriei (AMOLED)</string>\n    <string name=\"normal_viewmode_title\">Normal</string>\n    <string name=\"compact_mode_title\">Compact</string>\n    <string name=\"small_mode_title\">Mic</string>\n    <string name=\"tiles_mode_title\">Tiles</string>\n    <string name=\"unknown_issuer\">Emitent necunoscut</string>\n    <string name=\"unknown_account_name\">Nume de cont necunoscut</string>\n    <plurals name=\"import_error_dialog\">\n        <item quantity=\"one\">Aegis nu a putut importa tokenul %d. Acest token va fi omis. Apasă pe \\\"detalii\\\" pentru a vedea mai multe informații despre erori.</item>\n        <item quantity=\"few\">Aegis nu a putut importa tokenurile %d. Aceste tokenuri vor fi omise. Apasă pe \\'detalii\\' pentru a vedea mai multe informații despre erori.</item>\n        <item quantity=\"other\">Aegis nu a putut importa tokenurile %d. Aceste tokenuri vor fi omise. Apasă pe \\'detalii\\' pentru a vedea mai multe informații despre erori.</item>\n    </plurals>\n    <string name=\"unable_to_process_deeplink\">Nu se poate procesa link-ul</string>\n    <string name=\"unable_to_read_qrcode_file\">Nu se poate citi și procesa codul QR din fișierul: %s.</string>\n    <string name=\"unable_to_process_shared_text\">Imposibil de procesat textul partajat ca un cod OTP</string>\n    <string name=\"unable_to_read_qrcode_files\">Nu a putut fi citită și procesă unele dintre QR code-urile. Numai întrările %1$d/%2$d vor fi importate.</string>\n    <string name=\"unable_to_generate_qrcode\">Nu se poate genera codul QR</string>\n    <string name=\"select_picture\">Selectare imagine</string>\n    <string name=\"select_icon\">Selectare pictogramă</string>\n    <string name=\"tile_open_vault\" comment=\"label for a quick settings tile that opens the app when tapped\">Deschide seif</string>\n    <string name=\"tile_open_scanner\" comment=\"label for a quick settings tile that opens the QR code scanner when tapped\">Deschide scanerul</string>\n    <string name=\"toggle_checkboxes\">Comută casetele de selectare</string>\n    <string name=\"search\">Căutare</string>\n    <string name=\"channel_name_lock_status\">Stare blocare</string>\n    <string name=\"channel_description_lock_status\">Aegis poate crea o notificare persistentă pentru a te notifica când seiful este blocat</string>\n    <string name=\"vault_unlocked_state\">Seiful este deblocat. Atinge aici pentru a bloca.</string>\n    <string name=\"version\">Versiune</string>\n    <string name=\"changelog\">Istoric modificări</string>\n    <string name=\"whats_new\">Ce este nou</string>\n    <string name=\"github_description\">Cod sursă, probleme și informații</string>\n    <string name=\"license\">Licență</string>\n    <string name=\"license_description\">Aegis Authenticator este licențiat sub licență GPLv3</string>\n    <string name=\"third_party_licenses\">Licențe terțe</string>\n    <string name=\"third_party_licenses_description\">Licenţele bibliotecilor terţe pe care Aegis le utilizează</string>\n    <string name=\"country_netherlands\">Olanda</string>\n    <string name=\"email_us\">Scrie un e-mail</string>\n    <string name=\"visit_website\">Vizitează site-ul nostru web</string>\n    <string name=\"about_support\">Asistență</string>\n    <string name=\"support_rate\">Evaluează</string>\n    <string name=\"support_rate_description\">Sprijiniți-ne lăsând o recenzie în Google Play</string>\n    <string name=\"webview_error\">Acest dispozitiv nu acceptă vizualizare web, care este necesară pentru a vizualiza jurnalul modificărilor și licența. Îi lipsește o componentă de sistem.</string>\n    <string name=\"email\">Email</string>\n    <string name=\"time_sync_warning_title\">Sincronizare automată a timpului</string>\n    <string name=\"time_sync_warning_message\">Aegis-ul se bazează pe un sistem de timp pentru a fi sincronizat pentru a genera codurile corecte. O abatere de doar câteva secunde ar putea duce la coduri incorecte. Se pare că dispozitivul tău nu este configurat pentru a sincroniza automat timpul. Dorești să faci acest lucru acum?</string>\n    <string name=\"time_sync_warning_disable\">Nu mă mai avertiza. Ştiu ce fac.</string>\n    <string name=\"google_qr_export_unrelated\">Cod QR negăsit găsit. Încearcă să repornești scanerul.</string>\n    <string name=\"google_qr_export_unexpected\">Așteptat QR code #%1$d, dar scanat #%2$d totuși</string>\n    <string name=\"backup_error_bar_message\"><b>Copia de rezervă a seifului a eșuat recent</b></string>\n    <string name=\"backup_error_dialog_details\" comment=\"The first parameter is the type of backup (e.g. built-in or Android backup). The second parameter is an elapsed time in the style of 'x seconds/minutes/days ago'.\">O tentativă recentă de backup de vault utilizând %1$s a eșuată deoarece un erori a întâmplat. Backup-ul a încercat %2$s. Va rog verificați setările backup-ului tale pentru a asigura că backup-urile pot completează cu succes.    </string>\n    <string name=\"backup_permission_error_dialog_details\" comment=\"The first parameter is the type of backup (e.g. built-in or Android backup). The second parameter is an elapsed time in the style of 'x seconds/minutes/days ago'.\">O tentativă recentă de backup de vault utilizând %1$s a eșuată deoarece Aegis nu are permisiunea a scrie la destinația backup-ului. Backup-ul a încercat %2$s. Acest erori poate întâmplă dacă aveți recent restaurat Aegis dintr-un backup. Vă rog reconfigurați destinația backup-ului.    </string>\n    <string name=\"backup_system_builtin\">Copiile de siguranță încorporate în aplicație</string>\n    <string name=\"backup_system_android\">Sistemul de backup în cloud Android</string>\n    <string name=\"backup_reminder_bar_message_with_latest\" comment=\"The parameter is an elapsed time in the style of 'x seconds/minutes/days ago'\">        Ultima copie de rezervă este învechită (%s)\n    </string>\n    <string name=\"backup_reminder_bar_message\">        Modificările nu sunt salvate\n    </string>\n    <string name=\"backup_reminder_bar_dialog_title\">Modificările nu sunt salvate</string>\n    <string name=\"backup_reminder_bar_dialog_summary\">        Modificările recente în seif nu au fost încă salvate. Este important să faci copii de rezervă regulate pentru a preveni pierderea accesului la conturile tale. Te rugăm să luați în considerare configurarea copiilor de rezervă automate în meniul de setări.\n    </string>\n    <string name=\"backup_reminder_bar_dialog_accept\">Configurare backup-uri</string>\n    <string name=\"backup_plaintext_export_warning\"><b>Seiful a fost exportat recent în text simplu</b></string>\n    <string name=\"pref_show_plaintext_warning_hint\">Nu mai arăta acest avertisment</string>\n    <string name=\"backup_plaintext_warning_explanation\">Această avertizare este afișată deoarece ați exportat recent o copie necriptată a seifului. Pentru a menține securitatea token-urilor, vă recomandăm să ștergeți acest fișier o dată ce nu mai este necesar.</string>\n    <string name=\"switch_camera\">Comută camera foto</string>\n    <string name=\"empty_list\">Nu există coduri care să fie afișate. Începe să adaugi intrări apăsând pe semnul plus în colțul din dreapta jos</string>\n    <string name=\"empty_list_title\">Nicio intrare găsită</string>\n    <string name=\"empty_group_list\">Nu există grupuri care să fie afișate. Adaugă grupuri în ecranul de editare al unei intrări</string>\n    <string name=\"empty_group_list_title\">Niciun grup găsit</string>\n    <string name=\"no_icon_packs\">Nu au fost importate încă pachete de pictograme. Apăsați pe semnul plus pentru a importa unul. Sfat: încercați <a href=\"https://aegis-icons.github.io\">aegis-icon-uri</a>.</string>\n    <string name=\"no_icon_packs_title\">Niciun pachet de pictograme</string>\n    <string name=\"pick_icon\">Alege o pictogramă</string>\n    <string name=\"uncategorized\">Necategorizat</string>\n    <string name=\"done\">Realizat</string>\n    <plurals name=\"qr_count\">\n        <item quantity=\"one\">%d / %d cod QR</item>\n        <item quantity=\"few\">%d / %d coduri QR</item>\n        <item quantity=\"other\">%d / %d de coduri QR</item>\n    </plurals>\n    <string name=\"next\">Următorul</string>\n    <string name=\"previous\">Anteriorul</string>\n    <string name=\"copy_uri\">Copiere URL</string>\n    <string name=\"unable_to_copy_uri_to_clipboard\">Nu se poate copia în clipboard</string>\n    <string name=\"uri_copied_to_clipboard\">URI copiat în clipboard</string>\n    <string name=\"transfer_entry_description\">Scanează acest cod QR cu aplicația de autentificare pe care dorești să o transferi</string>\n    <string name=\"google_auth_compatible_transfer_description\">Scanați aceste coduri QR cu Aegis sau Google Authenticator.\\n\\nDatorită limitărilor aplicației Google Authenticator, numai token-urile TOTP &amp; HOTP care folosesc SHA1 și produc coduri de 6 cifre sunt incluse</string>\n    <string name=\"password_strength_very_weak\">Foarte slabă</string>\n    <string name=\"password_strength_weak\">Slabă</string>\n    <string name=\"password_strength_fair\">Acceptabilă</string>\n    <string name=\"password_strength_good\">Bună</string>\n    <string name=\"password_strength_strong\">Puternică</string>\n    <string name=\"password_strength_unknown\">Parola este prea lungă pentru ai analiza eficacitatea</string>\n    <string name=\"pref_pin_keyboard_title\">Utilizează tastatura PIN pe ecranul de blocare</string>\n    <string name=\"pref_pin_keyboard_summary\">Activează dacă dorești să activezi tastatura PIN pe ecranul de blocare. Acest lucru funcționează numai pentru parolele numerice</string>\n    <string name=\"title_activity_preferences\">Setări</string>\n    <string name=\"title_activity_manage_groups\">Gestionare grupuri</string>\n    <string name=\"title_activity_transfer\">Transfer intrare</string>\n    <string name=\"title_activity_about\">Despre</string>\n    <string name=\"title_activity_edit_entry\">Editați intrarea</string>\n    <string name=\"title_activity_scan_qr\">Scanează cod QR</string>\n    <string name=\"title_activity_import_entries\">Importă intrări</string>\n    <string name=\"title_activity_assign_icons\">Atribuie pictograme</string>\n    <string name=\"title_activity_licenses\">Licențe terțe</string>\n    <string name=\"dialog_wipe_entries_title\">Șterge intrările</string>\n    <string name=\"dialog_wipe_entries_message\">Seiful tău conține deja intrări. Dorești să ştergi aceste intrări înainte de a importa acest fişier?\\n\\n<b>Făcând acest lucru, vei pierde permanent accesul la intrările existente din seif.</b></string>\n    <string name=\"dialog_wipe_entries_checkbox\">Şterge conţinutul seifului</string>\n    <string name=\"panic_trigger_ignore_toast\">Aegis a primit un declanșator de panică, dar setarea este dezactivată, se ignoră</string>\n    <string name=\"pref_panic_trigger_title\">Șterge seiful la declanșatorul de panică</string>\n    <string name=\"pref_panic_trigger_summary\">Șterge seiful atunci când un declanșator de panică este primit de la Ripple</string>\n    <string name=\"import_vault\">Importă seiful Aegis</string>\n    <string name=\"import_vault_hint\">Doriți să importați dintr-o altă aplicație 2FA? Finalizați configurarea mai întâi și apoi mergeți la meniul de setări.</string>\n    <plurals name=\"import_duplicate_toast\">\n        <item quantity=\"one\">Am detectat %d potențial duplicat ce a rămas nebifat. Te rugăm să revizuiești lista intrărilor.</item>\n        <item quantity=\"few\">Am detectat %d potențiale duplicate ce au rămas nebifate. Te rugăm să revizuiești lista intrărilor.</item>\n        <item quantity=\"other\">Am detectat %d de potențiale duplicate ce au rămas nebifate. Te rugăm să revizuiești lista intrărilor.</item>\n    </plurals>\n    <string name=\"importer_help_2fas\">Furnizează un fișier de backup 2FAS autentificator.</string>\n    <string name=\"importer_help_aegis\">Furnizează un fișier export/copie de rezervă Aegis.</string>\n    <string name=\"importer_help_authenticator_plus\">Furnizează un fişier de export de Autentificator Plus obţinut prin <b>Setări -&gt; Copie de rezervă &amp; Restore -&gt; Export ca Text şi HTML</b>.</string>\n    <string name=\"importer_help_authy\">Furnizează o copie a <b>/data/data/com.authy.authy/shared_prefs/com.authy.storage.tokens.authenticator.xml</b>, localizată în directorul de stocare internă al Authy.</string>\n    <string name=\"importer_help_andotp\">Furnizați un fişier de export/copie de rezervă andOTP.</string>\n    <string name=\"importer_help_bitwarden\">Furnizează un fișier de backup din aplicația Bitwarden. Fișierele criptate nu sunt suportate.</string>\n    <string name=\"importer_help_battle_net_authenticator\">Furnizează o copie a <b>/data/data/com.blizzard.messenger/shared_prefs/com.blizzard.messenger.authenticator_preferences.xml</b>, localizată în folderul din memoria internă al Battle.net Authenticator.</string>\n    <string name=\"importer_help_duo\">Furnizează o copie a <b>/data/data/com.duosecurity.duomobile/files/duokit/accounts.json</b>, localizată în dosarul din memoria internă al DUO.</string>\n    <string name=\"importer_help_ente_auth\">Aprovizionați un fișier de export Ente Auth. Actualmente numai fișierului criptate sunt suportate.</string>\n    <string name=\"importer_help_freeotp\">FreeOTP 2: Furnizează o copie de rezervă.\\nFreeOTP 1.x: Furnizează o copie a <b>/data/org.fedorahosted.freeotp/shared_prefs/tokens.xml</b>, localizată în directorul FreeOTP din stocarea internă.</string>\n    <string name=\"importer_help_freeotp_plus\">Furnizează un fișier de export FreeOTP+.</string>\n    <string name=\"importer_warning_title_freeotp2\">Compatibilitate FreeOTP 2</string>\n    <string name=\"importer_warning_message_freeotp2\">În FreeOTP 2 există o serie de probleme care pot duce la copii de rezervă corupte. Aegis va încerca să salveze cât mai multe intrări, dar este posibil ca unele sau chiar toate să nu poată fi importe.</string>\n    <string name=\"importer_help_google_authenticator\"><b>Doar fișierele de la Google Authenticator v5.10 și înainte sunt acceptate</b>.\\n\\nFurnizează o copie a <b>/data/data/com. oogle.android.apps.authenticator2/databases/databases</b>, situat în directorul de stocare internă al Google Authenticator.</string>\n    <string name=\"importer_help_microsoft_authenticator\">Furnizează o copie a <b>/data/data/com.azure.authenticator/databases/PhoneFactor</b>, localizată în directorul de stocare internă al Microsoft Authenticator.</string>\n    <string name=\"importer_help_plain_text\">Furnizează un fișier text simplu cu un URL de autentificare Google pe fiecare linie.</string>\n    <string name=\"importer_help_steam\"><b>Versiunile Steam v3.0 sau mai mari nu sunt suportate</b>. Furnizează o copie a <b>data/data/com.valvesoftware.android.steam.community/files/Steamguard-*.json</b>, localizat în dosarul intern Steam.</string>\n    <string name=\"importer_help_totp_authenticator\">Furnizează un fișier de export Autentificator TOTP.</string>\n    <string name=\"importer_help_winauth\">Furnizează un fișier de export WinAuth.</string>\n    <string name=\"import_assign_icons_dialog_title\">Atribuie pictograme</string>\n    <string name=\"import_assign_icons_dialog_text\">Dorești să atribui pictograme intrărilor importate?</string>\n    <string name=\"importer_encrypted_exception_google_authenticator\">Informațiile criptate au fost omise: %s</string>\n    <string name=\"importer_help_direct\">Importă intrările direct din %s. Aceasta necesită ca aplicația să fie instalată pe acest dispozitiv și ca accesul root să fie acordat Aegis.</string>\n    <string name=\"groups\">Grupuri</string>\n    <string name=\"pref_focus_search\">Focalizare pe căsuţa de căutare la pornirea aplicației</string>\n    <string name=\"pref_focus_search_summary\">Focalizați căutarea imediat după deschiderea aplicației.</string>\n    <string name=\"pref_grouping_halves\">Jumătăți</string>\n    <string name=\"pref_grouping_none\">Fara grupare</string>\n    <string name=\"pref_grouping_size_two\">Grupuri a câte 2</string>\n    <string name=\"pref_grouping_size_three\">Grupuri a câte 3</string>\n    <string name=\"pref_grouping_size_four\">Grupuri a câte 4</string>\n    <string name=\"pref_copy_behavior_never\">Niciodată</string>\n    <string name=\"pref_copy_behavior_single_tap\">O singură atingere</string>\n    <string name=\"pref_copy_behavior_double_tap\">Atingere dublă</string>\n    <string name=\"pref_account_name_position_hidden\">Ascuns</string>\n    <string name=\"pref_account_name_position_end\">Alături de emitent</string>\n    <string name=\"pref_account_name_position_below\">Sub emitent</string>\n    <plurals name=\"time_elapsed_seconds\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"one\">%d secundă în urmă</item>\n        <item quantity=\"few\">%d secunde în urmă</item>\n        <item quantity=\"other\">%d de secunde în urmă</item>\n    </plurals>\n    <plurals name=\"time_elapsed_minutes\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"one\">%d minut în urmă</item>\n        <item quantity=\"few\">%d minute în urmă</item>\n        <item quantity=\"other\">%d de minute în urmă</item>\n    </plurals>\n    <plurals name=\"time_elapsed_hours\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"one\">%d oră în urmă</item>\n        <item quantity=\"few\">Acum %d ore</item>\n        <item quantity=\"other\">Acum %d de ore</item>\n    </plurals>\n    <plurals name=\"time_elapsed_days\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"one\">%d zi în urmă</item>\n        <item quantity=\"few\">%d zile în urmă</item>\n        <item quantity=\"other\">%d de zile în urmă</item>\n    </plurals>\n    <plurals name=\"time_elapsed_years\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"one\">acum %d an</item>\n        <item quantity=\"few\">acum %d ani</item>\n        <item quantity=\"other\">acum %d de ani</item>\n    </plurals>\n    <plurals name=\"dropdown_checkboxes_default_count\">\n        <item quantity=\"one\">%d element selectat</item>\n        <item quantity=\"few\">%d elemente selectate</item>\n        <item quantity=\"other\">%d de elemente selectate</item>\n    </plurals>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-ro-rRO-v29/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources></resources>\n"
  },
  {
    "path": "app/src/main/res/values-ru-rRU/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources xmlns:tools=\"http://schemas.android.com/tools\">\n    <string name=\"action_settings\">Настройки</string>\n    <string name=\"action_about\">О программе</string>\n    <string name=\"action_delete\">Удалить</string>\n    <string name=\"action_transfer\">Передача</string>\n    <string name=\"action_edit_icon\">Изменить значок</string>\n    <string name=\"action_reset_usage_count\">Сбросить счётчик использований</string>\n    <string name=\"action_reset_usage_count_dialog\">Установить количество использований для этой записи на 0?</string>\n    <string name=\"action_default_icon\">Восстановить значок по умолчанию</string>\n    <string name=\"discard\">Отмена</string>\n    <string name=\"save\">Сохранить</string>\n    <string name=\"all\">Все</string>\n    <string name=\"issuer\">Эмитент</string>\n    <string name=\"yandex_pin\">PIN-код (4–16 цифр)</string>\n    <string name=\"motp_pin\">PIN-код (4 цифры)</string>\n    <string name=\"suggested\">Рекомендуется</string>\n    <string name=\"usage_count\">Счётчик использований</string>\n    <string name=\"warning\">Предупреждение</string>\n    <string name=\"pref_cat_appearance_app\">Приложение</string>\n    <string name=\"pref_cat_appearance_entries\">Записи</string>\n    <string name=\"pref_cat_backups_android\">Android</string>\n    <string name=\"pref_cat_backups_auto\">Автоматическое резервное копирование</string>\n    <string name=\"pref_section_behavior_title\">Поведение</string>\n    <string name=\"pref_section_behavior_summary\">Настройка поведения при взаимодействии со списком записей.</string>\n    <string name=\"pref_section_appearance_title\">Внешний вид</string>\n    <string name=\"pref_section_appearance_summary\">Настройка темы, языка и других параметров, влияющих на внешний вид приложения.</string>\n    <string name=\"pref_section_security_title\">Безопасность</string>\n    <string name=\"pref_section_security_summary\">Настройка шифрования, биометрической разблокировки, автоматической блокировки и других параметров безопасности.</string>\n    <string name=\"pref_section_import_export_title\">Импорт и экспорт</string>\n    <string name=\"pref_section_import_export_summary\">Импорт резервных копий Aegis или других приложений для аутентификации. Экспорт хранилища Aegis вручную.</string>\n    <string name=\"pref_section_audit_log_title\">Журнал событий</string>\n    <string name=\"pref_section_audit_log_summary\">Просмотр всех зарегистрированных важных событий, произошедших в приложении.</string>\n    <string name=\"pref_section_backups_title\">Резервные копии</string>\n    <string name=\"pref_section_backups_summary\">Настройка автоматического резервного копирования в указанное место или включение в систему облачного резервного копирования Android.</string>\n    <string name=\"pref_section_icon_packs\">Наборы значков</string>\n    <string name=\"pref_section_icon_packs_summary\">Управление наборами значков</string>\n    <string name=\"pref_select_theme_title\">Тема</string>\n    <string name=\"pref_dynamic_colors_title\">Динамические цвета</string>\n    <string name=\"pref_dynamic_colors_summary\">Использовать наложение на основе цветов темы Android</string>\n    <string name=\"pref_view_mode_title\">Режим отображения</string>\n    <string name=\"pref_lang_title\">Язык</string>\n    <string name=\"pref_show_icons_title\">Показывать значки</string>\n    <string name=\"pref_show_icons_summary\">Показывать значки рядом с каждой записью</string>\n    <string name=\"pref_code_group_size_title\">Перегруппировка цифр кода</string>\n    <string name=\"pref_code_group_size_summary\">Выбор количества цифр для группировки кодов</string>\n    <string name=\"pref_account_name_position_title\">Показывать название учётной записи</string>\n    <string name=\"pref_show_next_code_title\">Показывать следующий код</string>\n    <string name=\"pref_show_next_code_summary\">Заранее вычислять и показывать следующий код</string>\n    <string name=\"pref_expiration_state_title\">Индикация окончания действия кодов</string>\n    <string name=\"pref_expiration_state_summary\">Изменять цвет и начинать мигание кодов, когда срок их действия истекает</string>\n    <string name=\"pref_expiration_state_fallback\">Изменять цвет кодов, когда срок их действия истекает</string>\n    <string name=\"pref_shared_issuer_account_name_title\">Показывать учётную запись только при необходимости</string>\n    <string name=\"pref_shared_issuer_account_name_summary\">Показывать названия учётных записей только в случае, если у них один эмитент. Названия других учётных записей не будут отображаться.</string>\n    <string name=\"pref_account_name_position_summary_override\">Эта настройка переопределяется плиточным режимом просмотра. Название учётной записи будет отображаться под эмитентом.</string>\n    <string name=\"pref_import_file_title\">Импорт из файла</string>\n    <string name=\"pref_import_file_summary\">Импорт ключей из файла</string>\n    <string name=\"pref_android_backups_title\">Облачное резервирование Android</string>\n    <string name=\"pref_android_backups_summary\">Разрешить системе облачного резервного копирования включать Aegis в свои резервные копии. Поддерживается только для зашифрованных хранилищ.</string>\n    <string name=\"pref_android_backups_hint\"><i>Резервное копирование между устройствами (D2D) всегда разрешено независимо от настройки выше</i></string>\n    <string name=\"pref_backups_title\">Автоматическое резервирование хранилища</string>\n    <string name=\"pref_backups_summary\">Автоматически создавать резервные копии хранилища на внешнем носителе при внесении изменений. Поддерживается только для зашифрованных хранилищ.</string>\n    <string name=\"pref_backups_reminder_title\">Напоминание о резервном копировании</string>\n    <string name=\"pref_backups_reminder_summary\">Показывать напоминание о необходимости создания резервной копии хранилища, если резервирование последних изменений ещё не выполнялось.</string>\n    <string name=\"pref_backups_reminder_dialog_title\">Отключить напоминание о резервном копировании</string>\n    <string name=\"pref_backups_reminder_dialog_summary\">Отключение этого напоминания означает, что Aegis не будет сообщать вам о наличии изменений, резервная копия которых ещё не создана. В результате вы рискуете потерять доступ к своим ключам. Вы уверены, что хотите отключить напоминание?</string>\n    <string name=\"pref_backups_versioning_strategy_title\">Стратегия резервного копирования</string>\n    <string name=\"pref_backups_versioning_strategy_keep_x_versions\">Несколько версий резервных копий</string>\n    <string name=\"pref_backups_versioning_strategy_single_backup\">Одна резервная копия</string>\n    <string name=\"pref_backups_versioning_strategy_single_backup_warning\">Выбранная стратегия резервного копирования ненадёжна и не рекомендуется. Один сбой при резервировании может привести к потере вашей единственной резервной копии.</string>\n    <string name=\"pref_backups_versioning_strategy_dialog_title\">Выберите стратегию резервирования</string>\n    <string name=\"pref_backups_location_title\">Расположение резервных копий</string>\n    <string name=\"pref_backups_location_summary\">Резервные копии будут храниться в</string>\n    <string name=\"pref_backup_location_summary\">Резервная копия будет храниться в</string>\n    <string name=\"pref_backups_trigger_title\">Создать резервную копию</string>\n    <string name=\"pref_backups_trigger_summary\">Создание резервной копии вручную</string>\n    <string name=\"pref_backups_versions_title\">Количество хранимых версий</string>\n    <string name=\"pref_backups_versions_infinite\">\\u221E</string>\n    <plurals name=\"pref_backups_versions_summary\">\n        <item quantity=\"one\">Хранить %1$d версию резервной копии</item>\n        <item quantity=\"few\">Хранить %1$d версии резервной копии</item>\n        <item quantity=\"many\">Хранить %1$d версий резервной копии</item>\n        <item quantity=\"other\">Хранить %1$d версий резервной копии</item>\n    </plurals>\n    <string name=\"pref_backups_versions_infinite_summary\">Не ограничивать количество версий резервных копий</string>\n    <string name=\"pref_import_app_title\">Импорт из приложения</string>\n    <string name=\"pref_import_app_summary\">Импорт ключей из другого приложения (требуются права суперпользователя)</string>\n    <string name=\"pref_export_title\">Экспорт в файл</string>\n    <string name=\"pref_export_summary\">Экспорт хранилища</string>\n    <string name=\"pref_password_reminder_title\">Напоминание о пароле</string>\n    <string name=\"pref_google_auth_export_title\">Экспорт в Google Authenticator</string>\n    <string name=\"pref_google_auth_export_descriptor\">Создание QR-кодов для экспорта, совместимых с Google Authenticator</string>\n    <string name=\"pref_google_auth_export_no_data\">Нет данных для экспорта</string>\n    <plurals name=\"pref_google_auth_export_incompatible_entries\">\n        <item quantity=\"one\">Пропущена %d несовместимая запись</item>\n        <item quantity=\"few\">Пропущены %d несовместимые записи</item>\n        <item quantity=\"many\">Пропущено %d несовместимых записей</item>\n        <item quantity=\"other\">Пропущено %d несовместимых записей</item>\n    </plurals>\n    <string name=\"pref_password_reminder_summary\">Показывать напоминание с просьбой ввести пароль, чтобы вы не забыли его: %s</string>\n    <string name=\"pref_password_reminder_summary_disabled\">Отключено</string>\n    <string name=\"pref_secure_screen_title\">Безопасность экрана</string>\n    <string name=\"pref_secure_screen_summary\">Блокировка снимков экрана и других попыток захвата экрана в приложении</string>\n    <string name=\"pref_tap_to_reveal_title\">Отображение по нажатию</string>\n    <string name=\"pref_tap_to_reveal_summary\">Коды будут скрыты по умолчанию и показаны только при нажатии на ключ</string>\n    <string name=\"pref_tap_to_reveal_time_title\">Задержка для отображения по нажатию</string>\n    <string name=\"pref_auto_lock_title\">Автоматическая блокировка</string>\n    <string name=\"pref_auto_lock_summary\">Когда %s</string>\n    <string name=\"pref_auto_lock_summary_disabled\">Отключено</string>\n    <string name=\"pref_auto_lock_prompt\">Автоматически блокировать Aegis, когда</string>\n    <string name=\"pref_auto_lock_type_back_button\">Нажата кнопка \\\"Назад\\\"</string>\n    <string name=\"pref_auto_lock_type_minimize\">Приложение свёрнуто</string>\n    <string name=\"pref_auto_lock_type_device_lock\">Устройство заблокировано</string>\n    <string name=\"pref_backup_password_category\">Резервирование и экспорт</string>\n    <string name=\"pref_backup_password_title\">Отдельные пароли для резервирования и экспорта</string>\n    <string name=\"pref_backup_password_summary\">Если включено, пароль, используемый для разблокировки приложения, не сможет быть использован для шифрования резервных копий и экспорта.</string>\n    <string name=\"pref_backup_password_change_title\">Изменить пароль для резервирования и экспорта</string>\n    <string name=\"pref_backup_password_change_summary\">Установить новый пароль, который будет использоваться для шифрования хранилища при резервном копировании и экспорте.</string>\n    <string name=\"pref_encryption_title\">Шифрование</string>\n    <string name=\"pref_encryption_summary\">Шифровать хранилище и разблокировать его с помощью пароля или биометрии</string>\n    <string name=\"pref_biometrics_title\">Биометрическая разблокировка</string>\n    <string name=\"pref_biometrics_summary\">Разрешить биометрическую аутентификацию для разблокировки хранилища</string>\n    <string name=\"pref_search_behavior_summary\">Поиск в: %s</string>\n    <string name=\"pref_search_behavior_prompt\">Поиск в любом из следующих полей</string>\n    <string name=\"pref_search_behavior_type_name\">Имя</string>\n    <string name=\"pref_search_behavior_type_issuer\">Эмитент</string>\n    <string name=\"pref_search_behavior_type_note\">Заметка</string>\n    <string name=\"pref_search_behavior_type_groups\">Группы</string>\n    <string name=\"pref_set_password_title\">Изменить пароль</string>\n    <string name=\"pref_set_password_summary\">Установить новый пароль, который вам понадобится, чтобы разблокировать хранилище</string>\n    <string name=\"no_events_title\">Нет записей о событиях</string>\n    <string name=\"no_events_description\">Приложение не зарегистрировало ни одного важного события</string>\n    <string name=\"event_title_vault_unlocked\">Хранилище разблокировано</string>\n    <string name=\"event_description_vault_unlocked\">Хранилище успешно разблокировано</string>\n    <string name=\"event_title_backup_created\">Резервирование выполнено</string>\n    <string name=\"event_description_backup_created\">Резервная копия хранилища успешно создана</string>\n    <string name=\"event_title_android_backup_created\">Резервирование Android выполнено</string>\n    <string name=\"event_description_android_backup_created\">Резервная копия хранилища успешно создана Android</string>\n    <string name=\"event_title_vault_exported\">Хранилище экспортировано</string>\n    <string name=\"event_description_vault_exported\">Копия хранилища экспортирована</string>\n    <string name=\"event_title_entry_shared\">Запись опубликована</string>\n    <string name=\"event_description_entry_shared\">К записи применена команда \\\"поделиться\\\"</string>\n    <string name=\"event_title_vault_unlock_failed_password\">Хранилище не разблокировано (пароль)</string>\n    <string name=\"event_description_vault_unlock_failed_password\">Попытка разблокировать хранилище с помощью пароля завершилась неудачно</string>\n    <string name=\"event_title_vault_unlock_failed_biometrics\">Хранилище не разблокировано (биометрия)</string>\n    <string name=\"event_description_vault_unlock_failed_biometrics\">Попытка разблокировать хранилище с помощью биометрии завершилась неудачно</string>\n    <string name=\"event_unknown\">Неизвестный тип события</string>\n    <string name=\"audit_log_entry_deleted\">(удалено)</string>\n    <string name=\"today_at_time\">Сегодня в %1$s</string>\n    <string name=\"day_of_week_at_time\">%1$s в %2$s</string>\n    <string name=\"export_encrypted\">Шифровать хранилище</string>\n    <string name=\"export_help\">Экспорт внутреннего хранилища Aegis. Выберите формат:</string>\n    <string name=\"export_warning_unencrypted\">Вы собираетесь экспортировать незашифрованную копию хранилища Aegis. <b>Не рекомендуется</b>.</string>\n    <string name=\"export_warning_password\">Экспортируемые данные шифруются с использованием отдельного пароля, указанного в разделе настроек «Безопасность».</string>\n    <string name=\"understand_risk_accept\">Я понимаю риск</string>\n    <string name=\"export_format_aegis\">Aegis (.JSON)</string>\n    <string name=\"export_format_google_auth_uri\">Текстовый файл (.TXT)</string>\n    <string name=\"export_format_html\">Веб-страница (.HTML)</string>\n    <string name=\"export_format_hint\">Формат экспорта</string>\n    <string name=\"export_all_groups\">Экспорт всех групп</string>\n    <string name=\"export_choose_groups\">Выберите группы для экспорта</string>\n    <plurals name=\"export_groups_selected_count\">\n        <item quantity=\"one\">%d группа выбрана</item>\n        <item quantity=\"few\">%d группы выбраны</item>\n        <item quantity=\"many\">%d групп выбрано</item>\n        <item quantity=\"other\">%d групп выбрано</item>\n    </plurals>\n    <string name=\"export_no_groups_selected\">Не выбрано групп для экспорта</string>\n    <string name=\"export_html_title\" comment=\"The title of an HTML export document\">Экспорт Aegis Authenticator</string>\n    <string name=\"choose_authentication_method\">Безопасность</string>\n    <string name=\"authentication_method_explanation\">Aegis — приложение двухфакторной аутентификации (2FA), ориентированное на безопасность. Ключи хранятся в хранилище, которое по желанию можно зашифровать с помощью пароля. Если злоумышленник получит зашифрованный файл хранилища, он не сможет получить доступ к содержимому без указания пароля.\\n\\nВыбран наиболее подходящий вариант для вашего устройства.</string>\n    <string name=\"authentication_method_none\">Нет</string>\n    <string name=\"authentication_method_none_description\">Хранилище не будет зашифровано, пароль для разблокировки не потребуется. <b>Не рекомендуется</b>.</string>\n    <string name=\"authentication_method_password\">Пароль</string>\n    <string name=\"authentication_method_password_description\">Для разблокировки хранилища необходим пароль.</string>\n    <string name=\"authentication_method_password_explanation\">Внимание: при утрате пароля вы навсегда потеряете доступ к своим ключам. Восстановить доступ к ним без пароля будет невозможно.</string>\n    <string name=\"authentication_method_biometrics\">Биометрия</string>\n    <string name=\"authentication_method_biometrics_description\">В дополнение к паролю, биометрические данные, зарегистрированные на этом устройстве, такие как отпечаток пальца или лицо, могут быть использованы для разблокировки хранилища.</string>\n    <string name=\"authentication\">Разблокировать хранилище</string>\n    <string name=\"authentication_multiline\" comment=\"The newline in the middle is used for aesthetic purposes\">Открыть\\nхранилище</string>\n    <string name=\"auth_use_biometrics\">Или нажмите здесь, чтобы использовать <font fgcolor=\"#FF0D86C1\">биометрию</font>.</string>\n    <string name=\"set_password\">Введите пароль</string>\n    <string name=\"set_group\">Введите название группы</string>\n    <string name=\"set_number\">Введите число</string>\n    <string name=\"set_password_confirm\">Подтвердите пароль</string>\n    <string name=\"invalid_password\">Неверный пароль</string>\n    <string name=\"invalidated_biometrics\">Обнаружено изменение настроек безопасности устройства. Перейдите в настройки Aegis и откройте раздел «Безопасность» → «Биометрическая разблокировка», где повторно добавьте свой отпечаток пальца.</string>\n    <string name=\"password_reminder\">Пожалуйста, введите свой пароль. Иногда такая просьба будет появляться, чтобы вы не забыли его.</string>\n    <string name=\"password_reminder_dialog_title\">Биометрическая разблокировка по умолчанию</string>\n    <string name=\"password_reminder_dialog_message\">Периодически будет предлагаться ввести пароль, чтобы убедиться, что вы его помните и не потеряете доступ к своему хранилищу. После однократного ввода пароля Aegis по умолчанию вернётся к биометрической разблокировке до тех пор, пока не наступит время очередного напоминания о пароле.</string>\n    <string name=\"password_reminder_freq_never\">Никогда</string>\n    <string name=\"password_reminder_freq_weekly\">Еженедельно</string>\n    <string name=\"password_reminder_freq_biweekly\">Раз в две недели</string>\n    <string name=\"password_reminder_freq_monthly\">Ежемесячно</string>\n    <string name=\"password_reminder_freq_quarterly\">Ежеквартально</string>\n    <string name=\"enter_password_2fas_message\">Похоже, эта резервная копия 2FAS зашифрована. Пожалуйста, введите пароль ниже.</string>\n    <string name=\"enter_password_authy_message\">Похоже, что ваши ключи Authy зашифрованы. Перейдите в Authy и расшифруйте ключи своим паролем. Вы также можете ввести пароль от Authy ниже и Aegis расшифрует ключи за вас.</string>\n    <string name=\"enter_password_aegis_title\">Введите пароль для импорта</string>\n    <string name=\"period_hint\">Период (сек.)</string>\n    <string name=\"algorithm_hint\">Функция хеширования</string>\n    <string name=\"type\">Тип</string>\n    <string name=\"share\">Поделиться</string>\n    <string name=\"yes\">Да</string>\n    <string name=\"no\">Нет</string>\n    <string name=\"undo\">Отмена</string>\n    <string name=\"unlock\">Разблокировать</string>\n    <string name=\"advanced\">Расширенные</string>\n    <string name=\"counter\">Счётчик</string>\n    <string name=\"digits\">Цифры</string>\n    <string name=\"secret\">Секрет</string>\n    <string name=\"scan\">Сканировать QR-код</string>\n    <string name=\"scan_image\">Сканировать изображение</string>\n    <string name=\"enter_manually\">Ввести вручную</string>\n    <string name=\"set_up_biometric\">Настройка биометрической разблокировки</string>\n    <string name=\"copy\">Скопировать</string>\n    <string name=\"edit\">Изменить</string>\n    <string name=\"select_all\">Выбрать все</string>\n    <string name=\"assign_icons\">Назначить значки</string>\n    <string name=\"assign_groups\">Назначить группу</string>\n    <string name=\"assign_groups_dialog_summary\">Выберите группу, в которую вы хотите отнести выбранные записи.</string>\n    <string name=\"assign_groups_dialog_dropdown\">Выберите группу</string>\n    <string name=\"favorite\" comment=\"Verb\">В избранное</string>\n    <string name=\"unfavorite\" comment=\"Verb\">Убрать из избранного</string>\n    <string name=\"error_all_caps\">ОШИБКА</string>\n    <string name=\"password\">Пароль</string>\n    <string name=\"confirm_password\">Подтвердите пароль</string>\n    <string name=\"show_password\">Показать пароль</string>\n    <string name=\"new_entry\">Создать запись</string>\n    <string name=\"add_new_entry\">Добавить запись</string>\n    <string name=\"unlock_vault_error\">Невозможно разблокировать хранилище</string>\n    <string name=\"unlock_vault_error_description\">Неправильный пароль. Убедитесь, что вы не допустили в нём опечатку.</string>\n    <string name=\"password_equality_error\">Пароли должны быть одинаковыми и непустыми</string>\n    <string name=\"snackbar_authentication_method\">Выберите метод аутентификации</string>\n    <string name=\"encrypting_vault\">Шифрование хранилища</string>\n    <string name=\"exporting_vault\">Экспортирование хранилища</string>\n    <string name=\"optimizing_icon\">Оптимизация значка</string>\n    <string name=\"optimizing_icon_multiple\">Оптимизация значков: %1$d/%2$d</string>\n    <string name=\"reading_file\">Чтение файла</string>\n    <string name=\"requesting_root_access\">Запрос root-доступа</string>\n    <string name=\"analyzing_qr\">Анализ QR-кода</string>\n    <string name=\"analyzing_qr_multiple\">Анализ QR-кода %1$d/%2$d (%3$s)</string>\n    <plurals name=\"added_new_entries\">\n        <item quantity=\"one\">Добавлена %d новая запись в хранилище</item>\n        <item quantity=\"few\">Добавлены %d новые записи в хранилище</item>\n        <item quantity=\"many\">Добавлено %d новых записей в хранилище</item>\n        <item quantity=\"other\">Добавлено %d новых записей в хранилище</item>\n    </plurals>\n    <string name=\"importing_icon_pack\">Импорт набора значков</string>\n    <string name=\"delete_entry\">Удалить запись</string>\n    <string name=\"delete_entry_description\">Удалить эту запись?</string>\n    <string name=\"delete_entry_explanation\">Это действие не отключает 2FA для:\\n<b>%s</b>\\n\\nЧтобы предотвратить потерю доступа, убедитесь, что вы отключили 2FA или у вас есть альтернативный способ генерации кодов для данного сервиса.</string>\n    <string name=\"delete_entries\">Удалить записи</string>\n    <plurals name=\"delete_entries_description\">\n        <item quantity=\"one\">Удалить %d запись?</item>\n        <item quantity=\"few\">Удалить %d записи?</item>\n        <item quantity=\"many\">Удалить %d записей?</item>\n        <item quantity=\"other\">Удалить %d записей?</item>\n    </plurals>\n    <string name=\"discard_changes\">Отменить изменения?</string>\n    <string name=\"discard_changes_description\">Ваши изменения не были сохранены</string>\n    <string name=\"saving_profile_error\">Ошибка сохранения профиля</string>\n    <string name=\"saving_assign_icons_error\">Невозможно назначить значки</string>\n    <string name=\"welcome\">Добро пожаловать</string>\n    <string name=\"app_description\">Aegis — бесплатное, безопасное и открытое приложение 2FA.</string>\n    <string name=\"setup_completed\">Настройка завершена</string>\n    <string name=\"setup_completed_description\">Aegis настроен и готов к работе.</string>\n    <string name=\"vault_not_found\">Хранилище не найдено, запуск первоначальной настройки…</string>\n    <string name=\"copied\">Скопировано</string>\n    <string name=\"errors_copied\">Ошибки скопированы в буфер обмена</string>\n    <string name=\"version_copied\">Версия скопирована в буфер обмена</string>\n    <string name=\"error_required_field\">Поле обязательно для заполнения</string>\n    <string name=\"error_occurred\">Произошла ошибка</string>\n    <string name=\"decryption_error\">Произошла ошибка при попытке разблокировать хранилище</string>\n    <string name=\"decryption_corrupt_error\">Произошла ошибка при попытке разблокировать хранилище. Файл хранилища может быть повреждён.</string>\n    <string name=\"saving_error\">Произошла ошибка при попытке сохранить хранилище</string>\n    <string name=\"vault_init_error\">Произошла ошибка при попытке создания хранилища</string>\n    <string name=\"vault_load_error\">Произошла ошибка при попытке прочитать файл хранилища</string>\n    <string name=\"biometric_decrypt_error\">Произошла ошибка при попытке расшифровать хранилище с помощью биометрической аутентификации. Обычно это происходит при изменении настроек безопасности вашего устройства. Разблокируйте хранилище вашим паролем и перенастройте биометрическую аутентификацию в настройках Aegis.</string>\n    <string name=\"biometric_init_error\">Произошла ошибка при попытке расшифровать хранилище с помощью биометрической аутентификации. Обычно это происходит при изменении настроек безопасности вашего устройства. Разблокируйте хранилище вашим паролем и перенастройте биометрическую аутентификацию в настройках Aegis.</string>\n    <string name=\"disable_encryption\">Отключить шифрование</string>\n    <string name=\"disable_encryption_description\">Отключить шифрование? Это приведёт к сохранению хранилища обычным текстом. <b>Автоматическое резервное копирование также будет отключено</b>.</string>\n    <string name=\"enable_encryption_error\">Произошла ошибка при включении шифрования</string>\n    <string name=\"disable_encryption_error\">Произошла ошибка при отключении шифрования</string>\n    <string name=\"backup_successful\">Резервное копирование успешно запланировано</string>\n    <string name=\"backup_error\">Произошла ошибка при попытке создать резервную копию</string>\n    <string name=\"backup_status_success\">Последнее успешное резервирование: %s</string>\n    <string name=\"backup_status_failed\">Последнее неудачное резервирование: %s</string>\n    <string name=\"backup_status_none\">Резервные копии ещё не созданы</string>\n    <string name=\"backup_warning_password\">Резервные копии шифруются с использованием отдельного пароля, указанного в разделе настроек «Безопасность».</string>\n    <string name=\"documentsui_error\">На устройстве отсутствует DocumentsUI. Это важный системный компонент, необходимый для выбора и создания документов. Если вы использовали инструмент для очистки устройства от «мусорных» приложений, то, возможно, случайно удалили этот компонент, и вам необходимо его переустановить.</string>\n    <string name=\"icon_pack_import_error\">Произошла ошибка при импортировании набора значков</string>\n    <string name=\"icon_pack_import_exists_error\">Набор значков, который вы хотите импортировать, уже существует. Перезаписать его?</string>\n    <string name=\"icon_pack_delete_error\">Произошла ошибка при удалении набора значков</string>\n    <plurals name=\"icon_pack_info\">\n        <item quantity=\"one\">%d значок</item>\n        <item quantity=\"few\">%d значка</item>\n        <item quantity=\"many\">%d значков</item>\n        <item quantity=\"other\">%d значков</item>\n    </plurals>\n    <string name=\"icon_custom\">Свой</string>\n    <string name=\"permission_denied\">Доступ запрещён</string>\n    <string name=\"andotp_new_format\">Новый формат (v0.6.3 или новее) </string>\n    <string name=\"andotp_old_format\">Старый формат (v0.6.2 или старее) </string>\n    <string name=\"choose_andotp_importer\">Какой формат имеет файл резервной копии andOTP?</string>\n    <string name=\"choose_totpauth_importer\">Эта резервная копия TOTP Authenticator зашифрована паролем?</string>\n    <string name=\"choose_application\">Выберите приложение, из которого хотите импортировать</string>\n    <string name=\"choose_theme\">Выберите тему</string>\n    <string name=\"choose_account_name_position\">Выберите место названия учётной записи</string>\n    <string name=\"choose_view_mode\">Выберите режим отображения</string>\n    <string name=\"choose_copy_behavior\">Настройка копирования</string>\n    <string name=\"parsing_file_error\">Произошла ошибка при попытке разобрать файл</string>\n    <string name=\"file_not_found\">Ошибка: файл не найден</string>\n    <string name=\"reading_file_error\">Произошла ошибка при попытке прочитать файл</string>\n    <string name=\"app_lookup_error\">Ошибка: приложение не установлено</string>\n    <string name=\"app_version_error\">Установленная версия %s не поддерживается. Последние версии начали шифровать некоторые файлы во внутренней памяти хранилища, из-за чего Aegis не может получить доступ к информации, необходимой для импорта. Попытка импорта может привести к ошибке. Всё равно продолжить?</string>\n    <string name=\"root_error\">Ошибка: root-доступ не получен</string>\n    <plurals name=\"imported_entries_count\">\n        <item quantity=\"one\">Импортирована %d запись</item>\n        <item quantity=\"few\">Импортированы %d записи</item>\n        <item quantity=\"many\">Импортировано %d записей</item>\n        <item quantity=\"other\">Импортировано %d записей</item>\n    </plurals>\n    <plurals name=\"entries_shown\">\n        <item quantity=\"one\">Показана %d запись</item>\n        <item quantity=\"few\">Показаны %d записи</item>\n        <item quantity=\"many\">Показано %d записей</item>\n        <item quantity=\"other\">Показано %d записей</item>\n    </plurals>\n    <string name=\"intro_import_error_title\">Произошла ошибка при импорте хранилища</string>\n    <string name=\"import_error_title\">При импорте произошла одна или несколько ошибок</string>\n    <string name=\"exporting_vault_error\">Произошла ошибка при попытке экспортировать хранилище</string>\n    <string name=\"exported_vault\">Хранилище экспортировано</string>\n    <string name=\"encryption_set_password_error\">Произошла ошибка при попытке установить пароль.</string>\n    <string name=\"encryption_enable_biometrics_error\">Невозможно включить биометрическую разблокировку. На некоторых устройствах плохо реализована эта функция, и, возможно, это ваш случай. Попробуйте вместо этого использовать пароль.</string>\n    <string name=\"no_cameras_available\">Нет доступных камер</string>\n    <string name=\"read_qr_error\">Произошла ошибка при попытке прочитать QR-код</string>\n    <string name=\"read_qr_error_phonefactor\">Aegis не совместим с проприетарным алгоритмом 2FA Microsoft. Не забудьте выбрать «Установить приложение без уведомлений» при настройке 2FA в Office 365.</string>\n    <string name=\"partial_google_auth_import\">Обнаружен неполный экспорт Google Authenticator</string>\n    <string name=\"partial_google_auth_import_warning\">Некоторые QR-коды отсутствуют в импорте. Следующие коды не найдены:\\n\\n<b>%s</b>\\n\\nВы можете продолжить импорт этого неполного экспорта, но лучше сделать повторный экспорт со всеми QR-кодами, чтобы избежать риска потери доступа к ключам.</string>\n    <string name=\"missing_qr_code_descriptor\">• QR-код %d</string>\n    <plurals name=\"import_partial_export_anyway\">\n        <item quantity=\"one\">Принудительно импортировать %d ключ</item>\n        <item quantity=\"few\">Принудительно импортировать %d ключа</item>\n        <item quantity=\"many\">Принудительно импортировать %d ключей</item>\n        <item quantity=\"other\">Принудительно импортировать %d ключей</item>\n    </plurals>\n    <string name=\"import_google_auth_failure\">Невожможно импортировать экспорт из Google Authenticator</string>\n    <string name=\"unrelated_google_auth_batches_error\">Экспорт содержит информацию для несвязанного пакета. Попробуйте импортировать по 1 пакету за раз.</string>\n    <string name=\"no_tokens_can_be_imported\">В результате ни один ключ не может быть импортирован</string>\n    <string name=\"unlocking_vault\">Разблокировка хранилища</string>\n    <string name=\"rename_group\">Переименовать группу</string>\n    <string name=\"no_group_selection\">Если запись не входит ни в одну группу, её можно найти в разделе «Нет группы».</string>\n    <string name=\"remove_group\">Удалить группу</string>\n    <string name=\"remove_group_description\">Удалить группу? Записи из этой группы будут автоматически перемещены в «Нет группы».</string>\n    <string name=\"remove_unused_groups\">Удалить неиспользуемые группы</string>\n    <string name=\"remove_unused_groups_description\">Удалить все группы, к которым не привязаны записи?</string>\n    <string name=\"remove_icon_pack\">Удалить набор значков</string>\n    <string name=\"remove_icon_pack_description\">Удалить этот набор значков? Сами записи, использующие значки из данного набора, не будут затронуты.</string>\n    <string name=\"details\">Подробнее</string>\n    <string name=\"show_error_details\">Показать подробности ошибки</string>\n    <string name=\"lock\">Заблокировать</string>\n    <string name=\"name\">Имя</string>\n    <string name=\"no_group\">Нет группы</string>\n    <string name=\"sort\" comment=\"Title of the Sort button in the top action bar of the main view\">Сортировка</string>\n    <string name=\"sort_alphabetically\">Эмитент (А→Я)</string>\n    <string name=\"sort_alphabetically_reverse\">Эмитент (Я→А)</string>\n    <string name=\"sort_alphabetically_name\">Учётная запись (А→Я)</string>\n    <string name=\"sort_alphabetically_name_reverse\">Учётная запись (Я→А)</string>\n    <string name=\"sort_usage_count\">Количество использований</string>\n    <string name=\"sort_last_used\">Последнее использование</string>\n    <string name=\"sort_custom\">Произвольно</string>\n    <string name=\"last_used\">Последнее использование</string>\n    <string name=\"last_used_never\">никогда</string>\n    <string name=\"new_group\">Новая группа…</string>\n    <string name=\"group\">Группа</string>\n    <string name=\"group_name_hint\">Название группы</string>\n    <string name=\"preference_manage_groups\">Управление группами</string>\n    <string name=\"preference_manage_groups_summary\">Редактирование и удаление ваших групп</string>\n    <string name=\"preference_reset_usage_count\">Сброс счётчика использований</string>\n    <string name=\"preference_reset_usage_count_summary\">Сброс количества использований каждой записи в хранилище</string>\n    <string name=\"preference_reset_usage_count_dialog\">Установить количество использований для каждой записи в хранилище на 0?</string>\n    <string name=\"note\" comment=\"Users can add a note to an entry\">Заметка</string>\n    <string name=\"clear\">Очистить</string>\n    <string name=\"dialog_duplicate_entry_title\" comment=\"'Duplicate' is a noun here\">Дублировать запись</string>\n    <string name=\"dialog_duplicate_entry_message\">Эта запись имеет такое же имя и эмитента, как и в одной или нескольких существующих записях. Как поступить?</string>\n    <string name=\"dialog_duplicate_entry_overwrite_title\">Перезаписать существующую запись/записи</string>\n    <string name=\"dialog_duplicate_entry_overwrite_subtitle\">Заменить существующую запись или записи новой. Это действие не может быть отменено.</string>\n    <string name=\"dialog_duplicate_entry_suffix_title\">Добавить суффикс</string>\n    <string name=\"dialog_duplicate_entry_suffix_subtitle\">Создать новую запись с суффиксом в имени. Новое имя будет: %s</string>\n    <string name=\"dialog_duplicate_entry_cancel_title\">Отменить сохранение</string>\n    <string name=\"dialog_duplicate_entry_cancel_subtitle\">Разрешать редактировать запись перед повторным сохранением</string>\n    <plurals name=\"dialog_duplicate_entry_overwrite_dialog_message\">\n        <item quantity=\"one\">Удалить %d запись с именем:\\n\\n%s — %s</item>\n        <item quantity=\"few\">Удалить %d записи с именем:\\n\\n%s — %s</item>\n        <item quantity=\"many\">Удалить %d записей с именем:\\n\\n%s — %s</item>\n        <item quantity=\"other\">Удалить %d записей с именем:\\n\\n%s — %s</item>\n    </plurals>\n    <string name=\"dialog_duplicate_entry_overwrite_dialog_title\">Подтвердить удаление</string>\n    <string name=\"pref_haptic_feedback_summary\">Включать вибрацию устройства при обновлении кодов</string>\n    <string name=\"pref_haptic_feedback_title\">Виброотклик</string>\n    <string name=\"pref_highlight_entry_title\">Выделять ключи при нажатии</string>\n    <string name=\"pref_highlight_entry_summary\">Сделать ключи более различимыми, временно выделяя их при нажатии</string>\n    <string name=\"pref_groups_multiselect_title\">Мультивыбор групп</string>\n    <string name=\"pref_groups_multiselect_summary\">Разрешить одновременный выбор нескольких групп</string>\n    <string name=\"pref_minimize_on_copy_title\">Сворачивать при копировании</string>\n    <string name=\"pref_minimize_on_copy_summary\">Сворачивать приложение после копирования ключа</string>\n    <string name=\"pref_copy_behavior_title\">Копировать ключи в буфер обмена</string>\n    <string name=\"pref_search_behavior_title\">Поведение поиска</string>\n    <string name=\"pref_pause_entry_title\">Замораживать ключи при нажатии</string>\n    <string name=\"pref_pause_entry_summary\">Приостановить автоматическое обновление ключей принажатии на них. Ключи не будут обновляться до тех пор, пока отображаются. Для обновления потребуется «Выделять ключи при нажатии» или «Отображение по нажатию».</string>\n    <string name=\"pin_keyboard_description\">Введите свой пароль, чтобы включить PIN-клавиатуру. Обратите внимание, что это работает, только если ваш пароль состоит из цифр.</string>\n    <string name=\"pin_keyboard_error\">Ошибка включения PIN-клавиатуры</string>\n    <string name=\"pin_keyboard_error_description\">Невозможно установить PIN-клавиатуру. Ваш пароль должен состоять только из цифр.</string>\n    <string name=\"pin_keyboard_disabled\">Пароль изменён. PIN-клавиатура больше не будет отображаться.</string>\n    <string name=\"selected\">Выбрано</string>\n    <string name=\"dark_theme_title\">Тёмная тема</string>\n    <string name=\"light_theme_title\">Светлая тема</string>\n    <string name=\"amoled_theme_title\">Тема AMOLED</string>\n    <string name=\"system_theme_title\">Задаётся режимом энергосбережения</string>\n    <string name=\"system_amoled_theme_title\">Задаётся режимом энергосбережения (AMOLED)</string>\n    <string name=\"normal_viewmode_title\">Обычный</string>\n    <string name=\"compact_mode_title\">Компактный</string>\n    <string name=\"small_mode_title\">Уменьшенный</string>\n    <string name=\"tiles_mode_title\">Плитки</string>\n    <string name=\"unknown_issuer\">Неизвестный эмитент</string>\n    <string name=\"unknown_account_name\">Неизвестное название учётной записи</string>\n    <plurals name=\"import_error_dialog\">\n        <item quantity=\"one\">Aegis не может импортировать %d ключ. Этот ключ будет пропущен. Нажмите «Подробнее», чтобы просмотреть дополнительную информацию об ошибке.</item>\n        <item quantity=\"few\">Aegis не может импортировать %d ключа. Эти ключи будут пропущены. Нажмите «Подробнее», чтобы просмотреть дополнительную информацию об ошибке.</item>\n        <item quantity=\"many\">Aegis не может импортировать %d ключей. Эти ключи будут пропущены. Нажмите «Подробнее», чтобы просмотреть дополнительную информацию об ошибке.</item>\n        <item quantity=\"other\">Aegis не может импортировать %d ключей. Эти ключи будут пропущены. Нажмите «Подробнее», чтобы просмотреть дополнительную информацию об ошибке.</item>\n    </plurals>\n    <string name=\"unable_to_process_deeplink\">Невозможно обработать глубокую ссылку</string>\n    <string name=\"unable_to_read_qrcode_file\">Невозможно считать и обработать QR-код из файла: %s.</string>\n    <string name=\"unable_to_process_shared_text\">Невозможно обработать текст как OTP</string>\n    <string name=\"unable_to_read_qrcode_files\">Невозможно считать и обработать некоторые QR-коды. Импортируется только %1$d/%2$d.</string>\n    <string name=\"unable_to_generate_qrcode\">Невозможно создать QR-код</string>\n    <string name=\"select_picture\">Выберите изображение</string>\n    <string name=\"select_icon\">Выберите значок</string>\n    <string name=\"tile_open_vault\" comment=\"label for a quick settings tile that opens the app when tapped\">Открыть хранилище</string>\n    <string name=\"tile_open_scanner\" comment=\"label for a quick settings tile that opens the QR code scanner when tapped\">Открыть сканер</string>\n    <string name=\"toggle_checkboxes\">Установите переключатели</string>\n    <string name=\"search\">Поиск</string>\n    <string name=\"channel_name_lock_status\">Статус блокировки</string>\n    <string name=\"channel_description_lock_status\">Aegis может создать постоянное уведомление для отображения статуса блокировки хранилища</string>\n    <string name=\"vault_unlocked_state\">Хранилище разблокировано. Нажмите для блокировки.</string>\n    <string name=\"version\">Версия</string>\n    <string name=\"changelog\">Список изменений</string>\n    <string name=\"whats_new\">Что нового</string>\n    <string name=\"github_description\">Исходный код, замечания и информация</string>\n    <string name=\"license\">Лицензия</string>\n    <string name=\"license_description\">Aegis Authenticator выпускается под лицензией GPLv3</string>\n    <string name=\"third_party_licenses\">Лицензии третьих сторон</string>\n    <string name=\"third_party_licenses_description\">Лицензии сторонних библиотек, используемых в Aegis</string>\n    <string name=\"country_netherlands\">Нидерланды</string>\n    <string name=\"email_us\">Написать эл. письмо</string>\n    <string name=\"visit_website\">Посетить сайт</string>\n    <string name=\"about_support\">Поддержка</string>\n    <string name=\"support_rate\">Оценить</string>\n    <string name=\"support_rate_description\">Поддержите нас, оставив отзыв в Google Play</string>\n    <string name=\"webview_error\">Это устройство не поддерживает веб-просмотр, необходимый для просмотра списка изменений и лицензии, т.к. в нём отсутствует соответствующий системный компонент.</string>\n    <string name=\"email\">Адрес электронной почты</string>\n    <string name=\"time_sync_warning_title\">Автосинхронизация времени</string>\n    <string name=\"time_sync_warning_message\">Aegis полагается на системное время для генерации правильных кодов. Отклонение всего в несколько секунд может привести к неверным кодам. Кажется, ваше устройство не настроено для автоматической синхронизации времени. Хотите сделать это сейчас?</string>\n    <string name=\"time_sync_warning_disable\">Прекратите меня предупреждать, я знаю, что делаю.</string>\n    <string name=\"google_qr_export_unrelated\">Найден несвязанный QR-код. Попробуйте перезапустить сканер.</string>\n    <plurals name=\"google_qr_export_scanned\">\n        <item quantity=\"one\">Отсканирован %1$d/%2$d QR-код</item>\n        <item quantity=\"few\">Отсканированы %1$d/%2$d QR-кода</item>\n        <item quantity=\"many\">Отсканировано %1$d/%2$d QR-кодов</item>\n        <item quantity=\"other\">Отсканировано %1$d/%2$d QR-кодов</item>\n    </plurals>\n    <string name=\"google_qr_export_unexpected\">Ожидался QR-код #%1$d, но вместо этого отсканирован #%2$d</string>\n    <string name=\"backup_error_bar_message\"><b>Недавно произошла ошибка резервного копирования хранилища</b></string>\n    <string name=\"backup_error_dialog_details\" comment=\"The first parameter is the type of backup (e.g. built-in or Android backup). The second parameter is an elapsed time in the style of 'x seconds/minutes/days ago'.\">Последнее резервное копирование хранилища с использованием %1$s не выполнено из-за ошибки. Попытка производилась %2$s. Убедитесь, что настройки резервного копирования правильные.\n    </string>\n    <string name=\"backup_permission_error_dialog_details\" comment=\"The first parameter is the type of backup (e.g. built-in or Android backup). The second parameter is an elapsed time in the style of 'x seconds/minutes/days ago'.\">        Недавняя попытка резервного копирования хранилища с использованием %1$s не выполнена, поскольку у Aegis нет разрешения на запись в место назначения резервной копии. Попытка создания резервной копии была %2$s. Эта ошибка может возникать, если вы переместили/переименовали место назначения резервной копии или если недавно восстановили параметры Aegis из резервной копии. Пожалуйста, перенастройте место назначения резервной копии.\n    </string>\n    <string name=\"backup_system_builtin\">Встроенное автоматическое резервирование Aegis</string>\n    <string name=\"backup_system_android\">Системное облачное резервирование Android</string>\n    <string name=\"backup_reminder_bar_message_with_latest\" comment=\"The parameter is an elapsed time in the style of 'x seconds/minutes/days ago'\">        Резервная копия устарела (%s)\n    </string>\n    <string name=\"backup_reminder_bar_message\">        Изменения не сохранены\n    </string>\n    <string name=\"backup_reminder_bar_dialog_title\">Изменения не сохранены</string>\n    <string name=\"backup_reminder_bar_dialog_summary\">        Резервное копирование последних изменений в хранилище ещё не выполнялось. Важно регулярно делать резервные копии, чтобы не потерять доступ к своим учётным записям. По возможности настройте автоматическое резервное копирование в меню настроек.\n    </string>\n    <string name=\"backup_reminder_bar_dialog_accept\">Настройка резервирования</string>\n    <string name=\"backup_plaintext_export_warning\"><b>Хранилище недавно было экспортировано в виде простого текста</b></string>\n    <string name=\"pref_show_plaintext_warning_hint\">Больше не показывать это предупреждение</string>\n    <string name=\"backup_plaintext_warning_explanation\">Это предупреждение отображается потому, что вы недавно экспортировали хранилище в незашифрованном виде. Для обеспечения безопасности ключей, мы рекомендуем удалить этот файл, как только он перестанет быть нужным.</string>\n    <string name=\"switch_camera\">Переключить камеру</string>\n    <string name=\"empty_list\">Коды для отображения отсутствуют. Начните добавление записей, нажав на знак плюса в правом нижнем углу.</string>\n    <string name=\"empty_list_title\">Не найдено записей</string>\n    <string name=\"empty_group_list\">Нет групп для отображения. Добавьте группы на экране редактирования записи.</string>\n    <string name=\"empty_group_list_title\">Группы не найдены</string>\n    <string name=\"no_icon_packs\">Наборы значков ещё не импортированы. Нажмите кнопку «+» для импортирования. Совет: попробуйте набор <a href=\"https://aegis-icons.github.io\">aegis-icons</a>.</string>\n    <string name=\"no_icon_packs_title\">Нет наборов значков</string>\n    <string name=\"pick_icon\">Выбрать значок</string>\n    <string name=\"uncategorized\">Без категории</string>\n    <string name=\"done\">Готово</string>\n    <plurals name=\"qr_count\">\n        <item quantity=\"one\">%d / %d QR-код</item>\n        <item quantity=\"few\">%d / %d QR-кода</item>\n        <item quantity=\"many\">%d / %d QR-кодов</item>\n        <item quantity=\"other\">%d / %d QR-кодов</item>\n    </plurals>\n    <string name=\"next\">Следующее</string>\n    <string name=\"previous\">Предыдущее</string>\n    <string name=\"copy_uri\">Копировать URI</string>\n    <string name=\"unable_to_copy_uri_to_clipboard\">Невозможно скопировать URI в буфер обмена</string>\n    <string name=\"uri_copied_to_clipboard\">URI скопирован в буфер обмена</string>\n    <string name=\"transfer_entry_description\">Отсканируйте QR-код с помощью приложения для аутентификации, в которое вы хотите передать эту запись.</string>\n    <string name=\"transfer_entry_brightness\">Нажатие на QR-код переключает полную яркость экрана</string>\n    <string name=\"google_auth_compatible_transfer_description\">Сканируйте эти QR-коды в Aegis или Google Authenticator. Из-за ограничений приложения Google Authenticator, включены только ключи TOTP и HOTP, использующие SHA1 и создающие 6-значные коды.</string>\n    <string name=\"password_strength_very_weak\">Очень слабый</string>\n    <string name=\"password_strength_weak\">Слабый</string>\n    <string name=\"password_strength_fair\">Средний</string>\n    <string name=\"password_strength_good\">Хороший</string>\n    <string name=\"password_strength_strong\">Сложный</string>\n    <string name=\"password_strength_unknown\">Пароль слишком длинный для анализа надёжности</string>\n    <string name=\"pref_pin_keyboard_title\">PIN-клавиатура на экране блокировки</string>\n    <string name=\"pref_pin_keyboard_summary\">Включите, если хотите использовать PIN-клавиатуру на экране блокировки. Работает только для паролей из цифр.</string>\n    <string name=\"title_activity_preferences\">Настройки</string>\n    <string name=\"title_activity_manage_groups\">Управление группами</string>\n    <string name=\"title_activity_transfer\">Передача записей</string>\n    <string name=\"title_activity_about\">О программе</string>\n    <string name=\"title_activity_edit_entry\">Редактировать запись</string>\n    <string name=\"title_activity_scan_qr\">Сканировать QR-код</string>\n    <string name=\"title_activity_import_entries\">Импорт записей</string>\n    <string name=\"title_activity_assign_icons\">Назначить значки</string>\n    <string name=\"title_activity_licenses\">Сторонние лицензии</string>\n    <string name=\"dialog_wipe_entries_title\">Очистить записи</string>\n    <string name=\"dialog_wipe_entries_message\">В хранилище уже есть записи. Хотите удалить их перед импортом файла?\\n\\n<b>Если вы удалите существующие записи, то навсегда потеряете к ним доступ.</b></string>\n    <string name=\"dialog_wipe_entries_checkbox\">Очистить содержимое хранилища</string>\n    <string name=\"import_from_clipboard_title\">Импорт из буфера обмена</string>\n    <string name=\"import_from_clipboard_message\">В буфере обмена найден OTPauth URI.\\n\\n<b>Имя</b>: %1$s\\n<b>Эмитент</b>: %2$s\\n\\nИспользовать эти данные для заполнения этой записи?</string>\n    <string name=\"panic_trigger_ignore_toast\">Получен сигнал паники, но настройка отключена — сигнал паники игнорируется</string>\n    <string name=\"pref_panic_trigger_title\">Удалять хранилище при панике</string>\n    <string name=\"pref_panic_trigger_summary\">Удалить хранилище при получении сигнала паники от Ripple</string>\n    <string name=\"import_vault\">Импорт хранилища Aegis</string>\n    <string name=\"import_vault_hint\">Хотите импортировать данные из другого приложения 2FA? Завершите настройку приложения, затем перейдите в меню настроек.</string>\n    <plurals name=\"import_duplicate_toast\">\n        <item quantity=\"one\">Не выбран %d потенциальный дубликат. Проверьте список записей.</item>\n        <item quantity=\"few\">Не выбраны %d потенциальных дубликата. Проверьте список записей.</item>\n        <item quantity=\"many\">Не выбрано %d потенциальных дубликатов. Проверьте список записей.</item>\n        <item quantity=\"other\">Не выбрано %d потенциальных дубликатов. Проверьте список записей.</item>\n    </plurals>\n    <string name=\"importer_help_2fas\">Необходим файл резервной копии 2FAS.</string>\n    <string name=\"importer_help_aegis\">Необходим файл экспорта/резервной копии Aegis.</string>\n    <string name=\"importer_help_authenticator_plus\">Необходим файл экспорта Authenticator Plus, полученный через <b>«Настройки» → «Рез. копия и восстановление» → «Экспорт текста и HTML»</b>.</string>\n    <string name=\"importer_help_authy\">Необходима копия файла <b>/data/data/com.authy.authy/shared_prefs/com.authy.storage.tokens.authenticator.xml</b>, расположенного в папке «Authy» во внутренней памяти.</string>\n    <string name=\"importer_help_andotp\">Необходим файл экспорта/резервной копии andOTP.</string>\n    <string name=\"importer_help_bitwarden\">Необходим файл экспорта/резервной копии Bitwarden. Зашифрованные файлы не поддерживаются.</string>\n    <string name=\"importer_help_battle_net_authenticator\">Необходима копия файла <b>/data/data/com.blizzard.messenger/shared_prefs/com.blizzard.messenger.authenticator_preferences.xml</b>, расположенного в папке «Battle.net Authenticator» во внутренней памяти.</string>\n    <string name=\"importer_help_duo\">Необходима копия файла <b>/data/data/com.duosecurity.duomobile/files/duokit/accounts.json</b>, расположенного в папке «DUO» во внутренней памяти.</string>\n    <string name=\"importer_help_ente_auth\">Необходим файл экспорта Ente Auth. В настоящее время поддерживаются только незашифрованные файлы.</string>\n    <string name=\"importer_help_freeotp\">FreeOTP 2: необходим файл резервной копии.\\nFreeOTP 1.x: необходима копия файла <b>/data/data/org.fedorahosted.freeotp/shared_prefs/tokens.xml</b>, расположенного в папке «FreeOTP» во внутренней памяти.</string>\n    <string name=\"importer_help_freeotp_plus\">Необходим файл экспорта FreeOTP+.</string>\n    <string name=\"importer_warning_title_freeotp2\">Совместимость с FreeOTP 2</string>\n    <string name=\"importer_warning_message_freeotp2\">В FreeOTP 2 существует ряд проблем, которые могут привести к повреждению резервных копий. Aegis постарается сохранить как можно больше записей, но возможно, что некоторые или даже все из них не удастся импортировать.</string>\n    <string name=\"importer_help_google_authenticator\"><b>Поддерживаются только файлы баз данных Google Authenticator версии 5.10 и более ранних</b>.\\n\\nНеобходима копия файла <b>/data/data/com.google.android.apps.authenticator2/databases/databases</b>, расположенного в папке «Google Authenticator» во внутренней памяти.</string>\n    <string name=\"importer_help_microsoft_authenticator\">Необходима копия файла <b>/data/data/com.azure.authenticator/databases/PhoneFactor</b>, расположенного в папке «Microsoft Authenticator» во внутренней памяти.</string>\n    <string name=\"importer_help_plain_text\">Необходим текстовый файл с URI Google Authenticator в каждой строке.</string>\n    <string name=\"importer_help_proton_authenticator\">Необходим файл экспорта Proton Authenticator, полученный через <b>«Настройки» → «Экспорт»</b>.</string>\n    <string name=\"importer_help_steam\"><b>Steam v3.0 и новее не поддерживаются</b>. \nНеобходима копия файла <b>/data/data/com.valvesoftware.android.steam.community/files/Steamguard-*.json</b>, расположенного в папке «Steam» во внутренней памяти.</string>\n    <string name=\"importer_help_stratum\">Необходим файл экспорта Stratum, полученный через <b>«Настройки» → «Резервное копирование» → «Резервное копирование в зашифрованный файл (рекомендуется)»</b>.</string>\n    <string name=\"importer_help_totp_authenticator\">Необходим файл экспорта TOTP Authenticator.</string>\n    <string name=\"importer_help_winauth\">Необходим файл экспорта WinAuth.</string>\n    <string name=\"import_assign_icons_dialog_title\">Назначить значки</string>\n    <string name=\"import_assign_icons_dialog_text\">Назначить значки для импортированных записей?</string>\n    <string name=\"importer_encrypted_exception_google_authenticator\">Была пропущена зашифрованная запись: %s</string>\n    <string name=\"importer_help_direct\">Импорт записей напрямую из %s. Для этого необходимо, чтобы приложение было установлено на этом устройстве и чтобы Aegis были предоставлены права суперпользователя.</string>\n    <string name=\"groups\">Группы</string>\n    <string name=\"pref_focus_search\">Поиск при запуске</string>\n    <string name=\"pref_focus_search_summary\">Начинать поиск сразу после запуска приложения.</string>\n    <string name=\"pref_grouping_halves\">Пополам</string>\n    <string name=\"pref_grouping_none\">Не группировать</string>\n    <string name=\"pref_grouping_size_two\">Группы по 2</string>\n    <string name=\"pref_grouping_size_three\">Группы по 3</string>\n    <string name=\"pref_grouping_size_four\">Группы по 4</string>\n    <string name=\"pref_copy_behavior_never\">Не копировать</string>\n    <string name=\"pref_copy_behavior_single_tap\">Одиночным нажатием</string>\n    <string name=\"pref_copy_behavior_double_tap\">Двойным нажатием</string>\n    <string name=\"pref_account_name_position_hidden\">Скрыта</string>\n    <string name=\"pref_account_name_position_end\">После эмитента</string>\n    <string name=\"pref_account_name_position_below\">Под эмитентом</string>\n    <plurals name=\"time_elapsed_seconds\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"one\">%d секунду назад</item>\n        <item quantity=\"few\">%d секунды назад</item>\n        <item quantity=\"many\">%d секунд назад</item>\n        <item quantity=\"other\">%d секунд назад</item>\n    </plurals>\n    <plurals name=\"time_elapsed_minutes\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"one\">%d минуту назад</item>\n        <item quantity=\"few\">%d минуты назад</item>\n        <item quantity=\"many\">%d минут назад</item>\n        <item quantity=\"other\">%d минут назад</item>\n    </plurals>\n    <plurals name=\"time_elapsed_hours\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"one\">%d час назад</item>\n        <item quantity=\"few\">%d часа назад</item>\n        <item quantity=\"many\">%d часов назад</item>\n        <item quantity=\"other\">%d часов назад</item>\n    </plurals>\n    <plurals name=\"time_elapsed_days\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"one\">%d день назад</item>\n        <item quantity=\"few\">%d дня назад</item>\n        <item quantity=\"many\">%d дней назад</item>\n        <item quantity=\"other\">%d дней назад</item>\n    </plurals>\n    <plurals name=\"time_elapsed_years\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"one\">%d год назад</item>\n        <item quantity=\"few\">%d года назад</item>\n        <item quantity=\"many\">%d лет назад</item>\n        <item quantity=\"other\">%d лет назад</item>\n    </plurals>\n    <plurals name=\"dropdown_checkboxes_default_count\">\n        <item quantity=\"one\">%d элемент выбран</item>\n        <item quantity=\"few\">%d элемента выбраны</item>\n        <item quantity=\"many\">%d элементов выбрано</item>\n        <item quantity=\"other\">%d элементов выбрано</item>\n    </plurals>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-ru-rRU-v29/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"system_theme_title\">Системная</string>\n    <string name=\"system_amoled_theme_title\">Системная (AMOLED)</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-sk-rSK/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources xmlns:tools=\"http://schemas.android.com/tools\">\n    <string name=\"action_settings\">Nastavenia</string>\n    <string name=\"action_about\">O aplikácii</string>\n    <string name=\"action_delete\">Odstrániť</string>\n    <string name=\"action_transfer\">Prenos</string>\n    <string name=\"action_edit_icon\">Upraviť ikonu</string>\n    <string name=\"action_reset_usage_count\">Vynulovať počet použití</string>\n    <string name=\"action_reset_usage_count_dialog\">Naozaj chcete nastaviť počet využitia tohto záznamu na 0?</string>\n    <string name=\"action_default_icon\">Obnoviť predvolenú ikonu</string>\n    <string name=\"discard\">Zahodiť</string>\n    <string name=\"save\">Uložiť</string>\n    <string name=\"all\">Všetky</string>\n    <string name=\"issuer\">Vydavateľ</string>\n    <string name=\"yandex_pin\">PIN (4-16 číslic)</string>\n    <string name=\"motp_pin\">PIN (4 číslice)</string>\n    <string name=\"suggested\">Navrhované</string>\n    <string name=\"usage_count\">Počet použití</string>\n    <string name=\"warning\">Varovanie</string>\n    <string name=\"pref_cat_appearance_app\">Aplikácia</string>\n    <string name=\"pref_cat_appearance_entries\">Položky</string>\n    <string name=\"pref_cat_backups_android\">Android</string>\n    <string name=\"pref_cat_backups_auto\">Automatické zálohy</string>\n    <string name=\"pref_section_behavior_title\">Správanie</string>\n    <string name=\"pref_section_behavior_summary\">Prispôsobte správanie pri interakcii so zoznamom záznamov.</string>\n    <string name=\"pref_section_appearance_title\">Vzhľad</string>\n    <string name=\"pref_section_appearance_summary\">Upravte tému, jazyk a ďalšie nastavenia, ktoré ovplyvňujú vzhľad aplikácie.</string>\n    <string name=\"pref_section_security_title\">Zabezpečenie</string>\n    <string name=\"pref_section_security_summary\">Nakonfigurujte šifrovanie, biometrické odomknutie, automatické uzamknutie a ďalšie nastavenia zabezpečenia.</string>\n    <string name=\"pref_section_import_export_title\">Import &amp; export dát</string>\n    <string name=\"pref_section_import_export_summary\">Importujte zálohy Aegis alebo iných autentifikačných aplikácií. Vytvorte manuálne exporty svojho trezoru Aegis.</string>\n    <string name=\"pref_section_audit_log_title\">Denník záznamov</string>\n    <string name=\"pref_section_audit_log_summary\">Nájdite zoznam všetkých nahlásených dôležitých udalosti, ktoré sa stali v aplikácii.</string>\n    <string name=\"pref_section_backups_title\">Zálohy</string>\n    <string name=\"pref_section_backups_summary\">Nastavte automatické zálohovanie na miesto podľa vášho výberu alebo povoľte účasť v cloudovom zálohovacom systéme Androidu.</string>\n    <string name=\"pref_section_icon_packs\">Balíčky ikon</string>\n    <string name=\"pref_section_icon_packs_summary\">Spravujte a importujte balíčky ikon.</string>\n    <string name=\"pref_select_theme_title\">Téma</string>\n    <string name=\"pref_dynamic_colors_title\">Dynamické farby</string>\n    <string name=\"pref_dynamic_colors_summary\">Použiť prekrytie na základe farieb vášho Android motívu</string>\n    <string name=\"pref_view_mode_title\">Režim zobrazenia</string>\n    <string name=\"pref_lang_title\">Jazyk</string>\n    <string name=\"pref_show_icons_title\">Zobraziť ikony</string>\n    <string name=\"pref_show_icons_summary\">Zobraziť ikony vedľa každého záznamu</string>\n    <string name=\"pref_code_group_size_title\">Zoskupenie číselných znakov</string>\n    <string name=\"pref_code_group_size_summary\">Zvoľte číslo, po koľkých čísliciach sa majú zoskupovať kódy</string>\n    <string name=\"pref_account_name_position_title\">Zobraziť názov účtu</string>\n    <string name=\"pref_show_next_code_title\">Zobraziť nadchádzajúci kód</string>\n    <string name=\"pref_show_next_code_summary\">Vygenerovať a zobraziť ďalší kód v predstihu</string>\n    <string name=\"pref_expiration_state_title\">Zobraz kedy sa skončí platnosť kódov</string>\n    <string name=\"pref_expiration_state_summary\">Farba kódov sa zmení a začne blikať, keď sa blíži koniec ich platnosti</string>\n    <string name=\"pref_expiration_state_fallback\">Farba kódov sa zmení, keď sa blíži koniec ich platnosti</string>\n    <string name=\"pref_shared_issuer_account_name_title\">Zobraziť názov účtu iba pokiaľ to je potrebné</string>\n    <string name=\"pref_shared_issuer_account_name_summary\">Zobraziť názvy účtov len v prípade, že majú rovnakého vydavateľa. Ostatné názvy účtov budú skryté.</string>\n    <string name=\"pref_account_name_position_summary_override\">Toto nastavenie je prepísané režimom zobrazenia Dlaždice. Názov účtu bude viditeľný pod vydavateľom.</string>\n    <string name=\"pref_import_file_title\">Importovať zo súboru</string>\n    <string name=\"pref_import_file_summary\">Importovať tokeny zo súboru</string>\n    <string name=\"pref_android_backups_title\">Zálohy na Android cloude</string>\n    <string name=\"pref_android_backups_summary\">Povoliť zálohovaciemu systému Android Cloud zahrnúť Aegis trezor vo svojich zálohách. Je to podporované iba pre šifrované trezory.</string>\n    <string name=\"pref_android_backups_hint\"><i>Device-to-device (D2D) zálohy sú povolené vždy, nezávisle na nastavení vyššie</i></string>\n    <string name=\"pref_backups_title\">Automaticky zálohovať trezor</string>\n    <string name=\"pref_backups_summary\">Po vykonaní zmien automaticky vytvárať zálohy trezoru na externom úložisku. Toto je podporované iba pre šifrované trezory.</string>\n    <string name=\"pref_backups_reminder_title\">Pripomienky zálohovania</string>\n    <string name=\"pref_backups_reminder_summary\">Zobraziť pripomienku o zálohovaní vášho trezoru v prípade, že ste nezálohovali vaše najnovšie zmeny.</string>\n    <string name=\"pref_backups_reminder_dialog_title\">Zakázať pripomienky zálohovania</string>\n    <string name=\"pref_backups_reminder_dialog_summary\">Ak túto pripomienku zakážete, Aegis vám nepovie, či máte alebo nemáte zmeny, ktoré ešte nie sú zálohované. Vystavujete sa tak riziku straty prístupu k svojim tokenom. Naozaj chcete zakázať pripomenutie?</string>\n    <string name=\"pref_backups_versioning_strategy_title\">Spôsob zálohovania</string>\n    <string name=\"pref_backups_versioning_strategy_keep_x_versions\">Ponechať viacero verzií</string>\n    <string name=\"pref_backups_versioning_strategy_single_backup\">Jedna záloha</string>\n    <string name=\"pref_backups_versioning_strategy_single_backup_warning\">Zvolený spôsob zálohovania nie je spoľahlivý ani odporúčaný. Zlyhanie jedného zálohovania by mohlo spôsobiť stratu vašej jedinej zálohy.</string>\n    <string name=\"pref_backups_versioning_strategy_dialog_title\">Zvoľte spôsob zálohovania</string>\n    <string name=\"pref_backups_location_title\">Umiestnenie zálohy</string>\n    <string name=\"pref_backups_location_summary\">Zálohy budú uložené v</string>\n    <string name=\"pref_backup_location_summary\">Záloha bude uložená v</string>\n    <string name=\"pref_backups_trigger_title\">Spustiť zálohu</string>\n    <string name=\"pref_backups_trigger_summary\">Ručné spustenie zálohy</string>\n    <string name=\"pref_backups_versions_title\">Počet verzií na uchovanie</string>\n    <string name=\"pref_backups_versions_infinite\">\\u221E</string>\n    <plurals name=\"pref_backups_versions_summary\">\n        <item quantity=\"one\">Ponechať %1$d verziu zálohy</item>\n        <item quantity=\"few\">Ponechať %1$d verzie zálohy</item>\n        <item quantity=\"many\">Ponechať %1$d verzií zálohy</item>\n        <item quantity=\"other\">Ponechať %1$d verzií zálohy</item>\n    </plurals>\n    <string name=\"pref_backups_versions_infinite_summary\">Ponechať nekonečné množstvo verzií zálohy</string>\n    <string name=\"pref_import_app_title\">Importovať z aplikácie</string>\n    <string name=\"pref_import_app_summary\">Importovať tokeny z aplikácie (vyžaduje sa prístup root)</string>\n    <string name=\"pref_export_title\">Exportovať</string>\n    <string name=\"pref_export_summary\">Exportovať trezor</string>\n    <string name=\"pref_password_reminder_title\">Pripomienka hesla</string>\n    <string name=\"pref_google_auth_export_title\">Exportovať pre Google Authenticator</string>\n    <string name=\"pref_google_auth_export_descriptor\">Generuje exportné QR kódy kompatibilné s Google Authenticator</string>\n    <string name=\"pref_google_auth_export_no_data\">Žiadne dáta na export</string>\n    <string name=\"pref_password_reminder_summary\">Zobraziť %s pripomienku na zadanie hesla, aby ste ho nezabudli.</string>\n    <string name=\"pref_password_reminder_summary_disabled\">Vypnuté</string>\n    <string name=\"pref_secure_screen_title\">Zabezpečenie obrazovky</string>\n    <string name=\"pref_secure_screen_summary\">Blokujte snímky obrazovky a iné pokusy o zachytenie obrazovky v rámci aplikácie</string>\n    <string name=\"pref_tap_to_reveal_title\">Zobraziť stlačením</string>\n    <string name=\"pref_tap_to_reveal_summary\">Tokeny budú predvolene skryté. Kliknite na tokeny pre zobrazenie kódu.</string>\n    <string name=\"pref_tap_to_reveal_time_title\">Čas do skrytia zobrazeného kódu</string>\n    <string name=\"pref_auto_lock_title\">Automatické zamykanie</string>\n    <string name=\"pref_auto_lock_summary\">Keď %s</string>\n    <string name=\"pref_auto_lock_summary_disabled\">Vypnuté</string>\n    <string name=\"pref_auto_lock_prompt\">Automaticky zamknúť Aegis keď</string>\n    <string name=\"pref_auto_lock_type_back_button\">Je stlačené tlačidlo Späť</string>\n    <string name=\"pref_auto_lock_type_minimize\">Aplikácia je minimalizovaná</string>\n    <string name=\"pref_auto_lock_type_device_lock\">Zariadenie je uzamknuté</string>\n    <string name=\"pref_backup_password_category\">Záloha &amp; Export</string>\n    <string name=\"pref_backup_password_title\">Samostatné heslo pre zálohu &amp; export</string>\n    <string name=\"pref_backup_password_summary\">Ak je povolené, heslo, ktoré sa používa na odomknutie aplikácie, už nemožno použiť na dešifrovanie záloh a exportov.</string>\n    <string name=\"pref_backup_password_change_title\">Zmeniť heslo pre zálohu &amp; export</string>\n    <string name=\"pref_backup_password_change_summary\">Nastavte nové heslo, ktoré sa použije na šifrovanie trezoru počas zálohovania a exportu.</string>\n    <string name=\"pref_encryption_title\">Šifrovanie</string>\n    <string name=\"pref_encryption_summary\">Zašifrujte trezor a odomknite ho pomocou hesla alebo biometrie</string>\n    <string name=\"pref_biometrics_title\">Biometrické odomykanie</string>\n    <string name=\"pref_biometrics_summary\">Povoliť biometrické overenie na odomknutie trezoru</string>\n    <string name=\"pref_search_behavior_summary\">Prehľadávať: %s</string>\n    <string name=\"pref_search_behavior_prompt\">Vyhľadávať v týchto poliach</string>\n    <string name=\"pref_search_behavior_type_name\">Meno</string>\n    <string name=\"pref_search_behavior_type_issuer\">Vydavateľ</string>\n    <string name=\"pref_search_behavior_type_note\">Poznámka</string>\n    <string name=\"pref_search_behavior_type_groups\">Skupiny</string>\n    <string name=\"pref_set_password_title\">Zmeniť heslo</string>\n    <string name=\"pref_set_password_summary\">Zadajte nové heslo, ktoré budete potrebovať na odomknutie trezoru</string>\n    <string name=\"no_events_title\">Žiadne nahlásené udalosti</string>\n    <string name=\"no_events_description\">V aplikácii neboli nahlásené žiadne dôležité udalosti</string>\n    <string name=\"event_title_vault_unlocked\">Trezor odomknutý</string>\n    <string name=\"event_description_vault_unlocked\">Trezor bol úspešne odomknutý</string>\n    <string name=\"event_title_backup_created\">Záloha vytvorená</string>\n    <string name=\"event_description_backup_created\">Záloha trezoru bola úspešne vytvorená</string>\n    <string name=\"event_title_android_backup_created\">Záloha vytvorená systémom Android</string>\n    <string name=\"event_description_android_backup_created\">Záloha trezoru bola úspešne vytvorená systémom Android</string>\n    <string name=\"event_title_vault_exported\">Trezor exportovaný</string>\n    <string name=\"event_description_vault_exported\">Kópia trezoru bola exportovaná</string>\n    <string name=\"event_title_entry_shared\">Záznam zdieľaný</string>\n    <string name=\"event_description_entry_shared\">Záznam bol zdieľaný</string>\n    <string name=\"event_title_vault_unlock_failed_password\">Odomknutie trezora sa nepodarilo (heslo)</string>\n    <string name=\"event_description_vault_unlock_failed_password\">Pokus o odomknutie trezora s heslom zlyhalo</string>\n    <string name=\"event_title_vault_unlock_failed_biometrics\">Odomknutie trezora sa nepodarilo (biometria)</string>\n    <string name=\"event_description_vault_unlock_failed_biometrics\">Pokus o odomknutie trezora s biometriou zlyhalo</string>\n    <string name=\"event_unknown\">Neznámy typ udalosti</string>\n    <string name=\"today_at_time\">Dnes o %1$s</string>\n    <string name=\"day_of_week_at_time\">%1$s o %2$s</string>\n    <string name=\"export_encrypted\">Šifrovať trezor</string>\n    <string name=\"export_help\">Touto akciou sa exportuje trezor z interného úložiska Aegis. Vyberte formát, v ktorom chcete mať export:</string>\n    <string name=\"export_warning_unencrypted\">Chystáte sa exportovať nezašifrovanú kópiu svojho trezoru Aegis. <b>Toto sa neodporúča</b>.</string>\n    <string name=\"export_warning_password\">Exporty sú šifrované pomocou samostatného hesla nakonfigurovaného v nastaveniach zabezpečenia.</string>\n    <string name=\"understand_risk_accept\">Rozumiem rizikám</string>\n    <string name=\"export_format_aegis\">Aegis (.JSON)</string>\n    <string name=\"export_format_google_auth_uri\">Textový súbor (.TXT)</string>\n    <string name=\"export_format_html\">Webová stránka (.HTML)</string>\n    <string name=\"export_format_hint\">Formát exportu</string>\n    <string name=\"export_all_groups\">Exportovať všetky skupiny</string>\n    <string name=\"export_choose_groups\">Vyberte, ktoré skupiny sa majú exportovať</string>\n    <plurals name=\"export_groups_selected_count\">\n        <item quantity=\"one\">%d vybraná skupina</item>\n        <item quantity=\"few\">%d vybrané skupiny</item>\n        <item quantity=\"many\">%d vybraných skupín</item>\n        <item quantity=\"other\">%d vybraných skupín</item>\n    </plurals>\n    <string name=\"export_no_groups_selected\">Nie sú vybrané žiadne skupiny na exportovanie</string>\n    <string name=\"export_html_title\" comment=\"The title of an HTML export document\">Export Aegis Authenticator</string>\n    <string name=\"choose_authentication_method\">Zabezpečenie</string>\n    <string name=\"authentication_method_none\">Žiadne</string>\n    <string name=\"authentication_method_none_description\">Na odomknutie trezoru nie je potrebné žiadne heslo a nebude šifrovaný. <b> Táto možnosť sa neodporúča </b>.</string>\n    <string name=\"authentication_method_password\">Heslo</string>\n    <string name=\"authentication_method_password_description\">Na odomknutie trezoru je potrebné heslo.</string>\n    <string name=\"authentication_method_password_explanation\">Upozornenie: Ak zabudnete heslo, natrvalo stratíte prístup k svojim tokenom. Neexistuje žiadny spôsob, ako ich obnoviť bez hesla.</string>\n    <string name=\"authentication_method_biometrics\">Biometrické údaje</string>\n    <string name=\"authentication_method_biometrics_description\">Na odomknutie trezoru možno okrem hesla použiť aj biometriu zaregistrovanú v tomto zariadení, napríklad odtlačok prsta alebo vašu tvár.</string>\n    <string name=\"authentication\">Odomknúť trezor</string>\n    <string name=\"authentication_multiline\" comment=\"The newline in the middle is used for aesthetic purposes\">Odomknúť \\n trezor</string>\n    <string name=\"auth_use_biometrics\">Alebo kliknite sem pre použitie <font fgcolor=\"#FF0D86C1\">biometrie</font></string>\n    <string name=\"set_password\">Prosím, zadajte heslo</string>\n    <string name=\"set_group\">Zadajte názov skupiny</string>\n    <string name=\"set_number\">Prosím zadajte číslo</string>\n    <string name=\"set_password_confirm\">Prosím potvrďte heslo</string>\n    <string name=\"invalid_password\">Heslo je nesprávne</string>\n    <string name=\"password_reminder\">Zadajte vaše heslo. Raz za čas sa vás to opýtame, aby ste naň nezabudli.</string>\n    <string name=\"password_reminder_dialog_title\">Predvolené biometrické odomykanie</string>\n    <string name=\"password_reminder_freq_never\">Nikdy</string>\n    <string name=\"password_reminder_freq_weekly\">Týždenne</string>\n    <string name=\"password_reminder_freq_biweekly\">Každý druhý týždeň</string>\n    <string name=\"password_reminder_freq_monthly\">Mesačne</string>\n    <string name=\"password_reminder_freq_quarterly\">Štvrťročne</string>\n    <string name=\"enter_password_aegis_title\">Prosím, zadajte heslo pre import</string>\n    <string name=\"period_hint\">Doba (v sekundách)</string>\n    <string name=\"algorithm_hint\">Funkcia hash</string>\n    <string name=\"type\">Typ</string>\n    <string name=\"share\">Zdieľať</string>\n    <string name=\"yes\">Áno</string>\n    <string name=\"no\">Nie</string>\n    <string name=\"undo\">Späť</string>\n    <string name=\"unlock\">Odomknúť</string>\n    <string name=\"advanced\">Pokročilé</string>\n    <string name=\"counter\">Počítadlo</string>\n    <string name=\"digits\">Číslice</string>\n    <string name=\"secret\">Tajný kľúč</string>\n    <string name=\"scan\">Naskenovať QR kód</string>\n    <string name=\"scan_image\">Naskenovať obrázok</string>\n    <string name=\"enter_manually\">Zadať ručne</string>\n    <string name=\"set_up_biometric\">Nastaviť biometrické odomknutie</string>\n    <string name=\"copy\">Kopírovať</string>\n    <string name=\"edit\">Upraviť</string>\n    <string name=\"select_all\">Vybrať všetko</string>\n    <string name=\"assign_icons\">Priradiť ikonky</string>\n    <string name=\"assign_groups\">Priraď do skupiny</string>\n    <string name=\"assign_groups_dialog_summary\">Vyberte skupinu, do ktorej chcete priradiť vybrané položky.</string>\n    <string name=\"assign_groups_dialog_dropdown\">Vyber skupinu</string>\n    <string name=\"favorite\" comment=\"Verb\">Obľúbené</string>\n    <string name=\"unfavorite\" comment=\"Verb\">Odobrať z obľúbených</string>\n    <string name=\"error_all_caps\">CHYBA</string>\n    <string name=\"password\">Heslo</string>\n    <string name=\"confirm_password\">Potvrďte heslo</string>\n    <string name=\"show_password\">Zobraziť heslo</string>\n    <string name=\"new_entry\">Nová položka</string>\n    <string name=\"add_new_entry\">Pridať novú položku</string>\n    <string name=\"unlock_vault_error\">Nepodarilo sa odomknúť trezor</string>\n    <string name=\"unlock_vault_error_description\">Nesprávne heslo. Uistite sa, že ste sa nepomýlili.</string>\n    <string name=\"password_equality_error\">Heslá by mali byť rovnaké a neprázdne</string>\n    <string name=\"snackbar_authentication_method\">Zvoľte prosím spôsob autentifikácie</string>\n    <string name=\"encrypting_vault\">Prebieha šifrovanie trezoru</string>\n    <string name=\"exporting_vault\">Exportovať trezor</string>\n    <string name=\"reading_file\">Čítanie súboru</string>\n    <string name=\"requesting_root_access\">Žiada sa o root prístup</string>\n    <string name=\"analyzing_qr\">Analýza QR kódu</string>\n    <plurals name=\"added_new_entries\">\n        <item quantity=\"one\">Pridal sa %d nový záznam do trezoru</item>\n        <item quantity=\"few\">Pridali sa %d nové záznamy do trezoru</item>\n        <item quantity=\"many\">Pridalo sa %d nových záznamov do trezoru</item>\n        <item quantity=\"other\">Pridalo sa %d nových záznamov do trezoru</item>\n    </plurals>\n    <string name=\"importing_icon_pack\">Importuje sa balík ikon</string>\n    <string name=\"delete_entry\">Odstrániť položku</string>\n    <string name=\"delete_entry_description\">Naozaj chcete túto položku odstrániť?</string>\n    <string name=\"delete_entries\">Vymazať položky</string>\n    <plurals name=\"delete_entries_description\">\n        <item quantity=\"one\">Naozaj chcete odstrániť %d položku?</item>\n        <item quantity=\"few\">Naozaj chcete odstrániť %d položky?</item>\n        <item quantity=\"many\">Naozaj chcete odstrániť %d položiek?</item>\n        <item quantity=\"other\">Naozaj chcete odstrániť %d položiek?</item>\n    </plurals>\n    <string name=\"discard_changes\">Zrušiť zmeny?</string>\n    <string name=\"discard_changes_description\">Vaše zmeny neboli uložené</string>\n    <string name=\"saving_profile_error\">Pri ukladaní profilu sa vyskytla chyba</string>\n    <string name=\"saving_assign_icons_error\">Chyba priradenia ikon</string>\n    <string name=\"welcome\">Vitajte</string>\n    <string name=\"app_description\">Aegis je bezplatná, bezpečná a open source aplikácia 2FA</string>\n    <string name=\"setup_completed\">Nastavenie je dokončené</string>\n    <string name=\"setup_completed_description\">Aegis bol nastavený a je pripravený k používaniu.</string>\n    <string name=\"vault_not_found\">Trezor sa nenašiel, spúšťa sa nastavenie…</string>\n    <string name=\"copied\">Skopírované</string>\n    <string name=\"errors_copied\">Chyby boli skopírované do schránky</string>\n    <string name=\"version_copied\">Verzia bola skopírovaná do schránky</string>\n    <string name=\"error_required_field\">Toto pole je povinné</string>\n    <string name=\"error_occurred\">Došlo k chybe</string>\n    <string name=\"decryption_error\">Pri pokuse o odomknutie trezoru sa vyskytla chyba</string>\n    <string name=\"decryption_corrupt_error\">Pri pokuse o odomknutie trezoru sa vyskytla chyba. Váš súbor trezoru môže byť poškodený.</string>\n    <string name=\"saving_error\">Pri pokuse o uloženie trezoru sa vyskytla chyba</string>\n    <string name=\"vault_init_error\">Pri pokuse o inicializáciu trezoru sa vyskytla chyba</string>\n    <string name=\"vault_load_error\">Pri pokuse o načítanie trezoru z úložiska sa vyskytla chyba</string>\n    <string name=\"biometric_decrypt_error\">Pri pokuse o dešifrovanie trezoru pomocou biometrického overenia sa vyskytla chyba. Zvyčajne sa to stane iba vtedy, ak sa zmenili nastavenia zabezpečenia vášho zariadenia. Odomknite trezor pomocou svojho hesla a prekonfigurujte biometrické overenie v nastaveniach Aegis.</string>\n    <string name=\"disable_encryption\">Vypnúť šifrovanie</string>\n    <string name=\"enable_encryption_error\">Pri zapínaní šifrovania došlo k chybe</string>\n    <string name=\"disable_encryption_error\">Pri vypínaní šifrovania došlo k chybe</string>\n    <string name=\"backup_successful\">Zálohovanie bolo úspešne naplánované</string>\n    <string name=\"backup_error\">Pri pokuse o vytvorenie zálohy došlo k chybe</string>\n    <string name=\"backup_status_success\">Nedávna úspešná záloha: %s</string>\n    <string name=\"backup_status_failed\">Nedávna neúspešná záloha: %s</string>\n    <string name=\"backup_status_none\">Zatiaľ neboli vytvorené žiadne zálohy</string>\n    <string name=\"backup_warning_password\">Zálohy sú šifrované pomocou samostatného hesla zadaného v nastaveniach zabezpečenia</string>\n    <string name=\"icon_pack_import_error\">Pri pokuse o import balíka ikon došlo k chybe</string>\n    <string name=\"icon_pack_import_exists_error\">Balík ikon, ktorý sa snažíte importovať, už existuje. Chcete ho prepísať?</string>\n    <string name=\"icon_pack_delete_error\">Pri pokuse o odstránenie balíka ikon došlo k chybe</string>\n    <plurals name=\"icon_pack_info\">\n        <item quantity=\"one\">%d ikona</item>\n        <item quantity=\"few\">%d ikony</item>\n        <item quantity=\"many\">%d ikon</item>\n        <item quantity=\"other\">%d ikon</item>\n    </plurals>\n    <string name=\"icon_custom\">Vlastný</string>\n    <string name=\"permission_denied\">Prístup bol zamietnutý</string>\n    <string name=\"andotp_new_format\">Nový formát (v0.6.3 alebo novšia) </string>\n    <string name=\"andotp_old_format\">Starý formát (v0.6.2 alebo staršia) </string>\n    <string name=\"choose_andotp_importer\">Aký formát má záložný súbor andOTP?</string>\n    <string name=\"choose_totpauth_importer\">Je táto záloha autentifikátora TOTP zašifrovaná heslom?</string>\n    <string name=\"choose_application\">Vyberte aplikáciu, z ktorej chcete importovať</string>\n    <string name=\"choose_theme\">Vyberte si vašu želanú tému</string>\n    <string name=\"choose_account_name_position\">Vyberte si vašu želanú pozíciu názvu účtu</string>\n    <string name=\"choose_view_mode\">Vyberte si váš želaný režim zobrazenia</string>\n    <string name=\"choose_copy_behavior\">Vyberte si vaše želané správanie kopírovania</string>\n    <string name=\"parsing_file_error\">Pri pokuse o analyzovanie súboru došlo k chybe</string>\n    <string name=\"file_not_found\">Chyba: Súbor nenájdený</string>\n    <string name=\"reading_file_error\">Pri pokuse o prečitanie súboru sa vyskytla chyba</string>\n    <string name=\"app_lookup_error\">Chyba: Aplikácia nie je nainštalovaná</string>\n    <string name=\"root_error\">Chyba: Nie je možné získať prístup root</string>\n    <plurals name=\"entries_shown\">\n        <item quantity=\"one\">Zobrazuje sa %d záznam</item>\n        <item quantity=\"few\">Zobrazujú sa %d záznamy</item>\n        <item quantity=\"many\">Zobrazuje sa %d záznamov</item>\n        <item quantity=\"other\">Zobrazuje sa %d záznamov</item>\n    </plurals>\n    <string name=\"intro_import_error_title\">Pri importe trezoru došlo k chybe</string>\n    <string name=\"import_error_title\">Počas importu sa vyskytla jedna alebo viacero chýb</string>\n    <string name=\"exported_vault\">Trezor bol exportovaný</string>\n    <string name=\"encryption_set_password_error\">Pri pokuse o nastavenie hesla sa vyskytla chyba.</string>\n    <string name=\"encryption_enable_biometrics_error\">Pri pokuse o povolenie biometrického odomykania sa vyskytla chyba. Niektoré zariadenia majú slabú implementáciu biometrickej autentifikácie a je pravdepodobné, že to vaše je jedno z nich. Zvážte namiesto toho prechod na konfiguráciu iba s heslom.</string>\n    <string name=\"no_cameras_available\">K dispozícii nie sú žiadne kamery</string>\n    <string name=\"read_qr_error\">Pri pokuse o načítanie kódu QR sa vyskytla chyba</string>\n    <string name=\"read_qr_error_phonefactor\">Aegis nie je kompatibilný s proprietárnym algoritmom 2FA spoločnosti Microsoft. Pri konfigurácii 2FA v Office 365 nezabudnite vybrať možnosť „Nastaviť aplikáciu bez upozornení“.</string>\n    <string name=\"missing_qr_code_descriptor\">• QR kód %d</string>\n    <string name=\"import_google_auth_failure\">Importovanie exportu služby Google Authenticator zlyhalo</string>\n    <string name=\"unlocking_vault\">Odomykanie trezoru</string>\n    <string name=\"rename_group\">Premenovať Skupinu</string>\n    <string name=\"remove_group\">Odstránenie skupiny</string>\n    <string name=\"remove_group_description\">Ste si istí, že chcete odstrániť túto skupinu? Záznamy v tejto skupine budú automaticky prehodené na \\'Žiadna skupina\\'.</string>\n    <string name=\"remove_unused_groups\">Odstrániť nepoužité skupiny</string>\n    <string name=\"remove_unused_groups_description\">Ste si istí, že chcete odstrániť všetky skupiny, ktoré nie sú priradené k záznamu?</string>\n    <string name=\"remove_icon_pack\">Odstrániť balíček ikon</string>\n    <string name=\"remove_icon_pack_description\">Ste si istí, že chcete odstrániť tento balíček ikon? Záznamy, ktoré používajú ikony z tohto balíka, nebudú ovplyvnené.</string>\n    <string name=\"details\">Podrobnosti</string>\n    <string name=\"show_error_details\">Zobraziť podrobnosti o chybe</string>\n    <string name=\"lock\">Uzamknúť</string>\n    <string name=\"name\">Meno</string>\n    <string name=\"no_group\">Žiadna skupina</string>\n    <string name=\"sort\" comment=\"Title of the Sort button in the top action bar of the main view\">Zoradiť</string>\n    <string name=\"sort_alphabetically\">Vydavateľ (od A po Z)</string>\n    <string name=\"sort_alphabetically_reverse\">Vydavateľ (od Z po A)</string>\n    <string name=\"sort_alphabetically_name\">Účet (od A po Z)</string>\n    <string name=\"sort_alphabetically_name_reverse\">Účet (od Z po A)</string>\n    <string name=\"sort_usage_count\">Počet použití</string>\n    <string name=\"sort_last_used\">Naposledy použité</string>\n    <string name=\"sort_custom\">Vlastné</string>\n    <string name=\"last_used\">Naposledy použité</string>\n    <string name=\"last_used_never\">nikdy</string>\n    <string name=\"new_group\">Nová skupina…</string>\n    <string name=\"group\">Skupina</string>\n    <string name=\"group_name_hint\">Názov skupiny</string>\n    <string name=\"preference_manage_groups\">Upraviť skupiny</string>\n    <string name=\"preference_manage_groups_summary\">Tu môžete spravovať a odstraňovať svoje skupiny</string>\n    <string name=\"preference_reset_usage_count\">Vynulovať počet použití</string>\n    <string name=\"preference_reset_usage_count_summary\">Vynuluje sa počet použití pre každý záznam vo vašom trezore</string>\n    <string name=\"preference_reset_usage_count_dialog\">Naozaj chcete nastaviť počet použití každého záznamu vo vašom trezore na 0?</string>\n    <string name=\"note\" comment=\"Users can add a note to an entry\">Poznámka</string>\n    <string name=\"clear\">Vymazať</string>\n    <string name=\"pref_haptic_feedback_summary\">Zariadenie začne vibrovať, keď sa obnovujú kódy</string>\n    <string name=\"pref_haptic_feedback_title\">Haptická odozva</string>\n    <string name=\"pref_highlight_entry_title\">Zvýrazniť tokeny stlačením</string>\n    <string name=\"pref_groups_multiselect_title\">Viacnásobný výber skupín</string>\n    <string name=\"pref_groups_multiselect_summary\">Povoliť výber viacerých skupín naraz</string>\n    <string name=\"pref_minimize_on_copy_title\">Minimalizovať pri kopírovaní</string>\n    <string name=\"pref_minimize_on_copy_summary\">Aplikácia sa minimalizuje po skopírovaní kódu</string>\n    <string name=\"pref_copy_behavior_title\">Kopírovať tokeny do schránky</string>\n    <string name=\"pref_search_behavior_title\">Správanie vyhľadávania</string>\n    <string name=\"pref_pause_entry_title\">Zmraziť tokeny stlačením</string>\n    <string name=\"pref_pause_entry_summary\">Pozastaviť automatické obnovenie tokenov stlačením. Tokeny sa neaktualizujú, pokiaľ sú zaostrené. Požaduje sa \\\"Zvýrazniť tokeny stlačením\\\" alebo \\\"Zobraziť stlačením\\\".</string>\n    <string name=\"pin_keyboard_disabled\">Heslo bolo zmenené. Klávesnica pre PIN sa už nebude zobrazovať.</string>\n    <string name=\"selected\">Zvolené</string>\n    <string name=\"dark_theme_title\">Tmavá téma</string>\n    <string name=\"light_theme_title\">Svetlá téma</string>\n    <string name=\"amoled_theme_title\">AMOLED téma</string>\n    <string name=\"system_theme_title\">Podľa šetriča batérie</string>\n    <string name=\"system_amoled_theme_title\">Podľa šetriča batérie (AMOLED)</string>\n    <string name=\"normal_viewmode_title\">Normálny</string>\n    <string name=\"compact_mode_title\">Kompaktný</string>\n    <string name=\"small_mode_title\">Malý</string>\n    <string name=\"tiles_mode_title\">Dlaždice</string>\n    <string name=\"unknown_issuer\">Neznámy vydavateľ</string>\n    <string name=\"unknown_account_name\">Neznámy názov účtu</string>\n    <plurals name=\"import_error_dialog\">\n        <item quantity=\"one\">Aegis nedokázal importovať %d token. Tento token bude preskočený. Pre zobrazenie informácii o chybe kliknite na \\'podrobnosti\\'.</item>\n        <item quantity=\"few\">Aegis nedokázal importovať %d tokeny. Tieto tokeny budú preskočené. Pre zobrazenie informácii o chybách kliknite na \\'podrobnosti\\'.</item>\n        <item quantity=\"many\">Aegis nedokázal importovať %d tokenov. Tieto tokeny budú preskočené. Pre zobrazenie informácii o chybách kliknite na \\'podrobnosti\\'.</item>\n        <item quantity=\"other\">Aegis nedokázal importovať %d tokenov. Tieto tokeny budú preskočené. Pre zobrazenie informácii o chybách kliknite na \\'podrobnosti\\'.</item>\n    </plurals>\n    <string name=\"unable_to_generate_qrcode\">Nie je možné vygenerovať QR kód</string>\n    <string name=\"select_picture\">Vybrať obrázok</string>\n    <string name=\"select_icon\">Vybrať ikonu</string>\n    <string name=\"tile_open_vault\" comment=\"label for a quick settings tile that opens the app when tapped\">Otvoriť trezor</string>\n    <string name=\"tile_open_scanner\" comment=\"label for a quick settings tile that opens the QR code scanner when tapped\">Otvoriť skener</string>\n    <string name=\"search\">Hľadať</string>\n    <string name=\"channel_name_lock_status\">Stav uzamknutia</string>\n    <string name=\"vault_unlocked_state\">Trezor je odomknutý. Ťukni sem pre zamknutie.</string>\n    <string name=\"version\">Verzia</string>\n    <string name=\"changelog\">Zoznam zmien</string>\n    <string name=\"whats_new\">Čo je nové</string>\n    <string name=\"github_description\">Zdrojový kód, problémy a informácie</string>\n    <string name=\"license\">Licencia</string>\n    <string name=\"license_description\">Aegis Authenticator je licencovaný pod GPLv3</string>\n    <string name=\"third_party_licenses\">Licencie tretích strán</string>\n    <string name=\"third_party_licenses_description\">Licencie knižníc tretích strán, ktoré Aegis používa</string>\n    <string name=\"country_netherlands\">Holandsko</string>\n    <string name=\"email_us\">Napísať e-mail</string>\n    <string name=\"visit_website\">Navštíviť našu webstránku</string>\n    <string name=\"about_support\">Podpora</string>\n    <string name=\"support_rate\">Ohodnotiť</string>\n    <string name=\"support_rate_description\">Podporte nás zanechaním recenzie v obchode Google Play</string>\n    <string name=\"email\">E-mail</string>\n    <string name=\"time_sync_warning_title\">Automatická synchronizácia času</string>\n    <string name=\"google_qr_export_unrelated\">Nesúvisiaci QR kód bol nájdený. Pokúste sa reštartovať skener.</string>\n    <string name=\"backup_error_bar_message\"><b>Zálohovanie trezora nedávno zlyhalo</b></string>\n    <string name=\"backup_system_builtin\">Vstavané automatické zálohy Aegisu</string>\n    <string name=\"backup_reminder_bar_message_with_latest\" comment=\"The parameter is an elapsed time in the style of 'x seconds/minutes/days ago'\">        Najnovšia záloha je zastaraná (%s)\n    </string>\n    <string name=\"backup_reminder_bar_message\">        Zmeny nie sú zálohované\n    </string>\n    <string name=\"backup_reminder_bar_dialog_title\">Zmeny nie sú zálohované</string>\n    <string name=\"backup_plaintext_export_warning\"><b>Trezor bol nedávno exportovaný ako obyčajný text</b></string>\n    <string name=\"pref_show_plaintext_warning_hint\">Toto upozornenie viac nezobrazovať</string>\n    <string name=\"switch_camera\">Prepnúť fotoaparát</string>\n    <string name=\"empty_list_title\">Neboli nájdené žiadne záznamy</string>\n    <string name=\"empty_group_list_title\">Neboli nájdené žiadne skupiny</string>\n    <string name=\"no_icon_packs\">Zatiaľ neboli importované žiadne balíčky ikon. Klepnite na znamienko plus aby ste ho importovali. Tip: vyskúšajte <a href=\"https://aegis-icons.github.io\">aegis-icons</a>.</string>\n    <string name=\"no_icon_packs_title\">Žiadne balíčky ikon</string>\n    <string name=\"uncategorized\">Nezaradené</string>\n    <string name=\"done\">Hotovo</string>\n    <plurals name=\"qr_count\">\n        <item quantity=\"one\">%d / %d QR kódu</item>\n        <item quantity=\"few\">%d / %d QR kódov</item>\n        <item quantity=\"many\">%d / %d QR kódov</item>\n        <item quantity=\"other\">%d / %d QR kódov</item>\n    </plurals>\n    <string name=\"next\">Ďalšie</string>\n    <string name=\"previous\">Predchádzajúce</string>\n    <string name=\"copy_uri\">Skopírovať URI</string>\n    <string name=\"uri_copied_to_clipboard\">URI bola skopírovaná do schránky</string>\n    <string name=\"transfer_entry_description\">Naskenujte tento QR kód pomocou overovacej aplikácie, do ktorej chcete tento záznam preniesť</string>\n    <string name=\"google_auth_compatible_transfer_description\">Naskenujte tieto QR kódy s aplikáciou Aegis alebo Google Authenticator.\\n\\nKvôli limitáciám aplikácie Google Authenticator sú zahrnuté iba TOTP &amp; HOTP tokény, ktoré používajú SHA1 a obsahujú 6 číselné kódy</string>\n    <string name=\"password_strength_very_weak\">Veľmi slabé</string>\n    <string name=\"password_strength_weak\">Slabé</string>\n    <string name=\"password_strength_fair\">Dostatočné</string>\n    <string name=\"password_strength_good\">Dobré</string>\n    <string name=\"password_strength_strong\">Silné</string>\n    <string name=\"pref_pin_keyboard_title\">Použiť klávesnicu pre PIN na zamknutej obrazovke</string>\n    <string name=\"title_activity_preferences\">Nastavenia</string>\n    <string name=\"title_activity_manage_groups\">Spravovať skupiny</string>\n    <string name=\"title_activity_transfer\">Prenos záznamov</string>\n    <string name=\"title_activity_about\">O aplikácii</string>\n    <string name=\"title_activity_edit_entry\">Upraviť záznam</string>\n    <string name=\"title_activity_scan_qr\">Skenovať QR kód</string>\n    <string name=\"title_activity_assign_icons\">Priradiť ikonky</string>\n    <string name=\"panic_trigger_ignore_toast\">Aegis zaznamenal panický signál, avšak nastavenie je deaktivované. Ignoruje sa</string>\n    <string name=\"pref_panic_trigger_title\">Vymazať trezor pri vyvolaní paniky</string>\n    <string name=\"pref_panic_trigger_summary\">Vymazať trezor, keď sa vyvolá panický spúšťač od Ripple</string>\n    <string name=\"import_vault\">Importovať Aegis trezor</string>\n    <string name=\"importer_help_2fas\">Nahrajte súbor exportu služby 2FAS Authenticator.</string>\n    <string name=\"importer_help_aegis\">Nahrajte súbor exportu/zálohy služby Aegis.</string>\n    <string name=\"importer_help_authenticator_plus\">Nahrajte súbor exportu služby Authenticator Plus, ktorý obdržíte cez <b>Nastavenia -&gt; Záloha &amp; Obnoviť -&gt; Exportovať ako Text a HTML</b>.</string>\n    <string name=\"importer_help_authy\">Nahrajte kópiu <b>/data/data/com.authy.authy/shared_prefs/com.authy.storage.tokens.authenticator.xml</b>, ktorá sa nachádza vo vnútornom úložnom adresári služby Authy.</string>\n    <string name=\"importer_help_andotp\">Nahrajte súbor exportu/zálohy služby andOTP.</string>\n    <string name=\"importer_help_bitwarden\">Nahrajte súbor exportu/zálohy služby Bitwarden. Šifrované súbory nie sú podporované.</string>\n    <string name=\"importer_help_battle_net_authenticator\">Nahrajte kópiu <b>/data/data/com.blizzard.messenger/shared_prefs/com.blizzard.messenger.authenticator_preferences.xml</b>, ktorá sa nachádza vo vnútornom úložnom adresári služby Battle.net Authenticator.</string>\n    <string name=\"importer_help_duo\">Nahrajte kópiu <b>/data/data/com.duosecurity.duomobile/files/duokit/accounts.json</b>, ktorá sa nachádza vo vnútornom úložnom adresári služby DUO.</string>\n    <string name=\"importer_help_ente_auth\">Nahrajte súbor exportu služby Ente Auth. V tejto chvíli sú dostupné iba nezašifrované súbory.</string>\n    <string name=\"importer_help_freeotp\">FreeOTP 2: Nahrajte súbor zálohy.\\nFreeOTP 1.x: Nahrajte kópiu <b>/data/data/org.fedorahosted.freeotp/shared_prefs/tokens.xml</b>, ktorá sa nachádza vo vnútornom úložnom adresári služby FreeOTP.</string>\n    <string name=\"importer_help_freeotp_plus\">Nahrajte súbor exportu služby FreeOTP+.</string>\n    <string name=\"importer_help_google_authenticator\"><b>Iba databázové súbory služby Google Authenticator v5.10 a staršie sú podporované</b>.\\n\\nNahrajte kópiu <b>/data/data/com.google.android.apps.authenticator2/databases/databases</b>, ktorá sa nachádza vo vnútornom úložnom adresári služby Google Authenticator.</string>\n    <string name=\"importer_help_microsoft_authenticator\">Nahrajte kópiu <b>/data/data/com.azure.authenticator/databases/PhoneFactor</b>, ktorá sa nachádza vo vnútornom úložnom adresári služby Microsoft Authenticator.</string>\n    <string name=\"importer_help_plain_text\">Nahrajte textový súbor s Google Authenticator URI na každom riadku.</string>\n    <string name=\"importer_help_proton_authenticator\">Nahrajte súbor (.json) exportu služby Proton Authenticator, ktorý získate cez <b>Nastavenia -&gt; Exportovať</b>.</string>\n    <string name=\"importer_help_steam\"><b>Steam v3.0 a novšie nie sú podporované</b>. Poskytnite kópiu <b>/data/data/com.valvesoftware.android.steam.community/files/Steamguard-*.json</b>, ktorá sa nachádza vo vnútornom úložnom adresári služby Steam.</string>\n    <string name=\"importer_help_stratum\">Nahrajte súbor exportu služby Stratum, ktorý obdržíte cez <b>Nastavenia -&gt; Záloha -&gt; Zálohovať do šifrovaného súboru (odporúčané)</b>.</string>\n    <string name=\"importer_help_totp_authenticator\">Nahrajte súbor exportu služby TOTP Authenticator.</string>\n    <string name=\"importer_help_winauth\">Nahrajte súbor exportu služby WinAuth.</string>\n    <string name=\"groups\">Skupiny</string>\n    <string name=\"pref_focus_search\">Zamerať vyhľadávanie pri spustení aplikácie</string>\n    <string name=\"pref_focus_search_summary\">Zamerá vyhľadávanie okamžite po otvorení aplikácie.</string>\n    <string name=\"pref_grouping_halves\">Na polovicu</string>\n    <string name=\"pref_grouping_none\">Nezoskupovať</string>\n    <string name=\"pref_grouping_size_two\">Zoskupovať po 2</string>\n    <string name=\"pref_grouping_size_three\">Zoskupovať po 3</string>\n    <string name=\"pref_grouping_size_four\">Zoskupovať po 4</string>\n    <string name=\"pref_copy_behavior_never\">Nikdy</string>\n    <string name=\"pref_copy_behavior_single_tap\">Jedno klepnutie</string>\n    <string name=\"pref_copy_behavior_double_tap\">Dvojité poklepanie</string>\n    <string name=\"pref_account_name_position_hidden\">Skryté</string>\n    <plurals name=\"time_elapsed_seconds\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"one\">Pred %d sekundou</item>\n        <item quantity=\"few\">Pred %d sekundami</item>\n        <item quantity=\"many\">Pred %d sekundami</item>\n        <item quantity=\"other\">Pred %d sekundami</item>\n    </plurals>\n    <plurals name=\"time_elapsed_minutes\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"one\">Pred %d minútou</item>\n        <item quantity=\"few\">Pred %d minútami</item>\n        <item quantity=\"many\">Pred %d minútami</item>\n        <item quantity=\"other\">Pred %d minútami</item>\n    </plurals>\n    <plurals name=\"time_elapsed_hours\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"one\">Pred %d hodinou</item>\n        <item quantity=\"few\">Pred %d hodinami</item>\n        <item quantity=\"many\">Pred %d hodinami</item>\n        <item quantity=\"other\">Pred %d hodinami</item>\n    </plurals>\n    <plurals name=\"time_elapsed_days\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"one\">Pred %d dňom</item>\n        <item quantity=\"few\">Pred %d dňami</item>\n        <item quantity=\"many\">Pred %d dňami</item>\n        <item quantity=\"other\">Pred %d dňami</item>\n    </plurals>\n    <plurals name=\"time_elapsed_years\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"one\">Pred %d rokom</item>\n        <item quantity=\"few\">Pred %d rokmi</item>\n        <item quantity=\"many\">Pred %d rokmi</item>\n        <item quantity=\"other\">Pred %d rokmi</item>\n    </plurals>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-sk-rSK-v29/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"system_theme_title\">Podľa systému</string>\n    <string name=\"system_amoled_theme_title\">Podľa systému (AMOLED)</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-sr-rSP/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources xmlns:tools=\"http://schemas.android.com/tools\">\n    <string name=\"action_settings\">Подешавања</string>\n    <string name=\"action_about\">О апликацији</string>\n    <string name=\"action_delete\">Избриши</string>\n    <string name=\"action_transfer\">Пренеси</string>\n    <string name=\"action_edit_icon\">Измени иконицу</string>\n    <string name=\"action_reset_usage_count\">Ресетуј број коришћења</string>\n    <string name=\"action_reset_usage_count_dialog\">Желите ли заиста да поставите број коришћења овог уноса на 0?</string>\n    <string name=\"action_default_icon\">Врати подразумевану иконицу</string>\n    <string name=\"discard\">Одбаци</string>\n    <string name=\"save\">Сачувај</string>\n    <string name=\"all\">Све</string>\n    <string name=\"issuer\">Издавач</string>\n    <string name=\"yandex_pin\">PIN (4–16 цифара)</string>\n    <string name=\"motp_pin\">PIN (4 цифре)</string>\n    <string name=\"suggested\">Предложено</string>\n    <string name=\"usage_count\">Број коришћења</string>\n    <string name=\"warning\">Упозорење</string>\n    <string name=\"pref_cat_appearance_app\">Апликација</string>\n    <string name=\"pref_cat_appearance_entries\">Уноси</string>\n    <string name=\"pref_cat_backups_android\">Android</string>\n    <string name=\"pref_cat_backups_auto\">Аутоматске резервне копије</string>\n    <string name=\"pref_section_behavior_title\">Понашање</string>\n    <string name=\"pref_section_behavior_summary\">Прилагодите понашање када управљате листом уноса.</string>\n    <string name=\"pref_section_appearance_title\">Изглед</string>\n    <string name=\"pref_section_appearance_summary\">Прилагодите тему, језик и друга подешавања која утичу на изглед апликације.</string>\n    <string name=\"pref_section_security_title\">Безбедност</string>\n    <string name=\"pref_section_security_summary\">Конфигуришите шифровање, биометријско откључавање и друга безбедносна подешавања.</string>\n    <string name=\"pref_section_import_export_title\">Увоз и извоз</string>\n    <string name=\"pref_section_import_export_summary\">Увезите резервне копије за Aegis или друге апликације за аутентификацију. Ручно извезите ваш Aegis трезор.</string>\n    <string name=\"pref_section_audit_log_title\">Евиденција ревизије</string>\n    <string name=\"pref_section_audit_log_summary\">Пронађите листу свих пријављених важних догађаја који су се десили у апликацији.</string>\n    <string name=\"pref_section_backups_title\">Резервне копије</string>\n    <string name=\"pref_section_backups_summary\">Подесите аутоматске резервне копије на локацију по вашем избору или омогућите учешће у Android систему резервних копија у облаку.</string>\n    <string name=\"pref_section_icon_packs\">Пакети иконица</string>\n    <string name=\"pref_section_icon_packs_summary\">Управљајте и увезите пакете иконица</string>\n    <string name=\"pref_select_theme_title\">Изглед</string>\n    <string name=\"pref_dynamic_colors_title\">Динамичке боје</string>\n    <string name=\"pref_dynamic_colors_summary\">Примените изглед заснован на бојама теме вашег Android уређаја</string>\n    <string name=\"pref_view_mode_title\">Режим приказа</string>\n    <string name=\"pref_lang_title\">Језик</string>\n    <string name=\"pref_show_icons_title\">Прикажи иконице</string>\n    <string name=\"pref_show_icons_summary\">Прикажите иконице поред сваког уноса</string>\n    <string name=\"pref_code_group_size_title\">Груписање цифара кода</string>\n    <string name=\"pref_code_group_size_summary\">Изаберите број цифара по којима ћете груписати кодове</string>\n    <string name=\"pref_account_name_position_title\">Прикажи име налога</string>\n    <string name=\"pref_show_next_code_title\">Прикажи следећи кôд</string>\n    <string name=\"pref_show_next_code_summary\">Генеришите и прикажите следећи кôд унапред</string>\n    <string name=\"pref_expiration_state_title\">Назначи када су кодови близу истека</string>\n    <string name=\"pref_expiration_state_summary\">Промените боју кодова и нека трепћу када су близу истека</string>\n    <string name=\"pref_expiration_state_fallback\">Промените боју кодова када су близу истека</string>\n    <string name=\"pref_shared_issuer_account_name_title\">Приказуј само назив налога када је неопходно</string>\n    <string name=\"pref_shared_issuer_account_name_summary\">Приказујте називе налога само када деле истог издаваоца. Остали називи налога ће бити сакривени.</string>\n    <string name=\"pref_account_name_position_summary_override\">Ово подешавање је замењено режимом приказа плочица. Назив налога ће бити приказан испод издаваоца.</string>\n    <string name=\"pref_import_file_title\">Увоз из фајла</string>\n    <string name=\"pref_import_file_summary\">Увоз токена из фајла</string>\n    <string name=\"pref_android_backups_title\">Android резервне копије у облаку</string>\n    <string name=\"pref_android_backups_summary\">Дозволите Android-овом систему резервних копија у облаку да укључи Aegis-ов трезор у своје резервне копије. Ово је подржано само за шифроване трезоре.</string>\n    <string name=\"pref_android_backups_hint\"><i>Резервне копије са уређаја на уређај (D2D) су увек дозвољене, без обзира на подешавања изнад</i></string>\n    <string name=\"pref_backups_title\">Аутоматски прави резервну копију трезора</string>\n    <string name=\"pref_backups_summary\">Аутоматско прављење резервних копија трезора на спољној меморији када се изврше промене. Ово је подржано само за шифроване трезоре.</string>\n    <string name=\"pref_backups_reminder_title\">Подсетник о резервним копијама</string>\n    <string name=\"pref_backups_reminder_summary\">Приказивање подсетника за прављење резервне копије вашег трезора у случају да нисте направили резервну копију најновијих промена.</string>\n    <string name=\"pref_backups_reminder_dialog_title\">Онемогућите подсетник о резервним копијама</string>\n    <string name=\"pref_backups_reminder_dialog_summary\">Онемогућавање овог подсетника значи да вам Aegis неће рећи да ли имате промене за које још увек није направљена резервна копија. Ово вас доводи у опасност да изгубите приступ својим токенима. Желите ли заиста да онемогућите подсетник?</string>\n    <string name=\"pref_backups_versioning_strategy_title\">Стратегија прављења резервних копија</string>\n    <string name=\"pref_backups_versioning_strategy_keep_x_versions\">Чувај неколико верзија</string>\n    <string name=\"pref_backups_versioning_strategy_single_backup\">Једна резервна копија</string>\n    <string name=\"pref_backups_versioning_strategy_single_backup_warning\">Изабрана стратегија резервних копија није поуздана и не препоручује се. Једно неуспешно прављење резервне копије може довести до губитка ваше једине резервне копије.</string>\n    <string name=\"pref_backups_versioning_strategy_dialog_title\">Изаберите стратегију прављења резервних копија</string>\n    <string name=\"pref_backups_location_title\">Локација резервних копија</string>\n    <string name=\"pref_backups_location_summary\">Резервне копије ће бити сачуване у</string>\n    <string name=\"pref_backup_location_summary\">Резервна копија ће бити сачувана у</string>\n    <string name=\"pref_backups_trigger_title\">Направи резервну копију</string>\n    <string name=\"pref_backups_trigger_summary\">Ручно направи резервну копију</string>\n    <string name=\"pref_backups_versions_title\">Број верзија за чување</string>\n    <string name=\"pref_backups_versions_infinite\">\\u221E</string>\n    <plurals name=\"pref_backups_versions_summary\">\n        <item quantity=\"one\">Чувај %1$d верзију резервне копије</item>\n        <item quantity=\"few\">Чувај %1$d верзија резервне копије</item>\n        <item quantity=\"other\">Чувај %1$d верзија резервне копије</item>\n    </plurals>\n    <string name=\"pref_backups_versions_infinite_summary\">Чувај бесконачан број верзија резервних копија</string>\n    <string name=\"pref_import_app_title\">Увоз из апликације</string>\n    <string name=\"pref_import_app_summary\">Увоз токена из апликације (захтева root приступ)</string>\n    <string name=\"pref_export_title\">Извоз</string>\n    <string name=\"pref_export_summary\">Извоз трезора</string>\n    <string name=\"pref_password_reminder_title\">Подсетник о лозинци</string>\n    <string name=\"pref_google_auth_export_title\">Извоз у Google Authenticator</string>\n    <string name=\"pref_google_auth_export_descriptor\">Генерисање QR кодова за извоз, компатибилних са Google Authenticator-ом</string>\n    <string name=\"pref_google_auth_export_no_data\">Нема података за извоз</string>\n    <plurals name=\"pref_google_auth_export_incompatible_entries\">\n        <item quantity=\"one\">Прескочен %d некомпатибилни унос</item>\n        <item quantity=\"few\">Прескочено %d некомпатибилних уноса</item>\n        <item quantity=\"other\">Прескочено %d некомпатибилних уноса</item>\n    </plurals>\n    <string name=\"pref_password_reminder_summary_disabled\">Онемогућено</string>\n    <string name=\"pref_secure_screen_title\">Безбедност екрана</string>\n    <string name=\"pref_secure_screen_summary\">Блокирај снимке екрана и остале покушаје снимања екрана у апликацији</string>\n    <string name=\"pref_tap_to_reveal_title\">Додирни за откривање</string>\n    <string name=\"pref_tap_to_reveal_summary\">Токени ће подразумевано бити скривени. Додирните токен за откривање кода.</string>\n    <string name=\"pref_tap_to_reveal_time_title\">Време пре истека додира за откривање</string>\n    <string name=\"pref_auto_lock_title\">Аутоматско закључавање</string>\n    <string name=\"pref_auto_lock_summary\">Када %s</string>\n    <string name=\"pref_auto_lock_summary_disabled\">Онемогућено</string>\n    <string name=\"pref_auto_lock_prompt\">Аутоматски закључати Aegis када је</string>\n    <string name=\"pref_auto_lock_type_back_button\">Притиснуто дугме „Назад”</string>\n    <string name=\"pref_auto_lock_type_minimize\">Апликација минимизирана</string>\n    <string name=\"pref_auto_lock_type_device_lock\">Уређај закључан</string>\n    <string name=\"pref_backup_password_category\">Резервна копија и извоз</string>\n    <string name=\"pref_backup_password_title\">Посебна лознка за резервну копију и извоз</string>\n    <string name=\"pref_backup_password_summary\">Ако је омогућено, лозинка која се користи за откључавање апликације више не може да се користи за дешифровање резервних копија и извоза.</string>\n    <string name=\"pref_backup_password_change_title\">Промена лозинке за резервну копију и извоз</string>\n    <string name=\"pref_backup_password_change_summary\">Поставите нову лозинку која ће се користити за шифровање трезора током прављења резервних копија и извоза.</string>\n    <string name=\"pref_encryption_title\">Шифровање</string>\n    <string name=\"pref_encryption_summary\">Шифровање трезора и откључавање лозинком или биометријом</string>\n    <string name=\"pref_biometrics_title\">Биометријско откључавање</string>\n    <string name=\"pref_biometrics_summary\">Дозволите биометријску аутентификацију за откључавање трезора</string>\n    <string name=\"pref_search_behavior_summary\">Претрага кроз: %s</string>\n    <string name=\"pref_search_behavior_prompt\">Претрага у било ком од следећих поља</string>\n    <string name=\"pref_search_behavior_type_name\">Назив</string>\n    <string name=\"pref_search_behavior_type_issuer\">Издавач</string>\n    <string name=\"pref_search_behavior_type_note\">Напомена</string>\n    <string name=\"pref_search_behavior_type_groups\">Групе</string>\n    <string name=\"pref_set_password_title\">Промена лозинке</string>\n    <string name=\"pref_set_password_summary\">Поставите нову лозинку која ће вам требати да откључате свој трезор</string>\n    <string name=\"no_events_title\">Нема пријављених догађаја</string>\n    <string name=\"no_events_description\">Ниједан важан догађај није пријављен у апликацији</string>\n    <string name=\"event_title_vault_unlocked\">Трезор откључан</string>\n    <string name=\"event_description_vault_unlocked\">Трезор је успешно откључан</string>\n    <string name=\"event_title_backup_created\">Резервна копија је направљена</string>\n    <string name=\"event_description_backup_created\">Резервна копија трезора је успешно направљена</string>\n    <string name=\"event_title_android_backup_created\">Резервну копију је направио Android</string>\n    <string name=\"event_description_android_backup_created\">Резервну копију је успешно направио Android</string>\n    <string name=\"event_title_vault_exported\">Трезор извезен</string>\n    <string name=\"event_description_vault_exported\">Копија трезора је извезена</string>\n    <string name=\"event_title_entry_shared\">Унос подељен</string>\n    <string name=\"event_description_entry_shared\">Унос је подељен</string>\n    <string name=\"event_title_vault_unlock_failed_password\">Откључавање трезора неуспешно (лозинка)</string>\n    <string name=\"event_description_vault_unlock_failed_password\">Покушај откључавања трезора помоћу лозинке није успео</string>\n    <string name=\"event_title_vault_unlock_failed_biometrics\">Откључавање трезора неуспешно (биометрија)</string>\n    <string name=\"event_description_vault_unlock_failed_biometrics\">Покушај откључавања трезора помоћу биометрије није успео</string>\n    <string name=\"event_unknown\">Непознати тип догађаја</string>\n    <string name=\"audit_log_entry_deleted\">(избрисано)</string>\n    <string name=\"today_at_time\">Данас у %1$s</string>\n    <string name=\"day_of_week_at_time\">%1$s у %2$s</string>\n    <string name=\"export_encrypted\">Шифруј трезор</string>\n    <string name=\"export_help\">Ова радња извести трезор из Aegis-ове унутрашње меморије. Изаберите формат у којем желите да извоз буде:</string>\n    <string name=\"export_warning_unencrypted\">Управо ћете извести нешифровану копију вашег Aegis трезора. <b>Ово није препоручено</b>.</string>\n    <string name=\"export_warning_password\">Извози су шифровани коришћењем посебне лозинке конфигурисане у подешавањима „Безбедност”.</string>\n    <string name=\"understand_risk_accept\">Разумем ризик</string>\n    <string name=\"export_format_aegis\">Aegis (.JSON)</string>\n    <string name=\"export_format_google_auth_uri\">Текстуални фајл (.TXT)</string>\n    <string name=\"export_format_html\">Веб-страница (.HTML)</string>\n    <string name=\"export_format_hint\">Формат извоза</string>\n    <string name=\"export_all_groups\">Извоз свих група</string>\n    <string name=\"export_choose_groups\">Изаберите групе за извоз</string>\n    <plurals name=\"export_groups_selected_count\">\n        <item quantity=\"one\">%d група изабрана</item>\n        <item quantity=\"few\">%d групе изабрано</item>\n        <item quantity=\"other\">%d група изабрано</item>\n    </plurals>\n    <string name=\"export_no_groups_selected\">Није изабрана ниједна група за извоз</string>\n    <string name=\"export_html_title\" comment=\"The title of an HTML export document\">Извоз Aegis Authenticator-a</string>\n    <string name=\"choose_authentication_method\">Безбедност</string>\n    <string name=\"authentication_method_explanation\">Aegis је апликација двофакторске аутентификације (2FA), фокусирана на безбедност. Токени се чувају у трезору, који се опционално може шифровати лозинком по вашем избору. Ако нападач добије ваш шифрован фајл трезора, неће моћи да приступи садржају без познавања лозинке.\\n\\nУнапред смо изабрали опцију за коју мислимо да би најбоље одговарала вашем уређају.</string>\n    <string name=\"authentication_method_none\">Ниједно</string>\n    <string name=\"authentication_method_none_description\">За откључавање трезора није потребна лозинка и он неће бити шифрован. <b>Ова опција није препоручена</b>.</string>\n    <string name=\"authentication_method_password\">Лозинка</string>\n    <string name=\"authentication_method_password_description\">Неопходна је лозинка за откључавање трезора.</string>\n    <string name=\"authentication_method_password_explanation\">Упозорење: Ако заборавите лозинку, трајно ћете изгубити приступ својим токенима. Нема начина да их повратите без лозинке.</string>\n    <string name=\"authentication_method_biometrics\">Биометрија</string>\n    <string name=\"authentication_method_biometrics_description\">Поред лозинке, биометрија регистрована на овом уређају, попут отиска прста или вашег лица, може се користити за откључавање трезора.</string>\n    <string name=\"authentication\">Откључајте трезор</string>\n    <string name=\"authentication_multiline\" comment=\"The newline in the middle is used for aesthetic purposes\">Откључајте\\nтрезор</string>\n    <string name=\"auth_use_biometrics\">Или додирните овде да користите <font fgcolor=\"#FF0D86C1\">биометрију</font></string>\n    <string name=\"set_password\">Унесите лозинку</string>\n    <string name=\"set_group\">Унесите назив групе</string>\n    <string name=\"set_number\">Унесите број</string>\n    <string name=\"set_password_confirm\">Потврдите лозинку</string>\n    <string name=\"invalid_password\">Нетачна лозинка</string>\n    <string name=\"invalidated_biometrics\">Откривена је промена у безбедносним подешавањима вашег уређаја. Идите у „Aegis -&gt; Подешавања -&gt; Безбедност -&gt; Биометријско откључавање” да бисте онемогућили и поново омогућили биометријско откључавање.</string>\n    <string name=\"password_reminder\">Унесите лозинку. Повремено вас питамо да то урадите како је не бисте заборавили.</string>\n    <string name=\"password_reminder_dialog_title\">Биометријско откључавање подразумевано</string>\n    <string name=\"password_reminder_dialog_message\">Повремено од вас тражимо да уместо тога унесете лозинку како бисте били сигурни да је нисте заборавили и да нећете изгубити приступ свом трезору. Након што једном унесете лозинку, Aegis ће се подразумевано вратити на биометријско откључавање док не дође време за следећи подсетник за лозинку.</string>\n    <string name=\"password_reminder_freq_never\">Никада</string>\n    <string name=\"password_reminder_freq_weekly\">Недељно</string>\n    <string name=\"password_reminder_freq_biweekly\">Двонедељно</string>\n    <string name=\"password_reminder_freq_monthly\">Месечно</string>\n    <string name=\"password_reminder_freq_quarterly\">Тромесечно</string>\n    <string name=\"enter_password_2fas_message\">Изгледа да је ова 2FAS резервна копија шифрована. Унесите лозинку испод.</string>\n    <string name=\"enter_password_authy_message\">Изгледа да су ваши Authy токени шифровани. Затворите Aegis, отворите Authy и откључајте токене својом лозинком. Уместо тога, Aegis такође може покушати да дешифрује ваше Authy токене за вас, ако унесете своју лозинку испод.</string>\n    <string name=\"enter_password_aegis_title\">Унесите лозинку за увоз</string>\n    <string name=\"period_hint\">Период (секунди)</string>\n    <string name=\"algorithm_hint\">Функција хеша</string>\n    <string name=\"type\">Тип</string>\n    <string name=\"share\">Дели</string>\n    <string name=\"yes\">Да</string>\n    <string name=\"no\">Не</string>\n    <string name=\"undo\">Поништи</string>\n    <string name=\"unlock\">Откључај</string>\n    <string name=\"advanced\">Напредно</string>\n    <string name=\"counter\">Бројач</string>\n    <string name=\"digits\">Цифре</string>\n    <string name=\"secret\">Тајна</string>\n    <string name=\"scan\">Скенирај QR кôд</string>\n    <string name=\"scan_image\">Скенирај слику</string>\n    <string name=\"enter_manually\">Унеси ручно</string>\n    <string name=\"set_up_biometric\">Подесите биометријско откључавање</string>\n    <string name=\"copy\">Копирај</string>\n    <string name=\"edit\">Измени</string>\n    <string name=\"select_all\">Изабери све</string>\n    <string name=\"assign_icons\">Додели иконице</string>\n    <string name=\"assign_groups\">Додели групи</string>\n    <string name=\"assign_groups_dialog_summary\">Изаберите групу којој желите да доделите изабране уносе.</string>\n    <string name=\"assign_groups_dialog_dropdown\">Изаберите групу</string>\n    <string name=\"favorite\" comment=\"Verb\">Додај у омиљено</string>\n    <string name=\"unfavorite\" comment=\"Verb\">Уклони из омиљеног</string>\n    <string name=\"error_all_caps\">ГРЕШКА</string>\n    <string name=\"password\">Лозинка</string>\n    <string name=\"confirm_password\">Потврдите лозинку</string>\n    <string name=\"show_password\">Прикажи лозинку</string>\n    <string name=\"new_entry\">Нови унос</string>\n    <string name=\"add_new_entry\">Додај нови унос</string>\n    <string name=\"unlock_vault_error\">Није могуће откључати трезор</string>\n    <string name=\"unlock_vault_error_description\">Нетачна лозинка. Проверите да нисте погрешили у куцању лозинке.</string>\n    <string name=\"password_equality_error\">Лозинке би требало да буду идентичне и не могу бити празне</string>\n    <string name=\"snackbar_authentication_method\">Изаберите методу за аутентификацију</string>\n    <string name=\"encrypting_vault\">Шифровање трезора</string>\n    <string name=\"exporting_vault\">Извожење трезора</string>\n    <string name=\"reading_file\">Читање фајла</string>\n    <string name=\"requesting_root_access\">Захтевање root приступа</string>\n    <string name=\"analyzing_qr\">Анализирање QR кода</string>\n    <string name=\"analyzing_qr_multiple\">Анализирање QR кода %1$d/%2$d (%3$s)</string>\n    <plurals name=\"added_new_entries\">\n        <item quantity=\"one\">Додат %d нови унос у трезор</item>\n        <item quantity=\"few\">Додата %d нова уноса у трезор</item>\n        <item quantity=\"other\">Додато %d нових уноса у трезор</item>\n    </plurals>\n    <string name=\"importing_icon_pack\">Увожење пакета иконица</string>\n    <string name=\"delete_entry\">Избришите унос</string>\n    <string name=\"delete_entry_description\">Желите ли заиста да избришете овај унос?</string>\n    <string name=\"delete_entry_explanation\">Ова радња не онемогућава 2FA за:\\n<b>%s</b>\\n\\nДа бисте спречили губитак приступа, уверите се да сте онемогућили 2FA или да имате алтернативни начин за генерисање кодова за ову услугу.</string>\n    <string name=\"delete_entries\">Избришите уносе</string>\n    <plurals name=\"delete_entries_description\">\n        <item quantity=\"one\">Желите ли заиста да избришете %d унос?</item>\n        <item quantity=\"few\">Желите ли заиста да избришете %d уноса?</item>\n        <item quantity=\"other\">Желите ли заиста да избришете %d уноса?</item>\n    </plurals>\n    <string name=\"discard_changes\">Одбацити промене?</string>\n    <string name=\"discard_changes_description\">Ваше промене нису сачуване</string>\n    <string name=\"saving_profile_error\">Грешка при чувању профила</string>\n    <string name=\"saving_assign_icons_error\">Грешка при додели иконица</string>\n    <string name=\"welcome\">Добро дошли</string>\n    <string name=\"app_description\">Aegis је бесплатна, безбедна и апликација отвореног кода за двофакторску аутентификацију</string>\n    <string name=\"setup_completed\">Подешавање завршено</string>\n    <string name=\"setup_completed_description\">Aegis је подешен и спреман за рад.</string>\n    <string name=\"vault_not_found\">Трезор није пронађен, покретање подешавања…</string>\n    <string name=\"copied\">Копирано</string>\n    <string name=\"errors_copied\">Грешке су копиране у привремену меморију</string>\n    <string name=\"version_copied\">Верзија је копирана у привремену меморију</string>\n    <string name=\"error_required_field\">Ово поље је неопходно</string>\n    <string name=\"error_occurred\">Дошло је до грешке</string>\n    <string name=\"decryption_error\">Дошло је до грешке приликом покушаја откључавања трезора</string>\n    <string name=\"decryption_corrupt_error\">Дошло је до грешке приликом покушаја откључавања трезора. Ваш трезор је можда оштећен.</string>\n    <string name=\"saving_error\">Дошло је до грешке приликом покушаја чувања трезора</string>\n    <string name=\"vault_init_error\">Дошло је до грешке приликом покушаја састављања трезора</string>\n    <string name=\"vault_load_error\">Дошло је до грешке приликом покушаја учитавања трезора из меморије</string>\n    <string name=\"biometric_decrypt_error\">Дошло је до грешке приликом покушаја дешифровања трезора биометријском аутентификацијом. Ово се обично дешава само ако су безбедносна подешавања вашег уређаја промењена. Откључајте трезор својом лозинком и поново конфигуришите биометријску аутентификацију у подешавањима Aegis-а.</string>\n    <string name=\"biometric_init_error\">Дошло је до грешке приликом покушаја припремања биометријске аутентификације. Ово се обично дешава само ако су безбедносна подешавања вашег уређаја промењена. Откључајте трезор својом лозинком и поново конфигуришите биометријску аутентификацију у подешавањима Aegis-а.</string>\n    <string name=\"disable_encryption\">Онемогући шифровање</string>\n    <string name=\"disable_encryption_description\">Желите ли заиста да онемогућите шифровање? Ово ће довести до тога да трезор буде сачуван као обичан текст. <b>Аутоматско прављење резервних копија ће такође бити онемогућено</b>.</string>\n    <string name=\"enable_encryption_error\">Дошло је до грешке приликом омогућавања шифровања</string>\n    <string name=\"disable_encryption_error\">Дошло је до грешке приликом онемогућавања шифровања</string>\n    <string name=\"backup_successful\">Прављење резервне копије је успешно заказано</string>\n    <string name=\"backup_error\">Дошло је до грешке приликом покушаја прављења резервне копије</string>\n    <string name=\"backup_status_success\">Последње прављење резервне копије успешно: %s</string>\n    <string name=\"backup_status_failed\">Последње прављење резервне копије неуспешно: %s</string>\n    <string name=\"backup_status_none\">Још увек није направљена ниједна резервна копија</string>\n    <string name=\"backup_warning_password\">Резервне копије су шифроване коришћењем посебне лозинке конфигурисане у подешавањима „Безбедност”.</string>\n    <string name=\"documentsui_error\">Изгледа да DocumentsUI недостаје на вашем уређају. Ово је важна компонента система неопходна за избор и прављење докумената. Ако сте користили алатку за чишћење вашег уређаја од „непотребних прединсталираних апликација”, можда сте га случајно избрисали и мораћете да га поново инсталирате.</string>\n    <string name=\"icon_pack_import_error\">Дошло је до грешке приликом покушаја увожења пакета иконица</string>\n    <string name=\"icon_pack_import_exists_error\">Пакет иконица који покушавате да увезете већ постоји. Желите ли да га замените?</string>\n    <string name=\"icon_pack_delete_error\">Дошло је до грешке приликом покушаја брисања пакета иконица</string>\n    <plurals name=\"icon_pack_info\">\n        <item quantity=\"one\">%d иконица</item>\n        <item quantity=\"few\">%d иконице</item>\n        <item quantity=\"other\">%d иконица</item>\n    </plurals>\n    <string name=\"icon_custom\">Прилагођена</string>\n    <string name=\"permission_denied\">Дозвола одбијена</string>\n    <string name=\"andotp_new_format\">Нови формат (v0.6.3 или новије) </string>\n    <string name=\"andotp_old_format\">Стари формат (v0.6.2 или старије) </string>\n    <string name=\"choose_andotp_importer\">Који формат има фајл резервне копије andOTP?</string>\n    <string name=\"choose_totpauth_importer\">Да ли је ова резервна копија TOTP Authenticator шифрована лозинком?</string>\n    <string name=\"choose_application\">Изаберите апликацију из које бисте желели да увезете</string>\n    <string name=\"choose_theme\">Изаберите жељену тему</string>\n    <string name=\"choose_account_name_position\">Изаберите жељени положај назива налога</string>\n    <string name=\"choose_view_mode\">Изаберите жељени режим приказа</string>\n    <string name=\"choose_copy_behavior\">Изаберите жељено понашање копирања</string>\n    <string name=\"parsing_file_error\">Дошло је до грешке приликом покушаја рашчлањивања фајла</string>\n    <string name=\"file_not_found\">Грешка: Фајл није пронађен</string>\n    <string name=\"reading_file_error\">Дошло је до грешке приликом покушаја читања фајла</string>\n    <string name=\"app_lookup_error\">Грешка: Апликација није инсталирана</string>\n    <string name=\"app_version_error\">Верзија %s која је инсталирана није подржана. Недавне верзије су почеле да шифрују неке фајлове у фолдеру интерне меморије, због чега Aegis не може да приступи информацијама које су му потребне за увоз. Покушај увоза ће вероватно довести до грешке. Желите ли да ипак наставите?</string>\n    <string name=\"root_error\">Грешка: Није могуће добити root приступ</string>\n    <plurals name=\"imported_entries_count\">\n        <item quantity=\"one\">Увезен %d унос</item>\n        <item quantity=\"few\">Увезено %d уноса</item>\n        <item quantity=\"other\">Увезено %d уноса</item>\n    </plurals>\n    <plurals name=\"entries_shown\">\n        <item quantity=\"one\">Приказ %d уноса</item>\n        <item quantity=\"few\">Приказ %d уноса</item>\n        <item quantity=\"other\">Приказ %d уноса</item>\n    </plurals>\n    <string name=\"intro_import_error_title\">Дошло је до грешке приликом увоза трезора</string>\n    <string name=\"import_error_title\">Дошло је до једне или више грешака приликом увоза</string>\n    <string name=\"exporting_vault_error\">Дошло је до грешке приликом покушаја увожења трезора</string>\n    <string name=\"exported_vault\">Трезор је извезен</string>\n    <string name=\"encryption_set_password_error\">Дошло је до грешке приликом покушаја постављања лозинке.</string>\n    <string name=\"encryption_enable_biometrics_error\">Дошло је до грешке приликом покушаја омогућавања биометријског откључавања. Неки уређаји имају лоше имплементације биометријске аутентификације и вероватно је да је ваш један од њих. Уместо овога, размислите о преласку на конфигурацију само са лозинком.</string>\n    <string name=\"no_cameras_available\">Нема доступних камера</string>\n    <string name=\"read_qr_error\">Дошло је до грешке приликом покушаја читања QR кода</string>\n    <string name=\"read_qr_error_phonefactor\">Aegis није компатибилан са Microsoft-овим власничким 2FA алгоритмом. Обавезно изаберите „Подешавање апликације без обавештења” када конфигуришете 2FA у Office 365.</string>\n    <string name=\"partial_google_auth_import\">Откривен је непотпун извоз Google Authenticator-а</string>\n    <string name=\"partial_google_auth_import_warning\">Неки QR кодови недостају у вашем увозу. Следећи кодови нису пронађени:\\n\\n<b>%s</b>\\n\\nМожете да наставите са увозом овог делимичног извоза, али препоручујемо да покушате поново са свим QR кодовима како не бисте ризиковали да изгубите приступ токенима.</string>\n    <string name=\"missing_qr_code_descriptor\">• QR кôд %d</string>\n    <plurals name=\"import_partial_export_anyway\">\n        <item quantity=\"one\">Ипак увести %d токен</item>\n        <item quantity=\"few\">Ипак увести %d токена</item>\n        <item quantity=\"other\">Ипак увести %d токена</item>\n    </plurals>\n    <string name=\"import_google_auth_failure\">Неуспешан увоз извоза Google Authenticator-а</string>\n    <string name=\"unrelated_google_auth_batches_error\">Извоз садржи информације за неповезану серију. Покушајте да увезете 1 по једну серију.</string>\n    <string name=\"no_tokens_can_be_imported\">Као резултат тога, не могу се увести токени</string>\n    <string name=\"unlocking_vault\">Откључавање трезора</string>\n    <string name=\"rename_group\">Преименовање групе</string>\n    <string name=\"no_group_selection\">Ако унос није део ниједне групе, може се наћи под „Нема групе”.</string>\n    <string name=\"remove_group\">Уклоните групу</string>\n    <string name=\"remove_group_description\">Сигурно желите да уклоните ову групу? Уноси у овој групи ће аутоматски бити пребачени у ”Без групе”.</string>\n    <string name=\"remove_unused_groups\">Избришите некоришћене групе</string>\n    <string name=\"remove_unused_groups_description\">Желите ли заиста да избришете све групе које нису додељене уносу?</string>\n    <string name=\"remove_icon_pack\">Уклоните пакет иконица</string>\n    <string name=\"remove_icon_pack_description\">Сигурно желите да уклоните овај пакет иконица? Уноси који користе овај пакет иконица неће бити промењени.</string>\n    <string name=\"details\">Детаљи</string>\n    <string name=\"show_error_details\">Прикажи детаље грешке</string>\n    <string name=\"lock\">Закључавање</string>\n    <string name=\"name\">Назив</string>\n    <string name=\"no_group\">Без групе</string>\n    <string name=\"sort\" comment=\"Title of the Sort button in the top action bar of the main view\">Сортирај</string>\n    <string name=\"sort_alphabetically\">Издавач (А до Ш)</string>\n    <string name=\"sort_alphabetically_reverse\">Издавач (Ш до А)</string>\n    <string name=\"sort_alphabetically_name\">Налог (А до Ш)</string>\n    <string name=\"sort_alphabetically_name_reverse\">Налог (Ш до А)</string>\n    <string name=\"sort_usage_count\">Бројач коришћења</string>\n    <string name=\"sort_last_used\">Последње коришћење</string>\n    <string name=\"sort_custom\">Прилагођено</string>\n    <string name=\"last_used\">Последње коришћење</string>\n    <string name=\"last_used_never\">никада</string>\n    <string name=\"new_group\">Нова група…</string>\n    <string name=\"group\">Група</string>\n    <string name=\"group_name_hint\">Назив групе</string>\n    <string name=\"preference_manage_groups\">Измените групе</string>\n    <string name=\"preference_manage_groups_summary\">Управљајте групама и бришите их овде</string>\n    <string name=\"preference_reset_usage_count\">Поништи бројач коришћења</string>\n    <string name=\"preference_reset_usage_count_summary\">Поништи бројач коришћења за све уносе у трезору</string>\n    <string name=\"preference_reset_usage_count_dialog\">Сигурно подесити бројач коришћења на 0 за све уносе у трезору?</string>\n    <string name=\"note\" comment=\"Users can add a note to an entry\">Напомена</string>\n    <string name=\"clear\">Обриши</string>\n    <string name=\"pref_highlight_entry_title\">Нагласи токене на додир</string>\n    <string name=\"pref_highlight_entry_summary\">Привремено нагласи токене на додир како би били видљивији</string>\n    <string name=\"pref_minimize_on_copy_title\">Минимизирај приликом копирања</string>\n    <string name=\"pref_minimize_on_copy_summary\">Минимизирајте апликацију након копирања токена</string>\n    <string name=\"pref_copy_behavior_title\">Копирај токене у привремену меморију</string>\n    <string name=\"pref_search_behavior_title\">Понашање претраге</string>\n    <string name=\"pref_pause_entry_title\">Замрзните токене на додир</string>\n    <string name=\"pref_pause_entry_summary\">Паузирајте аутоматско освежавање токена тако што ћете их додирнути. Токени се неће ажурирати све док су фокусирани. Ово захтева опције „Истакни токене приликом додира” или „Додирни за откривање”.</string>\n    <string name=\"pin_keyboard_description\">Унесите своју лозинку да бисте омогућили PIN тастатуру. Имајте на уму да ово функционише само ако се ваша лозинка састоји само од бројева</string>\n    <string name=\"pin_keyboard_error\">Грешка приликом омогућавања PIN тастатуре</string>\n    <string name=\"pin_keyboard_error_description\">Није могуће подесити PIN тастатуру. Ваша лозинка мора да се састоји само од бројева.</string>\n    <string name=\"pin_keyboard_disabled\">Лозинка је промењена. PIN тастатура више неће бити приказана.</string>\n    <string name=\"selected\">Изабрано</string>\n    <string name=\"dark_theme_title\">Тамна тема</string>\n    <string name=\"light_theme_title\">Светла тема</string>\n    <string name=\"amoled_theme_title\">AMOLED тема</string>\n    <string name=\"system_theme_title\">Прати режим уштеде батерије</string>\n    <string name=\"system_amoled_theme_title\">Прати режим уштеде батерије (AMOLED)</string>\n    <string name=\"normal_viewmode_title\">Нормалан</string>\n    <string name=\"compact_mode_title\">Компактно</string>\n    <string name=\"small_mode_title\">Мало</string>\n    <string name=\"tiles_mode_title\">Плочице</string>\n    <string name=\"unknown_issuer\">Непознати издавач</string>\n    <string name=\"unknown_account_name\">Непознати назив налога</string>\n    <plurals name=\"import_error_dialog\">\n        <item quantity=\"one\">Aegis није могао да увезе %d токен. Овај токен ће бити прескочен. Притисните „детаљи” да бисте видели више информација о грешци.</item>\n        <item quantity=\"few\">Aegis није могао да увезе %d токена. Ови токени ће бити прескочени. Притисните „детаљи” да бисте видели више информација о грешкама.</item>\n        <item quantity=\"other\">Aegis није могао да увезе %d токена. Ови токени ће бити прескочени. Притисните „детаљи” да бисте видели више информација о грешкама.</item>\n    </plurals>\n    <string name=\"unable_to_process_deeplink\">Није могуће обрадити дубоки линк</string>\n    <string name=\"unable_to_read_qrcode_file\">Није могуће прочитати и обрадити QR кôд из фајла: %s.</string>\n    <string name=\"unable_to_process_shared_text\">Није могуће обрадити дељени текст као OTP</string>\n    <string name=\"unable_to_read_qrcode_files\">Није могуће прочитати и обрадити неке QR кодове. Биће увезено само %1$d/%2$d уноса.</string>\n    <string name=\"unable_to_generate_qrcode\">Није могуће генерисати QR кôд</string>\n    <string name=\"select_picture\">Изаберите слику</string>\n    <string name=\"select_icon\">Изаберите иконицу</string>\n    <string name=\"tile_open_vault\" comment=\"label for a quick settings tile that opens the app when tapped\">Отвори трезор</string>\n    <string name=\"tile_open_scanner\" comment=\"label for a quick settings tile that opens the QR code scanner when tapped\">Отвори скенер</string>\n    <string name=\"toggle_checkboxes\">Укључи поља за потврду</string>\n    <string name=\"search\">Претрага</string>\n    <string name=\"channel_name_lock_status\">Статус закључавања</string>\n    <string name=\"channel_description_lock_status\">Aegis може да направи трајно обавештење да вас обавести када је трезор закључан</string>\n    <string name=\"vault_unlocked_state\">Трезор је откључан. Додирните овде да га закључате.</string>\n    <string name=\"version\">Верзија</string>\n    <string name=\"changelog\">Евиденција промена</string>\n    <string name=\"whats_new\">Шта је ново</string>\n    <string name=\"github_description\">Изворни кôд, проблеми и информације</string>\n    <string name=\"license\">Лиценца</string>\n    <string name=\"license_description\">Aegis Authenticator је лиценциран под GPLv3</string>\n    <string name=\"third_party_licenses\">Лиценце треће стране</string>\n    <string name=\"third_party_licenses_description\">Лиценце библиотека трећих страна које користи Aegis</string>\n    <string name=\"country_netherlands\">Холандија</string>\n    <string name=\"email_us\">Напишите имејл</string>\n    <string name=\"visit_website\">Посетите наш веб-сајт</string>\n    <string name=\"about_support\">Подршка</string>\n    <string name=\"support_rate\">Оцени</string>\n    <string name=\"support_rate_description\">Подржите нас тако што ћете оставити рецензију у Google Play продавници</string>\n    <string name=\"webview_error\">Овај уређај не подржава веб-приказ, који је неопходан за преглед евиденције промена и лиценце. Недостаје системска компонента.</string>\n    <string name=\"email\">Имејл</string>\n    <string name=\"time_sync_warning_title\">Аутоматска синхронизација времена</string>\n    <string name=\"time_sync_warning_message\">Aegis се ослања на системско време да буде синхронизовано да генерише исправне кодове. Одступање од само неколико секунди може довести до нетачних кодова. Изгледа да ваш уређај није конфигурисан да аутоматски синхронизује време. Желите ли да то урадите сада?</string>\n    <string name=\"time_sync_warning_disable\">Престаните да ме упозоравате. Знам шта радим.</string>\n    <string name=\"google_qr_export_unrelated\">Пронађен је неповезан QR кôд. Покушајте да рестартујете скенер.</string>\n    <plurals name=\"google_qr_export_scanned\">\n        <item quantity=\"one\">Скениран %1$d/%2$d QR кодова</item>\n        <item quantity=\"few\">Скенирана %1$d/%2$d QR кодова</item>\n        <item quantity=\"other\">Скенирано %1$d/%2$d QR кодова</item>\n    </plurals>\n    <string name=\"google_qr_export_unexpected\">Очекиван је QR кôд #%1$d, али је уместо тога скениран #%2$d</string>\n    <string name=\"backup_error_bar_message\"><b>Недавно није успело прављење резервне копије трезора</b></string>\n    <string name=\"backup_error_dialog_details\" comment=\"The first parameter is the type of backup (e.g. built-in or Android backup). The second parameter is an elapsed time in the style of 'x seconds/minutes/days ago'.\">Недавни покушај прављења резервне копије трезора помоћу %1$s није успео, јер је дошло до грешке. Прављење резервне копије је покушано %2$s. Проверите подешавања резервних копија да бисте били сигурни да се прављење резервних копија може успешно завршити.\n    </string>\n    <string name=\"backup_permission_error_dialog_details\" comment=\"The first parameter is the type of backup (e.g. built-in or Android backup). The second parameter is an elapsed time in the style of 'x seconds/minutes/days ago'.\">Недавни покушај прављења резервне копије трезора помоћу %1$s није успео, јер Aegis није имао дозволу да пише на одредиште резервне копије. Прављење резервне копије је покушано %2$s. До ове грешке може доћи ако сте преместили/преименовали одредиште резервне копије или ако сте недавно вратили Aegis из резервне копије. Поново конфигуришите одредиште резервне копије.    </string>\n    <string name=\"backup_system_builtin\">уграђене аутоматске резервне копије у Aegis</string>\n    <string name=\"backup_system_android\">система резервних копија у облаку у Android-у</string>\n    <string name=\"backup_reminder_bar_message_with_latest\" comment=\"The parameter is an elapsed time in the style of 'x seconds/minutes/days ago'\">        Последња резервна копија је застарела (%s)\n    </string>\n    <string name=\"backup_reminder_bar_message\">        Нема резервне копије промена\n    </string>\n    <string name=\"backup_reminder_bar_dialog_title\">Нема резервне копије промена</string>\n    <string name=\"backup_reminder_bar_dialog_summary\">Недавне промене у трезору још увек немају направљену резервну копију. Важно је да редовно правите резервне копије како бисте спречили губитак приступа вашим налозима. Размислите о подешавању аутоматског прављења резервних копија у менију подешавања.\n    </string>\n    <string name=\"backup_reminder_bar_dialog_accept\">Подесите резервне копије</string>\n    <string name=\"backup_plaintext_export_warning\"><b>Трезор је недавно извезен као обичан текст</b></string>\n    <string name=\"pref_show_plaintext_warning_hint\">Не приказуј поново ово упозорење</string>\n    <string name=\"backup_plaintext_warning_explanation\">Ово упозорење се приказује зато што сте недавно извезли нешифровану копију трезора. Да бисте одржали безбедност ваших токена, препоручујемо да избришете овај фајл када више не буде потребан.</string>\n    <string name=\"switch_camera\">Промени камеру</string>\n    <string name=\"empty_list\">Нема кодова за приказ. Почните да додајете уносе додиром на знак плус у доњем десном углу</string>\n    <string name=\"empty_list_title\">Нема пронађених уноса</string>\n    <string name=\"empty_group_list\">Нема група за приказ. Додајте групе на екран за уређивање уноса</string>\n    <string name=\"empty_group_list_title\">Нема пронађених група</string>\n    <string name=\"no_icon_packs\">Још увек није увезен ниједан пакет иконица. Додирните знак плус да бисте га увезли. Савет: испробајте <a href=\"https://aegis-icons.github.io\">aegis-icons</a>.</string>\n    <string name=\"no_icon_packs_title\">Нема пакета иконица</string>\n    <string name=\"pick_icon\">Изаберите иконицу</string>\n    <string name=\"uncategorized\">Некатегоризовано</string>\n    <string name=\"done\">Готово</string>\n    <plurals name=\"qr_count\">\n        <item quantity=\"one\">%d / %d QR кôд</item>\n        <item quantity=\"few\">%d / %d QR кода</item>\n        <item quantity=\"other\">%d / %d QR кодова</item>\n    </plurals>\n    <string name=\"next\">Следеће</string>\n    <string name=\"previous\">Претходно</string>\n    <string name=\"copy_uri\">Копирај URI</string>\n    <string name=\"unable_to_copy_uri_to_clipboard\">Није могуће копирати URI у привремену меморију</string>\n    <string name=\"uri_copied_to_clipboard\">URI је копиран у привремену меморију</string>\n    <string name=\"transfer_entry_description\">Скенирајте овај QR кôд помоћу апликације за аутентификацију у коју желите да пренесете овај унос</string>\n    <string name=\"google_auth_compatible_transfer_description\">Скенирајте ове QR кодове користећи Aegis или Google Authenticator.\\n\\nЗбог ограничења апликације Google Authenticator, обухваћени су само TOTP и HOTP токени који користе SHA1 и производе 6-цифрене кодове</string>\n    <string name=\"password_strength_very_weak\">Веома слаба</string>\n    <string name=\"password_strength_weak\">Слаба</string>\n    <string name=\"password_strength_fair\">Задовољавајућа</string>\n    <string name=\"password_strength_good\">Добра</string>\n    <string name=\"password_strength_strong\">Јака</string>\n    <string name=\"password_strength_unknown\">Лозинка је предуга за анализу снаге</string>\n    <string name=\"pref_pin_keyboard_title\">Користи PIN тастатуру на закључаном екрану</string>\n    <string name=\"pref_pin_keyboard_summary\">Омогућите ово ако желите да омогућите PIN тастатуру на закључаном екрану. Ово функционише само за нумеричке лозинке</string>\n    <string name=\"title_activity_preferences\">Подешавања</string>\n    <string name=\"title_activity_manage_groups\">Управљање групама</string>\n    <string name=\"title_activity_transfer\">Пренос уноса</string>\n    <string name=\"title_activity_about\">О програму</string>\n    <string name=\"title_activity_edit_entry\">Измена уноса</string>\n    <string name=\"title_activity_scan_qr\">Скенирајте QR кôд</string>\n    <string name=\"title_activity_import_entries\">Увоз уноса</string>\n    <string name=\"title_activity_assign_icons\">Додела иконица</string>\n    <string name=\"title_activity_licenses\">Лиценце треће стране</string>\n    <string name=\"dialog_wipe_entries_title\">Чишћење уноса</string>\n    <string name=\"dialog_wipe_entries_message\">Ваш трезор већ садржи уносе. Желите ли да уклоните ове уносе пре увоза овог фајла?\\n\\n<b>На тај начин ћете трајно изгубити приступ постојећим уносима у трезору.</b></string>\n    <string name=\"dialog_wipe_entries_checkbox\">Очисти садржаје трезора</string>\n    <string name=\"panic_trigger_ignore_toast\">Aegis је примио сигнал панике, али је подешавање онемогућено, сигнал панике се занемарује</string>\n    <string name=\"pref_panic_trigger_title\">Избриши трезор при сигналу панике</string>\n    <string name=\"pref_panic_trigger_summary\">Избришите трезор када се од Ripple прими сигнал панике</string>\n    <string name=\"import_vault\">Увоз Aegis трезора</string>\n    <string name=\"import_vault_hint\">Желите да увезете из друге 2FA апликације? Прво довршите подешавање, а затим пређите на мени подешавања.</string>\n    <plurals name=\"import_duplicate_toast\">\n        <item quantity=\"one\">Опозван је %d потенцијални дупликат. Прегледајте листу уноса.</item>\n        <item quantity=\"few\">Опозвана су %d потенцијална дупликата. Прегледајте листу уноса.</item>\n        <item quantity=\"other\">Опозвано је %d потенцијалних дупликата. Прегледајте листу уноса.</item>\n    </plurals>\n    <string name=\"importer_help_2fas\">Доставите фајл резервне копије 2FAS Authenticator-а.</string>\n    <string name=\"importer_help_aegis\">Доставите фајл извоза/резервне копије Aegis-а.</string>\n    <string name=\"importer_help_authenticator_plus\">Доставите фајл извоза Authenticator Plus добијен преко <b>Подешавања -&gt; Резервна копија и враћање -&gt; Извоз као текст и HTML</b>.</string>\n    <string name=\"importer_help_authy\">Доставите копију <b>/data/data/com.authy.authy/shared_prefs/com.authy.storage.tokens.authenticator.xml</b>, која се налази у фолдеру интерне меморије Authy-а.</string>\n    <string name=\"importer_help_andotp\">Доставите фајл извоза/резервне копије andOTP-а.</string>\n    <string name=\"importer_help_bitwarden\">Доставите фајл извоза/резервне копије Bitwarden-а. Шифровани фајлови нису подржани.</string>\n    <string name=\"importer_help_battle_net_authenticator\">Доставите копију <b>/data/data/com.blizzard.messenger/shared_prefs/com.blizzard.messenger.authenticator_preferences.xml</b>, која се налази у фолдеру интерне меморије Battle.net Authenticator-а.</string>\n    <string name=\"importer_help_duo\">Доставите копију <b>/data/data/com.duosecurity.duomobile/files/duokit/accounts.json</b>, која се налази у фолдеру интерне меморије DUO-а.</string>\n    <string name=\"importer_help_ente_auth\">Доставите фајл извоза Ente Auth-а. Тренутно су подржани само нешифровани фајлови.</string>\n    <string name=\"importer_help_freeotp\">FreeOTP 2: Доставите фајл резервне копије.\\nFreeOtp 1.x: Доставите копију <b>/data/data/org.fedorahosted.freeotp/shared_prefs/tokens.xml</b>, која се налази у фолдеру интерне меморије FreeOTP-а.</string>\n    <string name=\"importer_help_freeotp_plus\">Доставите фајл извоза FreeOTP+-а.</string>\n    <string name=\"importer_warning_title_freeotp2\">Компатибилност FreeOTP 2</string>\n    <string name=\"importer_warning_message_freeotp2\">Постоји низ проблема у FreeOTP 2 који могу довести до оштећених резервних копија. Aegis ће покушати да спаси што је могуће више уноса, али је могуће да неки или чак сви не успеју да увезу.</string>\n    <string name=\"importer_help_google_authenticator\"><b>Подржани су само фајлови базе података из Google Authenticator v5.10 и старијих</b>.\\n\\nДоставите копију <b>/data/data/com.google.android.apps.authenticator2/databases/databases</b>, која се налази у фолдеру интерне меморије Google Authenticator-а.</string>\n    <string name=\"importer_help_microsoft_authenticator\">Доставите копију <b>/data/data/com.azure.authenticator/databases/PhoneFactor</b>, која се налази у фолдеру интерне меморије Microsoft Authenticator-а.</string>\n    <string name=\"importer_help_plain_text\">Доставите обичан текстуални фајл са URI-јем Google Authenticator-а у сваком реду.</string>\n    <string name=\"importer_help_steam\"><b>Steam v3.0 и новији нису подржани</b>. Доставите копију <b>/data/data/com.valvesoftware.android.steam.community/files/Steamguard-*.json</b>, која се налази у фолдеру интерне меморије Steam-а.</string>\n    <string name=\"importer_help_totp_authenticator\">Доставите фајл извоза TOTP Authenticator-а.</string>\n    <string name=\"importer_help_winauth\">Доставите фајл извоза WinAuth-а.</string>\n    <string name=\"import_assign_icons_dialog_title\">Доделите иконице</string>\n    <string name=\"import_assign_icons_dialog_text\">Желите ли да доделите иконице увезеним уносима?</string>\n    <string name=\"importer_encrypted_exception_google_authenticator\">Шифрован унос је прескочен: %s</string>\n    <string name=\"importer_help_direct\">Увезите уносе директно из %s. Ово захтева да апликација буде инсталирана на овом уређају и да се одобри роот приступ за Aegis.</string>\n    <string name=\"groups\">Групе</string>\n    <string name=\"pref_focus_search\">Фокус на претрагу приликом покретања апликације</string>\n    <string name=\"pref_focus_search_summary\">Фокусирање на претрагу одмах након отварања апликације.</string>\n    <string name=\"pref_grouping_halves\">Половине</string>\n    <string name=\"pref_grouping_none\">Нема груписања</string>\n    <string name=\"pref_grouping_size_two\">Груписање по 2</string>\n    <string name=\"pref_grouping_size_three\">Груписање по 3</string>\n    <string name=\"pref_grouping_size_four\">Груписање по 4</string>\n    <string name=\"pref_copy_behavior_never\">Никада</string>\n    <string name=\"pref_copy_behavior_single_tap\">Један додир</string>\n    <string name=\"pref_copy_behavior_double_tap\">Дупли додир</string>\n    <string name=\"pref_account_name_position_hidden\">Скривено</string>\n    <string name=\"pref_account_name_position_end\">Поред издавача</string>\n    <string name=\"pref_account_name_position_below\">Испод издавача</string>\n    <plurals name=\"time_elapsed_seconds\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"one\">пре %d секунду</item>\n        <item quantity=\"few\">пре %d секунде</item>\n        <item quantity=\"other\">пре %d секунди</item>\n    </plurals>\n    <plurals name=\"time_elapsed_minutes\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"one\">пре %d минут</item>\n        <item quantity=\"few\">пре %d минута</item>\n        <item quantity=\"other\">пре %d минута</item>\n    </plurals>\n    <plurals name=\"time_elapsed_hours\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"one\">пре %d сат</item>\n        <item quantity=\"few\">пре %d сата</item>\n        <item quantity=\"other\">пре %d сати</item>\n    </plurals>\n    <plurals name=\"time_elapsed_days\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"one\">пре %d дан</item>\n        <item quantity=\"few\">пре %d дана</item>\n        <item quantity=\"other\">пре %d дана</item>\n    </plurals>\n    <plurals name=\"time_elapsed_years\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"one\">пре %d годину</item>\n        <item quantity=\"few\">пре %d године</item>\n        <item quantity=\"other\">пре %d година</item>\n    </plurals>\n    <plurals name=\"dropdown_checkboxes_default_count\">\n        <item quantity=\"one\">%d предмет изабран</item>\n        <item quantity=\"few\">%d предмета изабрано</item>\n        <item quantity=\"other\">%d предмета изабрано</item>\n    </plurals>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-sr-rSP-v29/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources></resources>\n"
  },
  {
    "path": "app/src/main/res/values-sv-rSE/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources xmlns:tools=\"http://schemas.android.com/tools\">\n    <string name=\"action_settings\">Inställningar</string>\n    <string name=\"action_about\">Om</string>\n    <string name=\"action_delete\">Radera</string>\n    <string name=\"action_transfer\">Överför</string>\n    <string name=\"action_edit_icon\">Redigera ikon</string>\n    <string name=\"action_reset_usage_count\">Nollställ användningar</string>\n    <string name=\"action_reset_usage_count_dialog\">Är du säker på att du vill ändra antalet användningar av denna post till 0?</string>\n    <string name=\"action_default_icon\">Återställ standardikon</string>\n    <string name=\"discard\">Ignorera</string>\n    <string name=\"save\">Spara</string>\n    <string name=\"all\">Alla</string>\n    <string name=\"issuer\">Utfärdare</string>\n    <string name=\"yandex_pin\">Pinkod (4–16 siffror)</string>\n    <string name=\"motp_pin\">Pinkod (4 siffror)</string>\n    <string name=\"suggested\">Förslag</string>\n    <string name=\"usage_count\">Användningar</string>\n    <string name=\"warning\">Varning</string>\n    <string name=\"pref_cat_appearance_app\">App</string>\n    <string name=\"pref_cat_appearance_entries\">Poster</string>\n    <string name=\"pref_cat_backups_android\">Android</string>\n    <string name=\"pref_cat_backups_auto\">Automatiska säkerhetskopior</string>\n    <string name=\"pref_section_behavior_title\">Beteende</string>\n    <string name=\"pref_section_behavior_summary\">Anpassa beteendet när du interagerar med listan över poster.</string>\n    <string name=\"pref_section_appearance_title\">Utseende</string>\n    <string name=\"pref_section_appearance_summary\">Ställ in tema, språk och andra inställningar som påverkar appens utseende.</string>\n    <string name=\"pref_section_security_title\">Säkerhet</string>\n    <string name=\"pref_section_security_summary\">Konfigurera kryptering, biometrisk upplåsning, automatisk låsning och andra säkerhetsinställningar.</string>\n    <string name=\"pref_section_import_export_title\">Import &amp; export</string>\n    <string name=\"pref_section_import_export_summary\">Importera säkerhetskopior från Aegis eller andra autentiseringsappar. Skapa manuella exporter av ditt Aegis-valv.</string>\n    <string name=\"pref_section_audit_log_title\">Granskningslogg</string>\n    <string name=\"pref_section_audit_log_summary\">Hitta en lista över alla rapporterade viktiga händelser som har inträffat i appen.</string>\n    <string name=\"pref_section_backups_title\">Säkerhetskopior</string>\n    <string name=\"pref_section_backups_summary\">Ställ in automatiska säkerhetskopior till en plats som du väljer eller aktivera deltagande i Androids molnsäkerhetskopieringssystem.</string>\n    <string name=\"pref_section_icon_packs\">Ikonpaket</string>\n    <string name=\"pref_section_icon_packs_summary\">Hantera och importera ikonpaket</string>\n    <string name=\"pref_select_theme_title\">Tema</string>\n    <string name=\"pref_dynamic_colors_title\">Dynamiska färger</string>\n    <string name=\"pref_dynamic_colors_summary\">Tillämpa ett överlägg baserat på färgerna i ditt Android-tema</string>\n    <string name=\"pref_view_mode_title\">Visningsläge</string>\n    <string name=\"pref_lang_title\">Språk</string>\n    <string name=\"pref_show_icons_title\">Visa ikoner</string>\n    <string name=\"pref_show_icons_summary\">Visa ikoner bredvid varje post</string>\n    <string name=\"pref_code_group_size_title\">Gruppering av kodsiffror</string>\n    <string name=\"pref_code_group_size_summary\">Välj antal siffror att gruppera koder efter</string>\n    <string name=\"pref_account_name_position_title\">Visa kontonamn</string>\n    <string name=\"pref_show_next_code_title\">Visa nästa kod</string>\n    <string name=\"pref_show_next_code_summary\">Generera och visa nästa kod i förtid</string>\n    <string name=\"pref_expiration_state_title\">Indikera när koder är på väg att utlöpa</string>\n    <string name=\"pref_expiration_state_summary\">Ändra färgen på koderna och få dem att blinka när de är på väg att utlöpa</string>\n    <string name=\"pref_expiration_state_fallback\">Ändra färgen på koderna när de är på väg att utlöpa</string>\n    <string name=\"pref_shared_issuer_account_name_title\">Visa kontonamn endast vid behov</string>\n    <string name=\"pref_shared_issuer_account_name_summary\">Visa kontonamn endast när de har samma utfärdare. Andra kontonamn kommer att döljas.</string>\n    <string name=\"pref_account_name_position_summary_override\">Denna inställning åsidosätts av visningsläget paneler. Kontonamn kommer att visas nedanför utfärdaren.</string>\n    <string name=\"pref_import_file_title\">Importera från fil</string>\n    <string name=\"pref_import_file_summary\">Importera polletter från en fil</string>\n    <string name=\"pref_android_backups_title\">Android-molnsäkerhetskopior</string>\n    <string name=\"pref_android_backups_summary\">Tillåt att Androids molnsäkerhetskopieringssystem inkluderar Aegis valv i sina säkerhetskopior. Detta stöds endast för krypterade valv.</string>\n    <string name=\"pref_android_backups_hint\"><i>Säkerhetskopior mellan enheter (D2D) är alltid tillåtna, oavsett inställningen ovan</i></string>\n    <string name=\"pref_backups_title\">Säkerhetskopiera valvet automatiskt</string>\n    <string name=\"pref_backups_summary\">Skapa automatiskt säkerhetskopior av valvet i externt lagringsutrymme när ändringar görs. Detta stöds endast för krypterade valv.</string>\n    <string name=\"pref_backups_reminder_title\">Påminnelse om säkerhetskopiering</string>\n    <string name=\"pref_backups_reminder_summary\">Visa en påminnelse om att säkerhetskopiera ditt valv ifall du inte har säkerhetskopierat dina senaste ändringar.</string>\n    <string name=\"pref_backups_reminder_dialog_title\">Inaktivera påminnelse om säkerhetskopiering</string>\n    <string name=\"pref_backups_reminder_dialog_summary\">Inaktivering av denna påminnelse innebär att Aegis inte kommer att meddela dig om du har ändringar som ännu inte har säkerhetskopierats. Detta utsätter dig för risken att förlora åtkomst till dina polletter. Är du säker på att du vill inaktivera påminnelsen?</string>\n    <string name=\"pref_backups_versioning_strategy_title\">Strategi för säkerhetskopiering</string>\n    <string name=\"pref_backups_versioning_strategy_keep_x_versions\">Behåll ett antal versioner</string>\n    <string name=\"pref_backups_versioning_strategy_single_backup\">Enstaka säkerhetskopia</string>\n    <string name=\"pref_backups_versioning_strategy_single_backup_warning\">Den valda strategin för säkerhetskopiering är inte tillförlitlig och rekommenderas inte. Ett enda säkerhetskopieringsfel kan leda till att du förlorar din enda säkerhetskopia.</string>\n    <string name=\"pref_backups_versioning_strategy_dialog_title\">Välj en strategi för säkerhetskopiering</string>\n    <string name=\"pref_backups_location_title\">Plats för säkerhetskopior</string>\n    <string name=\"pref_backups_location_summary\">Säkerhetskopior kommer att lagras i</string>\n    <string name=\"pref_backup_location_summary\">Säkerhetskopia kommer att lagras i</string>\n    <string name=\"pref_backups_trigger_title\">Skapa säkerhetskopia</string>\n    <string name=\"pref_backups_trigger_summary\">Skapa en säkerhetskopia manuellt</string>\n    <string name=\"pref_backups_versions_title\">Antal versioner att behålla</string>\n    <string name=\"pref_backups_versions_infinite\">\\u221E</string>\n    <plurals name=\"pref_backups_versions_summary\">\n        <item quantity=\"one\">Behåll %1$d version av säkerhetskopian</item>\n        <item quantity=\"other\">Behåll %1$d versioner av säkerhetskopian</item>\n    </plurals>\n    <string name=\"pref_backups_versions_infinite_summary\">Behåll ett oändligt antal versioner av säkerhetskopian</string>\n    <string name=\"pref_import_app_title\">Importera från app</string>\n    <string name=\"pref_import_app_summary\">Importera polletter från en app (kräver rotåtkomst)</string>\n    <string name=\"pref_export_title\">Exportera</string>\n    <string name=\"pref_export_summary\">Exportera valvet</string>\n    <string name=\"pref_password_reminder_title\">Lösenordspåminnelse</string>\n    <string name=\"pref_google_auth_export_title\">Exportera för Google Authenticator</string>\n    <string name=\"pref_google_auth_export_descriptor\">Genererar exportrutkoder kompatibla med Google Authenticator</string>\n    <string name=\"pref_google_auth_export_no_data\">Inga data att exportera</string>\n    <plurals name=\"pref_google_auth_export_incompatible_entries\">\n        <item quantity=\"one\">Hoppade över %d inkompatibel post</item>\n        <item quantity=\"other\">Hoppade över %d inkompatibla poster</item>\n    </plurals>\n    <string name=\"pref_password_reminder_summary\">Visa en påminnelse om att ange lösenordet %s, så att du inte glömmer bort det.</string>\n    <string name=\"pref_password_reminder_summary_disabled\">Inaktiverad</string>\n    <string name=\"pref_secure_screen_title\">Skärmsäkerhet</string>\n    <string name=\"pref_secure_screen_summary\">Blockera skärmdumpar och andra försök att avbilda skärmen inne i appen</string>\n    <string name=\"pref_tap_to_reveal_title\">Tryck för att visa</string>\n    <string name=\"pref_tap_to_reveal_summary\">Koderna kommer att döljas som standard. Tryck på polletterna för att visa koden.</string>\n    <string name=\"pref_tap_to_reveal_time_title\">Tidsgräns för tryck för att visa</string>\n    <string name=\"pref_auto_lock_title\">Autolås</string>\n    <string name=\"pref_auto_lock_summary\">När %s</string>\n    <string name=\"pref_auto_lock_summary_disabled\">Inaktiverad</string>\n    <string name=\"pref_auto_lock_prompt\">Lås Aegis automatiskt när</string>\n    <string name=\"pref_auto_lock_type_back_button\">Tillbaka-knappen trycks ner</string>\n    <string name=\"pref_auto_lock_type_minimize\">Appen är minimerad</string>\n    <string name=\"pref_auto_lock_type_device_lock\">Enheten är låst</string>\n    <string name=\"pref_backup_password_category\">Säkerhetskopiering &amp; export</string>\n    <string name=\"pref_backup_password_title\">Separat lösenord för säkerhetskopiering &amp; export</string>\n    <string name=\"pref_backup_password_summary\">Om aktiverad, kan lösenordet som används för att låsa upp appen inte längre användas för att dekryptera säkerhetskopior eller exporterade filer.</string>\n    <string name=\"pref_backup_password_change_title\">Ändra lösenord för säkerhetskopiering &amp; export</string>\n    <string name=\"pref_backup_password_change_summary\">Ange ett nytt lösenord som kommer att användas för att kryptera valvet under säkerhetskopiering och export.</string>\n    <string name=\"pref_encryption_title\">Kryptering</string>\n    <string name=\"pref_encryption_summary\">Kryptera valvet och lås upp det med ett lösenord eller biometri</string>\n    <string name=\"pref_biometrics_title\">Biometrisk upplåsning</string>\n    <string name=\"pref_biometrics_summary\">Tillåt biometrisk autentisering för att låsa upp valvet</string>\n    <string name=\"pref_search_behavior_summary\">Sök igenom: %s</string>\n    <string name=\"pref_search_behavior_prompt\">Sök i något av följande fält</string>\n    <string name=\"pref_search_behavior_type_name\">Namn</string>\n    <string name=\"pref_search_behavior_type_issuer\">Utfärdare</string>\n    <string name=\"pref_search_behavior_type_note\">Anteckning</string>\n    <string name=\"pref_search_behavior_type_groups\">Grupper</string>\n    <string name=\"pref_set_password_title\">Ändra lösenord</string>\n    <string name=\"pref_set_password_summary\">Ange ett nytt lösenord som kommer att krävas för att låsa upp ditt valv</string>\n    <string name=\"no_events_title\">Inga rapporterade händelser</string>\n    <string name=\"no_events_description\">Inga viktiga händelser har rapporterats i appen</string>\n    <string name=\"event_title_vault_unlocked\">Valv upplåst</string>\n    <string name=\"event_description_vault_unlocked\">Valvet har låsts upp</string>\n    <string name=\"event_title_backup_created\">Säkerhetskopia skapad</string>\n    <string name=\"event_description_backup_created\">En säkerhetskopia av valvet har skapats</string>\n    <string name=\"event_title_android_backup_created\">Säkerhetskopia skapad av Android</string>\n    <string name=\"event_description_android_backup_created\">En säkerhetskopia av valvet har skapats av Android</string>\n    <string name=\"event_title_vault_exported\">Valv exporterat</string>\n    <string name=\"event_description_vault_exported\">En kopia av valvet har exporterats</string>\n    <string name=\"event_title_entry_shared\">Post delades</string>\n    <string name=\"event_description_entry_shared\">En post delades</string>\n    <string name=\"event_title_vault_unlock_failed_password\">Valvupplåsning misslyckades (lösenord)</string>\n    <string name=\"event_description_vault_unlock_failed_password\">Ett försök att låsa upp valvet med ett lösenord misslyckades</string>\n    <string name=\"event_title_vault_unlock_failed_biometrics\">Valvupplåsning misslyckades (biometri)</string>\n    <string name=\"event_description_vault_unlock_failed_biometrics\">Ett försök att låsa upp valvet med biometri misslyckades</string>\n    <string name=\"event_unknown\">Okänd händelsetyp</string>\n    <string name=\"audit_log_entry_deleted\">(raderad)</string>\n    <string name=\"today_at_time\">I dag kl. %1$s</string>\n    <string name=\"day_of_week_at_time\">%1$s kl. %2$s</string>\n    <string name=\"export_encrypted\">Kryptera valvet</string>\n    <string name=\"export_help\">Denna åtgärd kommer att exportera valvet från Aegis interna lagring. Välj det format som du vill att din export ska vara i:</string>\n    <string name=\"export_warning_unencrypted\">Du håller på att exportera en okrypterad kopia av ditt Aegis-valv. <b>Detta rekommenderas inte.</b></string>\n    <string name=\"export_warning_password\">Exporter krypteras med ett separat lösenord som konfigureras i Säkerhet-inställningarna.</string>\n    <string name=\"understand_risk_accept\">Jag förstår risken</string>\n    <string name=\"export_format_aegis\">Aegis (.JSON)</string>\n    <string name=\"export_format_google_auth_uri\">Textfil (.TXT)</string>\n    <string name=\"export_format_html\">Webbsida (.HTML)</string>\n    <string name=\"export_format_hint\">Exportformat</string>\n    <string name=\"export_all_groups\">Exportera alla grupper</string>\n    <string name=\"export_choose_groups\">Välj vilka grupper som ska exporteras</string>\n    <plurals name=\"export_groups_selected_count\">\n        <item quantity=\"one\">%d grupp vald</item>\n        <item quantity=\"other\">%d grupper valda</item>\n    </plurals>\n    <string name=\"export_no_groups_selected\">Inga grupper valda för exportering</string>\n    <string name=\"export_html_title\" comment=\"The title of an HTML export document\">Aegis Authenticator-export</string>\n    <string name=\"choose_authentication_method\">Säkerhet</string>\n    <string name=\"authentication_method_explanation\">Aegis är en säkerhetsfokuserad 2FA-app. Polletter lagras i ett valv som, om så önskas, kan krypteras med ett lösenord som du väljer. Om en angripare får tag i din krypterade valvfil, kommer hen inte att kunna komma åt innehållet utan att känna till lösenordet.\\n\\nVi har förvalt det alternativ som vi tror passar bäst för din enhet.</string>\n    <string name=\"authentication_method_none\">Ingen</string>\n    <string name=\"authentication_method_none_description\">Inget lösenord behövs för att låsa upp valvet och det kommer inte att krypteras. <b>Detta alternativ rekommenderas inte.</b></string>\n    <string name=\"authentication_method_password\">Lösenord</string>\n    <string name=\"authentication_method_password_description\">Ett lösenord behövs för att låsa upp valvet.</string>\n    <string name=\"authentication_method_password_explanation\">Varning: Om du glömmer ditt lösenord så förlorar du åtkomst till dina polletter för alltid. Det finns inget sätt att återfå dem utan lösenordet.</string>\n    <string name=\"authentication_method_biometrics\">Biometri</string>\n    <string name=\"authentication_method_biometrics_description\">Förutom ett lösenord kan biometri registrerad på den här enheten, som ett fingeravtryck eller ditt ansikte, användas för att låsa upp valvet.</string>\n    <string name=\"authentication\">Lås upp valvet</string>\n    <string name=\"authentication_multiline\" comment=\"The newline in the middle is used for aesthetic purposes\">Lås upp\\nvalvet</string>\n    <string name=\"auth_use_biometrics\">Eller tryck här för att använda <font fgcolor=\"#FF0D86C1\">biometri</font></string>\n    <string name=\"set_password\">Vänligen ange ett lösenord</string>\n    <string name=\"set_group\">Vänligen ange ett gruppnamn</string>\n    <string name=\"set_number\">Vänligen ange ett nummer</string>\n    <string name=\"set_password_confirm\">Vänligen bekräfta lösenordet</string>\n    <string name=\"invalid_password\">Lösenordet är felaktigt</string>\n    <string name=\"invalidated_biometrics\">En förändring av din enhets säkerhetsinställningar har upptäckts. Vänligen gå till \\\"Aegis -&gt; Inställningar -&gt; Säkerhet -&gt; Biometrisk upplåsning\\\" för att inaktivera och återaktivera biometrisk upplåsning.</string>\n    <string name=\"password_reminder\">Vänligen ange ditt lösenord. Ibland ber vi dig att göra detta så att du inte glömmer det.</string>\n    <string name=\"password_reminder_dialog_title\">Biometrisk upplåsning förvald</string>\n    <string name=\"password_reminder_dialog_message\">Ibland uppmanar vi dig att ange ditt lösenord i stället för att säkerställa att du inte har glömt det och inte kommer att bli utelåst från ditt valv. Efter att du har angett ditt lösenord en gång kommer Aegis att återgå till biometrisk upplåsning tills det är dags för en ny lösenordspåminnelse.</string>\n    <string name=\"password_reminder_freq_never\">Aldrig</string>\n    <string name=\"password_reminder_freq_weekly\">Varje vecka</string>\n    <string name=\"password_reminder_freq_biweekly\">Varannan vecka</string>\n    <string name=\"password_reminder_freq_monthly\">Varje månad</string>\n    <string name=\"password_reminder_freq_quarterly\">Varje kvartal</string>\n    <string name=\"enter_password_2fas_message\">Det verkar som om denna 2FAS-säkerhetskopia är krypterad. Vänligen ange lösenordet nedan.</string>\n    <string name=\"enter_password_authy_message\">Det ser ut som om dina Authy-polletter är krypterade. Vänligen stäng Aegis, öppna Authy och lås upp polletterna med ditt lösenord. Alternativt kan Aegis försöka att dekryptera dina Authy-polletter åt dig, om du anger ditt lösenord nedan.</string>\n    <string name=\"enter_password_aegis_title\">Vänligen ange lösenordet för import</string>\n    <string name=\"period_hint\">Period (sekunder)</string>\n    <string name=\"algorithm_hint\">Hashfunktion</string>\n    <string name=\"type\">Typ</string>\n    <string name=\"share\">Dela</string>\n    <string name=\"yes\">Ja</string>\n    <string name=\"no\">Nej</string>\n    <string name=\"undo\">Ångra</string>\n    <string name=\"unlock\">Lås upp</string>\n    <string name=\"advanced\">Avancerat</string>\n    <string name=\"counter\">Räknare</string>\n    <string name=\"digits\">Siffror</string>\n    <string name=\"secret\">Hemlig nyckel</string>\n    <string name=\"scan\">Skanna rutkod</string>\n    <string name=\"scan_image\">Skanna bild</string>\n    <string name=\"enter_manually\">Ange manuellt</string>\n    <string name=\"set_up_biometric\">Konfigurera biometrisk upplåsning</string>\n    <string name=\"copy\">Kopiera</string>\n    <string name=\"edit\">Redigera</string>\n    <string name=\"select_all\">Markera alla</string>\n    <string name=\"assign_icons\">Tilldela ikoner</string>\n    <string name=\"assign_groups\">Tilldela till grupp</string>\n    <string name=\"assign_groups_dialog_summary\">Välj en grupp som du vill tilldela de valda posterna till.</string>\n    <string name=\"assign_groups_dialog_dropdown\">Välj grupp</string>\n    <string name=\"favorite\" comment=\"Verb\">Favoritmarkera</string>\n    <string name=\"unfavorite\" comment=\"Verb\">Ta bort som favorit</string>\n    <string name=\"error_all_caps\">FEL</string>\n    <string name=\"password\">Lösenord</string>\n    <string name=\"confirm_password\">Bekräfta lösenord</string>\n    <string name=\"show_password\">Visa lösenord</string>\n    <string name=\"new_entry\">Ny post</string>\n    <string name=\"add_new_entry\">Lägg till ny post</string>\n    <string name=\"unlock_vault_error\">Kunde inte låsa upp valvet</string>\n    <string name=\"unlock_vault_error_description\">Felaktigt lösenord. Kontrollera att du inte skrev fel lösenord.</string>\n    <string name=\"password_equality_error\">Lösenorden måste vara identiska och får inte vara tomma</string>\n    <string name=\"snackbar_authentication_method\">Vänligen välj en autentiseringsmetod</string>\n    <string name=\"encrypting_vault\">Krypterar valvet</string>\n    <string name=\"exporting_vault\">Exporterar valvet</string>\n    <string name=\"optimizing_icon\">Optimerar ikon</string>\n    <string name=\"optimizing_icon_multiple\">Optimerar ikoner %1$d/%2$d</string>\n    <string name=\"reading_file\">Läser fil</string>\n    <string name=\"requesting_root_access\">Begär rotåtkomst</string>\n    <string name=\"analyzing_qr\">Analyserar rutkod</string>\n    <string name=\"analyzing_qr_multiple\">Analyserar rutkod %1$d/%2$d (%3$s)</string>\n    <plurals name=\"added_new_entries\">\n        <item quantity=\"one\">Lade till %d ny post i valvet</item>\n        <item quantity=\"other\">Lade till %d nya poster i valvet</item>\n    </plurals>\n    <string name=\"importing_icon_pack\">Importerar ikonpaket</string>\n    <string name=\"delete_entry\">Radera post</string>\n    <string name=\"delete_entry_description\">Är du säker på att du vill radera denna post?</string>\n    <string name=\"delete_entry_explanation\">Denna åtgärd inaktiverar inte 2FA för:\\n<b>%s</b>\\n\\nFör att undvika att förlora åtkomst, kontrollera att du har inaktiverat 2FA eller att du har ett alternativt sätt att generera koder för denna tjänst.</string>\n    <string name=\"delete_entries\">Radera poster</string>\n    <plurals name=\"delete_entries_description\">\n        <item quantity=\"one\">Är du säker på att du vill radera %d post?</item>\n        <item quantity=\"other\">Är du säker på att du vill radera %d poster?</item>\n    </plurals>\n    <string name=\"discard_changes\">Ignorera ändringar?</string>\n    <string name=\"discard_changes_description\">Dina ändringar har inte sparats</string>\n    <string name=\"saving_profile_error\">Fel när profil skulle sparas</string>\n    <string name=\"saving_assign_icons_error\">Fel vid tilldelning av ikoner</string>\n    <string name=\"welcome\">Välkommen</string>\n    <string name=\"app_description\">Aegis är en gratis, säker och öppenkällkodad 2FA-app</string>\n    <string name=\"setup_completed\">Konfigurationen slutförd</string>\n    <string name=\"setup_completed_description\">Aegis har konfigurerats och är redo att användas.</string>\n    <string name=\"vault_not_found\">Valvet hittades inte, startar konfiguration …</string>\n    <string name=\"copied\">Kopierad</string>\n    <string name=\"errors_copied\">Fel kopierade till urklipp</string>\n    <string name=\"version_copied\">Version kopierad till urklipp</string>\n    <string name=\"error_required_field\">Detta fält är obligatoriskt</string>\n    <string name=\"error_occurred\">Ett fel uppstod</string>\n    <string name=\"decryption_error\">Ett fel uppstod när valvet skulle låsas upp</string>\n    <string name=\"decryption_corrupt_error\">Ett fel uppstod när valvet skulle låsas upp. Din valvfil kan vara korrupt.</string>\n    <string name=\"saving_error\">Ett fel uppstod när valvet skulle sparas</string>\n    <string name=\"vault_init_error\">Ett fel uppstod när valvet skulle initieras</string>\n    <string name=\"vault_load_error\">Ett fel uppstod när valvet skulle laddas från lagringsutrymmet</string>\n    <string name=\"biometric_decrypt_error\">Ett fel uppstod när valvet skulle dekrypteras med biometrisk autentisering. Detta händer vanligtvis bara om din enhets säkerhetsinställningar har ändrats. Vänligen lås upp valvet med ditt lösenord och konfigurera biometrisk autentisering på nytt i inställningarna för Aegis.</string>\n    <string name=\"biometric_init_error\">Ett fel uppstod när biometrisk autentisering skulle förberedas. Detta händer vanligtvis bara om din enhets säkerhetsinställningar har ändrats. Vänligen lås upp valvet med ditt lösenord och konfigurera biometrisk autentisering på nytt i inställningarna för Aegis.</string>\n    <string name=\"disable_encryption\">Inaktivera kryptering</string>\n    <string name=\"disable_encryption_description\">Är du säker på att du vill inaktivera kryptering? Detta kommer att göra att valvet lagras som klartext. <b>Automatiska säkerhetskopior kommer också att inaktiveras.</b></string>\n    <string name=\"enable_encryption_error\">Ett fel uppstod när kryptering skulle aktiveras</string>\n    <string name=\"disable_encryption_error\">Ett fel uppstod när kryptering skulle inaktiveras</string>\n    <string name=\"backup_successful\">Säkerhetskopieringen schemalades framgångsrikt</string>\n    <string name=\"backup_error\">Ett fel uppstod när en säkerhetskopia skulle skapas</string>\n    <string name=\"backup_status_success\">Senaste säkerhetskopieringen lyckades: %s</string>\n    <string name=\"backup_status_failed\">Senaste säkerhetskopieringen misslyckades: %s</string>\n    <string name=\"backup_status_none\">Inga säkerhetskopior har ännu skapats</string>\n    <string name=\"backup_warning_password\">Säkerhetskopior krypteras med ett separat lösenord som konfigureras i Säkerhet-inställningarna.</string>\n    <string name=\"documentsui_error\">DocumentsUI verkar saknas på din enhet. Detta är en viktig systemkomponent som behövs för att välja och skapa dokument. Om du har använt ett verktyg för att &quot;debloata&quot; din enhet, kan du av misstag ha tagit bort den och måste i så fall installera om den.</string>\n    <string name=\"icon_pack_import_error\">Ett fel uppstod när ett ikonpaket skulle importeras</string>\n    <string name=\"icon_pack_import_exists_error\">Ikonpaketet som du försöker importera finns redan. Vill du skriva över det?</string>\n    <string name=\"icon_pack_delete_error\">Ett fel uppstod när ett ikonpaket skulle raderas</string>\n    <plurals name=\"icon_pack_info\">\n        <item quantity=\"one\">%d ikon</item>\n        <item quantity=\"other\">%d ikoner</item>\n    </plurals>\n    <string name=\"icon_custom\">Anpassad</string>\n    <string name=\"permission_denied\">Åtkomst nekad</string>\n    <string name=\"andotp_new_format\">Nytt format (v0.6.3 eller nyare) </string>\n    <string name=\"andotp_old_format\">Gammalt format (v0.6.2 eller äldre) </string>\n    <string name=\"choose_andotp_importer\">Vilket format har säkerhetskopieringsfilen från andOTP?</string>\n    <string name=\"choose_totpauth_importer\">Är denna säkerhetskopia från TOTP Authenticator krypterad med ett lösenord?</string>\n    <string name=\"choose_application\">Välj den applikation som du vill importera från</string>\n    <string name=\"choose_theme\">Välj önskat tema</string>\n    <string name=\"choose_account_name_position\">Välj önskad kontonamnsplacering</string>\n    <string name=\"choose_view_mode\">Välj önskat visningsläge</string>\n    <string name=\"choose_copy_behavior\">Välj önskat kopieringsbeteende</string>\n    <string name=\"parsing_file_error\">Ett fel uppstod när filen skulle tolkas</string>\n    <string name=\"file_not_found\">Fel: Filen hittades inte</string>\n    <string name=\"reading_file_error\">Ett fel uppstod när filen skulle läsas</string>\n    <string name=\"app_lookup_error\">Fel: Appen är inte installerad</string>\n    <string name=\"app_version_error\">Versionen av %s som är installerad stöds ej. De senaste versionerna har börjat att kryptera några av filerna i den interna lagringskatalogen, vilket gör att Aegis inte kan komma åt den information som behövs för importen. Att försöka importera kommer sannolikt att resultera i ett fel. Vill du fortsätta ändå?</string>\n    <string name=\"root_error\">Fel: Kunde inte få rotåtkomst</string>\n    <plurals name=\"imported_entries_count\">\n        <item quantity=\"one\">Importerade %d post</item>\n        <item quantity=\"other\">Importerade %d poster</item>\n    </plurals>\n    <plurals name=\"entries_shown\">\n        <item quantity=\"one\">Visar %d post</item>\n        <item quantity=\"other\">Visar %d poster</item>\n    </plurals>\n    <string name=\"intro_import_error_title\">Ett fel uppstod när valvet skulle importeras</string>\n    <string name=\"import_error_title\">Ett eller flera fel uppstod under importen</string>\n    <string name=\"exporting_vault_error\">Ett fel uppstod när valvet skulle exporteras</string>\n    <string name=\"exported_vault\">Valvet har exporterats</string>\n    <string name=\"encryption_set_password_error\">Ett fel uppstod när lösenordet skulle anges.</string>\n    <string name=\"encryption_enable_biometrics_error\">Ett fel uppstod när biometrisk upplåsning skulle aktiveras. Vissa enheter har en dålig implementering av biometrisk autentisering, och det är troligt att din är en av dem. Överväg att byta till en konfiguration med endast lösenord i stället.</string>\n    <string name=\"no_cameras_available\">Inga kameror tillgängliga</string>\n    <string name=\"read_qr_error\">Ett fel uppstod när rutkoden skulle läsas</string>\n    <string name=\"read_qr_error_phonefactor\">Aegis är inte kompatibel med Microsofts egenutvecklade 2FA-algoritm. Vänligen se till att välja \\\"Konfigurera applikation utan aviseringar\\\" när du konfigurerar 2FA i Office 365.</string>\n    <string name=\"partial_google_auth_import\">Ofullständig Google Authenticator-export upptäckt</string>\n    <string name=\"partial_google_auth_import_warning\">Vissa rutkoder saknas från din import. Följande koder hittades inte:\\n\\n<b>%s</b>\\n\\nDu kan fortsätta att importera denna partiella export, men vi rekommenderar att du försöker igen med alla rutkoder, så att du inte riskerar att förlora åtkomst till några polletter.</string>\n    <string name=\"missing_qr_code_descriptor\">• rutkod %d</string>\n    <plurals name=\"import_partial_export_anyway\">\n        <item quantity=\"one\">Importera %d pollett ändå</item>\n        <item quantity=\"other\">Importera %d polletter ändå</item>\n    </plurals>\n    <string name=\"import_google_auth_failure\">Import av Google Authenticator-export misslyckades</string>\n    <string name=\"unrelated_google_auth_batches_error\">Exporten innehåller information gällande en orelaterad omgång. Försök att importera 1 omgång i taget.</string>\n    <string name=\"no_tokens_can_be_imported\">Inga polletter kan importeras till följd av detta</string>\n    <string name=\"unlocking_vault\">Låser upp valvet</string>\n    <string name=\"rename_group\">Byt namn på grupp</string>\n    <string name=\"no_group_selection\">Om en post inte ingår i någon grupp, kan den hittas under \\\"Grupplös\\\".</string>\n    <string name=\"remove_group\">Ta bort grupp</string>\n    <string name=\"remove_group_description\">Är du säker på att du vill ta bort denna grupp? Poster i denna grupp kommer automatiskt att flyttas till \\'Grupplös\\'.</string>\n    <string name=\"remove_unused_groups\">Radera oanvända grupper</string>\n    <string name=\"remove_unused_groups_description\">Är du säker på att du vill radera alla grupper som inte är tilldelade någon post?</string>\n    <string name=\"remove_icon_pack\">Ta bort ikonpaket</string>\n    <string name=\"remove_icon_pack_description\">Är du säker på att du vill ta bort detta ikonpaket? Poster som använder ikoner från detta paket kommer inte att påverkas.</string>\n    <string name=\"details\">Detaljer</string>\n    <string name=\"show_error_details\">Visa detaljerad felinformation</string>\n    <string name=\"lock\">Lås</string>\n    <string name=\"name\">Namn</string>\n    <string name=\"no_group\">Grupplös</string>\n    <string name=\"sort\" comment=\"Title of the Sort button in the top action bar of the main view\">Sortera</string>\n    <string name=\"sort_alphabetically\">Utfärdare (A till Ö)</string>\n    <string name=\"sort_alphabetically_reverse\">Utfärdare (Ö till A)</string>\n    <string name=\"sort_alphabetically_name\">Konto (A till Ö)</string>\n    <string name=\"sort_alphabetically_name_reverse\">Konto (Ö till A)</string>\n    <string name=\"sort_usage_count\">Användningar</string>\n    <string name=\"sort_last_used\">Senast använd</string>\n    <string name=\"sort_custom\">Anpassad</string>\n    <string name=\"last_used\">Senast använd</string>\n    <string name=\"last_used_never\">aldrig</string>\n    <string name=\"new_group\">Ny grupp…</string>\n    <string name=\"group\">Grupp</string>\n    <string name=\"group_name_hint\">Gruppnamn</string>\n    <string name=\"preference_manage_groups\">Redigera grupper</string>\n    <string name=\"preference_manage_groups_summary\">Hantera och radera dina grupper här</string>\n    <string name=\"preference_reset_usage_count\">Nollställ användningar</string>\n    <string name=\"preference_reset_usage_count_summary\">Nollställ antalet användningar av alla poster i ditt valv</string>\n    <string name=\"preference_reset_usage_count_dialog\">Är du säker på att du vill ändra antalet användningar av alla poster i ditt valv till 0?</string>\n    <string name=\"note\" comment=\"Users can add a note to an entry\">Anteckning</string>\n    <string name=\"clear\">Rensa</string>\n    <string name=\"dialog_duplicate_entry_title\" comment=\"'Duplicate' is a noun here\">Duplicerad post</string>\n    <string name=\"dialog_duplicate_entry_message\">Denna post har samma namn och utfärdare som en eller flera befintliga poster. Hur vill du gå vidare?</string>\n    <string name=\"dialog_duplicate_entry_overwrite_title\">Skriv över befintlig post eller befintliga poster</string>\n    <string name=\"dialog_duplicate_entry_overwrite_subtitle\">Ersätt den befintliga posten eller de befintliga posterna med den/de nya. Åtgärden kan inte ångras</string>\n    <string name=\"dialog_duplicate_entry_suffix_title\">Lägg till suffix</string>\n    <string name=\"dialog_duplicate_entry_suffix_subtitle\">Lägg till ett suffix till namnet på den här nya posten. Det nya namnet blir: %s</string>\n    <string name=\"dialog_duplicate_entry_cancel_title\">Avbryt spara</string>\n    <string name=\"dialog_duplicate_entry_cancel_subtitle\">Gör att du kan redigera posten innan du försöker spara den igen</string>\n    <plurals name=\"dialog_duplicate_entry_overwrite_dialog_message\">\n        <item quantity=\"one\">Är du säker på att du vill ta bort %d post med följande namn:\\n\\n%s - %s</item>\n        <item quantity=\"other\">Är du säker på att du vill ta bort %d poster med följande namn:\\n\\n%s - %s</item>\n    </plurals>\n    <string name=\"dialog_duplicate_entry_overwrite_dialog_title\">Bekräfta borttagning</string>\n    <string name=\"pref_haptic_feedback_summary\">Få enheten att vibrera när koder uppdateras</string>\n    <string name=\"pref_haptic_feedback_title\">Haptisk återkoppling</string>\n    <string name=\"pref_highlight_entry_title\">Markera polletter vid tryck</string>\n    <string name=\"pref_highlight_entry_summary\">Gör polletterna lättare att särskilja från varandra genom att tillfälligt markera dem vid tryck</string>\n    <string name=\"pref_groups_multiselect_title\">Välj flera grupper</string>\n    <string name=\"pref_groups_multiselect_summary\">Tillåt val av flera grupper samtidigt</string>\n    <string name=\"pref_minimize_on_copy_title\">Minimera vid kopiering</string>\n    <string name=\"pref_minimize_on_copy_summary\">Minimerar appen efter att en pollett har kopierats</string>\n    <string name=\"pref_copy_behavior_title\">Kopiera polletter till urklipp</string>\n    <string name=\"pref_search_behavior_title\">Sökbeteende</string>\n    <string name=\"pref_pause_entry_title\">Frys polletter vid tryck</string>\n    <string name=\"pref_pause_entry_summary\">Pausa automatisk uppdatering av polletterna genom att trycka på dem. Polletterna kommer inte att uppdateras så länge som de är i fokus. Kräver \\\"Markera polletter vid tryck\\\" eller \\\"Tryck för att visa\\\".</string>\n    <string name=\"pin_keyboard_description\">Ange ditt lösenord för att aktivera pinkodstangentbordet. Observera att detta bara fungerar om ditt lösenord endast består av siffror.</string>\n    <string name=\"pin_keyboard_error\">Fel vid aktivering av pinkodstangentbordet</string>\n    <string name=\"pin_keyboard_error_description\">Det går inte att aktivera pinkodstangentbordet. Ditt lösenord får endast bestå av siffror.</string>\n    <string name=\"pin_keyboard_disabled\">Lösenordet har ändrats. Pinkodstangentbordet kommer inte längre att visas.</string>\n    <string name=\"selected\">Valt</string>\n    <string name=\"dark_theme_title\">Mörkt tema</string>\n    <string name=\"light_theme_title\">Ljust tema</string>\n    <string name=\"amoled_theme_title\">AMOLED-tema</string>\n    <string name=\"system_theme_title\">Ställ in efter batterisparläge</string>\n    <string name=\"system_amoled_theme_title\">Ställ in efter batterisparläge (AMOLED)</string>\n    <string name=\"normal_viewmode_title\">Normalt</string>\n    <string name=\"compact_mode_title\">Kompakt</string>\n    <string name=\"small_mode_title\">Litet</string>\n    <string name=\"tiles_mode_title\">Paneler</string>\n    <string name=\"unknown_issuer\">Okänd utfärdare</string>\n    <string name=\"unknown_account_name\">Okänt kontonamn</string>\n    <plurals name=\"import_error_dialog\">\n        <item quantity=\"one\">Aegis kunde inte importera %d pollett. Denna pollett kommer att ignoreras. Tryck på \\'detaljer\\' för att se mer information om felet.</item>\n        <item quantity=\"other\">Aegis kunde inte importera %d polletter. Dessa polletter kommer att ignoreras. Tryck på \\'detaljer\\' för att se mer information om felen.</item>\n    </plurals>\n    <string name=\"unable_to_process_deeplink\">Kunde inte bearbeta djuplänk</string>\n    <string name=\"unable_to_read_qrcode_file\">Kunde inte läsa och bearbeta rutkod från fil: %s.</string>\n    <string name=\"unable_to_process_shared_text\">Kunde inte bearbeta delad text som OTP</string>\n    <string name=\"unable_to_read_qrcode_files\">Kunde inte läsa och bearbeta några av rutkoderna. Endast %1$d/%2$d poster kommer att importeras.</string>\n    <string name=\"unable_to_generate_qrcode\">Kunde inte generera rutkod</string>\n    <string name=\"select_picture\">Välj bild</string>\n    <string name=\"select_icon\">Välj ikon</string>\n    <string name=\"tile_open_vault\" comment=\"label for a quick settings tile that opens the app when tapped\">Öppna valv</string>\n    <string name=\"tile_open_scanner\" comment=\"label for a quick settings tile that opens the QR code scanner when tapped\">Öppna skanner</string>\n    <string name=\"toggle_checkboxes\">Växla kryssrutor</string>\n    <string name=\"search\">Sök</string>\n    <string name=\"channel_name_lock_status\">Låsstatus</string>\n    <string name=\"channel_description_lock_status\">Aegis kan skapa en beständig avisering för att meddela dig när valvet är låst</string>\n    <string name=\"vault_unlocked_state\">Valvet är olåst. Tryck här för att låsa.</string>\n    <string name=\"version\">Version</string>\n    <string name=\"changelog\">Ändringslogg</string>\n    <string name=\"whats_new\">Vad är nytt</string>\n    <string name=\"github_description\">Källkod, problem och information</string>\n    <string name=\"license\">Licens</string>\n    <string name=\"license_description\">Aegis Authenticator är licensierad under GPLv3</string>\n    <string name=\"third_party_licenses\">Tredjepartslicenser</string>\n    <string name=\"third_party_licenses_description\">Licenser för de tredjepartsbibliotek Aegis använder</string>\n    <string name=\"country_netherlands\">Nederländerna</string>\n    <string name=\"email_us\">Skriv ett mejl</string>\n    <string name=\"visit_website\">Besök vår webbplats</string>\n    <string name=\"about_support\">Support</string>\n    <string name=\"support_rate\">Betygsätt</string>\n    <string name=\"support_rate_description\">Stöd oss genom att lämna en recension i Google Play Store</string>\n    <string name=\"webview_error\">Denna enhet stöder inte WebView, vilket krävs för att visa ändringsloggen och licensen. Den saknar en systemkomponent.</string>\n    <string name=\"email\">E-post</string>\n    <string name=\"time_sync_warning_title\">Automatisk tidssynkronisering</string>\n    <string name=\"time_sync_warning_message\">Aegis förlitar sig på att systemtiden är i synk för att kunna generera korrekta koder. En avvikelse på bara några sekunder kan resultera i felaktiga koder. Det verkar som om din enhet inte är konfigurerad för att synkronisera tiden automatiskt. Vill du göra det nu?</string>\n    <string name=\"time_sync_warning_disable\">Sluta varna mig. Jag vet vad jag gör.</string>\n    <string name=\"google_qr_export_unrelated\">Orelaterad rutkod hittades. Pröva att starta om skannern.</string>\n    <plurals name=\"google_qr_export_scanned\">\n        <item quantity=\"one\">Skannade %1$d/%2$d rutkod</item>\n        <item quantity=\"other\">Skannade %1$d/%2$d rutkoder</item>\n    </plurals>\n    <string name=\"google_qr_export_unexpected\">Förutsatte rutkod #%1$d men skannade #%2$d i stället</string>\n    <string name=\"backup_error_bar_message\"><b>Säkerhetskopiering av valvet misslyckades nyligen</b></string>\n    <string name=\"backup_error_dialog_details\" comment=\"The first parameter is the type of backup (e.g. built-in or Android backup). The second parameter is an elapsed time in the style of 'x seconds/minutes/days ago'.\">        Ett nyligt försök att säkerhetskopiera valvet via %1$s misslyckades eftersom ett fel uppstod. Försöket gjordes för %2$s. Vänligen kontrollera dina säkerhetskopieringsinställningar för att se till att säkerhetskopior kan skapas framgångsrikt.\n    </string>\n    <string name=\"backup_permission_error_dialog_details\" comment=\"The first parameter is the type of backup (e.g. built-in or Android backup). The second parameter is an elapsed time in the style of 'x seconds/minutes/days ago'.\">        Ett nyligt försök att säkerhetskopiera valvet via %1$s misslyckades eftersom Aegis inte hade behörighet att skriva till lagringsplatsen för säkerhetskopior. Försöket gjordes för %2$s. Detta fel kan uppstå om du har flyttat/bytt namn på lagringsplatsen för säkerhetskopior eller om du nyligen har återställt Aegis från en säkerhetskopia. Vänligen konfigurera om lagringsplatsen för säkerhetskopior.\n    </string>\n    <string name=\"backup_system_builtin\">Aegis inbyggda automatiska säkerhetskopior</string>\n    <string name=\"backup_system_android\">Androids molnsäkerhetskopieringssystem</string>\n    <string name=\"backup_reminder_bar_message_with_latest\" comment=\"The parameter is an elapsed time in the style of 'x seconds/minutes/days ago'\">        Senaste säkerhetskopian är föråldrad (%s)\n    </string>\n    <string name=\"backup_reminder_bar_message\">        Ändringar är inte säkerhetskopierade\n    </string>\n    <string name=\"backup_reminder_bar_dialog_title\">Ändringarna är inte säkerhetskopierade</string>\n    <string name=\"backup_reminder_bar_dialog_summary\">        De senaste ändringarna i valvet har ännu inte säkerhetskopierats. Det är viktigt att regelbundet skapa säkerhetskopior för att förhindra att du förlorar åtkomst till dina konton. Vänligen överväg att konfigurera automatiska säkerhetskopior i inställningsmenyn.\n    </string>\n    <string name=\"backup_reminder_bar_dialog_accept\">Konfigurera säkerhetskopior</string>\n    <string name=\"backup_plaintext_export_warning\"><b>Valvet exporterades nyligen som klartext</b></string>\n    <string name=\"pref_show_plaintext_warning_hint\">Visa inte denna varning igen</string>\n    <string name=\"backup_plaintext_warning_explanation\">Denna varning visas eftersom du nyligen exporterade en okrypterad kopia av valvet. För att upprätthålla säkerheten för dina polletter rekommenderar vi att du raderar denna fil när den inte längre behövs.</string>\n    <string name=\"switch_camera\">Byt kamera</string>\n    <string name=\"empty_list\">Det finns inga koder att visa. Börja lägga till poster genom att trycka på plustecknet i det nedre högra hörnet.</string>\n    <string name=\"empty_list_title\">Inga poster hittades</string>\n    <string name=\"empty_group_list\">Det finns inga grupper att visa. Lägg till grupper i redigeringsläget för en post.</string>\n    <string name=\"empty_group_list_title\">Inga grupper hittades</string>\n    <string name=\"no_icon_packs\">Inga ikonpaket har importerats ännu. Tryck på plustecknet för att importera ett. Tips: testa <a href=\"https://aegis-icons.github.io\">aegis-icons</a>.</string>\n    <string name=\"no_icon_packs_title\">Inga ikonpaket</string>\n    <string name=\"pick_icon\">Välj en ikon</string>\n    <string name=\"uncategorized\">Okategoriserade</string>\n    <string name=\"done\">Klar</string>\n    <plurals name=\"qr_count\">\n        <item quantity=\"one\">%d / %d rutkod</item>\n        <item quantity=\"other\">%d / %d rutkoder</item>\n    </plurals>\n    <string name=\"next\">Nästa</string>\n    <string name=\"previous\">Föregående</string>\n    <string name=\"copy_uri\">Kopiera URI</string>\n    <string name=\"unable_to_copy_uri_to_clipboard\">Kunde inte kopiera URI till urklipp</string>\n    <string name=\"uri_copied_to_clipboard\">URI kopierad till urklipp</string>\n    <string name=\"transfer_entry_description\">Skanna denna rutkod med den autentiseringsapp som du vill överföra denna post till</string>\n    <string name=\"transfer_entry_brightness\">Tryck på rutkoden för att växla till/från full ljusstyrka på skärmen</string>\n    <string name=\"google_auth_compatible_transfer_description\">Skanna dessa rutkoder med Aegis eller Google Authenticator.\\n\\nPå grund av begränsningar i Google Authenticator-appen inkluderas endast TOTP- &amp; HOTP-polletter som använder SHA1 och producerar 6-siffriga koder.</string>\n    <string name=\"password_strength_very_weak\">Mycket svagt</string>\n    <string name=\"password_strength_weak\">Svagt</string>\n    <string name=\"password_strength_fair\">Skapligt</string>\n    <string name=\"password_strength_good\">Bra</string>\n    <string name=\"password_strength_strong\">Starkt</string>\n    <string name=\"password_strength_unknown\">Lösenordet är för långt för styrkeanalys</string>\n    <string name=\"pref_pin_keyboard_title\">Använd pinkodstangentbordet på låsskärmen</string>\n    <string name=\"pref_pin_keyboard_summary\">Aktivera denna om du vill aktivera pinkodstangentbordet på låsskärmen. Detta fungerar endast med numeriska lösenord.</string>\n    <string name=\"title_activity_preferences\">Inställningar</string>\n    <string name=\"title_activity_manage_groups\">Hantera grupper</string>\n    <string name=\"title_activity_transfer\">Överför poster</string>\n    <string name=\"title_activity_about\">Om</string>\n    <string name=\"title_activity_edit_entry\">Redigera post</string>\n    <string name=\"title_activity_scan_qr\">Skanna en rutkod</string>\n    <string name=\"title_activity_import_entries\">Importera poster</string>\n    <string name=\"title_activity_assign_icons\">Tilldela ikoner</string>\n    <string name=\"title_activity_licenses\">Tredjepartslicenser</string>\n    <string name=\"dialog_wipe_entries_title\">Rensa poster</string>\n    <string name=\"dialog_wipe_entries_message\">Ditt valv innehåller redan poster. Vill du ta bort dessa poster innan du importerar den här filen?\\n\\n<b>Genom att göra det så förlorar du åtkomst till de befintliga posterna i valvet för alltid.</b></string>\n    <string name=\"dialog_wipe_entries_checkbox\">Rensa valvets innehåll</string>\n    <string name=\"import_from_clipboard_title\">Importera från urklipp</string>\n    <string name=\"import_from_clipboard_message\">Vi hittade en giltig otpauth-uri i ditt urklipp.\\n\\n<b>Namn</b>: %1$s\\n<b>Utgivare</b>: %2$s\\n\\nVill du använda den för att förifylla denna post?</string>\n    <string name=\"panic_trigger_ignore_toast\">Aegis tog emot en panikutlösare, men inställningen är inaktiverad - ignorerar</string>\n    <string name=\"pref_panic_trigger_title\">Radera valvet vid panikutlösare</string>\n    <string name=\"pref_panic_trigger_summary\">Radera valvet när en panikutlösare tas emot från Ripple</string>\n    <string name=\"import_vault\">Importera Aegis-valv</string>\n    <string name=\"import_vault_hint\">Vill du importera från en annan 2FA-app? Slutför installationen först och gå sedan till inställningsmenyn.</string>\n    <plurals name=\"import_duplicate_toast\">\n        <item quantity=\"one\">Avmarkerade %d möjlig dubblett. Vänligen granska listan över poster.</item>\n        <item quantity=\"other\">Avmarkerade %d möjliga dubbletter. Vänligen granska listan över poster.</item>\n    </plurals>\n    <string name=\"importer_help_2fas\">Tillhandahåll en säkerhetskopieringsfil från 2FAS Authenticator.</string>\n    <string name=\"importer_help_aegis\">Tillhandahåll en export-/säkerhetskopieringsfil från Aegis.</string>\n    <string name=\"importer_help_authenticator_plus\">Tillhandahåll en exportfil från Authenticator Plus som har erhållits genom <b>Settings -&gt; Backup &amp; Restore -&gt; Export as Text and HTML</b>.</string>\n    <string name=\"importer_help_authy\">Tillhandahåll en kopia av <b>/data/data/com.authy.authy/shared_prefs/com.authy.storage.tokens.authenticator.xml</b>, som finns i den interna lagringskatalogen för Authy.</string>\n    <string name=\"importer_help_andotp\">Tillhandahåll en export-/säkerhetskopieringsfil från andOTP.</string>\n    <string name=\"importer_help_bitwarden\">Tillhandahåll en export-/säkerhetskopieringsfil från Bitwarden. Krypterade filer stöds ej.</string>\n    <string name=\"importer_help_battle_net_authenticator\">Tillhandahåll en kopia av <b>/data/data/com.blizzard.messenger/shared_prefs/com.blizzard.messenger.authenticator_preferences.xml</b>, som finns i den interna lagringskatalogen för Battle.net Authenticator.</string>\n    <string name=\"importer_help_duo\">Tillhandahåll en kopia av <b>/data/data/com.duosecurity.duomobile/files/duokit/accounts.json</b>, som finns i den interna lagringskatalogen för DUO.</string>\n    <string name=\"importer_help_ente_auth\">Tillhandahåll en exportfil från Ente Auth. För närvarande stöds endast okrypterade filer.</string>\n    <string name=\"importer_help_freeotp\">FreeOTP 2: Tillhandahåll en säkerhetskopiefil.\\nFreeOTP 1.x: Tillhandahåll en kopia av <b>/data/data/org.fedorahosted.freeotp/shared_prefs/tokens.xml</b>, som finns i den interna lagringskatalogen för FreeOTP.</string>\n    <string name=\"importer_help_freeotp_plus\">Tillhandahåll en exportfil från FreeOTP+.</string>\n    <string name=\"importer_warning_title_freeotp2\">FreeOTP 2-kompatibilitet</string>\n    <string name=\"importer_warning_message_freeotp2\">Det finns ett antal problem i FreeOTP 2 som kan resultera i korrupta säkerhetskopior. Aegis kommer att försöka att rädda så många poster som möjligt, men det är möjligt att vissa eller till och med alla av dem inte kan importeras.</string>\n    <string name=\"importer_help_google_authenticator\"><b>Endast databasfiler från Google Authenticator v5.10 och tidigare stöds.</b>\\n\\nTillhandahåll en kopia av <b>/data/data/com.google.android.apps.authenticator2/databases/databases</b>, som finns i den interna lagringskatalogen för Google Authenticator.</string>\n    <string name=\"importer_help_microsoft_authenticator\">Tillhandahåll en kopia av <b>/data/data/com.azure.authenticator/databases/PhoneFactor</b>, som finns i den interna lagringskatalogen för Microsoft Authenticator.</string>\n    <string name=\"importer_help_plain_text\">Tillhandahåll en klartextfil med en Google Authenticator-URI per rad.</string>\n    <string name=\"importer_help_proton_authenticator\">Ange en Proton Authenticator-exportfil (.json) som erhållits via <b>Inställningar -&gt; Exportera</b>.</string>\n    <string name=\"importer_help_steam\"><b>Steam v3.0 och senare stöds inte.</b> Tillhandahåll en kopia av <b>/data/data/com.valvesoftware.android.steam.community/files/Steamguard-*.json</b>, som finns i den interna lagringskatalogen för Steam.</string>\n    <string name=\"importer_help_stratum\">Tillhandahåll en exportfil från Stratum som har erhållits genom <b>Inställningar -&gt; Säkerhetskopiera -&gt; Säkerhetskopiera till krypterad fil (rekommenderas)</b>.</string>\n    <string name=\"importer_help_totp_authenticator\">Tillhandahåll en exportfil från TOTP Authenticator.</string>\n    <string name=\"importer_help_winauth\">Tillhandahåll en exportfil från WinAuth.</string>\n    <string name=\"import_assign_icons_dialog_title\">Tilldela ikoner</string>\n    <string name=\"import_assign_icons_dialog_text\">Vill du tilldela ikoner till de importerade posterna?</string>\n    <string name=\"importer_encrypted_exception_google_authenticator\">Krypterad post hoppades över: %s</string>\n    <string name=\"importer_help_direct\">Importera poster direkt från %s. Detta kräver att appen är installerad på den här enheten och att rotåtkomst ges till Aegis.</string>\n    <string name=\"groups\">Grupper</string>\n    <string name=\"pref_focus_search\">Sätt fokus på sökfältet vid appstart</string>\n    <string name=\"pref_focus_search_summary\">Sätt fokus på sökfältet direkt efter att appen har öppnats.</string>\n    <string name=\"pref_grouping_halves\">Halvor</string>\n    <string name=\"pref_grouping_none\">Ingen gruppering</string>\n    <string name=\"pref_grouping_size_two\">Grupper av 2</string>\n    <string name=\"pref_grouping_size_three\">Grupper av 3</string>\n    <string name=\"pref_grouping_size_four\">Grupper av 4</string>\n    <string name=\"pref_copy_behavior_never\">Aldrig</string>\n    <string name=\"pref_copy_behavior_single_tap\">Enkeltryck</string>\n    <string name=\"pref_copy_behavior_double_tap\">Dubbeltryck</string>\n    <string name=\"pref_account_name_position_hidden\">Dolt</string>\n    <string name=\"pref_account_name_position_end\">Bredvid utfärdaren</string>\n    <string name=\"pref_account_name_position_below\">Nedanför utfärdaren</string>\n    <plurals name=\"time_elapsed_seconds\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"one\">%d sekund sedan</item>\n        <item quantity=\"other\">%d sekunder sedan</item>\n    </plurals>\n    <plurals name=\"time_elapsed_minutes\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"one\">%d minut sedan</item>\n        <item quantity=\"other\">%d minuter sedan</item>\n    </plurals>\n    <plurals name=\"time_elapsed_hours\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"one\">%d timme sedan</item>\n        <item quantity=\"other\">%d timmar sedan</item>\n    </plurals>\n    <plurals name=\"time_elapsed_days\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"one\">%d dag sedan</item>\n        <item quantity=\"other\">%d dagar sedan</item>\n    </plurals>\n    <plurals name=\"time_elapsed_years\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"one\">%d år sedan</item>\n        <item quantity=\"other\">%d år sedan</item>\n    </plurals>\n    <plurals name=\"dropdown_checkboxes_default_count\">\n        <item quantity=\"one\">%d objekt valt</item>\n        <item quantity=\"other\">%d objekt valda</item>\n    </plurals>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-sv-rSE-v29/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"system_theme_title\">Systemstandard</string>\n    <string name=\"system_amoled_theme_title\">Systemstandard (AMOLED)</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-tr-rTR/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources xmlns:tools=\"http://schemas.android.com/tools\">\n    <string name=\"action_settings\">Ayarlar</string>\n    <string name=\"action_about\">Hakkında</string>\n    <string name=\"action_delete\">Sil</string>\n    <string name=\"action_transfer\">Aktar</string>\n    <string name=\"action_edit_icon\">Simgeyi düzenle</string>\n    <string name=\"action_reset_usage_count\">Kullanım sayısını sıfırla</string>\n    <string name=\"action_reset_usage_count_dialog\">Bu girdinin kullanım sayısını sıfırlamak istediğinize emin misiniz?</string>\n    <string name=\"action_default_icon\">Varsayılan simgeyi geri yükle</string>\n    <string name=\"discard\">Göz ardı et</string>\n    <string name=\"save\">Kaydet</string>\n    <string name=\"all\">Hepsi</string>\n    <string name=\"issuer\">Sağlayıcı</string>\n    <string name=\"yandex_pin\">PIN (4-16 hane)</string>\n    <string name=\"motp_pin\">PIN (4 haneli)</string>\n    <string name=\"suggested\">Önerilen</string>\n    <string name=\"usage_count\">Kullanım sayısı</string>\n    <string name=\"warning\">Uyarı</string>\n    <string name=\"pref_cat_appearance_app\">Uygulama</string>\n    <string name=\"pref_cat_appearance_entries\">Kayıtlar</string>\n    <string name=\"pref_cat_backups_android\">Android</string>\n    <string name=\"pref_cat_backups_auto\">Otomatik Yedeklemeler</string>\n    <string name=\"pref_section_behavior_title\">Davranış</string>\n    <string name=\"pref_section_behavior_summary\">Giriş listesi ile ilgilenirken ki davranışı düzenle.</string>\n    <string name=\"pref_section_appearance_title\">Görünüm</string>\n    <string name=\"pref_section_appearance_summary\">Temayı, dili ve uygulamanın görünüşünü etkileyen diğer ayarları düzenle.</string>\n    <string name=\"pref_section_security_title\">Güvenlik</string>\n    <string name=\"pref_section_security_summary\">Şifrelemeyi, biyometrik kilit açmayı, otomatik kilitlemeyi ve diğer güvenlik ayarlarını düzenle.</string>\n    <string name=\"pref_section_import_export_title\">İçe Aktar &amp; Dışa Aktar</string>\n    <string name=\"pref_section_import_export_summary\">Aegis ya da diğer doğrulayıcı uygulamaların yedeklerini içe aktar. Aegis deponu elle dışa aktar.</string>\n    <string name=\"pref_section_audit_log_title\">Denetim kaydı</string>\n    <string name=\"pref_section_audit_log_summary\">Uygulamadaki bütün raporlanmış önemli olayların listesini bul.</string>\n    <string name=\"pref_section_backups_title\">Yedekler</string>\n    <string name=\"pref_section_backups_summary\">İstediğin noktaya otomatik yedekleme ayarla veya Android\\'in bulut yedekleme sistemine dahil olmayı etkinleştir.</string>\n    <string name=\"pref_section_icon_packs\">İkon paketleri</string>\n    <string name=\"pref_section_icon_packs_summary\">İkon paketlerini yönet ve içe aktar</string>\n    <string name=\"pref_select_theme_title\">Tema</string>\n    <string name=\"pref_dynamic_colors_title\">Dinamik renkler</string>\n    <string name=\"pref_dynamic_colors_summary\">Android temanızın renklerine göre bir kaplama uygulayın</string>\n    <string name=\"pref_view_mode_title\">Görüntüleme biçimi</string>\n    <string name=\"pref_lang_title\">Dil</string>\n    <string name=\"pref_show_icons_title\">Simgeleri göster</string>\n    <string name=\"pref_show_icons_summary\">Her girdinin yanında simgeleri göster</string>\n    <string name=\"pref_code_group_size_title\">Kod hanelerinin gruplanması</string>\n    <string name=\"pref_code_group_size_summary\">Kodların kaç basamakla gruplanacağını seçin</string>\n    <string name=\"pref_account_name_position_title\">Hesap adını göster</string>\n    <string name=\"pref_show_next_code_title\">Sonraki kodu göster</string>\n    <string name=\"pref_show_next_code_summary\">Sonraki kodu zamanından önce üret ve göster</string>\n    <string name=\"pref_expiration_state_title\">Kodların süresinin ne zaman geçeceğini belirt</string>\n    <string name=\"pref_expiration_state_summary\">Kodların süresi dolacağı zaman renklerini değiştir ve yanıp söndür</string>\n    <string name=\"pref_expiration_state_fallback\">Kodların süresi dolacağı zaman renklerini değiştir</string>\n    <string name=\"pref_shared_issuer_account_name_title\">Hesap adını yalnızca gerektiğinde göster</string>\n    <string name=\"pref_shared_issuer_account_name_summary\">Hesap adlarını yalnızca aynı sağlayıcıyı paylaştıklarında göster. Diğer hesap adları gizlenecektir.</string>\n    <string name=\"pref_account_name_position_summary_override\">Bu ayar, kutucuk görüntüleme modu tarafından geçersiz kılınır. Hesap adı, sağlayıcının altında gösterilecektir.</string>\n    <string name=\"pref_import_file_title\">Dosyadan içeriye aktar</string>\n    <string name=\"pref_import_file_summary\">Veritabanını dosyadan içeriye aktar</string>\n    <string name=\"pref_android_backups_title\">Android bulut yedekleme</string>\n    <string name=\"pref_android_backups_summary\">Android yedekleme sisteminin Aegis deposunu dahil etmesine izin ver. Bu yalnızca şifreli depolar için desteklidir.</string>\n    <string name=\"pref_android_backups_hint\"><i>Yukarıdaki ayardan bağımsız olarak, cihazdan cihaza (D2D) yedeklemelere her zaman izin verilir.</i></string>\n    <string name=\"pref_backups_title\">Otomatik olarak kasayı yedekle</string>\n    <string name=\"pref_backups_summary\">Kasanın yedeğini harici depolamaya kaydet. Sadece şifrelenmiş kasalarda desteklenir.</string>\n    <string name=\"pref_backups_reminder_title\">Yedekleme hatırlatıcı</string>\n    <string name=\"pref_backups_reminder_summary\">En son değişikliklerinizi yedeklemediyseniz kasanızı yedeklemeniz için bir hatırlatıcı gösterir.</string>\n    <string name=\"pref_backups_reminder_dialog_title\">Yedekleme hatırlatıcıyı devre dışı bırak</string>\n    <string name=\"pref_backups_reminder_dialog_summary\">Bu hatırlatıcıyı devre dışı bırakmak, Aegis\\'in henüz yedeklenmemiş değişiklikleriniz olup olmadığını size söylemeyeceği anlamına gelir. Bu sizi kodlarınıza erişimi kaybetme riskiyle karşı karşıya bırakır. Hatırlatıcıyı devre dışı bırakmak istediğinizden emin misiniz?</string>\n    <string name=\"pref_backups_versioning_strategy_title\">Yedekleme yöntemi</string>\n    <string name=\"pref_backups_versioning_strategy_keep_x_versions\">Şu sayıda versiyon tut</string>\n    <string name=\"pref_backups_versioning_strategy_single_backup\">Tek yedekleme</string>\n    <string name=\"pref_backups_versioning_strategy_single_backup_warning\">Seçilen yedekleme yöntemi güvenilir değildir ve önerilmez. Tek bir yedekleme hatası, tek yedeklemenizi kaybetmenize yol açabilir.</string>\n    <string name=\"pref_backups_versioning_strategy_dialog_title\">Bir yedekleme yöntemi seçin</string>\n    <string name=\"pref_backups_location_title\">Yedek konumu</string>\n    <string name=\"pref_backups_location_summary\">Yedekler şurada depolanacak</string>\n    <string name=\"pref_backup_location_summary\">Yedek şurada depolanacak</string>\n    <string name=\"pref_backups_trigger_title\">Yedeklemeyi tetikle</string>\n    <string name=\"pref_backups_trigger_summary\">Yedeklemeyi elle tetikle</string>\n    <string name=\"pref_backups_versions_title\">Saklanacak sürüm sayısı</string>\n    <string name=\"pref_backups_versions_infinite\">\\u221E</string>\n    <plurals name=\"pref_backups_versions_summary\">\n        <item quantity=\"one\">Yedeğin %1$d tane sürümünü tut</item>\n        <item quantity=\"other\">Yedeğin %1$d tane sürümünü tut</item>\n    </plurals>\n    <string name=\"pref_backups_versions_infinite_summary\">Yedeğin sonsuz sayıda versiyonunu tut</string>\n    <string name=\"pref_import_app_title\">Uygulamadan içeriye aktar</string>\n    <string name=\"pref_import_app_summary\">Başka bir uygulamanın veritabanını içeriye aktar (kök kullanıcı erişimi gerektirir)</string>\n    <string name=\"pref_export_title\">Dışarıya aktar</string>\n    <string name=\"pref_export_summary\">Kasayı dışarıya aktar</string>\n    <string name=\"pref_password_reminder_title\">Parola hatırlatma</string>\n    <string name=\"pref_google_auth_export_title\">Google Kimlik Doğrulama için Dışa Aktarın</string>\n    <string name=\"pref_google_auth_export_descriptor\">Google Authenticator ile uyumlu dışa aktarma QR kodları üretir</string>\n    <string name=\"pref_google_auth_export_no_data\">Dışa aktarılacak veri yok</string>\n    <plurals name=\"pref_google_auth_export_incompatible_entries\">\n        <item quantity=\"one\">%d uyumsuz giriş atlandı</item>\n        <item quantity=\"other\">%d uyumsuz girişler atlandı</item>\n    </plurals>\n    <string name=\"pref_password_reminder_summary\">Parolayı unutmamak için %s sıklıkta parolayı girmen için hatırlatıcı göster.</string>\n    <string name=\"pref_password_reminder_summary_disabled\">Kapalı</string>\n    <string name=\"pref_secure_screen_title\">Ekran güvenliği</string>\n    <string name=\"pref_secure_screen_summary\">Uygulama içindeyken ekran görüntüsü almayı ve diğer ekran yakalama girişimlerini engelle.</string>\n    <string name=\"pref_tap_to_reveal_title\">Görmek için dokunun</string>\n    <string name=\"pref_tap_to_reveal_summary\">Kodlar varsayılan olarak gizlenir. Kodu görmek için üstüne dokunun</string>\n    <string name=\"pref_tap_to_reveal_time_title\">Gösterme için zaman aşımı</string>\n    <string name=\"pref_auto_lock_title\">Otomatik kilitleme</string>\n    <string name=\"pref_auto_lock_summary\">Ne zaman %s</string>\n    <string name=\"pref_auto_lock_summary_disabled\">Devre dışı</string>\n    <string name=\"pref_auto_lock_prompt\">Otomatik olarak Aegis\\'i kilitle</string>\n    <string name=\"pref_auto_lock_type_back_button\">Geri tuşuna basıldığında</string>\n    <string name=\"pref_auto_lock_type_minimize\">Uygulama küçültüldüğünde</string>\n    <string name=\"pref_auto_lock_type_device_lock\">Cihaz kilitlendiğinde</string>\n    <string name=\"pref_backup_password_category\">Yedekle &amp; Dışa aktar</string>\n    <string name=\"pref_backup_password_title\">Parolayı yedekleme &amp; dışa aktarmaya göre ayır</string>\n    <string name=\"pref_backup_password_summary\">Eğer etkinleştirildiyse uygulamayı açmak için kullandığın parola, yedeklemelerin ve dışa aktarmaların şifrelenmesini çözmek için kullanılamayacak.</string>\n    <string name=\"pref_backup_password_change_title\">Yedekleme &amp; dışa aktarma için parolayı değiştir</string>\n    <string name=\"pref_backup_password_change_summary\">Yedekleme ve dışarı aktarma sırasında kasayı şifrelemek için yeni bir parola oluştur.</string>\n    <string name=\"pref_encryption_title\">Şifreleme</string>\n    <string name=\"pref_encryption_summary\">Kasayı şifrele ve açmak için bir parola veya biyometrik doğrulama kullan</string>\n    <string name=\"pref_biometrics_title\">Biyometrik kilit açma</string>\n    <string name=\"pref_biometrics_summary\">Kasayı açmak üzere biyometrik kimrik doğrulamaya izin ver</string>\n    <string name=\"pref_search_behavior_summary\">Şurada ara: %s</string>\n    <string name=\"pref_search_behavior_prompt\">Aşağıdaki alanlardan herhangi birinde arama yap</string>\n    <string name=\"pref_search_behavior_type_name\">İsim</string>\n    <string name=\"pref_search_behavior_type_issuer\">Sağlayıcı</string>\n    <string name=\"pref_search_behavior_type_note\">Not</string>\n    <string name=\"pref_search_behavior_type_groups\">Gruplar</string>\n    <string name=\"pref_set_password_title\">Parolayı değiştir</string>\n    <string name=\"pref_set_password_summary\">Kasanızı açmak üzere kullanmak için yeni bir parola atayın</string>\n    <string name=\"no_events_title\">Raporlanmış olay yok</string>\n    <string name=\"no_events_description\">Uygulamada önemli bir olay raporlanmadı</string>\n    <string name=\"event_title_vault_unlocked\">Kasa kilidi açıldı</string>\n    <string name=\"event_description_vault_unlocked\">Kasa kilidi başarıyla açıldı</string>\n    <string name=\"event_title_backup_created\">Yedek oluşturuldu</string>\n    <string name=\"event_description_backup_created\">Kasanın yedeği başarıyla oluşturuldu</string>\n    <string name=\"event_title_android_backup_created\">Yedek, Android tarafından oluşturuldu</string>\n    <string name=\"event_description_android_backup_created\">Kasanın yedeği Android tarafından başarıyla oluşturuldu</string>\n    <string name=\"event_title_vault_exported\">Kasa dışarı aktarıldı</string>\n    <string name=\"event_description_vault_exported\">Kasanın kopyası dışarı aktarıldı</string>\n    <string name=\"event_title_entry_shared\">Girdi paylaşıldı</string>\n    <string name=\"event_description_entry_shared\">Bir girdi paylaşıldı</string>\n    <string name=\"event_title_vault_unlock_failed_password\">Kasa kilidi açma başarısız oldu (şifre)</string>\n    <string name=\"event_description_vault_unlock_failed_password\">Şifre ile kasa kilidi açma denemesi başarısız oldu</string>\n    <string name=\"event_title_vault_unlock_failed_biometrics\">Kasa kilidi açma başarısız oldu (biyometrik)</string>\n    <string name=\"event_description_vault_unlock_failed_biometrics\">Biyometri ile kasa kilidi açma denemesi başarısız oldu</string>\n    <string name=\"event_unknown\">Bilinmeyen olay türü</string>\n    <string name=\"audit_log_entry_deleted\">(silindi)</string>\n    <string name=\"today_at_time\">Bugün saat %1$s</string>\n    <string name=\"day_of_week_at_time\">%2$s günü saat %1$s</string>\n    <string name=\"export_encrypted\">Kasayı şifrele</string>\n    <string name=\"export_help\">Bu işlem kasayı Aegis\\'in dahili deposundan dışarı aktaracaktır. Lütfen dışa aktarmak istediğiniz biçimi seçiniz:</string>\n    <string name=\"export_warning_unencrypted\">Aegis kasanızın şifrelenmemiş bir kopyasını dışa aktarmak üzeresiniz. <b>Bu işlem tavsiye edilmez</b>.</string>\n    <string name=\"export_warning_password\">Dışa aktarmalar, Güvenlik ayarlarında yapılandırılan ayrı bir parola kullanılarak şifrelenir.</string>\n    <string name=\"understand_risk_accept\">Riski göze alıyorum</string>\n    <string name=\"export_format_aegis\">Aegis (.JSON)</string>\n    <string name=\"export_format_google_auth_uri\">Metin belgesi (.TXT)</string>\n    <string name=\"export_format_html\">Web sayfası (.HTML)</string>\n    <string name=\"export_format_hint\">Dışa Aktarma Biçimi</string>\n    <string name=\"export_all_groups\">Tüm grupları dışa aktar</string>\n    <string name=\"export_choose_groups\">Dışa aktarılacak grupları seçin</string>\n    <plurals name=\"export_groups_selected_count\">\n        <item quantity=\"one\">%d grup seçildi</item>\n        <item quantity=\"other\">%d grup seçildi</item>\n    </plurals>\n    <string name=\"export_no_groups_selected\">Dışa aktarılacak grup seçilmedi</string>\n    <string name=\"export_html_title\" comment=\"The title of an HTML export document\">Aegis Authenticator Dışa Aktarma</string>\n    <string name=\"choose_authentication_method\">Güvenlik</string>\n    <string name=\"authentication_method_explanation\">Aegis güvenlik odaklı bir 2FA uygulamasıdır. Kodlar isteğiniz üzerine parolayla şifreleyebileceğiniz bir kasada saklanabilir. Eğer bir saldırgan şifrelenmiş kasa dosyanızı elde ederse parolayı bilmeden içeriğine erişemeyecektir.\\n\\nCihazınız için en iyi olduğunu düşündüğümüz seçeneği seçtik.</string>\n    <string name=\"authentication_method_none\">Hiçbiri</string>\n    <string name=\"authentication_method_none_description\">Kasayı açmak için parola gerektirme ve kasayı şifreleme. <b>Bu seçenek tavsiye edilmez</b>.</string>\n    <string name=\"authentication_method_password\">Parola</string>\n    <string name=\"authentication_method_password_description\">Kasayı açmak için bir parola gerektirir.</string>\n    <string name=\"authentication_method_password_explanation\">Uyarı: Eğer parolanızı unutursanız kodlarınıza erişimi kalıcı olarak kaybedebilirsiniz.</string>\n    <string name=\"authentication_method_biometrics\">Biyometrik</string>\n    <string name=\"authentication_method_biometrics_description\">Parolaya ek olarak bu cihazda kayıtlı olan parmak izi ve yüz tanıma gibi biyometrik doğrulama yöntemleri kasayı açmada kullanılabilir.</string>\n    <string name=\"authentication\">Kasa kilidini aç</string>\n    <string name=\"authentication_multiline\" comment=\"The newline in the middle is used for aesthetic purposes\">Kasa kilidini \\naç</string>\n    <string name=\"auth_use_biometrics\">Ya da <font fgcolor=\"#FF0D86C1\">biyometrik</font> kullanmak için dokunun</string>\n    <string name=\"set_password\">Lütfen bir parola girin</string>\n    <string name=\"set_group\">Lütfen bir grup adı girin</string>\n    <string name=\"set_number\">Lütfen bir sayı girin</string>\n    <string name=\"set_password_confirm\">Lütfen parolayı doğrulayın</string>\n    <string name=\"invalid_password\">Parola hatalı</string>\n    <string name=\"invalidated_biometrics\">Cihazınızın güvenlik ayarlarında bir değişim tespit edildi. Lütfen \\\"Aegis -&gt; Ayarlar -&gt; Güvenlik &gt; Biyometrik kilit açma\\\" menüsüne gidip biyometrik kilit açmayı devre dışı bırakın ve tekrardan aktifleştirin.</string>\n    <string name=\"password_reminder\">Lütfen şifrenizi giriniz. Unutmamanız için ara sıra sizden bunu yapmanızı istiyoruz.</string>\n    <string name=\"password_reminder_dialog_title\">Varsayılan olarak biyometrik kilit açma</string>\n    <string name=\"password_reminder_dialog_message\">Unutmadığınızdan ve kasanızın dışında kalmadığınızdan emin olmak için ara sıra şifrenizi girmenizi isteriz. Şifrenizi bir kez girdikten sonra Aegis, başka bir şifre hatırlatma zamanı gelene kadar varsayılan olarak biyometrik kilit açma moduna geri dönecektir.</string>\n    <string name=\"password_reminder_freq_never\">Asla</string>\n    <string name=\"password_reminder_freq_weekly\">Haftada bir</string>\n    <string name=\"password_reminder_freq_biweekly\">İki haftada bir</string>\n    <string name=\"password_reminder_freq_monthly\">Ayda bir</string>\n    <string name=\"password_reminder_freq_quarterly\">Üç ayda bir</string>\n    <string name=\"enter_password_2fas_message\">Görünüşe göre bu 2FAS yedekleme şifrelenmiş. Lütfen aşağıya parolayı girin.</string>\n    <string name=\"enter_password_authy_message\">Görünüşe göre Authy kodlarınız şifreli. Lütfen Aegis\\'i kapatın Authy\\'i açın ve parolanızla kodlarınızın kilidini açın. Bunun yerine aşağıya parolanızı girerseniz Aegis, Authy kodlarınızı sizin için deşifre etmeyi deneyebilir.</string>\n    <string name=\"enter_password_aegis_title\">Lütfen içe aktarma şifresini girin</string>\n    <string name=\"period_hint\">Süre (Saniye)</string>\n    <string name=\"algorithm_hint\">Hash fonksiyonu</string>\n    <string name=\"type\">Tür</string>\n    <string name=\"share\">Paylaş</string>\n    <string name=\"yes\">Evet</string>\n    <string name=\"no\">Hayır</string>\n    <string name=\"undo\">Geri al</string>\n    <string name=\"unlock\">Kilidi aç</string>\n    <string name=\"advanced\">Gelişmiş</string>\n    <string name=\"counter\">Sayaç</string>\n    <string name=\"digits\">Haneler</string>\n    <string name=\"secret\">Gizli Anahtar</string>\n    <string name=\"scan\">QR kod tara</string>\n    <string name=\"scan_image\">Resim tara</string>\n    <string name=\"enter_manually\">El ile gir</string>\n    <string name=\"set_up_biometric\">Biyometrik kilit açma kurulumu</string>\n    <string name=\"copy\">Kopyala</string>\n    <string name=\"edit\">Düzenle</string>\n    <string name=\"select_all\">Tümünü seç</string>\n    <string name=\"assign_icons\">Simgeleri ata</string>\n    <string name=\"assign_groups\">Gruba ata</string>\n    <string name=\"assign_groups_dialog_summary\">Seçilen girdileri istediğiniz bir gruba atayın.</string>\n    <string name=\"assign_groups_dialog_dropdown\">Grup seçin</string>\n    <string name=\"favorite\" comment=\"Verb\">Favorilere Ekle</string>\n    <string name=\"unfavorite\" comment=\"Verb\">Favorilerden Çıkar</string>\n    <string name=\"error_all_caps\">HATA</string>\n    <string name=\"password\">Parola</string>\n    <string name=\"confirm_password\">Parolayı doğrula</string>\n    <string name=\"show_password\">Parolayı göster</string>\n    <string name=\"new_entry\">Yeni Girdi</string>\n    <string name=\"add_new_entry\">Yeni Girdi Ekle</string>\n    <string name=\"unlock_vault_error\">Kasa kilidi açılamadı</string>\n    <string name=\"unlock_vault_error_description\">Hatalı parola. Parolanızı yanlış yazmadığınıza emin olun.</string>\n    <string name=\"password_equality_error\">Parolalar aynı olmalı ve boş olmamalıdır</string>\n    <string name=\"snackbar_authentication_method\">Lütfen bir kimlik doğrulama yöntemi seçin</string>\n    <string name=\"encrypting_vault\">Kasa Şifreleniyor</string>\n    <string name=\"exporting_vault\">Kasa dışarı aktarılıyor</string>\n    <string name=\"optimizing_icon\">Simge optimize ediliyor</string>\n    <string name=\"optimizing_icon_multiple\">Simgeler optimize ediliyor %2$d/%1$d</string>\n    <string name=\"reading_file\">Dosya okunuyor</string>\n    <string name=\"requesting_root_access\">Root erişimi denetleniyor</string>\n    <string name=\"analyzing_qr\">QR kodunu analiz ediliyor</string>\n    <string name=\"analyzing_qr_multiple\">Kare kod analiz ediliyor %2$d/%1$d (%3$s)</string>\n    <plurals name=\"added_new_entries\">\n        <item quantity=\"one\">Kasaya %d yeni giriş eklendi</item>\n        <item quantity=\"other\">Kasaya %d yeni giriş eklendi</item>\n    </plurals>\n    <string name=\"importing_icon_pack\">İkon paketi içe aktarılıyor</string>\n    <string name=\"delete_entry\">Girdiyi sil</string>\n    <string name=\"delete_entry_description\">Bu girdiyi silmek istediğinize emin misiniz?</string>\n    <string name=\"delete_entry_explanation\">Bu eylem \\n<b>%s</b>\\n\\n için iki aşamalı doğrulamayı devre dışı bırakmaz. Erişiminizi kaybetmeyi önlemek için iki aşamalı doğrulamayı devre dışı bıraktığınızdan veya bu hizmet için alternatif bir kod oluşturma yöntemine sahip olduğunuzdan emin olun.</string>\n    <string name=\"delete_entries\">Girdileri sil</string>\n    <plurals name=\"delete_entries_description\">\n        <item quantity=\"one\">%d girdisini silmek istediğinize emin misiniz?</item>\n        <item quantity=\"other\">%d girdisini silmek istediğinize emin misiniz?</item>\n    </plurals>\n    <string name=\"discard_changes\">Değişiklikler göz ardı edilsin mi?</string>\n    <string name=\"discard_changes_description\">Değişiklikleriniz kaydedilmedi</string>\n    <string name=\"saving_profile_error\">Profil kaydı sırasında hata</string>\n    <string name=\"saving_assign_icons_error\">Simgeler atanırken hata oluştu</string>\n    <string name=\"welcome\">Hoşgeldiniz</string>\n    <string name=\"app_description\">Aegis özgür, güvenli ve açık kaynak 2FA uygulamasıdır</string>\n    <string name=\"setup_completed\">Kurulum Tamamlandı</string>\n    <string name=\"setup_completed_description\">Aegis kuruldu ve kullanılmaya hazır.</string>\n    <string name=\"vault_not_found\">Kasa bulunmadı, kurulum başlatılıyor...</string>\n    <string name=\"copied\">Kopyalandı</string>\n    <string name=\"errors_copied\">Hatalar panoya kopyalandı</string>\n    <string name=\"version_copied\">Sürüm panoya kopyalandı</string>\n    <string name=\"error_required_field\">Bu alan gerekli</string>\n    <string name=\"error_occurred\">Bir hata meydana geldi</string>\n    <string name=\"decryption_error\">Kasayı açmayı denerken bir hata meydana geldi</string>\n    <string name=\"decryption_corrupt_error\">Kasayı açmayı denerken bir hata meydana geldi. Kasa dosyanız bozuk olabilir.</string>\n    <string name=\"saving_error\">Kasayı kaydetmeye çalışırken bir hata meydana geldi</string>\n    <string name=\"vault_init_error\">Kasayı oluşturmaya çalışırken bir hata meydana geldi</string>\n    <string name=\"vault_load_error\">Kasayı depolama alanından yüklemeye çalışırken bir hata meydana geldi</string>\n    <string name=\"biometric_decrypt_error\">Kasayı biyometrik doğrulama ile açmaya çalışırken bir hata meydana geldi. Bu genellikle cihazınızın güvenlik ayarları değiştğinde olur. Lütfen kasanızı parolanızla açın ve biyometrik doğrulamayı Aegis\\'in ayar menüsünden yeniden yapılandırın.</string>\n    <string name=\"biometric_init_error\">Biyometrik doğrulamaya hazırlanırken bir hata meydana geldi. Bu genellikle cihazınızın güvenlik ayarları değiştğinde olur. Lütfen kasanızı parolanızla açın ve biyometrik doğrulamayı Aegis\\'in ayar menüsünden yeniden yapılandırın.</string>\n    <string name=\"disable_encryption\">Şifrelemeyi devre dışı bırak</string>\n    <string name=\"disable_encryption_description\">Şifrelemeyi devre dışı bırakmak istediğinize emin misiniz? Bu deponun düz metin şeklinde depolanmasına sebep olacak. <b>Otomatik yedeklemeler de devre dışı bırakılacaktır</b>.</string>\n    <string name=\"enable_encryption_error\">Şifrelemeyi aktifleştirirken bir hata meydana geldi</string>\n    <string name=\"disable_encryption_error\">Şifrelemeyi devre dışı bırakırken bir hata meydana geldi</string>\n    <string name=\"backup_successful\">Yedekleme başarıyla planlandı</string>\n    <string name=\"backup_error\">Yedek oluşturmaya çalışırken bir hata meydana geldi</string>\n    <string name=\"backup_status_success\">En son başarılı yedek: %s</string>\n    <string name=\"backup_status_failed\">En son başarısızlıkla sonuçlanan yedek: %s</string>\n    <string name=\"backup_status_none\">Henüz yedek oluşturulmamış</string>\n    <string name=\"backup_warning_password\">Yedeklemeler, Güvenlik ayarlarında yapılandırılan ayrı bir parola kullanılarak şifrelenir</string>\n    <string name=\"documentsui_error\">DocumentsUI cihazınızda yok gibi görünüyor. Bu, belgelerin seçilmesi ve oluşturulması için önemli bir sistem bileşenidir. Cihazınızı &quot;debloat&quot; etmek için bir araç kullandıysanız, bunu yanlışlıkla silmiş olabilirsiniz, yeniden yüklemeniz gerekir.</string>\n    <string name=\"icon_pack_import_error\">İkon paketi içe aktarılırken bir sorun meydana geldi</string>\n    <string name=\"icon_pack_import_exists_error\">İçe aktarmaya çalıştığınız ikon paketi zaten mevcut. Üstüne yazmak ister misiniz?</string>\n    <string name=\"icon_pack_delete_error\">İkon paketini silmeye çalışırken bir sorun meydana geldi</string>\n    <plurals name=\"icon_pack_info\">\n        <item quantity=\"one\">%d simgesi</item>\n        <item quantity=\"other\">%d simgeleri</item>\n    </plurals>\n    <string name=\"icon_custom\">Özel</string>\n    <string name=\"permission_denied\">İzin verilmesi reddedildi</string>\n    <string name=\"andotp_new_format\">Yeni biçim (v0.6.3 veya daha yeni) </string>\n    <string name=\"andotp_old_format\">Eski biçim (v0.6.2 veya daha eski) </string>\n    <string name=\"choose_andotp_importer\">andOTP yedek dosyası hangi biçimde?</string>\n    <string name=\"choose_totpauth_importer\">Bu TOTP Authenticator yedeği bir parola ile şifrelenmiş miydi?</string>\n    <string name=\"choose_application\">Verileri içeriye aktarmak istediğiniz uygulamayı seçin</string>\n    <string name=\"choose_theme\">İstediğiniz temayı seçin</string>\n    <string name=\"choose_account_name_position\">İstediğiniz hesap adı pozisyonunu seçin</string>\n    <string name=\"choose_view_mode\">İstediğiniz görünüm biçimini seçin</string>\n    <string name=\"choose_copy_behavior\">İstediğiniz kopyalama davranışını seçin</string>\n    <string name=\"parsing_file_error\">Dosyayı anlamlandırmaya çalışırken hata meydana geldi</string>\n    <string name=\"file_not_found\">Hata: Dosya bulunamadı</string>\n    <string name=\"reading_file_error\">Dosyayı okumaya çalışırken bir hata meydana geldi</string>\n    <string name=\"app_lookup_error\">Hata: Uygulama yüklenmemiş</string>\n    <string name=\"app_version_error\">Yüklü %s sürümü desteklenmiyor. Son sürümlerde diskteki bazı dosyaların şifrelenmesinden ötürü Aegis içeri aktaracak bilgilere erişemiyor. İçe aktarmayı denemek hata ile sonuçlanabilir, yine de devam etmek ister misiniz?</string>\n    <string name=\"root_error\">Hata: root erişimi elde edilemedi</string>\n    <plurals name=\"imported_entries_count\">\n        <item quantity=\"one\">%d girdi içe aktarıldı</item>\n        <item quantity=\"other\">%d girdi içe aktarıldı</item>\n    </plurals>\n    <plurals name=\"entries_shown\">\n        <item quantity=\"one\">%d giriş gösteriliyor</item>\n        <item quantity=\"other\">%d giriş gösteriliyor</item>\n    </plurals>\n    <string name=\"intro_import_error_title\">Kasa içe aktarılırken bir hata oluştu</string>\n    <string name=\"import_error_title\">İçe aktarmaya çalışırken bir veya birden fazla hata meydana geldi</string>\n    <string name=\"exporting_vault_error\">Kasayı dışarıya aktarmaya çalışırken hata meydana geldi</string>\n    <string name=\"exported_vault\">Kasa dışarıya aktarıldı</string>\n    <string name=\"encryption_set_password_error\">Parola atamayı denerken bir hata meydana geldi.</string>\n    <string name=\"encryption_enable_biometrics_error\">Biyometrik kilit açmayı aktifleştirirken bir hata meydana geldi. Bazı cihazlarda biyometrik kimlik doğrulama kötü uygulanmış olabilir ve görünüşe göre cihazınız bu cihazlardan biri. Bunun yerine sadece parola ile doğrulama ayarına geçiş yapın.</string>\n    <string name=\"no_cameras_available\">Hiçbir kamera kullanılabilir değil</string>\n    <string name=\"read_qr_error\">QR kodu okumaya çalışırken bir hata meydana geldi</string>\n    <string name=\"read_qr_error_phonefactor\">Aegis Microsoft\\'un özel çift faktörlü doğrulama algoritmasıyla uyumlu değildir. Office 365\\' te çift faktörlü doğrulamayı yapılandırırken \\\"Uygulamayı bildirim olmadan kur\\\" u seçtiğinizden emin olun.</string>\n    <string name=\"partial_google_auth_import\">Eksik Google Authenticator dışa aktarımı algılandı</string>\n    <string name=\"partial_google_auth_import_warning\">İçe aktarma işleminizde bazı QR kodları eksik. aşağıdaki kodlar bulunamadı:\\n\\n<b>%s</b>\\n\\nBu kısmi dışa aktarmayı içe aktarmaya devam edebilirsiniz, ancak herhangi bir tokena erişimi kaybetme riskine girmemek için tüm QR kodlarıyla yeniden denemenizi öneririz.</string>\n    <string name=\"missing_qr_code_descriptor\">• QR kodu %d</string>\n    <plurals name=\"import_partial_export_anyway\">\n        <item quantity=\"one\">Yine de kodu içeri aktar</item>\n        <item quantity=\"other\">Yine de %d kodu içeri aktar</item>\n    </plurals>\n    <string name=\"import_google_auth_failure\">Dışa aktarılmış Google Authenticator dosyasını içe aktarma işlemi başarısız oldu</string>\n    <string name=\"unrelated_google_auth_batches_error\">Dışa aktarma, ilgisiz bir toplu iş için bilgi içerir. Bir seferde 1 partiyi içe aktarmayı deneyin.</string>\n    <string name=\"no_tokens_can_be_imported\">Sonuç olarak hiçbir token içe aktarılamaz</string>\n    <string name=\"unlocking_vault\">Kasa kilidi açılıyor</string>\n    <string name=\"rename_group\">Grubu yeniden isimlendir</string>\n    <string name=\"no_group_selection\">Eğer bir girdi herhangi bir grubun parçası değilse \\\"Grupsuz\\\"un içinde bulunabilir.</string>\n    <string name=\"remove_group\">Grubu sil</string>\n    <string name=\"remove_group_description\">Bu grubu silmek istediğinize emin misiniz? Bu gruptaki girdiler otomatik olarak \\'Grupsuz\\' grubuna geçecek.</string>\n    <string name=\"remove_unused_groups\">Kullanılmayan grupları sil</string>\n    <string name=\"remove_unused_groups_description\">Bir girişe atanmamış tüm grupları silmek istediğinizden emin misiniz?</string>\n    <string name=\"remove_icon_pack\">İkon paketini sil</string>\n    <string name=\"remove_icon_pack_description\">Bu ikon paketini silmek istediğinize emin misiniz? Bu pakete ait ikonları kullanan girdiler bundan etkilenmeyeceklerdir.</string>\n    <string name=\"details\">Detaylar</string>\n    <string name=\"show_error_details\">Hata detaylarını göster</string>\n    <string name=\"lock\">Kilitle</string>\n    <string name=\"name\">Ad</string>\n    <string name=\"no_group\">Grupsuz</string>\n    <string name=\"sort\" comment=\"Title of the Sort button in the top action bar of the main view\">Sırala</string>\n    <string name=\"sort_alphabetically\">Sağlayıcı (A\\'dan Z\\'ye)</string>\n    <string name=\"sort_alphabetically_reverse\">Sağlayıcı (Z\\'den A\\'ya)</string>\n    <string name=\"sort_alphabetically_name\">Hesap (A\\'dan  Z\\'ye)</string>\n    <string name=\"sort_alphabetically_name_reverse\">Hesap (Z\\'den A\\'ya)</string>\n    <string name=\"sort_usage_count\">Kullanım sayısı</string>\n    <string name=\"sort_last_used\">Son kullanım</string>\n    <string name=\"sort_custom\">İsteğe göre</string>\n    <string name=\"last_used\">Son kullanım</string>\n    <string name=\"last_used_never\">asla</string>\n    <string name=\"new_group\">Yeni grup…</string>\n    <string name=\"group\">Grup</string>\n    <string name=\"group_name_hint\">Grup adı</string>\n    <string name=\"preference_manage_groups\">Grupları düzenle</string>\n    <string name=\"preference_manage_groups_summary\">Gruplandırmalarınızı burada düzenleyebilir ve silebilirsiniz</string>\n    <string name=\"preference_reset_usage_count\">Kullanım sayısını sıfırla</string>\n    <string name=\"preference_reset_usage_count_summary\">Kasanızdaki bütün girdilerin kullanım sayısını sıfırlayın</string>\n    <string name=\"preference_reset_usage_count_dialog\">Kasanızdaki bütün girdilerin kullanım sayısını sıfırlamak istediğinize emin misiniz?</string>\n    <string name=\"note\" comment=\"Users can add a note to an entry\">Not</string>\n    <string name=\"clear\">Temizle</string>\n    <string name=\"dialog_duplicate_entry_title\" comment=\"'Duplicate' is a noun here\">Girdiyi çokla</string>\n    <string name=\"dialog_duplicate_entry_message\">Bu girdi, var olan bir veya birden fazla girdiyle aynı ismi ve sağlayıcıyı içeriyor. Nasıl devam etmek istersiniz?</string>\n    <string name=\"dialog_duplicate_entry_overwrite_title\">Var olan girdi/girdilerin üstüne yaz</string>\n    <string name=\"dialog_duplicate_entry_overwrite_subtitle\">Var olan girdi veya girdileri yeni olanla değiştir. Bu işlem geri alınamaz</string>\n    <string name=\"dialog_duplicate_entry_suffix_title\">Son ek ekle</string>\n    <string name=\"dialog_duplicate_entry_suffix_subtitle\">Bu yeni girdinin ismine bir son ek ekleyin. Yeni isim şu olacak: %s</string>\n    <string name=\"dialog_duplicate_entry_cancel_title\">Kaydı iptal et</string>\n    <string name=\"dialog_duplicate_entry_cancel_subtitle\">Yeniden kaydetmeyi denemeden önce düzenlemenize olanak sağlar</string>\n    <plurals name=\"dialog_duplicate_entry_overwrite_dialog_message\">\n        <item quantity=\"one\">Şu isimdeki girdiyi silmek istediğinizden emin misiniz?:\\n\\n%s - %s</item>\n        <item quantity=\"other\">Şu isimlerdeki %d girdiyi silmek istediğinizden emin misiniz?:\\n\\n%s - %s</item>\n    </plurals>\n    <string name=\"dialog_duplicate_entry_overwrite_dialog_title\">Silmeyi onayla</string>\n    <string name=\"pref_haptic_feedback_summary\">Kodlar yenilenirken cihazı titret</string>\n    <string name=\"pref_haptic_feedback_title\">Dokunsal geri dönüş</string>\n    <string name=\"pref_highlight_entry_title\">Dokunulan kodları belirt</string>\n    <string name=\"pref_highlight_entry_summary\">Kodların birbirlerinden ayırt edilmelerini kolaylaştırmak için geçici olarak belirginleştir</string>\n    <string name=\"pref_groups_multiselect_title\">Çoklu grup seçimi</string>\n    <string name=\"pref_groups_multiselect_summary\">Tek seferde çoklu grup seçimine izin ver</string>\n    <string name=\"pref_minimize_on_copy_title\">Kopyalarken simge durumuna küçült</string>\n    <string name=\"pref_minimize_on_copy_summary\">Bir anahtarı kopyaladıktan sonra uygulamayı simge durumuna küçültün</string>\n    <string name=\"pref_copy_behavior_title\">Erişim anahtarlarını panoya kopyala</string>\n    <string name=\"pref_search_behavior_title\">Arama davranışı</string>\n    <string name=\"pref_pause_entry_title\">Dokunulduğunda kodların yenilenmesini önle</string>\n    <string name=\"pref_pause_entry_summary\">Kodlara dokunarak yenilenmelerini önleyin. Odakta oldukları sürece kodlar yenilenmeyecektir. \\\"Dokunulan kodları belirt\\\" veya \\\"Görmek için dokunun\\\" açık olmasını gerektirir.</string>\n    <string name=\"pin_keyboard_description\">PIN klavyesini etkinleştirmek için şifrenizi girin. Bu şifreniz yalnızca rakamlardan oluşuyorsa çalışır</string>\n    <string name=\"pin_keyboard_error\">PIN klavyesini aktifleştirmede hata</string>\n    <string name=\"pin_keyboard_error_description\">PIN klavyesi kurulması mümkün değil. Şifreniz yalnızca rakamlardan oluşmalıdır.</string>\n    <string name=\"pin_keyboard_disabled\">Şifre değiştirildi. PIN klavyesi gösterilmeyecek.</string>\n    <string name=\"selected\">Seçilen</string>\n    <string name=\"dark_theme_title\">Karanlık Tema</string>\n    <string name=\"light_theme_title\">Aydınlık Tema</string>\n    <string name=\"amoled_theme_title\">AMOLED Tema</string>\n    <string name=\"system_theme_title\">Pil Tasarrufu Karar Versin</string>\n    <string name=\"system_amoled_theme_title\">Pil Tasarrufu Karar Versin (AMOLED)</string>\n    <string name=\"normal_viewmode_title\">Normal</string>\n    <string name=\"compact_mode_title\">Sıkı</string>\n    <string name=\"small_mode_title\">Küçük</string>\n    <string name=\"tiles_mode_title\">Kutucuklar</string>\n    <string name=\"unknown_issuer\">Bilinmeyen sağlayıcı</string>\n    <string name=\"unknown_account_name\">Bilinmeyen hesap adı</string>\n    <plurals name=\"import_error_dialog\">\n        <item quantity=\"one\">Aegis %d tokenı içe aktaramadı. Bu token atlanacak. Hata hakkında daha fazla bilgi görmek için \\'ayrıntılar\\'a basın.</item>\n        <item quantity=\"other\">Aegis %d tokenı içe aktaramadı. Bu tokenlar atlanacak. Hata hakkında daha fazla bilgi görmek için \\'ayrıntılar\\'a basın.</item>\n    </plurals>\n    <string name=\"unable_to_process_deeplink\">Derin bağlantı işlenemiyor</string>\n    <string name=\"unable_to_read_qrcode_file\">Dosyadan QR kodu okunamıyor ve işlenemiyor: %s.</string>\n    <string name=\"unable_to_process_shared_text\">OTP olarak paylaşılan metin işlenemiyor</string>\n    <string name=\"unable_to_read_qrcode_files\">Bazı kare kodlar okunamadı ve işlenemedi. Sadece %2$d/%1$d girdi içeri aktarılacak.</string>\n    <string name=\"unable_to_generate_qrcode\">QR Kodu oluşturulamadı</string>\n    <string name=\"select_picture\">Resim seç</string>\n    <string name=\"select_icon\">Simge seç</string>\n    <string name=\"tile_open_vault\" comment=\"label for a quick settings tile that opens the app when tapped\">Kasayı aç</string>\n    <string name=\"tile_open_scanner\" comment=\"label for a quick settings tile that opens the QR code scanner when tapped\">Okuyucuyu Aç</string>\n    <string name=\"toggle_checkboxes\">Kutucukları işaretleyin</string>\n    <string name=\"search\">Ara</string>\n    <string name=\"channel_name_lock_status\">Kilit durumu</string>\n    <string name=\"channel_description_lock_status\">Aegis kasa kilidinin açık olduğunu bildirmek üzere kalıcı bir bildirim gösterebilir.</string>\n    <string name=\"vault_unlocked_state\">Kasa kilidi açık. Kilitlemek için buraya dokunun.</string>\n    <string name=\"version\">Sürüm</string>\n    <string name=\"changelog\">Değişiklik Günlüğü</string>\n    <string name=\"whats_new\">Yeni ne var?</string>\n    <string name=\"github_description\">Kaynak kod, sorunlar ve bilgiler</string>\n    <string name=\"license\">Lisans</string>\n    <string name=\"license_description\">Aegis Doğrulayıcı GPLv3 lisansına sahiptir</string>\n    <string name=\"third_party_licenses\">Üçüncü taraf lisanslar</string>\n    <string name=\"third_party_licenses_description\">Aegis\\'in kullandığı üçüncü-parti kütüphanelerin lisansları</string>\n    <string name=\"country_netherlands\">Hollanda</string>\n    <string name=\"email_us\">Bir e-posta yazın</string>\n    <string name=\"visit_website\">Sitemizi ziyaret edin</string>\n    <string name=\"about_support\">Destek</string>\n    <string name=\"support_rate\">Puanla</string>\n    <string name=\"support_rate_description\">Bizi desteklemek için Google Play Store\\'da görüşünüzü bırakın</string>\n    <string name=\"webview_error\">Bu cihazda değişiklik günlüğünü ve lisansı görüntülemek için gerekli olan \\\"web view\\\" desteklenmiyor. Bu sistem bileşeni yerinde yok.</string>\n    <string name=\"email\">E-posta</string>\n    <string name=\"time_sync_warning_title\">Otomatik zaman senkronizasyonu</string>\n    <string name=\"time_sync_warning_message\">Aegis doğru kodları oluşturmak üzere sistem zamanın senkron olmasına ihtiyaç duyar. Birkaç saniyelik sapma hatalı kod oluşumuna neden olabilir. Görünüşe göre cihazınız zamanı otomatik senkronize etmeye ayarlanmamış. Şimdi ayarlamak ister misiniz?</string>\n    <string name=\"time_sync_warning_disable\">Beni uyarmayı bırak. Ne yaptığımı biliyorum.</string>\n    <string name=\"google_qr_export_unrelated\">Alakasız QR kod bulundu. Tarayıcıyı yeniden başlatmayı deneyin.</string>\n    <plurals name=\"google_qr_export_scanned\">\n        <item quantity=\"one\">%2$d/%1$d kare kod tarandı</item>\n        <item quantity=\"other\">%2$d/%1$d kare kod tarandı</item>\n    </plurals>\n    <string name=\"google_qr_export_unexpected\">%1$d kare kod beklendi ama %2$d kare kod tarandı</string>\n    <string name=\"backup_error_bar_message\"><b>Kasa yedeklenmesi başarısız oldu</b></string>\n    <string name=\"backup_error_dialog_details\" comment=\"The first parameter is the type of backup (e.g. built-in or Android backup). The second parameter is an elapsed time in the style of 'x seconds/minutes/days ago'.\">%1$s kullanılarak denenen kasa yedeklemesi oluşan bir hata sonucu başarısız oldu. Yedek %2$s kullanmaya çalıştı. Lütfen yedeklemelerin başarılı olabilmesi için yedekleme ayarlarınızı kontrol edin.\n    </string>\n    <string name=\"backup_permission_error_dialog_details\" comment=\"The first parameter is the type of backup (e.g. built-in or Android backup). The second parameter is an elapsed time in the style of 'x seconds/minutes/days ago'.\">%1$s kullanılarak denenen kasa yedeklemesi Aegis\\'in hedef yedekleme konumuna yazma erişimi olmaması sonucu başarısız oldu. Yedek %2$s kullanmaya çalıştı. Bu hata, yedekleme hedefini taşıdıysanız/yeniden isimlendirdiyseniz veya yakın zamanda Aegis\\'i bir yedeklemeden geri yüklediyseniz oluşabilir. Lütfen yedekleme konumunu yeniden ayarlayın.\n    </string>\n    <string name=\"backup_system_builtin\">Aegis dahili otomatik yedekleri</string>\n    <string name=\"backup_system_android\">Android\\'in bulut yedekleme sistemi</string>\n    <string name=\"backup_reminder_bar_message_with_latest\" comment=\"The parameter is an elapsed time in the style of 'x seconds/minutes/days ago'\">        Son yedek güncel değil (%s)\n    </string>\n    <string name=\"backup_reminder_bar_message\">        Değişiklikler yedeklenmedi\n    </string>\n    <string name=\"backup_reminder_bar_dialog_title\">Değişiklikler yedeklenmedi</string>\n    <string name=\"backup_reminder_bar_dialog_summary\">        Kasadaki son değişiklikler henüz yedeklenmedi. Hesaplarınıza erişimi kaybetmemek için düzenli olarak yedek almanız önemlidir. Lütfen ayarlar menüsünde otomatik yedeklemeleri ayarlamayı dikkate alın.\n    </string>\n    <string name=\"backup_reminder_bar_dialog_accept\">Yedeklemeleri ayarla</string>\n    <string name=\"backup_plaintext_export_warning\"><b>Kasa yakın zamanda düz metin olarak dışa aktarıldı</b></string>\n    <string name=\"pref_show_plaintext_warning_hint\">Bu uyarıyı bir daha gösterme</string>\n    <string name=\"backup_plaintext_warning_explanation\">Bu uyarı kısa süre önce kasanın şifrelenmemiş bir kopyasını dışa aktardığınız için gösterilir. Tokenlerinizin güvenliğini korumak için artık ihtiyaç duymadığınızda bu dosyayı silmenizi öneririz.</string>\n    <string name=\"switch_camera\">Kamerayı değiştir</string>\n    <string name=\"empty_list\">Gösterilecek kod yok. Girdi eklemeye sağ alt köşedeki artı işaretine dokunarak başlayın.</string>\n    <string name=\"empty_list_title\">Hiçbir girdi bulunamadı.</string>\n    <string name=\"empty_group_list\">Gösterilecek grup bulunamadı. Bir girdinin düzenleme ekranından grup ekleyin</string>\n    <string name=\"empty_group_list_title\">Grup bulunamadı</string>\n    <string name=\"no_icon_packs\">Henüz hiçbir ikon paketi içe aktarılmadı. Yeni bir tane eklemek için lütfen artı tuşuna basın. Tavsiye: <a href=\"https://aegis-icons.github.io\">aegis-icons</a>\\'u deneyin.</string>\n    <string name=\"no_icon_packs_title\">Simge paketi yok</string>\n    <string name=\"pick_icon\">Bir ikon seçin</string>\n    <string name=\"uncategorized\">Kategorisiz</string>\n    <string name=\"done\">Tamamlandı</string>\n    <plurals name=\"qr_count\">\n        <item quantity=\"one\">%d / %d QR kodu</item>\n        <item quantity=\"other\">%d / %d QR kodları</item>\n    </plurals>\n    <string name=\"next\">Sonraki</string>\n    <string name=\"previous\">Önceki</string>\n    <string name=\"copy_uri\">URI\\'ı kopyala</string>\n    <string name=\"unable_to_copy_uri_to_clipboard\">URI panoya kopyalanamıyor</string>\n    <string name=\"uri_copied_to_clipboard\">URI panoya kopyalandı</string>\n    <string name=\"transfer_entry_description\">Bu kare kodu aktarmak istediğiniz doğrulayıcı uygulamasıyla okutun</string>\n    <string name=\"transfer_entry_brightness\">Tam ekran parlaklığı için kare koda dokunun</string>\n    <string name=\"google_auth_compatible_transfer_description\">Bu QR kodlarını Aegis veya Google Authenticator ile tarayın.\\in\\Google Authenticator uygulamasının sınırlamaları nedeniyle, yalnızca TOTP &amp; SHA1 kullanan ve 6 basamaklı kodlar üreten TOTP belirteçleri dahildir</string>\n    <string name=\"password_strength_very_weak\">Çok zayıf</string>\n    <string name=\"password_strength_weak\">Zayıf</string>\n    <string name=\"password_strength_fair\">İdare Eder</string>\n    <string name=\"password_strength_good\">İyi</string>\n    <string name=\"password_strength_strong\">Güçlü</string>\n    <string name=\"password_strength_unknown\">Şifre, dayanıklılık analizi için fazla uzun</string>\n    <string name=\"pref_pin_keyboard_title\">Kilit ekranında PIN klavyesini kullan</string>\n    <string name=\"pref_pin_keyboard_summary\">Kilit ekranında PIN klavyesini kullanmak istiyorsanız aktive edin. Yalnızca rakamlardan oluşan şifrelerde çalışır</string>\n    <string name=\"title_activity_preferences\">Ayarlar</string>\n    <string name=\"title_activity_manage_groups\">Grupları yönet</string>\n    <string name=\"title_activity_transfer\">Girdileri aktar</string>\n    <string name=\"title_activity_about\">Hakkında</string>\n    <string name=\"title_activity_edit_entry\">Girdiyi düzenle</string>\n    <string name=\"title_activity_scan_qr\">QR Kodu Tara</string>\n    <string name=\"title_activity_import_entries\">Girdileri içe aktar</string>\n    <string name=\"title_activity_assign_icons\">Simgeleri ata</string>\n    <string name=\"title_activity_licenses\">Üçüncü taraf lisanslar</string>\n    <string name=\"dialog_wipe_entries_title\">Girdileri sil</string>\n    <string name=\"dialog_wipe_entries_message\">Kasanızda zaten girdiler bulunmaktadır. İçe aktarmadan önce bu girdileri silmek istediğinize emin misiniz?\\n\\n<b>Deponun içinde bulunan girdilere erişiminizi sonsuza dek kaybedeceksiniz.</b></string>\n    <string name=\"dialog_wipe_entries_checkbox\">Kasa içeriklerini temizle</string>\n    <string name=\"panic_trigger_ignore_toast\">Aegis panik tetiği algıladı, ancak bu ayar devre dışı, göz ardı ediliyor</string>\n    <string name=\"pref_panic_trigger_title\">Panik tetiklendiğinde kasayı sil</string>\n    <string name=\"pref_panic_trigger_summary\">Ripple\\'dan panik tetiklenmesi alınca kasayı sil</string>\n    <string name=\"import_vault\">Aegis kasasını içe aktar</string>\n    <string name=\"import_vault_hint\">Farklı bir 2FA uygulamasından içe aktarmak mı istiyorsunuz? Önce kurulumu tamamlayın ve ardından ayarlar menüsüne gidin.</string>\n    <plurals name=\"import_duplicate_toast\">\n        <item quantity=\"one\">%d potansiyel kopyanın işareti kaldırıldı. Lütfen giriş listesini inceleyin.</item>\n        <item quantity=\"other\">%d potansiyel kopyanın işareti kaldırıldı. Lütfen giriş listesini inceleyin.</item>\n    </plurals>\n    <string name=\"importer_help_2fas\">2FAS Authenticator dışa aktarım dosyasını sağlayın.</string>\n    <string name=\"importer_help_aegis\">Aegis dışarı aktarım/yedek dosyası sağlayın.</string>\n    <string name=\"importer_help_authenticator_plus\"><b>Ayarlar -&gt; Yedekleme &amp; Geri Yükleme -&gt; Metin ya da HTML olarak dışa aktar</b> yolunu izleyerek bir Authenticator Plus dışa aktarım dosyası sağlayın.</string>\n    <string name=\"importer_help_authy\"><b>/data/data/com.authy.authy/shared_prefs/com.authy.storage.tokens.authenticator.xml</b>dosyasını sağlayın, Authy\\'nin dahili depolama konumunda bulunabilir.</string>\n    <string name=\"importer_help_andotp\">andOTP dışa aktarım dosyasını sağlayın.</string>\n    <string name=\"importer_help_bitwarden\">Bitwarden\\'a ait bir yedekleme/aktarma dosyası sağlayın. Şifrelenmiş dosyalar desteklenmiyor.</string>\n    <string name=\"importer_help_battle_net_authenticator\">Dahili depolamada Battle.net Authenticator dizininde bulunan <b>/data/data/com.blizzard.messenger/shared_prefs/com.blizzard.messenger.authenticator_preferences.xml</b> dosyasının bir kopyasını sağlayın.</string>\n    <string name=\"importer_help_duo\">DUO\\'nun dahili depolama dizininde bulunan <b>/data/data/com.duosecurity.duomobile/files/duokit/accounts.json</b> dosyasının bir kopyasını sağlayın.</string>\n    <string name=\"importer_help_ente_auth\">Bir Ente Auth çıktı dosyası sağlayın. Şu anlık sadece şifrelenmemiş dosyalar desteklenmektedir.</string>\n    <string name=\"importer_help_freeotp\">FreeOTP 2: Bir yedek dosyası sağlayın.\\nFreeOTP 1.x: Dahili depolamada FreeOTP dizininde bulunan <b>/data/data/org.fedorahosted.freeotp/shared_prefs/tokens.xml</b> dosyasının kopyasını sağlayın.</string>\n    <string name=\"importer_help_freeotp_plus\">FreeOTP+ dışa aktarım dosyasını sağlayın.</string>\n    <string name=\"importer_warning_title_freeotp2\">FreeOTP 2 uyumluluğu</string>\n    <string name=\"importer_warning_message_freeotp2\">FreeOTP 2\\'de bozuk yedeğe yol açabilecek bir dizi sorun bulunmaktadır. Aegis olabildiğince fazla sayıda girdiyi kurtarmaya çalışacaktır fakat bazılarının hatta hepsinin içeri aktarılması başarısız olabilir.</string>\n    <string name=\"importer_help_google_authenticator\"><b>Yalnızca Google Authenticator v5.10 ve önceki sürümlerdeki veritabanı dosyaları desteklenir</b>.\\n\\nGoogle Authenticator\\'ın dahili depolama dizininde bulunan<b>/data/data/com.google.android.apps.authenticator2/databases/databases</b>dosyasının bir kopyasını temin edin.</string>\n    <string name=\"importer_help_microsoft_authenticator\"><b>/data/data/com.azure.authenticator/databases/PhoneFactor</b>dosyasını sağlayın, Microsoft Authenticator\\'ın dahili depolama konumunda bulunabilir.</string>\n    <string name=\"importer_help_plain_text\">Her bir satırında Google Authenticator URL\\'leri bulunan bir düz metin belgesi sağlayın.</string>\n    <string name=\"importer_help_proton_authenticator\"><b>Ayarlar -&gt; Dışa aktar</b> yoluyla elde edilen bir Proton Authenticator dışa aktarma dosyası (.json) sağlayın.</string>\n    <string name=\"importer_help_steam\"><b>Steam v3.0 ve daha yeni sürümler desteklenmez</b>. <b>/data/data/com.valvesoftware.android.steam.community/files/Steamguard-*.json</b> dosyasını sağlayın, Steam\\'in dahili depolama konumunda bulunabilir.</string>\n    <string name=\"importer_help_stratum\"><b>Ayarlar -&gt; Yedekle -&gt; Şifrelenmemiş dosyaya yedekle (önerilen) </b> yoluyla elde edilen bir Stratum dışa aktarma dosyası sağlayın.</string>\n    <string name=\"importer_help_totp_authenticator\">TOTP Authenticator dışa aktarım dosyasını sağlayın.</string>\n    <string name=\"importer_help_winauth\">WinAuth dışa aktarım dosyasını sağlayın.</string>\n    <string name=\"import_assign_icons_dialog_title\">Simgeleri ata</string>\n    <string name=\"import_assign_icons_dialog_text\">İçe aktarılan girişlere simgeler atamak istiyor musunuz?</string>\n    <string name=\"importer_encrypted_exception_google_authenticator\">Şifrelenmiş giriş geçildi: %s</string>\n    <string name=\"importer_help_direct\">Girdileri doğrudan %s\\'dan içeri aktar. Bunu yapabilmek için uygulamanın cihazınızda yüklü olması ve Aegis\\'in kök erişim iznine sahip olması gerekir.</string>\n    <string name=\"groups\">Gruplar</string>\n    <string name=\"pref_focus_search\">Uygulama başladığında arama bölümüne odaklan</string>\n    <string name=\"pref_focus_search_summary\">Uygulama açılır açılmaz arama menüsüne odaklan.</string>\n    <string name=\"pref_grouping_halves\">Yarımlar</string>\n    <string name=\"pref_grouping_none\">Gruplandırmasız</string>\n    <string name=\"pref_grouping_size_two\">2\\'li grup</string>\n    <string name=\"pref_grouping_size_three\">3\\'lü grup</string>\n    <string name=\"pref_grouping_size_four\">4\\'lü grup</string>\n    <string name=\"pref_copy_behavior_never\">Asla</string>\n    <string name=\"pref_copy_behavior_single_tap\">Tek dokunuş</string>\n    <string name=\"pref_copy_behavior_double_tap\">Çift dokunuş</string>\n    <string name=\"pref_account_name_position_hidden\">Gizli</string>\n    <string name=\"pref_account_name_position_end\">Yayınlayanın yanında</string>\n    <string name=\"pref_account_name_position_below\">Yayınlayanın altında</string>\n    <plurals name=\"time_elapsed_seconds\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"one\">%d saniye önce</item>\n        <item quantity=\"other\">%d saniye önce</item>\n    </plurals>\n    <plurals name=\"time_elapsed_minutes\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"one\">%d dakika önce</item>\n        <item quantity=\"other\">%d dakika önce</item>\n    </plurals>\n    <plurals name=\"time_elapsed_hours\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"one\">%d saat önce</item>\n        <item quantity=\"other\">%d saat önce</item>\n    </plurals>\n    <plurals name=\"time_elapsed_days\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"one\">%d gün önce</item>\n        <item quantity=\"other\">%d gün önce</item>\n    </plurals>\n    <plurals name=\"time_elapsed_years\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"one\">%d yıl önce</item>\n        <item quantity=\"other\">%d yıl önce</item>\n    </plurals>\n    <plurals name=\"dropdown_checkboxes_default_count\">\n        <item quantity=\"one\">%d öğe seçildi</item>\n        <item quantity=\"other\">%d öğe seçildi</item>\n    </plurals>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-tr-rTR-v29/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"system_theme_title\">Sistem varsayılanı</string>\n    <string name=\"system_amoled_theme_title\">Sistem varsayılanı (AMOLED)</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-uk-rUA/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources xmlns:tools=\"http://schemas.android.com/tools\">\n    <string name=\"action_settings\">Налаштування</string>\n    <string name=\"action_about\">Про додаток</string>\n    <string name=\"action_delete\">Видалити</string>\n    <string name=\"action_transfer\">Передати</string>\n    <string name=\"action_edit_icon\">Змінити іконку</string>\n    <string name=\"action_reset_usage_count\">Скинути лічильник використання</string>\n    <string name=\"action_reset_usage_count_dialog\">Ви впевнені, що хочете скинути лічильник використання цього запису на 0?</string>\n    <string name=\"action_default_icon\">Відновити іконку за замовчуванням</string>\n    <string name=\"discard\">Відхилити</string>\n    <string name=\"save\">Зберегти</string>\n    <string name=\"all\">Усі</string>\n    <string name=\"issuer\">Емітент</string>\n    <string name=\"yandex_pin\">PIN-код (4–16 цифр)</string>\n    <string name=\"motp_pin\">PIN-код (4 цифри)</string>\n    <string name=\"suggested\">Запропоновано</string>\n    <string name=\"usage_count\">Кількість використання</string>\n    <string name=\"warning\">Застереження</string>\n    <string name=\"pref_cat_appearance_app\">Програма</string>\n    <string name=\"pref_cat_appearance_entries\">Записи</string>\n    <string name=\"pref_cat_backups_android\">Android</string>\n    <string name=\"pref_cat_backups_auto\">Автоматичні резервні копії</string>\n    <string name=\"pref_section_behavior_title\">Поведінка</string>\n    <string name=\"pref_section_behavior_summary\">Налаштуйте поведінку під час взаємодії зі списком записів.</string>\n    <string name=\"pref_section_appearance_title\">Зовнішній вигляд</string>\n    <string name=\"pref_section_appearance_summary\">Налаштуйте тему, мову та інші параметри, які впливають на вигляд програми.</string>\n    <string name=\"pref_section_security_title\">Безпека</string>\n    <string name=\"pref_section_security_summary\">Налаштуйте шифрування, біометричне розблокування, автоблокування та інші параметри безпеки.</string>\n    <string name=\"pref_section_import_export_title\">Імпорт &amp; Експорт</string>\n    <string name=\"pref_section_import_export_summary\">Імпортуйте резервні копії Aegis або інших програм-автентифікаторів. Експортуйте ваше сховище Aegis.</string>\n    <string name=\"pref_section_audit_log_title\">Журнал подій</string>\n    <string name=\"pref_section_audit_log_summary\">Список усіх важливих подій, що відбулися в програмі.</string>\n    <string name=\"pref_section_backups_title\">Резервні копії</string>\n    <string name=\"pref_section_backups_summary\">Налаштуйте автоматичне резервне копіювання до обраного місця або дозвольте участь у системі хмарного резервного копіювання Android.</string>\n    <string name=\"pref_section_icon_packs\">Набори іконок</string>\n    <string name=\"pref_section_icon_packs_summary\">Керування та імпорт наборів іконок</string>\n    <string name=\"pref_select_theme_title\">Тема</string>\n    <string name=\"pref_dynamic_colors_title\">Динамічні кольори</string>\n    <string name=\"pref_dynamic_colors_summary\">Застосувати накладення на основі кольорів вашої теми Android</string>\n    <string name=\"pref_view_mode_title\">Режим перегляду</string>\n    <string name=\"pref_lang_title\">Мова</string>\n    <string name=\"pref_show_icons_title\">Показувати іконки</string>\n    <string name=\"pref_show_icons_summary\">Показувати іконки поруч з кожним записом</string>\n    <string name=\"pref_code_group_size_title\">Групування цифр</string>\n    <string name=\"pref_code_group_size_summary\">Виберіть, як групувати цифри у токенах</string>\n    <string name=\"pref_account_name_position_title\">Показати ім\\'я облікового запису</string>\n    <string name=\"pref_show_next_code_title\">Показати наступний код</string>\n    <string name=\"pref_show_next_code_summary\">Створити та показати наступний код заздалегідь</string>\n    <string name=\"pref_expiration_state_title\">Повідомляти про закінчення терміну дії кодів</string>\n    <string name=\"pref_expiration_state_summary\">Змінити колір кодів і змусити їх блимати, коли термін дії ось-ось закінчиться</string>\n    <string name=\"pref_expiration_state_fallback\">Змінити колір кодів, коли вони ось-ось закінчаться</string>\n    <string name=\"pref_shared_issuer_account_name_title\">Показувати ім\\'я облікового запису лише за необхідності</string>\n    <string name=\"pref_shared_issuer_account_name_summary\">Показувати назви облікових записів лише тоді, коли вони мають однакового емітента. Інші назви облікових записів буде приховано.</string>\n    <string name=\"pref_account_name_position_summary_override\">Це налаштування буде змінено через режим відображення плиток. Назва облікового запису буде відображатися під емітентом.</string>\n    <string name=\"pref_import_file_title\">Імпорт з файлу</string>\n    <string name=\"pref_import_file_summary\">Імпортувати токени з файлу</string>\n    <string name=\"pref_android_backups_title\">Хмарні резервні копії Android</string>\n    <string name=\"pref_android_backups_summary\">Дозволити системі хмарного резервного копіювання Android включати сховище Aegis у свої резервні копії. Підтримується лише для зашифрованих сховищ.</string>\n    <string name=\"pref_android_backups_hint\"><i>Резервне копіювання між пристроями працюватиме завжди, незалежно від налаштування вище</i></string>\n    <string name=\"pref_backups_title\">Автоматично створювати резервні копії сховища</string>\n    <string name=\"pref_backups_summary\">Автоматично створювати резервні копії сховища на зовнішніх носіях при внесенні змін. Підтримується лише для зашифрованих сховищ.</string>\n    <string name=\"pref_backups_reminder_title\">Нагадування про резервне копіювання</string>\n    <string name=\"pref_backups_reminder_summary\">Показати нагадування про необхідність створити резервну копію сховища, якщо ви ще не створили резервну копію після останніх змін.</string>\n    <string name=\"pref_backups_reminder_dialog_title\">Вимкнути нагадування про резервне копіювання</string>\n    <string name=\"pref_backups_reminder_dialog_summary\">Вимкнення цього нагадування означає, що Aegis не повідомлятиме вам, чи є у вас зміни, для яких ще не створено резервну копію. Це може призвести до втрати доступу до ваших токенів. Ви впевнені, що хочете вимкнути нагадування?</string>\n    <string name=\"pref_backups_versioning_strategy_title\">Стратегія резервного копіювання</string>\n    <string name=\"pref_backups_versioning_strategy_keep_x_versions\">Зберігати кілька версій</string>\n    <string name=\"pref_backups_versioning_strategy_single_backup\">Одна резервна копія</string>\n    <string name=\"pref_backups_versioning_strategy_single_backup_warning\">Обрана стратегія резервного копіювання є ненадійною і не рекомендована. Збій однієї резервної копії може призвести до втрати вашої єдиної резервної копії.</string>\n    <string name=\"pref_backups_versioning_strategy_dialog_title\">Оберіть стратегію резервного копіювання</string>\n    <string name=\"pref_backups_location_title\">Місце зберігання резервної копії</string>\n    <string name=\"pref_backups_location_summary\">Резервні копії будуть зберігатися в</string>\n    <string name=\"pref_backup_location_summary\">Резервна копія буде зберігатися в</string>\n    <string name=\"pref_backups_trigger_title\">Створити резервну копію</string>\n    <string name=\"pref_backups_trigger_summary\">Створити резервну копію вручну</string>\n    <string name=\"pref_backups_versions_title\">Кількість версій, які необхідно зберігати</string>\n    <string name=\"pref_backups_versions_infinite\">\\u221E</string>\n    <plurals name=\"pref_backups_versions_summary\">\n        <item quantity=\"one\">Зберігати %1$d версію резервної копії</item>\n        <item quantity=\"few\">Зберігати %1$d версії резервної копії</item>\n        <item quantity=\"many\">Зберігати %1$d версій резервної копії</item>\n        <item quantity=\"other\">Зберігати %1$d версій резервної копії</item>\n    </plurals>\n    <string name=\"pref_backups_versions_infinite_summary\">Зберігати необмежену кількість резервних копій</string>\n    <string name=\"pref_import_app_title\">Імпорт із застосунку</string>\n    <string name=\"pref_import_app_summary\">Імпортувати токени із застосунку (потребує root-доступу)</string>\n    <string name=\"pref_export_title\">Експорт</string>\n    <string name=\"pref_export_summary\">Експортувати сховище</string>\n    <string name=\"pref_password_reminder_title\">Нагадування пароля</string>\n    <string name=\"pref_google_auth_export_title\">Експорт для Google Authenticator</string>\n    <string name=\"pref_google_auth_export_descriptor\">Генерує QR-коди, сумісні з Google Authenticator</string>\n    <string name=\"pref_google_auth_export_no_data\">Немає даних для експорту</string>\n    <plurals name=\"pref_google_auth_export_incompatible_entries\">\n        <item quantity=\"one\">Пропущений %d несумісний елемент</item>\n        <item quantity=\"few\">Пропущено %d несумісні елементи</item>\n        <item quantity=\"many\">Пропущено %d несумісних елементів</item>\n        <item quantity=\"other\">Пропущено %d несумісних елементів</item>\n    </plurals>\n    <string name=\"pref_password_reminder_summary\">Показувати %s нагадування з проханням ввести пароль, щоб ви його не забули.</string>\n    <string name=\"pref_password_reminder_summary_disabled\">Вимкнено</string>\n    <string name=\"pref_secure_screen_title\">Безпека екрану</string>\n    <string name=\"pref_secure_screen_summary\">Блокувати знімки екрану та інші спроби захоплення екрану в додатку</string>\n    <string name=\"pref_tap_to_reveal_title\">Показувати після дотику</string>\n    <string name=\"pref_tap_to_reveal_summary\">Токени будуть приховані за замовчуванням. Доторкніться до токена, щоб показати код.</string>\n    <string name=\"pref_tap_to_reveal_time_title\">Тривалість відображення коду після доторку</string>\n    <string name=\"pref_auto_lock_title\">Автоблокування</string>\n    <string name=\"pref_auto_lock_summary\">Коли %s</string>\n    <string name=\"pref_auto_lock_summary_disabled\">Вимкнено</string>\n    <string name=\"pref_auto_lock_prompt\">Автоматично блокувати Aegis коли</string>\n    <string name=\"pref_auto_lock_type_back_button\">Натиснута кнопка \\\"Назад\\\"</string>\n    <string name=\"pref_auto_lock_type_minimize\">Додаток згорнуто</string>\n    <string name=\"pref_auto_lock_type_device_lock\">Пристрій заблоковано</string>\n    <string name=\"pref_backup_password_category\">Резервне копіювання &amp; Експорт</string>\n    <string name=\"pref_backup_password_title\">Відокремити пароль для резервного копіювання та експорту</string>\n    <string name=\"pref_backup_password_summary\">Якщо увімкнено, пароль, що використовується для розблокування програми, більше не може розшифрувати резервні копії та експортовані копії.</string>\n    <string name=\"pref_backup_password_change_title\">Змінити пароль для резервних та експортованих копій</string>\n    <string name=\"pref_backup_password_change_summary\">Встановити новий пароль, який буде використовуватися для шифрування сховища під час резервного копіювання та експорту.</string>\n    <string name=\"pref_encryption_title\">Шифрування</string>\n    <string name=\"pref_encryption_summary\">Шифрувати сховище і розблоковувати його за допомогою паролю або біометрики</string>\n    <string name=\"pref_biometrics_title\">Біометричне розблокування</string>\n    <string name=\"pref_biometrics_summary\">Дозволити біометричну автентифікацію для розблокування сховища</string>\n    <string name=\"pref_search_behavior_summary\">Пошук по: %s</string>\n    <string name=\"pref_search_behavior_prompt\">Шукати в будь-якому з наступних полів</string>\n    <string name=\"pref_search_behavior_type_name\">Назва</string>\n    <string name=\"pref_search_behavior_type_issuer\">Емітент</string>\n    <string name=\"pref_search_behavior_type_note\">Нотатка</string>\n    <string name=\"pref_search_behavior_type_groups\">Групи</string>\n    <string name=\"pref_set_password_title\">Змінити пароль</string>\n    <string name=\"pref_set_password_summary\">Встановіть новий пароль, який вам буде потрібний для розблокування вашого сховища</string>\n    <string name=\"no_events_title\">Не повідомлялося про жодні події</string>\n    <string name=\"no_events_description\">У додатку не було повідомлено про жодні важливі події</string>\n    <string name=\"event_title_vault_unlocked\">Сховище розблоковано</string>\n    <string name=\"event_description_vault_unlocked\">Сховище успішно розблоковано</string>\n    <string name=\"event_title_backup_created\">Резервна копія створена</string>\n    <string name=\"event_description_backup_created\">Резервну копію сховища успішно створено</string>\n    <string name=\"event_title_android_backup_created\">Android створив резервну копію</string>\n    <string name=\"event_description_android_backup_created\">Android успішно створив резервну копію сховища</string>\n    <string name=\"event_title_vault_exported\">Сховище експортовано</string>\n    <string name=\"event_description_vault_exported\">Копія сховища була експортована</string>\n    <string name=\"event_title_entry_shared\">Записом поділились</string>\n    <string name=\"event_description_entry_shared\">Записом поділились</string>\n    <string name=\"event_title_vault_unlock_failed_password\">Не вдалося розблокувати сховище (пароль)</string>\n    <string name=\"event_description_vault_unlock_failed_password\">Не вдалось розблокувати сховище за допомогою пароля</string>\n    <string name=\"event_title_vault_unlock_failed_biometrics\">Не вдалося розблокувати сховище (біометрія)</string>\n    <string name=\"event_description_vault_unlock_failed_biometrics\">Не вдалось розблокувати сховище за допомогою біометрії</string>\n    <string name=\"event_unknown\">Невідомий тип події</string>\n    <string name=\"audit_log_entry_deleted\">(видалено)</string>\n    <string name=\"today_at_time\">Сьогодні о %1$s</string>\n    <string name=\"day_of_week_at_time\">%1$s о %2$s</string>\n    <string name=\"export_encrypted\">Зашифрувати сховище</string>\n    <string name=\"export_help\">Ця дія експортує внутрішнє сховище додатка Aegis. Виберіть формат:</string>\n    <string name=\"export_warning_unencrypted\">Ви збираєтеся експортувати незашифровану копію вашого сховища Aegis. <b>Це не рекомендується</b>.</string>\n    <string name=\"export_warning_password\">Експортовані копії зашифровано окремим паролем, що був заданий в налаштуваннях безпеки.</string>\n    <string name=\"understand_risk_accept\">Я розумію ризик</string>\n    <string name=\"export_format_aegis\">Aegis (.JSON)</string>\n    <string name=\"export_format_google_auth_uri\">Текстовий файл (.TXT)</string>\n    <string name=\"export_format_html\">Веб-сторінка (.HTML)</string>\n    <string name=\"export_format_hint\">Формат експорту</string>\n    <string name=\"export_all_groups\">Експортувати усі групи</string>\n    <string name=\"export_choose_groups\">Оберіть групи для експорту</string>\n    <plurals name=\"export_groups_selected_count\">\n        <item quantity=\"one\">%d групу обрано</item>\n        <item quantity=\"few\">%d групи обрано</item>\n        <item quantity=\"many\">%d груп обрано</item>\n        <item quantity=\"other\">%d груп обрано</item>\n    </plurals>\n    <string name=\"export_no_groups_selected\">Не вибрано жодної групи для експорту</string>\n    <string name=\"export_html_title\" comment=\"The title of an HTML export document\">Експорт Aegis Authenticator</string>\n    <string name=\"choose_authentication_method\">Безпека</string>\n    <string name=\"authentication_method_explanation\">Aegis - це орієнтований на безпеку додаток для двофакторної автентифікації (2FA). Токени зберігаються в сховищі, яке за бажанням можна зашифрувати за допомогою вибраного вами пароля. Якщо зловмисник отримає ваш зашифрований файл сховища, то він не зможе отримати доступ до змісту, не знаючи пароля.\\n\\nМи обрали варіант, який, на нашу думку, найкраще підходить для вашого пристрою.</string>\n    <string name=\"authentication_method_none\">Немає</string>\n    <string name=\"authentication_method_none_description\">Для розблокування сховища не потрібен пароль. Сховище не буде зашифроване. <b>Ця опція не рекомендується</b>.</string>\n    <string name=\"authentication_method_password\">Пароль</string>\n    <string name=\"authentication_method_password_description\">Для розблокування сховища необхідно ввести пароль.</string>\n    <string name=\"authentication_method_password_explanation\">Увага: якщо ви забудете пароль, ви назавжди втратите доступ до своїх токенів. Їх неможливо відновити без пароля.</string>\n    <string name=\"authentication_method_biometrics\">Біометрика</string>\n    <string name=\"authentication_method_biometrics_description\">Окрім пароля, для розблокування сховища можна використовувати біометричні дані зареєстровані на цьому пристрої, такі як відбитки пальців або ваше обличчя.</string>\n    <string name=\"authentication\">Розблокування сховища</string>\n    <string name=\"authentication_multiline\" comment=\"The newline in the middle is used for aesthetic purposes\">Розблокування\\nсховища</string>\n    <string name=\"auth_use_biometrics\">Або натисніть тут, щоб використати <font fgcolor=\"#FF0D86C1\">біометрику</font></string>\n    <string name=\"set_password\">Будь ласка, введіть пароль</string>\n    <string name=\"set_group\">Будь ласка, введіть назву групи</string>\n    <string name=\"set_number\">Будь ласка, введіть число</string>\n    <string name=\"set_password_confirm\">Будь ласка, підтвердьте пароль</string>\n    <string name=\"invalid_password\">Неправильний пароль</string>\n    <string name=\"invalidated_biometrics\">Виявлено зміни в налаштуваннях безпеки вашого пристрою. Будь ласка, перейдіть до \\\"Aegis -&gt; Налаштування -&gt; Безпека -&gt; Біометричне розблокування\\\", щоб вимкнути та повторно увімкнути біометричне розблокування.</string>\n    <string name=\"password_reminder\">Будь ласка, введіть свій пароль. Ми іноді просимо вас це зробити, щоб ви його не забули.</string>\n    <string name=\"password_reminder_dialog_title\">Біометричне розблокування за замовчуванням</string>\n    <string name=\"password_reminder_dialog_message\">Іноді ми просимо вас ввести пароль, щоб переконатися, що ви його не забули та не втратите доступ до свого сховища. Після одноразового введення пароля Aegis повернеться до біометричного розблокування, поки не настане час для наступного нагадування про пароль.</string>\n    <string name=\"password_reminder_freq_never\">Ніколи</string>\n    <string name=\"password_reminder_freq_weekly\">Щотижня</string>\n    <string name=\"password_reminder_freq_biweekly\">Двічі на тиждень</string>\n    <string name=\"password_reminder_freq_monthly\">Щомісячно</string>\n    <string name=\"password_reminder_freq_quarterly\">Щокварталу</string>\n    <string name=\"enter_password_2fas_message\">Схоже, що ця резервна копія 2FAS зашифрована. Введіть пароль нижче.</string>\n    <string name=\"enter_password_authy_message\">Схоже, що ваші токени Authy зашифровані. Закрийте Aegis, відкрийте Authy та розблокуйте токени своїм паролем. Натомість Aegis також може спробувати розшифрувати ваші токени Authy, якщо ви введете свій пароль нижче.</string>\n    <string name=\"enter_password_aegis_title\">Будь ласка, введіть пароль для імпорту</string>\n    <string name=\"period_hint\">Період (секунди)</string>\n    <string name=\"algorithm_hint\">Хеш-функція</string>\n    <string name=\"type\">Тип</string>\n    <string name=\"share\">Поділитися</string>\n    <string name=\"yes\">Так</string>\n    <string name=\"no\">Ні</string>\n    <string name=\"undo\">Скасувати</string>\n    <string name=\"unlock\">Розблокувати</string>\n    <string name=\"advanced\">Розширені</string>\n    <string name=\"counter\">Лічильник</string>\n    <string name=\"digits\">К-сть цифр</string>\n    <string name=\"secret\">Таємний код</string>\n    <string name=\"scan\">Сканувати QR-код</string>\n    <string name=\"scan_image\">Сканувати зображення</string>\n    <string name=\"enter_manually\">Ввести вручну</string>\n    <string name=\"set_up_biometric\">Налаштувати біометричне розблокування</string>\n    <string name=\"copy\">Копіювати</string>\n    <string name=\"edit\">Редагувати</string>\n    <string name=\"select_all\">Вибрати все</string>\n    <string name=\"assign_icons\">Призначити піктограми</string>\n    <string name=\"assign_groups\">Призначити групу</string>\n    <string name=\"assign_groups_dialog_summary\">Виберіть групу, до якої ви хочете призначити вибрані записи.</string>\n    <string name=\"assign_groups_dialog_dropdown\">Виберіть групу</string>\n    <string name=\"favorite\" comment=\"Verb\">Додати до улюблених</string>\n    <string name=\"unfavorite\" comment=\"Verb\">Вилучити з улюбленого</string>\n    <string name=\"error_all_caps\">ПОМИЛКА</string>\n    <string name=\"password\">Пароль</string>\n    <string name=\"confirm_password\">Підтвердьте пароль</string>\n    <string name=\"show_password\">Показати пароль</string>\n    <string name=\"new_entry\">Новий запис</string>\n    <string name=\"add_new_entry\">Додати запис</string>\n    <string name=\"unlock_vault_error\">Не вдалося розблокувати сховище</string>\n    <string name=\"unlock_vault_error_description\">Неправильний пароль. Переконайтеся, що ви ввели свій пароль без помилок.</string>\n    <string name=\"password_equality_error\">Паролі мають бути однаковими і не порожніми</string>\n    <string name=\"snackbar_authentication_method\">Будь ласка, виберіть спосіб автентифікації</string>\n    <string name=\"encrypting_vault\">Шифрування сховища</string>\n    <string name=\"exporting_vault\">Експорт сховища</string>\n    <string name=\"optimizing_icon\">Оптимізація піктограми</string>\n    <string name=\"optimizing_icon_multiple\">Оптимізація піктограм %1$d із %2$d</string>\n    <string name=\"reading_file\">Читання файлу</string>\n    <string name=\"requesting_root_access\">Запит на root-доступ</string>\n    <string name=\"analyzing_qr\">Аналіз QR-коду</string>\n    <string name=\"analyzing_qr_multiple\">Аналіз QR-коду %1$d із %2$d (%3$s)</string>\n    <plurals name=\"added_new_entries\">\n        <item quantity=\"one\">Додано %d новий запис у сховище</item>\n        <item quantity=\"few\">Додано %d нові записи у сховище</item>\n        <item quantity=\"many\">Додано %d нових записів у сховище</item>\n        <item quantity=\"other\">Додано %d нових записів у сховище</item>\n    </plurals>\n    <string name=\"importing_icon_pack\">Імпортування пакету піктограм</string>\n    <string name=\"delete_entry\">Видалити запис</string>\n    <string name=\"delete_entry_description\">Ви впевнені, що хочете видалити цей запис?</string>\n    <string name=\"delete_entry_explanation\">Ця дія не вимикає двофакторну аутентифікацію для:\\n<b>%s</b>\\n\\nЩоб запобігти втраті доступу, переконайтеся, що ви вимкнули двофакторну аутентифікацію або ж у вас є альтернативний спосіб генерування кодів для цієї служби.</string>\n    <string name=\"delete_entries\">Видалити записи</string>\n    <plurals name=\"delete_entries_description\">\n        <item quantity=\"one\">Ви впевнені, що хочете видалити %d запис?</item>\n        <item quantity=\"few\">Ви впевнені, що хочете видалити %d записи?</item>\n        <item quantity=\"many\">Ви впевнені, що хочете видалити %d записи?</item>\n        <item quantity=\"other\">Ви впевнені, що хочете видалити %d записи?</item>\n    </plurals>\n    <string name=\"discard_changes\">Відхилити зміни?</string>\n    <string name=\"discard_changes_description\">Ваші зміни не були збережені</string>\n    <string name=\"saving_profile_error\">Помилка під час збереження профілю</string>\n    <string name=\"saving_assign_icons_error\">Помилка при призначенні піктограм</string>\n    <string name=\"welcome\">Ласкаво просимо</string>\n    <string name=\"app_description\">Aegis є безкоштовним, безпечним та відкритим додатком для 2FA</string>\n    <string name=\"setup_completed\">Налаштування завершено</string>\n    <string name=\"setup_completed_description\">Aegis налаштований і готовий до роботи.</string>\n    <string name=\"vault_not_found\">Сховище не знайдено, запуск початкового налаштування…</string>\n    <string name=\"copied\">Скопійовано</string>\n    <string name=\"errors_copied\">Помилки скопійовано в буфер обміну</string>\n    <string name=\"version_copied\">Версію скопійовано в буфер обміну</string>\n    <string name=\"error_required_field\">Це поле обовʼязкове</string>\n    <string name=\"error_occurred\">Виникла помилка</string>\n    <string name=\"decryption_error\">Сталася помилка під час спроби розблокувати сховище</string>\n    <string name=\"decryption_corrupt_error\">Сталася помилка під час спроби розблокувати сховище. Можливо, файл сховища пошкоджено.</string>\n    <string name=\"saving_error\">Сталася помилка під час спроби зберегти сховище</string>\n    <string name=\"vault_init_error\">Сталася помилка під час спроби ініціалізації сховища</string>\n    <string name=\"vault_load_error\">Сталася помилка під час спроби завантажити сховище з носія</string>\n    <string name=\"biometric_decrypt_error\">Сталася помилка під час спроби розшифрувати сховище за допомогою біометричної автентифікації. Це зазвичай трапляється лише при зміні налаштувань безпеки вашого пристрою. Будь ласка, розблокуйте сховище вашим паролем, щоб переналаштувати біометричну автентифікацію в налаштуваннях Aegis.</string>\n    <string name=\"biometric_init_error\">Сталася помилка під час спроби підготувати біометричну автентифікацію. Це зазвичай трапляється лише при зміні налаштувань безпеки вашого пристрою. Будь ласка, розблокуйте сховище вашим паролем, щоб переналаштувати біометричну автентифікацію в налаштуваннях Aegis.</string>\n    <string name=\"disable_encryption\">Вимкнути шифрування</string>\n    <string name=\"disable_encryption_description\">Ви впевнені, що хочете вимкнути шифрування? Це призведе до того, що сховище зберігатиметься у вигляді простого тексту. <b>Автоматичне резервне копіювання також буде вимкнено</b>.</string>\n    <string name=\"enable_encryption_error\">Сталася помилка під час увімкнення шифрування</string>\n    <string name=\"disable_encryption_error\">Сталася помилка під час вимкнення шифрування</string>\n    <string name=\"backup_successful\">Резервне копіювання успішно заплановано</string>\n    <string name=\"backup_error\">Сталася помилка під час спроби створення резервної копії</string>\n    <string name=\"backup_status_success\">Створення резервної копії завершилося успішно: %s</string>\n    <string name=\"backup_status_failed\">Створення резервної копії завершилося невдало: %s</string>\n    <string name=\"backup_status_none\">Ще не було зроблено жодної резервної копії</string>\n    <string name=\"backup_warning_password\">Резервні копії зашифровані окремим паролем, що був заданий в налаштуваннях безпеки</string>\n    <string name=\"documentsui_error\">DocumentsUI відсутній на вашому пристрої. Це важливий системний компонент, необхідний для вибору та створення документів. Якщо ви використовували інструменти для очищення вашого пристрою від &quot;непотрібних&quot; додатків, ви могли випадково видалити його і вам доведеться його переінсталювати.</string>\n    <string name=\"icon_pack_import_error\">Сталася помилка при спробі імпорту пакету піктограм</string>\n    <string name=\"icon_pack_import_exists_error\">Пакет піктограм, який ви намагаєтеся імпортувати, вже існує. Ви хочете перезаписати його?</string>\n    <string name=\"icon_pack_delete_error\">Сталася помилка під час спроби видалити набір піктограм</string>\n    <plurals name=\"icon_pack_info\">\n        <item quantity=\"one\">%d піктограма</item>\n        <item quantity=\"few\">%d піктограми</item>\n        <item quantity=\"many\">%d піктограм</item>\n        <item quantity=\"other\">%d піктограм</item>\n    </plurals>\n    <string name=\"icon_custom\">Власний</string>\n    <string name=\"permission_denied\">Відмовлено у доступі</string>\n    <string name=\"andotp_new_format\">Новий формат (v0.6.3 або новіший) </string>\n    <string name=\"andotp_old_format\">Старий формат (v0.6.2 або старіший) </string>\n    <string name=\"choose_andotp_importer\">Який формат має файл резервної копії andOTP?</string>\n    <string name=\"choose_totpauth_importer\">Чи ця резервна копія TOTP Authenticator зашифрована паролем?</string>\n    <string name=\"choose_application\">Виберіть програму, з якої ви хочете імпортувати</string>\n    <string name=\"choose_theme\">Виберіть бажану тему</string>\n    <string name=\"choose_account_name_position\">Виберіть бажане розташування імені облікового запису</string>\n    <string name=\"choose_view_mode\">Виберіть бажаний режим перегляду</string>\n    <string name=\"choose_copy_behavior\">Виберіть бажану поведінку копіювання</string>\n    <string name=\"parsing_file_error\">Сталася помилка під час спроби проаналізувати файл</string>\n    <string name=\"file_not_found\">Помилка: Файл не знайдено</string>\n    <string name=\"reading_file_error\">Сталася помилка при спробі прочитати файл</string>\n    <string name=\"app_lookup_error\">Помилка: Додаток не встановлено</string>\n    <string name=\"app_version_error\">Встановлена версія %s не підтримується. Останні версії почали шифрувати деякі файли у своїй внутрішній теці, тому Aegis не в змозі отримати доступ до потрібної інформації для імпорту. Спроба імпорту скоріш за все призведе до помилки. Чи бажаєте ви все одно продовжити?</string>\n    <string name=\"root_error\">Помилка: неможливо отримати root-доступ</string>\n    <plurals name=\"imported_entries_count\">\n        <item quantity=\"one\">Імпортовано %d запис</item>\n        <item quantity=\"few\">Імпортовано %d записи</item>\n        <item quantity=\"many\">Імпортовано %d записів</item>\n        <item quantity=\"other\">Імпортовано %d записів</item>\n    </plurals>\n    <plurals name=\"entries_shown\">\n        <item quantity=\"one\">Показано %d елемент</item>\n        <item quantity=\"few\">Показано %d елементи</item>\n        <item quantity=\"many\">Показано %d елементів</item>\n        <item quantity=\"other\">Показано %d елементів</item>\n    </plurals>\n    <string name=\"intro_import_error_title\">Сталася помилка під час імпорту сховища</string>\n    <string name=\"import_error_title\">Під час імпорту сталася одна або кілька помилок</string>\n    <string name=\"exporting_vault_error\">Сталася помилка під час спроби експортувати сховище</string>\n    <string name=\"exported_vault\">Сховище експортовано</string>\n    <string name=\"encryption_set_password_error\">Сталася помилка під час спроби встановити пароль.</string>\n    <string name=\"encryption_enable_biometrics_error\">Сталася помилка під час спроби активувати біометричне розблокування. Деякі пристрої мають погану реалізацію біометричної автентифікації і цілком ймовірно, що ваш пристрій є одним із них. Розгляньте можливість переходу на розблокування лише паролем.</string>\n    <string name=\"no_cameras_available\">Немає доступних камер</string>\n    <string name=\"read_qr_error\">Сталася помилка при спробі прочитати QR-код</string>\n    <string name=\"read_qr_error_phonefactor\">Aegis не сумісний з пропрієтарним алгоритмом 2FA від Microsoft. Будь ласка, оберіть \\\"Налаштування програми без сповіщень\\\" при налаштуванні 2FA в Office 365.</string>\n    <string name=\"partial_google_auth_import\">Виявлено неповний експорт з Google Authenticator</string>\n    <string name=\"partial_google_auth_import_warning\">Деякі QR-коди відсутні у вашому імпорті. Наступні коди не були знайдені:\\n\\n<b>%s</b>\\n\\nВи можете продовжити імпорт цього часткового файлу експорту, але ми рекомендуємо спробувати ще раз з усіма QR-кодами, щоб уникнути ризику втрати доступу до токенів.</string>\n    <string name=\"missing_qr_code_descriptor\">• QR-код %d</string>\n    <plurals name=\"import_partial_export_anyway\">\n        <item quantity=\"one\">Все одно імпортувати %d токен</item>\n        <item quantity=\"few\">Все одно імпортувати %d токена</item>\n        <item quantity=\"many\">Все одно імпортувати %d токенів</item>\n        <item quantity=\"other\">Все одно імпортувати %d токенів</item>\n    </plurals>\n    <string name=\"import_google_auth_failure\">Не вдалося імпортувати дані з Google Authenticator</string>\n    <string name=\"unrelated_google_auth_batches_error\">Експорт містить інформацію про непов\\'язаний пакет. Спробуйте імпортувати пакети по одному.</string>\n    <string name=\"no_tokens_can_be_imported\">В результаті жоден токен не може бути імпортований</string>\n    <string name=\"unlocking_vault\">Розблокування сховища</string>\n    <string name=\"rename_group\">Перейменувати групу</string>\n    <string name=\"no_group_selection\">Якщо запис не входить до жодної групи, його можна знайти в розділі «Без групи».</string>\n    <string name=\"remove_group\">Видалити групу</string>\n    <string name=\"remove_group_description\">Ви впевнені, що хочете видалити цю групу? Записи у цій групі автоматично перемістяться в \\'Без групи\\'.</string>\n    <string name=\"remove_unused_groups\">Видалити невикористані групи</string>\n    <string name=\"remove_unused_groups_description\">Ви впевнені, що хочете видалити всі групи, які не прив\\'язані до жодного запису?</string>\n    <string name=\"remove_icon_pack\">Видалити набір піктограм</string>\n    <string name=\"remove_icon_pack_description\">Ви впевнені, що хочете видалити цей пакет піктограм? Записи які використовують даний пакет, не будуть порушені.</string>\n    <string name=\"details\">Деталі</string>\n    <string name=\"show_error_details\">Показати подробиці помилки</string>\n    <string name=\"lock\">Заблокувати</string>\n    <string name=\"name\">Назва</string>\n    <string name=\"no_group\">Без групи</string>\n    <string name=\"sort\" comment=\"Title of the Sort button in the top action bar of the main view\">Сортувати</string>\n    <string name=\"sort_alphabetically\">Емітент (А - Я)</string>\n    <string name=\"sort_alphabetically_reverse\">Емітент (Я - А)</string>\n    <string name=\"sort_alphabetically_name\">Обліковий запис (A - Я)</string>\n    <string name=\"sort_alphabetically_name_reverse\">Обліковий запис (Я - А)</string>\n    <string name=\"sort_usage_count\">Кількість використання</string>\n    <string name=\"sort_last_used\">Востаннє використано</string>\n    <string name=\"sort_custom\">Довільно</string>\n    <string name=\"last_used\">Востаннє використано</string>\n    <string name=\"last_used_never\">ніколи</string>\n    <string name=\"new_group\">Нова група…</string>\n    <string name=\"group\">Група</string>\n    <string name=\"group_name_hint\">Назва групи</string>\n    <string name=\"preference_manage_groups\">Редагувати групи</string>\n    <string name=\"preference_manage_groups_summary\">Керуйте групами та видаляйте їх тут</string>\n    <string name=\"preference_reset_usage_count\">Скинути лічильник використання</string>\n    <string name=\"preference_reset_usage_count_summary\">Скинути кількість використань кожного запису у вашому сховищі</string>\n    <string name=\"preference_reset_usage_count_dialog\">Ви впевнені, що хочете встановити кількість використань для кожного запису у вашому сховищі на 0?</string>\n    <string name=\"note\" comment=\"Users can add a note to an entry\">Нотатка</string>\n    <string name=\"clear\">Очистити</string>\n    <string name=\"dialog_duplicate_entry_title\" comment=\"'Duplicate' is a noun here\">Дублювати запис</string>\n    <string name=\"dialog_duplicate_entry_message\">Цей запис має таку саму назву та емітента, як один або декілька наявних записів. Як ви бажаєте продовжити?</string>\n    <string name=\"dialog_duplicate_entry_overwrite_title\">Перезаписати наявний запис/записи</string>\n    <string name=\"dialog_duplicate_entry_overwrite_subtitle\">Замініть наявний запис або записи новим. Цю дію неможливо скасувати</string>\n    <string name=\"dialog_duplicate_entry_suffix_title\">Додати суфікс</string>\n    <string name=\"dialog_duplicate_entry_suffix_subtitle\">Додайте суфікс до назви цього нового запису. Нова назва буде: %s</string>\n    <string name=\"dialog_duplicate_entry_cancel_title\">Скасувати збереження</string>\n    <string name=\"dialog_duplicate_entry_cancel_subtitle\">Дозволяє редагувати запис перед повторною спробою збереження</string>\n    <plurals name=\"dialog_duplicate_entry_overwrite_dialog_message\">\n        <item quantity=\"one\">Ви впевнені, що хочете видалити %d запис із наступними іменами:\\n\\n%s - %s</item>\n        <item quantity=\"few\">Ви впевнені, що хочете видалити %d записи із наступними іменами:\\n\\n%s - %s</item>\n        <item quantity=\"many\">Ви впевнені, що хочете видалити %d записів із наступними іменами:\\n\\n%s - %s</item>\n        <item quantity=\"other\">Ви впевнені, що хочете видалити %d записів із наступними іменами:\\n\\n%s - %s</item>\n    </plurals>\n    <string name=\"dialog_duplicate_entry_overwrite_dialog_title\">Підтвердити видалення</string>\n    <string name=\"pref_haptic_feedback_summary\">Увімкнути вібрацію пристрою під час оновлення кодів</string>\n    <string name=\"pref_haptic_feedback_title\">Тактильний зворотний зв\\'язок</string>\n    <string name=\"pref_highlight_entry_title\">Підсвічувати токени при натисканні</string>\n    <string name=\"pref_highlight_entry_summary\">Підсвічувати токени при натисканні для того, щоб їх було легше відрізнити один від одного</string>\n    <string name=\"pref_groups_multiselect_title\">Вибрати декілька груп</string>\n    <string name=\"pref_groups_multiselect_summary\">Дозволити вибір декількох груп одночасно</string>\n    <string name=\"pref_minimize_on_copy_title\">Згортати при копіюванні</string>\n    <string name=\"pref_minimize_on_copy_summary\">Згортати додаток після копіювання токена</string>\n    <string name=\"pref_copy_behavior_title\">Скопіювати токени в буфер обміну</string>\n    <string name=\"pref_search_behavior_title\">Поведінка пошуку</string>\n    <string name=\"pref_pause_entry_title\">Заморожувати токени при натисканні</string>\n    <string name=\"pref_pause_entry_summary\">Призупиніть автоматичне оновлення токенів, натиснувши на них. Токени не будуть оновлюватися, поки вони підсвічені. Потребує увімкненої опції \\\"Підсвічувати токени при натисканні\\\", або \\\"Безпека -> Показувати після дотику\\\".</string>\n    <string name=\"pin_keyboard_description\">Введіть свій пароль, щоб увімкнути PIN-клавіатуру. Зауважте, що це можливо лише, якщо ваш пароль складається виключно з цифр</string>\n    <string name=\"pin_keyboard_error\">Помилка при підключенні PIN-клавіатури</string>\n    <string name=\"pin_keyboard_error_description\">Неможливо увімкнути PIN-клавіатуру. Ваш пароль повинен складатися лише з цифр.</string>\n    <string name=\"pin_keyboard_disabled\">Пароль змінено. PIN-клавіатура більше не відображатиметься.</string>\n    <string name=\"selected\">Вибрано</string>\n    <string name=\"dark_theme_title\">Темна тема</string>\n    <string name=\"light_theme_title\">Світла тема</string>\n    <string name=\"amoled_theme_title\">AMOLED тема</string>\n    <string name=\"system_theme_title\">Визначається режимом економії заряду батареї</string>\n    <string name=\"system_amoled_theme_title\">Визначається режимом економії заряду батареї (AMOLED)</string>\n    <string name=\"normal_viewmode_title\">Стандартний</string>\n    <string name=\"compact_mode_title\">Компактний</string>\n    <string name=\"small_mode_title\">Зменшений</string>\n    <string name=\"tiles_mode_title\">Плитки</string>\n    <string name=\"unknown_issuer\">Невідомий емітент</string>\n    <string name=\"unknown_account_name\">Невідома назва облікового запису</string>\n    <plurals name=\"import_error_dialog\">\n        <item quantity=\"one\">Aegis не зміг імпортувати %d токен. Цей токен буде пропущено. Натисніть «деталі», щоб переглянути додаткову інформацію про помилку.</item>\n        <item quantity=\"few\">Aegis не зміг імпортувати %d токени. Ці токени буде пропущено. Натисніть «деталі», щоб переглянути додаткову інформацію про помилку.</item>\n        <item quantity=\"many\">Aegis не зміг імпортувати %d токенів. Ці токени буде пропущено. Натисніть «деталі», щоб переглянути додаткову інформацію про помилку.</item>\n        <item quantity=\"other\">Aegis не зміг імпортувати %d токенів. Ці токени буде пропущено. Натисніть «деталі», щоб переглянути додаткову інформацію про помилку.</item>\n    </plurals>\n    <string name=\"unable_to_process_deeplink\">Не вдалося обробити глибоке посилання</string>\n    <string name=\"unable_to_read_qrcode_file\">Не вдається прочитати і обробити QR-код із файлу: %s.</string>\n    <string name=\"unable_to_process_shared_text\">Неможливо обробити вхідний текст як OTP</string>\n    <string name=\"unable_to_read_qrcode_files\">Неможливо прочитати та обробити деякі QR-коди. Буде імпортовано лише %1$d із %2$d записів.</string>\n    <string name=\"unable_to_generate_qrcode\">Не вдається згенерувати QR-код</string>\n    <string name=\"select_picture\">Виберіть зображення</string>\n    <string name=\"select_icon\">Виберіть іконку</string>\n    <string name=\"tile_open_vault\" comment=\"label for a quick settings tile that opens the app when tapped\">Відкрити сховище</string>\n    <string name=\"tile_open_scanner\" comment=\"label for a quick settings tile that opens the QR code scanner when tapped\">Відкрити сканер</string>\n    <string name=\"toggle_checkboxes\">Перемкнути прапорці</string>\n    <string name=\"search\">Пошук</string>\n    <string name=\"channel_name_lock_status\">Статус блокування</string>\n    <string name=\"channel_description_lock_status\">Aegis може створити постійне сповіщення, щоб повідомляти вас, коли сховище заблоковано</string>\n    <string name=\"vault_unlocked_state\">Сховище розблоковано. Натисніть тут для блокування.</string>\n    <string name=\"version\">Версія</string>\n    <string name=\"changelog\">Журнал змін</string>\n    <string name=\"whats_new\">Що нового</string>\n    <string name=\"github_description\">Вихідний код, зауваження та інформація</string>\n    <string name=\"license\">Ліцензія</string>\n    <string name=\"license_description\">Aegis Authenticator ліцензований відповідно до GPLv3</string>\n    <string name=\"third_party_licenses\">Сторонні ліцензії</string>\n    <string name=\"third_party_licenses_description\">Ліцензії сторонніх бібліотек, які використовує Aegis</string>\n    <string name=\"country_netherlands\">Нідерланди</string>\n    <string name=\"email_us\">Написати листа</string>\n    <string name=\"visit_website\">Відвідати наш веб-сайт</string>\n    <string name=\"about_support\">Підтримка</string>\n    <string name=\"support_rate\">Оцінити</string>\n    <string name=\"support_rate_description\">Підтримайте нас, залишивши відгук на Google Play Store</string>\n    <string name=\"webview_error\">Цей пристрій не підтримує веб-перегляд, необхідний для перегляду журналу змін і ліцензії. У ньому відсутній системний компонент.</string>\n    <string name=\"email\">Ел. пошта</string>\n    <string name=\"time_sync_warning_title\">Автоматична синхронізація часу</string>\n    <string name=\"time_sync_warning_message\">Aegis залежить від системного часу для генерації правильних кодів. Відхилення всього на кілька секунд може призвести до неправильних кодів. Схоже, ваш пристрій не налаштовано на автоматичну синхронізацію часу. Бажаєте зробити це зараз?</string>\n    <string name=\"time_sync_warning_disable\">Припиніть мене попереджати. Я знаю, що роблю.</string>\n    <string name=\"google_qr_export_unrelated\">Знайдено непов\\'язаний QR-код. Спробуйте перезапустити сканер.</string>\n    <plurals name=\"google_qr_export_scanned\">\n        <item quantity=\"one\">Відскановано %1$d із %2$d QR-кодів</item>\n        <item quantity=\"few\">Відскановано %1$d із %2$d QR-кодів</item>\n        <item quantity=\"many\">Відскановано %1$d із %2$d QR-кодів</item>\n        <item quantity=\"other\">Відскановано %1$d із %2$d QR-кодів</item>\n    </plurals>\n    <string name=\"google_qr_export_unexpected\">Очікувався QR-код #%1$d, але замість цього було відскановано #%2$d</string>\n    <string name=\"backup_error_bar_message\"><b>Нещодавно не вдалося створити резервну копію сховища</b></string>\n    <string name=\"backup_error_dialog_details\" comment=\"The first parameter is the type of backup (e.g. built-in or Android backup). The second parameter is an elapsed time in the style of 'x seconds/minutes/days ago'.\">Нещодавня спроба створення резервної копії сховища за допомогою %1$s не вдалася через помилку. Спроба створення резервної копії була здійснена %2$s. Перевірте налаштування резервного копіювання, щоб переконатися, що резервне копіювання може бути успішно завершене.    </string>\n    <string name=\"backup_permission_error_dialog_details\" comment=\"The first parameter is the type of backup (e.g. built-in or Android backup). The second parameter is an elapsed time in the style of 'x seconds/minutes/days ago'.\">Нещодавня спроба створення резервної копії сховища за допомогою %1$s не вдалася, оскільки Aegis не мав дозволу на запис у місце призначення резервної копії. Спроба створення резервної копії була здійснена %2$s. Ця помилка може виникнути, якщо ви перемістили/перейменували місце призначення резервної копії або нещодавно відновили Aegis із резервної копії. Будь ласка, переналаштуйте місце призначення резервної копії    </string>\n    <string name=\"backup_system_builtin\">Вбудоване автоматичне резервне копіювання Aegis</string>\n    <string name=\"backup_system_android\">Система хмарного резервного копіювання Android</string>\n    <string name=\"backup_reminder_bar_message_with_latest\" comment=\"The parameter is an elapsed time in the style of 'x seconds/minutes/days ago'\">        Остання резервна копія застаріла (%s)\n    </string>\n    <string name=\"backup_reminder_bar_message\">        Резервну копію змін не створено\n    </string>\n    <string name=\"backup_reminder_bar_dialog_title\">Зміни не збережені</string>\n    <string name=\"backup_reminder_bar_dialog_summary\">Останні зміни в сховищі ще не були збережені. Важливо регулярно створювати резервні копії, щоб уникнути втрати доступу до своїх облікових записів. Рекомендуємо налаштувати автоматичне створення резервних копій в налаштуваннях    </string>\n    <string name=\"backup_reminder_bar_dialog_accept\">Налаштування резервних копій</string>\n    <string name=\"backup_plaintext_export_warning\"><b>Сховище нещодавно було експортовано у вигляді звичайного тексту</b></string>\n    <string name=\"pref_show_plaintext_warning_hint\">Не показувати це попередження в майбутньому</string>\n    <string name=\"backup_plaintext_warning_explanation\">Це попередження показується тому, що ви нещодавно експортували незашифровану копію сховища. Задля безпеки ваших токенів, ми рекомендуємо видалити цей файл, коли він стане непотрібним.</string>\n    <string name=\"switch_camera\">Змінити камеру</string>\n    <string name=\"empty_list\">Немає кодів для показу. Почніть додавати записи, натискаючи на знак плюса в нижньому правому куті</string>\n    <string name=\"empty_list_title\">Записів не знайдено</string>\n    <string name=\"empty_group_list\">Немає груп для показу. Додайте групи на екрані редагування запису</string>\n    <string name=\"empty_group_list_title\">Групи не знайдено</string>\n    <string name=\"no_icon_packs\">Пакети піктограм ще не імпортовано. Натисніть \\\"+\\\" для імпорту. Порада: спробуйте <a href=\"https://aegis-icons.github.io\">aegis-icon</a>.</string>\n    <string name=\"no_icon_packs_title\">Немає пакетів піктограм</string>\n    <string name=\"pick_icon\">Обрати піктограму</string>\n    <string name=\"uncategorized\">Без категорії</string>\n    <string name=\"done\">Готово</string>\n    <plurals name=\"qr_count\">\n        <item quantity=\"one\">%d / %d</item>\n        <item quantity=\"few\">%d / %d</item>\n        <item quantity=\"many\">%d / %d</item>\n        <item quantity=\"other\">%d / %d</item>\n    </plurals>\n    <string name=\"next\">Наступний</string>\n    <string name=\"previous\">Попередній</string>\n    <string name=\"copy_uri\">Копіювати URI</string>\n    <string name=\"unable_to_copy_uri_to_clipboard\">Не вдалося скопіювати URI в буфер обміну</string>\n    <string name=\"uri_copied_to_clipboard\">URI скопійовано в буфер обміну</string>\n    <string name=\"transfer_entry_description\">Відскануйте цей QR-код за допомогою додатка для авторизації, куди ви хочете перенести цей запис</string>\n    <string name=\"transfer_entry_brightness\">Натисніть на QR-код, щоб перемкнутися між максимальною та звичайною яскравістю</string>\n    <string name=\"google_auth_compatible_transfer_description\">Проскануйте ці QR-коди за допомогою Aegis або Google Authenticator.\\n\\nУ зв\\'язку з обмеженнями програми Google Authenticator включаються лише TOTP &amp; HOTP токени з використанням SHA1 і генерацією 6-цифрових кодів</string>\n    <string name=\"password_strength_very_weak\">Дуже слабкий</string>\n    <string name=\"password_strength_weak\">Слабкий</string>\n    <string name=\"password_strength_fair\">Нормальний</string>\n    <string name=\"password_strength_good\">Добрий</string>\n    <string name=\"password_strength_strong\">Сильний</string>\n    <string name=\"password_strength_unknown\">Пароль занадто довгий для аналізу надійності</string>\n    <string name=\"pref_pin_keyboard_title\">PIN-клавіатура на екрані блокування</string>\n    <string name=\"pref_pin_keyboard_summary\">Увімкніть, якщо хочете увімкнути PIN-клавіатуру на екрані блокування. Це працює тільки для числових паролів</string>\n    <string name=\"title_activity_preferences\">Налаштування</string>\n    <string name=\"title_activity_manage_groups\">Керувати групами</string>\n    <string name=\"title_activity_transfer\">Передача записів</string>\n    <string name=\"title_activity_about\">Про додаток</string>\n    <string name=\"title_activity_edit_entry\">Редагування запису</string>\n    <string name=\"title_activity_scan_qr\">Сканування QR-коду</string>\n    <string name=\"title_activity_import_entries\">Імпортування записів</string>\n    <string name=\"title_activity_assign_icons\">Призначити піктограми</string>\n    <string name=\"title_activity_licenses\">Ліцензії сторонніх виробників</string>\n    <string name=\"dialog_wipe_entries_title\">Очистити записи</string>\n    <string name=\"dialog_wipe_entries_message\">Ваше сховище вже містить записи. Видалити ці записи перед імпортом цього файлу?\\n\\n<b>При цьому ви назавжди втратите доступ до наявних записів у сховищі.</b></string>\n    <string name=\"dialog_wipe_entries_checkbox\">Очистити вміст сховища</string>\n    <string name=\"import_from_clipboard_title\">Імпортувати з буфера обміну</string>\n    <string name=\"import_from_clipboard_message\">Ми знайшли дійсний otpauth uri у вашому буфері обміну.\\n\\n<b>Ім\\'я</b>: %1$s\\n<b>Видавець</b>: %2$s\\n\\nЧи хочете ви використати його для попереднього заповнення цього запису?</string>\n    <string name=\"panic_trigger_ignore_toast\">Aegis отримав панічний тригер, але налаштування вимкнено, тому сигнал ігнорується</string>\n    <string name=\"pref_panic_trigger_title\">Видалити сховище при панічному тригері</string>\n    <string name=\"pref_panic_trigger_summary\">Видалити сховище після отримання панічного тригера Ripple</string>\n    <string name=\"import_vault\">Імпорт сховища Aegis</string>\n    <string name=\"import_vault_hint\">Хочете імпортувати дані з іншої програми 2FA? Спочатку завершіть налаштування, а потім перейдіть в налаштування.</string>\n    <plurals name=\"import_duplicate_toast\">\n        <item quantity=\"one\">Неперевірений %d потенційний дублікат. Будь ласка, перегляньте список записів.</item>\n        <item quantity=\"few\">Неперевірені %d потенційних дублікатів. Будь ласка, перегляньте список записів.</item>\n        <item quantity=\"many\">Неперевірені %d потенційних дублікатів. Будь ласка, перегляньте список записів.</item>\n        <item quantity=\"other\">Неперевірені %d потенційних дублікатів. Будь ласка, перегляньте список записів.</item>\n    </plurals>\n    <string name=\"importer_help_2fas\">Надайте файл резервної копії 2FAS Authenticator.</string>\n    <string name=\"importer_help_aegis\">Надайте файл експорту/резервної копії Aegis.</string>\n    <string name=\"importer_help_authenticator_plus\">Надайте файл експорту Authenticator Plus, отриманий через <b>Settings -&gt; Backup &amp; Restore -&gt; Export as Text and HTML</b>.</string>\n    <string name=\"importer_help_authy\">Надайте копію <b>/data/data/com.authy.authy/shared_prefs/com.authy.storage.tokens.authenticator.xml</b>, що знаходиться в каталозі Authy у внутрішній пам\\'яті.</string>\n    <string name=\"importer_help_andotp\">Надайте файл експорту/резервної копії andOTP.</string>\n    <string name=\"importer_help_bitwarden\">Надайте файл експорту/резервного копіювання Bitwarden. Зашифровані файли не підтримуються.</string>\n    <string name=\"importer_help_battle_net_authenticator\">Надайте копію файлу <b>/data/data/com.blizzard.messenger/shared_prefs/com.blizzard.messenger.authenticator_preferences.xml</b>, який знаходиться у внутрішньому каталозі Battle.net Authenticator.</string>\n    <string name=\"importer_help_duo\">Надайте копію <b>/data/data/com.duosecurity.duomobile/files/duokit/accounts.json</b>, що знаходиться у каталозі DUO у внутрішній пам\\'яті.</string>\n    <string name=\"importer_help_ente_auth\">Надайте файл експорту Ente Auth. Наразі підтримуються лише незашифровані файли.</string>\n    <string name=\"importer_help_freeotp\">FreeOTP 2: Надайте файл резервної копії.\\nFreeOTP 1.x: Надайте копію файлу <b>/data/data/org.fedorahosted.freeotp/shared_prefs/tokens.xml</b>, який знаходиться у внутрішньому каталозі FreeOTP.</string>\n    <string name=\"importer_help_freeotp_plus\">Надайте файл експортований з FreeOTP+.</string>\n    <string name=\"importer_warning_title_freeotp2\">Сумісність з FreeOTP 2</string>\n    <string name=\"importer_warning_message_freeotp2\">У FreeOTP 2 є ряд проблем, які можуть призвести до пошкодження резервних копій. Aegis спробує врятувати якомога більше записів, але можливо, що деякі або навіть усі з них не вдасться імпортувати.</string>\n    <string name=\"importer_help_google_authenticator\"><b>Підтримуються лише файли бази даних Google Authenticator v5.10 та попередніх версій</b>.\\n\\nНадайте копію <b>/data/data/com.google.android.apps.authenticator2/databases/databases</b>, що знаходиться у каталозі Google Authenticator у внутрішній пам\\'яті.</string>\n    <string name=\"importer_help_microsoft_authenticator\">Надайте копію <b>/data/data/com.azure.authenticator/databases/PhoneFactor</b>, що знаходиться у каталозі Microsoft Authenticator у внутрішній пам\\'яті.</string>\n    <string name=\"importer_help_plain_text\">Надайте звичайний текстовий файл з URI у форматі Google Authenticator у кожному рядку.</string>\n    <string name=\"importer_help_proton_authenticator\">Надайте експортований файл Proton Authenticator (.json), отриманий через <b>«Налаштування -&gt; Експорт»</b>.</string>\n    <string name=\"importer_help_steam\"><b>Steam v3.0 і новіші версії не підтримуються</b>. Надайте копію <b>/data/data/com.valvesoftware.android.steam.community/files/Steamguard-*.json</b>, що знаходиться у каталозі Steam у внутрішній пам\\'яті.</string>\n    <string name=\"importer_help_stratum\">Надайте файл експорту Stratum, отриманий через <b>Налаштування -&gt; Резервне копіювання -&gt; Резервне копіювання в зашифрований файл (рекомендовано)</b>.</string>\n    <string name=\"importer_help_totp_authenticator\">Надайте файл експортований з TOTP Authenticator.</string>\n    <string name=\"importer_help_winauth\">Надайте файл експортований з WinAuth.</string>\n    <string name=\"import_assign_icons_dialog_title\">Призначити піктограми</string>\n    <string name=\"import_assign_icons_dialog_text\">Ви хочете призначити значки для імпортованих записів?</string>\n    <string name=\"importer_encrypted_exception_google_authenticator\">Пропущено зашифрований запис: %s</string>\n    <string name=\"importer_help_direct\">Імпортувати записи безпосередньо з %s. Для цього потрібно встановити додаток на цьому пристрої і надати root-доступ додатку Aegis.</string>\n    <string name=\"groups\">Групи</string>\n    <string name=\"pref_focus_search\">Сфокусуватися на пошуку після запуску програми</string>\n    <string name=\"pref_focus_search_summary\">Сфокусуватися на пошуку відразу після відкриття додатка.</string>\n    <string name=\"pref_grouping_halves\">Половинки</string>\n    <string name=\"pref_grouping_none\">Без групування</string>\n    <string name=\"pref_grouping_size_two\">2 цифри у групі</string>\n    <string name=\"pref_grouping_size_three\">3 цифри у групі</string>\n    <string name=\"pref_grouping_size_four\">4 цифри у групі</string>\n    <string name=\"pref_copy_behavior_never\">Ніколи</string>\n    <string name=\"pref_copy_behavior_single_tap\">Один дотик</string>\n    <string name=\"pref_copy_behavior_double_tap\">Подвійний дотик</string>\n    <string name=\"pref_account_name_position_hidden\">Приховано</string>\n    <string name=\"pref_account_name_position_end\">Поруч з емітентом</string>\n    <string name=\"pref_account_name_position_below\">Нижче емітента</string>\n    <plurals name=\"time_elapsed_seconds\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"one\">%d секунду тому</item>\n        <item quantity=\"few\">%d секунди тому</item>\n        <item quantity=\"many\">%d секунд тому</item>\n        <item quantity=\"other\">%d секунд тому</item>\n    </plurals>\n    <plurals name=\"time_elapsed_minutes\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"one\">%d хвилину тому</item>\n        <item quantity=\"few\">%d хвилини тому</item>\n        <item quantity=\"many\">%d хвилин тому</item>\n        <item quantity=\"other\">%d хвилин тому</item>\n    </plurals>\n    <plurals name=\"time_elapsed_hours\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"one\">%d годину тому</item>\n        <item quantity=\"few\">%d години тому</item>\n        <item quantity=\"many\">%d годин тому</item>\n        <item quantity=\"other\">%d годин тому</item>\n    </plurals>\n    <plurals name=\"time_elapsed_days\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"one\">%d день тому</item>\n        <item quantity=\"few\">%d дні тому</item>\n        <item quantity=\"many\">%d днів тому</item>\n        <item quantity=\"other\">%d днів тому</item>\n    </plurals>\n    <plurals name=\"time_elapsed_years\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"one\">%d рік тому</item>\n        <item quantity=\"few\">%d роки тому</item>\n        <item quantity=\"many\">%d років тому</item>\n        <item quantity=\"other\">%d років тому</item>\n    </plurals>\n    <plurals name=\"dropdown_checkboxes_default_count\">\n        <item quantity=\"one\">Вибрано %d елемент</item>\n        <item quantity=\"few\">Вибрано %d елемента</item>\n        <item quantity=\"many\">Вибрано %d елементів</item>\n        <item quantity=\"other\">Вибрано %d елементів</item>\n    </plurals>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-uk-rUA-v29/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"system_theme_title\">Системні налаштування</string>\n    <string name=\"system_amoled_theme_title\">Системні налаштування (AMOLED)</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-v27/themes.xml",
    "content": "<resources>\n    <style name=\"Theme.Aegis.Light\" parent=\"Base.Theme.Aegis.Light\">\n        <item name=\"android:navigationBarColor\">@android:color/transparent</item>\n        <item name=\"android:windowLightNavigationBar\">true</item>\n        <item name=\"android:statusBarColor\">@android:color/transparent</item>\n        <item name=\"android:windowLightStatusBar\">true</item>\n    </style>\n\n    <style name=\"Theme.Aegis.Dark\" parent=\"Base.Theme.Aegis.Dark\">\n        <item name=\"android:navigationBarColor\">@android:color/transparent</item>\n        <item name=\"android:windowLightNavigationBar\">false</item>\n        <item name=\"android:statusBarColor\">@android:color/transparent</item>\n        <item name=\"android:windowLightStatusBar\">false</item>\n    </style>\n\n    <style name=\"Theme.Aegis.Amoled\" parent=\"Base.Theme.Aegis.Amoled\">\n        <item name=\"android:navigationBarColor\">@android:color/transparent</item>\n        <item name=\"android:windowLightNavigationBar\">false</item>\n        <item name=\"android:statusBarColor\">@android:color/transparent</item>\n        <item name=\"android:windowLightStatusBar\">false</item>\n    </style>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-v29/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"system_theme_title\">System default</string>\n    <string name=\"system_amoled_theme_title\">System default (AMOLED)</string>\n</resources>"
  },
  {
    "path": "app/src/main/res/values-vi-rVN/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources xmlns:tools=\"http://schemas.android.com/tools\">\n    <string name=\"action_settings\">Cài đặt</string>\n    <string name=\"action_about\">Giới thiệu</string>\n    <string name=\"action_delete\">Xóa</string>\n    <string name=\"action_transfer\">Truyền</string>\n    <string name=\"action_edit_icon\">Sửa biểu tượng</string>\n    <string name=\"action_reset_usage_count\">Đặt lại số lần sử dụng</string>\n    <string name=\"action_reset_usage_count_dialog\">Bạn có chắc muốn đặt lại số lần sử dụng của mục này về 0?</string>\n    <string name=\"action_default_icon\">Dùng biểu tượng mặc định</string>\n    <string name=\"discard\">Không đổi</string>\n    <string name=\"save\">Lưu</string>\n    <string name=\"all\">Tất cả</string>\n    <string name=\"issuer\">Dịch vụ</string>\n    <string name=\"yandex_pin\">PIN (4–16 chữ số)</string>\n    <string name=\"motp_pin\">PIN (4 chữ số)</string>\n    <string name=\"suggested\">Đề xuất</string>\n    <string name=\"usage_count\">Số lần sử dụng</string>\n    <string name=\"warning\">Cảnh báo</string>\n    <string name=\"pref_cat_appearance_app\">Ứng dụng</string>\n    <string name=\"pref_cat_appearance_entries\">Mục</string>\n    <string name=\"pref_cat_backups_android\">Android</string>\n    <string name=\"pref_cat_backups_auto\">Sao lưu tự động</string>\n    <string name=\"pref_section_behavior_title\">Thao tác</string>\n    <string name=\"pref_section_behavior_summary\">Cách thao tác với danh sách mục.</string>\n    <string name=\"pref_section_appearance_title\">Giao diện</string>\n    <string name=\"pref_section_appearance_summary\">Chủ đề, ngôn ngữ và nhiều hơn.</string>\n    <string name=\"pref_section_security_title\">Bảo mật</string>\n    <string name=\"pref_section_security_summary\">Mã hóa, mở khóa sinh trắc học, tự động khóa và các cài đặt khác.</string>\n    <string name=\"pref_section_import_export_title\">Nhập &amp; xuất</string>\n    <string name=\"pref_section_import_export_summary\">Nhập hoặc xuất các bản sao lưu của Aegis.</string>\n    <string name=\"pref_section_audit_log_title\">Nhật ký</string>\n    <string name=\"pref_section_audit_log_summary\">Danh sách tất cả các sự kiện diễn ra trong ứng dụng.</string>\n    <string name=\"pref_section_backups_title\">Sao lưu</string>\n    <string name=\"pref_section_backups_summary\">Tự động sao lưu vào một nơi do bạn chọn hoặc bật hệ thống sao lưu trên mây Android.</string>\n    <string name=\"pref_section_icon_packs\">Gói biểu tượng</string>\n    <string name=\"pref_section_icon_packs_summary\">Quản lý và nhập gói biểu tượng.</string>\n    <string name=\"pref_select_theme_title\">Chủ đề</string>\n    <string name=\"pref_dynamic_colors_title\">Màu tương thích</string>\n    <string name=\"pref_dynamic_colors_summary\">Theo màu sắc chủ đề Android</string>\n    <string name=\"pref_view_mode_title\">Chế độ xem</string>\n    <string name=\"pref_lang_title\">Ngôn ngữ</string>\n    <string name=\"pref_show_icons_title\">Hiện biểu tượng</string>\n    <string name=\"pref_show_icons_summary\">Kế bên mỗi mục</string>\n    <string name=\"pref_code_group_size_title\">Gộp nhóm chữ số mã</string>\n    <string name=\"pref_code_group_size_summary\">Chọn số lượng chữ số để gộp mã</string>\n    <string name=\"pref_account_name_position_title\">Vị trí tên tài khoản</string>\n    <string name=\"pref_show_next_code_title\">Hiện mã kế tiếp</string>\n    <string name=\"pref_show_next_code_summary\">Trước khi mã hiện tại hết hạn</string>\n    <string name=\"pref_expiration_state_title\">Báo mã sắp hết hạn</string>\n    <string name=\"pref_expiration_state_summary\">Thay đổi màu sắc của mã và nhấp nháy</string>\n    <string name=\"pref_expiration_state_fallback\">Thay đổi màu sắc của mã khi mã sắp hết hạn</string>\n    <string name=\"pref_shared_issuer_account_name_title\">Hiện tên tài khoản khi cần</string>\n    <string name=\"pref_shared_issuer_account_name_summary\">Chỉ hiện tên tài khoản khi có cùng dịch vụ. Những tên tài khoản khác sẽ bị ẩn.</string>\n    <string name=\"pref_account_name_position_summary_override\">Cài đặt này bị ghi đè bởi chế độ xem theo ô. Tên tài khoản sẽ hiển thị bên dưới dịch vụ.</string>\n    <string name=\"pref_import_file_title\">Nhập từ tập tin</string>\n    <string name=\"pref_import_file_summary\">Nhập mã từ tập tin</string>\n    <string name=\"pref_android_backups_title\">Sao lưu trên mây Android</string>\n    <string name=\"pref_android_backups_summary\">Cho phép hệ thống sao lưu trên mây Android lưu trữ kho Aegis. Chỉ hỗ trợ các kho được mã hoá.</string>\n    <string name=\"pref_android_backups_hint\"><i>Các bản sao lưu thiết bị (D2D) luôn được cho phép, không kể cài đặt trên</i></string>\n    <string name=\"pref_backups_title\">Tự động sao lưu kho</string>\n    <string name=\"pref_backups_summary\">Tự động tạo bản sao lưu kho trên bộ nhớ ngoài khi có thay đổi. Chỉ hỗ trợ các kho được mã hóa.</string>\n    <string name=\"pref_backups_reminder_title\">Nhắc nhở sao lưu</string>\n    <string name=\"pref_backups_reminder_summary\">Hiện lời nhắc sao lưu kho của bạn trong trường hợp bạn chưa sao lưu các thay đổi mới nhất.</string>\n    <string name=\"pref_backups_reminder_dialog_title\">Tắt nhắc nhở sao lưu</string>\n    <string name=\"pref_backups_reminder_dialog_summary\">Tắt lời nhắc này có nghĩa là Aegis sẽ không cho bạn biết liệu bạn có những thay đổi chưa được sao lưu hay không. Điều này khiến bạn có nguy cơ mất quyền truy cập vào mã của mình. Bạn có chắc muốn tắt lời nhắc?</string>\n    <string name=\"pref_backups_versioning_strategy_title\">Chiến lược sao lưu</string>\n    <string name=\"pref_backups_versioning_strategy_keep_x_versions\">Nhiều bản sao</string>\n    <string name=\"pref_backups_versioning_strategy_single_backup\">Một bản sao</string>\n    <string name=\"pref_backups_versioning_strategy_single_backup_warning\">Chiến lược sao lưu được chọn không đáng tin cậy và không được khuyến khích. Một lỗi sao lưu duy nhất có thể dẫn đến mất bản sao lưu duy nhất của bạn.</string>\n    <string name=\"pref_backups_versioning_strategy_dialog_title\">Chọn chiến lược sao lưu</string>\n    <string name=\"pref_backups_location_title\">Vị trí sao lưu</string>\n    <string name=\"pref_backups_location_summary\">Các bản sao lưu sẽ được lưu vào</string>\n    <string name=\"pref_backup_location_summary\">Bản sao lưu sẽ được lưu vào</string>\n    <string name=\"pref_backups_trigger_title\">Thực hiện sao lưu</string>\n    <string name=\"pref_backups_trigger_summary\">Sao lưu ngay cho tôi</string>\n    <string name=\"pref_backups_versions_title\">Số lượng phiên bản tối đa</string>\n    <string name=\"pref_backups_versions_infinite\">\\u221E</string>\n    <plurals name=\"pref_backups_versions_summary\">\n        <item quantity=\"other\">Giữ %1$d phiên bản của bản sao lưu</item>\n    </plurals>\n    <string name=\"pref_backups_versions_infinite_summary\">Không giới hạn số bản sao lưu</string>\n    <string name=\"pref_import_app_title\">Nhập từ ứng dụng</string>\n    <string name=\"pref_import_app_summary\">Nhập mã từ một ứng dụng (yêu cầu truy cập root)</string>\n    <string name=\"pref_export_title\">Xuất</string>\n    <string name=\"pref_export_summary\">Xuất kho</string>\n    <string name=\"pref_password_reminder_title\">Nhắc mật khẩu</string>\n    <string name=\"pref_google_auth_export_title\">Xuất cho Google Authenticator</string>\n    <string name=\"pref_google_auth_export_descriptor\">Tạo mã QR xuất tương thích với Google Authenticator</string>\n    <string name=\"pref_google_auth_export_no_data\">Không có dữ liệu để xuất</string>\n    <plurals name=\"pref_google_auth_export_incompatible_entries\">\n        <item quantity=\"other\">Đã bỏ qua %d mục không tương thích</item>\n    </plurals>\n    <string name=\"pref_password_reminder_summary\">Nhắc nhập mật khẩu %s để tránh bị quên</string>\n    <string name=\"pref_password_reminder_summary_disabled\">Tắt</string>\n    <string name=\"pref_secure_screen_title\">Bảo vệ màn hình</string>\n    <string name=\"pref_secure_screen_summary\">Chặn chụp ảnh màn hình trong ứng dụng</string>\n    <string name=\"pref_tap_to_reveal_title\">Nhấn để hiện</string>\n    <string name=\"pref_tap_to_reveal_summary\">Ẩn mã, nhấn vào mới hiện</string>\n    <string name=\"pref_tap_to_reveal_time_title\">Thời gian hiển thị mã</string>\n    <string name=\"pref_auto_lock_title\">Tự động khóa</string>\n    <string name=\"pref_auto_lock_summary\">Khi %s</string>\n    <string name=\"pref_auto_lock_summary_disabled\">Tắt</string>\n    <string name=\"pref_auto_lock_prompt\">Tự động khóa Aegis khi</string>\n    <string name=\"pref_auto_lock_type_back_button\">Nhấn nút quay lại</string>\n    <string name=\"pref_auto_lock_type_minimize\">Ứng dụng được thu nhỏ</string>\n    <string name=\"pref_auto_lock_type_device_lock\">Thiết bị bị khóa</string>\n    <string name=\"pref_backup_password_category\">Sao lưu &amp; xuất</string>\n    <string name=\"pref_backup_password_title\">Mật khẩu riêng cho sao lưu &amp; xuất</string>\n    <string name=\"pref_backup_password_summary\">Không dùng chung mật khẩu mở khóa kho</string>\n    <string name=\"pref_backup_password_change_title\">Đổi mật khẩu cho sao lưu &amp; xuất</string>\n    <string name=\"pref_backup_password_change_summary\">Đặt mật khẩu mới để mã hóa kho khi sao lưu và xuất.</string>\n    <string name=\"pref_encryption_title\">Mã hóa</string>\n    <string name=\"pref_encryption_summary\">Khóa kho bằng mật khẩu hoặc sinh trắc học</string>\n    <string name=\"pref_biometrics_title\">Sinh trắc học</string>\n    <string name=\"pref_biometrics_summary\">Dùng sinh trắc học để mở khóa kho</string>\n    <string name=\"pref_search_behavior_summary\">Tìm trong: %s</string>\n    <string name=\"pref_search_behavior_prompt\">Tìm trong các mục</string>\n    <string name=\"pref_search_behavior_type_name\">Tên</string>\n    <string name=\"pref_search_behavior_type_issuer\">Dịch vụ</string>\n    <string name=\"pref_search_behavior_type_note\">Ghi chú</string>\n    <string name=\"pref_search_behavior_type_groups\">Nhãn</string>\n    <string name=\"pref_set_password_title\">Đổi mật khẩu</string>\n    <string name=\"pref_set_password_summary\">Đặt mật khẩu mở khóa kho mới</string>\n    <string name=\"no_events_title\">Chưa có</string>\n    <string name=\"no_events_description\">Không có sự kiện nào trong ứng dụng</string>\n    <string name=\"event_title_vault_unlocked\">Mở khóa kho</string>\n    <string name=\"event_description_vault_unlocked\">Đã mở khóa kho thành công</string>\n    <string name=\"event_title_backup_created\">Tạo sao lưu</string>\n    <string name=\"event_description_backup_created\">Đã tạo bản sao kho thành công</string>\n    <string name=\"event_title_android_backup_created\">Tạo sao lưu bằng Android</string>\n    <string name=\"event_description_android_backup_created\">Đã tạo bản sao kho thành công bằng Android</string>\n    <string name=\"event_title_vault_exported\">Xuất kho</string>\n    <string name=\"event_description_vault_exported\">Đã xuất một bản sao kho</string>\n    <string name=\"event_title_entry_shared\">Chia sẻ mục trong kho</string>\n    <string name=\"event_description_entry_shared\">Đã chia sẻ một mục</string>\n    <string name=\"event_title_vault_unlock_failed_password\">Mở khóa kho thất bại (mật khẩu)</string>\n    <string name=\"event_description_vault_unlock_failed_password\">Mở khóa kho bằng mật khẩu thất bại</string>\n    <string name=\"event_title_vault_unlock_failed_biometrics\">Mở khóa kho thất bại (sinh trắc học)</string>\n    <string name=\"event_description_vault_unlock_failed_biometrics\">Mở khóa kho bằng sinh trắc học thất bại</string>\n    <string name=\"event_unknown\">Sự kiện chưa rõ</string>\n    <string name=\"audit_log_entry_deleted\">(đã xóa)</string>\n    <string name=\"today_at_time\">%1$s hôm nay</string>\n    <string name=\"day_of_week_at_time\">%2$s lúc %1$s</string>\n    <string name=\"export_encrypted\">Mã hoá kho</string>\n    <string name=\"export_help\">Hành động này sẽ xuất kho ra ngoài bộ nhớ trong của Aegis. Hãy chọn định dạng bản xuất:</string>\n    <string name=\"export_warning_unencrypted\">Bạn sắp xuất một bản sao chưa được mã khóa của kho Aegis. <b>Việc này không được khuyến khích</b>.</string>\n    <string name=\"export_warning_password\">Quá trình xuất được mã hóa bằng mật khẩu riêng được định cấu hình trong cài đặt Bảo mật.</string>\n    <string name=\"understand_risk_accept\">Tôi hiểu rủi ro</string>\n    <string name=\"export_format_aegis\">Aegis (.JSON)</string>\n    <string name=\"export_format_google_auth_uri\">Tập tin văn bản thuần (.TXT)</string>\n    <string name=\"export_format_html\">Trang web (.HTML)</string>\n    <string name=\"export_format_hint\">Định dạng xuất</string>\n    <string name=\"export_all_groups\">Xuất tất cả nhãn</string>\n    <string name=\"export_choose_groups\">Chọn nhãn để xuất</string>\n    <plurals name=\"export_groups_selected_count\">\n        <item quantity=\"other\">%d nhãn đã chọn</item>\n    </plurals>\n    <string name=\"export_no_groups_selected\">Chưa chọn nhãn để xuất</string>\n    <string name=\"export_html_title\" comment=\"The title of an HTML export document\">Xuất Aegis Authenticator</string>\n    <string name=\"choose_authentication_method\">Bảo mật</string>\n    <string name=\"authentication_method_explanation\">Aegis là ứng dụng xác thực hai yếu tố chú trọng vào bảo mật. Mã xác thực được lưu trong kho và kho này có thể được mã hóa bằng mật khẩu do bạn nhập. Trường hợp kẻ tấn công lấy được tập tin chứa kho này, y không thể truy cập nội dung trong kho nếu không biết mật khẩu.\\n\\nChúng tôi đã đề xuất tùy chọn phù hợp nhất với thiết bị của bạn.</string>\n    <string name=\"authentication_method_none\">Không</string>\n    <string name=\"authentication_method_none_description\">Kho không được mã hóa và không cần mật khẩu để mở.\n<b>Tùy chọn này không được khuyến khích</b>.</string>\n    <string name=\"authentication_method_password\">Mật khẩu</string>\n    <string name=\"authentication_method_password_description\">Cần mật khẩu để mở khóa kho.</string>\n    <string name=\"authentication_method_password_explanation\">Cảnh báo: Nếu bạn quên mật khẩu, sẽ không có cách để truy cập các mã xác thực. Khôi phục không cần mật khẩu là chuyện trong mơ.</string>\n    <string name=\"authentication_method_biometrics\">Sinh trắc học</string>\n    <string name=\"authentication_method_biometrics_description\">Cùng với mật khẩu, sinh trắc học như vân tay hoặc khuôn mặt được đăng ký trên thiết bị có thể được dùng để mở khóa kho.</string>\n    <string name=\"authentication\">Mở khóa kho</string>\n    <string name=\"authentication_multiline\" comment=\"The newline in the middle is used for aesthetic purposes\">Mở khóa\\nkho</string>\n    <string name=\"auth_use_biometrics\">Nhấn vào đây để đổi sang <font fgcolor=\"#FF0D86C1\">sinh trắc học</font></string>\n    <string name=\"set_password\">Vui lòng nhập mật khẩu</string>\n    <string name=\"set_group\">Vui lòng nhập tên nhãn</string>\n    <string name=\"set_number\">Vui lòng nhập số</string>\n    <string name=\"set_password_confirm\">Xác nhận lại mật khẩu</string>\n    <string name=\"invalid_password\">Mật khẩu không đúng</string>\n    <string name=\"invalidated_biometrics\">Đã phát hiện một thay đổi trong cài đặt bảo mật của thiết bị. Vui lòng đi đến \\\"Aegis &gt; Cài đặt &gt; Bảo mật &gt; Mở khóa sinh trắc học\\\" để tắt và bật lại mở khóa sinh trắc học.</string>\n    <string name=\"password_reminder\">Vui lòng nhập mật khẩu. Chúng tôi thỉnh thoảng hỏi điều này để cho bạn không quên mật khẩu.</string>\n    <string name=\"password_reminder_dialog_title\">Mở khóa sinh trắc học theo mặc định</string>\n    <string name=\"password_reminder_dialog_message\">Thỉnh thoảng chúng tôi nhắc bạn nhập mật khẩu để đảm bảo bạn không quên mật khẩu và không mất quyền truy cập vào kho của mình. Sau khi nhập mật khẩu của bạn, Aegis sẽ mặc định quay lại mở khóa sinh trắc học cho đến khi đến lần nhắc tiếp theo.</string>\n    <string name=\"password_reminder_freq_never\">Không bao giờ</string>\n    <string name=\"password_reminder_freq_weekly\">Hằng tuần</string>\n    <string name=\"password_reminder_freq_biweekly\">Nửa tháng</string>\n    <string name=\"password_reminder_freq_monthly\">Hàng tháng</string>\n    <string name=\"password_reminder_freq_quarterly\">Mỗi ba tháng</string>\n    <string name=\"enter_password_2fas_message\">Bản sao lưu 2FAS này được mã hóa. Vui lòng nhập mật khẩu ở dưới.</string>\n    <string name=\"enter_password_authy_message\">Các mã Authy của bạn đã được mã hóa. Vui lòng đóng Aegis, mở Authy và mở khóa các mã bằng mật khẩu của bạn. Bên cạnh đó, Aegis cũng có thể thử giải các mã Authy cho bạn, nếu bạn nhập mật khẩu ở dưới.</string>\n    <string name=\"enter_password_aegis_title\">Vui lòng nhập mật khẩu để nhập</string>\n    <string name=\"period_hint\">Đếm ngược (s)</string>\n    <string name=\"algorithm_hint\">Hàm băm</string>\n    <string name=\"type\">Loại</string>\n    <string name=\"share\">Chia sẻ</string>\n    <string name=\"yes\">Có</string>\n    <string name=\"no\">Không</string>\n    <string name=\"undo\">Hoàn tác</string>\n    <string name=\"unlock\">Mở khóa</string>\n    <string name=\"advanced\">Nâng cao</string>\n    <string name=\"counter\">Đếm</string>\n    <string name=\"digits\">Chữ số</string>\n    <string name=\"secret\">Bí mật</string>\n    <string name=\"scan\">Quét mã QR</string>\n    <string name=\"scan_image\">Quét ảnh</string>\n    <string name=\"enter_manually\">Nhập thủ công</string>\n    <string name=\"set_up_biometric\">Thiết lập mở khóa sinh trắc học</string>\n    <string name=\"copy\">Chép</string>\n    <string name=\"edit\">Sửa</string>\n    <string name=\"select_all\">Chọn tất cả</string>\n    <string name=\"assign_icons\">Gán biểu tượng</string>\n    <string name=\"assign_groups\">Gán nhãn</string>\n    <string name=\"assign_groups_dialog_summary\">Chọn nhãn muốn gán cho các mục đã chọn.</string>\n    <string name=\"assign_groups_dialog_dropdown\">Chọn nhãn</string>\n    <string name=\"favorite\" comment=\"Verb\">Thích</string>\n    <string name=\"unfavorite\" comment=\"Verb\">Bỏ thích</string>\n    <string name=\"error_all_caps\">LỖI</string>\n    <string name=\"password\">Mật khẩu</string>\n    <string name=\"confirm_password\">Xác nhận mật khẩu</string>\n    <string name=\"show_password\">Hiện mật khẩu</string>\n    <string name=\"new_entry\">Mục mới</string>\n    <string name=\"add_new_entry\">Thêm mục mới</string>\n    <string name=\"unlock_vault_error\">Không thể mở khóa kho</string>\n    <string name=\"unlock_vault_error_description\">Mật khẩu không chính xác. Hãy chắc chắn là bạn không gõ nhầm.</string>\n    <string name=\"password_equality_error\">Các mật khẩu nên y hệt nhau và không trống</string>\n    <string name=\"snackbar_authentication_method\">Vui lòng chọn một phương pháp xác minh</string>\n    <string name=\"encrypting_vault\">Đang mã hoá kho</string>\n    <string name=\"exporting_vault\">Đang xuất kho</string>\n    <string name=\"optimizing_icon\">Tối ưu hóa biểu tượng</string>\n    <string name=\"optimizing_icon_multiple\">Tối ưu hóa biểu tượng %1$d/%2$d</string>\n    <string name=\"reading_file\">Đang đọc tập tin</string>\n    <string name=\"requesting_root_access\">Yêu cầu truy cập root</string>\n    <string name=\"analyzing_qr\">Đang phân tích mã QR</string>\n    <string name=\"analyzing_qr_multiple\">Đang phân tích mã QR %1$d/%2$d (%3$s)</string>\n    <plurals name=\"added_new_entries\">\n        <item quantity=\"other\">Đã thêm %d mục mới vào kho</item>\n    </plurals>\n    <string name=\"importing_icon_pack\">Đang nhập gói biểu tượng</string>\n    <string name=\"delete_entry\">Xóa mục</string>\n    <string name=\"delete_entry_description\">Bạn có chắc bạn muốn xóa mục này không?</string>\n    <string name=\"delete_entry_explanation\">Hành động này không tắt Xác thực 2 yếu tố cho:\\n<b>%s</b>\\n\\nĐể tránh mất quyền truy cập, hãy chắc chắn rằng bạn đã tắt Xác thực 2 yếu tố hoặc bạn có một cách khác để tạo mã cho dịch vụ này.</string>\n    <string name=\"delete_entries\">Xóa các mục</string>\n    <plurals name=\"delete_entries_description\">\n        <item quantity=\"other\">Bạn có chắc muốn xóa %d mục?</item>\n    </plurals>\n    <string name=\"discard_changes\">Bỏ các thay đổi?</string>\n    <string name=\"discard_changes_description\">Các thay đổi chưa được lưu</string>\n    <string name=\"saving_profile_error\">Lỗi khi lưu hồ sơ</string>\n    <string name=\"saving_assign_icons_error\">Lỗi khi gán biểu tượng</string>\n    <string name=\"welcome\">Chào mừng</string>\n    <string name=\"app_description\">Aegis là một ứng dụng xác thực 2 yếu tố tự do, bảo mật và nguồn mở</string>\n    <string name=\"setup_completed\">Thiết lập hoàn tất</string>\n    <string name=\"setup_completed_description\">Aegis đã được thiết lập và sẵn sàng hoạt động.</string>\n    <string name=\"vault_not_found\">Không tìm thấy kho, đang bắt đầu thiết lập…</string>\n    <string name=\"copied\">Đã sao chép</string>\n    <string name=\"errors_copied\">Đã sao chép các lỗi vào bộ nhớ tạm</string>\n    <string name=\"version_copied\">Đã sao chép phiên bản vào bộ nhớ tạm</string>\n    <string name=\"error_required_field\">Mục này bắt buộc phải điền</string>\n    <string name=\"error_occurred\">Đã xảy ra lỗi</string>\n    <string name=\"decryption_error\">Đã xảy ra lỗi trong khi mở khóa kho</string>\n    <string name=\"decryption_corrupt_error\">Đã xảy ra lỗi trong khi mở khóa kho. Tập tin kho của bạn có thể bị hỏng.</string>\n    <string name=\"saving_error\">Đã xảy ra lỗi trong khi lưu kho</string>\n    <string name=\"vault_init_error\">Đã xảy ra lỗi trong khi khởi tạo kho</string>\n    <string name=\"vault_load_error\">Đã xảy ra lỗi trong khi nạp kho từ bộ nhớ</string>\n    <string name=\"biometric_decrypt_error\">Đã xảy ra lỗi trong khi giải mã kho bằng xác minh sinh trắc học. Điều này thường chỉ xảy ra nếu cài đặt bảo mật của thiết bị đã được thay đổi. Vui lòng mở khóa kho bằng mật khẩu và thiết lập lại xác minh sinh trắc học trong cài đặt của Aegis.</string>\n    <string name=\"biometric_init_error\">Đã xảy ra lỗi trong khi chuẩn bị xác minh sinh trắc học. Điều này thường chỉ xảy ra nếu cài đặt bảo mật của thiết bị đã được thay đổi. Vui lòng mở khóa kho bằng mật khẩu và thiết lập lại xác minh sinh trắc học trong cài đặt của Aegis.</string>\n    <string name=\"disable_encryption\">Tắt mã hóa</string>\n    <string name=\"disable_encryption_description\">Bạn có chắc muốn tắt mã hóa không? Làm vậy sẽ khiến kho được lưu trữ dưới dạng văn bản thuần. <b>Sao lưu tự động cũng sẽ bị tắt</b>.</string>\n    <string name=\"enable_encryption_error\">Đã xảy ra lỗi trong khi bật mã hóa</string>\n    <string name=\"disable_encryption_error\">Đã xảy ra lỗi trong khi tắt mã hóa</string>\n    <string name=\"backup_successful\">Đã lên lịch sao lưu thành công</string>\n    <string name=\"backup_error\">Đã xảy ra lỗi trong khi tạo bản sao lưu</string>\n    <string name=\"backup_status_success\">Sao lưu thành công gần đây: %s</string>\n    <string name=\"backup_status_failed\">Sao lưu thất bại gần đây: %s</string>\n    <string name=\"backup_status_none\">Chưa có bản sao lưu</string>\n    <string name=\"backup_warning_password\">Quá trình sao lưu được mã hóa bằng mật khẩu riêng được định cấu hình trong cài đặt Bảo mật</string>\n    <string name=\"documentsui_error\">Giao diện Tài liệu có vẻ bị thiếu trong thiết bị. Đây là một thành phần hệ thống quan trọng cần thiết cho việc chọn và tạo các tài liệu. Nếu bạn đã sử dụng một công cụ để &quot;xóa ứng dụng rác&quot; trong thiết bị, có thể bạn đã vô tình xóa nó và bạn sẽ cần cài đặt lại.</string>\n    <string name=\"icon_pack_import_error\">Đã xảy ra lỗi trong khi nhập gói biểu tượng</string>\n    <string name=\"icon_pack_import_exists_error\">Gói biểu tượng bạn đang nhập đã tồn tại. Bạn có muốn ghi đè lên nó không?</string>\n    <string name=\"icon_pack_delete_error\">Đã xảy ra lỗi trong khi xóa gói biểu tượng</string>\n    <plurals name=\"icon_pack_info\">\n        <item quantity=\"other\">%d biểu tượng</item>\n    </plurals>\n    <string name=\"icon_custom\">Tùy chỉnh</string>\n    <string name=\"permission_denied\">Quyền bị từ chối</string>\n    <string name=\"andotp_new_format\">Định dạng mới (v0.6.3 trở lên) </string>\n    <string name=\"andotp_old_format\">Định dạng cũ (v0.6.2 trở xuống) </string>\n    <string name=\"choose_andotp_importer\">Tập tin sao lưu andOTP sử dụng định dạng nào?</string>\n    <string name=\"choose_totpauth_importer\">Bản sao lưu TOTP Authenticator này có được mã hóa bằng mật khẩu không?</string>\n    <string name=\"choose_application\">Chọn ứng dụng mà bạn muốn nhập từ đó</string>\n    <string name=\"choose_theme\">Chọn chủ đề bạn thích</string>\n    <string name=\"choose_account_name_position\">Chọn vị trí tên tài khoản mà bạn thích</string>\n    <string name=\"choose_view_mode\">Chọn chế độ xem bạn thích</string>\n    <string name=\"choose_copy_behavior\">Chọn thao tác sao chép mà bạn thích</string>\n    <string name=\"parsing_file_error\">Đã xảy ra lỗi trong khi xử lý file</string>\n    <string name=\"file_not_found\">Lỗi: Không tìm thấy tập tin</string>\n    <string name=\"reading_file_error\">Đã xảy ra lỗi trong khi đọc tập tin</string>\n    <string name=\"app_lookup_error\">Lỗi: Ứng dụng không được cài đặt</string>\n    <string name=\"app_version_error\">Phiên bản %s không được hỗ trợ. Các phiên bản gần đây đã bắt đầu mã hóa một số tập tin trong thư mục lưu trữ nội bộ, khiến Aegis không thể truy cập thông tin cần thiết để nhập. Việc cố gắng nhập có thể dẫn đến lỗi. Bạn vẫn muốn tiếp tục?</string>\n    <string name=\"root_error\">Lỗi: Không thể nhận quyền truy cập root</string>\n    <plurals name=\"imported_entries_count\">\n        <item quantity=\"other\">Đã nhập %d mục</item>\n    </plurals>\n    <plurals name=\"entries_shown\">\n        <item quantity=\"other\">Tổng cộng %d mục</item>\n    </plurals>\n    <string name=\"intro_import_error_title\">Đã xảy ra lỗi trong khi nhập kho</string>\n    <string name=\"import_error_title\">Đã xảy ra một hoặc nhiều lỗi trong khi nhập</string>\n    <string name=\"exporting_vault_error\">Đã xảy ra lỗi trong khi xuất kho</string>\n    <string name=\"exported_vault\">Kho đã được xuất</string>\n    <string name=\"encryption_set_password_error\">Đã xảy ra lỗi trong khi đặt mật khẩu.</string>\n    <string name=\"encryption_enable_biometrics_error\">Đã xảy ra lỗi trong khi bật mở khóa sinh trắc học. Một số thiết bị có xác minh sinh trắc học rất kém chất lượng và có khả năng là thiết bị của bạn là một trong số chúng. Hãy cân nhắc việc chuyển sang thiết lập chỉ dùng mật khẩu.</string>\n    <string name=\"no_cameras_available\">Không có sẵn camera</string>\n    <string name=\"read_qr_error\">Đã xảy ra lỗi trong khi đọc mã QR</string>\n    <string name=\"read_qr_error_phonefactor\">Aegis không tương thích với thuật toán Xác minh 2 bước độc quyền của Microsoft. Vui lòng chắc chắn là bạn chọn \\\"Thiết lập ứng dụng không có thông báo\\\" khi thiết lập Xác minh 2 bước trong Office 365.</string>\n    <string name=\"partial_google_auth_import\">Đã phát hiện quá trình xuất Google Authenticator chưa hoàn tất</string>\n    <string name=\"partial_google_auth_import_warning\">Một số mã QR bị thiếu trong quá trình nhập. Không tìm thấy các mã sau:\\n\\n<b>%s</b>\\n\\nBạn có thể tiếp tục nhập bản xuất này nhưng chúng tôi khuyên bạn nên thử lại với tất cả các mã QR để không có nguy cơ mất quyền truy cập vào bất kỳ mã nào.</string>\n    <string name=\"missing_qr_code_descriptor\">• Mã QR %d</string>\n    <plurals name=\"import_partial_export_anyway\">\n        <item quantity=\"other\">Vẫn cứ nhập %d mã</item>\n    </plurals>\n    <string name=\"import_google_auth_failure\">Quá trình xuất Google Authenticator thất bại</string>\n    <string name=\"unrelated_google_auth_batches_error\">Bản xuất chứa thông tin về một batch không liên quan. Hãy thử nhập 1 batch mỗi lần.</string>\n    <string name=\"no_tokens_can_be_imported\">Do đó, không thể nhập mã nào</string>\n    <string name=\"unlocking_vault\">Đang mở khóa kho</string>\n    <string name=\"rename_group\">Đổi tên nhóm</string>\n    <string name=\"no_group_selection\">Nếu một mục không thuộc bất kỳ nhóm nào, nó sẽ ở trong \\\"Chưa có nhóm\\\".</string>\n    <string name=\"remove_group\">Xóa nhãn</string>\n    <string name=\"remove_group_description\">Bạn có chắc muốn xóa nhãn này? Các mục trong nhãn này sẽ tự động chuyển thành \\\"Không nhãn\\\".</string>\n    <string name=\"remove_unused_groups\">Xóa nhãn không dùng</string>\n    <string name=\"remove_unused_groups_description\">Bạn có chắc muốn xóa tất cả nhãn trống không?</string>\n    <string name=\"remove_icon_pack\">Xóa gói biểu tượng</string>\n    <string name=\"remove_icon_pack_description\">Bạn có chắc muốn xóa gói biểu tượng này? Các mục sử dụng biểu tượng trong gói này sẽ không bị ảnh hưởng.</string>\n    <string name=\"details\">Chi tiết</string>\n    <string name=\"show_error_details\">Xem thông tin lỗi</string>\n    <string name=\"lock\">Khóa</string>\n    <string name=\"name\">Tên</string>\n    <string name=\"no_group\">Không</string>\n    <string name=\"sort\" comment=\"Title of the Sort button in the top action bar of the main view\">Sắp xếp</string>\n    <string name=\"sort_alphabetically\">Dịch vụ (A → Z)</string>\n    <string name=\"sort_alphabetically_reverse\">Dịch vụ (Z → A)</string>\n    <string name=\"sort_alphabetically_name\">Tài khoản (A → Z)</string>\n    <string name=\"sort_alphabetically_name_reverse\">Tài khoản (Z → A)</string>\n    <string name=\"sort_usage_count\">Số lần sử dụng</string>\n    <string name=\"sort_last_used\">Lần dùng cuối</string>\n    <string name=\"sort_custom\">Tùy chỉnh</string>\n    <string name=\"last_used\">Dùng lần cuối</string>\n    <string name=\"last_used_never\">chưa từng</string>\n    <string name=\"new_group\">Nhãn mới…</string>\n    <string name=\"group\">Nhãn</string>\n    <string name=\"group_name_hint\">Tên nhãn</string>\n    <string name=\"preference_manage_groups\">Quản lý nhãn</string>\n    <string name=\"preference_manage_groups_summary\">Chỉnh sửa hoặc xóa các nhãn</string>\n    <string name=\"preference_reset_usage_count\">Đặt lại số lần sử dụng</string>\n    <string name=\"preference_reset_usage_count_summary\">Đối với mọi mục trong kho</string>\n    <string name=\"preference_reset_usage_count_dialog\">Bạn có chắc muốn đặt số lần sử dụng của mọi mục trong kho của bạn về 0 không?</string>\n    <string name=\"note\" comment=\"Users can add a note to an entry\">Chú thích</string>\n    <string name=\"clear\">Xóa</string>\n    <string name=\"dialog_duplicate_entry_title\" comment=\"'Duplicate' is a noun here\">Trùng lặp mục</string>\n    <string name=\"dialog_duplicate_entry_message\">Mục này có cùng tên và dịch vụ với một hoặc nhiều mục hiện có. Bạn muốn tiếp tục như thế nào?</string>\n    <string name=\"dialog_duplicate_entry_overwrite_title\">Ghi đè lên các mục đã tồn tại</string>\n    <string name=\"dialog_duplicate_entry_overwrite_subtitle\">Thay thế mục hiện có bằng mục mới. Hành động này không thể hoàn tác</string>\n    <string name=\"dialog_duplicate_entry_suffix_title\">Thêm hậu tố</string>\n    <string name=\"dialog_duplicate_entry_suffix_subtitle\">Thêm hậu tố vào tên của mục mới này. Tên mới sẽ là: %s</string>\n    <string name=\"dialog_duplicate_entry_cancel_title\">Hủy lưu</string>\n    <string name=\"dialog_duplicate_entry_cancel_subtitle\">Cho phép bạn chỉnh sửa mục trước khi lưu lại</string>\n    <plurals name=\"dialog_duplicate_entry_overwrite_dialog_message\">\n        <item quantity=\"other\">Bạn có chắc muốn xóa %d mục có tên sau:\\n\\n%s - %s</item>\n    </plurals>\n    <string name=\"dialog_duplicate_entry_overwrite_dialog_title\">Xác nhận xóa</string>\n    <string name=\"pref_haptic_feedback_summary\">Rung thiết bị khi mã được làm mới</string>\n    <string name=\"pref_haptic_feedback_title\">Phản hồi rung</string>\n    <string name=\"pref_highlight_entry_title\">Làm nổi bật mã khi nhấn vào</string>\n    <string name=\"pref_highlight_entry_summary\">Giúp các mã dễ phân biệt với nhau hơn</string>\n    <string name=\"pref_groups_multiselect_title\">Chọn nhiều nhãn</string>\n    <string name=\"pref_groups_multiselect_summary\">Cho phép chọn nhiều nhãn cùng lúc</string>\n    <string name=\"pref_minimize_on_copy_title\">Thu nhỏ ứng dụng</string>\n    <string name=\"pref_minimize_on_copy_summary\">Sau khi sao chép một mã</string>\n    <string name=\"pref_copy_behavior_title\">Lưu mã vào bộ nhớ tạm</string>\n    <string name=\"pref_search_behavior_title\">Hành vi tìm kiếm</string>\n    <string name=\"pref_pause_entry_title\">Đóng băng mã khi nhấn vào</string>\n    <string name=\"pref_pause_entry_summary\">Không tự động tạo mã tiếp theo nữa</string>\n    <string name=\"pin_keyboard_description\">Nhập mật khẩu để bật bàn phím mã PIN. Lưu ý rằng việc này chỉ được nếu mật khẩu của bạn chỉ chứa các chữ số</string>\n    <string name=\"pin_keyboard_error\">Lỗi khi bật bàn phím mã PIN</string>\n    <string name=\"pin_keyboard_error_description\">Không thể đặt bàn phím mã PIN. Mật khẩu của bạn phải chỉ chứa các chữ số.</string>\n    <string name=\"pin_keyboard_disabled\">Mật khẩu đã thay đổi. Bàn phím mã PIN sẽ không được hiện nữa.</string>\n    <string name=\"selected\">Đang dùng</string>\n    <string name=\"dark_theme_title\">Tối</string>\n    <string name=\"light_theme_title\">Sáng</string>\n    <string name=\"amoled_theme_title\">AMOLED</string>\n    <string name=\"system_theme_title\">Mặc định hệ thống</string>\n    <string name=\"system_amoled_theme_title\">Mặc định hệ thống (AMOLED)</string>\n    <string name=\"normal_viewmode_title\">Bình thường</string>\n    <string name=\"compact_mode_title\">Gọn gàng</string>\n    <string name=\"small_mode_title\">Nhỏ</string>\n    <string name=\"tiles_mode_title\">Ô</string>\n    <string name=\"unknown_issuer\">Dịch vụ chưa rõ</string>\n    <string name=\"unknown_account_name\">Tên tài khoản không xác định</string>\n    <plurals name=\"import_error_dialog\">\n        <item quantity=\"other\">Aegis không thể nhập %d mã. Các mã đó sẽ bị bỏ qua. Nhấn \\'Chi tiết\\' để xem thêm thông tin về lỗi.</item>\n    </plurals>\n    <string name=\"unable_to_process_deeplink\">Không thể xử lý deep link</string>\n    <string name=\"unable_to_read_qrcode_file\">Không thể đọc và xử lý mã QR từ tập tin: %s.</string>\n    <string name=\"unable_to_process_shared_text\">Không thể xử lý văn bản được chia sẻ dưới dạng OTP</string>\n    <string name=\"unable_to_read_qrcode_files\">Không thể đọc và xử lý vài mã QR. Chỉ %1$d/%2$d mục sẽ được nhập.</string>\n    <string name=\"unable_to_generate_qrcode\">Không thể tạo mã QR</string>\n    <string name=\"select_picture\">Chọn ảnh</string>\n    <string name=\"select_icon\">Chọn biểu tượng</string>\n    <string name=\"tile_open_vault\" comment=\"label for a quick settings tile that opens the app when tapped\">Mở kho</string>\n    <string name=\"tile_open_scanner\" comment=\"label for a quick settings tile that opens the QR code scanner when tapped\">Mở trình quét</string>\n    <string name=\"toggle_checkboxes\">Đánh dấu các hộp kiểm</string>\n    <string name=\"search\">Tìm kiếm</string>\n    <string name=\"channel_name_lock_status\">Trạng thái khóa</string>\n    <string name=\"channel_description_lock_status\">Aegis có thể tạo một thông báo liên tục để báo cho bạn khi kho được khóa</string>\n    <string name=\"vault_unlocked_state\">Đã mở khóa kho. Nhấn vào đây để khóa.</string>\n    <string name=\"version\">Phiên bản</string>\n    <string name=\"changelog\">Changelog</string>\n    <string name=\"whats_new\">Có gì mới</string>\n    <string name=\"github_description\">Mã nguồn và báo lỗi</string>\n    <string name=\"license\">Giấy phép</string>\n    <string name=\"license_description\">Aegis Authenticator sử dụng giấy phép GPLv3</string>\n    <string name=\"third_party_licenses\">Giấy phép bên thứ ba</string>\n    <string name=\"third_party_licenses_description\">Các thư viện nguồn mở mà Aegis sử dụng</string>\n    <string name=\"country_netherlands\">Hà Lan</string>\n    <string name=\"email_us\">Gửi email</string>\n    <string name=\"visit_website\">Trang chủ</string>\n    <string name=\"about_support\">Hỗ trợ</string>\n    <string name=\"support_rate\">Đánh giá</string>\n    <string name=\"support_rate_description\">Đánh giá trên Cửa hàng Google Play</string>\n    <string name=\"webview_error\">Thiết bị này không hỗ trợ WebView, nó là cần thiết để xem changelog và giấy phép. Đây là một thành phần hệ thống.</string>\n    <string name=\"email\">Email</string>\n    <string name=\"time_sync_warning_title\">Tự đồng bộ thời gian</string>\n    <string name=\"time_sync_warning_message\">Aegis dựa vào việc thời gian hệ thống được đồng bộ để tạo các mã chính xác. Một sự sai lệch chỉ vài giây cũng có thể dẫn đến các mã không chính xác. Có vẻ như thiết bị của bạn không được thiết lập tự đồng bộ thời gian. Bạn có muốn bật tính năng này?</string>\n    <string name=\"time_sync_warning_disable\">Đừng cảnh báo tôi nữa. Tôi biết tôi đang làm gì.</string>\n    <string name=\"google_qr_export_unrelated\">Đã tìm thấy mã QR không liên quan. Hãy thử khởi động lại trình quét.</string>\n    <plurals name=\"google_qr_export_scanned\">\n        <item quantity=\"other\">Đã quét %1$d/%2$d mã QR</item>\n    </plurals>\n    <string name=\"google_qr_export_unexpected\">Dự định quét mã QR #%1$d, nhưng thay vào đó đã quét #%2$d</string>\n    <string name=\"backup_error_bar_message\"><b>Sao lưu kho thất bại</b></string>\n    <string name=\"backup_error_dialog_details\" comment=\"The first parameter is the type of backup (e.g. built-in or Android backup). The second parameter is an elapsed time in the style of 'x seconds/minutes/days ago'.\">        Một bản sao lưu kho gần đây bằng cách sử dụng %1$s đã thất bại. Bản sao lưu đã thử %2$s. Vui lòng kiểm tra cài đặt sao lưu của bạn để đảm bảo quá trình sao lưu có thể hoàn tất.\n    </string>\n    <string name=\"backup_permission_error_dialog_details\" comment=\"The first parameter is the type of backup (e.g. built-in or Android backup). The second parameter is an elapsed time in the style of 'x seconds/minutes/days ago'.\">        Lần sao lưu kho gần đây bằng %1$s không thành công vì Aegis không có quyền ghi vào thư mục. Đã thử sao lưu %2$s. Lỗi này có thể xảy ra nếu bạn di chuyển/đổi tên thư mục sao lưu hoặc nếu gần đây bạn đã khôi phục Aegis từ bản sao lưu. Vui lòng chọn lại thư mục sao lưu.\n    </string>\n    <string name=\"backup_system_builtin\">Sao lưu tự động tích hợp của Aegis</string>\n    <string name=\"backup_system_android\">Sao lưu đám mây của Android</string>\n    <string name=\"backup_reminder_bar_message_with_latest\" comment=\"The parameter is an elapsed time in the style of 'x seconds/minutes/days ago'\">        Bản sao lưu cuối cùng đã cũ (%s)\n    </string>\n    <string name=\"backup_reminder_bar_message\">        Chưa sao lưu thay đổi\n    </string>\n    <string name=\"backup_reminder_bar_dialog_title\">Chưa sao lưu thay đổi</string>\n    <string name=\"backup_reminder_bar_dialog_summary\">        Những thay đổi gần đây chưa được sao lưu. Để tránh mất quyền truy cập vào tài khoản của bạn, hãy cân nhắc việc thiết lập sao lưu tự động.\n    </string>\n    <string name=\"backup_reminder_bar_dialog_accept\">Thiết lập sao lưu</string>\n    <string name=\"backup_plaintext_export_warning\"><b>Kho gần đây đã được xuất ở dạng văn bản thuần</b></string>\n    <string name=\"pref_show_plaintext_warning_hint\">Không hiện cảnh báo này nữa</string>\n    <string name=\"backup_plaintext_warning_explanation\">Cảnh báo này xuất hiện vì gần đây bạn đã xuất một bản sao chưa được mã hóa của kho. Để giữ an toàn mã xác thực của bạn, chúng tôi khuyên bạn nên xóa tập tin này ngay khi bạn không còn cần đến nữa.</string>\n    <string name=\"switch_camera\">Đổi camera</string>\n    <string name=\"empty_list\">Chưa có mã nào. Thêm mã mới bằng cách nhấn vào dấu cộng ở góc dưới bên phải</string>\n    <string name=\"empty_list_title\">Chưa có mục nào</string>\n    <string name=\"empty_group_list\">Hãy thêm các nhãn khi chỉnh sửa một mục</string>\n    <string name=\"empty_group_list_title\">Chưa có nhãn nào</string>\n    <string name=\"no_icon_packs\">Chưa nhập gói biểu tượng nào. Hãy nhấn vào ký hiệu dấu cộng để nhập một gói. Mẹo: thử <a href=\"https://aegis-icons.github.io\">aegis-icons</a>.</string>\n    <string name=\"no_icon_packs_title\">Chưa có gói biểu tượng</string>\n    <string name=\"pick_icon\">Chọn biểu tượng</string>\n    <string name=\"uncategorized\">Chưa phân loại</string>\n    <string name=\"done\">Xong</string>\n    <plurals name=\"qr_count\">\n        <item quantity=\"other\">%d / %d mã QR</item>\n    </plurals>\n    <string name=\"next\">Tiếp</string>\n    <string name=\"previous\">Trước</string>\n    <string name=\"copy_uri\">Sao chép URL</string>\n    <string name=\"unable_to_copy_uri_to_clipboard\">Không thể sao chép vào bộ nhớ tạm</string>\n    <string name=\"uri_copied_to_clipboard\">Đã sao chép vào bộ nhớ tạm</string>\n    <string name=\"transfer_entry_description\">Quét mã QR này bằng ứng dụng xác minh mà bạn muốn truyền mục này đến</string>\n    <string name=\"transfer_entry_brightness\">Nhấn vào mã QR để chuyển đổi độ sáng toàn màn hình</string>\n    <string name=\"google_auth_compatible_transfer_description\">Quét các mã QR này bằng Aegis hoặc Google Authenticator.\\n\\nDo hạn chế của ứng dụng Google Authenticator, chỉ áp dụng với mã TOTP &amp; HOTP 6 chữ số sử dụng SHA1</string>\n    <string name=\"password_strength_very_weak\">Rất yếu</string>\n    <string name=\"password_strength_weak\">Yếu</string>\n    <string name=\"password_strength_fair\">Khá</string>\n    <string name=\"password_strength_good\">Tốt</string>\n    <string name=\"password_strength_strong\">Mạnh</string>\n    <string name=\"password_strength_unknown\">Mật khẩu quá dài</string>\n    <string name=\"pref_pin_keyboard_title\">Dùng mã PIN trên màn hình khóa</string>\n    <string name=\"pref_pin_keyboard_summary\">Chỉ áp dụng với các mật khẩu là số</string>\n    <string name=\"title_activity_preferences\">Cài đặt</string>\n    <string name=\"title_activity_manage_groups\">Quản lý nhãn</string>\n    <string name=\"title_activity_transfer\">Truyền các mục</string>\n    <string name=\"title_activity_about\">Giới thiệu</string>\n    <string name=\"title_activity_edit_entry\">Chỉnh sửa mục</string>\n    <string name=\"title_activity_scan_qr\">Quét mã QR</string>\n    <string name=\"title_activity_import_entries\">Nhập mục</string>\n    <string name=\"title_activity_assign_icons\">Gán biểu tượng</string>\n    <string name=\"title_activity_licenses\">Giấy phép bên thứ ba</string>\n    <string name=\"dialog_wipe_entries_title\">Xóa toàn bộ mục</string>\n    <string name=\"dialog_wipe_entries_message\">Kho của bạn đã chứa các mục. Bạn có muốn xóa các mục đó trước khi nhập từ tập tin này không?\\n\\n<b>Nếu làm vậy, bạn sẽ vĩnh viễn mất quyền truy cập vào các mục hiện có trong kho.</b></string>\n    <string name=\"dialog_wipe_entries_checkbox\">Xóa toàn bộ nội dung kho</string>\n    <string name=\"panic_trigger_ignore_toast\">Aegis đã nhận kích hoạt khẩn nhưng cài đặt bị tắt, đang bỏ qua</string>\n    <string name=\"pref_panic_trigger_title\">Xóa kho khẩn cấp</string>\n    <string name=\"pref_panic_trigger_summary\">Khi nhận kích hoạt từ Ripple</string>\n    <string name=\"import_vault\">Nhập kho Aegis</string>\n    <string name=\"import_vault_hint\">Bạn muốn nhập từ một ứng dụng 2FA khác? Hoàn tất thiết lập trước và sau đó đi tới menu cài đặt.</string>\n    <plurals name=\"import_duplicate_toast\">\n        <item quantity=\"other\">Bỏ đánh dấu %d mục khả năng trùng lặp. Vui lòng xem lại danh sách các mục.</item>\n    </plurals>\n    <string name=\"importer_help_2fas\">Cung cấp một tập tin sao lưu 2FAS Authenticator.</string>\n    <string name=\"importer_help_aegis\">Cung cấp một file xuất/sao lưu Aegis.</string>\n    <string name=\"importer_help_authenticator_plus\">Cung cấp một tập tin xuất Authenticator Plus được nhận qua <b>Cài đặt -&gt; Sao lưu &amp; Khôi phục -&gt; Xuất dưới dạng Văn bản và HTML</b>.</string>\n    <string name=\"importer_help_authy\">Cung cấp một bản sao của <b>/data/data/com.authy.authy/shared_prefs/com.authy.storage.tokens.authenticator.xml</b>, nằm trong thư mục bộ nhớ trong của Authy.</string>\n    <string name=\"importer_help_andotp\">Cung cấp một tập tin xuất/sao lưu andOTP.</string>\n    <string name=\"importer_help_bitwarden\">Hãy chọn tập tin xuất/sao lưu của Bitwarden. Tập tin mã hoá không được hỗ trợ.</string>\n    <string name=\"importer_help_battle_net_authenticator\">Cung cấp một bản sao của <b>/data/data/com.blizzard.messenger/shared_prefs/com.blizzard.messenger.authenticator_preferences.xml</b>, nằm trong thư mục bộ nhớ trong của Battle.net Authenticator.</string>\n    <string name=\"importer_help_duo\">Cung cấp một bản sao của <b>/data/data/com.duosecurity.duomobile/files/duokit/accounts.json</b>, nằm trong thư mục bộ nhớ trong của DUO.</string>\n    <string name=\"importer_help_ente_auth\">Cung cấp tệp xuất Ente Auth. Hiện tại chỉ hỗ trợ các tệp chưa được mã hóa.</string>\n    <string name=\"importer_help_freeotp\">FreeOTP 2: Cung cấp một file sao lưu.\\nFreeOTP 1.x: Cung cấp một bản sao <b>/data/data/org.fedorahosted.freeotp/shared_prefs/tokens.xml</b>, nằm trong thư mục lưu trữ nội bộ của FreeOTP.</string>\n    <string name=\"importer_help_freeotp_plus\">Cung cấp một tập tin xuất FreeOTP+.</string>\n    <string name=\"importer_warning_title_freeotp2\">Tương thích FreeOTP 2</string>\n    <string name=\"importer_warning_message_freeotp2\">Có một số vấn đề trong FreeOTP 2 có thể dẫn đến việc sao lưu bị hỏng. Aegis sẽ cố gắng cứu càng nhiều mục nhập càng tốt, nhưng có thể một số hoặc thậm chí tất cả các mục nhập đều không nhập được.</string>\n    <string name=\"importer_help_google_authenticator\"><b>Chỉ có tập tin cơ sở dữ liệu từ Google Authenticator v5.10 và cũ hơn mới được hỗ trợ</b>.\\n\\nHãy lấy bản sao của <b>/data/data/com.google.android.apps.authenticator2/databases/databases</b> ở trong thư mục bộ nhớ trong của Google Authenticator.</string>\n    <string name=\"importer_help_microsoft_authenticator\">Cung cấp một bản sao của <b>/data/data/com.azure.authenticator/databases/PhoneFactor</b>, nằm trong thư mục bộ nhớ trong của Microsoft Authenticator.</string>\n    <string name=\"importer_help_plain_text\">Cung cấp một tập tin văn bản thuần có một URI Google Authenticator trên mỗi dòng.</string>\n    <string name=\"importer_help_steam\"><b>Không hỗ trợ Steam v3.0 trở lên</b>. Cung cấp một bản sao <b>/data/data/com.valvesoftware.android.steam.community/files/Steamguard-*.json</b>, nằm trong thư mục lưu trữ nội bộ của Steam.</string>\n    <string name=\"importer_help_stratum\">Cung cấp tập tin xuất Stratum có được thông qua <b>Cài đặt -&gt; Sao lưu -&gt; Sao lưu tập tin mã hóa (đề xuất)</b>.</string>\n    <string name=\"importer_help_totp_authenticator\">Cung cấp một tập tin xuất TOTP Authenticator.</string>\n    <string name=\"importer_help_winauth\">Cung cấp một tập tin xuất WinAuth.</string>\n    <string name=\"import_assign_icons_dialog_title\">Gán biểu tượng</string>\n    <string name=\"import_assign_icons_dialog_text\">Bạn có chắc muốn gán biểu tượng vào những mục đã nhập?</string>\n    <string name=\"importer_encrypted_exception_google_authenticator\">Đã bỏ qua mục mã hoá: %s</string>\n    <string name=\"importer_help_direct\">Nhập các mục trực tiếp từ %s. Việc này yêu cầu ứng dụng được cài đặt trên thiết bị này và quyền truy cập root được cấp cho Aegis.</string>\n    <string name=\"groups\">Nhãn</string>\n    <string name=\"pref_focus_search\">Khởi động tìm kiếm</string>\n    <string name=\"pref_focus_search_summary\">Hiện tìm kiếm ngay sau khi mở ứng dụng</string>\n    <string name=\"pref_grouping_halves\">Một nửa</string>\n    <string name=\"pref_grouping_none\">Không gộp</string>\n    <string name=\"pref_grouping_size_two\">Gộp 2</string>\n    <string name=\"pref_grouping_size_three\">Gộp 3</string>\n    <string name=\"pref_grouping_size_four\">Gộp 4</string>\n    <string name=\"pref_copy_behavior_never\">Không bao giờ</string>\n    <string name=\"pref_copy_behavior_single_tap\">Nhấn một lần</string>\n    <string name=\"pref_copy_behavior_double_tap\">Nhấn đúp</string>\n    <string name=\"pref_account_name_position_hidden\">Ẩn</string>\n    <string name=\"pref_account_name_position_end\">Kế bên dịch vụ</string>\n    <string name=\"pref_account_name_position_below\">Dưới dịch vụ</string>\n    <plurals name=\"time_elapsed_seconds\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"other\">%ds trước</item>\n    </plurals>\n    <plurals name=\"time_elapsed_minutes\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"other\">%d phút</item>\n    </plurals>\n    <plurals name=\"time_elapsed_hours\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"other\">%d giờ trước</item>\n    </plurals>\n    <plurals name=\"time_elapsed_days\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"other\">%d ngày trước</item>\n    </plurals>\n    <plurals name=\"time_elapsed_years\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"other\">%d năm trước</item>\n    </plurals>\n    <plurals name=\"dropdown_checkboxes_default_count\">\n        <item quantity=\"other\">%d mục đã chọn</item>\n    </plurals>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-vi-rVN-v29/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"system_theme_title\">Giống hệ thống</string>\n    <string name=\"system_amoled_theme_title\">Giống hệ thống (AMOLED)</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-w820dp/dimens.xml",
    "content": "<resources>\n    <!-- Example customization of dimensions originally defined in res/values/dimens.xml\n         (such as screen margins) for screens with more than 820dp of available width. This\n         would include 7\" and 10\" devices in landscape (~960dp and ~1280dp respectively). -->\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-zh-rCN/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources xmlns:tools=\"http://schemas.android.com/tools\">\n    <string name=\"action_settings\">设置</string>\n    <string name=\"action_about\">关于</string>\n    <string name=\"action_delete\">删除</string>\n    <string name=\"action_transfer\">转移</string>\n    <string name=\"action_edit_icon\">编辑图标</string>\n    <string name=\"action_reset_usage_count\">重置使用计数</string>\n    <string name=\"action_reset_usage_count_dialog\">您确定要将此条目的使用次数设置为 0 吗？</string>\n    <string name=\"action_default_icon\">恢复默认图标</string>\n    <string name=\"discard\">放弃</string>\n    <string name=\"save\">保存</string>\n    <string name=\"all\">全部</string>\n    <string name=\"issuer\">服务商</string>\n    <string name=\"yandex_pin\">PIN (4-16 位数字)</string>\n    <string name=\"motp_pin\">PIN (4 位数)</string>\n    <string name=\"suggested\">已建议</string>\n    <string name=\"usage_count\">使用计数</string>\n    <string name=\"warning\">警告</string>\n    <string name=\"pref_cat_appearance_app\">应用程序</string>\n    <string name=\"pref_cat_appearance_entries\">条目</string>\n    <string name=\"pref_cat_backups_android\">Android</string>\n    <string name=\"pref_cat_backups_auto\">自动备份</string>\n    <string name=\"pref_section_behavior_title\">行为</string>\n    <string name=\"pref_section_behavior_summary\">自定义与条目列表交互时的行为。</string>\n    <string name=\"pref_section_appearance_title\">外观</string>\n    <string name=\"pref_section_appearance_summary\">调整主题、语言及其他影响应用程序外观的设置。</string>\n    <string name=\"pref_section_security_title\">安全</string>\n    <string name=\"pref_section_security_summary\">配置加密、生物识别解锁、自动锁定和其他安全设置。</string>\n    <string name=\"pref_section_import_export_title\">导入 &amp; 导出</string>\n    <string name=\"pref_section_import_export_summary\">导入 Aegis 或其他身份验证程序的备份。创建您的 Aegis 数据库的手动导出。</string>\n    <string name=\"pref_section_audit_log_title\">审计日志</string>\n    <string name=\"pref_section_audit_log_summary\">查找应用内发生的所有报告的重要事件列表。</string>\n    <string name=\"pref_section_backups_title\">备份</string>\n    <string name=\"pref_section_backups_summary\">设定自动备份到您选择的某个位置，或允许参与 Android 的云备份体系。</string>\n    <string name=\"pref_section_icon_packs\">图标包</string>\n    <string name=\"pref_section_icon_packs_summary\">管理和导入图标包</string>\n    <string name=\"pref_select_theme_title\">主题</string>\n    <string name=\"pref_dynamic_colors_title\">动态色彩</string>\n    <string name=\"pref_dynamic_colors_summary\">基于您的 Android 主题颜色的皮肤</string>\n    <string name=\"pref_view_mode_title\">视图模式</string>\n    <string name=\"pref_lang_title\">语言</string>\n    <string name=\"pref_show_icons_title\">显示图标</string>\n    <string name=\"pref_show_icons_summary\">在每个条目旁边显示图标</string>\n    <string name=\"pref_code_group_size_title\">分组显示验证码</string>\n    <string name=\"pref_code_group_size_summary\">选择按多少位数字进行代码分组</string>\n    <string name=\"pref_account_name_position_title\">显示账户名称</string>\n    <string name=\"pref_show_next_code_title\">显示下一组代码</string>\n    <string name=\"pref_show_next_code_summary\">提前显示下一组代码</string>\n    <string name=\"pref_expiration_state_title\">显示代码将要过期</string>\n    <string name=\"pref_expiration_state_summary\">更改代码的颜色，并在代码即将过期时闪烁。</string>\n    <string name=\"pref_expiration_state_fallback\">当代码即将过期时，更改代码的颜色</string>\n    <string name=\"pref_shared_issuer_account_name_title\">仅在必要时显示账户名</string>\n    <string name=\"pref_shared_issuer_account_name_summary\">仅在多项具有相同颁发者时显示账户名。隐藏其他账户名。</string>\n    <string name=\"pref_account_name_position_summary_override\">此设置被瓷贴视图模式覆盖。账户名将显示在发行者下方。</string>\n    <string name=\"pref_import_file_title\">从文件导入</string>\n    <string name=\"pref_import_file_summary\">从文件导入令牌</string>\n    <string name=\"pref_android_backups_title\">Android 云备份</string>\n    <string name=\"pref_android_backups_summary\">允许 Android 的云备份系统在其备份中包含 Aegis 的数据库。这只支持加密的数据库。</string>\n    <string name=\"pref_android_backups_hint\"><i>无论上面如何设置，将始终允许设备到设备的备份</i></string>\n    <string name=\"pref_backups_title\">自动备份数据库</string>\n    <string name=\"pref_backups_summary\">在外部存储上创建数据库的备份。仅加密的数据库支持此功能。</string>\n    <string name=\"pref_backups_reminder_title\">提醒备份</string>\n    <string name=\"pref_backups_reminder_summary\">如果没有备份最新的变更，提醒您备份自己的数据库。</string>\n    <string name=\"pref_backups_reminder_dialog_title\">禁用提醒备份</string>\n    <string name=\"pref_backups_reminder_dialog_summary\">禁用后 Aegis 不会再提醒您备份变更。这有可能促使您遗失令牌。确定禁用吗？</string>\n    <string name=\"pref_backups_versioning_strategy_title\">备份策略</string>\n    <string name=\"pref_backups_versioning_strategy_keep_x_versions\">保留版本数</string>\n    <string name=\"pref_backups_versioning_strategy_single_backup\">单个备份</string>\n    <string name=\"pref_backups_versioning_strategy_single_backup_warning\">所选的备份策略不可靠、不推荐。单个备份如遇故障可能导致您遗失唯一的备份。</string>\n    <string name=\"pref_backups_versioning_strategy_dialog_title\">选择备份策略</string>\n    <string name=\"pref_backups_location_title\">备份位置</string>\n    <string name=\"pref_backups_location_summary\">备份将存储在</string>\n    <string name=\"pref_backup_location_summary\">备份将存储在</string>\n    <string name=\"pref_backups_trigger_title\">触发备份</string>\n    <string name=\"pref_backups_trigger_summary\">手动触发备份</string>\n    <string name=\"pref_backups_versions_title\">要保留的版本数</string>\n    <string name=\"pref_backups_versions_infinite\">\\u221E</string>\n    <plurals name=\"pref_backups_versions_summary\">\n        <item quantity=\"other\">保留 %1$d 个版本备份</item>\n    </plurals>\n    <string name=\"pref_backups_versions_infinite_summary\">备份版本无限量保留</string>\n    <string name=\"pref_import_app_title\">从应用导入</string>\n    <string name=\"pref_import_app_summary\">从其他应用导入令牌（需要 root 权限）</string>\n    <string name=\"pref_export_title\">导出</string>\n    <string name=\"pref_export_summary\">导出数据库</string>\n    <string name=\"pref_password_reminder_title\">密码提醒</string>\n    <string name=\"pref_google_auth_export_title\">Google 身份验证器导出</string>\n    <string name=\"pref_google_auth_export_descriptor\">生成兼容 Google 身份验证器的二维码</string>\n    <string name=\"pref_google_auth_export_no_data\">没有数据可导出</string>\n    <plurals name=\"pref_google_auth_export_incompatible_entries\">\n        <item quantity=\"other\">跳过了 %d 个不兼容的条目</item>\n    </plurals>\n    <string name=\"pref_password_reminder_summary\">显示 %s 提醒输入密码，这样你不会忘记它。</string>\n    <string name=\"pref_password_reminder_summary_disabled\">已禁用</string>\n    <string name=\"pref_secure_screen_title\">屏幕安全</string>\n    <string name=\"pref_secure_screen_summary\">阻止屏幕截图，以及其他试图在本应用中捕获屏幕的行为</string>\n    <string name=\"pref_tap_to_reveal_title\">点击显示</string>\n    <string name=\"pref_tap_to_reveal_summary\">默认情况下，令牌将被隐藏。为了显示验证码，需要点击令牌。</string>\n    <string name=\"pref_tap_to_reveal_time_title\">点击令牌后，验证码的显示时间</string>\n    <string name=\"pref_auto_lock_title\">自动锁定</string>\n    <string name=\"pref_auto_lock_summary\">%s 时</string>\n    <string name=\"pref_auto_lock_summary_disabled\">已禁用</string>\n    <string name=\"pref_auto_lock_prompt\">何时自动锁定 Aegis</string>\n    <string name=\"pref_auto_lock_type_back_button\">返回按钮已按下</string>\n    <string name=\"pref_auto_lock_type_minimize\">应用被最小化</string>\n    <string name=\"pref_auto_lock_type_device_lock\">设备已锁定</string>\n    <string name=\"pref_backup_password_category\">备份和导出</string>\n    <string name=\"pref_backup_password_title\">备份和导出采用单独的密码</string>\n    <string name=\"pref_backup_password_summary\">如果启用，解锁本应用的密码不会用于解密备份和导出。</string>\n    <string name=\"pref_backup_password_change_title\">更改备份和导出的密码</string>\n    <string name=\"pref_backup_password_change_summary\">为备份和导出功能所加密的保险库设置一个新密码</string>\n    <string name=\"pref_encryption_title\">加密</string>\n    <string name=\"pref_encryption_summary\">加密数据库，并在解锁时要求密码或生物识别验证。</string>\n    <string name=\"pref_biometrics_title\">生物识别解锁</string>\n    <string name=\"pref_biometrics_summary\">通过生物识别验证来解锁数据库</string>\n    <string name=\"pref_search_behavior_summary\">搜索方式：%s</string>\n    <string name=\"pref_search_behavior_prompt\">搜索下列任意字段</string>\n    <string name=\"pref_search_behavior_type_name\">名称</string>\n    <string name=\"pref_search_behavior_type_issuer\">颁发者</string>\n    <string name=\"pref_search_behavior_type_note\">备注</string>\n    <string name=\"pref_search_behavior_type_groups\">分组</string>\n    <string name=\"pref_set_password_title\">更改密码</string>\n    <string name=\"pref_set_password_summary\">设置解锁数据库所需的新密码</string>\n    <string name=\"no_events_title\">没有报告的事件</string>\n    <string name=\"no_events_description\">应用内还没有已报告的重要事件</string>\n    <string name=\"event_title_vault_unlocked\">保险库已解锁</string>\n    <string name=\"event_description_vault_unlocked\">成功解锁了保险库</string>\n    <string name=\"event_title_backup_created\">创建了备份</string>\n    <string name=\"event_description_backup_created\">已成功创建了保险库的备份</string>\n    <string name=\"event_title_android_backup_created\">Android 创建了备份</string>\n    <string name=\"event_description_android_backup_created\">保险库备份已成功由 Android 创建</string>\n    <string name=\"event_title_vault_exported\">导出了保险库</string>\n    <string name=\"event_description_vault_exported\">已导出保险库的副本</string>\n    <string name=\"event_title_entry_shared\">共享条目</string>\n    <string name=\"event_description_entry_shared\">共享了条目</string>\n    <string name=\"event_title_vault_unlock_failed_password\">保险库解锁失败了(密码)</string>\n    <string name=\"event_description_vault_unlock_failed_password\">尝试用密码解锁保险库失败</string>\n    <string name=\"event_title_vault_unlock_failed_biometrics\">密码库解锁失败 (生物特征)</string>\n    <string name=\"event_description_vault_unlock_failed_biometrics\">尝试用生物特征解锁保险库失败</string>\n    <string name=\"event_unknown\">未知事件类型</string>\n    <string name=\"audit_log_entry_deleted\">(已删除)</string>\n    <string name=\"today_at_time\">今天 %1$s</string>\n    <string name=\"day_of_week_at_time\">%2$s 的 %1$s</string>\n    <string name=\"export_encrypted\">加密数据库</string>\n    <string name=\"export_help\">此操作将从 Aegis 的内部存储中导出数据库。选择您想要的导出格式：</string>\n    <string name=\"export_warning_unencrypted\">您将导出一个未加密的 Aegis 数据库副本。<b>不建议这么做</b></string>\n    <string name=\"export_warning_password\">导出使用在安全设置中配置的单独密码进行加密。</string>\n    <string name=\"understand_risk_accept\">我了解风险</string>\n    <string name=\"export_format_aegis\">Aegis (.JSON)</string>\n    <string name=\"export_format_google_auth_uri\">文本文件 (.TXT)</string>\n    <string name=\"export_format_html\">网页 (.HTML)</string>\n    <string name=\"export_format_hint\">导出格式</string>\n    <string name=\"export_all_groups\">导出所有组</string>\n    <string name=\"export_choose_groups\">选择要导出的组</string>\n    <plurals name=\"export_groups_selected_count\">\n        <item quantity=\"other\">已选择 %d 个群组</item>\n    </plurals>\n    <string name=\"export_no_groups_selected\">没有选择要导出的组</string>\n    <string name=\"export_html_title\" comment=\"The title of an HTML export document\">Aegis 身份验证器导出</string>\n    <string name=\"choose_authentication_method\">安全</string>\n    <string name=\"authentication_method_explanation\">Aegis 是一款专注于安全性的双重认证（2FA）应用。令牌存储在数据库中，可以选择使用您选择的密码进行加密。如果攻击者获得了加密的数据库文件，他们将无法在不知道密码的情况下访问内容。\\n\\n我们已预先选择了我们认为最适合您的设备的选项。</string>\n    <string name=\"authentication_method_none\">无</string>\n    <string name=\"authentication_method_none_description\">您无需密码即可解锁数据库，并且不会对其进行加密。<b>不建议使用此选项</b>。</string>\n    <string name=\"authentication_method_password\">密码</string>\n    <string name=\"authentication_method_password_description\">需要密码来解锁数据库。</string>\n    <string name=\"authentication_method_password_explanation\">警告：如果忘记密码，将永久失去对令牌的访问权限。没有密码，则无法恢复它们。</string>\n    <string name=\"authentication_method_biometrics\">生物识别</string>\n    <string name=\"authentication_method_biometrics_description\">除密码外，在此设备上注册的生物识别信息（例如指纹或人脸），也可用于解锁数据库。</string>\n    <string name=\"authentication\">解锁数据库</string>\n    <string name=\"authentication_multiline\" comment=\"The newline in the middle is used for aesthetic purposes\">解锁\\n数据库</string>\n    <string name=\"auth_use_biometrics\">或者点击此处以使用 <font fgcolor=\"#FF0D86C1\">生物识别</font></string>\n    <string name=\"set_password\">请输入密码</string>\n    <string name=\"set_group\">请输入分组名称</string>\n    <string name=\"set_number\">请选择时长</string>\n    <string name=\"set_password_confirm\">请确认密码</string>\n    <string name=\"invalid_password\">密码错误</string>\n    <string name=\"invalidated_biometrics\">检测到你设备安全设置的一处更改。请转到 “Aegis -&gt; 设置 -&gt; 安全性 -&gt; 生物解锁” 来禁用并重新启用生物解锁。</string>\n    <string name=\"password_reminder\">您已有一段时间没有输入密码了，还记得它吗？</string>\n    <string name=\"password_reminder_dialog_title\">默认使用生物识别解锁</string>\n    <string name=\"password_reminder_dialog_message\">我们会偶尔提示您输入密码，以免您忘记它而被锁在密码库之外。输入一次密码后，Aegis 将回到默认使用生物识别解锁，直到下次提醒周期。</string>\n    <string name=\"password_reminder_freq_never\">从不</string>\n    <string name=\"password_reminder_freq_weekly\">每周</string>\n    <string name=\"password_reminder_freq_biweekly\">每两周</string>\n    <string name=\"password_reminder_freq_monthly\">每月</string>\n    <string name=\"password_reminder_freq_quarterly\">每季度</string>\n    <string name=\"enter_password_2fas_message\">看起来此 2FAS 备份已加密。请在下方输入密码。</string>\n    <string name=\"enter_password_authy_message\">您的 Authy 令牌似乎已加密。请关闭 Aegis，打开 Authy，然后使用您的密码解锁令牌。另外，如果您在下面输入密码，Aegis 也可以尝试为您解密 Authy 令牌。</string>\n    <string name=\"enter_password_aegis_title\">请输入导入密码</string>\n    <string name=\"period_hint\">时间间隔 (秒)</string>\n    <string name=\"algorithm_hint\">哈希函数</string>\n    <string name=\"type\">类型</string>\n    <string name=\"share\">分享</string>\n    <string name=\"yes\">确定</string>\n    <string name=\"no\">取消</string>\n    <string name=\"undo\">撤销</string>\n    <string name=\"unlock\">解锁</string>\n    <string name=\"advanced\">高级设置</string>\n    <string name=\"counter\">计数器</string>\n    <string name=\"digits\">位数</string>\n    <string name=\"secret\">密钥</string>\n    <string name=\"scan\">扫描二维码</string>\n    <string name=\"scan_image\">扫描本地图片</string>\n    <string name=\"enter_manually\">手动输入</string>\n    <string name=\"set_up_biometric\">设置生物识别解锁</string>\n    <string name=\"copy\">复制</string>\n    <string name=\"edit\">编辑</string>\n    <string name=\"select_all\">全选</string>\n    <string name=\"assign_icons\">分配图标</string>\n    <string name=\"assign_groups\">分配给组</string>\n    <string name=\"assign_groups_dialog_summary\">选择您想要将选中条目分配到的组。</string>\n    <string name=\"assign_groups_dialog_dropdown\">选择组</string>\n    <string name=\"favorite\" comment=\"Verb\">加入收藏</string>\n    <string name=\"unfavorite\" comment=\"Verb\">取消收藏</string>\n    <string name=\"error_all_caps\">错误</string>\n    <string name=\"password\">密码</string>\n    <string name=\"confirm_password\">确认密码</string>\n    <string name=\"show_password\">显示密码</string>\n    <string name=\"new_entry\">新建条目</string>\n    <string name=\"add_new_entry\">添加新的条目</string>\n    <string name=\"unlock_vault_error\">无法解锁数据库</string>\n    <string name=\"unlock_vault_error_description\">密码错误。请确保您未输错密码。</string>\n    <string name=\"password_equality_error\">密码应相同且非空</string>\n    <string name=\"snackbar_authentication_method\">请选择身份验证方法</string>\n    <string name=\"encrypting_vault\">正在加密数据库</string>\n    <string name=\"exporting_vault\">正在导出数据库</string>\n    <string name=\"optimizing_icon\">优化图标</string>\n    <string name=\"optimizing_icon_multiple\">正在优化第 %1$d 个图标，共 %2$d 个</string>\n    <string name=\"reading_file\">正在读取文件</string>\n    <string name=\"requesting_root_access\">正在请求 root 权限</string>\n    <string name=\"analyzing_qr\">正在分析二维码</string>\n    <string name=\"analyzing_qr_multiple\">正在分析二维码 %1$d/%2$d (%3$s)</string>\n    <plurals name=\"added_new_entries\">\n        <item quantity=\"other\">添加了 %d 个新条目到保险库</item>\n    </plurals>\n    <string name=\"importing_icon_pack\">导入图标包</string>\n    <string name=\"delete_entry\">删除条目</string>\n    <string name=\"delete_entry_description\">您确定要删除此条目吗？</string>\n    <string name=\"delete_entry_explanation\">此操作不会为下列服务禁用 2FA：\\n<b>%s</b>\\n\\n为防止失去访问权限，请确保您已禁用 2FA 或者您有其他方式为此服务生成验证码。</string>\n    <string name=\"delete_entries\">删除条目</string>\n    <plurals name=\"delete_entries_description\">\n        <item quantity=\"other\">您确定要删除 %d 个条目吗？</item>\n    </plurals>\n    <string name=\"discard_changes\">放弃更改？</string>\n    <string name=\"discard_changes_description\">您的更改尚未保存</string>\n    <string name=\"saving_profile_error\">保存配置文件时出错</string>\n    <string name=\"saving_assign_icons_error\">分配图标时出错</string>\n    <string name=\"welcome\">欢迎使用</string>\n    <string name=\"app_description\">Aegis 是一款免费，安全和开源的双重认证（2FA）应用</string>\n    <string name=\"setup_completed\">设置完成</string>\n    <string name=\"setup_completed_description\">Aegis 设置完成，可以开始使用了。</string>\n    <string name=\"vault_not_found\">未找到数据库，开始设置…</string>\n    <string name=\"copied\">已复制</string>\n    <string name=\"errors_copied\">错误已复制到剪贴板</string>\n    <string name=\"version_copied\">版本号已复制到剪贴板</string>\n    <string name=\"error_required_field\">此字段为必填</string>\n    <string name=\"error_occurred\">发生了一个错误</string>\n    <string name=\"decryption_error\">试图解锁数据库时出错</string>\n    <string name=\"decryption_corrupt_error\">尝试解锁数据库时发生错误，您的数据库文件可能已损坏。</string>\n    <string name=\"saving_error\">试图保存数据库时出错</string>\n    <string name=\"vault_init_error\">尝试初始化数据库时发生错误</string>\n    <string name=\"vault_load_error\">尝试从存储中加载数据库时发生错误</string>\n    <string name=\"biometric_decrypt_error\">尝试使用生物特征认证对数据库进行解密时发生错误。通常只有在更改设备的安全设置后才会发生这种情况。请使用您的密码解锁数据库，然后在 Aegis 的设置中重新配置生物特征认证。</string>\n    <string name=\"biometric_init_error\">尝试准备生物特征认证时发生错误。通常只有在更改设备的安全设置后才会发生这种情况。请使用您的密码解锁数据库，然后在 Aegis 的设置中重新配置生物特征认证。</string>\n    <string name=\"disable_encryption\">禁用加密</string>\n    <string name=\"disable_encryption_description\">你确定要禁用加密吗？这将导致数据库存储在纯文本中。 <b>自动备份也将被禁用</b>。</string>\n    <string name=\"enable_encryption_error\">启用加密时出错</string>\n    <string name=\"disable_encryption_error\">禁用加密时出错</string>\n    <string name=\"backup_successful\">成功设定了定期备份任务</string>\n    <string name=\"backup_error\">尝试创建备份时发生错误</string>\n    <string name=\"backup_status_success\">上次备份成功：%s</string>\n    <string name=\"backup_status_failed\">上次备份失败：%s</string>\n    <string name=\"backup_status_none\">尚未进行过备份</string>\n    <string name=\"backup_warning_password\">备份使用在安全设置中配置的单独密码进行加密</string>\n    <string name=\"documentsui_error\">你的设备上似乎缺少 DocumentsUI。这是选择和创建文档所必需的重要系统组件。如果你使用过工具来&quot;精简&quot;系统组件，你可能不小心删除了它，必须重新安装它。</string>\n    <string name=\"icon_pack_import_error\">试图导入图标包时出错</string>\n    <string name=\"icon_pack_import_exists_error\">您试图导入的图标包已经存在。您想要覆盖它吗？</string>\n    <string name=\"icon_pack_delete_error\">试图删除图标包时出错</string>\n    <plurals name=\"icon_pack_info\">\n        <item quantity=\"other\">%d 个图标</item>\n    </plurals>\n    <string name=\"icon_custom\">自定义</string>\n    <string name=\"permission_denied\">获取权限失败</string>\n    <string name=\"andotp_new_format\">新格式（v0.6.3 及以上版本）</string>\n    <string name=\"andotp_old_format\">旧格式（v0.6.2 以下版本）</string>\n    <string name=\"choose_andotp_importer\">是哪种格式的 andOTP 备份文件？</string>\n    <string name=\"choose_totpauth_importer\">此 TOTP 验证器备份是否已使用密码加密？</string>\n    <string name=\"choose_application\">选择您想要从中导入数据库的应用</string>\n    <string name=\"choose_theme\">选择您想要的主题</string>\n    <string name=\"choose_account_name_position\">选择您期望的账户名称位置</string>\n    <string name=\"choose_view_mode\">选择您想要的视图模式</string>\n    <string name=\"choose_copy_behavior\">选择如何复制</string>\n    <string name=\"parsing_file_error\">试图解析文件时出错</string>\n    <string name=\"file_not_found\">错误：文件未找到</string>\n    <string name=\"reading_file_error\">试图读取文件时出错</string>\n    <string name=\"app_lookup_error\">错误：应用未安装</string>\n    <string name=\"app_version_error\">不支持已安装的 %s 版本。最近的版本已开始加密内部存储目录中的部分文件，因此 Aegis 无法访问导入所需的信息。尝试导入可能会出错，仍要继续吗？</string>\n    <string name=\"root_error\">错误：无法获取 root 权限</string>\n    <plurals name=\"imported_entries_count\">\n        <item quantity=\"other\">已导入 %d 个条目</item>\n    </plurals>\n    <plurals name=\"entries_shown\">\n        <item quantity=\"other\">正在显示 %d 个条目</item>\n    </plurals>\n    <string name=\"intro_import_error_title\">导入数据库时出错</string>\n    <string name=\"import_error_title\">导入时发生一个或多个错误</string>\n    <string name=\"exporting_vault_error\">试图导出数据库时出错</string>\n    <string name=\"exported_vault\">数据库已导出</string>\n    <string name=\"encryption_set_password_error\">试图设置密码时发生错误。</string>\n    <string name=\"encryption_enable_biometrics_error\">尝试启用生物识别解锁时发生错误。某些设备的生物识别认证实现不佳，您的很可能就是其中之一。考虑改用仅密码配置。</string>\n    <string name=\"no_cameras_available\">无可用的摄像头</string>\n    <string name=\"read_qr_error\">试图读取二维码时出错</string>\n    <string name=\"read_qr_error_phonefactor\">Aegis 不兼容 Microsoft 专有的 2FA 算法。请确保在设置 Office 365 的 2FA 时选择“在无通知情况下安装应用程序”。</string>\n    <string name=\"partial_google_auth_import\">检测到不完整的 Google 身份验证器导出</string>\n    <string name=\"partial_google_auth_import_warning\">您的导入缺少一些  QR 码。 找不到下列代码：\\n\\n<b>%s</b>\\n\\n您仍可以继续导入已有部分，但建议您重试所有 QR 码，以避免出现丢失令牌的风险。</string>\n    <string name=\"missing_qr_code_descriptor\">• QR 码 %d</string>\n    <plurals name=\"import_partial_export_anyway\">\n        <item quantity=\"other\">继续导入 %d 个令牌</item>\n    </plurals>\n    <string name=\"import_google_auth_failure\">导入 Google 身份验证器的导出文件失败</string>\n    <string name=\"unrelated_google_auth_batches_error\">导出文件包含多个批次的内容。请一次只导入一个批次。</string>\n    <string name=\"no_tokens_can_be_imported\">没有可导入的令牌</string>\n    <string name=\"unlocking_vault\">解锁数据库</string>\n    <string name=\"rename_group\">重命名组</string>\n    <string name=\"no_group_selection\">不在任何组中的条目会出现在“无分组”中。</string>\n    <string name=\"remove_group\">删除分组</string>\n    <string name=\"remove_group_description\">您确定要删除这个分组吗？此分组内的条目将自动移动到“无分组”。</string>\n    <string name=\"remove_unused_groups\">删除未使用的组</string>\n    <string name=\"remove_unused_groups_description\">您确定要删除所有未分配条目的组吗？</string>\n    <string name=\"remove_icon_pack\">删除图标包</string>\n    <string name=\"remove_icon_pack_description\">您确定要删除此图标包吗？使用此包图标的条目不会受到影响。</string>\n    <string name=\"details\">详细信息</string>\n    <string name=\"show_error_details\">显示错误详情</string>\n    <string name=\"lock\">锁定</string>\n    <string name=\"name\">名称</string>\n    <string name=\"no_group\">无分组</string>\n    <string name=\"sort\" comment=\"Title of the Sort button in the top action bar of the main view\">排序</string>\n    <string name=\"sort_alphabetically\">服务商（从 A 到 Z）</string>\n    <string name=\"sort_alphabetically_reverse\">服务商（从 Z 到 A）</string>\n    <string name=\"sort_alphabetically_name\">账户（从 A 到 Z）</string>\n    <string name=\"sort_alphabetically_name_reverse\">账户（从 Z 到 A）</string>\n    <string name=\"sort_usage_count\">使用计数</string>\n    <string name=\"sort_last_used\">上次使用</string>\n    <string name=\"sort_custom\">自定义</string>\n    <string name=\"last_used\">上次使用</string>\n    <string name=\"last_used_never\">从不</string>\n    <string name=\"new_group\">新建分组…</string>\n    <string name=\"group\">分组</string>\n    <string name=\"group_name_hint\">分组名称</string>\n    <string name=\"preference_manage_groups\">编辑分组</string>\n    <string name=\"preference_manage_groups_summary\">管理和删除您的分组</string>\n    <string name=\"preference_reset_usage_count\">重置使用计数</string>\n    <string name=\"preference_reset_usage_count_summary\">重置数据库中每个条目的使用计数</string>\n    <string name=\"preference_reset_usage_count_dialog\">您确定要将数据库中所有条目的使用计数设置为 0？</string>\n    <string name=\"note\" comment=\"Users can add a note to an entry\">备注</string>\n    <string name=\"clear\">清空</string>\n    <string name=\"dialog_duplicate_entry_title\" comment=\"'Duplicate' is a noun here\">复制条目</string>\n    <string name=\"dialog_duplicate_entry_message\">此条目与一个或多个现有条目具有相同的名称和发行者。您想如何继续？</string>\n    <string name=\"dialog_duplicate_entry_overwrite_title\">覆盖现有的条目</string>\n    <string name=\"dialog_duplicate_entry_overwrite_subtitle\">用新条目替换现有条目。此操作不能撤消</string>\n    <string name=\"dialog_duplicate_entry_suffix_title\">添加后缀</string>\n    <string name=\"dialog_duplicate_entry_suffix_subtitle\">添加后缀后新条目的名称。新名称将是： %s</string>\n    <string name=\"dialog_duplicate_entry_cancel_title\">取消保存</string>\n    <string name=\"dialog_duplicate_entry_cancel_subtitle\">允许您在尝试再次保存之前编辑条目</string>\n    <plurals name=\"dialog_duplicate_entry_overwrite_dialog_message\">\n        <item quantity=\"other\">您确定要删除以下名称的 %d 条记录：\\n\\n%s - %s</item>\n    </plurals>\n    <string name=\"dialog_duplicate_entry_overwrite_dialog_title\">确认删除</string>\n    <string name=\"pref_haptic_feedback_summary\">代码刷新时使您的设备振动</string>\n    <string name=\"pref_haptic_feedback_title\">触觉反馈</string>\n    <string name=\"pref_highlight_entry_title\">点击时高亮令牌</string>\n    <string name=\"pref_highlight_entry_summary\">使令牌在点击后暂时高亮显示以便区分</string>\n    <string name=\"pref_groups_multiselect_title\">多选分组</string>\n    <string name=\"pref_groups_multiselect_summary\">允许同时选中多个分组</string>\n    <string name=\"pref_minimize_on_copy_title\">复制时最小化</string>\n    <string name=\"pref_minimize_on_copy_summary\">复制令牌后最小化应用</string>\n    <string name=\"pref_copy_behavior_title\">复制令牌到剪贴板</string>\n    <string name=\"pref_search_behavior_title\">搜索行为</string>\n    <string name=\"pref_pause_entry_title\">轻按冻结令牌</string>\n    <string name=\"pref_pause_entry_summary\">通过轻按令牌来暂停它们的自动刷新。 只要被聚焦，令牌就不会更新。 需要启用“轻按突出显示令牌”或“轻按显示”。</string>\n    <string name=\"pin_keyboard_description\">请输入您的密码以启用 PIN 键盘。请注意，只有当您的密码仅由数字构成时才能使用</string>\n    <string name=\"pin_keyboard_error\">启用 PIN 键盘时出错</string>\n    <string name=\"pin_keyboard_error_description\">无法设置 PIN 键盘。您的密码只能包含数字。</string>\n    <string name=\"pin_keyboard_disabled\">密码已更改。PIN 键盘将不再显示。</string>\n    <string name=\"selected\">选择</string>\n    <string name=\"dark_theme_title\">深色主题</string>\n    <string name=\"light_theme_title\">浅色主题</string>\n    <string name=\"amoled_theme_title\">AMOLED 主题</string>\n    <string name=\"system_theme_title\">根据省电模式进行设置</string>\n    <string name=\"system_amoled_theme_title\">根据省电模式进行设置 (AMOLED)</string>\n    <string name=\"normal_viewmode_title\">标准</string>\n    <string name=\"compact_mode_title\">紧凑</string>\n    <string name=\"small_mode_title\">小巧</string>\n    <string name=\"tiles_mode_title\">瓷贴</string>\n    <string name=\"unknown_issuer\">未知的服务商</string>\n    <string name=\"unknown_account_name\">未知的帐户名称</string>\n    <plurals name=\"import_error_dialog\">\n        <item quantity=\"other\">Aegis 无法导入 %d 个令牌。此类令牌将被忽略。点击 “详细信息” 查看关于错误的更多信息。</item>\n    </plurals>\n    <string name=\"unable_to_process_deeplink\">无法处理深层链接</string>\n    <string name=\"unable_to_read_qrcode_file\">无法从文件读取和处理二维码: %s。</string>\n    <string name=\"unable_to_process_shared_text\">无法将共享文本作为 OTP 进行处理</string>\n    <string name=\"unable_to_read_qrcode_files\">无法读取和处理一些二维码。将只导入 %2$d 中的 %1$d 个条目。</string>\n    <string name=\"unable_to_generate_qrcode\">无法生成二维码</string>\n    <string name=\"select_picture\">选择图片</string>\n    <string name=\"select_icon\">选择图标</string>\n    <string name=\"tile_open_vault\" comment=\"label for a quick settings tile that opens the app when tapped\">打开数据库</string>\n    <string name=\"tile_open_scanner\" comment=\"label for a quick settings tile that opens the QR code scanner when tapped\">打开扫码器</string>\n    <string name=\"toggle_checkboxes\">切换复选框</string>\n    <string name=\"search\">搜索</string>\n    <string name=\"channel_name_lock_status\">锁定状态</string>\n    <string name=\"channel_description_lock_status\">当数据库处于锁定状态时，Aegis 可以创建一个持久的通知来提示您</string>\n    <string name=\"vault_unlocked_state\">数据库已解锁，点击此处锁定。</string>\n    <string name=\"version\">版本</string>\n    <string name=\"changelog\">更新日志</string>\n    <string name=\"whats_new\">新增功能</string>\n    <string name=\"github_description\">源代码，问题和信息</string>\n    <string name=\"license\">代码许可</string>\n    <string name=\"license_description\">Aegis 身份验证器在 GPLv3 下授权</string>\n    <string name=\"third_party_licenses\">第三方许可</string>\n    <string name=\"third_party_licenses_description\">Aegis 用到的第三方库的许可</string>\n    <string name=\"country_netherlands\">荷兰</string>\n    <string name=\"email_us\">发送电子邮件</string>\n    <string name=\"visit_website\">访问我们的网站</string>\n    <string name=\"about_support\">支持</string>\n    <string name=\"support_rate\">评分</string>\n    <string name=\"support_rate_description\">通过在 Google Play 商店留下评论来支持我们</string>\n    <string name=\"webview_error\">此设备不支持 webview，这是查看更新日志和许可证所必需的。你的系统缺少这一组件。</string>\n    <string name=\"email\">电子邮件</string>\n    <string name=\"time_sync_warning_title\">自动同步时间</string>\n    <string name=\"time_sync_warning_message\">Aegis 依靠系统时间来同步生成正确的验证码。仅几秒钟的偏差可能会导致验证码错误。您的设备似乎未配置为自动同步时间。您现在要设置自动同步时间吗？</string>\n    <string name=\"time_sync_warning_disable\">不要再次提醒。我知道我在做什么。</string>\n    <string name=\"google_qr_export_unrelated\">找到不相关的二维码。请尝试重新扫描。</string>\n    <plurals name=\"google_qr_export_scanned\">\n        <item quantity=\"other\">已扫描 %1$d 个 二维码，共 %2$d 个</item>\n    </plurals>\n    <string name=\"google_qr_export_unexpected\">预期二维码 #%1$d，但扫描了 #%2$d</string>\n    <string name=\"backup_error_bar_message\"><b>数据库最近备份失败</b></string>\n    <string name=\"backup_error_dialog_details\" comment=\"The first parameter is the type of backup (e.g. built-in or Android backup). The second parameter is an elapsed time in the style of 'x seconds/minutes/days ago'.\">        最近使用%1$s 备份密码库的尝试失败了，因为发生了错误。 备份尝试发生在 %2$s 前。请检查你的备份设备，确保备份可以成功完成。\n    </string>\n    <string name=\"backup_permission_error_dialog_details\" comment=\"The first parameter is the type of backup (e.g. built-in or Android backup). The second parameter is an elapsed time in the style of 'x seconds/minutes/days ago'.\">        最近使用 %1$s 备份密码库的尝试失败了，因为 Aegis 没有写入备份目的地的权限。备份尝试发生在%2$s前。发生错误的原因可能是你 移动或重命名了备份目的地或者你近期从备份恢复了 Aegis。请重新配置备份目的地。\n    </string>\n    <string name=\"backup_system_builtin\">Aegis 内置的自动备份</string>\n    <string name=\"backup_system_android\">Android 的云备份系统</string>\n    <string name=\"backup_reminder_bar_message_with_latest\" comment=\"The parameter is an elapsed time in the style of 'x seconds/minutes/days ago'\">        最新备份已过时 (%s)\n    </string>\n    <string name=\"backup_reminder_bar_message\">        未备份更改\n    </string>\n    <string name=\"backup_reminder_bar_dialog_title\">变更尚未备份</string>\n    <string name=\"backup_reminder_bar_dialog_summary\">最近对数据库的变更尚未备份。应定期备份以防丢失访问权限。建议您到设置菜单中设置自动备份。    </string>\n    <string name=\"backup_reminder_bar_dialog_accept\">设置备份</string>\n    <string name=\"backup_plaintext_export_warning\"><b>保险库最近导出为纯文本</b></string>\n    <string name=\"pref_show_plaintext_warning_hint\">不再显示此警告</string>\n    <string name=\"backup_plaintext_warning_explanation\">显示此警告是因为您最近导出了一个未加密的保险库副本。 为了保持令牌的安全性，我们建议一旦不再需要该文件，就将其删除。</string>\n    <string name=\"switch_camera\">切换摄像头</string>\n    <string name=\"empty_list\">没有可显示的验证码。点击右下角的加号，开始添加条目</string>\n    <string name=\"empty_list_title\">未找到条目</string>\n    <string name=\"empty_group_list\">没有找到可以被显示的分组，请在条目编辑页面中添加分组</string>\n    <string name=\"empty_group_list_title\">未找到分组</string>\n    <string name=\"no_icon_packs\">尚未导入图标包。点击加号标记来导入一个。提示：尝试 <a href=\"https://aegis-icons.github.io\">aegis-icons</a>。</string>\n    <string name=\"no_icon_packs_title\">没有图标包</string>\n    <string name=\"pick_icon\">选择一个图标</string>\n    <string name=\"uncategorized\">未分类</string>\n    <string name=\"done\">完成</string>\n    <plurals name=\"qr_count\">\n        <item quantity=\"other\">%d / %d 枚二维码</item>\n    </plurals>\n    <string name=\"next\">下一个</string>\n    <string name=\"previous\">上一个</string>\n    <string name=\"copy_uri\">复制 URI</string>\n    <string name=\"unable_to_copy_uri_to_clipboard\">无法复制 URI 到剪贴板</string>\n    <string name=\"uri_copied_to_clipboard\">URI 已复制到剪贴板</string>\n    <string name=\"transfer_entry_description\">使用您想将此条目迁移到的其它身份验证器应用扫描此二维码</string>\n    <string name=\"transfer_entry_brightness\">轻按二维码切换全屏亮度</string>\n    <string name=\"google_auth_compatible_transfer_description\">使用 Aegis 或 Google 身份验证器扫描这些二维码。\\n\\n由于 Google 身份验证器应用的限制， 只包含使用 SHA1 并生成 6 位数字代码的 TOTP &amp; HOTP 令牌</string>\n    <string name=\"password_strength_very_weak\">很弱</string>\n    <string name=\"password_strength_weak\">弱</string>\n    <string name=\"password_strength_fair\">中等</string>\n    <string name=\"password_strength_good\">好</string>\n    <string name=\"password_strength_strong\">强</string>\n    <string name=\"password_strength_unknown\">密码太长无法分析强度</string>\n    <string name=\"pref_pin_keyboard_title\">在锁屏界面上使用 PIN 键盘</string>\n    <string name=\"pref_pin_keyboard_summary\">如果您想要在锁屏界面启用 PIN 键盘，请启用此选项。这只适用于数字密码</string>\n    <string name=\"title_activity_preferences\">设置</string>\n    <string name=\"title_activity_manage_groups\">管理分组</string>\n    <string name=\"title_activity_transfer\">转移条目</string>\n    <string name=\"title_activity_about\">关于</string>\n    <string name=\"title_activity_edit_entry\">编辑条目</string>\n    <string name=\"title_activity_scan_qr\">扫描二维码</string>\n    <string name=\"title_activity_import_entries\">导入条目</string>\n    <string name=\"title_activity_assign_icons\">分配图标</string>\n    <string name=\"title_activity_licenses\">第三方许可</string>\n    <string name=\"dialog_wipe_entries_title\">擦除条目</string>\n    <string name=\"dialog_wipe_entries_message\">您的数据库已经包含条目。 您想要在导入此文件之前删除这些条目吗？\\n\\n<b>这样做，您将永久失去对数据库中现有条目的访问权限。</b></string>\n    <string name=\"dialog_wipe_entries_checkbox\">擦除数据库内容</string>\n    <string name=\"import_from_clipboard_title\">从剪贴板导入</string>\n    <string name=\"import_from_clipboard_message\">我们在您的剪贴板上找到了一个有效的 otpauth uri。\\n\\n<b>名称</b>: %1$s\\n<b>发行者</b>: %2$s\\n\\n你想要使用它预填充此条目吗？</string>\n    <string name=\"panic_trigger_ignore_toast\">Aegis 收到紧急触发信号，但您未启用相关设置，忽略中</string>\n    <string name=\"pref_panic_trigger_title\">收到紧急触发信号时删除数据库</string>\n    <string name=\"pref_panic_trigger_summary\">从 Ripple 收到紧急触发信号时删除数据库</string>\n    <string name=\"import_vault\">导入 Aegis 数据库</string>\n    <string name=\"import_vault_hint\">想要从其他 2FA 应用程序导入吗？请先完成设置，然后转到设置菜单。</string>\n    <plurals name=\"import_duplicate_toast\">\n        <item quantity=\"other\">未选中 %d 个潜在重复项。请检视条目列表。</item>\n    </plurals>\n    <string name=\"importer_help_2fas\">提供一个 2FAS 身份验证器备份文件。</string>\n    <string name=\"importer_help_aegis\">提供一个 Aegis 导出/备份文件。</string>\n    <string name=\"importer_help_authenticator_plus\">提供一个通过 <b>设置 -&gt; 备份 &amp; 还原 -&gt; 导出为纯文本和 HTML</b> 获得的 Authenticator Plus 导出文件。</string>\n    <string name=\"importer_help_authy\">提供 <b>/data/data/com.authy.authy/shared_prefs/com.authy.storage.tokens.authenticator.xml</b> 的一个副本，位于 Authy 的内部存储目录。</string>\n    <string name=\"importer_help_andotp\">提供 andOTP 导出/备份文件。</string>\n    <string name=\"importer_help_bitwarden\">提供 Bitwarden 导出 / 备份文件。不支持加密的文件。</string>\n    <string name=\"importer_help_battle_net_authenticator\">提供 <b>/data/data/com.blizzard.messenger/shared_prefs/com.blizzard.messenger.authenticator_preferences.xml</b> 的副本，这位于 Battle.net Authenticator 的内部存储目录。</string>\n    <string name=\"importer_help_duo\">提供 <b>/data/data/com.duosecurity.duomobile/files/duokit/accounts.json</b> 的一个副本，位于 DUO 的内部存储目录。</string>\n    <string name=\"importer_help_ente_auth\">提供一个 Ente Auth 导出文件。目前只支持未加密文件。</string>\n    <string name=\"importer_help_freeotp\">FreeOTP 2: 提供备份文件.\\nFreeOTP 1.x: 提供<b>/data/data/org.fedorahosted.freeotp/shared_prefs/tokens.xml</b>的副本，位于 FreeOTP 的内部存储目录。</string>\n    <string name=\"importer_help_freeotp_plus\">提供 FreeOTP+ 导出文件。</string>\n    <string name=\"importer_warning_title_freeotp2\">FreeOTP 2 兼容性</string>\n    <string name=\"importer_warning_message_freeotp2\">FreeOTP 2 有许多问题可能导致备份损坏。 Aegis 将试着挽救尽可能多的条目，但有些条目甚至全部都未能导入。</string>\n    <string name=\"importer_help_google_authenticator\"><b>仅支持来自 Google Authenticator v5.10 及先前版本的数据库</b>。\\n\\n提供 <b>/data/data/com.google.android.apps.authenticator2/databases/databases</b> 的副本，文件位于 Google Authenticator 的内部存储目录。</string>\n    <string name=\"importer_help_microsoft_authenticator\">提供 <b>/data/data/com.azure.authenticator/databases/PhoneFactor</b> 的一个副本，位于 Microsoft Authenticator 的内部存储目录。</string>\n    <string name=\"importer_help_plain_text\">提供一个每一行都有一个 Google Authenticator URI 的纯文本文件。</string>\n    <string name=\"importer_help_proton_authenticator\">通过 <b>设置-&gt;导出</b>提供获得的 Proton 身份认证应用导出文件（.json)。</string>\n    <string name=\"importer_help_steam\"><b>不支持 Steam v3.0 和更新版本</b>。提供 <b>/data/data/com.valvesoftware.android.steam.community/files/Steamguard-*.json</b>的副本, 位于Steam 内部存储目录。</string>\n    <string name=\"importer_help_stratum\">提供一个用如下方式获取的 Stratum 导出文件：<b>设置 -&gt; 备份 -&gt; 备份到加密文件（推荐）</b>。</string>\n    <string name=\"importer_help_totp_authenticator\">提供一个 TOTP 身份验证器导出文件。</string>\n    <string name=\"importer_help_winauth\">提供 WinAuth 导出文件。</string>\n    <string name=\"import_assign_icons_dialog_title\">分配图标</string>\n    <string name=\"import_assign_icons_dialog_text\">您想给导入的条目分配图标吗？</string>\n    <string name=\"importer_encrypted_exception_google_authenticator\">加密条目已跳过：%s</string>\n    <string name=\"importer_help_direct\">直接导入来自 %s 的条目。这要求将应用程序安装在此设备上，并授予 Aegis root 权限。</string>\n    <string name=\"groups\">分组</string>\n    <string name=\"pref_focus_search\">应用启动后聚焦搜索</string>\n    <string name=\"pref_focus_search_summary\">打开应用程序后立即聚焦搜索</string>\n    <string name=\"pref_grouping_halves\">均分</string>\n    <string name=\"pref_grouping_none\">不分组</string>\n    <string name=\"pref_grouping_size_two\">2 位数</string>\n    <string name=\"pref_grouping_size_three\">3 位数</string>\n    <string name=\"pref_grouping_size_four\">4 位数</string>\n    <string name=\"pref_copy_behavior_never\">从不</string>\n    <string name=\"pref_copy_behavior_single_tap\">单击</string>\n    <string name=\"pref_copy_behavior_double_tap\">双击</string>\n    <string name=\"pref_account_name_position_hidden\">隐藏</string>\n    <string name=\"pref_account_name_position_end\">发行者旁边</string>\n    <string name=\"pref_account_name_position_below\">发行者下方</string>\n    <plurals name=\"time_elapsed_seconds\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"other\">%d 秒前</item>\n    </plurals>\n    <plurals name=\"time_elapsed_minutes\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"other\">%d 分钟前</item>\n    </plurals>\n    <plurals name=\"time_elapsed_hours\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"other\">%d 小时前</item>\n    </plurals>\n    <plurals name=\"time_elapsed_days\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"other\">%d 天前</item>\n    </plurals>\n    <plurals name=\"time_elapsed_years\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"other\">%d 年前</item>\n    </plurals>\n    <plurals name=\"dropdown_checkboxes_default_count\">\n        <item quantity=\"other\">已选择 %d 个项目</item>\n    </plurals>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-zh-rCN-v29/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"system_theme_title\">系统默认</string>\n    <string name=\"system_amoled_theme_title\">系统默认（AMOLED）</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-zh-rTW/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources xmlns:tools=\"http://schemas.android.com/tools\">\n    <string name=\"action_settings\">設定</string>\n    <string name=\"action_about\">關於</string>\n    <string name=\"action_delete\">刪除</string>\n    <string name=\"action_transfer\">轉移</string>\n    <string name=\"action_edit_icon\">編輯圖示</string>\n    <string name=\"action_reset_usage_count\">重設使用次數</string>\n    <string name=\"action_reset_usage_count_dialog\">確定要將本條目的使用次數重設為零嗎？</string>\n    <string name=\"action_default_icon\">恢復為默認圖示</string>\n    <string name=\"discard\">放棄</string>\n    <string name=\"save\">儲存</string>\n    <string name=\"all\">所有</string>\n    <string name=\"issuer\">服務商</string>\n    <string name=\"yandex_pin\">PIN (4 到 16 碼)</string>\n    <string name=\"motp_pin\">PIN (4 位數)</string>\n    <string name=\"suggested\">建議</string>\n    <string name=\"usage_count\">使用次數</string>\n    <string name=\"warning\">警告</string>\n    <string name=\"pref_cat_appearance_app\">應用程式</string>\n    <string name=\"pref_cat_appearance_entries\">條目</string>\n    <string name=\"pref_cat_backups_android\">Android</string>\n    <string name=\"pref_cat_backups_auto\">自動備份</string>\n    <string name=\"pref_section_behavior_title\">行為</string>\n    <string name=\"pref_section_behavior_summary\">自訂使用者與條目互動時程式的行為。</string>\n    <string name=\"pref_section_appearance_title\">外觀</string>\n    <string name=\"pref_section_appearance_summary\">調整主題、語言或其他改變程式外觀的設定。</string>\n    <string name=\"pref_section_security_title\">安全性</string>\n    <string name=\"pref_section_security_summary\">設定加密、生物特徵辨識解鎖、自動鎖定以及其他安全性選項。</string>\n    <string name=\"pref_section_import_export_title\">匯入 &amp; 匯出</string>\n    <string name=\"pref_section_import_export_summary\">匯入 Aegis 或其他驗證程式的備份檔，或手動匯出 Aegis 保險箱。</string>\n    <string name=\"pref_section_audit_log_title\">稽核記錄</string>\n    <string name=\"pref_section_backups_title\">備份</string>\n    <string name=\"pref_section_backups_summary\">設定自動備份至指定位置或啟用 Android 內建的雲端備份系統。</string>\n    <string name=\"pref_section_icon_packs\">圖示合輯</string>\n    <string name=\"pref_section_icon_packs_summary\">管理與匯入圖示合輯</string>\n    <string name=\"pref_select_theme_title\">主題</string>\n    <string name=\"pref_dynamic_colors_title\">動態色彩</string>\n    <string name=\"pref_dynamic_colors_summary\">基於您的 Android 主題配色設定程式配色</string>\n    <string name=\"pref_view_mode_title\">檢視模式</string>\n    <string name=\"pref_lang_title\">語言</string>\n    <string name=\"pref_show_icons_title\">顯示圖示</string>\n    <string name=\"pref_show_icons_summary\">在每個條目旁顯示圖示</string>\n    <string name=\"pref_code_group_size_title\">分組顯示驗證碼</string>\n    <string name=\"pref_code_group_size_summary\">選擇群組編號</string>\n    <string name=\"pref_account_name_position_title\">顯示帳戶名稱</string>\n    <string name=\"pref_show_next_code_title\">顯示下一組驗證碼</string>\n    <string name=\"pref_show_next_code_summary\">預先產生並顯示下一組驗證碼</string>\n    <string name=\"pref_expiration_state_title\">驗證碼將過期時顯示</string>\n    <string name=\"pref_expiration_state_summary\">驗證碼將過期時，更改顯示色彩並閃爍</string>\n    <string name=\"pref_expiration_state_fallback\">驗證碼將過期時，更改顯示色彩</string>\n    <string name=\"pref_shared_issuer_account_name_title\">只在必要時顯示帳戶名稱</string>\n    <string name=\"pref_shared_issuer_account_name_summary\">只顯示擁有共同發行者的帳戶名稱（並隱藏其他帳戶名稱）</string>\n    <string name=\"pref_account_name_position_summary_override\">此選項將被「條列式顯示模式」覆蓋，帳號名稱將顯示在發行者下方。</string>\n    <string name=\"pref_import_file_title\">從檔案匯入</string>\n    <string name=\"pref_import_file_summary\">從檔案匯入憑證</string>\n    <string name=\"pref_android_backups_title\">Android 雲端備份</string>\n    <string name=\"pref_android_backups_summary\">允許 Android 的雲端備份系統主動納入 Aegis 的保險箱。僅適用於已加密的保險箱。</string>\n    <string name=\"pref_android_backups_hint\"><i>與上述設定無關的是：裝置對裝置 (D2D) 備份傳輸是常時允許的。</i></string>\n    <string name=\"pref_backups_title\">自動備份保險箱</string>\n    <string name=\"pref_backups_summary\">自動於外部儲存裝置上建立保險箱的備份。僅支援已加密的保險箱。</string>\n    <string name=\"pref_backups_reminder_title\">備份提醒</string>\n    <string name=\"pref_backups_reminder_summary\">提示您備份保險箱以避免最後的變更狀態未被加入備份。</string>\n    <string name=\"pref_backups_reminder_dialog_title\">關閉備份提醒</string>\n    <string name=\"pref_backups_versioning_strategy_title\">備份策略</string>\n    <string name=\"pref_backups_versioning_strategy_keep_x_versions\">保留多份備份檔</string>\n    <string name=\"pref_backups_versioning_strategy_single_backup\">單一備份</string>\n    <string name=\"pref_backups_versioning_strategy_single_backup_warning\">您選擇的備份方案並不可靠，我們也強烈反對。要是此單一備份有任何錯誤，將導致您失去唯一的備份。</string>\n    <string name=\"pref_backups_versioning_strategy_dialog_title\">選擇備份策略</string>\n    <string name=\"pref_backups_location_title\">備份位置</string>\n    <string name=\"pref_backups_location_summary\">備份將儲存在</string>\n    <string name=\"pref_backup_location_summary\">備份將儲存於</string>\n    <string name=\"pref_backups_trigger_title\">觸發備份</string>\n    <string name=\"pref_backups_trigger_summary\">手動觸發備份</string>\n    <string name=\"pref_backups_versions_title\">保留的版本數</string>\n    <string name=\"pref_backups_versions_infinite\">\\u221E</string>\n    <plurals name=\"pref_backups_versions_summary\">\n        <item quantity=\"other\">保留 %1$d 個備份</item>\n    </plurals>\n    <string name=\"pref_backups_versions_infinite_summary\">保留不限版本數的備份</string>\n    <string name=\"pref_import_app_title\">從其他應用程式匯入</string>\n    <string name=\"pref_import_app_summary\">從其他應用程式匯入驗證碼（需要系統管理員 root 權限）</string>\n    <string name=\"pref_export_title\">匯出</string>\n    <string name=\"pref_export_summary\">匯出保險箱</string>\n    <string name=\"pref_password_reminder_title\">密碼提醒</string>\n    <string name=\"pref_google_auth_export_title\">匯出到 Google Authenticator</string>\n    <string name=\"pref_google_auth_export_descriptor\">產生並匯出多個與 Google Authenticator 相容的 QR Code</string>\n    <string name=\"pref_google_auth_export_no_data\">沒有可以匯出的資料</string>\n    <plurals name=\"pref_google_auth_export_incompatible_entries\">\n        <item quantity=\"other\">略過 %d 個不相容的條目</item>\n    </plurals>\n    <string name=\"pref_password_reminder_summary\">%s 提醒您輸入密碼，避免您忘記密碼。</string>\n    <string name=\"pref_password_reminder_summary_disabled\">已停用</string>\n    <string name=\"pref_secure_screen_title\">螢幕安全性</string>\n    <string name=\"pref_secure_screen_summary\">禁止螢幕截圖，以及阻止其他擷取程式畫面的嘗試。</string>\n    <string name=\"pref_tap_to_reveal_title\">輕觸以顯示</string>\n    <string name=\"pref_tap_to_reveal_summary\">預設隱藏，輕觸憑證名稱後顯示驗證碼</string>\n    <string name=\"pref_tap_to_reveal_time_title\">輕觸後顯示的秒數</string>\n    <string name=\"pref_auto_lock_title\">自動鎖定</string>\n    <string name=\"pref_auto_lock_summary\">當 %s</string>\n    <string name=\"pref_auto_lock_summary_disabled\">已停用</string>\n    <string name=\"pref_auto_lock_prompt\">自動鎖定 Aegis 的時機是</string>\n    <string name=\"pref_auto_lock_type_back_button\">返回按鈕已按下</string>\n    <string name=\"pref_auto_lock_type_minimize\">最小化應用程式</string>\n    <string name=\"pref_auto_lock_type_device_lock\">裝置已鎖定</string>\n    <string name=\"pref_backup_password_category\">備份與匯出</string>\n    <string name=\"pref_backup_password_title\">為備份與匯出使用不同的密碼</string>\n    <string name=\"pref_backup_password_summary\">如果啟用，解鎖應用程式的密碼將會不能用於解密備份與匯出的資料</string>\n    <string name=\"pref_backup_password_change_title\">更改備份與匯出用的密碼</string>\n    <string name=\"pref_backup_password_change_summary\">新增一組用於加密備份與匯出資料的密碼</string>\n    <string name=\"pref_encryption_title\">加密</string>\n    <string name=\"pref_encryption_summary\">加密保險箱，並以密碼或生物特徵辨識解鎖。</string>\n    <string name=\"pref_biometrics_title\">生物特徵辨識解鎖</string>\n    <string name=\"pref_biometrics_summary\">允許使用生物特徵辨識驗證來解鎖保險箱</string>\n    <string name=\"pref_search_behavior_summary\">在 %s 中搜尋</string>\n    <string name=\"pref_search_behavior_prompt\">在以下項目中搜尋</string>\n    <string name=\"pref_search_behavior_type_name\">名稱</string>\n    <string name=\"pref_search_behavior_type_issuer\">簽發者</string>\n    <string name=\"pref_search_behavior_type_note\">備註</string>\n    <string name=\"pref_search_behavior_type_groups\">群組</string>\n    <string name=\"pref_set_password_title\">變更密碼</string>\n    <string name=\"pref_set_password_summary\">為保險箱設定新解鎖密碼</string>\n    <string name=\"event_title_vault_unlocked\">保險箱已解鎖</string>\n    <string name=\"event_description_vault_unlocked\">保險箱已成功解鎖</string>\n    <string name=\"event_title_backup_created\">備份已建立</string>\n    <string name=\"event_description_backup_created\">保險箱備份已成功建立</string>\n    <string name=\"event_title_android_backup_created\">備份已由 Android 建立</string>\n    <string name=\"event_description_android_backup_created\">保險箱備份已由 Android 成功建立</string>\n    <string name=\"event_title_vault_exported\">已匯出保險箱</string>\n    <string name=\"event_description_vault_exported\">已匯出一份保險箱的複本</string>\n    <string name=\"event_title_entry_shared\">已分享項目</string>\n    <string name=\"event_description_entry_shared\">已分享一筆資料</string>\n    <string name=\"event_title_vault_unlock_failed_password\">密碼庫解鎖失敗（密碼）</string>\n    <string name=\"event_description_vault_unlock_failed_password\">以密碼解鎖保險箱的失敗乙次</string>\n    <string name=\"event_title_vault_unlock_failed_biometrics\">密碼庫解鎖失敗（生物特徵辨識）</string>\n    <string name=\"event_description_vault_unlock_failed_biometrics\">以生物特徵解鎖保險箱的失敗乙次</string>\n    <string name=\"event_unknown\">未知的事件類型</string>\n    <string name=\"audit_log_entry_deleted\">（已刪除）</string>\n    <string name=\"today_at_time\">今天 %1$s</string>\n    <string name=\"day_of_week_at_time\">%1$s 的 %2$s</string>\n    <string name=\"export_encrypted\">加密保險箱</string>\n    <string name=\"export_help\">此動作將保險箱從 Aegis 的內部儲存空間裡匯出，請選擇欲匯出的格式：</string>\n    <string name=\"export_warning_unencrypted\">即將匯出未加密的 Aegis 保險箱。<b>不建議</b>。</string>\n    <string name=\"export_warning_password\">匯出的壓縮檔將使用安全設定中設定的獨立密碼。</string>\n    <string name=\"understand_risk_accept\">我瞭解相關風險</string>\n    <string name=\"export_format_aegis\">Aegis (.JSON)</string>\n    <string name=\"export_format_google_auth_uri\">純文字檔案 (.TXT)</string>\n    <string name=\"export_format_html\">網頁 (.html)</string>\n    <string name=\"export_format_hint\">匯出格式</string>\n    <string name=\"export_all_groups\">匯出所有群組</string>\n    <string name=\"export_choose_groups\">匯出選定的群組（們）</string>\n    <plurals name=\"export_groups_selected_count\">\n        <item quantity=\"other\">選取了 %d 個群組</item>\n    </plurals>\n    <string name=\"export_no_groups_selected\">尚未選擇要匯出的群組</string>\n    <string name=\"export_html_title\" comment=\"The title of an HTML export document\">Aegis 驗證器匯出</string>\n    <string name=\"choose_authentication_method\">安全性</string>\n    <string name=\"authentication_method_explanation\">Aegis 是一款安全第一的雙因素驗證（2FA）應用程式。憑證儲存於特殊的保險箱檔案中，此保險箱可依照使用者的設定以密碼金鑰加密。就算駭客取得了被加密的保險箱檔案，他們也無法在不知道密碼的情況下取得內含的憑證。 \\n\\n我們已預先為您的裝置選擇了我們認為最適合的選項。</string>\n    <string name=\"authentication_method_none\">沒有</string>\n    <string name=\"authentication_method_none_description\">保險箱並未上鎖也未加密。<b>不建議使用此選項</b>。</string>\n    <string name=\"authentication_method_password\">密碼</string>\n    <string name=\"authentication_method_password_description\">需要密碼來解鎖保險箱。</string>\n    <string name=\"authentication_method_password_explanation\">警告：如果您忘記密碼，您將會無法還原憑證而不可逆的失去它們。</string>\n    <string name=\"authentication_method_biometrics\">生物特徵辨識</string>\n    <string name=\"authentication_method_biometrics_description\">除密碼外，在此裝置上註冊的生物特徵辨識（例如指紋或臉部），也可用於解鎖保險箱。</string>\n    <string name=\"authentication\">解鎖保險箱</string>\n    <string name=\"authentication_multiline\" comment=\"The newline in the middle is used for aesthetic purposes\">解鎖\\n保險箱</string>\n    <string name=\"auth_use_biometrics\">或者輕觸此處以使用 <font fgcolor=\"#FF0D86C1\">生物特徵辨識</font></string>\n    <string name=\"set_password\">請輸入密碼</string>\n    <string name=\"set_group\">請輸入群組名稱</string>\n    <string name=\"set_number\">請選擇時長</string>\n    <string name=\"set_password_confirm\">請確認密碼</string>\n    <string name=\"invalid_password\">密碼錯誤</string>\n    <string name=\"invalidated_biometrics\">偵測到您的裝置更新了安全性設定。請前往「Aegis -&gt; 設定 -&gt; 安全性 -&gt; 生物特徵辨識解鎖」停用並重新啟用生物特徵辨識解鎖。</string>\n    <string name=\"password_reminder_dialog_title\">預設使用生物特徵辨識解鎖</string>\n    <string name=\"password_reminder_dialog_message\">我們會不定期的要求您使用密碼解鎖，以確保您尚未忘記設定的密碼而被拒於門外。當你成功使用密碼解鎖後，Aegis 將會回到原本的生物特徵解鎖模式，直到下一次的密碼提醒。</string>\n    <string name=\"password_reminder_freq_never\">從不</string>\n    <string name=\"password_reminder_freq_weekly\">每週一次</string>\n    <string name=\"password_reminder_freq_biweekly\">隔週一次</string>\n    <string name=\"password_reminder_freq_monthly\">每月一次</string>\n    <string name=\"password_reminder_freq_quarterly\">每季（三個月）一次</string>\n    <string name=\"enter_password_2fas_message\">看來此 2FAS 備份已被加密，請在此輸入密碼。</string>\n    <string name=\"enter_password_authy_message\">您的似乎已加密 Authy 驗證碼。請關閉 Aegis，開啟 Authy，然後使用您的密碼解鎖憑證。另外，如果您在下方輸入 Authy 的解密密碼，Aegis 也可以嘗試為您解密 Authy 憑證。</string>\n    <string name=\"enter_password_aegis_title\">請輸入匯入密碼</string>\n    <string name=\"period_hint\">長度（秒）</string>\n    <string name=\"algorithm_hint\">雜湊函數</string>\n    <string name=\"type\">類型</string>\n    <string name=\"share\">分享</string>\n    <string name=\"yes\">確定</string>\n    <string name=\"no\">取消</string>\n    <string name=\"undo\">復原</string>\n    <string name=\"unlock\">解鎖</string>\n    <string name=\"advanced\">進階設定</string>\n    <string name=\"counter\">計數器</string>\n    <string name=\"digits\">位數</string>\n    <string name=\"secret\">密鑰</string>\n    <string name=\"scan\">掃描 QR Code</string>\n    <string name=\"scan_image\">掃描圖片</string>\n    <string name=\"enter_manually\">手動輸入</string>\n    <string name=\"set_up_biometric\">設定生物特徵辨識解鎖</string>\n    <string name=\"copy\">複製</string>\n    <string name=\"edit\">編輯</string>\n    <string name=\"select_all\">選擇全部</string>\n    <string name=\"assign_icons\">分配圖示</string>\n    <string name=\"assign_groups\">指派給群組</string>\n    <string name=\"assign_groups_dialog_dropdown\">選擇群組</string>\n    <string name=\"favorite\" comment=\"Verb\">加入最愛</string>\n    <string name=\"unfavorite\" comment=\"Verb\">移出最愛</string>\n    <string name=\"error_all_caps\">錯誤</string>\n    <string name=\"password\">密碼</string>\n    <string name=\"confirm_password\">確認密碼</string>\n    <string name=\"show_password\">顯示密碼</string>\n    <string name=\"new_entry\">新條目</string>\n    <string name=\"add_new_entry\">新增條目</string>\n    <string name=\"unlock_vault_error\">無法解鎖保險箱</string>\n    <string name=\"unlock_vault_error_description\">密碼錯誤，請確保您沒有輸入錯誤。</string>\n    <string name=\"password_equality_error\">密碼應相同而非空</string>\n    <string name=\"snackbar_authentication_method\">請選擇驗證方式</string>\n    <string name=\"encrypting_vault\">正在加密保險箱</string>\n    <string name=\"exporting_vault\">正在匯出保險箱</string>\n    <string name=\"optimizing_icon\">正在最佳化圖示</string>\n    <string name=\"optimizing_icon_multiple\">正在最佳化圖示 %1$d/%2$d</string>\n    <string name=\"reading_file\">讀取檔案中</string>\n    <string name=\"requesting_root_access\">需要使用 root</string>\n    <string name=\"analyzing_qr\">分析 QR Code 中</string>\n    <string name=\"analyzing_qr_multiple\">正在分析 QR Code %1$d/%2$d (%3$s)</string>\n    <plurals name=\"added_new_entries\">\n        <item quantity=\"other\">增加 %d 個條目進保險箱</item>\n    </plurals>\n    <string name=\"importing_icon_pack\">正在匯入圖示合輯</string>\n    <string name=\"delete_entry\">刪除條目</string>\n    <string name=\"delete_entry_description\">您確定要刪除此條目嗎？</string>\n    <string name=\"delete_entries\">刪除條目</string>\n    <plurals name=\"delete_entries_description\">\n        <item quantity=\"other\">您確定要刪除 %d 個條目嗎？</item>\n    </plurals>\n    <string name=\"discard_changes\">要捨棄變更嗎？</string>\n    <string name=\"discard_changes_description\">您的變更尚未儲存</string>\n    <string name=\"saving_profile_error\">儲存設定檔時發生錯誤</string>\n    <string name=\"saving_assign_icons_error\">指派圖示時發生錯誤</string>\n    <string name=\"welcome\">歡迎使用</string>\n    <string name=\"app_description\">Aegis 是一款免費、安全與開放原始碼的雙因素驗證（2FA）應用程式</string>\n    <string name=\"setup_completed\">設定完成</string>\n    <string name=\"setup_completed_description\">Aegis設定完成，可以開始使用了。</string>\n    <string name=\"vault_not_found\">保險箱不存在，開始設定…</string>\n    <string name=\"copied\">已複製</string>\n    <string name=\"errors_copied\">錯誤已複製至剪貼簿</string>\n    <string name=\"version_copied\">版本號已複製至剪貼簿</string>\n    <string name=\"error_required_field\">此欄位必填</string>\n    <string name=\"error_occurred\">發生了一個錯誤</string>\n    <string name=\"decryption_error\">解鎖保險箱時發生錯誤</string>\n    <string name=\"decryption_corrupt_error\">解鎖保險箱時發生錯誤，您的保險箱檔案可能已損壞。</string>\n    <string name=\"saving_error\">儲存保險箱時發生錯誤</string>\n    <string name=\"vault_init_error\">初始化保險箱時發生錯誤</string>\n    <string name=\"vault_load_error\">從儲存空間讀取保險箱時發生錯誤</string>\n    <string name=\"biometric_decrypt_error\">使用生物特徵驗證對保險箱進行解密時發生錯誤。通常發生在您變更裝置的安全設定後。請使用您的密碼解鎖保險箱，然後在 Aegis 的設定中重新設定生物驗證選項。</string>\n    <string name=\"biometric_init_error\">準備使用生物特徵驗證時發生錯誤。通常發生在您更改設備的安全設定後。請使用您的密碼解鎖保險箱，然後在 Aegis 的設定中重新設定生物驗證選項。</string>\n    <string name=\"disable_encryption\">停用加密</string>\n    <string name=\"disable_encryption_description\">確定要停用加密嗎？此舉將使保險箱以明文儲存。<b>同時將停用自動備份</b>。</string>\n    <string name=\"enable_encryption_error\">啟用加密時出錯</string>\n    <string name=\"disable_encryption_error\">停用加密時出錯</string>\n    <string name=\"backup_successful\">已成功排程備份</string>\n    <string name=\"backup_error\">嘗試建立備份時發生錯誤</string>\n    <string name=\"backup_status_success\">最近備份成功: %s</string>\n    <string name=\"backup_status_failed\">最近備份失敗: %s</string>\n    <string name=\"backup_status_none\">尚未建立任何備份</string>\n    <string name=\"backup_warning_password\">備份檔將使用安全性選項中設定的獨立密碼加密</string>\n    <string name=\"documentsui_error\">似乎無法在您的裝置上找到 DocumentsUI。此為新增與建立文件的重要系統元件。若您曾使用&quot;debloat&quot; 軟體替您的裝置「瘦身」，極有可能您誤刪此程式，請將其重新安裝。</string>\n    <string name=\"icon_pack_import_error\">嘗試匯入圖示包時發生錯誤</string>\n    <string name=\"icon_pack_delete_error\">試圖刪除圖示合輯時出錯</string>\n    <plurals name=\"icon_pack_info\">\n        <item quantity=\"other\">%d 個圖示</item>\n    </plurals>\n    <string name=\"icon_custom\">自訂</string>\n    <string name=\"permission_denied\">權限被拒絕</string>\n    <string name=\"andotp_new_format\">新格式（v0.6.3 及以上版本）</string>\n    <string name=\"andotp_old_format\">舊格式（v0.6.2 以下版本）</string>\n    <string name=\"choose_andotp_importer\">是哪種格式的 andOTP 備份檔？</string>\n    <string name=\"choose_totpauth_importer\">此 TOTP 驗證器備份是否已使用密碼加密？</string>\n    <string name=\"choose_application\">選擇欲匯入的來源應用程式</string>\n    <string name=\"choose_theme\">選擇您想要的主題</string>\n    <string name=\"choose_view_mode\">選擇您想要的檢視模式</string>\n    <string name=\"choose_copy_behavior\">請選擇您想要的複製行為</string>\n    <string name=\"parsing_file_error\">試圖解構檔案時發生錯誤</string>\n    <string name=\"file_not_found\">錯誤：找不到檔案</string>\n    <string name=\"reading_file_error\">試圖開啟檔案時發生錯誤</string>\n    <string name=\"app_lookup_error\">錯誤：應用程式未安裝</string>\n    <string name=\"root_error\">錯誤：無法取得 root 權限</string>\n    <plurals name=\"imported_entries_count\">\n        <item quantity=\"other\">已匯入 %d 個條目</item>\n    </plurals>\n    <plurals name=\"entries_shown\">\n        <item quantity=\"other\">正在顯示 %d 條條目</item>\n    </plurals>\n    <string name=\"intro_import_error_title\">匯入至保險箱時發生錯誤</string>\n    <string name=\"import_error_title\">匯入時發生了一些錯誤。</string>\n    <string name=\"exporting_vault_error\">匯出保險箱時發生錯誤</string>\n    <string name=\"exported_vault\">保險箱已匯出</string>\n    <string name=\"encryption_set_password_error\">試圖設定密碼時發生錯誤。</string>\n    <string name=\"encryption_enable_biometrics_error\">嘗試啟用生物特徵辨識解鎖時發生錯誤。某些裝置的生物特徵辨識認證實作欠佳，您手中的裝置或許就是其中之一。考慮改用僅密碼設定。</string>\n    <string name=\"no_cameras_available\">鏡頭不可用</string>\n    <string name=\"read_qr_error\">試圖讀取 QR Code 時出錯</string>\n    <string name=\"read_qr_error_phonefactor\">Aegis 不相容於微軟私有的雙因素驗證演算法。請確保在 Microsoft 365 設定雙因素驗證時選擇「設定無通知的應用程式」。</string>\n    <string name=\"partial_google_auth_import\">偵測到不完整的 Google Authenticator 匯出</string>\n    <string name=\"partial_google_auth_import_warning\">您的匯入中缺少部分 QR Code。詳情如下：\\n\\n<b>%s</b>\\n\\n您可以繼續匯入這份闕漏的匯出檔，但我們建議您在補齊 QR Code 後再嘗試匯入，以免無法存取憑證。</string>\n    <string name=\"missing_qr_code_descriptor\">• QR Code %d</string>\n    <plurals name=\"import_partial_export_anyway\">\n        <item quantity=\"other\">還是匯入 %d 組 token</item>\n    </plurals>\n    <string name=\"import_google_auth_failure\">匯入 Google Authenticator 失敗</string>\n    <string name=\"unlocking_vault\">解鎖保險箱</string>\n    <string name=\"rename_group\">重新命名群組</string>\n    <string name=\"no_group_selection\">倘若一個條目並不歸類在任何群組內，它會被歸類進「無群組」。</string>\n    <string name=\"remove_group\">移除群組</string>\n    <string name=\"remove_group_description\">您確定要刪除這個群組嗎？此群組內的條目將自動移動到「無群組」。</string>\n    <string name=\"remove_unused_groups\">刪除未使用的群組</string>\n    <string name=\"remove_unused_groups_description\">您確定要刪除所有沒有歸類任何條目的群組嗎？</string>\n    <string name=\"remove_icon_pack\">移除圖示合輯</string>\n    <string name=\"details\">詳細資訊</string>\n    <string name=\"show_error_details\">顯示錯誤詳細內容</string>\n    <string name=\"lock\">鎖定</string>\n    <string name=\"name\">名稱</string>\n    <string name=\"no_group\">無群組</string>\n    <string name=\"sort\" comment=\"Title of the Sort button in the top action bar of the main view\">排序</string>\n    <string name=\"sort_alphabetically\">服務商（A 到 Z）</string>\n    <string name=\"sort_alphabetically_reverse\">服務商（Z 到 A）</string>\n    <string name=\"sort_alphabetically_name\">帳戶（A 到 Z）</string>\n    <string name=\"sort_alphabetically_name_reverse\">帳戶（Z 到 A）</string>\n    <string name=\"sort_usage_count\">使用次數</string>\n    <string name=\"sort_last_used\">最近已使用</string>\n    <string name=\"sort_custom\">自訂</string>\n    <string name=\"last_used\">最近已使用</string>\n    <string name=\"last_used_never\">從不</string>\n    <string name=\"new_group\">新增群組…</string>\n    <string name=\"group\">群組</string>\n    <string name=\"group_name_hint\">群組名稱</string>\n    <string name=\"preference_manage_groups\">編輯群組</string>\n    <string name=\"preference_manage_groups_summary\">管理和刪除您的群組</string>\n    <string name=\"preference_reset_usage_count\">重設使用次數</string>\n    <string name=\"preference_reset_usage_count_summary\">重設保險箱內所有條目的使用次數</string>\n    <string name=\"preference_reset_usage_count_dialog\">確定要將保險箱內所有條目的使用次數重設為零嗎？</string>\n    <string name=\"note\" comment=\"Users can add a note to an entry\">備註</string>\n    <string name=\"clear\">清除</string>\n    <string name=\"dialog_duplicate_entry_title\" comment=\"'Duplicate' is a noun here\">複製條目</string>\n    <string name=\"dialog_duplicate_entry_message\">本條目與其他既存條目具有相同的名稱或發行者。您想要怎麼做？</string>\n    <string name=\"dialog_duplicate_entry_overwrite_title\">覆蓋既存條目（們）</string>\n    <string name=\"dialog_duplicate_entry_overwrite_subtitle\">使用新的設定置換既存的條目（們），本更動無法復原</string>\n    <string name=\"dialog_duplicate_entry_suffix_title\">增加尾註</string>\n    <string name=\"dialog_duplicate_entry_suffix_subtitle\">為新的條目增加一個後綴詞，新的名稱如下：%s</string>\n    <string name=\"dialog_duplicate_entry_cancel_title\">取消儲存</string>\n    <string name=\"dialog_duplicate_entry_overwrite_dialog_title\">確認刪除</string>\n    <string name=\"pref_haptic_feedback_summary\">重新整理時震動您的裝置</string>\n    <string name=\"pref_haptic_feedback_title\">觸覺回饋</string>\n    <string name=\"pref_highlight_entry_title\">強調選取的憑證</string>\n    <string name=\"pref_highlight_entry_summary\">輕觸後暫時凸顯該驗證碼以與它者區分</string>\n    <string name=\"pref_groups_multiselect_title\">多選群組</string>\n    <string name=\"pref_groups_multiselect_summary\">允許同時選擇多個群組</string>\n    <string name=\"pref_minimize_on_copy_title\">複製後最小化</string>\n    <string name=\"pref_minimize_on_copy_summary\">複製代碼之後將應用程式最小化</string>\n    <string name=\"pref_copy_behavior_title\">複製令牌至剪貼簿</string>\n    <string name=\"pref_search_behavior_title\">搜尋行為</string>\n    <string name=\"pref_pause_entry_title\">被觸碰時凍結驗證碼</string>\n    <string name=\"pref_pause_entry_summary\">輕觸以暫停驗證碼的自動更新機制：只要驗證碼還在焦點上，它們就不會被自動更新。需要啟用「輕觸以顯示」或「強調選取的憑證」功能。</string>\n    <string name=\"pin_keyboard_description\">請輸入您的密碼以啟用 PIN 鍵盤。請注意，只有當您的密碼僅由數字構成時才能使用</string>\n    <string name=\"pin_keyboard_error\">啟用 PIN 鍵盤時出錯</string>\n    <string name=\"pin_keyboard_error_description\">無法設定 PIN 鍵盤，您的密碼只能包含數字。</string>\n    <string name=\"pin_keyboard_disabled\">密碼已變更，不會再顯示 PIN 鍵盤。</string>\n    <string name=\"selected\">選擇</string>\n    <string name=\"dark_theme_title\">暗黑主題</string>\n    <string name=\"light_theme_title\">明亮主題</string>\n    <string name=\"amoled_theme_title\">AMOLED 主題</string>\n    <string name=\"system_theme_title\">由省電模式設定</string>\n    <string name=\"system_amoled_theme_title\">由省電模式設定 (AMOLED)</string>\n    <string name=\"normal_viewmode_title\">標準</string>\n    <string name=\"compact_mode_title\">緊湊</string>\n    <string name=\"small_mode_title\">小巧</string>\n    <string name=\"tiles_mode_title\">平鋪</string>\n    <string name=\"unknown_issuer\">未知的服務商</string>\n    <string name=\"unknown_account_name\">未知帳戶</string>\n    <plurals name=\"import_error_dialog\">\n        <item quantity=\"other\">Aegis 無法匯入 %d 組 token，已經忽略。若欲了解更詳細錯誤資訊，請按「詳細內容」。</item>\n    </plurals>\n    <string name=\"unable_to_process_deeplink\">無法處理 deep link</string>\n    <string name=\"unable_to_read_qrcode_file\">無法從 %s 檔案讀取和處理 QR Code</string>\n    <string name=\"unable_to_process_shared_text\">無法將共用文本作為 OTP 進行處理</string>\n    <string name=\"unable_to_generate_qrcode\">無法產生 QR Code</string>\n    <string name=\"select_picture\">選擇圖片</string>\n    <string name=\"select_icon\">選擇圖示</string>\n    <string name=\"tile_open_vault\" comment=\"label for a quick settings tile that opens the app when tapped\">打開保險箱</string>\n    <string name=\"tile_open_scanner\" comment=\"label for a quick settings tile that opens the QR code scanner when tapped\">開啟掃描器</string>\n    <string name=\"toggle_checkboxes\">切換核取方塊</string>\n    <string name=\"search\">搜尋</string>\n    <string name=\"channel_name_lock_status\">鎖定狀態</string>\n    <string name=\"channel_description_lock_status\">Aegis 可以常駐通知顯示保險箱鎖定中</string>\n    <string name=\"vault_unlocked_state\">保險箱已解鎖，輕觸此處再次鎖定。</string>\n    <string name=\"version\">版本</string>\n    <string name=\"changelog\">變更記錄</string>\n    <string name=\"whats_new\">有什麼新鮮事</string>\n    <string name=\"github_description\">原始碼、問題與資訊</string>\n    <string name=\"license\">授權條款</string>\n    <string name=\"license_description\">Aegis 驗證器以 GPLv3 授權條款釋出。</string>\n    <string name=\"third_party_licenses\">第三方授權條款</string>\n    <string name=\"third_party_licenses_description\">Aegis 所使用的第三方函式庫及其授權條款</string>\n    <string name=\"country_netherlands\">荷蘭</string>\n    <string name=\"email_us\">撰寫郵件</string>\n    <string name=\"visit_website\">瀏覽我們的網站</string>\n    <string name=\"about_support\">支持</string>\n    <string name=\"support_rate\">評分</string>\n    <string name=\"support_rate_description\">透過在Google Play商店留下評論來支持我們</string>\n    <string name=\"webview_error\">此裝置不支援瀏覽變更記錄與授權條款所需要的 WebView。缺少重要的系統元件。</string>\n    <string name=\"email\">電子郵件</string>\n    <string name=\"time_sync_warning_title\">自動同步時間</string>\n    <string name=\"time_sync_warning_message\">僅幾秒鐘的偏差可能會導致驗證碼錯誤。您的裝置似乎未設定為自動同步時間。您現在要設定自動同步時間嗎？</string>\n    <string name=\"time_sync_warning_disable\">不要再次提醒。我知道我在做什麼。</string>\n    <string name=\"google_qr_export_unrelated\">發現無關的 QR Code。請重新開啟掃描器。</string>\n    <plurals name=\"google_qr_export_scanned\">\n        <item quantity=\"other\">已掃描 %1$d/%2$d 個 QR Code</item>\n    </plurals>\n    <string name=\"google_qr_export_unexpected\">預期 QR Code 個數 %1$d，然而已掃描個數 %2$d</string>\n    <string name=\"backup_error_bar_message\"><b>近期的保險箱備份失敗</b></string>\n    <string name=\"backup_error_dialog_details\" comment=\"The first parameter is the type of backup (e.g. built-in or Android backup). The second parameter is an elapsed time in the style of 'x seconds/minutes/days ago'.\">        最近一次嘗試使用 %1$s 的備份行為失敗。本次備份發生於 %2$s。請檢查您的備份設定以確保備份能順利完成。\n    </string>\n    <string name=\"backup_system_builtin\">Aegis 內建的自動備份</string>\n    <string name=\"backup_system_android\">Android 雲端備份</string>\n    <string name=\"backup_reminder_bar_message_with_latest\" comment=\"The parameter is an elapsed time in the style of 'x seconds/minutes/days ago'\">        最新的備份已過時 (%s)    \n    </string>\n    <string name=\"backup_reminder_bar_message\">        變更尚未備份。\n    </string>\n    <string name=\"backup_reminder_bar_dialog_title\">變更尚未備份</string>\n    <string name=\"backup_reminder_bar_dialog_summary\">        尚未備份最近針對保險箱的操作。週期性的備份是避免遺失登入方法的最佳良方。請考慮在設定選單內啟用自動備份。\n    </string>\n    <string name=\"backup_reminder_bar_dialog_accept\">設置備份</string>\n    <string name=\"backup_plaintext_export_warning\"><b>最近保險箱曾匯出為純文字</b></string>\n    <string name=\"pref_show_plaintext_warning_hint\">不再顯示這則警告</string>\n    <string name=\"backup_plaintext_warning_explanation\">本警示會跳出來因為您最近匯出了未加密的保險箱複本。為保護憑證的安全性，我們建議您在不需要使用後刪除此檔案。</string>\n    <string name=\"switch_camera\">切換鏡頭</string>\n    <string name=\"empty_list\">尚無驗證碼。輕觸右下角的加號開始新增條目</string>\n    <string name=\"empty_list_title\">找不到條目</string>\n    <string name=\"empty_group_list\">沒有可以顯示的群組，請先在條目編輯頁面增加一個群組</string>\n    <string name=\"empty_group_list_title\">找不到任何群組</string>\n    <string name=\"no_icon_packs\">尚未匯入任何圖示主題集。點選「+」號以匯入。提示：試試看<a href=\"https://aegis-icons.github.io\">aegis-icons</a>。</string>\n    <string name=\"no_icon_packs_title\">沒有圖示合輯</string>\n    <string name=\"pick_icon\">選取圖示</string>\n    <string name=\"uncategorized\">未分類</string>\n    <string name=\"done\">完成</string>\n    <plurals name=\"qr_count\">\n        <item quantity=\"other\">%d / %d QR Code</item>\n    </plurals>\n    <string name=\"next\">下一個</string>\n    <string name=\"previous\">上一個</string>\n    <string name=\"copy_uri\">複製 URI</string>\n    <string name=\"unable_to_copy_uri_to_clipboard\">無法複製 URI 到剪貼簿</string>\n    <string name=\"uri_copied_to_clipboard\">URI 已複製到剪貼簿</string>\n    <string name=\"transfer_entry_description\">請使用您欲轉移至的驗證器應用程式掃描此 QR Code</string>\n    <string name=\"transfer_entry_brightness\">觸碰 QR code 使螢幕達到最大亮度</string>\n    <string name=\"google_auth_compatible_transfer_description\">請使用 Aegis 或 Google Authenticator 掃描以下 QR Code。\\n\\n由於 Google Authenticator 程式的限制，將僅包含使用 SHA1 並產生六位數密碼的 TOTP &amp; HOTP 憑證</string>\n    <string name=\"password_strength_very_weak\">很弱</string>\n    <string name=\"password_strength_weak\">弱</string>\n    <string name=\"password_strength_fair\">中等</string>\n    <string name=\"password_strength_good\">好</string>\n    <string name=\"password_strength_strong\">强</string>\n    <string name=\"password_strength_unknown\">密碼太長，無法進行強度分析</string>\n    <string name=\"pref_pin_keyboard_title\">在螢幕鎖定畫面上使用 PIN 鍵盤</string>\n    <string name=\"pref_pin_keyboard_summary\">啟用此選項以螢幕鎖定畫面上使用 PIN 鍵盤，密碼僅支援純數字</string>\n    <string name=\"title_activity_preferences\">設定</string>\n    <string name=\"title_activity_manage_groups\">管理群組</string>\n    <string name=\"title_activity_transfer\">轉移條目</string>\n    <string name=\"title_activity_about\">關於</string>\n    <string name=\"title_activity_edit_entry\">編輯條目</string>\n    <string name=\"title_activity_scan_qr\">掃描 QR Code</string>\n    <string name=\"title_activity_import_entries\">匯入條目</string>\n    <string name=\"title_activity_assign_icons\">分配圖示</string>\n    <string name=\"title_activity_licenses\">第三方許可證</string>\n    <string name=\"dialog_wipe_entries_title\">清除條目</string>\n    <string name=\"dialog_wipe_entries_message\">您的保險箱中已包含某些條目，您是否想在匯入這個檔案前，先移除這些重複的條目？\\n\\n<b>如此將永久刪除保險箱中原本存在的重複條目。</b></string>\n    <string name=\"dialog_wipe_entries_checkbox\">清除保險箱中的所有內容</string>\n    <string name=\"pref_panic_trigger_title\">危急時刪除保險箱</string>\n    <string name=\"pref_panic_trigger_summary\">從 Ripple 收到危急指令時刪除保險箱</string>\n    <string name=\"import_vault\">匯入 Aegis 金鑰庫</string>\n    <string name=\"import_vault_hint\">想從其他 2FA 驗證器應用程式匯入？先完成首次設定，就可在設定功能表中匯入。</string>\n    <string name=\"importer_help_2fas\">請提供 2FAS Authenticator 的備份檔。</string>\n    <string name=\"importer_help_aegis\">請提供 Aegis 的匯出/備份檔。</string>\n    <string name=\"importer_help_authenticator_plus\">請透過 Authenticator Plus 的 <b>選項 -> 備份與還原 -> 匯出為純文字與 HTML</b> 功能匯出，並提供匯出的檔案。</string>\n    <string name=\"importer_help_authy\">提供 <b>/data/data/com.authy.authy/shared_prefs/com.authy.storage.tokens.authenticator.xml</b> 的複本，其位於 Authy 的內部儲存空間。</string>\n    <string name=\"importer_help_andotp\">提供 andOTP 的匯出/備份檔。</string>\n    <string name=\"importer_help_bitwarden\">請提供 Bitwarden 匯出/備份檔案。不支援加密檔案。</string>\n    <string name=\"importer_help_battle_net_authenticator\">請提供 <b>/data/data/com.blizzard.messenger/shared_prefs/com.blizzard.messenger.authenticator_preferences.xml</b> 的副本；其位於 Battle.net Authenticator 的內部儲存空間。</string>\n    <string name=\"importer_help_duo\">請提供 <b>/data/data/com.duosecurity.duomobile/files/duokit/accounts.json</b> 的副本，其位於 DUO 的內部儲存空間。</string>\n    <string name=\"importer_help_ente_auth\">請提供 Ente Auth 匯出檔案。目前只支援未加密的檔案。</string>\n    <string name=\"importer_help_freeotp\">FreeOTP 2：請提供備份檔。\\nFreeOTP 1.x：請提供 FreeOTP 內部儲存空間目錄當中的 <b>/data/data/org.fedorahosted.freeotp/shared_prefs/tokens.xml</b> 的檔案副本。</string>\n    <string name=\"importer_help_freeotp_plus\">提供 FreeOTP+ 的匯出檔。</string>\n    <string name=\"importer_warning_title_freeotp2\">FreeOTP 2 相容性</string>\n    <string name=\"importer_warning_message_freeotp2\">FreeOTP 2 有一些問題，可能會造成備份檔毀損。Aegis 將盡可能修復備份項目，但還是可能會有一部分或全部項目無法匯入。</string>\n    <string name=\"importer_help_google_authenticator\"><b>僅支援 Google Authenticator v5.10 及之前版本的資料庫檔案</b>。\\n\\n請提供 <b>/data/data/com.google.android.apps.authenticator2/databases/databases</b> 的副本，其位於 Google Authenticator 的內部儲存空間中。</string>\n    <string name=\"importer_help_microsoft_authenticator\">提供 <b>/data/data/com.azure.authenticator/databases/PhoneFactor</b> 的複本，其位於 Microsoft Authenticator 的內部儲存空間。</string>\n    <string name=\"importer_help_plain_text\">提供純文字檔，其中每行都是完整的 Google Authenticator URI</string>\n    <string name=\"importer_help_proton_authenticator\">請透過 Proton Authenticator 的 <b>選項 -> 匯出</b> 功能匯出 json 格式檔案，並提供於此處。</string>\n    <string name=\"importer_help_steam\"><b>僅支援 Steam v3.0或更新版本</b>。 請提供 <b>/data/data/com.valvesoftware.android.steam.community/files/Steamguard-*.json</b> 的副本，其位於 Steam 的內部儲存空間。</string>\n    <string name=\"importer_help_stratum\">請透過 Stratum 的 <b>選項 -> 備份 -> 備份為加密檔案（建議）</b> 功能匯出，並提供於此處。</string>\n    <string name=\"importer_help_totp_authenticator\">提供 TOTP 驗證程式的匯出檔。</string>\n    <string name=\"importer_help_winauth\">提供 WinAuth 的匯出檔。</string>\n    <string name=\"import_assign_icons_dialog_title\">分配圖示</string>\n    <string name=\"import_assign_icons_dialog_text\">您要對匯入的項目設定圖示嗎？</string>\n    <string name=\"importer_encrypted_exception_google_authenticator\">已跳過已加密的條目：%s</string>\n    <string name=\"importer_help_direct\">直接從 %s 匯入條目。這個裝置需已安裝此應用程式且 Aegis 擁有 root 權限。</string>\n    <string name=\"groups\">群組</string>\n    <string name=\"pref_focus_search\">在應用程式啟動時把焦點放在搜尋上</string>\n    <string name=\"pref_focus_search_summary\">開啟應用程式後立即把焦點放在搜尋上</string>\n    <string name=\"pref_grouping_halves\">對分</string>\n    <string name=\"pref_grouping_none\">未分組</string>\n    <string name=\"pref_grouping_size_two\">分成兩群</string>\n    <string name=\"pref_grouping_size_three\">分成三群</string>\n    <string name=\"pref_grouping_size_four\">分成四群</string>\n    <string name=\"pref_copy_behavior_never\">從不</string>\n    <string name=\"pref_copy_behavior_single_tap\">輕觸一下</string>\n    <string name=\"pref_copy_behavior_double_tap\">輕觸兩下</string>\n    <string name=\"pref_account_name_position_hidden\">隱藏</string>\n    <string name=\"pref_account_name_position_end\">在發行者旁</string>\n    <string name=\"pref_account_name_position_below\">在發行者下</string>\n    <plurals name=\"time_elapsed_seconds\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"other\">%d 秒前</item>\n    </plurals>\n    <plurals name=\"time_elapsed_minutes\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"other\">%d 分前</item>\n    </plurals>\n    <plurals name=\"time_elapsed_hours\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"other\">%d 小時前</item>\n    </plurals>\n    <plurals name=\"time_elapsed_days\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"other\">%d 天前</item>\n    </plurals>\n    <plurals name=\"time_elapsed_years\" tools:ignore=\"UnusedResources\">\n        <item quantity=\"other\">%d 年前</item>\n    </plurals>\n    <plurals name=\"dropdown_checkboxes_default_count\">\n        <item quantity=\"other\">已選擇 %d 個項目</item>\n    </plurals>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-zh-rTW-v29/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"system_theme_title\">系統預設</string>\n    <string name=\"system_amoled_theme_title\">系統預設 (AMOLED)</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/xml/backup_rules.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<data-extraction-rules>\n    <cloud-backup>\n        <include domain=\"sharedpref\" path=\".\"/>\n        <include domain=\"file\" path=\"backup/aegis.json\"/>\n    </cloud-backup>\n    <device-transfer>\n        <include domain=\"sharedpref\" path=\".\"/>\n        <include domain=\"file\" path=\"backup/aegis.json\"/>\n    </device-transfer>\n</data-extraction-rules>\n"
  },
  {
    "path": "app/src/main/res/xml/backup_rules_old.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<full-backup-content>\n    <include domain=\"sharedpref\" path=\".\"/>\n    <include domain=\"file\" path=\"backup/aegis.json\"/>\n</full-backup-content>\n"
  },
  {
    "path": "app/src/main/res/xml/file_paths.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<paths>\n    <cache-path name=\"export\" path=\"export/\" />\n</paths>\n"
  },
  {
    "path": "app/src/main/res/xml/preferences.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<androidx.preference.PreferenceScreen\n    xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    android:title=\"@string/action_settings\">\n\n    <Preference\n        android:fragment=\"com.beemdevelopment.aegis.ui.fragments.preferences.AppearancePreferencesFragment\"\n        app:icon=\"@drawable/ic_outline_brush_24\"\n        app:title=\"@string/pref_section_appearance_title\"\n        app:summary=\"@string/pref_section_appearance_summary\" />\n\n    <Preference\n        android:fragment=\"com.beemdevelopment.aegis.ui.fragments.preferences.BehaviorPreferencesFragment\"\n        app:icon=\"@drawable/ic_outline_touch_app_24\"\n        app:title=\"@string/pref_section_behavior_title\"\n        app:summary=\"@string/pref_section_behavior_summary\" />\n\n    <Preference\n        android:fragment=\"com.beemdevelopment.aegis.ui.fragments.preferences.IconPacksManagerFragment\"\n        android:title=\"@string/pref_section_icon_packs\"\n        android:summary=\"@string/pref_section_icon_packs_summary\"\n        app:icon=\"@drawable/ic_outline_package_variant_24\"/>\n\n    <Preference\n        android:fragment=\"com.beemdevelopment.aegis.ui.fragments.preferences.SecurityPreferencesFragment\"\n        app:icon=\"@drawable/ic_outline_key_24\"\n        app:title=\"@string/pref_section_security_title\"\n        app:summary=\"@string/pref_section_security_summary\" />\n\n    <Preference\n        android:fragment=\"com.beemdevelopment.aegis.ui.fragments.preferences.BackupsPreferencesFragment\"\n        app:icon=\"@drawable/ic_outline_cloud_upload_24\"\n        app:title=\"@string/pref_section_backups_title\"\n        app:summary=\"@string/pref_section_backups_summary\" />\n\n    <Preference\n        android:fragment=\"com.beemdevelopment.aegis.ui.fragments.preferences.ImportExportPreferencesFragment\"\n        app:icon=\"@drawable/ic_outline_construction_24\"\n        app:title=\"@string/pref_section_import_export_title\"\n        app:summary=\"@string/pref_section_import_export_summary\" />\n\n    <Preference\n        android:fragment=\"com.beemdevelopment.aegis.ui.fragments.preferences.AuditLogPreferencesFragment\"\n        app:icon=\"@drawable/ic_timeline_24\"\n        app:title=\"@string/pref_section_audit_log_title\"\n        app:summary=\"@string/pref_section_audit_log_summary\" />\n\n</androidx.preference.PreferenceScreen>\n"
  },
  {
    "path": "app/src/main/res/xml/preferences_appearance.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<PreferenceScreen xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    android:title=\"@string/pref_section_appearance_title\">\n    <PreferenceCategory\n        android:title=\"@string/pref_cat_appearance_app\"\n        app:iconSpaceReserved=\"false\">\n        <Preference\n            android:defaultValue=\"false\"\n            android:key=\"pref_dark_mode\"\n            android:title=\"@string/pref_select_theme_title\"\n            app:iconSpaceReserved=\"false\"/>\n\n        <androidx.preference.SwitchPreferenceCompat\n            android:defaultValue=\"false\"\n            android:key=\"pref_dynamic_colors\"\n            android:title=\"@string/pref_dynamic_colors_title\"\n            android:summary=\"@string/pref_dynamic_colors_summary\"\n            app:iconSpaceReserved=\"false\"/>\n\n        <Preference\n            android:key=\"pref_lang\"\n            android:title=\"@string/pref_lang_title\"\n            android:defaultValue=\"system\"\n            app:iconSpaceReserved=\"false\"/>\n    </PreferenceCategory>\n\n    <PreferenceCategory\n        android:title=\"@string/pref_cat_appearance_entries\"\n        app:iconSpaceReserved=\"false\">\n        <Preference\n            android:defaultValue=\"false\"\n            android:key=\"pref_view_mode\"\n            android:title=\"@string/pref_view_mode_title\"\n            app:iconSpaceReserved=\"false\"/>\n\n        <androidx.preference.SwitchPreferenceCompat\n            android:defaultValue=\"true\"\n            android:key=\"pref_show_icons\"\n            android:title=\"@string/pref_show_icons_title\"\n            android:summary=\"@string/pref_show_icons_summary\"\n            app:iconSpaceReserved=\"false\"/>\n\n        <androidx.preference.SwitchPreferenceCompat\n            android:defaultValue=\"false\"\n            android:key=\"pref_show_next_code\"\n            android:title=\"@string/pref_show_next_code_title\"\n            android:summary=\"@string/pref_show_next_code_summary\"\n            app:iconSpaceReserved=\"false\"/>\n\n        <androidx.preference.SwitchPreferenceCompat\n            android:defaultValue=\"true\"\n            android:key=\"pref_expiration_state\"\n            android:title=\"@string/pref_expiration_state_title\"\n            android:summary=\"@string/pref_expiration_state_summary\"\n            app:iconSpaceReserved=\"false\"/>\n\n        <Preference\n            android:key=\"pref_code_group_size_string\"\n            android:title=\"@string/pref_code_group_size_title\"\n            android:summary=\"@string/pref_code_group_size_summary\"\n            android:defaultValue=\"GROUPING_THREES\"\n            app:iconSpaceReserved=\"false\"/>\n\n        <Preference\n            android:key=\"pref_account_name_position\"\n            android:title=\"@string/pref_account_name_position_title\"\n            app:iconSpaceReserved=\"false\"/>\n\n        <androidx.preference.SwitchPreferenceCompat\n            android:defaultValue=\"false\"\n            android:key=\"pref_shared_issuer_account_name\"\n            android:title=\"@string/pref_shared_issuer_account_name_title\"\n            android:summary=\"@string/pref_shared_issuer_account_name_summary\"\n            app:iconSpaceReserved=\"false\"/>\n\n        <Preference\n            android:key=\"pref_groups\"\n            android:title=\"@string/preference_manage_groups\"\n            android:summary=\"@string/preference_manage_groups_summary\"\n            app:iconSpaceReserved=\"false\"/>\n\n        <Preference\n            android:key=\"pref_reset_usage_count\"\n            android:title=\"@string/preference_reset_usage_count\"\n            android:summary=\"@string/preference_reset_usage_count_summary\"\n            app:iconSpaceReserved=\"false\"/>\n    </PreferenceCategory>\n</PreferenceScreen>\n"
  },
  {
    "path": "app/src/main/res/xml/preferences_backups.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<PreferenceScreen xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    android:title=\"@string/pref_section_backups_title\">\n    <Preference\n        android:key=\"pref_backups_warning_password\"\n        android:persistent=\"false\"\n        android:selectable=\"false\"\n        android:summary=\"@string/backup_warning_password\"\n        app:isPreferenceVisible=\"false\"\n        app:icon=\"@drawable/ic_outline_info_24\" />\n    <PreferenceCategory\n        android:title=\"@string/pref_cat_backups_auto\">\n        <androidx.preference.SwitchPreferenceCompat\n            android:defaultValue=\"false\"\n            android:key=\"pref_backups\"\n            android:title=\"@string/pref_backups_title\"\n            android:summary=\"@string/pref_backups_summary\"\n            app:icon=\"@drawable/ic_outline_cloud_upload_24\" />\n\n        <androidx.preference.SwitchPreferenceCompat\n            android:key=\"pref_backup_reminder\"\n            android:title=\"@string/pref_backups_reminder_title\"\n            android:summary=\"@string/pref_backups_reminder_summary\" />\n\n        <Preference\n            android:key=\"pref_versioning_strategy\"\n            android:title=\"@string/pref_backups_versioning_strategy_title\" />\n\n        <Preference\n            android:key=\"pref_backups_location\"\n            android:title=\"@string/pref_backups_location_title\"\n            android:summary=\"@string/pref_backups_location_summary\" />\n        <Preference\n            android:key=\"pref_backups_trigger\"\n            android:title=\"@string/pref_backups_trigger_title\"\n            android:summary=\"@string/pref_backups_trigger_summary\" />\n        <Preference\n            android:key=\"pref_backups_versions\"\n            android:title=\"@string/pref_backups_versions_title\" />\n        <Preference\n            android:key=\"pref_status_backup_builtin\"\n            android:persistent=\"false\"\n            android:selectable=\"false\" />\n    </PreferenceCategory>\n    <PreferenceCategory\n        android:title=\"@string/pref_cat_backups_android\">\n        <androidx.preference.SwitchPreferenceCompat\n            android:defaultValue=\"false\"\n            android:key=\"pref_android_backups\"\n            android:title=\"@string/pref_android_backups_title\"\n            android:summary=\"@string/pref_android_backups_summary\"\n            app:icon=\"@drawable/ic_outline_android_24\" />\n        <Preference\n            android:key=\"pref_status_backup_android\"\n            android:persistent=\"false\"\n            android:selectable=\"false\" />\n        <Preference\n            android:persistent=\"false\"\n            android:selectable=\"false\"\n            android:summary=\"@string/pref_android_backups_hint\" />\n    </PreferenceCategory>\n</PreferenceScreen>\n"
  },
  {
    "path": "app/src/main/res/xml/preferences_behavior.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<PreferenceScreen xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    android:title=\"@string/pref_section_behavior_title\">\n    <androidx.preference.SwitchPreferenceCompat\n        android:defaultValue=\"false\"\n        android:key=\"pref_focus_search\"\n        android:title=\"@string/pref_focus_search\"\n        android:summary=\"@string/pref_focus_search_summary\"\n        app:iconSpaceReserved=\"false\"/>\n    <Preference\n        android:defaultValue=\"false\"\n        android:key=\"pref_search_behavior\"\n        android:title=\"@string/pref_search_behavior_title\"\n        app:iconSpaceReserved=\"false\"/>\n    <androidx.preference.SwitchPreferenceCompat\n        android:defaultValue=\"false\"\n        android:key=\"pref_minimize_on_copy\"\n        android:title=\"@string/pref_minimize_on_copy_title\"\n        android:summary=\"@string/pref_minimize_on_copy_summary\"\n        app:iconSpaceReserved=\"false\"/>\n\n    <Preference\n        android:defaultValue=\"false\"\n        android:key=\"pref_copy_behavior\"\n        android:title=\"@string/pref_copy_behavior_title\"\n        app:iconSpaceReserved=\"false\"/>\n\n    <androidx.preference.SwitchPreferenceCompat\n        android:defaultValue=\"true\"\n        android:key=\"pref_haptic_feedback\"\n        android:title=\"@string/pref_haptic_feedback_title\"\n        android:summary=\"@string/pref_haptic_feedback_summary\"\n        app:iconSpaceReserved=\"false\"/>\n\n    <androidx.preference.SwitchPreferenceCompat\n        android:defaultValue=\"false\"\n        android:key=\"pref_groups_multiselect\"\n        android:title=\"@string/pref_groups_multiselect_title\"\n        android:summary=\"@string/pref_groups_multiselect_summary\"\n        app:iconSpaceReserved=\"false\"/>\n\n    <androidx.preference.SwitchPreferenceCompat\n        android:defaultValue=\"false\"\n        android:key=\"pref_highlight_entry\"\n        android:title=\"@string/pref_highlight_entry_title\"\n        android:summary=\"@string/pref_highlight_entry_summary\"\n        app:iconSpaceReserved=\"false\"/>\n    <androidx.preference.SwitchPreferenceCompat\n        android:defaultValue=\"false\"\n        android:key=\"pref_pause_entry\"\n        android:title=\"@string/pref_pause_entry_title\"\n        android:summary=\"@string/pref_pause_entry_summary\"\n        app:iconSpaceReserved=\"false\"/>\n</PreferenceScreen>\n"
  },
  {
    "path": "app/src/main/res/xml/preferences_import_export.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<PreferenceScreen xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    android:title=\"@string/pref_section_import_export_title\">\n    <Preference\n        android:key=\"pref_import\"\n        android:title=\"@string/pref_import_file_title\"\n        android:summary=\"@string/pref_import_file_summary\"\n        app:iconSpaceReserved=\"false\"/>\n    <Preference\n        android:key=\"pref_import_app\"\n        android:title=\"@string/pref_import_app_title\"\n        android:summary=\"@string/pref_import_app_summary\"\n        app:iconSpaceReserved=\"false\"/>\n    <Preference\n        android:key=\"pref_export\"\n        android:title=\"@string/pref_export_title\"\n        android:summary=\"@string/pref_export_summary\"\n        app:iconSpaceReserved=\"false\"/>\n    <Preference\n        android:key=\"pref_google_auth_style_export\"\n        android:title=\"@string/pref_google_auth_export_title\"\n        android:summary=\"@string/pref_google_auth_export_descriptor\"\n        app:iconSpaceReserved=\"false\"/>\n</PreferenceScreen>"
  },
  {
    "path": "app/src/main/res/xml/preferences_security.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<PreferenceScreen xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    android:title=\"@string/pref_section_security_title\">\n    <PreferenceCategory\n        android:title=\"@string/pref_encryption_title\"\n        app:iconSpaceReserved=\"false\">\n        <com.beemdevelopment.aegis.ui.preferences.SwitchPreference\n            android:key=\"pref_encryption\"\n            android:title=\"@string/pref_encryption_title\"\n            android:summary=\"@string/pref_encryption_summary\"\n            android:persistent=\"false\"\n            app:iconSpaceReserved=\"false\"/>\n\n        <Preference\n            android:key=\"pref_password\"\n            android:title=\"@string/pref_set_password_title\"\n            android:summary=\"@string/pref_set_password_summary\"\n            android:dependency=\"pref_encryption\"\n            app:iconSpaceReserved=\"false\"/>\n\n        <com.beemdevelopment.aegis.ui.preferences.SwitchPreference\n            android:key=\"pref_biometrics\"\n            android:title=\"@string/pref_biometrics_title\"\n            android:summary=\"@string/pref_biometrics_summary\"\n            android:persistent=\"false\"\n            app:iconSpaceReserved=\"false\"/>\n\n        <Preference\n            android:key=\"pref_password_reminder_freq\"\n            android:title=\"@string/pref_password_reminder_title\"\n            android:summary=\"@string/pref_password_reminder_summary\"\n            android:dependency=\"pref_biometrics\"\n            app:iconSpaceReserved=\"false\"/>\n    </PreferenceCategory>\n    <PreferenceCategory\n        android:title=\"@string/pref_backup_password_category\"\n        app:iconSpaceReserved=\"false\">\n        <com.beemdevelopment.aegis.ui.preferences.SwitchPreference\n            android:key=\"pref_backup_password\"\n            android:title=\"@string/pref_backup_password_title\"\n            android:summary=\"@string/pref_backup_password_summary\"\n            android:persistent=\"false\"\n            app:iconSpaceReserved=\"false\"/>\n\n        <Preference\n            android:key=\"pref_backup_password_change\"\n            android:title=\"@string/pref_backup_password_change_title\"\n            android:summary=\"@string/pref_backup_password_change_summary\"\n            android:dependency=\"pref_encryption\"\n            app:iconSpaceReserved=\"false\"/>\n    </PreferenceCategory>\n    <PreferenceCategory\n        android:title=\"@string/pref_section_behavior_title\"\n        app:iconSpaceReserved=\"false\">\n        <androidx.preference.SwitchPreferenceCompat\n            android:defaultValue=\"@bool/pref_secure_screen_default\"\n            android:key=\"pref_secure_screen\"\n            android:title=\"@string/pref_secure_screen_title\"\n            android:summary=\"@string/pref_secure_screen_summary\"\n            app:iconSpaceReserved=\"false\"/>\n\n        <androidx.preference.SwitchPreferenceCompat\n            android:defaultValue=\"false\"\n            android:key=\"pref_tap_to_reveal\"\n            android:title=\"@string/pref_tap_to_reveal_title\"\n            android:summary=\"@string/pref_tap_to_reveal_summary\"\n            app:iconSpaceReserved=\"false\"/>\n\n        <Preference\n            android:key=\"pref_tap_to_reveal_time\"\n            android:title=\"@string/pref_tap_to_reveal_time_title\"\n            android:dependency=\"pref_tap_to_reveal\"\n            app:iconSpaceReserved=\"false\"/>\n\n        <Preference\n            android:key=\"pref_auto_lock\"\n            android:dependency=\"pref_encryption\"\n            android:persistent=\"false\"\n            android:title=\"@string/pref_auto_lock_title\"\n            android:summary=\"@string/pref_auto_lock_summary\"\n            app:iconSpaceReserved=\"false\"/>\n\n        <androidx.preference.SwitchPreferenceCompat\n            android:key=\"pref_pin_keyboard\"\n            android:dependency=\"pref_encryption\"\n            android:title=\"@string/pref_pin_keyboard_title\"\n            android:summary=\"@string/pref_pin_keyboard_summary\"\n            app:iconSpaceReserved=\"false\"/>\n\n        <androidx.preference.SwitchPreferenceCompat\n            android:defaultValue=\"false\"\n            android:key=\"pref_panic_trigger\"\n            android:title=\"@string/pref_panic_trigger_title\"\n            android:summary=\"@string/pref_panic_trigger_summary\"\n            app:iconSpaceReserved=\"false\"/>\n    </PreferenceCategory>\n</PreferenceScreen>\n"
  },
  {
    "path": "app/src/test/java/com/beemdevelopment/aegis/PreferencesTest.java",
    "content": "package com.beemdevelopment.aegis;\n\nimport static org.junit.Assert.assertEquals;\nimport static org.junit.Assert.assertFalse;\nimport static org.junit.Assert.assertNotEquals;\nimport static org.junit.Assert.assertTrue;\n\nimport android.content.Context;\nimport android.content.SharedPreferences;\n\nimport androidx.preference.PreferenceManager;\nimport androidx.test.core.app.ApplicationProvider;\n\nimport org.junit.Test;\nimport org.junit.runner.RunWith;\nimport org.robolectric.RobolectricTestRunner;\n\nimport java.util.Date;\n\n@RunWith(RobolectricTestRunner.class)\npublic class PreferencesTest {\n    @Test\n    public void testIsPasswordReminderNeeded() {\n        long currTime = new Date().getTime();\n        Context context = ApplicationProvider.getApplicationContext();\n        Preferences prefs = new Preferences(context);\n        SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(context);\n\n        // make sure that the password reminder is enabled by default\n        assertNotEquals(prefs.getPasswordReminderFrequency(), PassReminderFreq.NEVER);\n\n        // if the old preference is set to false, the frequency should be NEVER\n        sharedPrefs.edit().putBoolean(\"pref_password_reminder\", false).apply();\n        assertEquals(prefs.getPasswordReminderFrequency(), PassReminderFreq.NEVER);\n        assertFalse(prefs.isPasswordReminderNeeded());\n\n        // password reminders are never needed when the frequency is set to NEVER\n        PassReminderFreq freq = PassReminderFreq.NEVER;\n        prefs.setPasswordReminderFrequency(freq);\n        assertFalse(prefs.isPasswordReminderNeeded());\n\n        // test correct behavior when the frequency is set to something other than NEVER\n        freq = PassReminderFreq.WEEKLY;\n        prefs.setPasswordReminderFrequency(freq);\n        assertFalse(prefs.isPasswordReminderNeeded(currTime));\n        prefs.setPasswordReminderTimestamp(currTime - freq.getDurationMillis() + 1);\n        assertFalse(prefs.isPasswordReminderNeeded(currTime));\n        prefs.setPasswordReminderTimestamp(currTime - freq.getDurationMillis());\n        assertTrue(prefs.isPasswordReminderNeeded(currTime));\n        prefs.setPasswordReminderTimestamp(currTime - freq.getDurationMillis() - 1);\n        assertTrue(prefs.isPasswordReminderNeeded(currTime));\n\n        // a password reminder should no longer be needed if it's configured to be less frequent than before\n        freq = PassReminderFreq.BIWEEKLY;\n        prefs.setPasswordReminderFrequency(freq);\n        assertFalse(prefs.isPasswordReminderNeeded(currTime));\n    }\n}\n"
  },
  {
    "path": "app/src/test/java/com/beemdevelopment/aegis/crypto/SCryptTest.java",
    "content": "package com.beemdevelopment.aegis.crypto;\n\nimport static org.junit.Assert.assertArrayEquals;\nimport static org.junit.Assert.assertFalse;\n\nimport com.beemdevelopment.aegis.crypto.bc.SCrypt;\nimport com.beemdevelopment.aegis.encoding.EncodingException;\nimport com.beemdevelopment.aegis.encoding.Hex;\n\nimport org.junit.Test;\n\nimport java.util.Arrays;\n\nimport javax.crypto.SecretKey;\n\npublic class SCryptTest {\n    private static class Vector {\n        private final byte[] _key;\n        private final char[] _password;\n        private final byte[] _salt;\n        private final int _n;\n        private final int _r;\n        private final int _p;\n        private final int _len;\n\n        public Vector(String key, String password, String salt, int n, int r, int p, int len) throws EncodingException {\n            _key = Hex.decode(key);\n            _password = password.toCharArray();\n            _salt = CryptoUtils.toBytes(salt.toCharArray());\n            _n = n;\n            _r = r;\n            _p = p;\n            _len = len;\n        }\n\n        public void validate() {\n            SCryptParameters params = new SCryptParameters(_n, _r, _p, _salt);\n            byte[] key = SCrypt.generate(CryptoUtils.toBytes(_password), params.getSalt(), params.getN(), params.getR(), params.getP(), _len);\n            assertArrayEquals(_key, key);\n        }\n    }\n\n    @Test\n    public void vectorsMatch() throws EncodingException {\n        // https://tools.ietf.org/html/rfc7914.html#section-12\n        final Vector[] vectors = new Vector[]{\n                new Vector(\"77d6576238657b203b19ca42c18a0497f16b4844e3074ae8dfdffa3fede21442fcd0069ded0948f8326a753a0fc81f17e8d3e0fb2e0d3628cf35e20c38d18906\",\n                        \"\", \"\", 1 << 4, 1, 1, 64),\n                new Vector(\"fdbabe1c9d3472007856e7190d01e9fe7c6ad7cbc8237830e77376634b3731622eaf30d92e22a3886ff109279d9830dac727afb94a83ee6d8360cbdfa2cc0640\",\n                        \"password\", \"NaCl\", 1 << 10, 8, 16, 64),\n                new Vector(\"7023bdcb3afd7348461c06cd81fd38ebfda8fbba904f8e3ea9b543f6545da1f2d5432955613f0fcf62d49705242a9af9e61e85dc0d651e40dfcf017b45575887\",\n                        \"pleaseletmein\", \"SodiumChloride\", 1 << 14, 8, 1, 64),\n                new Vector(\"2101cb9b6a511aaeaddbbe09cf70f881ec568d574a2ffd4dabe5ee9820adaa478e56fd8f4ba5d09ffa1c6d927c40f4c337304049e8a952fbcbf45c6fa77a41a4\",\n                        \"pleaseletmein\", \"SodiumChloride\", 1 << 20, 8, 1, 64)\n        };\n\n        for (Vector vector : vectors) {\n            vector.validate();\n        }\n    }\n\n    @Test\n    public void testTrailingNullCollision() throws EncodingException {\n        byte[] salt = new byte[0];\n        SCryptParameters params = new SCryptParameters(\n                CryptoUtils.CRYPTO_SCRYPT_N,\n                CryptoUtils.CRYPTO_SCRYPT_p,\n                CryptoUtils.CRYPTO_SCRYPT_r,\n                salt\n        );\n\n        byte[] head = new byte[]{'t', 'e', 's', 't'};\n        byte[] expectedKey = Hex.decode(\"41cd8110d0c66ede16f97ce84fd8e2bd2269c9318532a01437789dfbadd1392e\");\n\n        for (int i = 0; i < 128; i += 4) {\n            byte[] input = new byte[head.length + i];\n            System.arraycopy(head, 0, input, 0, head.length);\n\n            // once the length of the input is over 64 bytes, trailing nulls do not cause a collision anymore\n            SecretKey key = CryptoUtils.deriveKey(input, params);\n            if (input.length <= 64) {\n                assertArrayEquals(expectedKey, key.getEncoded());\n            } else {\n                assertFalse(Arrays.equals(expectedKey, key.getEncoded()));\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/test/java/com/beemdevelopment/aegis/crypto/otp/HOTPTest.java",
    "content": "package com.beemdevelopment.aegis.crypto.otp;\n\nimport org.junit.Test;\n\nimport java.security.InvalidKeyException;\nimport java.security.NoSuchAlgorithmException;\n\nimport static org.junit.Assert.assertEquals;\n\npublic class HOTPTest {\n    // https://tools.ietf.org/html/rfc4226#page-32\n    public static final String[] VECTORS = {\n            \"755224\", \"287082\",\n            \"359152\", \"969429\",\n            \"338314\", \"254676\",\n            \"287922\", \"162583\",\n            \"399871\", \"520489\"\n    };\n\n    public static final byte[] SECRET = new byte[]{\n            0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x30,\n            0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x30\n    };\n\n    @Test\n    public void vectorsMatch() throws InvalidKeyException, NoSuchAlgorithmException {\n        for (int i = 0; i < VECTORS.length; i++) {\n            OTP otp = HOTP.generateOTP(SECRET, \"HmacSHA1\", 6, i);\n            assertEquals(VECTORS[i], otp.toString());\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/test/java/com/beemdevelopment/aegis/crypto/otp/MOTPTest.java",
    "content": "package com.beemdevelopment.aegis.crypto.otp;\n\nimport static org.junit.Assert.assertEquals;\n\nimport com.beemdevelopment.aegis.encoding.EncodingException;\nimport com.beemdevelopment.aegis.encoding.Hex;\n\nimport org.junit.Test;\n\nimport java.nio.charset.StandardCharsets;\nimport java.security.NoSuchAlgorithmException;\n\npublic class MOTPTest {\n    public static class Vector {\n        public String Secret;\n        public String OTP;\n        public String Pin;\n        public long Time;\n\n        public Vector(long time, String otp, String pin, String secret) {\n            Time = time;\n            OTP = otp;\n            Pin = pin;\n            Secret = secret;\n        }\n    }\n\n    public static final Vector[] VECTORS = {\n            new Vector(165892298, \"e7d8b6\", \"1234\", \"e3152afee62599c8\"),\n            new Vector(123456789, \"4ebfb2\", \"1234\", \"e3152afee62599c8\"),\n            new Vector(165954002 * 10, \"ced7b1\", \"9999\", \"bbb1912bb5c515be\"),\n            new Vector(165954002 * 10 + 2, \"ced7b1\", \"9999\", \"bbb1912bb5c515be\"),\n            new Vector(165953987 * 10, \"1a14f8\", \"9999\", \"bbb1912bb5c515be\"),\n            //should round down\n            new Vector(165953987 * 10 + 8, \"1a14f8\", \"9999\", \"bbb1912bb5c515be\")\n    };\n\n    @Test\n    public void testOutputCode() throws NoSuchAlgorithmException, EncodingException {\n        for (Vector vector : VECTORS) {\n            MOTP otp = MOTP.generateOTP(Hex.decode(vector.Secret), \"MD5\", 6, 10, vector.Pin, vector.Time);\n            assertEquals(vector.OTP, otp.toString());\n        }\n    }\n\n    @Test\n    public void testGetDigest() throws NoSuchAlgorithmException {\n        assertEquals(\"355938cfe3b73a624297591972d27c01\",\n                MOTP.getDigest(\"MD5\", \"BOB\".getBytes(StandardCharsets.UTF_8)));\n        assertEquals(\"16d7a4fca7442dda3ad93c9a726597e4\",\n                MOTP.getDigest(\"MD5\", \"test1234\".getBytes(StandardCharsets.UTF_8)));\n    }\n}\n"
  },
  {
    "path": "app/src/test/java/com/beemdevelopment/aegis/crypto/otp/TOTPTest.java",
    "content": "package com.beemdevelopment.aegis.crypto.otp;\n\nimport org.junit.Test;\n\nimport java.security.InvalidKeyException;\nimport java.security.NoSuchAlgorithmException;\n\nimport static org.junit.Assert.assertEquals;\n\npublic class TOTPTest {\n    public static class Vector {\n        public long Time;\n        public String OTP;\n        public String Algo;\n\n        public Vector(long time, String otp, String algo) {\n            Time = time;\n            OTP = otp;\n            Algo = algo;\n        }\n    }\n\n    // https://tools.ietf.org/html/rfc6238#appendix-B\n    public static final Vector[] VECTORS = {\n            new Vector(59, \"94287082\", \"HmacSHA1\"),\n            new Vector(59, \"46119246\", \"HmacSHA256\"),\n            new Vector(59, \"90693936\", \"HmacSHA512\"),\n            new Vector(1111111109, \"07081804\", \"HmacSHA1\"),\n            new Vector(1111111109, \"68084774\", \"HmacSHA256\"),\n            new Vector(1111111109, \"25091201\", \"HmacSHA512\"),\n            new Vector(1111111111, \"14050471\", \"HmacSHA1\"),\n            new Vector(1111111111, \"67062674\", \"HmacSHA256\"),\n            new Vector(1111111111, \"99943326\", \"HmacSHA512\"),\n            new Vector(1234567890, \"89005924\", \"HmacSHA1\"),\n            new Vector(1234567890, \"91819424\", \"HmacSHA256\"),\n            new Vector(1234567890, \"93441116\", \"HmacSHA512\"),\n            new Vector(2000000000, \"69279037\", \"HmacSHA1\"),\n            new Vector(2000000000, \"90698825\", \"HmacSHA256\"),\n            new Vector(2000000000, \"38618901\", \"HmacSHA512\"),\n            new Vector(20000000000L, \"65353130\", \"HmacSHA1\"),\n            new Vector(20000000000L, \"77737706\", \"HmacSHA256\"),\n            new Vector(20000000000L, \"47863826\", \"HmacSHA512\")\n    };\n\n    private static final byte[] SEED = new byte[]{\n            0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x30,\n            0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x30\n    };\n\n    private static final byte[] SEED32 = new byte[]{\n            0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38,\n            0x39, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36,\n            0x37, 0x38, 0x39, 0x30, 0x31, 0x32, 0x33, 0x34,\n            0x35, 0x36, 0x37, 0x38, 0x39, 0x30, 0x31, 0x32\n    };\n\n    private static final byte[] SEED64 = new byte[]{\n            0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36,\n            0x37, 0x38, 0x39, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x30, 0x31, 0x32,\n            0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38,\n            0x39, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x30, 0x31, 0x32, 0x33, 0x34\n    };\n\n    @Test\n    public void vectorsMatch() throws NoSuchAlgorithmException, InvalidKeyException {\n        for (Vector vector : VECTORS) {\n            byte[] seed = getSeed(vector.Algo);\n            OTP otp = TOTP.generateOTP(seed, vector.Algo, 8, 30, vector.Time);\n            assertEquals(vector.OTP, otp.toString());\n        }\n    }\n\n    public static byte[] getSeed(String algorithm) {\n        switch (algorithm) {\n            case \"HmacSHA1\":\n                return SEED;\n            case \"HmacSHA256\":\n                return SEED32;\n            case \"HmacSHA512\":\n                return SEED64;\n            default:\n                throw new RuntimeException(String.format(\"Unsupported algorithm: %s\", algorithm));\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/test/java/com/beemdevelopment/aegis/crypto/otp/YAOTPTest.java",
    "content": "package com.beemdevelopment.aegis.crypto.otp;\n\nimport static org.junit.Assert.assertEquals;\n\nimport com.beemdevelopment.aegis.encoding.Base32;\nimport com.beemdevelopment.aegis.otp.OtpInfoException;\nimport com.beemdevelopment.aegis.otp.YandexInfo;\n\nimport org.junit.Test;\n\nimport java.io.IOException;\nimport java.security.InvalidKeyException;\nimport java.security.NoSuchAlgorithmException;\n\npublic class YAOTPTest {\n\n    private static final Vector[] TEST_CASES = new Vector[]{\n            new Vector(\"5239\", \"6SB2IKNM6OBZPAVBVTOHDKS4FAAAAAAADFUTQMBTRY\", 1641559648L, \"umozdicq\"),\n            new Vector(\"7586\", \"LA2V6KMCGYMWWVEW64RNP3JA3IAAAAAAHTSG4HRZPI\", 1581064020L, \"oactmacq\"),\n            new Vector(\"7586\", \"LA2V6KMCGYMWWVEW64RNP3JA3IAAAAAAHTSG4HRZPI\", 1581090810L, \"wemdwrix\"),\n            new Vector(\"5210481216086702\", \"JBGSAU4G7IEZG6OY4UAXX62JU4AAAAAAHTSG4HXU3M\", 1581091469L, \"dfrpywob\"),\n            new Vector(\"5210481216086702\", \"JBGSAU4G7IEZG6OY4UAXX62JU4AAAAAAHTSG4HXU3M\", 1581093059L, \"vunyprpd\"),\n    };\n\n    @Test\n    public void validateYaOtp()\n            throws InvalidKeyException, NoSuchAlgorithmException, IOException, OtpInfoException {\n        for (Vector testCase : TEST_CASES) {\n            byte[] secret = YandexInfo.parseSecret(Base32.decode(testCase.secret));\n            YAOTP otp = YAOTP.generateOTP(\n                    secret,\n                    testCase.pin,\n                    8,\n                    \"HmacSHA256\",\n                    30,\n                    testCase.timestamp\n            );\n            assertEquals(testCase.expected, otp.toString());\n        }\n    }\n\n    public static class Vector {\n        public String pin;\n        public String secret;\n        public long timestamp;\n        public String expected;\n\n        public Vector(String pin, String secret, long timestamp, String expected) {\n            this.pin = pin;\n            this.secret = secret;\n            this.timestamp = timestamp;\n            this.expected = expected;\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/test/java/com/beemdevelopment/aegis/helpers/QrCodeAnalyzerTest.java",
    "content": "package com.beemdevelopment.aegis.helpers;\n\nimport static android.graphics.ImageFormat.YUV_420_888;\nimport static org.junit.Assert.assertEquals;\nimport static org.junit.Assert.assertFalse;\nimport static org.junit.Assert.assertTrue;\n\nimport android.graphics.Rect;\nimport android.media.Image;\n\nimport androidx.annotation.NonNull;\nimport androidx.annotation.Nullable;\nimport androidx.camera.core.ImageInfo;\nimport androidx.camera.core.ImageProxy;\n\nimport com.beemdevelopment.aegis.util.IOUtils;\n\nimport org.junit.Test;\nimport org.junit.runner.RunWith;\nimport org.robolectric.RobolectricTestRunner;\n\nimport java.io.IOException;\nimport java.io.InputStream;\nimport java.nio.ByteBuffer;\nimport java.util.concurrent.atomic.AtomicBoolean;\nimport java.util.zip.GZIPInputStream;\n\n@RunWith(RobolectricTestRunner.class)\npublic class QrCodeAnalyzerTest {\n    private static final String _expectedUri = \"otpauth://totp/neo4j:Charlotte?secret=B33WS2ALPT34K4BNY24AYROE4M&issuer=neo4j&algorithm=SHA1&digits=6&period=30\";\n\n    @Test\n    public void testScanQrCode() {\n        boolean found = scan(\"qr.y.gz\", 1600, 1200, 1600);\n        assertTrue(\"QR code not found\", found);\n    }\n\n    @Test\n    public void testScanStridedQrCode() {\n        boolean found = scan(\"qr.strided.y.gz\", 1840, 1380, 1840);\n        assertFalse(\"QR code found\", found);\n\n        found = scan(\"qr.strided.y.gz\", 1840, 1380, 1856);\n        assertTrue(\"QR code not found\", found);\n    }\n\n    private boolean scan(String fileName, int width, int height, int rowStride) {\n        AtomicBoolean found = new AtomicBoolean();\n        QrCodeAnalyzer analyzer = new QrCodeAnalyzer(result -> {\n            assertEquals(_expectedUri, result.getText());\n            found.set(true);\n        });\n\n        FakeImageProxy imgProxy;\n        try (InputStream inStream = getClass().getResourceAsStream(fileName);\n             GZIPInputStream zipStream = new GZIPInputStream(inStream)) {\n            imgProxy = new FakeImageProxy(IOUtils.readAll(zipStream), width, height, rowStride);\n        } catch (IOException e) {\n            throw new RuntimeException(e);\n        }\n\n        analyzer.analyze(imgProxy);\n        return found.get();\n    }\n\n    private static class FakePlaneProxy implements ImageProxy.PlaneProxy {\n        private final byte[] _y;\n        private final int _rowStride;\n\n        public FakePlaneProxy(byte[] y, int rowStride) {\n            _y = y;\n            _rowStride = rowStride;\n        }\n\n        @Override\n        public int getRowStride() {\n            return _rowStride;\n        }\n\n        @Override\n        public int getPixelStride() {\n            return 1;\n        }\n\n        @NonNull\n        @Override\n        public ByteBuffer getBuffer() {\n            return ByteBuffer.wrap(_y);\n        }\n    }\n\n    private static class FakeImageProxy implements ImageProxy {\n        private final byte[] _y;\n        private final int _width;\n        private final int _height;\n        private final int _rowStride;\n\n        public FakeImageProxy(byte[] y, int width, int height, int rowStride) {\n            _y = y;\n            _width = width;\n            _height = height;\n            _rowStride = rowStride;\n        }\n\n        @Override\n        public void close() {\n\n        }\n\n        @NonNull\n        @Override\n        public Rect getCropRect() {\n            return null;\n        }\n\n        @Override\n        public void setCropRect(@Nullable @org.jetbrains.annotations.Nullable Rect rect) {\n\n        }\n\n        @Override\n        public int getFormat() {\n            return YUV_420_888;\n        }\n\n        @Override\n        public int getHeight() {\n            return _height;\n        }\n\n        @Override\n        public int getWidth() {\n            return _width;\n        }\n\n        @NonNull\n        @Override\n        public ImageProxy.PlaneProxy[] getPlanes() {\n            return new PlaneProxy[]{new FakePlaneProxy(_y, _rowStride)};\n        }\n\n        @NonNull\n        @Override\n        public ImageInfo getImageInfo() {\n            return null;\n        }\n\n        @Nullable\n        @Override\n        public Image getImage() {\n            return null;\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/test/java/com/beemdevelopment/aegis/importers/DatabaseImporterTest.java",
    "content": "package com.beemdevelopment.aegis.importers;\n\nimport static org.junit.Assert.assertEquals;\nimport static org.junit.Assert.assertFalse;\nimport static org.junit.Assert.assertNotNull;\nimport static org.junit.Assert.assertTrue;\nimport static org.junit.Assert.fail;\n\nimport android.content.Context;\n\nimport androidx.test.core.app.ApplicationProvider;\n\nimport com.beemdevelopment.aegis.encoding.Base32;\nimport com.beemdevelopment.aegis.otp.HotpInfo;\nimport com.beemdevelopment.aegis.otp.OtpInfo;\nimport com.beemdevelopment.aegis.otp.OtpInfoException;\nimport com.beemdevelopment.aegis.otp.SteamInfo;\nimport com.beemdevelopment.aegis.otp.TotpInfo;\nimport com.beemdevelopment.aegis.util.UUIDMap;\nimport com.beemdevelopment.aegis.vault.VaultEntry;\nimport com.beemdevelopment.aegis.vectors.VaultEntries;\nimport com.google.common.collect.Lists;\n\nimport org.junit.Before;\nimport org.junit.Test;\nimport org.junit.runner.RunWith;\nimport org.robolectric.RobolectricTestRunner;\n\nimport java.io.IOException;\nimport java.io.InputStream;\nimport java.util.Arrays;\nimport java.util.List;\n\n@RunWith(RobolectricTestRunner.class)\npublic class DatabaseImporterTest {\n    private List<VaultEntry> _vectors;\n\n    /**\n     * The procedure for adding new importer tests is as follows:\n     * 1. Generate QR codes for each test vector:\n     *     -> while read line; do (qrencode \"$line\" -o - | feh -); done < ./app/src/test/resources/com/beemdevelopment/aegis/importers/plain.txt\n     * 2. Scan the QR codes with the app we want to test our import functionality of\n     * 3. Create an export and add the file to the importers resource directory.\n     * 4. Add a new test for it here.\n     */\n\n    @Before\n    public void initVectors() {\n        _vectors = VaultEntries.get();\n    }\n\n    @Test\n    public void testImportPlainText() throws IOException, DatabaseImporterException, OtpInfoException {\n        List<VaultEntry> entries = importPlain(GoogleAuthUriImporter.class, \"plain.txt\");\n        checkImportedEntries(entries);\n    }\n\n    @Test\n    public void testImportAegisPlain() throws IOException, DatabaseImporterException, OtpInfoException {\n        List<VaultEntry> entries = importPlain(AegisImporter.class, \"aegis_plain.json\");\n        checkImportedEntries(entries);\n    }\n\n    @Test\n    public void testImportAegisEncrypted() throws IOException, DatabaseImporterException, OtpInfoException {\n        List<VaultEntry> entries = importEncrypted(AegisImporter.class, \"aegis_encrypted.json\", encryptedState -> {\n            final char[] password = \"test\".toCharArray();\n            return ((AegisImporter.EncryptedState) encryptedState).decrypt(password);\n        });\n\n        checkImportedEntries(entries);\n    }\n\n    @Test\n    public void testImportDuo() throws IOException, DatabaseImporterException, OtpInfoException {\n        List<VaultEntry> entries = importPlain(DuoImporter.class, \"duo.json\");\n        for (VaultEntry entry : entries) {\n            VaultEntry entryVector = getEntryVectorBySecret(entry.getInfo().getSecret());\n            entryVector.setIssuer(\"\");\n            if (entryVector.getInfo() instanceof HotpInfo) {\n                ((HotpInfo) entry.getInfo()).setCounter(1);\n            }\n            checkImportedEntry(entryVector, entry);\n        }\n    }\n\n    @Test\n    public void testImportEnteAuth() throws IOException, DatabaseImporterException, OtpInfoException {\n        List<VaultEntry> entries = importPlain(EnteAuthImporter.class, \"ente_auth.txt\");\n        checkImportedEntries(entries);\n    }\n\n    @Test\n    public void testImportWinAuth() throws IOException, DatabaseImporterException, OtpInfoException {\n        List<VaultEntry> entries = importPlain(WinAuthImporter.class, \"plain.txt\");\n        for (VaultEntry entry : entries) {\n            VaultEntry entryVector = getEntryVectorBySecret(entry.getInfo().getSecret());\n            entryVector.setIssuer(entryVector.getName());\n            entryVector.setName(\"WinAuth\");\n            checkImportedEntry(entryVector, entry);\n        }\n    }\n\n    @Test\n    public void testImportAndOTP() throws IOException, DatabaseImporterException, OtpInfoException {\n        List<VaultEntry> entries = importPlain(AndOtpImporter.class, \"andotp_plain.json\");\n        checkImportedEntries(entries);\n    }\n\n    @Test\n    public void testImportAndOTPEncrypted() throws IOException, DatabaseImporterException, OtpInfoException {\n        List<VaultEntry> entries = importEncrypted(AndOtpImporter.class, \"andotp_encrypted.bin\", encryptedState -> {\n            final char[] password = \"test\".toCharArray();\n            return ((AndOtpImporter.EncryptedState) encryptedState).decryptNewFormat(password);\n        });\n\n        checkImportedEntries(entries);\n    }\n\n    @Test\n    public void testImportAndOTPEncryptedOld() throws IOException, DatabaseImporterException, OtpInfoException {\n        List<VaultEntry> entries = importEncrypted(AndOtpImporter.class, \"andotp_encrypted_old.bin\", encryptedState -> {\n            final char[] password = \"test\".toCharArray();\n            return ((AndOtpImporter.EncryptedState) encryptedState).decryptOldFormat(password);\n        });\n\n        for (VaultEntry entry : entries) {\n            // old versions of andOTP have a bug where the issuer/name is not parsed correctly, so account for that here\n            VaultEntry entryVector = getEntryVectorBySecret(entry.getInfo().getSecret());\n            entryVector.setName(String.format(\"%s:%s\", entryVector.getIssuer(), entryVector.getName()));\n            checkImportedEntry(entryVector, entry);\n        }\n    }\n\n    @Test\n    public void testImportTotpAuthenticator() throws IOException, DatabaseImporterException, OtpInfoException {\n        List<VaultEntry> entries = importEncrypted(TotpAuthenticatorImporter.class, \"totp_authenticator.bin\", encryptedState -> {\n            final char[] password = \"Testtest1\".toCharArray();\n            return ((TotpAuthenticatorImporter.EncryptedState) encryptedState).decrypt(password);\n        });\n\n        checkImportedTotpAuthenticatorEntries(entries);\n    }\n\n    @Test\n    public void testImportTotpAuthenticatorInternal() throws IOException, DatabaseImporterException, OtpInfoException {\n        List<VaultEntry> entries = importPlain(TotpAuthenticatorImporter.class, \"totp_authenticator_internal.xml\", true);\n        checkImportedTotpAuthenticatorEntries(entries);\n    }\n\n    @Test\n    public void testImportStratumEncrypted() throws DatabaseImporterException, IOException, OtpInfoException {\n        List<VaultEntry> entries = importEncrypted(StratumImporter.class, \"stratum_encrypted.bin\", state -> {\n            char[] password = \"test\".toCharArray();\n            return ((StratumImporter.EncryptedState) state).decrypt(password);\n        });\n        checkImportedEntries(entries);\n    }\n\n    @Test\n    public void testImportStratumEncryptedLegacy() throws DatabaseImporterException, IOException, OtpInfoException {\n        List<VaultEntry> entries = importEncrypted(StratumImporter.class, \"stratum_encrypted_legacy.bin\", state -> {\n            char[] password = \"test\".toCharArray();\n            return ((StratumImporter.LegacyEncryptedState) state).decrypt(password);\n        });\n        checkImportedEntries(entries);\n    }\n\n    @Test\n    public void testImportStratumInternal() throws DatabaseImporterException, IOException, OtpInfoException {\n        List<VaultEntry> entries = importPlain(StratumImporter.class, \"stratum_internal.db\", true);\n        checkImportedEntries(entries);\n    }\n\n    @Test\n    public void testImportStratumPlain() throws DatabaseImporterException, IOException, OtpInfoException {\n        List<VaultEntry> entries = importPlain(StratumImporter.class, \"stratum_plain.json\");\n        checkImportedEntries(entries);\n    }\n\n    @Test\n    public void testImportAuthy() throws IOException, DatabaseImporterException, OtpInfoException {\n        List<VaultEntry> entries = importPlain(AuthyImporter.class, \"authy_plain.xml\");\n        checkImportedAuthyEntries(entries);\n    }\n\n    @Test\n    public void testImportAuthyEncrypted() throws IOException, DatabaseImporterException, OtpInfoException {\n        List<VaultEntry> entries = importEncrypted(AuthyImporter.class, \"authy_encrypted.xml\", encryptedState -> {\n            final char[] password = \"testtest\".toCharArray();\n            return ((AuthyImporter.EncryptedState) encryptedState).decrypt(password);\n        });\n\n        checkImportedAuthyEntries(entries);\n    }\n\n    @Test\n    public void testImportBattleNetXml() throws DatabaseImporterException, IOException, OtpInfoException {\n        List<VaultEntry> entries = importPlain(BattleNetImporter.class, \"battle_net_authenticator.xml\");\n\n        for (VaultEntry entry : entries) {\n            checkImportedEntry(entry);\n        }\n    }\n\n    @Test\n    public void testImportBitwardenJson() throws IOException, DatabaseImporterException, OtpInfoException {\n        List<VaultEntry> entries = importPlain(BitwardenImporter.class, \"bitwarden.json\");\n        checkImportedBitwardenEntries(entries);\n    }\n\n    @Test\n    public void testImportBitwardenCsv() throws IOException, DatabaseImporterException, OtpInfoException {\n        List<VaultEntry> entries = importPlain(BitwardenImporter.class, \"bitwarden.csv\");\n        checkImportedBitwardenEntries(entries);\n    }\n\n    @Test\n    public void testImportFreeOtpV1() throws IOException, DatabaseImporterException, OtpInfoException {\n        List<VaultEntry> entries = importPlain(FreeOtpImporter.class, \"freeotp.xml\");\n        checkImportedFreeOtpEntriesV1(entries);\n    }\n\n    @Test\n    public void testImportFreeOtpV2Api23() throws IOException, DatabaseImporterException, OtpInfoException {\n        List<VaultEntry> entries = importEncrypted(FreeOtpImporter.class, \"freeotp_v2_api23.xml\", encryptedState -> {\n            final char[] password = \"test\".toCharArray();\n            return ((FreeOtpImporter.EncryptedState) encryptedState).decrypt(password);\n        });\n        checkImportedEntries(entries);\n    }\n\n    @Test\n    public void testImportFreeOtpV2Api25() throws IOException, DatabaseImporterException, OtpInfoException {\n        List<VaultEntry> entries = importEncrypted(FreeOtpImporter.class, \"freeotp_v2_api25.xml\", encryptedState -> {\n            final char[] password = \"test\".toCharArray();\n            return ((FreeOtpImporter.EncryptedState) encryptedState).decrypt(password);\n        });\n        checkImportedEntries(entries);\n    }\n\n    @Test\n    public void testImportFreeOtpV2Api27() throws IOException, DatabaseImporterException, OtpInfoException {\n        List<VaultEntry> entries = importEncrypted(FreeOtpImporter.class, \"freeotp_v2_api27.xml\", encryptedState -> {\n            final char[] password = \"test\".toCharArray();\n            return ((FreeOtpImporter.EncryptedState) encryptedState).decrypt(password);\n        });\n        checkImportedEntries(entries);\n    }\n\n    @Test\n    public void testImportFreeOtpV2Api34() throws IOException, DatabaseImporterException, OtpInfoException {\n        List<VaultEntry> entries = importEncrypted(FreeOtpImporter.class, \"freeotp_v2_api34.xml\", encryptedState -> {\n            final char[] password = \"test\".toCharArray();\n            return ((FreeOtpImporter.EncryptedState) encryptedState).decrypt(password);\n        });\n        checkImportedEntries(entries);\n    }\n\n    @Test\n    public void testImportFreeOtpV2NullAlgo() throws IOException, DatabaseImporterException, OtpInfoException {\n        List<VaultEntry> entries = importEncrypted(FreeOtpImporter.class, \"freeotp_v2_null_algo.xml\", encryptedState -> {\n            final char[] password = \"test\".toCharArray();\n            return ((FreeOtpImporter.EncryptedState) encryptedState).decrypt(password);\n        });\n        checkImportedEntries(entries);\n    }\n\n    @Test\n    public void testImportFreeOtpPlus() throws IOException, DatabaseImporterException, OtpInfoException {\n        List<VaultEntry> entries = importPlain(FreeOtpPlusImporter.class, \"freeotp_plus.json\");\n        checkImportedFreeOtpEntriesV1(entries);\n    }\n\n    @Test\n    public void testImportFreeOtpPlusInternal() throws IOException, DatabaseImporterException, OtpInfoException {\n        List<VaultEntry> entries = importPlain(FreeOtpPlusImporter.class, \"freeotp_plus_internal.xml\", true);\n        checkImportedFreeOtpEntriesV1(entries);\n    }\n\n    @Test\n    public void testImportGoogleAuthenticator() throws IOException, DatabaseImporterException, OtpInfoException {\n        List<VaultEntry> entries = importPlain(GoogleAuthImporter.class, \"google_authenticator.sqlite\");\n        for (VaultEntry entry : entries) {\n            // Google Authenticator doesn't support different hash algorithms, periods or digits, so fix those up here\n            VaultEntry entryVector = getEntryVectorBySecret(entry.getInfo().getSecret());\n            entryVector.getInfo().setDigits(OtpInfo.DEFAULT_DIGITS);\n            if (entryVector.getInfo() instanceof TotpInfo) {\n                ((TotpInfo) entryVector.getInfo()).setPeriod(TotpInfo.DEFAULT_PERIOD);\n            }\n            entryVector.getInfo().setAlgorithm(OtpInfo.DEFAULT_ALGORITHM);\n            checkImportedEntry(entryVector, entry);\n        }\n    }\n\n    @Test\n    public void testImportMicrosoftAuthenticator() throws IOException, DatabaseImporterException, OtpInfoException {\n        List<VaultEntry> entries = importPlain(MicrosoftAuthImporter.class, \"microsoft_authenticator.sqlite\");\n        for (VaultEntry entry : entries) {\n            // Microsoft Authenticator doesn't support HOTP, different hash algorithms, periods or digits, so fix those up here\n            VaultEntry entryVector = getEntryVectorBySecret(entry.getInfo().getSecret());\n            entryVector.setInfo(new TotpInfo(entryVector.getInfo().getSecret()));\n            checkImportedEntry(entryVector, entry);\n        }\n    }\n\n    @Test\n    public void testImportSteam() throws IOException, DatabaseImporterException, OtpInfoException {\n        List<VaultEntry> entries = importPlain(SteamImporter.class, \"steam.json\");\n        for (VaultEntry entry : entries) {\n            VaultEntry entryVector = getEntryVectorBySecret(entry.getInfo().getSecret());\n            entryVector.setIssuer(\"Steam\");\n            checkImportedEntry(entryVector, entry);\n        }\n    }\n\n    @Test\n    public void testImportSteamOld() throws IOException, DatabaseImporterException, OtpInfoException {\n        List<VaultEntry> entries = importPlain(SteamImporter.class, \"steam_old.json\");\n        for (VaultEntry entry : entries) {\n            VaultEntry entryVector = getEntryVectorBySecret(entry.getInfo().getSecret());\n            entryVector.setIssuer(\"Steam\");\n            checkImportedEntry(entryVector, entry);\n        }\n    }\n\n    @Test\n    public void testImportAuthenticatorPlus() throws IOException, DatabaseImporterException, OtpInfoException {\n        List<VaultEntry> entries = importEncrypted(AuthenticatorPlusImporter.class, \"authenticator_plus.zip\", encryptedState -> {\n            final char[] password = \"testtesttest\".toCharArray();\n            return ((AuthenticatorPlusImporter.EncryptedState) encryptedState).decrypt(password);\n        });\n\n        checkImportedEntries(entries);\n    }\n\n    @Test\n    public void testImportTwoFASAuthenticatorSchema1() throws DatabaseImporterException, IOException, OtpInfoException {\n        List<VaultEntry> entries = importPlain(TwoFASImporter.class, \"2fas_authenticator.json\");\n        for (VaultEntry entry : entries) {\n            // 2FAS Authenticator schema v1 doesn't support HOTP, different hash algorithms, periods or digits, so fix those up here\n            VaultEntry entryVector = getEntryVectorBySecret(entry.getInfo().getSecret());\n            entryVector.setInfo(new TotpInfo(entryVector.getInfo().getSecret()));\n            checkImportedEntry(entryVector, entry);\n        }\n    }\n\n    @Test\n    public void testImportTwoFASAuthenticatorSchema2Plain() throws DatabaseImporterException, IOException, OtpInfoException {\n        List<VaultEntry> entries = importPlain(TwoFASImporter.class, \"2fas_authenticator_plain.2fas\");\n        checkImportedTwoFASSchema2Entries(entries);\n    }\n\n    @Test\n    public void testImportTwoFASAuthenticatorSchema2Encrypted() throws DatabaseImporterException, IOException, OtpInfoException {\n        List<VaultEntry> entries = importEncrypted(TwoFASImporter.class, \"2fas_authenticator_encrypted.2fas\", encryptedState -> {\n            final char[] password = \"test\".toCharArray();\n            return ((TwoFASImporter.EncryptedState) encryptedState).decrypt(password);\n        });\n        checkImportedTwoFASSchema2Entries(entries);\n    }\n\n    @Test\n    public void testImportTwoFASAuthenticatorSchema3Plain() throws DatabaseImporterException, IOException, OtpInfoException {\n        List<VaultEntry> entries = importPlain(TwoFASImporter.class, \"2fas_authenticator_plain_v3.2fas\");\n        checkImportedEntries(entries);\n    }\n\n    @Test\n    public void testImportTwoFASAuthenticatorSchema3Encrypted() throws DatabaseImporterException, IOException, OtpInfoException {\n        List<VaultEntry> entries = importEncrypted(TwoFASImporter.class, \"2fas_authenticator_encrypted_v3.2fas\", encryptedState -> {\n            final char[] password = \"test\".toCharArray();\n            return ((TwoFASImporter.EncryptedState) encryptedState).decrypt(password);\n        });\n        checkImportedEntries(entries);\n    }\n\n    @Test\n    public void testImportTwoFASAuthenticatorSchema4Plain() throws DatabaseImporterException, IOException, OtpInfoException {\n        List<VaultEntry> entries = importPlain(TwoFASImporter.class, \"2fas_authenticator_plain_v4.2fas\");\n        checkImportedEntries(entries);\n    }\n\n    @Test\n    public void testImportTwoFASAuthenticatorSchema4Encrypted() throws DatabaseImporterException, IOException, OtpInfoException {\n        List<VaultEntry> entries = importEncrypted(TwoFASImporter.class, \"2fas_authenticator_encrypted_v4.2fas\", encryptedState -> {\n            final char[] password = \"test\".toCharArray();\n            return ((TwoFASImporter.EncryptedState) encryptedState).decrypt(password);\n        });\n        checkImportedEntries(entries);\n    }\n\n    @Test\n    public void testImportProtonAuthenticator() throws IOException, DatabaseImporterException, OtpInfoException {\n        List<VaultEntry> entries = importPlain(ProtonAuthenticatorImporter.class, \"proton_authenticator.json\");\n        checkImportedEntries(entries);\n    }\n\n    private List<VaultEntry> importPlain(Class<? extends DatabaseImporter> type, String resName)\n            throws IOException, DatabaseImporterException {\n        return importPlain(type, resName, false);\n    }\n\n    private List<VaultEntry> importPlain(Class<? extends DatabaseImporter> type, String resName, boolean isInternal)\n            throws IOException, DatabaseImporterException {\n        Context context = ApplicationProvider.getApplicationContext();\n        DatabaseImporter importer = DatabaseImporter.create(context, type);\n        try (InputStream stream = openResource(resName)) {\n            DatabaseImporter.State state = importer.read(stream, isInternal);\n            assertFalse(state.isEncrypted());\n            DatabaseImporter.Result result = state.convert();\n            return Lists.newArrayList(getEntries(result));\n        }\n    }\n\n    private List<VaultEntry> importEncrypted(Class<? extends DatabaseImporter> type, String resName, Decryptor decryptor)\n            throws IOException, DatabaseImporterException {\n        return importEncrypted(type, resName, false, decryptor);\n    }\n\n    private List<VaultEntry> importEncrypted(Class<? extends DatabaseImporter> type, String resName, boolean isInternal, Decryptor decryptor)\n            throws IOException, DatabaseImporterException {\n        Context context = ApplicationProvider.getApplicationContext();\n        DatabaseImporter importer = DatabaseImporter.create(context, type);\n        try (InputStream stream = openResource(resName)) {\n            DatabaseImporter.State state = importer.read(stream, isInternal);\n            assertTrue(state.isEncrypted());\n            DatabaseImporter.Result result = decryptor.decrypt(state).convert();\n            return Lists.newArrayList(getEntries(result));\n        }\n    }\n\n    private static UUIDMap<VaultEntry> getEntries(DatabaseImporter.Result result) {\n        for (DatabaseImporterEntryException e : result.getErrors()) {\n            fail(e.toString());\n        }\n\n        return result.getEntries();\n    }\n\n    private void checkImportedTwoFASSchema2Entries(List<VaultEntry> entries) throws OtpInfoException {\n        for (VaultEntry entry : entries) {\n            // 2FAS Authenticator doesn't support certain features, so fix those entries up here\n            VaultEntry entryVector = getEntryVectorBySecret(entry.getInfo().getSecret());\n            OtpInfo info = entryVector.getInfo();\n            int period = TotpInfo.DEFAULT_PERIOD;\n            if (info instanceof TotpInfo) {\n                period = ((TotpInfo) info).getPeriod();\n            }\n            entryVector.setInfo(new TotpInfo(info.getSecret(), info.getAlgorithm(false), info.getDigits(), period));\n            checkImportedEntry(entryVector, entry);\n        }\n    }\n\n    private void checkImportedAuthyEntries(List<VaultEntry> entries) throws OtpInfoException {\n        for (VaultEntry entry : entries) {\n            // Authy doesn't support different hash algorithms or periods, so fix those up here\n            VaultEntry entryVector = getEntryVectorBySecret(entry.getInfo().getSecret());\n            entryVector.getInfo().setAlgorithm(OtpInfo.DEFAULT_ALGORITHM);\n            ((TotpInfo) entry.getInfo()).setPeriod(((TotpInfo) entryVector.getInfo()).getPeriod());\n            checkImportedEntry(entryVector, entry);\n        }\n    }\n\n    private void checkImportedTotpAuthenticatorEntries(List<VaultEntry> entries) throws OtpInfoException {\n        for (VaultEntry entry : entries) {\n            // TOTP Authenticator doesn't support different hash algorithms, periods or digits, so fix those up here\n            VaultEntry entryVector = getEntryVectorBySecret(entry.getInfo().getSecret());\n            entryVector.getInfo().setDigits(OtpInfo.DEFAULT_DIGITS);\n            ((TotpInfo) entryVector.getInfo()).setPeriod(TotpInfo.DEFAULT_PERIOD);\n            entryVector.getInfo().setAlgorithm(OtpInfo.DEFAULT_ALGORITHM);\n            entryVector.setName(entryVector.getName().toLowerCase());\n            checkImportedEntry(entryVector, entry);\n        }\n    }\n\n    private void checkImportedFreeOtpEntriesV1(List<VaultEntry> entries) throws OtpInfoException {\n        for (VaultEntry entry : entries) {\n            // for some reason, FreeOTP adds -1 to the counter\n            VaultEntry entryVector = getEntryVectorBySecret(entry.getInfo().getSecret());\n            if (entryVector.getInfo() instanceof HotpInfo) {\n                ((HotpInfo) entryVector.getInfo()).setCounter(((HotpInfo) entryVector.getInfo()).getCounter() - 1);\n            }\n            checkImportedEntry(entryVector, entry);\n        }\n    }\n\n    private void checkImportedBitwardenEntries(List<VaultEntry> entries) throws OtpInfoException {\n        byte[] secret, vectorSecret;\n        for (VaultEntry entry : entries) {\n            if(entry.getInfo().getTypeId().equals(SteamInfo.ID)) {\n                secret = entry.getInfo().getSecret();\n                vectorSecret = getEntryVectorBySecret(secret).getInfo().getSecret();\n                assertNotNull(String.format(\"Steam secret has not been found (%s)\", vectorSecret));\n            } else {\n                checkImportedEntry(entry);\n            }\n        }\n    }\n\n    private void checkImportedEntries(List<VaultEntry> entries) throws OtpInfoException {\n        for (VaultEntry entry : entries) {\n            checkImportedEntry(entry);\n        }\n    }\n\n    private void checkImportedEntry(VaultEntry entry) throws OtpInfoException {\n        VaultEntry entryVector = getEntryVectorBySecret(entry.getInfo().getSecret());\n        checkImportedEntry(entryVector, entry);\n    }\n\n    private void checkImportedEntry(VaultEntry entryVector, VaultEntry entry) throws OtpInfoException {\n        String message = String.format(\"Entries are not equivalent: (%s) (%s)\", entryVector.toJson().toString(), entry.toJson().toString());\n        assertTrue(message, entryVector.equivalates(entry));\n        assertEquals(message, entryVector.getInfo().getOtp(), entry.getInfo().getOtp());\n    }\n\n    private VaultEntry getEntryVectorBySecret(byte[] secret) {\n        for (VaultEntry entry : _vectors) {\n            if (Arrays.equals(entry.getInfo().getSecret(), secret)) {\n                return entry;\n            }\n        }\n\n        fail(String.format(\"No entry found for secret: %s\", Base32.encode(secret)));\n        return null;\n    }\n\n    private InputStream openResource(String name) {\n        return getClass().getResourceAsStream(name);\n    }\n\n    private interface Decryptor {\n        DatabaseImporter.State decrypt(DatabaseImporter.State encryptedState) throws DatabaseImporterException;\n    }\n}\n"
  },
  {
    "path": "app/src/test/java/com/beemdevelopment/aegis/otp/GoogleAuthInfoTest.java",
    "content": "package com.beemdevelopment.aegis.otp;\n\nimport static org.junit.Assert.assertThrows;\n\nimport org.junit.Test;\nimport org.junit.runner.RunWith;\nimport org.robolectric.RobolectricTestRunner;\n\n@RunWith(RobolectricTestRunner.class)\npublic class GoogleAuthInfoTest {\n    @Test\n    public void testGoogleAuthInfoEmptySecret() throws GoogleAuthInfoException {\n        String uri = \"otpauth://totp/test:test?secret=%s&algo=SHA1&digits=6&period=30\";\n        GoogleAuthInfo.parseUri(String.format(uri, \"AA\"));\n        assertThrows(GoogleAuthInfoException.class, () -> GoogleAuthInfo.parseUri(String.format(uri, \"\")));\n    }\n\n    @Test\n    public void testOtpInfoEmptySecret() throws OtpInfoException {\n        OtpInfo info = new TotpInfo(new byte[0]);\n        assertThrows(OtpInfoException.class, info::getOtp);\n        info = new HotpInfo(new byte[0]);\n        assertThrows(OtpInfoException.class, info::getOtp);\n        info = new SteamInfo(new byte[0]);\n        assertThrows(OtpInfoException.class, info::getOtp);\n    }\n}\n"
  },
  {
    "path": "app/src/test/java/com/beemdevelopment/aegis/otp/HotpInfoTest.java",
    "content": "package com.beemdevelopment.aegis.otp;\n\nimport static org.junit.Assert.assertEquals;\n\nimport com.beemdevelopment.aegis.crypto.otp.HOTPTest;\n\nimport org.junit.Test;\n\npublic class HotpInfoTest {\n    @Test\n    public void testHotpInfoOtp() throws OtpInfoException {\n        for (int i = 0; i < HOTPTest.VECTORS.length; i++) {\n            HotpInfo info = new HotpInfo(HOTPTest.SECRET, OtpInfo.DEFAULT_ALGORITHM, OtpInfo.DEFAULT_DIGITS, i);\n            assertEquals(info.getOtp(), HOTPTest.VECTORS[i]);\n        }\n    }\n\n    @Test\n    public void testHotpMd5Override() throws OtpInfoException {\n        final byte[] secret = new byte[]{1, 2, 3, 4};\n        MotpInfo motpInfo = new MotpInfo(secret, \"1234\");\n        motpInfo = (MotpInfo) OtpInfo.fromJson(\"motp\", motpInfo.toJson());\n        assertEquals(\"MD5\", motpInfo.getAlgorithm(false));\n\n        HotpInfo info = new HotpInfo(secret);\n        info.setAlgorithm(\"MD5\");\n        info = (HotpInfo) OtpInfo.fromJson(\"hotp\", info.toJson());\n        assertEquals(OtpInfo.DEFAULT_ALGORITHM, info.getAlgorithm(false));\n\n        info.setAlgorithm(\"SHA256\");\n        info = (HotpInfo) OtpInfo.fromJson(\"hotp\", info.toJson());\n        assertEquals(\"SHA256\", info.getAlgorithm(false));\n    }\n}\n"
  },
  {
    "path": "app/src/test/java/com/beemdevelopment/aegis/otp/MotpInfoTest.java",
    "content": "package com.beemdevelopment.aegis.otp;\n\nimport static org.junit.Assert.assertEquals;\n\nimport com.beemdevelopment.aegis.crypto.otp.MOTPTest;\nimport com.beemdevelopment.aegis.encoding.EncodingException;\nimport com.beemdevelopment.aegis.encoding.Hex;\n\nimport org.junit.Test;\n\npublic class MotpInfoTest {\n    @Test\n    public void testMotpInfoOtp() throws OtpInfoException, EncodingException {\n        for (MOTPTest.Vector vector : MOTPTest.VECTORS) {\n            MotpInfo info = new MotpInfo(Hex.decode(vector.Secret), vector.Pin);\n            assertEquals(vector.OTP, info.getOtp(vector.Time));\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/test/java/com/beemdevelopment/aegis/otp/TotpInfoTest.java",
    "content": "package com.beemdevelopment.aegis.otp;\n\nimport static org.junit.Assert.assertEquals;\n\nimport com.beemdevelopment.aegis.crypto.otp.TOTPTest;\n\nimport org.junit.Test;\n\npublic class TotpInfoTest {\n    @Test\n    public void testTotpInfoOtp() throws OtpInfoException {\n        for (TOTPTest.Vector vector : TOTPTest.VECTORS) {\n            byte[] seed = TOTPTest.getSeed(vector.Algo);\n            TotpInfo info = new TotpInfo(seed, vector.Algo, 8, TotpInfo.DEFAULT_PERIOD);\n            assertEquals(vector.OTP, info.getOtp(vector.Time));\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/test/java/com/beemdevelopment/aegis/otp/YandexInfoTest.java",
    "content": "package com.beemdevelopment.aegis.otp;\n\nimport static org.junit.Assert.assertThrows;\n\nimport com.beemdevelopment.aegis.encoding.Base32;\nimport com.beemdevelopment.aegis.encoding.EncodingException;\n\nimport org.junit.Test;\n\npublic class YandexInfoTest {\n    private static final String[] vectors = new String[]{\n            \"LA2V6KMCGYMWWVEW64RNP3JA3IAAAAAAHTSG4HRZPI\", // correct\n            \"LA2V6KMCGYMWWVEW64RNP3JA3I\",                 // secret from QR - no validation\n            \"AA2V6KMCGYMWWVEW64RNP3JA3IAAAAAAHTSG4HRZPI\", // first letter is different\n            \"AA2V6KMCGJA3IAAAAAAHTSG4HRZPI\"               // size is wrong\n    };\n\n    @Test(expected = Test.None.class)\n    public void testYandexSecretValidationOk() throws EncodingException, OtpInfoException {\n        YandexInfo.validateSecret(getBase32Vector(0));\n        YandexInfo.validateSecret(getBase32Vector(1));\n    }\n\n    @Test\n    public void testYandexSecretValidation() {\n        assertThrows(OtpInfoException.class, () -> YandexInfo.validateSecret(getBase32Vector(2)));\n        assertThrows(OtpInfoException.class, () -> YandexInfo.validateSecret(getBase32Vector(3)));\n    }\n\n    private byte[] getBase32Vector(int vectorIndex) throws EncodingException {\n        return Base32.decode(vectors[vectorIndex]);\n    }\n}\n"
  },
  {
    "path": "app/src/test/java/com/beemdevelopment/aegis/util/UUIDMapTest.java",
    "content": "package com.beemdevelopment.aegis.util;\n\nimport static org.junit.Assert.assertArrayEquals;\nimport static org.junit.Assert.assertEquals;\nimport static org.junit.Assert.assertFalse;\nimport static org.junit.Assert.assertSame;\nimport static org.junit.Assert.assertThrows;\nimport static org.junit.Assert.assertTrue;\n\nimport org.junit.Test;\n\npublic class UUIDMapTest {\n    @Test\n    public void addValue() {\n        // try adding a new value\n        UUIDMap<Value> map = new UUIDMap<>();\n        Value value = addNewValue(map);\n\n        // try re-adding the value\n        assertThrows(AssertionError.class, () -> map.add(value));\n\n        // try adding a clone of the value\n        assertThrows(AssertionError.class, () -> map.add(Cloner.clone(value)));\n    }\n\n    @Test\n    public void removeValue() {\n        // try removing a value\n        UUIDMap<Value> map = new UUIDMap<>();\n        final Value value = addNewValue(map);\n        Value oldValue = map.remove(value);\n        assertFalse(map.has(value));\n\n        // ensure we got the original value back\n        assertEquals(value, oldValue);\n\n        // try removing a non-existent value\n        assertThrows(AssertionError.class, () -> map.remove(value));\n\n        // try removing a value using a clone\n        Value value2 = addNewValue(map);\n        map.remove(Cloner.clone(value2));\n        assertFalse(map.has(value2));\n    }\n\n    @Test\n    public void replaceValue() {\n        UUIDMap<Value> map = new UUIDMap<>();\n        Value value = addNewValue(map);\n\n        // replace the value with a clone\n        Value valueClone = Cloner.clone(value);\n        Value oldValue = map.replace(valueClone);\n\n        // ensure we got the original value back\n        assertEquals(value, oldValue);\n\n        // ensure that the clone is now stored in the map\n        assertSame(map.getByUUID(value.getUUID()), valueClone);\n    }\n\n    @Test\n    public void moveValue() {\n        // move the first value to the last value\n        UUIDMap<Value> map = fillNewMap(4);\n        Value[] values = map.getValues().toArray(new Value[0]);\n        map.move(values[0], values[3]);\n        assertArrayEquals(map.getValues().toArray(new Value[0]), new Value[]{\n                values[1],\n                values[2],\n                values[3],\n                values[0]\n        });\n\n        // move the last value to the first value\n        map = fillNewMap(4);\n        values = map.getValues().toArray(new Value[0]);\n        map.move(values[3], values[0]);\n        assertArrayEquals(map.getValues().toArray(new Value[0]), new Value[]{\n                values[3],\n                values[0],\n                values[1],\n                values[2]\n        });\n\n        // move the second value to the third value\n        map = fillNewMap(4);\n        values = map.getValues().toArray(new Value[0]);\n        map.move(values[1], values[2]);\n        assertArrayEquals(map.getValues().toArray(new Value[0]), new Value[]{\n                values[0],\n                values[2],\n                values[1],\n                values[3]\n        });\n\n        // move the third value to the second value\n        map = fillNewMap(4);\n        values = map.getValues().toArray(new Value[0]);\n        map.move(values[2], values[1]);\n        assertArrayEquals(map.getValues().toArray(new Value[0]), new Value[]{\n                values[0],\n                values[2],\n                values[1],\n                values[3]\n        });\n\n        // move the third value to the first value\n        map = fillNewMap(4);\n        values = map.getValues().toArray(new Value[0]);\n        map.move(values[2], values[0]);\n        assertArrayEquals(map.getValues().toArray(new Value[0]), new Value[]{\n                values[2],\n                values[0],\n                values[1],\n                values[3]\n        });\n    }\n\n    private UUIDMap<Value> fillNewMap(int n) {\n        UUIDMap<Value> map = new UUIDMap<>();\n        for (int i = 0; i < n; i++) {\n            addNewValue(map);\n        }\n        return map;\n    }\n\n    private Value addNewValue(UUIDMap<Value> map) {\n        Value value = new Value();\n        assertFalse(map.has(value));\n        map.add(value);\n        assertTrue(map.has(value));\n        return value;\n    }\n\n    private static class Value extends UUIDMap.Value {\n\n    }\n}\n"
  },
  {
    "path": "app/src/test/java/com/beemdevelopment/aegis/vault/VaultTest.java",
    "content": "package com.beemdevelopment.aegis.vault;\n\nimport static org.junit.Assert.assertEquals;\n\nimport com.beemdevelopment.aegis.util.IOUtils;\n\nimport org.junit.Test;\n\nimport java.io.IOException;\nimport java.io.InputStream;\nimport java.util.List;\nimport java.util.stream.Collectors;\n\npublic class VaultTest {\n    @Test\n    public void testGroupConversion()\n            throws IOException, VaultFileException, VaultException {\n        Vault vault;\n        try (InputStream inStream = getClass().getResourceAsStream(\"aegis_plain_grouped_v2.json\")) {\n            byte[] bytes = IOUtils.readAll(inStream);\n            VaultFile file = VaultFile.fromBytes(bytes);\n            vault = Vault.fromJson(file.getContent());\n        }\n\n        checkGroups(vault);\n\n        // After saving to and loading from the new format, the same checks should still pass\n        vault = Vault.fromJson(vault.toJson());\n        checkGroups(vault);\n    }\n\n    private static void checkGroups(Vault vault) {\n        // No old groups should be present anymore\n        assertEquals(0, vault.getEntries().getValues().stream()\n                .filter(e -> e.getOldGroup() != null)\n                .count());\n\n        // New groups should have been created, and groups with the same name\n        // should have been merged into a single group\n        assertEquals(2, vault.getGroups().getValues().size());\n\n        // Only one group with name group1\n        List<VaultGroup> foundGroups = vault.getGroups().getValues().stream()\n                .filter(g -> g.getName().equals(\"group1\"))\n                .collect(Collectors.toList());\n        assertEquals(1, foundGroups.size());\n        VaultGroup group1 = foundGroups.get(0);\n\n        // Only one group with name group2\n        foundGroups = vault.getGroups().getValues().stream()\n                .filter(g -> g.getName().equals(\"group2\"))\n                .collect(Collectors.toList());\n        assertEquals(1, foundGroups.size());\n        VaultGroup group2 = foundGroups.get(0);\n\n        // Two entries in group1\n        assertEquals(2, vault.getEntries().getValues().stream()\n                .filter(e -> e.getGroups().contains(group1.getUUID()))\n                .count());\n\n        // One entry in group2\n        assertEquals(1, vault.getEntries().getValues().stream()\n                .filter(e -> e.getGroups().contains(group2.getUUID()))\n                .count());\n\n        // Rest of the entries in no groups\n        assertEquals(vault.getEntries().getValues().size() - 3, vault.getEntries().getValues().stream()\n                .filter(e -> e.getGroups().isEmpty())\n                .count());\n    }\n}\n"
  },
  {
    "path": "app/src/test/java/com/beemdevelopment/aegis/vault/slots/SlotTest.java",
    "content": "package com.beemdevelopment.aegis.vault.slots;\n\nimport static org.junit.Assert.assertArrayEquals;\nimport static org.junit.Assert.assertThrows;\n\nimport com.beemdevelopment.aegis.crypto.CryptoUtils;\nimport com.beemdevelopment.aegis.crypto.MasterKey;\nimport com.beemdevelopment.aegis.crypto.SCryptParameters;\n\nimport org.junit.Before;\nimport org.junit.Test;\n\nimport java.security.InvalidAlgorithmParameterException;\nimport java.security.InvalidKeyException;\nimport java.security.NoSuchAlgorithmException;\n\nimport javax.crypto.Cipher;\nimport javax.crypto.NoSuchPaddingException;\nimport javax.crypto.SecretKey;\nimport javax.crypto.spec.SecretKeySpec;\n\npublic class SlotTest {\n    private MasterKey _masterKey;\n\n    @Before\n    public void init() {\n        _masterKey = MasterKey.generate();\n    }\n\n    @Test\n    public void testRawSlotCrypto() throws\n            InvalidAlgorithmParameterException, NoSuchAlgorithmException,\n            InvalidKeyException, NoSuchPaddingException,\n            SlotException, SlotIntegrityException {\n        RawSlot slot = new RawSlot();\n        SecretKey rawKey = CryptoUtils.generateKey();\n        Cipher cipher = CryptoUtils.createEncryptCipher(rawKey);\n        slot.setKey(_masterKey, cipher);\n\n        cipher = slot.createDecryptCipher(rawKey);\n        MasterKey decryptedKey = slot.getKey(cipher);\n\n        assertArrayEquals(_masterKey.getBytes(), decryptedKey.getBytes());\n    }\n\n    @Test\n    public void testPasswordSlotCrypto() throws\n            InvalidAlgorithmParameterException, NoSuchAlgorithmException,\n            InvalidKeyException, NoSuchPaddingException,\n            SlotException, SlotIntegrityException {\n        final char[] password = \"test\".toCharArray();\n        final SCryptParameters scryptParams = new SCryptParameters(\n                CryptoUtils.CRYPTO_SCRYPT_N,\n                CryptoUtils.CRYPTO_SCRYPT_p,\n                CryptoUtils.CRYPTO_SCRYPT_r,\n                new byte[CryptoUtils.CRYPTO_AEAD_KEY_SIZE]\n        );\n\n        PasswordSlot slot = new PasswordSlot();\n        SecretKey passwordKey = slot.deriveKey(password, scryptParams);\n        Cipher cipher = CryptoUtils.createEncryptCipher(passwordKey);\n        slot.setKey(_masterKey, cipher);\n\n        cipher = slot.createDecryptCipher(passwordKey);\n        MasterKey decryptedKey = slot.getKey(cipher);\n\n        assertArrayEquals(_masterKey.getBytes(), decryptedKey.getBytes());\n    }\n\n    @Test\n    public void testSlotIntegrity() throws\n            InvalidAlgorithmParameterException, NoSuchAlgorithmException,\n            InvalidKeyException, NoSuchPaddingException,\n            SlotException, SlotIntegrityException {\n        RawSlot slot = new RawSlot();\n        SecretKey rawKey = CryptoUtils.generateKey();\n        Cipher cipher = CryptoUtils.createEncryptCipher(rawKey);\n        slot.setKey(_masterKey, cipher);\n\n        // try to decrypt with good key/ciphertext first\n        final Cipher decryptCipher = slot.createDecryptCipher(rawKey);\n        slot.getKey(decryptCipher);\n\n        // garble the first byte of the key and try to decrypt\n        byte[] garbledKeyBytes = rawKey.getEncoded();\n        garbledKeyBytes[0] = (byte) ~garbledKeyBytes[0];\n        SecretKey garbledKey = new SecretKeySpec(garbledKeyBytes, \"AES\");\n        final Cipher garbledDecryptCipher = slot.createDecryptCipher(garbledKey);\n        assertThrows(SlotIntegrityException.class, () -> slot.getKey(garbledDecryptCipher));\n\n        // garble the first byte of the ciphertext and try to decrypt\n        byte[] garbledCiphertext = slot.getEncryptedMasterKey();\n        garbledCiphertext[0] = (byte) ~garbledCiphertext[0];\n        assertThrows(SlotIntegrityException.class, () -> slot.getKey(decryptCipher));\n    }\n\n    @Test\n    public void testNonExportableSlotsExclusion() {\n        // If a backup password slot, multiple regular password slots and a biometric slot are present:\n        // -> The Regular password slots and the biometric slot get stripped\n        Slot passwordSlot = new PasswordSlot();\n        Slot passwordSlot2 = new PasswordSlot();\n        Slot biometricSlot = new BiometricSlot();\n        PasswordSlot backupSlot = new PasswordSlot();\n        backupSlot.setIsBackup(true);\n        SlotList slots = new SlotList();\n        slots.add(passwordSlot);\n        slots.add(passwordSlot2);\n        slots.add(biometricSlot);\n        slots.add(backupSlot);\n        SlotList actual = slots.exportable();\n        SlotList expected = new SlotList();\n        expected.add(backupSlot);\n        assertArrayEquals(expected.getValues().toArray(), actual.getValues().toArray());\n\n        // If a backup password slot, a regular password slot and a biometric slot are present:\n        // -> The Regular password slot and the biometric slot get stripped\n        slots = new SlotList();\n        slots.add(passwordSlot);\n        slots.add(biometricSlot);\n        slots.add(backupSlot);\n        actual = slots.exportable();\n        expected = new SlotList();\n        expected.add(backupSlot);\n        assertArrayEquals(expected.getValues().toArray(), actual.getValues().toArray());\n\n        // If a backup password slot and a regular password slot are present:\n        // -> The regular password slot get stripped\n        slots = new SlotList();\n        slots.add(passwordSlot);\n        slots.add(backupSlot);\n        actual = slots.exportable();\n        expected = new SlotList();\n        expected.add(backupSlot);\n        assertArrayEquals(expected.getValues().toArray(), actual.getValues().toArray());\n\n        // If a backup password slot and multiple regular password slot are present:\n        // -> The regular password slots get stripped\n        slots = new SlotList();\n        slots.add(passwordSlot);\n        slots.add(passwordSlot2);\n        slots.add(backupSlot);\n        actual = slots.exportable();\n        expected = new SlotList();\n        expected.add(backupSlot);\n        assertArrayEquals(expected.getValues().toArray(), actual.getValues().toArray());\n\n        // If multiple regular password slots and a biometric slot are present:\n        // -> The biometric slot gets stripped\n        slots = new SlotList();\n        slots.add(passwordSlot);\n        slots.add(passwordSlot2);\n        slots.add(biometricSlot);\n        actual = slots.exportable();\n        expected = new SlotList();\n        expected.add(passwordSlot);\n        expected.add(passwordSlot2);\n        assertArrayEquals(expected.getValues().toArray(), actual.getValues().toArray());\n\n        // If a regular password slot and a biometric slot are present\n        // -> The biometric slot gets stripped\n        slots = new SlotList();\n        slots.add(passwordSlot);\n        slots.add(biometricSlot);\n        actual = slots.exportable();\n        expected = new SlotList();\n        expected.add(passwordSlot);\n        assertArrayEquals(expected.getValues().toArray(), actual.getValues().toArray());\n\n        // If a regular password slot is present\n        // -> No slots get stripped\n        slots = new SlotList();\n        slots.add(passwordSlot);\n        actual = slots.exportable();\n        expected = new SlotList();\n        expected.add(passwordSlot);\n        assertArrayEquals(expected.getValues().toArray(), actual.getValues().toArray());\n    }\n}\n"
  },
  {
    "path": "app/src/test/java/com/beemdevelopment/aegis/vectors/VaultEntries.java",
    "content": "package com.beemdevelopment.aegis.vectors;\n\nimport com.beemdevelopment.aegis.encoding.Base32;\nimport com.beemdevelopment.aegis.encoding.EncodingException;\nimport com.beemdevelopment.aegis.otp.HotpInfo;\nimport com.beemdevelopment.aegis.otp.OtpInfoException;\nimport com.beemdevelopment.aegis.otp.SteamInfo;\nimport com.beemdevelopment.aegis.otp.TotpInfo;\nimport com.beemdevelopment.aegis.vault.VaultEntry;\nimport com.google.common.collect.Lists;\n\nimport java.util.List;\n\npublic class VaultEntries {\n    private VaultEntries() {\n\n    }\n\n    public static List<VaultEntry> get() {\n        try {\n            return Lists.newArrayList(\n                    new VaultEntry(new TotpInfo(Base32.decode(\"4SJHB4GSD43FZBAI7C2HLRJGPQ\")), \"Mason\", \"Deno\"),\n                    new VaultEntry(new TotpInfo(Base32.decode(\"5OM4WOOGPLQEF6UGN3CPEOOLWU\"), \"SHA256\", 7, 20), \"James\", \"SPDX\"),\n                    new VaultEntry(new TotpInfo(Base32.decode(\"7ELGJSGXNCCTV3O6LKJWYFV2RA\"), \"SHA512\", 8, 50), \"Elijah\", \"Airbnb\"),\n                    new VaultEntry(new HotpInfo(Base32.decode(\"YOOMIXWS5GN6RTBPUFFWKTW5M4\"), \"SHA1\", 6, 1), \"James\", \"Issuu\"),\n                    new VaultEntry(new HotpInfo(Base32.decode(\"KUVJJOM753IHTNDSZVCNKL7GII\"), \"SHA256\", 7, 50), \"Benjamin\", \"Air Canada\"),\n                    new VaultEntry(new HotpInfo(Base32.decode(\"5VAML3X35THCEBVRLV24CGBKOY\"), \"SHA512\", 8, 10300), \"Mason\", \"WWE\"),\n                    new VaultEntry(new SteamInfo(Base32.decode(\"JRZCL47CMXVOQMNPZR2F7J4RGI\"), \"SHA1\", 5, 30), \"Sophia\", \"Boeing\"),\n                    new VaultEntry(new TotpInfo(Base32.decode(\"BMGRXPGFARQQF4GMT25JATL2VYLAHDBI\"), \"SHA1\", 8, 30), \"US-2211-2050-3346\", \"Battle.net\")\n            );\n        } catch (OtpInfoException | EncodingException e) {\n            throw new RuntimeException(e);\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/test/resources/com/beemdevelopment/aegis/importers/2fas_authenticator.json",
    "content": "{\n  \"appOrigin\": \"android\",\n  \"appVersionCode\": 300101,\n  \"appVersionName\": \"3.1.1\",\n  \"schemaVersion\": 1,\n  \"services\": [\n    {\n      \"name\": \"Deno\",\n      \"order\": {\n        \"position\": 0\n      },\n      \"otp\": {\n        \"account\": \"Mason\",\n        \"issuer\": \"Deno\",\n        \"label\": \"Deno:Mason\"\n      },\n      \"secret\": \"4SJHB4GSD43FZBAI7C2HLRJGPQ\",\n      \"type\": \"Unknown\",\n      \"updatedAt\": 1618417205843\n    },\n    {\n      \"name\": \"SPDX\",\n      \"order\": {\n        \"position\": 1\n      },\n      \"otp\": {\n        \"account\": \"James\",\n        \"issuer\": \"SPDX\",\n        \"label\": \"SPDX:James\"\n      },\n      \"secret\": \"5OM4WOOGPLQEF6UGN3CPEOOLWU\",\n      \"type\": \"Unknown\",\n      \"updatedAt\": 1618417216085\n    },\n    {\n      \"name\": \"Airbnb\",\n      \"order\": {\n        \"position\": 2\n      },\n      \"otp\": {\n        \"account\": \"Elijah\",\n        \"issuer\": \"Airbnb\",\n        \"label\": \"Airbnb:Elijah\"\n      },\n      \"secret\": \"7ELGJSGXNCCTV3O6LKJWYFV2RA\",\n      \"type\": \"Unknown\",\n      \"updatedAt\": 1618417225267\n    },\n    {\n      \"name\": \"Issuu\",\n      \"order\": {\n        \"position\": 3\n      },\n      \"otp\": {\n        \"account\": \"James\",\n        \"issuer\": \"Issuu\",\n        \"label\": \"Issuu:James\"\n      },\n      \"secret\": \"YOOMIXWS5GN6RTBPUFFWKTW5M4\",\n      \"type\": \"Unknown\",\n      \"updatedAt\": 1618417234252\n    },\n    {\n      \"name\": \"Air Canada\",\n      \"order\": {\n        \"position\": 4\n      },\n      \"otp\": {\n        \"account\": \"Benjamin\",\n        \"issuer\": \"Air Canada\",\n        \"label\": \"Air Canada:Benjamin\"\n      },\n      \"secret\": \"KUVJJOM753IHTNDSZVCNKL7GII\",\n      \"type\": \"Unknown\",\n      \"updatedAt\": 1618417242537\n    },\n    {\n      \"name\": \"WWE\",\n      \"order\": {\n        \"position\": 5\n      },\n      \"otp\": {\n        \"account\": \"Mason\",\n        \"issuer\": \"WWE\",\n        \"label\": \"WWE:Mason\"\n      },\n      \"secret\": \"5VAML3X35THCEBVRLV24CGBKOY\",\n      \"type\": \"Unknown\",\n      \"updatedAt\": 1618417253862\n    }\n  ],\n  \"updatedAt\": 1618417377507\n}"
  },
  {
    "path": "app/src/test/resources/com/beemdevelopment/aegis/importers/2fas_authenticator_encrypted.2fas",
    "content": "{\n  \"services\": [],\n  \"updatedAt\": 1644513883359,\n  \"schemaVersion\": 2,\n  \"appVersionCode\": 3080200,\n  \"appVersionName\": \"3.8.2\",\n  \"appOrigin\": \"android\",\n  \"groups\": [],\n  \"servicesEncrypted\": \"5UGWlz8mZARCfCtbDgwAr0pjWORfch9aK+El1Eed9Axi6cQcaJKPTfwlZ3XDS7rGRZbw0yt9fs2ALp3SBcfTAVAHyw3sE9kyQobPieTtdQLeUrOp8JT6HrfGQKwpuZHLGmSmXXjWPmX8cBnESYijg8Es5J6pnsgCkOIMluJndkD8BI3HK8tcVWfk28UA2LZrvtLXY8W3\\/+MSL0qJrjMsldqC6+NszCuWAJpqDDPZK9CyD1DbxTYplTHm+UlJWzdNpB0v1VVtGFHhRbrrRuG0BKXXN65nkw9aAUXpSSvgGgNGHZMwsmBVy\\/192gKN\\/pR8c31gqP4Yv959mjAGob1Wme1SaE0Oc4RGuOM3H8PINSf6acQSH1P3EnIjLm79snANmKW24B78CDvFeVcr9AupfbOYE7Tr2jJ23Gp06r73Jb55beZ5OYKwYGw\\/EyzeV6qNd6A2e\\/D98gTpyFP5Tcvxh3NWIMmc\\/hzUZ449ZbZ1D3daxZN5pjkNHdb6616tpjtj1uxQTQBxwkAU6Gb0PrPasUtHD+QDLL5r1MvO4LRdiFWWrD2aTlhf2OOrrdsG4L6\\/CZWgf\\/TnyAy7f\\/gCpdJ\\/VVyESixlb7+AlqlZhOltQNOWd7j+aWUTxhmLpQ55vXOL5slYtibuQkSRVwL6CvY9SB5DpBYp7Yq5tD3ydV+S8S1imk+lq9PcxUO5Ex1TbwXVFucwuRKLlAA1TILIvMHJIyu1Zc8U409E1BThUxKI2S+t3fA9cl3ahTb8hmI1tGojLnwL+9OAIoIoTqZSd\\/EWeECpqEadveboGuhdZsCXoi8UYaEYXrtApaGJ+V27POUDQbIALkgqJO0XVpSfeogPvyw08olOs36aUIfsDZ2Uwc8G9\\/pg3u1KPeIf87SJO+HSGnoYMw0BjRXwbOuMANoJQrSbm5c34iOklJ7W0IDIIgPfVPKrJaE+D2pzbm0rBnh4\\/p8w8an1V3y5b1kEsDWqU0uWI4zToToBrbqVxnEvQEvWqAa2\\/MWCUC1QMy+t3KcZCl9wEWiNQ7JuHdY0WnWWjXRCq2AG3tIcqYsidX3MX8ku+Gyl+VqIthyB1RLPDQiNnZOIsfO2fscIfipuPSIDZMsaB4x04KAfhBG1RJHtFWAjgGrjPK\\/u6WGydGABxAgNv\\/CjmjgKx4ZzIksvkvARiDtcypy09pJz0FsbGEUr7q2vv7VXCHYprhM=:sOQnCCWbD76OERGCIMeG3Y1pg1skE4yKkqCg0iKW3HKyfPeOEEQ+xqSIhyNJiW4Q6HPYa4tYl2zViNv+JK\\/pj65fpSEna55myY101Gx2gF7VUjuj1ujd+iz\\/ib17DAedbMRu2IY\\/bxjJ295yAX+iKxQZSBSt4MwXKCtT1\\/HyfTNNmkCSblXQpfhuN0WiwFWGoQB1IPFVwKejD0JknBviVtbFCMg9VPvNYXGk7hyhOh2KnRrNQVGGYwGqoZI20lg1VK0Nn0E6eDc8MMD0ljUHKWQWGDRsriojCA4beaxtWTdtHHy2LBA5kiOv6nb62O5TsInscTxcJ\\/2CBUJOVY+eJQ==:fCOmxT+T1J6nT5OX\",\n  \"reference\": \"EIqX5g2b2C5gXoDSmKs\\/j6Xby2Opz7rTqDWCO\\/AxKAiniUVWV15U5f9\\/fpAxr4dygurCZ5ctrj7NSmbAVAF\\/FfPyMaGFqT028yVmt499nm8kLqeq64Yx77oQ\\/ADeh70cR4VmVfsC6DxPeSCLRQHcUNRm+7y8kEQ8sPu9QRSxVoU\\/lEy2fltQSByqgzk3eIjsBxVrHgVG4mVqV6yLT47GLbBdh6CiZiqkNx9pUXhhXR0ej1Sp7tF0hXuZTh7+CTZvfJp2QA\\/KA77F9Aa\\/u1N1b8+5br8\\/legiMjsMvVmKCXyyKzm6+Yt7VdrapKucyB+zJpH6IsTyxQpBsUV4cFGgqJhnX4qfoxzcWV6KqdFi22E=:sOQnCCWbD76OERGCIMeG3Y1pg1skE4yKkqCg0iKW3HKyfPeOEEQ+xqSIhyNJiW4Q6HPYa4tYl2zViNv+JK\\/pj65fpSEna55myY101Gx2gF7VUjuj1ujd+iz\\/ib17DAedbMRu2IY\\/bxjJ295yAX+iKxQZSBSt4MwXKCtT1\\/HyfTNNmkCSblXQpfhuN0WiwFWGoQB1IPFVwKejD0JknBviVtbFCMg9VPvNYXGk7hyhOh2KnRrNQVGGYwGqoZI20lg1VK0Nn0E6eDc8MMD0ljUHKWQWGDRsriojCA4beaxtWTdtHHy2LBA5kiOv6nb62O5TsInscTxcJ\\/2CBUJOVY+eJQ==:+W6Bn5NEHwBE8S32\"\n}"
  },
  {
    "path": "app/src/test/resources/com/beemdevelopment/aegis/importers/2fas_authenticator_encrypted_v3.2fas",
    "content": "{\n  \"services\": [],\n  \"updatedAt\": 1668548484538,\n  \"schemaVersion\": 3,\n  \"appVersionCode\": 4000004,\n  \"appVersionName\": \"4.0.0\",\n  \"appOrigin\": \"android\",\n  \"groups\": [],\n  \"servicesEncrypted\": \"oAAWclilpn+Y9ol1SENxfw2c1zejXyYdEkC6+G3tpbep7MXXvC\\/xAgzwS+RFt\\/jXoivKsrpVCFrRbuhziyHUfaWvOmHCydro5NlrQH9SHbeasoGBeoKH+x3H7v5oDXE4PO4L2+rShWfHILmgkum1HHPfc85ojm2qp5NgsCbVxuMPUnnwb+k8BLAsrPZMx708LccaoZLYz+Bkd7Vb6ONYn\\/8gkOulNp9Ue9O\\/3Q\\/ZVLHpR+nveszobXoHAukRNDQ8kNDnmetjqH1xbuJf\\/0UMO6kgRs0fdxZvrBg3afFasymlNH6Iwz8S+yfOT32b5YuLcZNo2OkhaV1oqcL+aZEYXSpcPZM3iqB817agI+qeUPQvsqwkgu\\/whzMrGVBb1DAf+b7aPEHsxXCGk5E72xgU5dnZwAR6x12vO8LUhuRywEXi7X2klQ1cpiOSzi7ZefnE61dTgJAmbVoMBNM5tXtvjZmuM+zpLHBzl6Z6lIFWabGT2G3b6KQ0yadE3Wmw4FK\\/zG0i6bC4qRnA2I0V75CJCIboxOTiN2QodhITZAQvQFfn5AzOUk0bdwJP5XeNKXl1eAWaDzBzo1vNELlF0m3WH9bEXLHzE6Q1IoJmZX\\/XY9e7TemwSIIRl0NvZ3Vi\\/LrNpYzCQJ8UrcBQzjevuvWuBU4k8xyVIHo9CGF5Y10BeWi1dC2Ws5OpXK9hfni92RWYRVcaBgQjFAJ\\/TpE\\/ynL33FD\\/KTGVwp6wSE6CCedWFdsxk3ushckU53yoUqHAwvRB76Kk3\\/TrkWFj3Oph1cTdgPnHz\\/0\\/6VaphOuNkMtebeAzDtrV55IKqzQZ+6GxRgr5sFDVcy2djrUYGOPemCvYIuXyVhpRq1dbTfJ0lsJ+fiVmnXxmb3hNXskT87QW+TVDFxqfTD7h5RXVFY7IFdXTd5bwq6EyAfvJtuZqu7fX\\/Ft1Y3MCPEFbQw9QLyz6CbSZJmG1CafgrIS+R2PlBrJM8LlhId\\/BebkwfxXX4tGwI4vAVdw2XmPjeAjZzXiTEpneSz5tFp\\/BHoolFnmJkCm+z+F\\/zrZbf0K4qtrOiqEdKs+qNWww6h7sEFPPvaXyYBdNGm23F+Rb2N2ZZnUs8tHPaltsI4LSwi+7gNgRnVdI3Ljpp85xbRfEI0OZ7ZJIeS5w3nBWUOu3\\/pOBpEsCtwSkpTr9scHwiCC5YDSdYvFSAzZEgIDNVxT28AHFhoQJBcG7JVPIa52mtACYExqoRdbTlQ4DJqMG2WxtnhV\\/AHzYqahPD+\\/RHmV9yC23vddgMykDrzSQHVxOXzODpioGYSZIZrYIBCGaxIEa7F4wTp7XjR60jvWtUkInr0RontbE7lYMnMTIxttgMqQto2WDxKWMqroMEWHnUnMbfIL5B+7+UpoWN7Zp09z8p\\/znXrMn25\\/EmcXTcmGXBdP9\\/Qh5CBa0v5XUafVvHrTDBoZCDE7RaHnRcou5RBTWIgqDNO+yfKc08PDpw0UJ0QdtxLrKgzkgbIXYvHS+ksGPq5wubp1IrkjYuUwjKKgSaWAuEyB5r4Oa54jdz8KNuJskMLSxqndz0TV2qSBGbB7YdyxR8KyGpG6hfqqudkGmYUkl+nTdeppTGnry67ya9B8iYcijMXBLvk\\/3DKVDisv8K4r9kSxvPIfzd5MO\\/ui8pRXA+FCRThBxqSS\\/lThpcyEIj90VVYxmVyDaA47XE255\\/0kEqQm4v67HIwGqIVsK7AfjJkQUAKlVzraKyJB441pDiNParlI5ln0gbpeSnc9iH92zRXfwKZCyF1\\/009\\/JVbrKIcfNEvDpTUaexwcjetYqc8aLLSEdatqa515Nxhp6nPvHdV1sj1it81Fl+\\/nCGrTZ\\/YMcYoPoA9Sv7pZU3RMDbCA\\/dREsSPGQ0+mCNcwHHe2ZTuki5DIB+nsAsV16g\\/OH0vxDr25BLqXuLjhx8Jc9Rlr6jg+32HOJXrRuoSAsFCzyCmtfcwxU0v4+IM\\/6cq8\\/qdlK8D2zvxMZPL7SUje3\\/VB77PHDkceof+DvtmJ\\/pUlmXHdSApdXbfWjlfP3DWWYmCZhHlO3pg0TqPKufVSZWFU7AfRuIimNgRs4s\\/2ixNs9p9DZbzno6bb5YLh7ql3TqsL2xeYXBTQWpSkGH\\/+0BvEOkXGjxbNxdbsjYBxvOp2bVjwCX0omL3C8K84IVnQDZSMEftrLtIlbBmnabN7g5qKzUtNtfN1hB4EFqq7LVvGgkOUCZCZx2dWwmgHqeUEvtKhdlvFuPNEVtd5co0JieFhFJtGqVbGkjMBg22x0uMclaGhma2xYAcgEjiBdg1QVdHq+1gnYyowKG4YGCpXrshC3e4\\/ujk+iUmPGkYGYrweglZAnVm+U15OXoJn0lzjBO29jhfZi8d\\/DirG5b4lT0C\\/6S\\/UhG5bGrNcirQsvr5SIbQfoSaLXlJ2SCKuUw51wlF9khENW3o2GPn3L2tlFOaMf5mbuHi4P8eJDhWY2KA6uTEWddjbfVILSPhhKcpWdBu01CxIP\\/2gQS5Ou1hjcqyN1jCSxIFVANYkr+IpKooers03bPVmTrLGYalmU+CI8FBYgkZnL4P+OuSqivMxvcscLN25xJ7kz+i2eRz98HoNsOA1Dx+lZEfeailmJh8F\\/a\\/agUCVWufAem0vC6mZMWjj8QKORpOwh+0wgV2rmWJK6DTPA6lH1ivnqdrE\\/JE8V4wOTCE+NeeBb7VIRe0Q4q2\\/ORMVPK\\/YyrKwARYhmC1L3FuEsFmeimhMweiIzAc7AWeykRY8xS0Laujy7VRzal9y3C6TUSUSeriApPhfhpQmNO8jjYHR22vaA530W4SKOiNEAYdFOolUyoLrUwgADvoH2MWv+Z4JpO4GBGTKUCUbnqn32gMpDgNmc3FzXtpyASF0=:F\\/kH8kq9g0PjEEuQmL8eBnoN6eI0oz8AM9UJr\\/ADTHoTrqDnbUY4joUQw2dyeNRYxsw1Oj0nGBUxg90dnDhs79X5C\\/D2tsgns03tADJUe5I\\/hnS8O+njyDcYVODUoS5eC5pHTXzhLmeKNZjhKuVr+XGlKdhnv72gn8JvwjEiwNh52T6RnD10pWwbxLJaMdkBKps7sFDfXxJofCsU8u\\/aYmAAolMkViKsTJ1tHcaEz8eG0R4jhB3Lm8m8Cdtx+nGX57pJk+ptmEv+Px\\/5rANfDxnNJ6iB+zg9xBFJk+YbJlQ6Cf6dQFye0gAlT3KWi26jA+Ozp+EoGHMm2TCRKnpemw==:q5DxA6tYE2A2AHWz\",\n  \"reference\": \"tQdQEgDTckuE\\/Q02KeQJxxDYKAsn6mdAW6EYhtI4l9vN7RhVMFyXMYVDnH2Ujnj\\/zWlV8lRtUfl3FWBpnBWM8YINff6Un3zTM9jEf0YYftj0HQzd8dnbM0u2ZxCftRblqk0dAiekjA05Vo\\/ma6Y+mreGJpj\\/awMP8OvgYWSu03F01PfklUOEmxSUrIMk6\\/A8HiAZ\\/PH9ayDvjOSZHZ05zahndayzqBSecdt0w+bejNFUM4SRWWC+njStxZGz4IfMHkkiGJoYyg0D5ezRHwINcw3u+1IaEzKJ8hqta7qXh+cx4Jig6rqB0cUQbUqY2LoCsEB9POKdlfBihVxKLKFss+TuLZW6DxtUNbAAaImSMBc=:F\\/kH8kq9g0PjEEuQmL8eBnoN6eI0oz8AM9UJr\\/ADTHoTrqDnbUY4joUQw2dyeNRYxsw1Oj0nGBUxg90dnDhs79X5C\\/D2tsgns03tADJUe5I\\/hnS8O+njyDcYVODUoS5eC5pHTXzhLmeKNZjhKuVr+XGlKdhnv72gn8JvwjEiwNh52T6RnD10pWwbxLJaMdkBKps7sFDfXxJofCsU8u\\/aYmAAolMkViKsTJ1tHcaEz8eG0R4jhB3Lm8m8Cdtx+nGX57pJk+ptmEv+Px\\/5rANfDxnNJ6iB+zg9xBFJk+YbJlQ6Cf6dQFye0gAlT3KWi26jA+Ozp+EoGHMm2TCRKnpemw==:giXb4rEQl9ofTh2T\"\n}"
  },
  {
    "path": "app/src/test/resources/com/beemdevelopment/aegis/importers/2fas_authenticator_encrypted_v4.2fas",
    "content": "{\"services\":[],\"groups\":[],\"updatedAt\":1702934782660,\"schemaVersion\":4,\"appVersionCode\":5000009,\"appVersionName\":\"5.1.0\",\"appOrigin\":\"android\",\"servicesEncrypted\":\"PCeJ8H3t2vpQZE1HJdDygnK+Cc+B3RmxrxdiuMd93Hd/wX6KXLaiDN6ILMO8Yu9VbVJ1C7U104pR6eIGTmC5EWGmh/mcD9E5PA+vNZdupcpU6ZjwMsguVGGfi5XEhG9LXZVkYk24rlXiScGxsJEWxfkBTIjPKG/D0fvkcqzIVYH6rbFCDbyKHeKtm5DrL1c7DPA+5xz7YRbMCqmHkM6bwfg0cLlIJnHfsFhDpDBr+2G9I3Ugsp1X8ah/376IGwfmvLxpUfyHtDpKsvmiX8qfffWDGp4D869Anem9z4wG4qYRHEgmfuG6Fb3siRjLbg8sYAl7UDqsc3FTIYUPBWlmU4dgAyPjsp53SXxzQUn6ZofOvluW4Pc0RVcmeWa4ED0nQ2HwJdsfgpk9qOunc5uAUDpAKAKbmoA8nutzFarUeZ9ZZzLiDNwGQx1yncr6Gl/goiBeBTo78doyhxW+OrmY5ODmSx7zxus+CEcfS0iZfVpg+6084qEo8UGiXRwRrJGWaoWEN8Y2gfE9Lab8RnJ57NQ+drW3fIrMK4Az7XPEpoCzmID4ipORmjgcydxfA8WfvVkGRP4mfP20nr0xxzrNNjlqU10TLTsZWadlHTwciltbXU1FFZYTKHE3Dt4Uv3B96lIDdQ4fbr7N/xw0MiJMNys3t3wwbINiwoxw4LLC59MHwk7ZZNgPg73yIJFM7ynwLmFx05Og15xf32DvwiImulLWjUix06LmoycdCOSP20LbPIhmXm0GT528/EFMM4ty7m1QEFnUs3PA5V7Eufe1qVXduvMJVkGUiAoE802zP1WlXL6fKZudl1jB5mf9x91IFWc+fOuVCuHahRIWcjeiUqRi3cWjO2LlN9471xeUy3ey2aIReCoB6SzhmbmCluKHg60AZrkaQYAGq7m4EQgmfP0EfiWZz9qvoP7qw6U53AfDLYS+cB+NT6A7bd+ofInyBIv8V8HMhKe3Gv2rdLNGrV0RhmbJeZq8z0aQQKPX6Td41+gWMmR0hd7PBzpMaLWbQi2g+r04G0p/RW0ZlTr0K1sIr6T05yBwQbDGCZNnq1y8pGBkNHe5u8y1OxG9LPnd3KzFz0y7TNSqQkonQWMeXyx3FiFgGDLcUjdooLsvh3vtLR1PIXRSicSWE2nHA+j+9zk9/yJ7V6UtxZg3yQbWbBqtGmk7zcDL6rRtrEOl7yS6ZjLdeNH3b3S4OQb3YqS38W78SKW1Czc70ZDoGKmuBSZaWA8/teGXMDAzcyhosFRkNxznQpCvNdsJn5mI9H8RiXffyGSy8qQlFxRqlzsG5LRPThzXVEuYg7q4sybIkzqcpUKzMIjwiOvkluvqlbF7KBYxoyfVSAz6w6ZFwklzIxh1V1AvuFwUQENE8yX/LoLyo+WC987oQqGIU2FwWpo0mUNxwM12ZYnL/i7UQzmMlKh0iHKq2FMq9+RtQuJ40g6nGCrj/G0LXfUB2OD5IHCTR3ujxXhFLumLbiLzpdXVl0qQ4n8f3xKT3lY9+Uul94t1J1huOrhteVqd+a0wuphFD/z23NkyWHJCsfTFBmAb0GPENP1gBBWdABDfxobCgBNJIOsMx66eO2uxqssHaf9GqkYvmpqRso2gLQrzNND8HVQVpZxUjd/EHc9GdCsMYxJUqyS6SrAzIusBqPrs1wHMR+w18YW3LtOLDe7TCodB1Q0QVJsQeNcWzxzMMXX+7mbGw3cIEb1UG8b2SKY8qZCTbJyJOlKvq0dOW/NB0z+QC2u3ax/0ReKRJpTBOF0SWC1pOCwFurjvSN6rR52jrIf5Kx/od0RKWtcNQJh8781gAxyGjwadiIWZN8VzXlHf+ve3SfPlLdIVCOtybxcVKkDekro4svAk2b7Qh8TD84KJxK16JyqWPc3/QummR2y9N8hAV+lbNLVaOcmvH+K0U9Fxeogcmzi0f3xq/bhRs9tvIKOay3vPyxzXljlHPM8hZ83oMVzPbE6X64BES4PwWYeshq01aQaLDhOvLLvHmWAT4BA3bSedbF/OjX4X5orSXjetzQtdtgbXqla4Vdmu2YFk0vt1YjBPlUHW6tsYFqz6qjCCri3LmgugfBYnhR2erSQhvTDTATsdRYe3Ytc8FiaLkLIBMym1L+ct9etEHHgkZBbI/K2g2NRkf8DgHXS+ngbKEb4Yg0X7KMzF5W6TTz7k1IN0r+cLwpgKSL+ACO5FOINa6J9tGUFYRa6clD8Ra9mZnB1+oJkOcs3UNJeNR2vDwNz8JePaKBOBrHumpHAyk2WWdMdqOHQ2yXAlxJioF3QXLKtDewJFdn+gISIQFSt5HGMy9vs+kNa8Y5OjSvuqkTLMRaIYYsRXA2rTBwf0E6FHcBKwnTOQIRgbsaQw38Qo9ovtcjAZ69rlmGdc3w716Ubhb1KVtHv8lzUv4MKAmjjgf+OoELWpW7qKRNLrv5siLiL/EOTq+VBK7Edfnh9fiDuV5xpEn1UQcMnp5H3Nv0oetLa9fuStYfDQzbfywjni+QjQOTlF0udRYQTEMNVRB3zycWxf0eZlbVOBsOkQjoq33b9pGYOHuczqB4G/2c+dV10HOGo6IwExyED2cvXKIJk9SlQfp/jxdGBZ1umUoRgQl7h3miJqY9DasgaQXu6nMx8e0Tso3D6A0exaMTun8taR69OzQMDlQUxs9pYsIICmXTTRWXxoKCTtsF6CCZGEU3IhuvSZR9YNXYyPL34l2Qszcs8DBrQpZvJL8aOxrw7wCtlN0kVrhVZ+UOr9ux/+1sRo2fvm54cKo/C0lNJDU5X+EDLojmjqWTkKBsZJNRPTDIbyAvE3Awn0vs2Oc/M25/RTCOgcJ+MoLM6D/irdgnCjk18HA7iPIeqdrxaDSrLfufCL8Tj+qab6z7F628eneeYNvBysw9CrX56/EfrbopV0d/bs9rTCJrh+XWuULXHtqsZOkXToy+AAlkzTga6bOYnuihxITHZSGaJTQQCLG7bokMGELbmwzDOeAoRdRA2reE15TNRv2Ltd/olHk55iDNxBgtlFmGam7NlhG0H9s0FqavwFqowlI+9RWMQiLyPe4f8uQmlRMcuY/rjpIehC8u210kcCR1oEtbPn2JmIvUzK79H4HMTh3g6aRf/kKGjSLFCLHQI0MOAE6oZJVGVTVOWFwwmcb1W/Zrr3eoseDuH3MD3X+0zvbPDNOOYa7g/bSqONTKRTDnLhB1cmQp7HP81PstDnV68ochm7RQEwWB79aZX/APRxB3AM/UxC4ytOYJN9ZjOfFm9RbcPlDxOj/sKWk86pGHK0utjIaNMZ3jfi1I3JX9m9XkxOX6b9tRl/jU2TMljBzLfo7YPUKAW4TqcFp17/VDD1WdxMKY9iwFlqDaZpbzAYZpQrW9nV8lKZlHmvRDSVlVov9jCb28EIH/A=:dhXb6HzrC+U59zVJXnImEPsfhv1QxfxcgLeR80iKdwe7p4nfZ39VjMOiVlw2hOBHOX6qithmOvMBxxHMF/o7z6Ve+nIkBpZM59l12FcLPrMPihNtROYPCbJjjIxthpROhsI+VLuednyNaJYym0yfFli0wiWxU1xL4O4nyFIXWg3ZkbTVE0SiKI6ZmgsX2EmkJ9ZnKBVY00+62nxInCy8wgHfWZuD3jQlxccJrFezwg7KYNTZUuxAZmZl1nZIOdjhhPu4YMlHIMliiSLeJEPvTS5tmzOSMzjDXrwBl7pv8jtcYQSMfJPsVbFV4+Y1LA4E9jDzJcBgNU0sS5cbwLji8g==:6i0mYmyWAq70J5bD\",\"reference\":\"QkyMxyhB3DZkI2hpz1c9OpnrWtcAkHXbTPgGFcXKRwvSR8DxaFem7cJz06ybopbBaxzELw+95jtYf5O90956urWFVD0G62xNj0gfqtwty3jXVRYimp+V6ufLlJx3b6aINwiDs/59GweFXaLTIju5HXen2gBiay5GkE2SUzaDaDovWXQ4XgQGdLHDkMuPMScNOhaU019zKYXcXM7wyG+8o/VtybIrc74U/C7d/Y2wz5e2/CjuwbLlGlEdYXx5+dggHhIJRLiLtN4KNwCY1fSP0J/y/sxoaYv3FP9tUIdG84yQvDgu6VOl7swC0+O1GiAcTzb3aygEmlssbx8+8cdb0cZf9Oq/aoxa1Qm5g8dtKrY=:dhXb6HzrC+U59zVJXnImEPsfhv1QxfxcgLeR80iKdwe7p4nfZ39VjMOiVlw2hOBHOX6qithmOvMBxxHMF/o7z6Ve+nIkBpZM59l12FcLPrMPihNtROYPCbJjjIxthpROhsI+VLuednyNaJYym0yfFli0wiWxU1xL4O4nyFIXWg3ZkbTVE0SiKI6ZmgsX2EmkJ9ZnKBVY00+62nxInCy8wgHfWZuD3jQlxccJrFezwg7KYNTZUuxAZmZl1nZIOdjhhPu4YMlHIMliiSLeJEPvTS5tmzOSMzjDXrwBl7pv8jtcYQSMfJPsVbFV4+Y1LA4E9jDzJcBgNU0sS5cbwLji8g==:u6Y8Kcpqe8hQaOW6\"}"
  },
  {
    "path": "app/src/test/resources/com/beemdevelopment/aegis/importers/2fas_authenticator_plain.2fas",
    "content": "{\n  \"services\": [\n    {\n      \"name\": \"Deno\",\n      \"secret\": \"4SJHB4GSD43FZBAI7C2HLRJGPQ\",\n      \"updatedAt\": 1644513743278,\n      \"type\": \"Unknown\",\n      \"otp\": {\n        \"label\": \"Deno:Mason\",\n        \"account\": \"Mason\",\n        \"issuer\": \"Deno\",\n        \"digits\": 6,\n        \"period\": 30,\n        \"algorithm\": \"SHA1\"\n      },\n      \"order\": {\n        \"position\": 0\n      }\n    },\n    {\n      \"name\": \"Airbnb\",\n      \"secret\": \"7ELGJSGXNCCTV3O6LKJWYFV2RA\",\n      \"updatedAt\": 1644513778354,\n      \"type\": \"Unknown\",\n      \"otp\": {\n        \"label\": \"Airbnb:Elijah\",\n        \"account\": \"Elijah\",\n        \"issuer\": \"Airbnb\",\n        \"digits\": 8,\n        \"period\": 50,\n        \"algorithm\": \"SHA512\"\n      },\n      \"order\": {\n        \"position\": 1\n      }\n    },\n    {\n      \"name\": \"Issuu\",\n      \"secret\": \"YOOMIXWS5GN6RTBPUFFWKTW5M4\",\n      \"updatedAt\": 1644513786834,\n      \"type\": \"Unknown\",\n      \"otp\": {\n        \"label\": \"Issuu:James\",\n        \"account\": \"James\",\n        \"issuer\": \"Issuu\",\n        \"digits\": 6,\n        \"algorithm\": \"SHA1\"\n      },\n      \"order\": {\n        \"position\": 2\n      }\n    },\n    {\n      \"name\": \"WWE\",\n      \"secret\": \"5VAML3X35THCEBVRLV24CGBKOY\",\n      \"updatedAt\": 1644513801596,\n      \"type\": \"Unknown\",\n      \"otp\": {\n        \"label\": \"WWE:Mason\",\n        \"account\": \"Mason\",\n        \"issuer\": \"WWE\",\n        \"digits\": 8,\n        \"algorithm\": \"SHA512\"\n      },\n      \"order\": {\n        \"position\": 3\n      }\n    }\n  ],\n  \"updatedAt\": 1644513857707,\n  \"schemaVersion\": 2,\n  \"appVersionCode\": 3080200,\n  \"appVersionName\": \"3.8.2\",\n  \"appOrigin\": \"android\",\n  \"groups\": []\n}"
  },
  {
    "path": "app/src/test/resources/com/beemdevelopment/aegis/importers/2fas_authenticator_plain_v3.2fas",
    "content": "{\n  \"services\": [\n    {\n      \"name\": \"Deno\",\n      \"secret\": \"4SJHB4GSD43FZBAI7C2HLRJGPQ\",\n      \"updatedAt\": 1668540633217,\n      \"otp\": {\n        \"label\": \"Deno:Mason\",\n        \"account\": \"Mason\",\n        \"issuer\": \"Deno\",\n        \"digits\": 6,\n        \"period\": 30,\n        \"algorithm\": \"SHA1\",\n        \"tokenType\": \"TOTP\",\n        \"source\": \"Link\"\n      },\n      \"order\": {\n        \"position\": 0\n      },\n      \"icon\": {\n        \"selected\": \"IconCollection\",\n        \"iconCollection\": {\n          \"id\": \"a5b3fb65-4ec5-43e6-8ec1-49e24ca9e7ad\"\n        }\n      }\n    },\n    {\n      \"name\": \"SPDX\",\n      \"secret\": \"5OM4WOOGPLQEF6UGN3CPEOOLWU\",\n      \"updatedAt\": 1668540644738,\n      \"otp\": {\n        \"label\": \"SPDX:James\",\n        \"account\": \"James\",\n        \"issuer\": \"SPDX\",\n        \"digits\": 7,\n        \"period\": 20,\n        \"algorithm\": \"SHA256\",\n        \"tokenType\": \"TOTP\",\n        \"source\": \"Link\"\n      },\n      \"order\": {\n        \"position\": 1\n      },\n      \"icon\": {\n        \"selected\": \"IconCollection\",\n        \"iconCollection\": {\n          \"id\": \"a5b3fb65-4ec5-43e6-8ec1-49e24ca9e7ad\"\n        }\n      }\n    },\n    {\n      \"name\": \"Airbnb\",\n      \"secret\": \"7ELGJSGXNCCTV3O6LKJWYFV2RA\",\n      \"updatedAt\": 1668540650005,\n      \"otp\": {\n        \"label\": \"Airbnb:Elijah\",\n        \"account\": \"Elijah\",\n        \"issuer\": \"Airbnb\",\n        \"digits\": 8,\n        \"period\": 50,\n        \"algorithm\": \"SHA512\",\n        \"tokenType\": \"TOTP\",\n        \"source\": \"Link\"\n      },\n      \"order\": {\n        \"position\": 2\n      },\n      \"icon\": {\n        \"selected\": \"IconCollection\",\n        \"iconCollection\": {\n          \"id\": \"a5b3fb65-4ec5-43e6-8ec1-49e24ca9e7ad\"\n        }\n      }\n    },\n    {\n      \"name\": \"Issuu\",\n      \"secret\": \"YOOMIXWS5GN6RTBPUFFWKTW5M4\",\n      \"updatedAt\": 1668540656157,\n      \"otp\": {\n        \"label\": \"Issuu:James\",\n        \"account\": \"James\",\n        \"issuer\": \"Issuu\",\n        \"digits\": 6,\n        \"period\": 30,\n        \"algorithm\": \"SHA1\",\n        \"counter\": 1,\n        \"tokenType\": \"HOTP\",\n        \"source\": \"Link\"\n      },\n      \"order\": {\n        \"position\": 3\n      },\n      \"icon\": {\n        \"selected\": \"IconCollection\",\n        \"iconCollection\": {\n          \"id\": \"a5b3fb65-4ec5-43e6-8ec1-49e24ca9e7ad\"\n        }\n      }\n    },\n    {\n      \"name\": \"Air Canada\",\n      \"secret\": \"KUVJJOM753IHTNDSZVCNKL7GII\",\n      \"updatedAt\": 1668540661393,\n      \"otp\": {\n        \"label\": \"Air Canada:Benjamin\",\n        \"account\": \"Benjamin\",\n        \"issuer\": \"Air Canada\",\n        \"digits\": 7,\n        \"period\": 30,\n        \"algorithm\": \"SHA256\",\n        \"counter\": 50,\n        \"tokenType\": \"HOTP\",\n        \"source\": \"Link\"\n      },\n      \"order\": {\n        \"position\": 4\n      },\n      \"icon\": {\n        \"selected\": \"IconCollection\",\n        \"iconCollection\": {\n          \"id\": \"a5b3fb65-4ec5-43e6-8ec1-49e24ca9e7ad\"\n        }\n      }\n    },\n    {\n      \"name\": \"WWE\",\n      \"secret\": \"5VAML3X35THCEBVRLV24CGBKOY\",\n      \"updatedAt\": 1668540666422,\n      \"otp\": {\n        \"label\": \"WWE:Mason\",\n        \"account\": \"Mason\",\n        \"issuer\": \"WWE\",\n        \"digits\": 8,\n        \"period\": 30,\n        \"algorithm\": \"SHA512\",\n        \"counter\": 10300,\n        \"tokenType\": \"HOTP\",\n        \"source\": \"Link\"\n      },\n      \"order\": {\n        \"position\": 5\n      },\n      \"icon\": {\n        \"selected\": \"IconCollection\",\n        \"iconCollection\": {\n          \"id\": \"a5b3fb65-4ec5-43e6-8ec1-49e24ca9e7ad\"\n        }\n      }\n    }\n  ],\n  \"updatedAt\": 1668540786699,\n  \"schemaVersion\": 3,\n  \"appVersionCode\": 4000004,\n  \"appVersionName\": \"4.0.0\",\n  \"appOrigin\": \"android\",\n  \"groups\": []\n}"
  },
  {
    "path": "app/src/test/resources/com/beemdevelopment/aegis/importers/2fas_authenticator_plain_v4.2fas",
    "content": "{\"services\":[{\"name\":\"Deno\",\"secret\":\"4SJHB4GSD43FZBAI7C2HLRJGPQ\",\"updatedAt\":1702934567518,\"otp\":{\"link\":\"otpauth://totp/Deno:Mason?secret=4SJHB4GSD43FZBAI7C2HLRJGPQ&issuer=Deno&algorithm=SHA1&digits=6&period=30\",\"label\":\"Mason\",\"account\":\"Mason\",\"issuer\":\"Deno\",\"digits\":6,\"period\":30,\"algorithm\":\"SHA1\",\"tokenType\":\"TOTP\",\"source\":\"Link\"},\"order\":{\"position\":0},\"icon\":{\"selected\":\"Label\",\"label\":{\"text\":\"DE\",\"backgroundColor\":\"Yellow\"},\"iconCollection\":{\"id\":\"a5b3fb65-4ec5-43e6-8ec1-49e24ca9e7ad\"}}},{\"name\":\"Issuu\",\"secret\":\"YOOMIXWS5GN6RTBPUFFWKTW5M4\",\"updatedAt\":1702934586420,\"otp\":{\"link\":\"otpauth://hotp/Issuu:James?secret=YOOMIXWS5GN6RTBPUFFWKTW5M4&issuer=Issuu&algorithm=SHA1&digits=6&counter=1\",\"label\":\"James\",\"account\":\"James\",\"issuer\":\"Issuu\",\"digits\":6,\"algorithm\":\"SHA1\",\"counter\":1,\"tokenType\":\"HOTP\",\"source\":\"Link\"},\"order\":{\"position\":1},\"icon\":{\"selected\":\"Label\",\"label\":{\"text\":\"IS\",\"backgroundColor\":\"Brown\"},\"iconCollection\":{\"id\":\"a5b3fb65-4ec5-43e6-8ec1-49e24ca9e7ad\"}}},{\"name\":\"Air Canada\",\"secret\":\"KUVJJOM753IHTNDSZVCNKL7GII\",\"updatedAt\":1702934590910,\"otp\":{\"link\":\"otpauth://hotp/Air%20Canada:Benjamin?secret=KUVJJOM753IHTNDSZVCNKL7GII&issuer=Air+Canada&algorithm=SHA256&digits=7&counter=50\",\"label\":\"Benjamin\",\"account\":\"Benjamin\",\"issuer\":\"Air Canada\",\"digits\":7,\"algorithm\":\"SHA256\",\"counter\":50,\"tokenType\":\"HOTP\",\"source\":\"Link\"},\"order\":{\"position\":2},\"icon\":{\"selected\":\"Label\",\"label\":{\"text\":\"AI\",\"backgroundColor\":\"Orange\"},\"iconCollection\":{\"id\":\"a5b3fb65-4ec5-43e6-8ec1-49e24ca9e7ad\"}}},{\"name\":\"WWE\",\"secret\":\"5VAML3X35THCEBVRLV24CGBKOY\",\"updatedAt\":1702934596091,\"otp\":{\"link\":\"otpauth://hotp/WWE:Mason?secret=5VAML3X35THCEBVRLV24CGBKOY&issuer=WWE&algorithm=SHA512&digits=8&counter=10300\",\"label\":\"Mason\",\"account\":\"Mason\",\"issuer\":\"WWE\",\"digits\":8,\"algorithm\":\"SHA512\",\"counter\":10300,\"tokenType\":\"HOTP\",\"source\":\"Link\"},\"order\":{\"position\":3},\"icon\":{\"selected\":\"Label\",\"label\":{\"text\":\"WW\",\"backgroundColor\":\"Default\"},\"iconCollection\":{\"id\":\"a5b3fb65-4ec5-43e6-8ec1-49e24ca9e7ad\"}}},{\"name\":\"Boeing\",\"secret\":\"JRZCL47CMXVOQMNPZR2F7J4RGI\",\"updatedAt\":1702934600248,\"otp\":{\"link\":\"otpauth://steam/Boeing:Sophia?secret=JRZCL47CMXVOQMNPZR2F7J4RGI&issuer=Boeing&algorithm=SHA1&digits=5&period=30\",\"label\":\"Sophia\",\"account\":\"Sophia\",\"issuer\":\"Boeing\",\"digits\":5,\"period\":30,\"algorithm\":\"SHA1\",\"tokenType\":\"STEAM\",\"source\":\"Link\"},\"order\":{\"position\":4},\"icon\":{\"selected\":\"Label\",\"label\":{\"text\":\"BO\",\"backgroundColor\":\"Pink\"},\"iconCollection\":{\"id\":\"a5b3fb65-4ec5-43e6-8ec1-49e24ca9e7ad\"}}}],\"groups\":[],\"updatedAt\":1702934732299,\"schemaVersion\":4,\"appVersionCode\":5000009,\"appVersionName\":\"5.1.0\",\"appOrigin\":\"android\"}"
  },
  {
    "path": "app/src/test/resources/com/beemdevelopment/aegis/importers/aegis_encrypted.json",
    "content": "{\n    \"version\": 1,\n    \"header\": {\n        \"slots\": [\n            {\n                \"type\": 1,\n                \"uuid\": \"a8325752-c1be-458a-9b3e-5e0a8154d9ec\",\n                \"key\": \"491d44550430ba248986b904b8cffd3a6c5755d176ac877bd11b82c934225017\",\n                \"key_params\": {\n                    \"nonce\": \"e9705513ba4951fa7a0608d2\",\n                    \"tag\": \"931237af257b83c693ddb8f9a7eddaf0\"\n                },\n                \"n\": 32768,\n                \"r\": 8,\n                \"p\": 1,\n                \"salt\": \"27ea9ae53fa2f08a8dcd201615a8229422647b3058f9f36b08f9457e62888be1\",\n                \"repaired\": true\n            }\n        ],\n        \"params\": {\n            \"nonce\": \"095fd13dee336fa56b4634ff\",\n            \"tag\": \"5db2470edf2d12f82a89ae7f48ccd50c\"\n        }\n    },\n    \"db\": \"RtGfUrZ01nzRnvHjPJGyWjfa6shQ7NYwa491CgAWNBM8OeGZVIHhnDAVlVWNlSoq2V097p5Yq5m+SFl5g9nBBBQBNePQnj6CCvu1NfNtoA6R3hyp77gd+e+O2MRnOGH1Z1laV2Tl6p3q8IUHWgAJ36LbUxiCXmfh7bWm198uA4bgLwrEmo04MrqeYXggLuXrJrp6dUJQFD72dgoPbHijlSycY5GLel3ZbAXRsUHszd+xdywpj7\\/TYa4OYFel0M0QcCpsKA1LRQz365X9OXPJdTsmVyR4dJ6x5RIVeh39lAYKUf7T4w7BLC8taST5m4J\\/VXDueKbvg8R13bNWF0aRHUgeuI9BNzMZINJlzKFKNRknTaJ\\/1kEUU0sLkgcaVkX\\/DVTGG+pWi5MHijicrK0i4LHN3CUwV2\\/\\/ZNJCGXM5ErsKMOnJfma52gMdifPiXU317Klvc5oOZFYGnhbhJ2WtPIuqjdvnfuLat2JxA7Xx3LqquRWGL2113yjzVzGBDCVY6iIdedBEgH8CGD826\\/3R3m6dR5sfSggQ2SbtQA\\/DZNhLSNSU+bfNScVQvUWfR2Lf7Q\\/4FR\\/xATAQJ9IIBeL+w2ErLUPjURocFXup5YOBHxFdDjZ2FqhbAq4h3Zn\\/BJ57xUcYEA+YtP5uOP2lQwUh\\/0vFWizDVotzraO8tZiBZBsODyb69eJrXNwFbIjeUczY6wrJs1+676IilbCsmtoYvWEpUZF4hIi7TYAD+nyXX\\/olrkog9omWZk8R7hJ9KRDfckXEc\\/XSzWhk3Kmfa7pRNh9wYZsaR7VPZGZebQMuUKfRRci2qMsZOJvQsDBJvVze0xW9SqiySDgGyRX\\/DwzuaZEGZZriaLf6ox7LwY2Qi6QpYOYbAaEaXAesCR1DPxFfGKsUHVjF8hKA6ZBXDXdqM3Y+14naIOH9S7UzYn32botoVLOykSjnW6z6M0ZPkz3dwowMJiVQcyD7p+9p4J6f1S81pFS7DP+jF+PTyC3c3q\\/dwFhNdoG6iV9eQEAxjUi6MpzvFRsk9RsLcQqYgzJGmRjYeXlKH8k8tTu1A4puo6w3Daz8hZz9NafMgMsuqY0oKVLgdNqFz8yVMsxYfBW\\/oW56SuQyyVWyxXjXmbk1vpYCTL5kXvIZWoTmBRRDb0ay5S\\/dlD6z\\/WR45\\/C4AwcCE9m4Yf3zisRNa7AqWLVgkmJxFdfJxjiuPtUIK79s+lIJkyRENEqkvm809qIxDhkQzY8zcCt4oXCEbJUfSG4awBs1VvilJIwe6qi0bNtqXtAb5TctgxTh29A9oGlsRG4o8sHqA1mtjp5QiLWp5Hh6rOH95W6+fnBiOW+Iw0evBTduroWvx37HBTktJz79zGe0l3c0Y6VmiFvB7knmT2CrgP7woRkxGbXxdE9zMPQJM9ursD538MVDdD\\/0tdkxHxilt47f1DPo2CKUWU8Q1KMm1zLXfVO8BbGUWIv4YeDKHfMUL\\/HcStv5VJY+LbnOEjzGT4e1\\/avSQmqBL4G9XNkYmyMhC8tlLQcmMMH4bNfPOO3vi5Pb5E7XveSgxlOHs4F0+nqxnFOAu8494MEtx6u5+B7d8LI\\/DhEO5zTDwE+THiKej6vCsFxTZ519rm67HycOwRR4LKrwfDeUEK3X1PzryOD5zcv3PMcSBgZ8EWvTfZ9ygKP8BmRQRpydTbSt8Hj5fTUuajADCP0Ggw+6G7n+5FhExJNd+o9D8d4KgLPOe08M8InW7pLB389TWtSo4v3VNjcmmJNQ26wlPkhO\\/xBU1URFR0fXU3eCO+w++IMt\\/fOSqSpNF9bWElfWHIQ23ntxVke\\/hR9j\\/GG3tHGxYS5pL42sJF\\/Re\\/UlUJTGSQP6up2xVYs6gncQ0zACDOPjLQmQzYhz\\/hr8S6EjYfK++yLZmRTjEI7xT9u\\/B5YLyOQCYVTaF\\/pDEegjsehXM3qJBfsA+XY7F9TRsmM\\/MSVaPDkdIJ7zvL9xtaF6bXdZoZ6po3ml8uu41pSkNmMKgyEy5E0UQUTWMPLC8drUoQ\\/KWQnVIN6HUXGBjYy6aax\\/LYZaBcbZi97FHK0h+wsx3WN\\/uQozNkQjwGYE8fwYxRYh1RaFi5PkiCM505ib7e82Yuts0l+cBb6nG1IruDplg9BD\\/G9w4vVDePEikhcPyY\\/p7AZ4i7u\\/bL2YKlbE3HyJa+7dkbWJgGidtRZgu+Fdl2T\\/rrRJ4+lVaKPVKGKT7ItZdIeitIYUdRxCzrOf1ItZCC8BWa4PElDAjj2yDNmMYRpXJBe3gQHWs\\/H5SZgFuwsfCu23uzNRQYib8SuwIJQDvPiXo7m4oIySO8VyvemcExlbXSlbZbvwVxYavTVfcUpAXI6qlsg2jjk+JZahfKrWNC5COZPdVjdAXCoiKU+HBPmEFCwQv\\/7zlSBEiI2piyqd+MPwnP63RdGO+oXYid6hn4Nm8kcOhtRyvYm95p66jzGlEugsfxJCED7MTh3XShqa2tt4lFG25icllzTvIJboRkz5oIB4dZVS9+q2TgGUoX7UCpobD8WkHo\\/y0cpTuZr8vzXqx2fObxzPNoVgxJmp9E06G2bhMVHPpT17xbfq\\/KhJJn7k1S0sfXPG+SmYlX4U7zNSe1M7JXtLf3uVOLz7Ccjp3yvcdq8nRmVym3Zwsz+vv57FA2A0dy3Db97ypJa9HGaxnnYIZHHzep0gJCeeIKE9L32zGCoUg+cPu9B2lPEgIr64iGiuvKSRwNQpOBktM6qqjQntE0Me6mh426irFQ\\/3tcfH9a4lZEwwuU1X+lUBUWQp3n5Ej4BSJEs8E6H0EjBvyk69q3qjy5yi7ROVRis6y6S1v4er77RHQUf3phK5354VJHrp9pR926t5qngH5RVF4eljwtXDs3MkejADJ6stBHa\\/w7FcbUClO8U+S4Bidxb3mZCiZkUVTpbzvBfYAiQvAfdkMa49o3a5DXKsbXyUPrmr6fWRfM1fS0Ehp0lUv6BDj0yR13CLMpKDU4GfDrl8UEvwh7gwtBRkuaBFzyMtd3NeE7kIGf9vFs6MEl2dmMDFSDid7MdVSDVTlhaAtp+zsRejKW3OQr5n051FzkUsIFGty9AWOkwjZCbstHYCOtyJnsnXP1i9lRDFBgPpFgmDD+bzzg0g9AOAxzqTiLF7bb1jejfe5qVr5V9+7zLpwRLiYaLkNOmpsqvNMuYVwdqTp6nyoougdgBlvve3EG0k09sFKi2Ep9lq+QkS7zGre2jJDrqgdC08+V4PXHYkP3V3Zjgn1x6RfQ2PE+2zvk1GGEgzcNww3byoYw0Ra5qS5yftMy\\/2WahbA8fjUYvtmksFH8VjN3yasZt3sdQLWtv8qXxZscy+pCyjTdyxW+ddFnrWuqMIV3jbGMvngq6dL\\/n5+DumjbA1gmBJVOpmyEsc1iwHDS36cNnyi1htGFO\\/6\\/Va4YPYK7dG6LY387UoBUU9Q9ijrBrSGpzPWYmXBLZ8e1MMPfHIN1WsaTgYO9leg3MAJTjQFTFrQ5dguYpWhlm2sWJT45jrda4uWqduB+aQLzYRWhEDBFzPV3ZgIe0SB+7h04Vm0Pu\\/LDRvqaolpZ86CEm+zgjBOKeEGFwzTXxH\\/5pBoca1bZ6wvsbVZxJNBeH8\\/w==\"\n}"
  },
  {
    "path": "app/src/test/resources/com/beemdevelopment/aegis/importers/aegis_plain.json",
    "content": "{\n    \"version\": 1,\n    \"header\": {\n        \"slots\": null,\n        \"params\": null\n    },\n    \"db\": {\n        \"version\": 1,\n        \"entries\": [\n            {\n                \"type\": \"totp\",\n                \"uuid\": \"3ae6f1ad-2e65-4ed2-a953-1ec0dff2386d\",\n                \"name\": \"Mason\",\n                \"issuer\": \"Deno\",\n                \"icon\": null,\n                \"info\": {\n                    \"secret\": \"4SJHB4GSD43FZBAI7C2HLRJGPQ\",\n                    \"algo\": \"SHA1\",\n                    \"digits\": 6,\n                    \"period\": 30\n                }\n            },\n            {\n                \"type\": \"totp\",\n                \"uuid\": \"84b55971-a3d2-4173-a5bb-0aea113dbc17\",\n                \"name\": \"James\",\n                \"issuer\": \"SPDX\",\n                \"icon\": null,\n                \"info\": {\n                    \"secret\": \"5OM4WOOGPLQEF6UGN3CPEOOLWU\",\n                    \"algo\": \"SHA256\",\n                    \"digits\": 7,\n                    \"period\": 20\n                }\n            },\n            {\n                \"type\": \"totp\",\n                \"uuid\": \"3deaff2e-f181-4837-80e1-fdf0c54e9363\",\n                \"name\": \"Elijah\",\n                \"issuer\": \"Airbnb\",\n                \"icon\": null,\n                \"info\": {\n                    \"secret\": \"7ELGJSGXNCCTV3O6LKJWYFV2RA\",\n                    \"algo\": \"SHA512\",\n                    \"digits\": 8,\n                    \"period\": 50\n                }\n            },\n            {\n                \"type\": \"hotp\",\n                \"uuid\": \"0a8c0571-ff6f-4b02-aa4b-50553b4fb4fe\",\n                \"name\": \"James\",\n                \"issuer\": \"Issuu\",\n                \"icon\": null,\n                \"info\": {\n                    \"secret\": \"YOOMIXWS5GN6RTBPUFFWKTW5M4\",\n                    \"algo\": \"SHA1\",\n                    \"digits\": 6,\n                    \"counter\": 1\n                }\n            },\n            {\n                \"type\": \"hotp\",\n                \"uuid\": \"03e572f2-8ebd-44b0-a57e-e958af74815d\",\n                \"name\": \"Benjamin\",\n                \"issuer\": \"Air Canada\",\n                \"icon\": null,\n                \"info\": {\n                    \"secret\": \"KUVJJOM753IHTNDSZVCNKL7GII\",\n                    \"algo\": \"SHA256\",\n                    \"digits\": 7,\n                    \"counter\": 50\n                }\n            },\n            {\n                \"type\": \"hotp\",\n                \"uuid\": \"b25f8815-007f-40f7-a700-ce058ac05435\",\n                \"name\": \"Mason\",\n                \"issuer\": \"WWE\",\n                \"icon\": null,\n                \"info\": {\n                    \"secret\": \"5VAML3X35THCEBVRLV24CGBKOY\",\n                    \"algo\": \"SHA512\",\n                    \"digits\": 8,\n                    \"counter\": 10300\n                }\n            },\n            {\n                \"type\": \"steam\",\n                \"uuid\": \"5b11ae3b-6fc3-4d46-8ca7-cf0aea7de920\",\n                \"name\": \"Sophia\",\n                \"issuer\": \"Boeing\",\n                \"icon\": null,\n                \"info\": {\n                    \"secret\": \"JRZCL47CMXVOQMNPZR2F7J4RGI\",\n                    \"algo\": \"SHA1\",\n                    \"digits\": 5,\n                    \"period\": 30\n                }\n            }\n        ]\n    }\n}"
  },
  {
    "path": "app/src/test/resources/com/beemdevelopment/aegis/importers/andotp_plain.json",
    "content": "[{\"secret\":\"4SJHB4GSD43FZBAI7C2HLRJGPQ======\",\"issuer\":\"Deno\",\"label\":\"Mason\",\"digits\":6,\"type\":\"TOTP\",\"algorithm\":\"SHA1\",\"thumbnail\":\"Default\",\"last_used\":1608146844162,\"used_frequency\":0,\"period\":30,\"tags\":[]},{\"secret\":\"5OM4WOOGPLQEF6UGN3CPEOOLWU======\",\"issuer\":\"SPDX\",\"label\":\"James\",\"digits\":7,\"type\":\"TOTP\",\"algorithm\":\"SHA256\",\"thumbnail\":\"Default\",\"last_used\":1608146848740,\"used_frequency\":0,\"period\":20,\"tags\":[]},{\"secret\":\"7ELGJSGXNCCTV3O6LKJWYFV2RA======\",\"issuer\":\"Airbnb\",\"label\":\"Elijah\",\"digits\":8,\"type\":\"TOTP\",\"algorithm\":\"SHA512\",\"thumbnail\":\"AirBNB\",\"last_used\":1608146856099,\"used_frequency\":0,\"period\":50,\"tags\":[]},{\"secret\":\"YOOMIXWS5GN6RTBPUFFWKTW5M4======\",\"issuer\":\"Issuu\",\"label\":\"James\",\"digits\":6,\"type\":\"HOTP\",\"algorithm\":\"SHA1\",\"thumbnail\":\"Default\",\"last_used\":1608146859856,\"used_frequency\":0,\"counter\":1,\"tags\":[]},{\"secret\":\"KUVJJOM753IHTNDSZVCNKL7GII======\",\"issuer\":\"Air Canada\",\"label\":\"Benjamin\",\"digits\":7,\"type\":\"HOTP\",\"algorithm\":\"SHA256\",\"thumbnail\":\"Default\",\"last_used\":1608146866733,\"used_frequency\":0,\"counter\":50,\"tags\":[]},{\"secret\":\"5VAML3X35THCEBVRLV24CGBKOY======\",\"issuer\":\"WWE\",\"label\":\"Mason\",\"digits\":8,\"type\":\"HOTP\",\"algorithm\":\"SHA512\",\"thumbnail\":\"Default\",\"last_used\":1608146871644,\"used_frequency\":0,\"counter\":10300,\"tags\":[]},{\"secret\":\"JRZCL47CMXVOQMNPZR2F7J4RGI======\",\"issuer\":\"Boeing\",\"label\":\"Sophia\",\"digits\":5,\"type\":\"STEAM\",\"algorithm\":\"SHA1\",\"thumbnail\":\"Default\",\"last_used\":1608146877325,\"used_frequency\":0,\"tags\":[]}]"
  },
  {
    "path": "app/src/test/resources/com/beemdevelopment/aegis/importers/authy_encrypted.xml",
    "content": "<?xml version='1.0' encoding='utf-8' standalone='yes' ?>\n<map>\n    <int name=\"key_version\" value=\"121\" />\n    <string name=\"com.authy.storage.tokens.authenticator.key\">[{&quot;accountType&quot;:&quot;authenticator&quot;,&quot;digits&quot;:6,&quot;encryptedSecret&quot;:&quot;94mk0erEKRYU7UKn4o6WAPWR/gQkyrNIxPWIZcXHeWc\\u003d&quot;,&quot;logo&quot;:&quot;Deno&quot;,&quot;originalIssuer&quot;:&quot;Deno&quot;,&quot;originalName&quot;:&quot;Deno:Mason&quot;,&quot;timestamp&quot;:1608377908,&quot;salt&quot;:&quot;z01fjH2vyzYks49nxaOTp8M39eMOjxT4&quot;,&quot;upload_state&quot;:&quot;uploaded&quot;,&quot;hidden&quot;:false,&quot;id&quot;:&quot;1608374963&quot;,&quot;isNew&quot;:false,&quot;name&quot;:&quot;Deno: Mason&quot;},{&quot;accountType&quot;:&quot;authenticator&quot;,&quot;digits&quot;:7,&quot;encryptedSecret&quot;:&quot;0fdhb8g0FBqjZL9mSi13d0+gQ7myUsxllKIHwzxJB08\\u003d&quot;,&quot;logo&quot;:&quot;SPDX&quot;,&quot;originalIssuer&quot;:&quot;SPDX&quot;,&quot;originalName&quot;:&quot;SPDX:James&quot;,&quot;timestamp&quot;:1608377908,&quot;salt&quot;:&quot;AVqSXXFR6WGdRyXutRhS2qqtJKMxUmfN&quot;,&quot;upload_state&quot;:&quot;uploaded&quot;,&quot;hidden&quot;:false,&quot;id&quot;:&quot;1608374991&quot;,&quot;isNew&quot;:false,&quot;name&quot;:&quot;SPDX: James&quot;},{&quot;accountType&quot;:&quot;authenticator&quot;,&quot;digits&quot;:8,&quot;encryptedSecret&quot;:&quot;SRtA3xEj1iD9Bh1aHITCtPW6wcbURAsWwWs00oH4SZ8\\u003d&quot;,&quot;logo&quot;:&quot;Airbnb&quot;,&quot;originalIssuer&quot;:&quot;Airbnb&quot;,&quot;originalName&quot;:&quot;Airbnb:Elijah&quot;,&quot;timestamp&quot;:1608377908,&quot;salt&quot;:&quot;oXag8rjuljcU5XWhT2FQXgM9alkIvguT&quot;,&quot;upload_state&quot;:&quot;uploaded&quot;,&quot;hidden&quot;:false,&quot;id&quot;:&quot;1608375004&quot;,&quot;isNew&quot;:false,&quot;name&quot;:&quot;Airbnb: Elijah&quot;}]</string>\n</map>\n"
  },
  {
    "path": "app/src/test/resources/com/beemdevelopment/aegis/importers/authy_plain.xml",
    "content": "<?xml version='1.0' encoding='utf-8' standalone='yes' ?>\n<map>\n    <int name=\"key_version\" value=\"121\" />\n    <string name=\"com.authy.storage.tokens.authenticator.key\">[{&quot;accountType&quot;:&quot;authenticator&quot;,&quot;decryptedSecret&quot;:&quot;4SJHB4GSD43FZBAI7C2HLRJGPQ&quot;,&quot;digits&quot;:6,&quot;logo&quot;:&quot;Deno&quot;,&quot;originalIssuer&quot;:&quot;Deno&quot;,&quot;originalName&quot;:&quot;Deno:Mason&quot;,&quot;timestamp&quot;:1608374963,&quot;upload_state&quot;:&quot;notUploaded&quot;,&quot;hidden&quot;:false,&quot;id&quot;:&quot;1608374963&quot;,&quot;isNew&quot;:false,&quot;name&quot;:&quot;Deno: Mason&quot;},{&quot;accountType&quot;:&quot;authenticator&quot;,&quot;decryptedSecret&quot;:&quot;5OM4WOOGPLQEF6UGN3CPEOOLWU&quot;,&quot;digits&quot;:7,&quot;logo&quot;:&quot;SPDX&quot;,&quot;originalIssuer&quot;:&quot;SPDX&quot;,&quot;originalName&quot;:&quot;SPDX:James&quot;,&quot;timestamp&quot;:1608374963,&quot;upload_state&quot;:&quot;notUploaded&quot;,&quot;hidden&quot;:false,&quot;id&quot;:&quot;1608374991&quot;,&quot;isNew&quot;:false,&quot;name&quot;:&quot;SPDX: James&quot;},{&quot;accountType&quot;:&quot;authenticator&quot;,&quot;decryptedSecret&quot;:&quot;7ELGJSGXNCCTV3O6LKJWYFV2RA&quot;,&quot;digits&quot;:8,&quot;logo&quot;:&quot;Airbnb&quot;,&quot;originalIssuer&quot;:&quot;Airbnb&quot;,&quot;originalName&quot;:&quot;Airbnb:Elijah&quot;,&quot;timestamp&quot;:1608374963,&quot;upload_state&quot;:&quot;notUploaded&quot;,&quot;hidden&quot;:false,&quot;id&quot;:&quot;1608375004&quot;,&quot;isNew&quot;:false,&quot;name&quot;:&quot;Airbnb: Elijah&quot;}]</string>\n</map>\n"
  },
  {
    "path": "app/src/test/resources/com/beemdevelopment/aegis/importers/battle_net_authenticator.xml",
    "content": "<?xml version='1.0' encoding='utf-8' standalone='yes' ?>\n<map>\n    <string name=\"com.blizzard.messenger.AUTHENTICATOR_CREDENTIALS_ENCRYPTION_TYPE\">MASK</string>\n    <boolean name=\"com.blizzard.messenger.AUTHENTICATOR_SETUP_POSTPONE_LOGIN\" value=\"false\" />\n    <string name=\"com.blizzard.messenger.AUTHENTICATOR_DEVICE_SECRET\">09ec179861450806035080d113c5f05e62f67316110eec1bd495a9cdb65a3cb3f93b1f80b80b4507</string>\n    <string name=\"com.blizzard.messenger.PREF_AUTHENTICATION_PROVIDER_HOST_URL\">oauth.battle.net</string>\n    <string name=\"com.blizzard.messenger.AUTHENTICATOR_BGS_REGION_CODE\">EU</string>\n    <string name=\"com.blizzard.messenger.AUTHENTICATOR_SERIAL\">6cdd0ace62165b48525585d508c7f35832</string>\n    <long name=\"com.blizzard.messenger.AUTHENTICATOR_SERVER_TIME_DIFF\" value=\"15\" />\n</map>\n"
  },
  {
    "path": "app/src/test/resources/com/beemdevelopment/aegis/importers/bitwarden.csv",
    "content": "folder,favorite,type,name,notes,fields,login_uri,login_username,login_password,login_totp\n,,login,Test 1,,,,,,otpauth://totp/Deno:Mason?secret=4SJHB4GSD43FZBAI7C2HLRJGPQ&issuer=Deno&algorithm=SHA1&digits=6&period=30\n,,login,Test 2,,,,,,otpauth://totp/SPDX:James?secret=5OM4WOOGPLQEF6UGN3CPEOOLWU&issuer=SPDX&algorithm=SHA256&digits=7&period=20\n,,login,Test 3,,,,,,otpauth://totp/Airbnb:Elijah?secret=7ELGJSGXNCCTV3O6LKJWYFV2RA&issuer=Airbnb&algorithm=SHA512&digits=8&period=50\n,,login,Test 4,,,,,,steam://JRZCL47CMXVOQMNPZR2F7J4RGI"
  },
  {
    "path": "app/src/test/resources/com/beemdevelopment/aegis/importers/bitwarden.json",
    "content": "{\n  \"encrypted\": false,\n  \"folders\": [],\n  \"items\": [\n    {\n      \"id\": \"ffdea2cc-923d-47a0-be99-ae7800fd51e4\",\n      \"organizationId\": null,\n      \"folderId\": null,\n      \"type\": 1,\n      \"name\": \"Test 1\",\n      \"notes\": null,\n      \"favorite\": false,\n      \"login\": {\n        \"uris\": null,\n        \"username\": null,\n        \"password\": null,\n        \"totp\": \"otpauth://totp/Deno:Mason?secret=4SJHB4GSD43FZBAI7C2HLRJGPQ&issuer=Deno&algorithm=SHA1&digits=6&period=30\"\n      },\n      \"collectionIds\": null\n    },\n    {\n      \"id\": \"0f954b25-dbe9-4b38-b8ff-ae7800fd784d\",\n      \"organizationId\": null,\n      \"folderId\": null,\n      \"type\": 1,\n      \"name\": \"Test 2\",\n      \"notes\": null,\n      \"favorite\": false,\n      \"login\": {\n        \"uris\": null,\n        \"username\": null,\n        \"password\": null,\n        \"totp\": \"otpauth://totp/SPDX:James?secret=5OM4WOOGPLQEF6UGN3CPEOOLWU&issuer=SPDX&algorithm=SHA256&digits=7&period=20\"\n      },\n      \"collectionIds\": null\n    },\n    {\n      \"id\": \"b0f3aae6-f4da-49bc-b981-ae7800fd9467\",\n      \"organizationId\": null,\n      \"folderId\": null,\n      \"type\": 1,\n      \"name\": \"Test 3\",\n      \"notes\": null,\n      \"favorite\": false,\n      \"login\": {\n        \"uris\": null,\n        \"username\": null,\n        \"password\": null,\n        \"totp\": \"otpauth://totp/Airbnb:Elijah?secret=7ELGJSGXNCCTV3O6LKJWYFV2RA&issuer=Airbnb&algorithm=SHA512&digits=8&period=50\"\n      },\n      \"collectionIds\": null\n    },\n    {\n      \"id\": \"eb10632a-3bfd-40cd-9e4c-8c01c020b944\",\n      \"organizationId\": null,\n      \"folderId\": null,\n      \"type\": 1,\n      \"name\": \"Test Steam\",\n      \"notes\": null,\n      \"favorite\": false,\n      \"login\": {\n        \"uris\": null,\n        \"username\": null,\n        \"password\": null,\n        \"totp\": \"steam://JRZCL47CMXVOQMNPZR2F7J4RGI\"\n      },\n      \"collectionIds\": null\n    }\n  ]\n}"
  },
  {
    "path": "app/src/test/resources/com/beemdevelopment/aegis/importers/duo.json",
    "content": "[\n  {\n    \"version\": 1.0,\n    \"accountType\": \"OtpAccount\",\n    \"name\": \"Mason\",\n    \"otpGenerator\": {\n      \"otpSecret\": \"4SJHB4GSD43FZBAI7C2HLRJGPQ\"\n    },\n    \"logoUri\": \"file:///data/user/0/com.duosecurity.duomobile/files/duokit/logos/9a011a29-0496-4c0b-b53a-b9125eea14a3.png\",\n    \"pkey\": \"9a011a29-0496-4c0b-b53a-b9125eea14a3\",\n    \"serviceTypeLabelIsCustom\": true\n  },\n  {\n    \"version\": 1.0,\n    \"accountType\": \"OtpAccount\",\n    \"name\": \"James\",\n    \"otpGenerator\": {\n      \"otpSecret\": \"YOOMIXWS5GN6RTBPUFFWKTW5M4\",\n      \"counter\": 3\n    },\n    \"logoUri\": \"file:///data/user/0/com.duosecurity.duomobile/files/duokit/logos/907d30f0-d322-4fa5-baff-4b7c603f5141.png\",\n    \"pkey\": \"907d30f0-d322-4fa5-baff-4b7c603f5141\",\n    \"serviceTypeLabelIsCustom\": true\n  }\n]"
  },
  {
    "path": "app/src/test/resources/com/beemdevelopment/aegis/importers/ente_auth.txt",
    "content": "otpauth://hotp/Air%20Canada:Benjamin?secret=KUVJJOM753IHTNDSZVCNKL7GII&issuer=Air+Canada&algorithm=SHA256&digits=7&counter=50&codeDisplay=%7B%22pinned%22%3Afalse%2C%22trashed%22%3Afalse%2C%22lastUsedAt%22%3A0%2C%22tapCount%22%3A0%2C%22tags%22%3A%5B%5D%7D\notpauth://totp/Airbnb:Elijah?secret=7ELGJSGXNCCTV3O6LKJWYFV2RA&issuer=Airbnb&algorithm=SHA512&digits=8&period=50&codeDisplay=%7B%22pinned%22%3Afalse%2C%22trashed%22%3Afalse%2C%22lastUsedAt%22%3A0%2C%22tapCount%22%3A0%2C%22tags%22%3A%5B%5D%7D\notpauth://steam/Boeing:Sophia?secret=JRZCL47CMXVOQMNPZR2F7J4RGI&issuer=Boeing&algorithm=SHA1&digits=5&period=30&codeDisplay=%7B%22pinned%22%3Afalse%2C%22trashed%22%3Afalse%2C%22lastUsedAt%22%3A0%2C%22tapCount%22%3A0%2C%22tags%22%3A%5B%5D%7D\notpauth://totp/Deno:Mason?secret=4SJHB4GSD43FZBAI7C2HLRJGPQ&issuer=Deno&algorithm=SHA1&digits=6&period=30&codeDisplay=%7B%22pinned%22%3Afalse%2C%22trashed%22%3Afalse%2C%22lastUsedAt%22%3A0%2C%22tapCount%22%3A0%2C%22tags%22%3A%5B%5D%7D\notpauth://hotp/Issuu:James?secret=YOOMIXWS5GN6RTBPUFFWKTW5M4&issuer=Issuu&algorithm=SHA1&digits=6&counter=1&codeDisplay=%7B%22pinned%22%3Afalse%2C%22trashed%22%3Afalse%2C%22lastUsedAt%22%3A0%2C%22tapCount%22%3A0%2C%22tags%22%3A%5B%5D%7D\notpauth://totp/SPDX:James?secret=5OM4WOOGPLQEF6UGN3CPEOOLWU&issuer=SPDX&algorithm=SHA256&digits=7&period=20&codeDisplay=%7B%22pinned%22%3Afalse%2C%22trashed%22%3Afalse%2C%22lastUsedAt%22%3A0%2C%22tapCount%22%3A0%2C%22tags%22%3A%5B%5D%7D\notpauth://hotp/WWE:Mason?algorithm=sha512&digits=8&issuer=WWE&period=30&secret=5VAML3X35THCEBVRLV24CGBKOY&counter=10300&codeDisplay=%7B%22pinned%22%3Afalse%2C%22trashed%22%3Afalse%2C%22lastUsedAt%22%3A0%2C%22tapCount%22%3A0%2C%22tags%22%3A%5B%5D%7D\n"
  },
  {
    "path": "app/src/test/resources/com/beemdevelopment/aegis/importers/freeotp.xml",
    "content": "<?xml version='1.0' encoding='utf-8' standalone='yes' ?>\n<map>\n    <string name=\"WWE:Mason\">{&quot;algo&quot;:&quot;SHA512&quot;,&quot;counter&quot;:10299,&quot;digits&quot;:8,&quot;issuerExt&quot;:&quot;WWE&quot;,&quot;issuerInt&quot;:&quot;WWE&quot;,&quot;label&quot;:&quot;Mason&quot;,&quot;period&quot;:30,&quot;secret&quot;:[-19,64,-59,-18,-5,-20,-50,34,6,-79,93,117,-63,24,42,118],&quot;type&quot;:&quot;HOTP&quot;}</string>\n    <string name=\"Airbnb:Elijah\">{&quot;algo&quot;:&quot;SHA512&quot;,&quot;counter&quot;:0,&quot;digits&quot;:8,&quot;issuerExt&quot;:&quot;Airbnb&quot;,&quot;issuerInt&quot;:&quot;Airbnb&quot;,&quot;label&quot;:&quot;Elijah&quot;,&quot;period&quot;:50,&quot;secret&quot;:[-7,22,100,-56,-41,104,-123,58,-19,-34,90,-109,108,22,-70,-120],&quot;type&quot;:&quot;TOTP&quot;}</string>\n    <string name=\"Deno:Mason\">{&quot;algo&quot;:&quot;SHA1&quot;,&quot;counter&quot;:0,&quot;digits&quot;:6,&quot;issuerExt&quot;:&quot;Deno&quot;,&quot;issuerInt&quot;:&quot;Deno&quot;,&quot;label&quot;:&quot;Mason&quot;,&quot;period&quot;:30,&quot;secret&quot;:[-28,-110,112,-16,-46,31,54,92,-124,8,-8,-76,117,-59,38,124],&quot;type&quot;:&quot;TOTP&quot;}</string>\n    <string name=\"Issuu:James\">{&quot;algo&quot;:&quot;SHA1&quot;,&quot;counter&quot;:0,&quot;digits&quot;:6,&quot;issuerExt&quot;:&quot;Issuu&quot;,&quot;issuerInt&quot;:&quot;Issuu&quot;,&quot;label&quot;:&quot;James&quot;,&quot;period&quot;:30,&quot;secret&quot;:[-61,-100,-60,94,-46,-23,-101,-24,-52,47,-95,75,101,78,-35,103],&quot;type&quot;:&quot;HOTP&quot;}</string>\n    <string name=\"tokenOrder\">[&quot;WWE:Mason&quot;,&quot;Issuu:James&quot;,&quot;Airbnb:Elijah&quot;,&quot;Deno:Mason&quot;]</string>\n</map>\n"
  },
  {
    "path": "app/src/test/resources/com/beemdevelopment/aegis/importers/freeotp_plus.json",
    "content": "{\"tokenOrder\":[\"WWE:Mason\",\"Air Canada:Benjamin\",\"Issuu:James\",\"Airbnb:Elijah\",\"SPDX:James\",\"Deno:Mason\"],\"tokens\":[{\"algo\":\"SHA512\",\"counter\":10299,\"digits\":8,\"issuerExt\":\"WWE\",\"issuerInt\":\"WWE\",\"label\":\"Mason\",\"period\":30,\"secret\":[-19,64,-59,-18,-5,-20,-50,34,6,-79,93,117,-63,24,42,118],\"type\":\"HOTP\"},{\"algo\":\"SHA256\",\"counter\":49,\"digits\":7,\"issuerExt\":\"Air Canada\",\"issuerInt\":\"Air Canada\",\"label\":\"Benjamin\",\"period\":30,\"secret\":[85,42,-108,-71,-97,-18,-48,121,-76,114,-51,68,-43,47,-26,66],\"type\":\"HOTP\"},{\"algo\":\"SHA1\",\"counter\":0,\"digits\":6,\"issuerExt\":\"Issuu\",\"issuerInt\":\"Issuu\",\"label\":\"James\",\"period\":30,\"secret\":[-61,-100,-60,94,-46,-23,-101,-24,-52,47,-95,75,101,78,-35,103],\"type\":\"HOTP\"},{\"algo\":\"SHA512\",\"counter\":0,\"digits\":8,\"issuerExt\":\"Airbnb\",\"issuerInt\":\"Airbnb\",\"label\":\"Elijah\",\"period\":50,\"secret\":[-7,22,100,-56,-41,104,-123,58,-19,-34,90,-109,108,22,-70,-120],\"type\":\"TOTP\"},{\"algo\":\"SHA256\",\"counter\":0,\"digits\":7,\"issuerExt\":\"SPDX\",\"issuerInt\":\"SPDX\",\"label\":\"James\",\"period\":20,\"secret\":[-21,-103,-53,57,-58,122,-32,66,-6,-122,110,-60,-14,57,-53,-75],\"type\":\"TOTP\"},{\"algo\":\"SHA1\",\"counter\":0,\"digits\":6,\"issuerExt\":\"Deno\",\"issuerInt\":\"Deno\",\"label\":\"Mason\",\"period\":30,\"secret\":[-28,-110,112,-16,-46,31,54,92,-124,8,-8,-76,117,-59,38,124],\"type\":\"TOTP\"}]}"
  },
  {
    "path": "app/src/test/resources/com/beemdevelopment/aegis/importers/freeotp_plus_internal.xml",
    "content": "<?xml version='1.0' encoding='utf-8' standalone='yes' ?>\n<map>\n    <string name=\"WWE:Mason\">{&quot;algo&quot;:&quot;SHA512&quot;,&quot;counter&quot;:10299,&quot;digits&quot;:8,&quot;issuerExt&quot;:&quot;WWE&quot;,&quot;issuerInt&quot;:&quot;WWE&quot;,&quot;label&quot;:&quot;Mason&quot;,&quot;period&quot;:30,&quot;secret&quot;:[-19,64,-59,-18,-5,-20,-50,34,6,-79,93,117,-63,24,42,118],&quot;type&quot;:&quot;HOTP&quot;}</string>\n    <string name=\"Airbnb:Elijah\">{&quot;algo&quot;:&quot;SHA512&quot;,&quot;counter&quot;:0,&quot;digits&quot;:8,&quot;issuerExt&quot;:&quot;Airbnb&quot;,&quot;issuerInt&quot;:&quot;Airbnb&quot;,&quot;label&quot;:&quot;Elijah&quot;,&quot;period&quot;:50,&quot;secret&quot;:[-7,22,100,-56,-41,104,-123,58,-19,-34,90,-109,108,22,-70,-120],&quot;type&quot;:&quot;TOTP&quot;}</string>\n    <string name=\"Air Canada:Benjamin\">{&quot;algo&quot;:&quot;SHA256&quot;,&quot;counter&quot;:49,&quot;digits&quot;:7,&quot;issuerExt&quot;:&quot;Air Canada&quot;,&quot;issuerInt&quot;:&quot;Air Canada&quot;,&quot;label&quot;:&quot;Benjamin&quot;,&quot;period&quot;:30,&quot;secret&quot;:[85,42,-108,-71,-97,-18,-48,121,-76,114,-51,68,-43,47,-26,66],&quot;type&quot;:&quot;HOTP&quot;}</string>\n    <string name=\"SPDX:James\">{&quot;algo&quot;:&quot;SHA256&quot;,&quot;counter&quot;:0,&quot;digits&quot;:7,&quot;issuerExt&quot;:&quot;SPDX&quot;,&quot;issuerInt&quot;:&quot;SPDX&quot;,&quot;label&quot;:&quot;James&quot;,&quot;period&quot;:20,&quot;secret&quot;:[-21,-103,-53,57,-58,122,-32,66,-6,-122,110,-60,-14,57,-53,-75],&quot;type&quot;:&quot;TOTP&quot;}</string>\n    <string name=\"Deno:Mason\">{&quot;algo&quot;:&quot;SHA1&quot;,&quot;counter&quot;:0,&quot;digits&quot;:6,&quot;issuerExt&quot;:&quot;Deno&quot;,&quot;issuerInt&quot;:&quot;Deno&quot;,&quot;label&quot;:&quot;Mason&quot;,&quot;period&quot;:30,&quot;secret&quot;:[-28,-110,112,-16,-46,31,54,92,-124,8,-8,-76,117,-59,38,124],&quot;type&quot;:&quot;TOTP&quot;}</string>\n    <string name=\"Issuu:James\">{&quot;algo&quot;:&quot;SHA1&quot;,&quot;counter&quot;:0,&quot;digits&quot;:6,&quot;issuerExt&quot;:&quot;Issuu&quot;,&quot;issuerInt&quot;:&quot;Issuu&quot;,&quot;label&quot;:&quot;James&quot;,&quot;period&quot;:30,&quot;secret&quot;:[-61,-100,-60,94,-46,-23,-101,-24,-52,47,-95,75,101,78,-35,103],&quot;type&quot;:&quot;HOTP&quot;}</string>\n    <string name=\"tokenOrder\">[&quot;WWE:Mason&quot;,&quot;Air Canada:Benjamin&quot;,&quot;Issuu:James&quot;,&quot;Airbnb:Elijah&quot;,&quot;SPDX:James&quot;,&quot;Deno:Mason&quot;]</string>\n</map>\n"
  },
  {
    "path": "app/src/test/resources/com/beemdevelopment/aegis/importers/plain.txt",
    "content": "otpauth://totp/Deno:Mason?secret=4SJHB4GSD43FZBAI7C2HLRJGPQ&issuer=Deno&algorithm=SHA1&digits=6&period=30\notpauth://totp/SPDX:James?secret=5OM4WOOGPLQEF6UGN3CPEOOLWU&issuer=SPDX&algorithm=SHA256&digits=7&period=20\notpauth://totp/Airbnb:Elijah?secret=7ELGJSGXNCCTV3O6LKJWYFV2RA&issuer=Airbnb&algorithm=SHA512&digits=8&period=50\notpauth://hotp/Issuu:James?secret=YOOMIXWS5GN6RTBPUFFWKTW5M4&issuer=Issuu&algorithm=SHA1&digits=6&counter=1\notpauth://hotp/Air%20Canada:Benjamin?secret=KUVJJOM753IHTNDSZVCNKL7GII&issuer=Air+Canada&algorithm=SHA256&digits=7&counter=50\notpauth://hotp/WWE:Mason?secret=5VAML3X35THCEBVRLV24CGBKOY&issuer=WWE&algorithm=SHA512&digits=8&counter=10300\notpauth://steam/Boeing:Sophia?secret=JRZCL47CMXVOQMNPZR2F7J4RGI&issuer=Boeing&algorithm=SHA1&digits=5&period=30\n"
  },
  {
    "path": "app/src/test/resources/com/beemdevelopment/aegis/importers/proton_authenticator.json",
    "content": "{\n  \"version\": 1,\n  \"entries\": [\n    {\n      \"id\": \"a19e0019-47e3-4d3b-af63-6dad0cb49e31\",\n      \"content\": {\n        \"uri\": \"otpauth://totp/Deno:Mason?secret=4SJHB4GSD43FZBAI7C2HLRJGPQ&issuer=Deno&algorithm=SHA1&digits=6&period=30\",\n        \"entry_type\": \"Totp\",\n        \"name\": \"Mason\"\n      },\n      \"note\": null\n    },\n    {\n      \"id\": \"4603c576-5d93-4c7f-8c26-bed6dc4493fc\",\n      \"content\": {\n        \"uri\": \"otpauth://totp/SPDX:James?secret=5OM4WOOGPLQEF6UGN3CPEOOLWU&issuer=SPDX&algorithm=SHA256&digits=7&period=20\",\n        \"entry_type\": \"Totp\",\n        \"name\": \"James\"\n      },\n      \"note\": null\n    },\n    {\n      \"id\": \"4fae25ae-16ed-4f15-a887-3bbb50b34d5e\",\n      \"content\": {\n        \"uri\": \"otpauth://totp/Airbnb:Elijah?secret=7ELGJSGXNCCTV3O6LKJWYFV2RA&issuer=Airbnb&algorithm=SHA512&digits=8&period=50\",\n        \"entry_type\": \"Totp\",\n        \"name\": \"Elijah\"\n      },\n      \"note\": null\n    }\n  ]\n}"
  },
  {
    "path": "app/src/test/resources/com/beemdevelopment/aegis/importers/steam.json",
    "content": "{\"accounts\":{\"abcdefg\":{\"steamid\":\"1234\",\"shared_secret\":\"THIl8+Jl6ugxr8x0X6eRMg==\",\"serial_number\":\"12345678901234567890\",\"revocation_code\":\"R1234\",\"uri\":\"otpauth:\\/\\/totp\\/Steam:Sophia?secret=JRZCL47CMXVOQMNPZR2F7J4RGI&issuer=Steam\",\"server_time\":\"0\",\"account_name\":\"Sophia\",\"token_gid\":\"894820a474c9\",\"identity_secret\":\"dGhpcyBpcyBhIHRlc3Qgc3RyaW5n\",\"secret_1\":\"eWV0IGFub3RoZXIgdGVzdCBzdHJpbmc=\",\"status\":1,\"steamguard_scheme\":\"2\"}}}\n"
  },
  {
    "path": "app/src/test/resources/com/beemdevelopment/aegis/importers/steam_old.json",
    "content": "{\"steamid\":\"1234\",\"shared_secret\":\"THIl8+Jl6ugxr8x0X6eRMg==\",\"serial_number\":\"12345678901234567890\",\"revocation_code\":\"R1234\",\"uri\":\"otpauth:\\/\\/totp\\/Steam:Sophia?secret=JRZCL47CMXVOQMNPZR2F7J4RGI&issuer=Steam\",\"server_time\":\"0\",\"account_name\":\"Sophia\",\"token_gid\":\"894820a474c9\",\"identity_secret\":\"dGhpcyBpcyBhIHRlc3Qgc3RyaW5n\",\"secret_1\":\"eWV0IGFub3RoZXIgdGVzdCBzdHJpbmc=\",\"status\":1,\"steamguard_scheme\":\"2\"}\n"
  },
  {
    "path": "app/src/test/resources/com/beemdevelopment/aegis/importers/stratum_plain.json",
    "content": "{\"Authenticators\":[{\"Type\":2,\"Icon\":null,\"Issuer\":\"Deno\",\"Username\":\"Mason\",\"Secret\":\"4SJHB4GSD43FZBAI7C2HLRJGPQ\",\"Pin\":null,\"Algorithm\":0,\"Digits\":6,\"Period\":30,\"Counter\":0,\"Ranking\":0},{\"Type\":2,\"Icon\":null,\"Issuer\":\"SPDX\",\"Username\":\"James\",\"Secret\":\"5OM4WOOGPLQEF6UGN3CPEOOLWU\",\"Pin\":null,\"Algorithm\":1,\"Digits\":7,\"Period\":20,\"Counter\":0,\"Ranking\":0},{\"Type\":2,\"Icon\":null,\"Issuer\":\"Airbnb\",\"Username\":\"Elijah\",\"Secret\":\"7ELGJSGXNCCTV3O6LKJWYFV2RA\",\"Pin\":null,\"Algorithm\":2,\"Digits\":8,\"Period\":50,\"Counter\":0,\"Ranking\":0},{\"Type\":1,\"Icon\":null,\"Issuer\":\"Issuu\",\"Username\":\"James\",\"Secret\":\"YOOMIXWS5GN6RTBPUFFWKTW5M4\",\"Pin\":null,\"Algorithm\":0,\"Digits\":6,\"Period\":30,\"Counter\":1,\"Ranking\":0},{\"Type\":1,\"Icon\":null,\"Issuer\":\"Air Canada\",\"Username\":\"Benjamin\",\"Secret\":\"KUVJJOM753IHTNDSZVCNKL7GII\",\"Pin\":null,\"Algorithm\":1,\"Digits\":7,\"Period\":30,\"Counter\":50,\"Ranking\":0},{\"Type\":1,\"Icon\":null,\"Issuer\":\"WWE\",\"Username\":\"Mason\",\"Secret\":\"5VAML3X35THCEBVRLV24CGBKOY\",\"Pin\":null,\"Algorithm\":2,\"Digits\":8,\"Period\":30,\"Counter\":10300,\"Ranking\":0},{\"Type\":4,\"Icon\":null,\"Issuer\":\"Boeing\",\"Username\":\"Sophia\",\"Secret\":\"JRZCL47CMXVOQMNPZR2F7J4RGI\",\"Pin\":null,\"Algorithm\":0,\"Digits\":5,\"Period\":30,\"Counter\":0,\"Ranking\":0}],\"Categories\":[],\"AuthenticatorCategories\":[],\"CustomIcons\":[]}"
  },
  {
    "path": "app/src/test/resources/com/beemdevelopment/aegis/importers/totp_authenticator_internal.xml",
    "content": "<?xml version='1.0' encoding='utf-8' standalone='yes' ?>\n<map>\n    <int name=\"RATE_US_COUNTER\" value=\"13\" />\n    <boolean name=\"SHOWCASE_FIREST_RUN\" value=\"false\" />\n    <boolean name=\"FIRST_ACCOUNT_ADDED_BACKUP\" value=\"true\" />\n    <boolean name=\"SHOULD_SHOW_RATE_US_DIALOG\" value=\"false\" />\n    <int name=\"BLACK_FRIDAY_MODAL\" value=\"13\" />\n    <string name=\"STATIC_TOTP_CODES_LIST\">[{&quot;accountHeaderLabel&quot;:&quot;&quot;,&quot;allowNotifications&quot;:false,&quot;base&quot;:16,&quot;digits&quot;:&quot;6&quot;,&quot;fileName&quot;:&quot;&quot;,&quot;iconLabel&quot;:&quot;&quot;,&quot;iconPath&quot;:&quot;&quot;,&quot;isFavorite&quot;:false,&quot;isSelected&quot;:false,&quot;isWidgetActive&quot;:false,&quot;issuer&quot;:&quot;Deno&quot;,&quot;key&quot;:&quot;E49270F0D21F365C8408F8B475C5267C&quot;,&quot;name&quot;:&quot;mason&quot;,&quot;period&quot;:&quot;30&quot;,&quot;setIconFromDrawable&quot;:true,&quot;source&quot;:0,&quot;timeRemaining&quot;:0,&quot;totpCode&quot;:&quot;&quot;,&quot;widgetId&quot;:0},{&quot;accountHeaderLabel&quot;:&quot;&quot;,&quot;allowNotifications&quot;:false,&quot;base&quot;:16,&quot;digits&quot;:&quot;7&quot;,&quot;fileName&quot;:&quot;&quot;,&quot;iconLabel&quot;:&quot;&quot;,&quot;iconPath&quot;:&quot;&quot;,&quot;isFavorite&quot;:false,&quot;isSelected&quot;:false,&quot;isWidgetActive&quot;:false,&quot;issuer&quot;:&quot;SPDX&quot;,&quot;key&quot;:&quot;EB99CB39C67AE042FA866EC4F239CBB5&quot;,&quot;name&quot;:&quot;james&quot;,&quot;period&quot;:&quot;20&quot;,&quot;setIconFromDrawable&quot;:true,&quot;source&quot;:0,&quot;timeRemaining&quot;:0,&quot;totpCode&quot;:&quot;&quot;,&quot;widgetId&quot;:0},{&quot;accountHeaderLabel&quot;:&quot;&quot;,&quot;allowNotifications&quot;:false,&quot;base&quot;:16,&quot;digits&quot;:&quot;8&quot;,&quot;fileName&quot;:&quot;&quot;,&quot;iconLabel&quot;:&quot;&quot;,&quot;iconPath&quot;:&quot;&quot;,&quot;isFavorite&quot;:false,&quot;isSelected&quot;:false,&quot;isWidgetActive&quot;:false,&quot;issuer&quot;:&quot;Airbnb&quot;,&quot;key&quot;:&quot;F91664C8D768853AEDDE5A936C16BA88&quot;,&quot;name&quot;:&quot;elijah&quot;,&quot;period&quot;:&quot;50&quot;,&quot;setIconFromDrawable&quot;:true,&quot;source&quot;:0,&quot;timeRemaining&quot;:0,&quot;totpCode&quot;:&quot;&quot;,&quot;widgetId&quot;:0}]</string>\n    <boolean name=\"WIDGET_SERVICE_RELOAD_FLAG\" value=\"false\" />\n    <boolean name=\"SCREENSHOT_FLAG\" value=\"true\" />\n    <boolean name=\"ASK_FOR_VERIFICATION\" value=\"true\" />\n    <boolean name=\"FORCE_SYNC_FIRST_TIME_V3\" value=\"false\" />\n    <boolean name=\"NOTIFICATION_SERVICE_RELOAD_FLAG\" value=\"true\" />\n    <string name=\"SET_SCREENSHOT_FLAG\">COMPLETED</string>\n    <boolean name=\"ADD_LABEL\" value=\"true\" />\n    <string name=\"SORT_ACCOUNT_BY\">CUSTOM</string>\n    <string name=\"DEFAULT_ENCRYPTION_KEY\">Testtest1</string>\n    <string name=\"FCM_CLOUD_ID\">dU9OMKiERmSSHuXTbuYkkr:APA91bH7yW4Pw-z9QnWYpSWr2Cwrd8aV7OtY-JOTAj0jcar3V_ZvLvFlks37NUV7R2vyl9M47dGAD2iE7ud_IlVgaxo0VWZicY8qKGVT6w-DlrE0Vgre7IX-n69T0bNEykoJpTK_hsmz</string>\n    <int name=\"CHANGE_LOG_VERSION\" value=\"55\" />\n</map>\n"
  },
  {
    "path": "app/src/test/resources/com/beemdevelopment/aegis/vault/aegis_plain_grouped_v2.json",
    "content": "{\n    \"version\": 1,\n    \"header\": {\n        \"slots\": null,\n        \"params\": null\n    },\n    \"db\": {\n        \"version\": 2,\n        \"entries\": [\n            {\n                \"type\": \"totp\",\n                \"uuid\": \"3ae6f1ad-2e65-4ed2-a953-1ec0dff2386d\",\n                \"name\": \"Mason\",\n                \"issuer\": \"Deno\",\n                \"icon\": null,\n                \"icon_mime\": null,\n                \"group\": \"group1\",\n                \"info\": {\n                    \"secret\": \"4SJHB4GSD43FZBAI7C2HLRJGPQ\",\n                    \"algo\": \"SHA1\",\n                    \"digits\": 6,\n                    \"period\": 30\n                }\n            },\n            {\n                \"type\": \"totp\",\n                \"uuid\": \"84b55971-a3d2-4173-a5bb-0aea113dbc17\",\n                \"name\": \"James\",\n                \"issuer\": \"SPDX\",\n                \"icon\": null,\n                \"icon_mime\": null,\n                \"group\": null,\n                \"info\": {\n                    \"secret\": \"5OM4WOOGPLQEF6UGN3CPEOOLWU\",\n                    \"algo\": \"SHA256\",\n                    \"digits\": 7,\n                    \"period\": 20\n                }\n            },\n            {\n                \"type\": \"totp\",\n                \"uuid\": \"3deaff2e-f181-4837-80e1-fdf0c54e9363\",\n                \"name\": \"Elijah\",\n                \"issuer\": \"Airbnb\",\n                \"icon\": null,\n                \"icon_mime\": null,\n                \"group\": \"group1\",\n                \"info\": {\n                    \"secret\": \"7ELGJSGXNCCTV3O6LKJWYFV2RA\",\n                    \"algo\": \"SHA512\",\n                    \"digits\": 8,\n                    \"period\": 50\n                }\n            },\n            {\n                \"type\": \"hotp\",\n                \"uuid\": \"0a8c0571-ff6f-4b02-aa4b-50553b4fb4fe\",\n                \"name\": \"James\",\n                \"issuer\": \"Issuu\",\n                \"icon\": null,\n                \"icon_mime\": null,\n                \"group\": \"group2\",\n                \"info\": {\n                    \"secret\": \"YOOMIXWS5GN6RTBPUFFWKTW5M4\",\n                    \"algo\": \"SHA1\",\n                    \"digits\": 6,\n                    \"counter\": 1\n                }\n            },\n            {\n                \"type\": \"hotp\",\n                \"uuid\": \"03e572f2-8ebd-44b0-a57e-e958af74815d\",\n                \"name\": \"Benjamin\",\n                \"issuer\": \"Air Canada\",\n                \"icon\": null,\n                \"icon_mime\": null,\n                \"group\": null,\n                \"info\": {\n                    \"secret\": \"KUVJJOM753IHTNDSZVCNKL7GII\",\n                    \"algo\": \"SHA256\",\n                    \"digits\": 7,\n                    \"counter\": 50\n                }\n            },\n            {\n                \"type\": \"hotp\",\n                \"uuid\": \"b25f8815-007f-40f7-a700-ce058ac05435\",\n                \"name\": \"Mason\",\n                \"issuer\": \"WWE\",\n                \"icon\": null,\n                \"icon_mime\": null,\n                \"group\": null,\n                \"info\": {\n                    \"secret\": \"5VAML3X35THCEBVRLV24CGBKOY\",\n                    \"algo\": \"SHA512\",\n                    \"digits\": 8,\n                    \"counter\": 10300\n                }\n            },\n            {\n                \"type\": \"steam\",\n                \"uuid\": \"5b11ae3b-6fc3-4d46-8ca7-cf0aea7de920\",\n                \"name\": \"Sophia\",\n                \"issuer\": \"Boeing\",\n                \"icon\": null,\n                \"icon_mime\": null,\n                \"group\": null,\n                \"info\": {\n                    \"secret\": \"JRZCL47CMXVOQMNPZR2F7J4RGI\",\n                    \"algo\": \"SHA1\",\n                    \"digits\": 5,\n                    \"period\": 30\n                }\n            }\n        ]\n    }\n}"
  },
  {
    "path": "build.gradle",
    "content": "// Top-level build file where you can add configuration options common to all sub-projects/modules.\n\nbuildscript {\n    repositories {\n        mavenCentral()\n        google()\n    }\n    dependencies {\n        classpath 'com.android.tools.build:gradle:8.10.0'\n        classpath 'com.google.dagger:hilt-android-gradle-plugin:2.56.2'\n        classpath 'com.google.protobuf:protobuf-gradle-plugin:0.9.4'\n\n        // NOTE: Do not place your application dependencies here; they belong\n        // in the individual module build.gradle files\n    }\n}\n\nplugins {\n    id 'com.mikepenz.aboutlibraries.plugin' version '11.2.3'\n}\n\nallprojects {\n    repositories {\n        mavenCentral()\n        google()\n        maven { url 'https://jitpack.io' }\n    }\n}\n\ntasks.register('clean', Delete) {\n    delete rootProject.buildDir\n}\n"
  },
  {
    "path": "crowdin.yml",
    "content": "project_id: \"372633\"\npreserve_hierarchy: true\nbase_path: \"app/src/main\"\nbase_url: \"https://api.crowdin.com\"\napi_token_env: \"CROWDIN_PERSONAL_TOKEN\"\nfiles:\n  - type: \"android\"\n    source: \"res/values/strings.xml\"\n    dest: \"strings.xml\"\n    translation: \"res/values-%android_code%/%original_file_name%\"\n  - type: \"android\"\n    source: \"res/values-v29/strings.xml\"\n    dest: \"strings-v29.xml\"\n    translation: \"res/values-%android_code%-v29/%original_file_name%\"\n"
  },
  {
    "path": "docs/decrypt.py",
    "content": "#!/usr/bin/env python3\n\n# this depends on the 'cryptography' package\n# pip install cryptography\n\n# example usage: ./scripts/decrypt.py --input ./app/src/test/resources/com/beemdevelopment/aegis/importers/aegis_encrypted.json\n# password: test\n\nimport argparse\nimport base64\nimport getpass\nimport io\nimport json\nimport sys\n\nfrom cryptography.hazmat.primitives.ciphers.aead import AESGCM\nfrom cryptography.hazmat.primitives.kdf.scrypt import Scrypt\nfrom cryptography.hazmat.backends import default_backend\nimport cryptography\nbackend = default_backend()\n\ndef die(msg, code=1):\n    print(msg, file=sys.stderr)\n    exit(code)\n\ndef main():\n    parser = argparse.ArgumentParser(description=\"Decrypt an Aegis vault\")\n    parser.add_argument(\"--input\", dest=\"input\", required=True, help=\"encrypted Aegis vault file\")\n    parser.add_argument(\"--output\", dest=\"output\", default=\"-\", help=\"output file ('-' for stdout)\")\n    args = parser.parse_args()\n\n    # parse the Aegis vault file\n    with io.open(args.input, \"r\") as f:\n        data = json.load(f)\n\n    # ask the user for a password\n    password = getpass.getpass().encode(\"utf-8\")\n\n    # extract all password slots from the header\n    header = data[\"header\"]\n    slots = [slot for slot in header[\"slots\"] if slot[\"type\"] == 1]\n\n    # try the given password on every slot until one succeeds\n    master_key = None\n    for slot in slots:\n        # derive a key from the given password\n        kdf = Scrypt(\n            salt=bytes.fromhex(slot[\"salt\"]),\n            length=32,\n            n=slot[\"n\"],\n            r=slot[\"r\"],\n            p=slot[\"p\"],\n            backend=backend\n        )\n        key = kdf.derive(password)\n\n        # try to use the derived key to decrypt the master key\n        cipher = AESGCM(key)\n        params = slot[\"key_params\"]\n        try:\n            master_key = cipher.decrypt(\n                nonce=bytes.fromhex(params[\"nonce\"]),\n                data=bytes.fromhex(slot[\"key\"]) + bytes.fromhex(params[\"tag\"]),\n                associated_data=None\n            )\n            break\n        except cryptography.exceptions.InvalidTag:\n            pass\n\n    if master_key is None:\n        die(\"error: unable to decrypt the master key with the given password\")\n\n    # decode the base64 vault contents\n    content = base64.b64decode(data[\"db\"])\n\n    # decrypt the vault contents using the master key\n    params = header[\"params\"]\n    cipher = AESGCM(master_key)\n    db = cipher.decrypt(\n        nonce=bytes.fromhex(params[\"nonce\"]),\n        data=content + bytes.fromhex(params[\"tag\"]),\n        associated_data=None\n    )\n\n    db = db.decode(\"utf-8\")\n    if args.output != \"-\":\n        with io.open(args.output, \"w\") as f:\n            f.write(db)\n    else:\n        print(db)\n\nif __name__ == \"__main__\":\n    main()\n"
  },
  {
    "path": "docs/iconpacks.md",
    "content": "# Icon packs\n\n### The format\n\nIcon packs are .ZIP archives with a collection of icons and a ``pack.json``\nfile. The icon pack definition is a JSON file, formatted like the example below.\nAll icon packs have a name, a UUID, a version and a list of icons. The version\nnumber is incremented when a new version of the icon pack is released. The UUID\nis randomly generated once and stays the same across different versions.\n\n```json\n{\n    \"uuid\": \"c553f06f-2a17-46ca-87f5-56af90dd0500\",\n    \"name\": \"Alex' Icon Pack\",\n    \"version\": 1,\n    \"icons\": [\n        {\n            \"name\": \"Google\",\n            \"filename\": \"services/Google.png\",\n            \"category\": \"Services\",\n            \"issuer\": [ \"google\" ]\n        },\n        {\n            \"name\": \"Blizzard\",\n            \"filename\": \"services/Blizzard.png\",\n            \"category\": \"Gaming\",\n            \"issuer\": [ \"blizzard\", \"battle.net\" ]\n        }\n    ]\n}\n```\n\nEvery icon definition contains the filename of the icon file, relative to the\nroot of the .ZIP archive. Icon definitions also have a list of strings that the\nIssuer field in Aegis is matched against for automatic selection of an icon for\nnew entries. Matching is done in a case-insensitive manner. There's also a\ncategory field. Optionally, icons can also have a name.\n\nThe following image formats are supported, in order of preference:\n\n| Name | MIME          | Extension |\n|:-----|:--------------|:----------|\n| SVG  | image/svg+xml | .svg      |\n| PNG  | image/png     | .png      |\n| JPEG | image/jpeg    | .jpg      |\n\nAny files in the .ZIP archive that are not the ``pack.json`` file or referred to\nin the icons list are ignored. Such files are not extracted when importing the\nicon pack into Aegis.\n\n### Using icon packs in Aegis\n\nUsers can download an icon pack from the internet and import it into Aegis\nthrough the settings menu. Aegis extracts the icon pack to\n``icons/{uuid}/{version}``, relative to its internal storage directory. So for\nthe example icon pack above, that'd be:\n``icons/c553f06f-2a17-46ca-87f5-56af90dd0500/1``. If it has an old version of\nthe icon pack, it will be removed after successful extraction of the newer\nversion. \n\nAfter that, Aegis will start proposing icons for new entries if the issuer\nmatches with one of the icons in the pack. We'll also have an icon selection\ndialog, where all of the icons in the pack appear. When the user selects an\nicon, it is copied and stored in the vault file.\n"
  },
  {
    "path": "docs/vault.md",
    "content": "# Aegis Vault\n\nAegis persists the user's token secrets and related information to a file. This\nfile is referred to as the __vault__. Users can configure the app to store the\nvault in plain text or to encrypt it with a password.\n\nThis document describes Aegis' security design and file format. It's split up\ninto two parts. First, the cryptographic primitives and use of them for\nencryption are discussed. The second section documents the details of the file\nformat of the vault.\n\n## Security\n\n### Primitives\n\nTwo cryptographic primitives were selected for use in Aegis. An Authenticated\nEncryption with Associated Data\n([AEAD](https://en.wikipedia.org/wiki/Authenticated_encryption#Authenticated_encryption_with_associated_data))\ncipher and a Key Derivation Function\n([KDF](https://en.wikipedia.org/wiki/Key_derivation_function)).\n\n#### AEAD\n\n__AES-256__ in __GCM__ mode is used as the AEAD cipher to ensure the\nconfidentiality, integrity and authenticity of the vault contents.\n\nThis cipher requires a unique 96-bit nonce for each invocation with the same\nkey. This is not ideal, because 96 bits is not large enough to comfortably\ngenerate an unlimited amount of random numbers without getting collisions at\nsome point. It is not possible to use a monotonically increasing counter in this\ncase, because a future use case could involve using the vault on multiple\ndevices simultaneously, which would almost certainly result in nonce reuse. As a\nrepeat of the nonce would have catastrophic consequences for the confidentiality\nof the ciphertext, NIST strongly recommends not exceeding 2<sup>32</sup>\ninvocations when using random nonces with GCM. As such, the security of the\nAegis vault also relies on the assumption that this limit is never exceeded.\nThis is a reasonable assumption to make, because it's highly unlikely that an\nAegis user will ever come close to saving the vault 2<sup>32</sup> times.\n\n_Switching to a nonce misuse-resistant cipher like AES-GCM-SIV or a cipher with\na larger (192 bits) nonce like XChaCha-Poly1305 will be considered in the\nfuture._\n\n#### KDF\n\n[__scrypt__](https://en.wikipedia.org/wiki/Scrypt) is used as the KDF to derive\na key from a user-provided password, with the following parameters:\n\n| Parameter | Value          |\n|:----------|:---------------|\n| N         | 2<sup>15</sup> |\n| r         | 8              |\n| p         | 1              |\n\nThese are the same parameters as Android itself uses to derive a key for\nfull-disk encryption. Because of the memory limitations Android apps have, it's\nnot possible to increase these parameters without running into OOM conditions on\nmost devices.\n\n_Argon2 is a more modern KDF that's a bit more flexible than scrypt, because it\nallows tweaking the memory-hardness parameter and CPU-hardness parameter\nseparately, whereas scrypt ties those together into one cost parameter (N). It\nwill be considered as an alternative option to switch to in the future._\n\n### Encryption\n\nWhen a vault is first created, a random 256-bit key is generated that is used to\nencrypt the contents with AES in GCM mode. This key is referred to as the\n__master key__.\n\nAegis supports unlocking a vault with multiple different credentials. The main\ncredential is a key derived from a user-provided password. In addition to that,\nusers can also add a key backed by the Android KeyStore as a credential, which\nis only usable after biometrics authentication.\n\n#### Slots\n\nEach credential that should be able to encrypt/decrypt the contents of a vault\nhas its own __slot__. Every slot contains a copy of the master key that is\nencrypted with its credential. The process of encrypting a key with another key\nis known as __key wrapping__. This allows obtaining the master key by providing\nany of the credentials. An important consequence is that the master key is only\nas secure as the weakest credential.\n\nThis design is similar to and largely inspired by LUKS' key slot system.\n\n#### Integrity\n\nBecause of the use of an AEAD for encryption, the vault contents and encrypted\nmaster keys in the slots are checked for integrity and authenticity. The rest of\nthe file is not.\n\n### Overview\n\n![](diagram.svg)\n\n## Format\n\nThe vault is stored in JSON and encoded in UTF-8. The upper-level structure is\nshown below:\n\n```json\n{\n    \"version\": 1,\n    \"header\": {},\n    \"db\": {}\n}\n```\n\nIt starts with a ``version`` number. If a forwards incompatible change is\nintroduced to the vault format, the version number will be incremented. The\ncurrent version of the vault format is ``1``.\n\nThe [``header``](#header), if not empty, contains the list of slots and the\nencryption parameters used for decrypting the vault.\n\nThe vault contents are stored under ``db``. Its value depends on whether the\nvault is encrypted or not. If it is, the value is a string containing the Base64\nencoded (with padding) ciphertext of the vault contents. Otherwise, the value is\na JSON object. See [vault content](#vault-content) for details.\n\nFull examples of a [plain text\nvault](/app/src/test/resources/com/beemdevelopment/aegis/importers/aegis_plain.json)\nand an [encrypted\nvault](/app/src/test/resources/com/beemdevelopment/aegis/importers/aegis_encrypted.json)\nare available in the [test\ndata](/app/src/test/resources/com/beemdevelopment/aegis/importers) folder.\nThere's also an example Python script that can decrypt an Aegis vault given the\npassword: [decrypt.py](/docs/decrypt.py).\n\n### Header\n\nThe header starts with the list of [``slots``](#slots-1). Each slot contains the\nmaster key in an encrypted form together with the key wrapping parameters.\n\nIt also has a ``params`` object that holds the ``nonce`` and ``tag`` that were\nproduced during the AES-GCM encryption, encoded as a hexadecimal string. These\nencryption parameters together with the master key (which can be retrieved by\ndecrypting the ``key`` from one of the slots) are used to decrypt the vault\ncontents found in the ``db`` field.\n\nSetting ``slots`` and ``params`` to null indicates that the vault is not\nencrypted and Aegis will try to parse it as such.\n\n```json\n{\n    \"slots\": [],\n    \"params\": {\n        \"nonce\": \"0123456789abcdef01234567\",\n        \"tag\": \"0123456789abcdef0123456789abcdef\"\n    }\n}\n```\n\n#### Slots\n\nThe different slot types are identified with a numerical ID.\n\n| Type      | ID   |\n|:----------|:-----|\n| Raw       | 0x00 |\n| Password  | 0x01 |\n| Biometric | 0x02 |\n\n##### Raw\n\nThis slot type is used for raw AES key credentials. It is not used directly in\nthe app, but all other slots are based on this slot type, so this section\napplies to all of them.\n\nEach slot transforms its credential in a way that it can be used to encrypt the\nmaster key with AES-256 in GCM mode. The ``nonce``, ``tag`` and encrypted\n``key`` are encoded as a hexadecimal string and stored together. Slots also have\na unique randomly generated ``UUID`` (version 4).\n\n```json\n{\n    \"type\": 0,\n    \"uuid\": \"01234567-89ab-cdef-0123-456789abcdef\",\n    \"key\": \"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef\",\n    \"key_params\": {\n        \"nonce\": \"0123456789abcdef01234567\",\n        \"tag\": \"0123456789abcdef0123456789abcdef\"\n    }\n}\n```\n\n##### Biometric\n\nThe structure of the Biometric slot is exactly the same as the Raw slot. The\ndifference is that the wrapper key is backed by the Android KeyStore, whereas\nRaw slots don't imply use of a particular storage type.\n\n##### Password\n\nAs noted earlier, scrypt is used to derive a 256-bit key from a user-provided\npassword. A random 256-bit ``salt`` is generated and passed to scrypt to protect\nagainst rainbow table attacks. It's stored along with the ``N``, ``r`` and ``p``\nparameters.\n\n```json\n{\n    \"type\": 1,\n    \"uuid\": \"01234567-89ab-cdef-0123-456789abcdef\",\n    \"key\": \"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef\",\n    \"key_params\": {\n        \"nonce\": \"0123456789abcdef01234567\",\n        \"tag\": \"0123456789abcdef0123456789abcdef\"\n    },\n    \"n\": 32768,\n    \"r\": 8,\n    \"p\": 1,\n    \"salt\": \"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef\"\n}\n```\n\n### Vault content\n\nThe content is a JSON object encoded in UTF-8.\n\n```json\n{\n    \"version\": 3,\n    \"entries\": [],\n    \"groups\": []\n}\n```\n\nIt has a ``version`` number, a list of ``entries`` and a list of ``groups``. If\na forwards incompatible change is introduced to the content format, the version\nnumber will be incremented. The current version of the vault content format is\n``3``.\n\n| Field       | Type  | Description                              |\n|:------------|:------|:-----------------------------------------|\n| ``version`` | int   | The version of the vault content format. |\n| ``entries`` | array | A list of [entries](#entries).           |\n| ``groups``  | array | A list of [groups](#groups).             |\n\n#### Entries\n\nEach entry has a unique randomly generated ``UUID``, as well as a ``name`` and\n``issuer`` to identify the account name and service that the token is for.\n\nEntries hold the following fields:\n\n| Field         | Type           | Description                                                                     |\n|:--------------|:---------------|:--------------------------------------------------------------------------------|\n| ``type``      | string         | The type of the OTP algorithm. See table below.                                 |\n| ``uuid``      | string         | A UUID (version 4).                                                             |\n| ``name``      | string         | The account name.                                                               |\n| ``issuer``    | string         | The service that the token is for.                                              |\n| ``note``      | string         | A personal note about the entry.                                                |\n| ``icon``      | string \\| null | JPEG's encoded in Base64 with padding.                                          |\n| ``icon_mime`` | string \\| null | The MIME type of the icon. Is null if ``icon`` is null.                         |\n| ``icon_hash`` | string \\| null | The SHA-256 hash of the icon. Is null if ``icon`` is null.                      |\n| ``favorite``  | bool           | Whether the entry is a favorite or not.                                         |\n| ``info``      | object         | Information specific to the OTP type.                                           |\n| ``groups``    | array          | A list of UUIDs of groups that the entry is a member of. See [Groups](#groups). |\n\nThe ``info`` object contains different fields depending on the type of the OTP.\n\nThere are a number of supported types:\n\n| Type   | ID       | Spec                                                      |\n|:-------|:---------|:----------------------------------------------------------|\n| HOTP   | \"hotp\"   | [RFC 4226](https://datatracker.ietf.org/doc/html/rfc4226) |\n| TOTP   | \"totp\"   | [RFC 6238](https://datatracker.ietf.org/doc/html/rfc6238) |\n| Steam  | \"steam\"  | N/A                                                       |\n| MOTP   | \"motp\"   | N/A                                                       |\n| Yandex | \"yandex\" | N/A                                                       |\n\nCommon ``info`` fields for all types:\n\n| Field      | Type   | Description                        |\n|:-----------|:-------|:-----------------------------------|\n| ``secret`` | string | The Base32 encoded secret.         |\n| ``algo``   | string | The hashing algorithm.             |\n| ``digits`` | int    | The number of digits in the token. |\n\nExample of a TOTP entry:\n\n```json\n{\n    \"type\": \"totp\",\n    \"uuid\": \"01234567-89ab-cdef-0123-456789abcdef\",\n    \"name\": \"Bob\",\n    \"issuer\": \"Google\",\n    \"note\": \"Main account\",\n    \"favorite\": false,\n    \"icon\": null,\n    \"icon_mime\": null,\n    \"icon_hash\": null,\n    \"info\": {\n        \"secret\": \"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567\",\n        \"algo\": \"SHA1\",\n        \"digits\": 6,\n        \"period\": 30\n    },\n    \"groups\": [\n        \"01234567-89ab-cdef-0123-456789abcdef\"\n    ]\n}\n```\n\n##### HOTP and TOTP\n\nTOTP uses the ``period`` field, which is the time step in seconds. HOTP uses the\n``counter`` field, which is incremented every time a token is generated.\n\nThe following algorithms are supported for HOTP and TOTP:\n\n| Algorithm | ID       |\n|:----------|:---------|\n| SHA-1     | \"SHA1\"   |\n| SHA-256   | \"SHA256\" |\n| SHA-512   | \"SHA512\" |\n\n##### Steam\n\nThere is no specification available for Steam's OTP algorithm. It's essentially\nthe same as TOTP, but it uses a different final encoding step. Aegis'\nimplementation of it can be found in\n[crypto/otp/OTP.java](/app/src/main/java/com/beemdevelopment/aegis/crypto/otp/OTP.java).\n\nA couple of fields have fixed values:\n\n| Field      | Value  |\n|:-----------|:-------|\n| ``algo``   | \"SHA1\" |\n| ``period`` | 30     |\n| ``digits`` | 5      |\n\n##### MOTP\n\nThere is no specification available for MOTP. Aegis' implementation of it can be\nfound in\n[crypto/otp/MOTP.java](/app/src/main/java/com/beemdevelopment/aegis/crypto/otp/MOTP.java).\n\nA couple of fields have fixed values:\n\n| Field      | Value |\n|:-----------|:------|\n| ``algo``   | \"MD5\" |\n| ``period`` | 10    |\n| ``digits`` | 6     |\n\nMOTP-specific fields:\n\n| Field   | Type   | Description |\n|:--------|:-------|:------------|\n| ``pin`` | string | 4-digit PIN |\n\n##### Yandex\n\nThere is no specification available for Yandex's OTP algorithm. Aegis'\nimplementation can be found in\n[crypto/otp/YAOTP.java](/app/src/main/java/com/beemdevelopment/aegis/crypto/otp/YAOTP.java)\n\nA couple of fields have fixed values:\n\n| Field      | Value    |\n|:-----------|:---------|\n| ``algo``   | \"SHA256\" |\n| ``period`` | 30       |\n| ``digits`` | 8        |\n\nYandex-specific fields:\n\n| Field   | Type   | Description    |\n|:--------|:-------|:---------------|\n| ``pin`` | string | 4-16 digit PIN |\n\n#### Groups\n\nA group consists of a ``name`` and a randomly generated ``uuid`` (version 4).\n\n| Field    | Type   | Description            |\n|:---------|:-------|:-----------------------|\n| ``uuid`` | string | A UUID (version 4).    |\n| ``name`` | string | The name of the group. |\n\nExample:\n\n```json\n{\n    \"uuid\": \"01234567-89ab-cdef-0123-456789abcdef\",\n    \"name\": \"Personal\"\n}\n```\n"
  },
  {
    "path": "gradle/wrapper/gradle-wrapper.properties",
    "content": "#Tue Aug 15 23:01:16 CEST 2023\ndistributionBase=GRADLE_USER_HOME\ndistributionPath=wrapper/dists\ndistributionUrl=https\\://services.gradle.org/distributions/gradle-8.14.1-bin.zip\nzipStoreBase=GRADLE_USER_HOME\nzipStorePath=wrapper/dists\n"
  },
  {
    "path": "gradle.properties",
    "content": "# Project-wide Gradle settings.\n\n# IDE (e.g. Android Studio) users:\n# Gradle settings configured through the IDE *will override*\n# any settings specified in this file.\n\n# For more details on how to configure your build environment visit\n# http://www.gradle.org/docs/current/userguide/build_environment.html\n\n# Specifies the JVM arguments used for the daemon process.\n# The setting is particularly useful for tweaking memory settings.\n# Default value: -Xmx10248m -XX:MaxPermSize=256m\n# org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8\n\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\nandroid.enableJetifier=false\nandroid.useAndroidX=true\norg.gradle.jvmargs=-Xmx8g\n"
  },
  {
    "path": "gradlew",
    "content": "#!/usr/bin/env sh\n\n#\n# Copyright 2015 the original author or authors.\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\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='\"-Xmx64m\" \"-Xms64m\"'\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\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 or MSYS, switch paths to Windows format before running java\nif [ \"$cygwin\" = \"true\" -o \"$msys\" = \"true\" ] ; then\n    APP_HOME=`cygpath --path --mixed \"$APP_HOME\"`\n    CLASSPATH=`cygpath --path --mixed \"$CLASSPATH\"`\n    \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=`expr $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\nexec \"$JAVACMD\" \"$@\"\n"
  },
  {
    "path": "gradlew.bat",
    "content": "@rem\r\n@rem Copyright 2015 the original author or authors.\r\n@rem\r\n@rem Licensed under the Apache License, Version 2.0 (the \"License\");\r\n@rem you may not use this file except in compliance with the License.\r\n@rem You may obtain a copy of the License at\r\n@rem\r\n@rem      https://www.apache.org/licenses/LICENSE-2.0\r\n@rem\r\n@rem Unless required by applicable law or agreed to in writing, software\r\n@rem distributed under the License is distributed on an \"AS IS\" BASIS,\r\n@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n@rem See the License for the specific language governing permissions and\r\n@rem limitations under the License.\r\n@rem\r\n\r\n@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 Resolve any \".\" and \"..\" in APP_HOME to make it shorter.\r\nfor %%i in (\"%APP_HOME%\") do set APP_HOME=%%~fi\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=\"-Xmx64m\" \"-Xms64m\"\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\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": "metadata/en-US/full_description.txt",
    "content": "Aegis Authenticator is a free, secure and open source app to manage your 2-step verification tokens for your online services.\n\n<b>Compatibility</b>\nAegis supports the HOTP and TOTP algorithms. These two algorithms are industry-standard and widely supported, making Aegis compatible with thousands of services. Any web service that supports Google Authenticator will also work with Aegis Authenticator.\n\n<b>Encryption and biometric unlock</b>\nAll of your one-time passwords are stored in a vault. If you choose to set a password (highly recommended), the vault will be encrypted using strong cryptography. If someone with malicious intent gets a hold of the vault file, it’s impossible for them to retrieve the contents without knowing the password. Entering your password each time you need access to a one-time password can be cumbersome. Fortunately, you can also enable biometric unlock if your device has a biometrics sensor (i.e. fingerprint or face unlock).\n\n<b>Organization</b>\nOver time, you'll likely accumulate tens of entries in your vault. Aegis Authenticator has lots of organization options to make finding the one you need at a particular moment easier. Set a custom icon for an entry to make it easier to find. Search by account name or service name. Have a lot of one-time passwords? Add them to custom groups for easier access. Personal, Work and Social can each get their own group.\n\n<b>Backups</b>\nTo make sure you will never lose access to your online accounts, Aegis Authenticator can create automatic backups of the vault to a location of your choosing. If your cloud provider supports the Storage Access Framework of Android (like Nextcloud does), it can even create automatic backups to the cloud. Creating manual exports of the vault is also supported.\n\n<b>Making the switch</b>\nTo make the switch easier, Aegis Authenticator can import the entries of lots of other authenticators, including: 2FAS Authenticator, Authenticator Plus, Authy, andOTP, FreeOTP, FreeOTP+, Google Authenticator, Microsoft Authenticator, Steam, TOTP Authenticator and WinAuth (root access is required for the apps that don't have an option to export).\n\n<b>Feature overview</b>\n<ul><li>Free and open source</li><li>Secure<ul><li>Encrypted, can be unlocked with a password or biometrics</li><li>Screen capture prevention</li><li>Tap to reveal</li></ul></li><li>Compatible with Google Authenticator</li><li>Supports industry standard algorithms: HOTP and TOTP</li><li>Lots of ways to add new entries<ul><li>Scan a QR code or an image of one</li><li>Enter details manually</li><li>Import from other popular authenticator apps</li></ul></li><li>Organization<ul><li>Alphabetic/custom sorting</li><li>Custom or automatically generated icons</li><li>Group entries together</li><li>Advanced entry editing</li><li>Search by name/issuer</li></ul></li><li>Material design with multiple themes: Light, Dark, AMOLED</li><li>Export (plaintext or encrypted)</li><li>Automatic backups of the vault to a location of your choosing</li></ul>\n\n<b>Open source and license</b>\nAegis Authenticator is open source (licensed under GPL v3) and the source code can be found here: http://github.com/beemdevelopment/Aegis\n"
  },
  {
    "path": "metadata/en-US/short_description.txt",
    "content": "Free, secure and open source 2FA app to manage tokens for your online services"
  },
  {
    "path": "metadata/en-US/title.txt",
    "content": "Aegis Authenticator"
  },
  {
    "path": "settings.gradle",
    "content": "include ':app'\n"
  }
]