[
  {
    "path": ".github/ISSUE_TEMPLATE/bug_report.yml",
    "content": "name: ❌ Bug report\ndescription: Report errors or unexpected behavior\nlabels: ❌ bug\nbody:\n- type: checkboxes\n  attributes:\n      label: 🧐 Have you read the FAQ and viewed similar issues?\n      description: <strong>❗️❗️ Important:</strong> Please review the <a href=\"https://telegra.ph/SpotX-FAQ-09-19\">FAQ</a> and check both open and closed <a href=\"https://github.com/SpotX-Official/SpotX/issues\">issue</a>, as your concern may have already been addressed. However, please be aware that if it's discovered that requested actions weren't completed, the issue may be closed without explanation.\n      options:\n        - label: I have read the FAQ\n          required: true\n        - label: I have checked older issues, open and closed\n          required: true\n        - label: I did a clean install of SpotX as <a href=\"https://telegra.ph/SpotX-FAQ-09-19#1.-Clean-installation\">described in the FAQ</a>\n          required: true  \n- type: markdown\n  attributes:\n    value: \"###\"    \n- type: input\n  id: lang_spoti\n  attributes:\n    label: Сountry of your account\n    description: You can view your country on your account page, in paragraph <a href=\"https://www.spotify.com/account/profile/\">Country or region</a>.\n    placeholder: \"e.g. Ukraine\"\n  validations:\n    required: true \n- type: markdown\n  attributes:\n    value: \"###\"     \n- type: dropdown\n  id: plan\n  attributes:\n    label: What is your Spotify Plan?\n    description: You can view your plan on your account page, under <a href=\"https://www.spotify.com/account/\">Your plan</a>.\n    options:\n      - Free\n      - Premium\n  validations:\n    required: true\n- type: markdown\n  attributes:\n    value: \"###\"        \n- type: dropdown\n  id: spicetify\n  attributes:\n    label: Do you have Spicetify installed?\n    description: <a href=\"https://spicetify.app/\">Spicetify</a> is a command line tool to customize Spotify client.\n    options:\n      - \"No\"\n      - \"Yes\"\n  validations:\n    required: true\n- type: markdown\n  attributes:\n    value: \"###\"       \n- type: textarea\n  attributes:\n    label: ℹ Computer information\n    description: |\n      - Spotify: e.g. <kbd>1.1.90.859.gf1bb1e36</kbd> (Avoid labeling version as \"latest\" due to regional update variations in Spotify)\n        - In the open Spotify client in the upper left corner, click <kbd>•••</kbd> → <kbd>Help</kbd> → <kbd>About Spotify</kbd>\n      - Windows: e.g. <kbd>Windows 11 21H2 22000.527</kbd> \n        - Press <kbd>Win</kbd> + <kbd>Pause/Break</kbd> to open the page to copy from.\n      - PowerShell: e.g. <kbd>5.1.19041.1200</kbd>\n        - Press <kbd>Win</kbd> + <kbd>R</kbd> then type \"powershell,\" and press <kbd>Enter</kbd>, type the following command <kbd>Get-Host | Select-Object Version</kbd>\n    placeholder: |\n        - Spotify: \n        - Windows: \n        - PowerShell:  \n    value: |\n        - Spotify: \n        - Windows: \n        - PowerShell: \n    render: markdown   \n  validations:\n    required: true    \n- type: textarea\n  attributes:\n    label: 📝 Description\n    description: List steps to reproduce the error and details on what happens and what you expected to happen.\n    value: |\n      1.\n      2.\n      3.\n      ...\n  validations:\n    required: true\n- type: textarea\n  attributes:\n    label: 📸 Screenshots\n    description: Place any screenshots of the issue here if needed\n  validations:\n    required: false    \n    \n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/config.yml",
    "content": "blank_issues_enabled: false\ncontact_links:\n  - name: ✏️ FAQ\n    url: https://telegra.ph/SpotX-FAQ-09-19\n    about: Read the frequently asked questions, maybe it will help solve your problem right now."
  },
  {
    "path": ".github/ISSUE_TEMPLATE/installer-new-translation.yml",
    "content": "name: 🌐 Installer translation\ndescription: Translate the installer into your language\nlabels: 🌐 New translation\nbody:\n- type: input\n  id: lang\n  attributes:\n    label: What language do you want to translate into?\n    description: Also note the already added <a href=\"https://github.com/SpotX-Official/SpotX/tree/main/scripts/installer-lang\">languages</a>\n    placeholder: e.g. English \n  validations:\n    required: true\n- type: input\n  id: langpowershell\n  attributes:\n    label: Enter language name in PowerShell\n    description: Enter the following command in the PowerShell terminal <kbd>$PSUICulture</kbd>, write the answer in the line below. For this to work, your Windows must be in this language.\n    placeholder: e.g. en-US\n  validations:\n    required: true\n- type: textarea\n  attributes:\n    label: 📝 Translation strings\n    description: |\n      Now you can start translating strings, a few notes before you start:\n        - Translation strings start after an equals sign and are enclosed in quotation marks\n        - There are variables before the equal sign, they do not need to be translated.\n        - Also, if you come across characters <kbd>{0}</kbd>, <kbd>{1}</kbd>, <kbd>[Y/N]</kbd> or file names, then just skip them.\n        \n      Good luck to you. \n    value: |\n      Welcome         = \"\n      ╔══════════════════════════════╗\n      ║ Welcome to SpotX for Windows ║\n      ╚══════════════════════════════╝\"\n      Incorrect       = \"Oops, an incorrect value,\"\n      Incorrect2      = \"enter again through \"\n      Download        = \"Error downloading\"\n      Download2       = \"Will re-request in 5 seconds...\"\n      Download3       = \"Error again\"\n      Download4       = \"Check your network settings and run the installation again\"\n      Download5       = \"Downloading Spotify\"\n      StopScript      = \"Script is stopped\"\n      MsSpoti         = \"The Microsoft Store version of Spotify has been detected which is not supported\"\n      MsSpoti2        = \"Uninstall Spotify Microsoft Store edition ? [Y/N]\"\n      MsSpoti3        = \"Automatically uninstalling Spotify MS...\"\n      MsSpoti4        = \"Uninstalling Spotify MS...\"\n      Prem            = \"Modification for premium account...\"\n      OldV            = \"Found outdated version of Spotify\"\n      OldV2           = \"Your Spotify version ({0}) is outdated, the current latest version is — {1}\"\n      OldV3           = \"Want to update ? [Y/N]\"\n      AutoUpd         = \"Automatic update to the recommended version\"\n      DelOrOver       = \"Remove the current version ({0}) or install over it? Y [Remove] / N [Install Over]\"\n      DelOld          = \"Uninstalling old Spotify...\"\n      NewV            = \"Unsupported version of Spotify found\"\n      NewV2           = \"Your Spotify version ({0}) has not been tested. The stable version for SpotX is {1}\"\n      NewV3           = \"Continue with {0} (errors may occur) ? [Y/N]\"\n      Recom           = \"Install the latest version {0} ? [Y/N]\"\n      DelNew          = \"Uninstalling an untested Spotify...\"\n      DownSpoti       = \"Downloading and installing Spotify\"\n      DownSpoti2      = \"Please wait...\"\n      PodcatsOff      = \"Off Podcasts\"\n      PodcastsOn      = \"On Podcasts\"\n      PodcatsSelect   = \"Hide podcasts, shows, and audiobooks on the homepage ? [Y/N]\"\n      DowngradeNote   = \"It is recommended to block because there is already a newer version of Spotify\"\n      UpdBlock        = \"Spotify updates blocked\"\n      UpdUnblock      = \"Spotify updates are not blocked\"\n      UpdSelect       = \"Block Spotify updates ? [Y/N]\"\n      ModSpoti        = \"Patching Spotify...\"\n      Error           = \"Error\"\n      FileLocBroken   = \"Location of Spotify files is broken, uninstall Spotify client and run the script again\"\n      Spicetify       = \"Spicetify detected, it must be installed after SpotX, open recommended actions in FAQ ? [Y/N]\"\n      NoRestore       = \"SpotX has already been installed, xpui.bak not found. `nPlease uninstall Spotify client and run Install.bat again\"\n      InstallComplete = \"installation completed\"\n      HostInfo        = \"Unwanted URLs found in hosts file\"\n      HostBak         = \"Backing up hosts.bak...\"\n      HostDel         = \"Trying to remove unwanted URLs from the original hosts file...\"\n      HostError       = \"Something went wrong while editing the hosts file, edit it manually or run the script as administrator\" \n    render: txt  \n  validations:\n    required: true        \n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/itranslation-fix.yml",
    "content": "name: \"🌐 Localization/Translation issue\"\ndescription: Report incorrect translations.\nlabels: 🌐 Fix translation \nbody:\n- type: textarea\n  attributes: \n    label: ❌ Actual phrase(s)\n    placeholder: What is there?  Please include a screenshot as that is extremely helpful. \n  validations:\n    required: true\n- type: textarea\n  attributes: \n    label: ✔️ Expected phrase(s)\n    placeholder: What was expected?\n  validations:\n    required: true\n- type: textarea\n  attributes:\n    label: ℹ Why is the current translation wrong\n    placeholder: Why do you feel this is incorrect?\n  validations:\n    required: true\n"
  },
  {
    "path": ".github/workflows/auto-closes-false-positive.yml",
    "content": "name: Auto Close Antivirus False Positive Issues\n\non:\n  issues:\n    types: [opened, reopened, edited]\n\njobs:\n  auto-close:\n    runs-on: ubuntu-latest\n    permissions:\n      issues: write\n    \n    steps:\n      - name: Check for AV-related keywords\n        uses: actions/github-script@v7\n        with:\n          script: |\n            const issue = context.payload.issue;\n            const title = issue.title.toLowerCase();\n            const actor = context.payload.sender.login;\n            \n            // Проверяем, кто выполнил действие (не создателя issue, а того кто сейчас действует)\n            const privilegedUsers = ['amd64fox'];\n            \n            if (privilegedUsers.includes(actor)) {\n              console.log('Issue #' + issue.number + ' action performed by @' + actor + ' - will not auto-close');\n              return;\n            }\n            \n            const keywords = [\n              'av',\n              'virus',\n              'malware',\n              'trojan',\n              'defender',\n              'smartscreen',\n              'antivirus',\n              'anti-virus',\n              'anti virus',\n              'malicious',\n              'agenttesla',\n              'virustotal',\n              'eset',\n              'avast',\n              'avg',\n              'kaspersky',\n              'norton',\n              'mcafee',\n              'bitdefender'\n            ];\n            \n            const containsKeyword = keywords.some(keyword => {\n              const regex = new RegExp('\\\\b' + keyword + '\\\\b', 'i');\n              return regex.test(title);\n            });\n            \n            if (containsKeyword) {\n              console.log('Issue #' + issue.number + ' contains AV-related keywords in title');\n              \n              const comment = '# ⚠️ Automatic Closure: Antivirus False Positive\\n\\n' +\n                '> [!NOTE]\\n' +\n                '> This issue has been automatically closed because it appears to be related to an **antivirus false positive detection**.\\n\\n' +\n                '---\\n\\n' +\n                '## 🔍 What causes false positives?\\n\\n' +\n                'Different antiviruses may respond differently to installing **SpotX**, as SpotX uses a system interpreter **PowerShell** to modify an application **Spotify**.\\n\\n' +\n                'Also, most AV use **heuristic analysis**, which looks for threats based on assumptions or by matching its own set of rules. This imperfect method also leads to a high number of false positives.\\n\\n' +\n                '---\\n\\n' +\n                '## ✅ What should you do?\\n\\n' +\n                '### Step 1: Disable Your Antivirus\\n' +\n                '> [!IMPORTANT]\\n' +\n                '> Before running the SpotX patcher, **temporarily disable or pause your antivirus protection**.\\n\\n' +\n                '> [!WARNING]\\n' +\n                '> **Signs you need to disable your antivirus:**\\n' +\n                '> - The terminal window is forcibly closed\\n' +\n                '> - Errors flagging the script as malicious\\n' +\n                '> - The bat installation file is deleted\\n\\n' +\n                '### Step 2: Run the Installation\\n' +\n                'Once your antivirus is disabled, proceed with the SpotX installation.\\n\\n' +\n                '### Step 3: Re-enable Protection\\n' +\n                'After the installation is complete, you can turn your antivirus back on. If your AV then marks some files in the Spotify folder, **add them to the exclusion list** of your antivirus.\\n\\n' +\n                '> [!TIP]\\n' +\n                '> We do not provide instructions on how to disable AV protection or add files/folders to exclusions, as there are many different security systems and the process varies for each. The easiest solution if you don\\'t know how to do this is to use [Google](https://www.google.com).\\n\\n' +\n                '---\\n\\n' +\n                '<div align=\"center\">\\n\\n' +\n                '**🤖 This issue was automatically closed by a bot.**\\n\\n' +\n                'If you believe your issue isn\\'t related to a false positive, please mention **@&#8203;amd64fox**\\n\\n' +\n                '</div>';\n\n              await github.rest.issues.createComment({\n                owner: context.repo.owner,\n                repo: context.repo.repo,\n                issue_number: issue.number,\n                body: comment\n              });\n              \n              const existingLabels = issue.labels.map(label => label.name);\n              if (existingLabels.length > 0) {\n                for (const label of existingLabels) {\n                  await github.rest.issues.removeLabel({\n                    owner: context.repo.owner,\n                    repo: context.repo.repo,\n                    issue_number: issue.number,\n                    name: label\n                  });\n                }\n              }\n              \n              await github.rest.issues.addLabels({\n                owner: context.repo.owner,\n                repo: context.repo.repo,\n                issue_number: issue.number,\n                labels: ['❎ false positive']\n              });\n              \n              await github.rest.issues.update({\n                owner: context.repo.owner,\n                repo: context.repo.repo,\n                issue_number: issue.number,\n                state: 'closed',\n                state_reason: 'not_planned'\n              });\n              \n              console.log('Issue #' + issue.number + ' was automatically closed');\n            } else {\n              console.log('Issue #' + issue.number + ' does not contain AV-related keywords in title');\n            }\n"
  },
  {
    "path": ".github/workflows/check_spotx.yml",
    "content": "name: Check Spotx for the latest Spotify\n\non:\n  workflow_dispatch:\n\njobs:\n  build:\n    runs-on: windows-latest\n\n    steps:\n    - name: Checkout code\n      uses: actions/checkout@v4\n      \n    - name: Run Spotx\n      shell: powershell\n      run: |\n        $jsonUrl = \"https://raw.githubusercontent.com/amd64fox/LoaderSpot/main/versions.json\"\n        $resp = Invoke-RestMethod -Uri $jsonUrl\n\n        # Get a link to the x86 installer for the first version\n        $firstVersion = $resp.PSObject.Properties.Name | Select-Object -First 1\n        $x64InstallerUrl = $resp.$firstVersion.links.win.x64\n\n        # Regex to find the desired part of the link\n        $regex = [regex]::Match($x64InstallerUrl, \"spotify_installer-(.+?)\\.exe\")\n        $version = $regex.Groups[1].Value\n        \n        # Incoming parameters\n        $parametrs = '-Verbose -new_theme -v $version -sp-over -cache_limit 1000 -block_update_on -lyrics_stat spotify -urlform_goofy \"https://docs.google.com/forms/formResponse\" -idbox_goofy \"9999999\" -podcasts_off -adsections_off -lyrics_block'\n        \n        # Run Spotx\n        iex \"& { $(iwr -useb 'https://raw.githubusercontent.com/SpotX-Official/SpotX/refs/heads/main/run.ps1') } $parametrs\" \n"
  },
  {
    "path": ".github/workflows/update-license.yml",
    "content": "name: Update License Year\n\non:\n  schedule:\n    - cron: '0 0 1 1 *'\n  workflow_dispatch: \n\npermissions:\n  contents: write\n\njobs:\n  update-license:\n    runs-on: ubuntu-latest\n    steps:\n      - name: Checkout repository\n        uses: actions/checkout@v4\n\n      - name: Update year in LICENSE\n        run: |\n          CURRENT_YEAR=$(date +'%Y')\n          sed -i -E \"s/Copyright \\(c\\) ([0-9]{4})(-[0-9]{4})?/Copyright (c) \\1-$CURRENT_YEAR/\" LICENSE\n\n      - name: Commit and push changes\n        run: |\n          git config --global user.name \"github-actions[bot]\"\n          git config --global user.email \"github-actions[bot]@users.noreply.github.com\"\n          git add LICENSE\n          \n          if git diff --staged --quiet; then\n            echo \"No changes needed\"\n          else\n            git commit -m \"chore: update license year to $(date +'%Y')\"\n            git push\n          fi\n"
  },
  {
    "path": "Install_New_theme.bat",
    "content": "@echo off\n\n:: Line for changing spotx parameters, each parameter should be separated by a space\nset param=-new_theme\n\nset url='https://raw.githubusercontent.com/SpotX-Official/SpotX/refs/heads/main/run.ps1'\nset url2='https://spotx-official.github.io/SpotX/run.ps1'\nset tls=[Net.ServicePointManager]::SecurityProtocol = [Net.ServicePointManager]::SecurityProtocol -bor [Net.SecurityProtocolType]::Tls12;\n\n%SYSTEMROOT%\\System32\\WindowsPowerShell\\v1.0\\powershell.exe ^\n-Command %tls% $p='%param%'; \"\"\" & { $(try { iwr -useb %url% } catch { $p+= ' -m'; iwr -useb %url2% })} $p \"\"\"\" | iex\n\npause\nexit /b"
  },
  {
    "path": "Install_Old_theme.bat",
    "content": "@echo off\n\n:: Line for changing spotx parameters, each parameter should be separated by a space\nset param=-v 1.2.13.661.ga588f749 -confirm_spoti_recomended_over -block_update_on\n\nset url='https://raw.githubusercontent.com/SpotX-Official/SpotX/refs/heads/main/run.ps1'\nset url2='https://spotx-official.github.io/SpotX/run.ps1'\nset tls=[Net.ServicePointManager]::SecurityProtocol = [Net.ServicePointManager]::SecurityProtocol -bor [Net.SecurityProtocolType]::Tls12;\n\n%SYSTEMROOT%\\System32\\WindowsPowerShell\\v1.0\\powershell.exe ^\n-Command %tls% $p='%param%'; \"\"\" & { $(try { iwr -useb %url% } catch { $p+= ' -m'; iwr -useb %url2% })} $p \"\"\"\" | iex\n\npause\nexit /b\n"
  },
  {
    "path": "LICENSE",
    "content": "MIT License\n\nCopyright (c) 2021-2026 amd64fox\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n"
  },
  {
    "path": "README.md",
    "content": "<p align=\"center\">\n  <a href=\"https://github.com/SpotX-Official/SpotX/releases\"><img src=\"https://spotx-official.github.io/images/logos/logo.png\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://t.me/spotify_windows_mod\"><img src=\"https://spotx-official.github.io/images/shields/SpotX_Channel.svg\"></a>\n  <a href=\"https://t.me/SpotxCommunity\"><img src=\"https://spotx-official.github.io/images/shields/SpotX_Community.svg\"></a>\n  <a href=\"https://github.com/SpotX-Official/SpotX-Bash\"><img src=\"https://spotx-official.github.io/images/shields/SpotX_for_Mac&Linux.svg\"></a>\n  <a href=\"https://telegra.ph/SpotX-FAQ-09-19\"><img src=\"https://spotx-official.github.io/images/shields/faq.svg\"></a>\n</p>\n\n<h2> \n  <div align=\"center\">\n    <b>Patcher for Spotify Desktop Client on Windows </b>\n  </div> \n</h2>\n\n<p align=\"center\"> •\n  <a href=\"#requirements\">Requirements</a> •\n  <a href=\"#features\">Features</a> •\n  <a href=\"#installation--update\">Installation</a> •\n  <a href=\"#uninstall\">Uninstall</a> •\n  <a href=\"#faq\">FAQ</a> •\n  <a href=\"#disclaimer\">Disclaimer</a>\n</p>\n\n<h1 id=\"requirements\">Requirements</h1>\n\n- **OS:** Windows 7-11\n- **Spotify:** [Official desktop version](https://loadspot.pages.dev) (Microsoft Store version is not suitable)\n- **PowerShell:** 5.1 and above\n\n<h1 id=\"features\">Features</h1>\n\n- **Blocks all banner, video, and audio ads** in the client\n- **Hiding podcasts, episodes, and audiobooks** from the homepage (optional)\n- **Block Spotify automatic updates** (optional)\n- **Some native experimental features have been changed**\n- **Analytics sending has been disabled** \n- **Advanced installation [parameters](https://github.com/SpotX-Official/SpotX/discussions/60)**\n\n<h1 id=\"installation--update\">Installation / Update</h1>\n<h3>Choose installation type:</h3>\n<details>\n<summary><small>Usual installation (New theme)</small></summary><p>\n  \n  #### During installation, you need to confirm some actions, also contains:\n  \n  - New theme activated (new right and left sidebar, some cover change)\n  - All [experimental features](https://github.com/SpotX-Official/SpotX/discussions/50) included\n\n  <h4> </h4>\n  \n#### Just download and run [Install_New_theme.bat](https://raw.githack.com/amd64fox/SpotX/main/Install_New_theme.bat)\n\nor\n\n#### Run The following command in PowerShell:\n\n```ps1\niex \"& { $(iwr -useb 'https://raw.githubusercontent.com/SpotX-Official/SpotX/refs/heads/main/run.ps1') } -new_theme\"\n```\n\n#### mirror\n\n```ps1\niex \"& { $(iwr -useb 'https://spotx-official.github.io/SpotX/run.ps1') } -m -new_theme\"\n```\n\n</details>\n  \n\n<details>\n<summary><small>Usual installation (Old theme)</small></summary><p>\n  \n  #### During installation, you need to confirm some actions, also contains:\n  - Forced installation of version 1.2.13 (since the old theme was removed in subsequent versions)\n  - Old theme activated\n  - Automatic blocking of Spotify updates\n  - All [experimental features](https://github.com/SpotX-Official/SpotX/discussions/50) included\n\n  <h4> </h4>\n  \n#### Just download and run [Install_Old_theme.bat](https://raw.githack.com/amd64fox/SpotX/main/Install_Old_theme.bat)\n\nor\n\n#### Run The following command in PowerShell:\n\n```ps1\niex \"& { $(iwr -useb 'https://raw.githubusercontent.com/SpotX-Official/SpotX/refs/heads/main/run.ps1') } -v 1.2.13.661.ga588f749 -confirm_spoti_recomended_over -block_update_on\"\n```\n\n#### mirror\n\n```ps1\niex \"& { $(iwr -useb 'https://spotx-official.github.io/SpotX/run.ps1') } -m -v 1.2.13.661.ga588f749 -confirm_spoti_recomended_over -block_update_on\"\n```\n\n</details>\n \n<details>\n<summary><small>Full installation</small></summary><p>\n  \n  <h4>Full installation without confirmation, what does it do?</h4> \n  \n  - New theme activated (new right and left sidebar, some cover change)\n  - Hiding podcasts/episodes/audiobooks from the homepage\n  - Activated [static theme](https://github.com/SpotX-Official/SpotX/discussions/50#discussioncomment-4096066) <kbd>spotify</kbd> for lyrics\n  - Hiding [ad-like sections](https://github.com/SpotX-Official/SpotX/discussions/50#discussioncomment-4478943)\n  - All [experimental features](https://github.com/SpotX-Official/SpotX/discussions/50) included\n  - Removal of Spotify MS if it was found \n  - Installation of the recommended version of Spotify (if another client has already been found, it will be installed over) \n  - Blocking of Spotify updates\n  - After the installation is completed, the client will autorun.\n  \n<h4> </h4>\n\n#### Just download and run [Install_Auto.bat](https://raw.githack.com/amd64fox/SpotX/main/scripts/Install_Auto.bat)\n\nor\n\n#### Run The following command in PowerShell:\n\n```ps1\niex \"& { $(iwr -useb 'https://raw.githubusercontent.com/SpotX-Official/SpotX/refs/heads/main/run.ps1') } -confirm_uninstall_ms_spoti -confirm_spoti_recomended_over -podcasts_off -block_update_on -start_spoti -new_theme -adsections_off -lyrics_stat spotify\"\n```\n\n#### mirror\n\n```ps1\niex \"& { $(iwr -useb 'https://spotx-official.github.io/SpotX/run.ps1') } -m -confirm_uninstall_ms_spoti -confirm_spoti_recomended_over -podcasts_off -block_update_on -start_spoti -new_theme -adsections_off -lyrics_stat spotify\"\n```\n\n</details>\n\n<details>\n<summary><small>Other types of installations</summary><p>\n\n<details>\n<summary><small>Installation for premium</small></summary><p>\n  \n  #### Usual installation only without ad blocking, for those who have a premium account, also contains:\n  \n  - New theme activated (new right and left sidebar, some cover change)\n  - Disabled only audio ads in podcasts\n  - All [experimental features](https://github.com/SpotX-Official/SpotX/discussions/50) included\n\n  <h4> </h4>\n  \n#### Just download and run [Install_Prem.bat](https://raw.githack.com/amd64fox/SpotX/main/scripts/Install_Prem.bat)\n\nor\n\n#### Run The following command in PowerShell:\n\n```ps1\niex \"& { $(iwr -useb 'https://raw.githubusercontent.com/SpotX-Official/SpotX/refs/heads/main/run.ps1') } -premium -new_theme\"\n```\n\n#### mirror\n\n```ps1\niex \"& { $(iwr -useb 'https://spotx-official.github.io/SpotX/run.ps1') } -m -premium -new_theme\"\n```\n\n</details>\n\n<details>\n<summary><small>Installing with parameters</small></summary><p>\n\nYou can specify various parameters for a more flexible installation, more [details here](https://github.com/SpotX-Official/SpotX/discussions/60)\n\n</details>\n\n</details>\n\n<h1 id=\"uninstall\">Uninstall</h1>\n\n- Just run [Uninstall.bat](https://raw.githack.com/amd64fox/SpotX/main/Uninstall.bat)\n\nor\n\n- Reinstall Spotify ([Full uninstall Spotify](https://github.com/amd64fox/Uninstall-Spotify) recommended)\n\n<h1 id=\"faq\">FAQ</h1>\n\n Read [FAQ](https://telegra.ph/SpotX-FAQ-09-19)\n\n<h1 id=\"disclaimer\">Disclaimer</h1>\n\nSpotX is a tool that modifies the official Spotify client, provided as an evaluation version — use it at your own risk.\n"
  },
  {
    "path": "Uninstall.bat",
    "content": "@echo off\r\nSETLOCAL ENABLEDELAYEDEXPANSION\r\n\r\nset \"SPOTIFY_PATH=%Appdata%\\Spotify\"\r\n\r\nif exist \"%SPOTIFY_PATH%\\chrome_elf.dll.bak\" ( \r\n    del /s /q \"%SPOTIFY_PATH%\\chrome_elf.dll\" > NUL 2>&1\r\n    move \"%SPOTIFY_PATH%\\chrome_elf.dll.bak\" \"%SPOTIFY_PATH%\\chrome_elf.dll\" > NUL 2>&1\r\n)\r\n\r\nif exist \"%SPOTIFY_PATH%\\Spotify.dll.bak\" ( \r\n    del /s /q \"%SPOTIFY_PATH%\\Spotify.dll\" > NUL 2>&1\r\n    move \"%SPOTIFY_PATH%\\Spotify.dll.bak\" \"%SPOTIFY_PATH%\\Spotify.dll\" > NUL 2>&1\r\n)\r\n\r\nif exist \"%SPOTIFY_PATH%\\Spotify.bak\" ( \r\n    del /s /q \"%SPOTIFY_PATH%\\Spotify.exe\" > NUL 2>&1\r\n    move \"%SPOTIFY_PATH%\\Spotify.bak\" \"%SPOTIFY_PATH%\\Spotify.exe\" > NUL 2>&1\r\n)\r\n\r\nif exist \"%SPOTIFY_PATH%\\Apps\\xpui.bak\" (\r\n    del /s /q \"%SPOTIFY_PATH%\\Apps\\xpui.spa\" > NUL 2>&1\r\n    move \"%SPOTIFY_PATH%\\Apps\\xpui.bak\" \"%SPOTIFY_PATH%\\Apps\\xpui.spa\" > NUL 2>&1\r\n) \r\n\r\nif exist \"%temp%\\SpotX_Temp*\" (\r\n    for /d %%i in (\"%temp%\\SpotX_Temp*\") do (\r\n        rd /s/q \"%%i\" > NUL 2>&1\r\n    )\r\n)\r\n\r\necho Patch successfully removed\r\npause"
  },
  {
    "path": "css-helper/lyrics-color/colors.css",
    "content": ":root {\n    --past: {{past}};\n    --current: {{current}};\n    --next: {{next}};\n    --hover: {{hover}};\n    --background: {{background}};\n    --musixmatch: {{musixmatch}};\n}"
  },
  {
    "path": "css-helper/lyrics-color/rules.css",
    "content": "@import url('colors.css');\n\n/* mini lyrics */\n.Li269NgzkU2gI4KOP9sM,\n.I2WIloMMjsBeMaIS8H3v,\n.McI3hD7aCfpq015LJa6X,\n.gpDSOimnzH4zTJmE7UR5 {\n    --lyrics-color-active: var(--current) !important;\n    --lyrics-color-inactive: var(--next) !important;\n    --lyrics-color-passed: var(--past) !important;\n    --lyrics-color-background: var(--background) !important;\n}\n\n/* title unsynced */\np[class*=\"e-\"][class*=\"-text\"].encore-text-body-small {\n    color: var(--musixmatch) !important;\n    margin-bottom: 8px !important;\n}\n\n/* fixed color of lyrics button */\n[data-testid=\"lyrics-npv-section\"]:not(._OhUGn8Plh3mRw4awIM5):not(.Sb2rC16jDkGc9eweOU8g):not(._YRfjT5prbRuSXcNK9WR):not(.RXRGSIFllAhUYWKYlANd) {\n    background-color:\n        #1f1f1f !important;\n}\n\n/* lyrics description */\n.ebHsEf.I4K12o0qDoITOLr2AEs0,\n.ebHsEf.OYiGFGZJDIZ4FF4ZTDK2,\n.jKdLzW.LvLs_UgYs7ps5KdoCr0h,\n.bWzOVV._T5UDP2tItG9WGdwO5Yi,\n.hzUuLPdH48AzgQun5NYQ [data-encore-id=\"type\"],\n.hzUuLPdH48AzgQun5NYQ [data-encore-id=\"text\"],\nbody .LomBcMvfM8AEmZGquAdj,\nbody .W_EplVEAbZrZURqfLiQC,\nbody .kGR_hu4tdj9PnUlSPaRL,\n.GML6YUVCeJvRhGznLnqm,\nbody .iq4cgi0YEKr6DGaTtzUj,\nbody .KDhLFoEqoClhH12bsfrS {\n    color: var(--musixmatch) !important;\n}\n\n/* lyrics not available message */\n.C3pBU1DsOUJJOAv89ZFT,\n.T67LFP0PElpfkkLuegQt,\n.e7eFLioNSG5PAi1qVFT4 {\n    color: var(--musixmatch) !important;\n}\n\n/* full cinema lyrics */\n.FUYNhisXTCmbzt9IDxnT,\n.tr8V5eHsUaIkOYVw7eSG,\n.hW9km7ku6_iggdWDR_Lg,\n.lofIAg8Ixko3mfBrbfej {\n    --lyrics-color-active: var(--current) !important;\n    --lyrics-color-inactive: var(--next) !important;\n    --lyrics-color-passed: var(--past) !important;\n    --lyrics-color-background: var(--background) !important;\n}\n\n/* fix previous lyrics for old versions */\n.H2J92dVdr0ykdOX5azL1,\n.KnFq2ijXFdOtyl4Iebjv {\n    color: var(--past) !important;\n    opacity: 1 !important;\n}\n\n/* hover */\n.vapgYYF2HMEeLJuOWGq5:hover,\n._LKG3z7SnerR0eigPCoK:hover,\n.NHVfxGs2HwmI_fly2JC4:hover,\n.gaHIufRWhoWbiT8S6zuM:hover,\n.FQYXZaa0aDIrse54YlYO:hover {\n    color: var(--hover) !important;\n    /* remove underline */\n    text-decoration: none !important;\n}\n\n/* lyrics unsynced */\n.HxblHEsl2WX2yhubfVIc,\n.SruqsAzX8rUtY2isUZDF,\n.eTLjCqbDo7QehPEPz86a,\n.AEfhRyqGa3vzQrgfdwWE.Re403AJffPPuZmX7LRJj,\n.NHVfxGs2HwmI_fly2JC4.E64X_eoy6xsJmDdKKHja,\n.gaHIufRWhoWbiT8S6zuM.Qo3OkrSis5IWlP9Tchbr,\n.AEfhRyqGa3vzQrgfdwWE .Re403AJffPPuZmX7LRJj {\n    color: var(--next) !important;\n}\n\n/* full screen lyrics */\n.npv-lyrics__text-wrapper--previous .npv-lyrics__text {\n    color: var(--past) !important;\n}\n\n.npv-lyrics__text-wrapper--current .npv-lyrics__text {\n    color: var(--current) !important;\n}\n\n.npv-lyrics__text-wrapper--next .npv-lyrics__text {\n    color: var(--next) !important;\n}\n\n.npv-lyrics__text.npv-lyrics__text--credits,\n.npv-lyrics__text--unsynced-warning {\n    color: var(--musixmatch) !important;\n}\n\n.npv-lyrics__text--unsynced {\n    color: var(--next) !important;\n}\n\n.npv-background-color {\n    background: var(--background) !important;\n}\n\n.npv-main-container {\n    background: transparent !important;\n}\n\n.npv-lyrics__gradient-background {\n    background: -webkit-gradient(linear, left top, left bottom, from(rgba(18, 18, 18, 0)), color-stop(30%, var(--background)), color-stop(60%, var(--background))) !important;\n    background: -webkit-linear-gradient(top, rgba(18, 18, 18, 0) 0%, var(--background) 30%, var(--background) 60%) !important;\n    background: linear-gradient(to bottom, rgba(18, 18, 18, 0) 0%, var(--background) 30%, var(--background) 60%) !important;\n}\n\n/* read along podcasts  */\n.l6lFMYQteTVnTcHnLywc,\n._nDkCIVgkWayq3tqiIuW,\n.B_wut2Bw4HwLr3w8rNfM {\n    --transcript-color-background: var(--background) !important;\n    --transcript-color-text: var(--next) !important;\n    --transcript-color-highlightText: var(--current) !important;\n}"
  },
  {
    "path": "js-helper/goofyHistory.js",
    "content": "// max track buffer for localStorage\n// when the limit is reached, old tracks will be removed from the beginning, and new ones will be added to the end\nconst MAX_TRACKS = 1000;\n\n// max delay between switching tracks (ms)\nconst MAX_DELAY = 1000;\n\nfunction debounce(func, wait) {\n    let timeout;\n    return function executedFunction(...args) {\n        const later = () => {\n            clearTimeout(timeout);\n            func(...args);\n        };\n        clearTimeout(timeout);\n        timeout = setTimeout(later, wait);\n    };\n}\n\nconst loadTracksFromStorage = () => {\n    try {\n        const savedTracks = localStorage.getItem('sentSpotifyTracks');\n        return new Set(savedTracks ? JSON.parse(savedTracks) : []);\n    } catch (error) {\n        console.error('Error loading tracks from localStorage:', error);\n        return new Set();\n    }\n};\n\nconst saveTracksToStorage = (tracks) => {\n    try {\n        let tracksArray = [...tracks];\n\n        if (tracksArray.length > MAX_TRACKS) {\n            tracksArray = tracksArray.slice(-MAX_TRACKS);\n        }\n\n        localStorage.setItem('sentSpotifyTracks', JSON.stringify(tracksArray));\n    } catch (error) {\n        console.error('Error saving tracks to localStorage:', error);\n    }\n};\n\nconst unique = loadTracksFromStorage();\n\nasync function sendToGoogleForm(uri, urlForm, idBox) {\n    try {\n        await fetch(urlForm, {\n            \"headers\": {\n                \"content-type\": \"application/x-www-form-urlencoded\",\n            },\n            \"body\": \"entry.\" + idBox + \"=\" + uri,\n            \"method\": \"POST\",\n            \"mode\": \"no-cors\",\n        });\n        saveTracksToStorage(unique);\n    } catch (error) {\n        console.error('Error sending uri to google form:', error);\n    }\n}\n\nconst goofyHistory = debounce(async (e, urlForm, idBox) => {\n    const uri = e?.item?.uri;\n    if (uri && uri.includes('spotify:track:') && !unique.has(uri)) {\n        unique.add(uri);\n        await sendToGoogleForm(uri, urlForm, idBox);\n    }\n}, MAX_DELAY);"
  },
  {
    "path": "js-helper/sectionBlock.js",
    "content": "const API_PATHFINDER = 'api-partner.spotify.com/pathfinder';\nconst API_RECOMMENDATIONS = 'api.spotify.com/v1/views/personalized-recommendations';\n\nconst BLOCKED_SECTIONS_BY_CATEGORY = {\n    'Party': [\n        '0JQ5DAnM3wGh0gz1MXnul1'\n    ],\n    'Chill': [\n        '0JQ5DAnM3wGh0gz1MXnukV'\n    ],\n    'Best of the Year': [\n        '0JQ5IMCbQBLupUQrQFeCzx'\n    ],\n    'Best of Artists / Tracks': [\n        '0JQ5DAnM3wGh0gz1MXnu3C'\n    ],\n    'Best of songwriters': [\n        '0JQ5DAnM3wGh0gz1MXnu4w'\n    ],\n    'Biggest Indie Playlists': [\n        '0JQ5IMCbQBLhSb02SGYpDM'\n    ],\n    'Charts': [\n        '0JQ5DAnM3wGh0gz1MXnu5g'\n    ],\n    'Dinner': [\n        '0JQ5DAnM3wGh0gz1MXnu3p'\n    ],\n    'Featured Charts': [\n        '0JQ5DAob0KOew1FBAMSmBz'\n    ],\n    'Focus': [\n        '0JQ5DAob0JCuWaGLU6ntFY',\n        '0JQ5DAnM3wGh0gz1MXnulP'\n    ],\n    'Fresh new music': [\n        '0JQ5DAnM3wGh0gz1MXnu3s'\n    ],\n    'Gaming music': [\n        '0JQ5DAob0LaV9FOMJ9utY5'\n    ],\n    'Happy': [\n        '0JQ5DAnM3wGh0gz1MXnu3q'\n    ],\n    'ICE PHONK': [\n        '0JQ5IMCbQBLiqrNCH9VvmA'\n    ],\n    'Mood': [\n        '0JQ5DAnM3wGh0gz1MXnucG',\n        '0JQ5DAob0JCuWaGLU6ntFT'\n    ],\n    'Most Listened 2023': [\n        '0JQ5IMCbQBLicmNERjnGn5'\n    ],\n    'Music to game to': [\n        '0JQ5DAob0Jr9ClCbkV4pZD'\n    ],\n    'Popular Albums / Artists': [\n        '0JQ5DAnM3wGh0gz1MXnu3B'\n    ],\n    'Popular new releases': [\n        '0JQ5DAnM3wGh0gz1MXnu3D'\n    ],\n    'Popular radio': [\n        '0JQ5DAnM3wGh0gz1MXnu4h'\n    ],\n    'Sad': [\n        '0JQ5DAnM3wGh0gz1MXnu3u',\n        '0JQ5DAnM3wGh0gz1MXnul2'\n    ],\n    'Throwback': [\n        '0JQ5DAnM3wGh0gz1MXnu3w',\n        '0JQ5DAnM3wGh0gz1MXnul4'\n    ],\n    'Throwback Thursday / Spotify Playlists / Good night ': [\n        '0JQ5DAuChZYPe9iDhh2mJz'\n    ],\n    'Today`s biggest hits': [\n        '0JQ5DAnM3wGh0gz1MXnu3M'\n    ],\n    'Trending now': [\n        '0JQ5DAnM3wGh0gz1MXnu3E'\n    ],\n    'Workout': [\n        '0JQ5DAnM3wGh0gz1MXnu3x',\n        '0JQ5DAnM3wGh0gz1MXnul6'\n    ],\n    'Now defrosting': [\n        '0JQ5IMCbQBLlC31GvtaB6w'\n    ],\n    'Unknown': [\n        '0JQ5IMCbQBLqTJyy28YCa9',\n        '0JQ5DAnM3wGh0gz1MXnu7R'\n    ]\n};\n\nconst BLOCKED_SECTIONS = {};\nfor (const [category, ids] of Object.entries(BLOCKED_SECTIONS_BY_CATEGORY)) {\n    for (const id of ids) {\n        BLOCKED_SECTIONS[id] = category;\n    }\n}\n\nconst BLOCKED_CONTENT_TYPES = new Set(['Podcast', 'Audiobook', 'Episode']);\n\nconst createSectionAdapter = (isPersonalizedRecommendations) => {\n    if (isPersonalizedRecommendations) {\n        return {\n            getId: (item) => {\n                const href = item?.href;\n                if (!href) return null;\n\n                const parts = href.split('/');\n                let id = parts[parts.length - 1];\n\n                if (id.startsWith('section')) {\n                    id = id.substring(7);\n                }\n                return id;\n            },\n            getTitle: (item) => item?.content?.name || 'Unknown',\n            getRef: (item) => item?.href,\n            getSectionId: (item) => item?.id,\n\n            getContentItems: (item) => item?.content?.items,\n            getContentData: (contentItem) => contentItem?.content,\n            getContentType: (contentItem) => contentItem?.type,\n            getContentTypeName: (contentItem) => contentItem?.content_type\n        };\n    } else {\n        return {\n            getId: (item) => {\n                const uri = item?.uri;\n                if (!uri) return null;\n\n                const parts = uri.split(':');\n                return parts[parts.length - 1];\n            },\n            getTitle: (item) => item?.data?.title?.text || 'Unknown',\n            getRef: (item) => item?.uri,\n            getSectionId: (item) => null,\n\n            getContentItems: (item) => item?.sectionItems?.items,\n            getContentData: (contentItem) => contentItem?.content?.data,\n            getContentType: (contentItem) => null,\n            getContentTypeName: (contentItem) => null\n        };\n    }\n};\n\nconst processShortcutsSection = (contentItems, adapter, removed) => {\n    if (!contentItems?.length) return false;\n\n    for (let j = contentItems.length - 1; j >= 0; j--) {\n        const contentItem = contentItems[j];\n        const contentType = adapter.getContentTypeName(contentItem);\n\n        if (contentType !== 'PODCAST_EPISODE' && contentType !== 'AUDIOBOOK') {\n            continue;\n        }\n\n        removed.push({\n            type: contentType,\n            name: contentItem?.name || 'Unknown',\n            uri: contentItem?.uri || 'N/A'\n        });\n        contentItems.splice(j, 1);\n    }\n\n    return true;\n};\n\nconst isPodcastSection = (contentItems, adapter) => {\n    if (!contentItems?.length) return false;\n    return adapter.getContentType(contentItems[0]) === 'show';\n};\n\nconst removeBlockedContent = (contentItems, adapter, removed) => {\n    if (!contentItems?.length) return;\n\n    for (let j = contentItems.length - 1; j >= 0; j--) {\n        const contentData = adapter.getContentData(contentItems[j]);\n\n        if (!contentData || !BLOCKED_CONTENT_TYPES.has(contentData.__typename)) {\n            continue;\n        }\n\n        removed.push({\n            type: contentData.__typename,\n            name: contentData.name || 'Unknown',\n            uri: contentData.uri || 'N/A'\n        });\n        contentItems.splice(j, 1);\n    }\n};\n\nfunction sectionBlock(data, type) {\n    const body = data?.data?.home;\n    const sections = body?.sectionContainer?.sections?.items;\n    const items = data?.content?.items || data?.data?.content?.items;\n\n    const isPersonalizedRecommendations = !!items && !body;\n    const targetArray = isPersonalizedRecommendations ? items : sections;\n\n    function removeSections() {\n        if (!targetArray?.length) return;\n\n        const adapter = createSectionAdapter(isPersonalizedRecommendations);\n        const removed = [];\n\n        for (let i = targetArray.length - 1; i >= 0; i--) {\n            const item = targetArray[i];\n            const sectionId = adapter.getId(item);\n\n            if (!sectionId) continue;\n\n            if (sectionId in BLOCKED_SECTIONS) {\n                removed.push({\n                    id: sectionId,\n                    knownAs: BLOCKED_SECTIONS[sectionId],\n                    actualTitle: adapter.getTitle(item),\n                    ref: adapter.getRef(item)\n                });\n                targetArray.splice(i, 1);\n            }\n        }\n\n        if (removed.length > 0) {\n            console.log(`[SectionBlock] Removed ${removed.length} blocked section(s):`, removed);\n        }\n    }\n\n    function removePodcasts() {\n        if (!targetArray?.length) return;\n\n        const adapter = createSectionAdapter(isPersonalizedRecommendations);\n        const removed = [];\n\n        for (let i = targetArray.length - 1; i >= 0; i--) {\n            const item = targetArray[i];\n            const contentItems = adapter.getContentItems(item);\n\n            if (isPersonalizedRecommendations) {\n                const sectionId = adapter.getSectionId(item);\n\n                if (sectionId === 'shortcuts') {\n                    processShortcutsSection(contentItems, adapter, removed);\n                    continue;\n                }\n\n                if (isPodcastSection(contentItems, adapter)) {\n                    removed.push({\n                        type: 'PodcastSection',\n                        sectionId: sectionId,\n                        sectionName: adapter.getTitle(item),\n                        itemsCount: contentItems.length\n                    });\n                    targetArray.splice(i, 1);\n                    continue;\n                }\n            }\n\n            removeBlockedContent(contentItems, adapter, removed);\n        }\n\n        if (removed.length > 0) {\n            console.log(`[SectionBlock] Removed ${removed.length} podcast/audiobook item(s):`, removed);\n        }\n    }\n\n    function removeCanvasSections() {\n        if (!sections?.length) return;\n\n        const removed = [];\n\n        for (let i = sections.length - 1; i >= 0; i--) {\n            if (sections[i]?.data?.__typename === 'HomeFeedBaselineSectionData') {\n                removed.push({\n                    uri: sections[i]?.uri || 'N/A',\n                    title: sections[i]?.data?.title?.text || 'Canvas Section'\n                });\n                sections.splice(i, 1);\n            }\n        }\n\n        if (removed.length > 0) {\n            console.log(`[SectionBlock] Removed ${removed.length} canvas section(s):`, removed);\n        }\n    }\n\n    if ((body?.greeting && sections) || items) {\n        const actions = {\n            section: removeSections,\n            podcast: removePodcasts,\n            canvas: removeCanvasSections,\n            all: () => {\n                removeSections();\n                removePodcasts();\n\n                if (!isPersonalizedRecommendations) {\n                    removeCanvasSections();\n                }\n            }\n        };\n\n        if (Array.isArray(type)) {\n            type.forEach(t => actions[t]?.());\n        } else {\n            actions[type]?.();\n        }\n    }\n}\n\nconst originalFetch = window.fetch;\n\nwindow.fetch = async function (...args) {\n    const [url] = args;\n    const urlString = typeof url === 'string' ? url : url?.url || '';\n\n    const isPathfinderUrl = urlString.includes(API_PATHFINDER);\n    const isPersonalizedRecommendationsUrl = urlString.includes(API_RECOMMENDATIONS);\n\n    if (!isPathfinderUrl && !isPersonalizedRecommendationsUrl) {\n        return originalFetch.apply(this, args);\n    }\n\n    const response = await originalFetch.apply(this, args);\n    const clonedResponse = response.clone();\n\n    try {\n        const data = await response.json();\n\n        const shouldModify = (isPathfinderUrl && data?.data?.home) ||\n            (isPersonalizedRecommendationsUrl && data?.content);\n\n        if (!shouldModify) {\n            return clonedResponse;\n        }\n\n        sectionBlock(data, '');\n\n        return new Response(JSON.stringify(data), {\n            status: response.status,\n            statusText: response.statusText,\n            headers: response.headers\n        });\n\n    } catch (error) {\n        console.error('Fetch intercept error:', error);\n        return clonedResponse;\n    }\n};"
  },
  {
    "path": "patches/Augmented translation/ru.json",
    "content": "{\n    \"lang\": {\n        \"version\": \"1.2.80\",\n        \"language\": \"Russian\"\n    },\n    \"1\": {\n        \"match\": \"\\\"Confirm your age\\\"\",\n        \"replace\": \"\\\"Подтвердите свой возраст\\\"\"\n    },\n    \"2\": {\n        \"match\": \"\\\"%price%/month after. Terms and conditions apply. One month free not available for users who have already tried Premium.\\\"\",\n        \"replace\": \"\\\"%price%/месяц спустя. Принять условия. Один месяц бесплатно, недоступно для пользователей, которые уже попробовали Premium.\\\"\"\n    },\n    \"3\": {\n        \"match\": \"\\\"Offline storage location\\\"\",\n        \"replace\": \"\\\"Хранилище скачанных треков\\\"\"\n    },\n    \"4\": {\n        \"match\": \"\\\"Click to start listening\\\"\",\n        \"replace\": \"\\\"Нажмите, чтобы начать прослушивание\\\"\"\n    },\n    \"5\": {\n        \"match\": \"\\\"Change speed\\\"\",\n        \"replace\": \"\\\"Изменение скорости\\\"\"\n    },\n    \"6\": {\n        \"match\": \"\\\"You need to be at least 19 years old to listen to explicit content marked with\\\"\",\n        \"replace\": \"\\\"Вам должно быть не менее 19 лет, чтобы слушать непристойный контент, помеченный значком\\\"\"\n    },\n    \"7\": {\n        \"match\": \"\\\"Add to another playlist\\\"\",\n        \"replace\": \"\\\"Добавить в другой плейлист\\\"\"\n    },\n    \"8\": {\n        \"match\": \"\\\"Character counter\\\"\",\n        \"replace\": \"\\\"Счетчик символов\\\"\"\n    },\n    \"9\": {\n        \"match\": \"\\\"Toggle lightsaber hilt. Current is [{]0[}].\\\"\",\n        \"replace\": \"\\\"Переключить рукоять светового меча. Текущий {0}.\\\"\"\n    },\n    \"10\": {\n        \"match\": \"\\\"Doors at .0.\\\"\",\n        \"replace\": \"\\\"Вход в {0}\\\"\"\n    },\n    \"11\": {\n        \"match\": \"\\\"Show at .0.\\\"\",\n        \"replace\": \"\\\"Показ в {0}\\\"\"\n    },\n    \"12\": {\n        \"match\": \"\\\"Your Location\\\"\",\n        \"replace\": \"\\\"Ваше местоположение\\\"\"\n    },\n    \"13\": {\n        \"match\": \"\\\"Override certain user attributes to test regionalized content programming. The overrides are only active in this app.\\\"\",\n        \"replace\": \"\\\"Переопределите определенные атрибуты пользователя, чтобы протестировать региональное программирование контента. Переопределения активны только в этом приложении.\\\"\"\n    },\n    \"14\": {\n        \"match\": \" was released this week!\",\n        \"replace\": \" был выпущен на этой неделе!\"\n    },\n    \"15\": {\n        \"match\": \"\\\"Speed [{]0[}]×\\\"\",\n        \"replace\": \"\\\"Скорость {0}×\\\"\"\n    },\n    \"16\": {\n        \"match\": \"\\\"Artist\\\"\",\n        \"replace\": \"\\\"Исполнитель\\\"\"\n    },\n    \"17\": {\n        \"match\": \"\\\"... of ...\\\"\",\n        \"replace\": \"\\\"{0} из {1}\\\"\"\n    },\n    \"18\": {\n        \"match\": \"\\\"Не удалось изменить\\\"\",\n        \"replace\": \"\\\"Не удалось обновить\\\"\"\n    },\n    \"19\": {\n        \"match\": \"Dynamic loudness control for podcasts - Actively maintain optimal podcast volume level for a clear and balanced sound experience\",\n        \"replace\": \"Динамическое управление громкостью для подкастов - активное поддержание оптимального уровня громкости подкаста для четкого и сбалансированного звукового восприятия\"\n    },\n    \"20\": {\n        \"match\": \"\\\"Build .0. is available\\\"\",\n        \"replace\": \"\\\"Сборка {0} доступна\\\"\"\n    },\n    \"21\": {\n        \"match\": \"\\\"Downloading build .0....\\\"\",\n        \"replace\": \"\\\"Загрузка сборки {0}...\\\"\"\n    },\n    \"22\": {\n        \"match\": \"\\\"Build .0. is ready to install\\\"\",\n        \"replace\": \"\\\"Сборка {0} готова к установке\\\"\"\n    },\n    \"23\": {\n        \"match\": \"\\\"Remove\\\"\",\n        \"replace\": \"\\\"Удалить\\\"\"\n    },\n    \"24\": {\n        \"match\": \"\\\"Do not translate\\\"\",\n        \"replace\": \"\\\"Не переводить\\\"\"\n    },\n    \"25\": {\n        \"match\": \"\\\"Translating to .0.\\\"\",\n        \"replace\": \"\\\"Перевожу на {0}\\\"\"\n    },\n    \"26\": {\n        \"match\": \"\\\"Translation to .0. not available\\\"\",\n        \"replace\": \"\\\"Перевод на {0} недоступен\\\"\"\n    },\n    \"27\": {\n        \"match\": \"\\\"Translate lyrics\\\"\",\n        \"replace\": \"\\\"Перевести текст песни\\\"\"\n    },\n    \"28\": {\n        \"match\": \"\\\"Spotify MiniPlayer\\\"\",\n        \"replace\": \"\\\"мини-плеер Spotify\\\"\"\n    },\n    \"29\": {\n        \"match\": \"\\\"Venue\\\"\",\n        \"replace\": \"\\\"Место проведения\\\"\"\n    },\n    \"30\": {\n        \"match\": \"\\\"We couldn't find the venue\\\"\",\n        \"replace\": \"\\\"Мы не смогли найти место проведения\\\"\"\n    },\n    \"31\": {\n        \"match\": \"\\\"Bring back to main window\\\"\",\n        \"replace\": \"\\\"Вернуться к основному окну\\\"\"\n    },\n    \"32\": {\n        \"match\": \"\\\"Chapter\\\"\",\n        \"replace\": \"\\\"Глава\\\"\"\n    },\n    \"33\": {\n        \"match\": \"\\\"Song\\\"\",\n        \"replace\": \"\\\"Трек\\\"\"\n    },\n    \"34\": {\n        \"match\": \"\\\"Episode\\\"\",\n        \"replace\": \"\\\"Эпизод\\\"\"\n    },\n    \"35\": {\n        \"match\": \"\\\"The venue you requested couldn.t be found, please try again.\\\"\",\n        \"replace\": \"\\\"Запрошенное вами место проведения не найдено, попробуйте снова.\\\"\"\n    },\n    \"36\": {\n        \"match\": \"\\\"There was an error fetching the venue.\\\"\",\n        \"replace\": \"\\\"Произошла ошибка при получении места проведения.\\\"\"\n    },\n    \"37\": {\n        \"match\": \"\\\"Concerts\\\"\",\n        \"replace\": \"\\\"Концерты\\\"\"\n    },\n    \"38\": {\n        \"match\": \"\\\"all times are local to the venue\\\"\",\n        \"replace\": \"\\\"все время указано по месту проведения\\\"\"\n    },\n    \"39\": {\n        \"match\": \"\\\"Spotify Spotlight Presale\\\"\",\n        \"replace\": \"\\\"Предпродажа Spotify Spotlight\\\"\"\n    },\n    \"40\": {\n        \"match\": \"\\\"Get access\\\"\",\n        \"replace\": \"\\\"Получить доступ\\\"\"\n    },\n    \"41\": {\n        \"match\": \"\\\"Continue playing\\\"\",\n        \"replace\": \"\\\"Продолжить воспроизведение\\\"\"\n    },\n    \"42\": {\n        \"match\": \"\\\"Fans First\\\"\",\n        \"replace\": \"\\\"Для фанатов\\\"\"\n    },\n    \"43\": {\n        \"match\": \"\\\"Offer ends in .0.:.1.:.2.\\\"\",\n        \"replace\": \"\\\"До конца предложения: {0}:{1}:{2}\\\"\"\n    },\n    \"44\": {\n        \"match\": \"\\\"Search in Authors\\\"\",\n        \"replace\": \"\\\"Искать в Авторах\\\"\"\n    },\n    \"45\": {\n        \"match\": \"\\\"A soundtrack for every part of the day.\\\"\",\n        \"replace\": \"\\\"Саундтрек для любого времени суток.\\\"\"\n    },\n    \"46\": {\n        \"match\": \"\\\"See your unique playlist\\\"\",\n        \"replace\": \"\\\"Посмотрите свой уникальный плейлист\\\"\"\n    },\n    \"47\": {\n        \"match\": \"\\\"You.ll still get:\\\"\",\n        \"replace\": \"\\\"Вы также получите:\\\"\"\n    },\n    \"48\": {\n        \"match\": \"\\\"Trending songs in .country. . Spotify\\\"\",\n        \"replace\": \"\\\"Популярные песни в %country% | Spotify\\\"\"\n    },\n    \"49\": {\n        \"match\": \"\\\"Featured Charts in .country. . Spotify\\\"\",\n        \"replace\": \"\\\"Избранные чарты в %country% . Spotify\\\"\"\n    },\n    \"50\": {\n        \"match\": \"\\\"Popular artists in .country. . Spotify\\\"\",\n        \"replace\": \"\\\"Популярные исполнители в %country% | Spotify\\\"\"\n    },\n    \"51\": {\n        \"match\": \"\\\"Popular albums in .country. . Spotify\\\"\",\n        \"replace\": \"\\\"Популярные альбомы в %country% | Spotify\\\"\"\n    },\n    \"52\": {\n        \"match\": \"\\\"Discover trending songs in .country. today.\\\"\",\n        \"replace\": \"\\\"Откройте для себя трендовые песни в %country% сегодня.\\\"\"\n    },\n    \"53\": {\n        \"match\": \"\\\"Discover Featured Charts in .country. today.\\\"\",\n        \"replace\": \"\\\"Откройте для себя избранные чарты в %country% сегодня.\\\"\"\n    },\n    \"54\": {\n        \"match\": \"\\\"Discover the most popular artists in .country. today.\\\"\",\n        \"replace\": \"\\\"Откройте для себя самых популярных исполнителей в %country% сегодня.\\\"\"\n    },\n    \"55\": {\n        \"match\": \"\\\"Discover the most popular albums in .country. today.\\\"\",\n        \"replace\": \"\\\"Откройте для себя самые популярные альбомы в %country% сегодня.\\\"\"\n    },\n    \"56\": {\n        \"match\": \"\\\"Close\\\"\",\n        \"replace\": \"\\\"Закрыть\\\"\"\n    },\n    \"57\": {\n        \"match\": \"\\\"Ok, we won.t play music from this artist again.\\\"\",\n        \"replace\": \"\\\"Хорошо, мы больше не будем воспроизводить музыку этого исполнителя\\\"\"\n    },\n    \"58\": {\n        \"match\": \"\\\"Compact list\\\"\",\n        \"replace\": \"\\\"Компактный список\\\"\"\n    },\n    \"59\": {\n        \"match\": \"\\\"Compact grid\\\"\",\n        \"replace\": \"\\\"Компактная сетка\\\"\"\n    },\n    \"60\": {\n        \"match\": \"\\\"Lyrics preview\\\"\",\n        \"replace\": \"\\\"Превью текста\\\"\"\n    },\n    \"61\": {\n        \"match\": \"\\\"Show less\\\"\",\n        \"replace\": \"\\\"Свернуть\\\"\"\n    },\n    \"62\": {\n        \"match\": \"\\\"Show more\\\"\",\n        \"replace\": \"\\\"Развернуть\\\"\"\n    },\n    \"63\": {\n        \"match\": \"\\\"Hide lyrics\\\"\",\n        \"replace\": \"\\\"Скрыть текст\\\"\"\n    },\n    \"64\": {\n        \"match\": \"\\\"Переключиться на видеорежим\\\"\",\n        \"replace\": \"\\\"К видео\\\"\"\n    },\n    \"65\": {\n        \"match\": \"\\\"Переключиться на аудиорежим\\\"\",\n        \"replace\": \"\\\"К аудио\\\"\"\n    },\n    \"66\": {\n        \"match\": \"\\\".\\\".name..\\\" was released .years. year ago this week!\\\"\",\n        \"replace\": \"\\\"На этой неделе исполнился %years% год с момента выхода \\\\\\\"%name%\\\\\\\"!\\\"\"\n    },\n    \"67\": {\n        \"match\": \"((?:few|other)..)\\\".\\\".name..\\\" was released .years. years ago this week!\\\"\",\n        \"replace\": \"$1\\\"На этой неделе исполнилось %years% года с момента выхода \\\\\\\"%name%\\\\\\\"!\\\"\"\n    },\n    \"68\": {\n        \"match\": \"(many..)\\\".\\\".name..\\\" was released .years. years ago this week!\\\"\",\n        \"replace\": \"$1\\\"На этой неделе исполнилось %years% лет с момента выхода \\\\\\\"%name%\\\\\\\"!\\\"\"\n    },\n    \"69\": {\n        \"match\": \"\\\".Select Type. \\\"\",\n        \"replace\": \"\\\"<Выберите тип>\\\"\"\n    },\n    \"70\": {\n        \"match\": \"\\\"Connect\\\"\",\n        \"replace\": \"\\\"Подключить устройство\\\"\"\n    },\n    \"71\": {\n        \"match\": \"\\\"Синхронизация\\\"\",\n        \"replace\": \"\\\"Синхронизировать\\\"\"\n    },\n    \"72\": {\n        \"match\": \"\\\"Browse the live events feed to find more concerts.\\\"\",\n        \"replace\": \"\\\"Листайте нашу афишу, чтобы найти больше концертов.\\\"\"\n    },\n    \"73\": {\n        \"match\": \"\\\"No concerts found\\\"\",\n        \"replace\": \"\\\"Концертов не найдено\\\"\"\n    },\n    \"74\": {\n        \"match\": \"\\\"Browse the live events feed to find more venues.\\\"\",\n        \"replace\": \"\\\"Листайте нашу афишу, чтобы найти больше площадок.\\\"\"\n    },\n    \"75\": {\n        \"match\": \"\\\"No venues found\\\"\",\n        \"replace\": \"\\\"Площадок не найдено\\\"\"\n    },\n    \"76\": {\n        \"match\": \"\\\"Concerts in Your Top Genre\\\"\",\n        \"replace\": \"\\\"Концерты в вашем любимом жанре\\\"\"\n    },\n    \"77\": {\n        \"match\": \"\\\"Follow your favorite venues to discover and browse events happening near you\\\"\",\n        \"replace\": \"\\\"Подписывайтесь на любимые площадки, чтобы открывать и просматривать события рядом с вами\\\"\"\n    },\n    \"78\": {\n        \"match\": \"\\\"Search results\\\"\",\n        \"replace\": \"\\\"Результаты поиска\\\"\"\n    },\n    \"79\": {\n        \"match\": \"\\\"BPM\\\"\",\n        \"replace\": \"\\\"Темп\\\"\"\n    },\n    \"80\": {\n        \"match\": \"\\\"Folder name is required\\\"\",\n        \"replace\": \"\\\"Имя папки обязательно\\\"\"\n    },\n    \"81\": {\n        \"match\": \"\\\"Generate\\\"\",\n        \"replace\": \"\\\"Сгенерировать\\\"\"\n    },\n    \"82\": {\n        \"match\": \"\\\"Retry\\\"\",\n        \"replace\": \"\\\"Повторить\\\"\"\n    },\n    \"83\": {\n        \"match\": \"\\\"Daily\\\"\",\n        \"replace\": \"\\\"Ежедневно\\\"\"\n    },\n    \"84\": {\n        \"match\": \"\\\"Tracks update every day by 6am\\\"\",\n        \"replace\": \"\\\"Треки обновляются каждый день к 6 утра\\\"\"\n    },\n    \"85\": {\n        \"match\": \"\\\"Doesn.t update\\\"\",\n        \"replace\": \"\\\"Не обновляется\\\"\"\n    },\n    \"86\": {\n        \"match\": \"\\\"Set updates\\\"\",\n        \"replace\": \"\\\"Настроить обновления\\\"\"\n    },\n    \"87\": {\n        \"match\": \"\\\"Never\\\"\",\n        \"replace\": \"\\\"Никогда\\\"\"\n    },\n    \"88\": {\n        \"match\": \"\\\"You can still update tracks manually\\\"\",\n        \"replace\": \"\\\"Вы все еще можете обновлять треки вручную\\\"\"\n    },\n    \"89\": {\n        \"match\": \"\\\"Unknown\\\"\",\n        \"replace\": \"\\\"Неизвестно\\\"\"\n    },\n    \"90\": {\n        \"match\": \"\\\"Updates daily\\\"\",\n        \"replace\": \"\\\"Обновляется ежедневно\\\"\"\n    },\n    \"91\": {\n        \"match\": \"\\\"Updates weekly\\\"\",\n        \"replace\": \"\\\"Обновляется еженедельно\\\"\"\n    },\n    \"92\": {\n        \"match\": \"\\\"Weekly\\\"\",\n        \"replace\": \"\\\"Еженедельно\\\"\"\n    },\n    \"93\": {\n        \"match\": \"\\\"Every week at 6am every...\\\"\",\n        \"replace\": \"\\\"Каждую неделю в 6 утра каждый...\\\"\"\n    },\n    \"94\": {\n        \"match\": \"\\\"Updates every .0.\\\"\",\n        \"replace\": \"\\\"Обновляется каждый {0}\\\"\"\n    },\n    \"95\": {\n        \"match\": \"\\\"Tracks in this playlist will update daily\\\"\",\n        \"replace\": \"\\\"Треки в этом плейлисте будут обновляться ежедневно\\\"\"\n    },\n    \"96\": {\n        \"match\": \"\\\"Tracks in this playlist won.t update\\\"\",\n        \"replace\": \"\\\"Треки в этом плейлисте не будут обновляться\\\"\"\n    },\n    \"97\": {\n        \"match\": \"\\\"Tracks in this playlist will update every .0.\\\"\",\n        \"replace\": \"\\\"Треки в этом плейлисте будут обновляться каждый {0}\\\"\"\n    },\n    \"98\": {\n        \"match\": \"\\\"Got it\\\"\",\n        \"replace\": \"\\\"Понятно\\\"\"\n    },\n    \"99\": {\n        \"match\": \"\\\"This.ll reset in .0., so come back then.\\\"\",\n        \"replace\": \"\\\"Сброс через {0}, возвращайтесь позже.\\\"\"\n    },\n    \"100\": {\n        \"match\": \"\\\"Dismiss\\\"\",\n        \"replace\": \"\\\"Отклонить\\\"\"\n    },\n    \"101\": {\n        \"match\": \"\\\"You.ve reached the limit for prompting playlists\\\"\",\n        \"replace\": \"\\\"Вы достигли лимита создания плейлистов по запросу\\\"\"\n    },\n    \"102\": {\n        \"match\": \"\\\"Prompt\\\"\",\n        \"replace\": \"\\\"Запрос\\\"\"\n    },\n    \"103\": {\n        \"match\": \"\\\"Prompted Playlist\\\"\",\n        \"replace\": \"\\\"Плейлист по запросу\\\"\"\n    },\n    \"104\": {\n        \"match\": \"\\\"Customize prompt\\\"\",\n        \"replace\": \"\\\"Настроить запрос\\\"\"\n    },\n    \"105\": {\n        \"match\": \"\\\"Friday\\\"\",\n        \"replace\": \"\\\"Пятница\\\"\"\n    },\n    \"106\": {\n        \"match\": \"\\\"Monday\\\"\",\n        \"replace\": \"\\\"Понедельник\\\"\"\n    },\n    \"107\": {\n        \"match\": \"\\\"Saturday\\\"\",\n        \"replace\": \"\\\"Суббота\\\"\"\n    },\n    \"108\": {\n        \"match\": \"\\\"Sunday\\\"\",\n        \"replace\": \"\\\"Воскресенье\\\"\"\n    },\n    \"109\": {\n        \"match\": \"\\\"Thursday\\\"\",\n        \"replace\": \"\\\"Четверг\\\"\"\n    },\n    \"110\": {\n        \"match\": \"\\\"Tuesday\\\"\",\n        \"replace\": \"\\\"Вторник\\\"\"\n    },\n    \"111\": {\n        \"match\": \"\\\"Wednesday\\\"\",\n        \"replace\": \"\\\"Среда\\\"\"\n    },\n    \"112\": {\n        \"match\": \"\\\"Generate playlist\\\"\",\n        \"replace\": \"\\\"Создать плейлист\\\"\"\n    },\n    \"113\": {\n        \"match\": \"\\\"See what this prompt would create based on your tastes\\\"\",\n        \"replace\": \"\\\"Посмотрите, что этот запрос создаст на основе ваших вкусов\\\"\"\n    },\n    \"114\": {\n        \"match\": \"\\\"Beta\\\"\",\n        \"replace\": \"\\\"Бета\\\"\"\n    },\n    \"115\": {\n        \"match\": \"\\\"Generate a playlist that curates and updates\\\"\",\n        \"replace\": \"\\\"Создать плейлист, который подбирается и обновляется\\\"\"\n    },\n    \"116\": {\n        \"match\": \"\\\"Update now\\\"\",\n        \"replace\": \"\\\"Обновить сейчас\\\"\"\n    },\n    \"117\": {\n        \"match\": \"\\\"Something went wrong. Please try again\\\"\",\n        \"replace\": \"\\\"Что-то пошло не так. Пожалуйста, попробуйте снова\\\"\"\n    },\n    \"118\": {\n        \"match\": \"\\\"Private\\\"\",\n        \"replace\": \"\\\"Приватный\\\"\"\n    },\n    \"119\": {\n        \"match\": \"\\\"Public\\\"\",\n        \"replace\": \"\\\"Публичный\\\"\"\n    },\n    \"120\": {\n        \"match\": \"\\\"Set privacy\\\"\",\n        \"replace\": \"\\\"Настроить приватность\\\"\"\n    },\n    \"121\": {\n        \"match\": \"\\\"Only you and people you invite will be able to view this prompt and playlist\\\"\",\n        \"replace\": \"\\\"Только вы и приглашенные вами люди смогут видеть этот запрос и плейлист\\\"\"\n    },\n    \"122\": {\n        \"match\": \"\\\"Anyone will be able to view this prompt and playlist\\\"\",\n        \"replace\": \"\\\"Любой сможет видеть этот запрос и плейлист\\\"\"\n    },\n    \"123\": {\n        \"match\": \"\\\"Learn\\\"\",\n        \"replace\": \"\\\"Узнать\\\"\"\n    },\n    \"124\": {\n        \"match\": \"\\\"You.re prompting with an AI. Don.t include any sensitive data. .learn. how your data is managed and shared.\\\"\",\n        \"replace\": \"\\\"Вы делаете запрос к ИИ. Не указывайте конфиденциальные данные. %learn%, как управляются и передаются ваши данные.\\\"\"\n    },\n    \"125\": {\n        \"match\": \"\\\"New prompt\\\"\",\n        \"replace\": \"\\\"Новый запрос\\\"\"\n    },\n    \"126\": {\n        \"match\": \"\\\"Edit prompt\\\"\",\n        \"replace\": \"\\\"Изменить запрос\\\"\"\n    },\n    \"127\": {\n        \"match\": \"\\\"Analyzing...\\\"\",\n        \"replace\": \"\\\"Анализ...\\\"\"\n    },\n    \"128\": {\n        \"match\": \"\\\"Update playlist\\\"\",\n        \"replace\": \"\\\"Обновить плейлист\\\"\"\n    },\n    \"129\": {\n        \"match\": \"\\\"Updating playlist\\\"\",\n        \"replace\": \"\\\"Обновление плейлиста\\\"\"\n    },\n    \"130\": {\n        \"match\": \"\\\"Prompt playlist options\\\"\",\n        \"replace\": \"\\\"Настройки плейлиста по запросу\\\"\"\n    },\n    \"131\": {\n        \"match\": \"\\\"Describe your perfect playlist, in as much detail as you want...\\\"\",\n        \"replace\": \"\\\"Опишите свой идеальный плейлист, настолько подробно, насколько хотите...\\\"\"\n    },\n    \"132\": {\n        \"match\": \"\\\"Made for\\\"\",\n        \"replace\": \"\\\"Сделано для\\\"\"\n    },\n    \"133\": {\n        \"match\": \"\\\"Prompted by\\\"\",\n        \"replace\": \"\\\"По запросу\\\"\"\n    },\n    \"134\": {\n        \"match\": \"\\\"Ideas\\\"\",\n        \"replace\": \"\\\"Идеи\\\"\"\n    },\n    \"135\": {\n        \"match\": \"\\\"This.ll reset soon.\\\"\",\n        \"replace\": \"\\\"Скоро сбросится.\\\"\"\n    },\n    \"136\": {\n        \"match\": \"\\\"Hide ideas\\\"\",\n        \"replace\": \"\\\"Скрыть идеи\\\"\"\n    },\n    \"137\": {\n        \"match\": \"\\\"Show ideas\\\"\",\n        \"replace\": \"\\\"Показать идеи\\\"\"\n    },\n    \"138\": {\n        \"match\": \"\\\"Name & details\\\"\",\n        \"replace\": \"\\\"Название и детали\\\"\"\n    },\n    \"139\": {\n        \"match\": \"\\\"Notes\\\"\",\n        \"replace\": \"\\\"Заметки\\\"\"\n    },\n    \"140\": {\n        \"match\": \"\\\"View prompt\\\"\",\n        \"replace\": \"\\\"Посмотреть запрос\\\"\"\n    },\n    \"141\": {\n        \"match\": \"\\\"Discard this prompt.\\\"\",\n        \"replace\": \"\\\"Отменить этот запрос?\\\"\"\n    },\n    \"142\": {\n        \"match\": \"\\\"Cancel\\\"\",\n        \"replace\": \"\\\"Отмена\\\"\"\n    },\n    \"143\": {\n        \"match\": \"\\\"Discard\\\"\",\n        \"replace\": \"\\\"Отменить\\\"\"\n    },\n    \"144\": {\n        \"match\": \"\\\"Any changes you.ve made won.t be saved.\\\"\",\n        \"replace\": \"\\\"Любые внесенные изменения не будут сохранены.\\\"\"\n    },\n    \"145\": {\n        \"match\": \"\\\"What you.ll get\\\"\",\n        \"replace\": \"\\\"Что вы получите\\\"\"\n    },\n    \"146\": {\n        \"match\": \"\\\"Collapse .0.\\\"\",\n        \"replace\": \"\\\"Свернуть {0}\\\"\"\n    },\n    \"147\": {\n        \"match\": \"\\\"Collapsed .0.\\\"\",\n        \"replace\": \"\\\"Свернуто {0}\\\"\"\n    },\n    \"148\": {\n        \"match\": \"\\\"Audiobooks\\\"\",\n        \"replace\": \"\\\"Аудиокниги\\\"\"\n    },\n    \"149\": {\n        \"match\": \"\\\"Music\\\"\",\n        \"replace\": \"\\\"Музыка\\\"\"\n    },\n    \"150\": {\n        \"match\": \"\\\"Podcasts\\\"\",\n        \"replace\": \"\\\"Подкасты\\\"\"\n    },\n    \"151\": {\n        \"match\": \"\\\"Expand .0.\\\"\",\n        \"replace\": \"\\\"Развернуть {0}\\\"\"\n    },\n    \"152\": {\n        \"match\": \"\\\"Expanded .0.\\\"\",\n        \"replace\": \"\\\"Развернуто {0}\\\"\"\n    },\n    \"153\": {\n        \"match\": \"\\\"Loading more items\\\"\",\n        \"replace\": \"\\\"Загрузка дополнительных элементов\\\"\"\n    },\n    \"154\": {\n        \"match\": \"\\\"More items loaded\\\"\",\n        \"replace\": \"\\\"Загружено больше элементов\\\"\"\n    },\n    \"155\": {\n        \"match\": \"\\\"Played\\\"\",\n        \"replace\": \"\\\"Прослушано\\\"\"\n    },\n    \"156\": {\n        \"match\": \"\\\"Saved\\\"\",\n        \"replace\": \"\\\"Сохранено\\\"\"\n    },\n    \"157\": {\n        \"match\": \"\\\"Shared\\\"\",\n        \"replace\": \"\\\"Поделились\\\"\"\n    },\n    \"158\": {\n        \"match\": \"\\\"Generating...\\\"\",\n        \"replace\": \"\\\"Генерация...\\\"\"\n    },\n    \"159\": {\n        \"match\": \"\\\"Made for .0.\\\"\",\n        \"replace\": \"\\\"Сделано для {0}\\\"\"\n    },\n    \"160\": {\n        \"match\": \"\\\"Prompted by .0.\\\"\",\n        \"replace\": \"\\\"Запрос от {0}\\\"\"\n    }\n}"
  },
  {
    "path": "patches/patches.json",
    "content": "{\n    \"free\": {\n        \"fullscreen\": {\n            \"version\": {\n                \"fr\": \"1.1.59\",\n                \"to\": \"1.1.92\"\n            },\n            \"match\": \"(return|.=.=>)\\\"free\\\"===(.+?)(return|.=.=>)\\\"premium\\\"===\",\n            \"replace\": \"$1\\\"premium\\\"===$2$3\\\"free\\\"===\"\n        },\n        \"audioads\": {\n            \"version\": {\n                \"fr\": \"1.1.59\",\n                \"to\": \"1.1.92\"\n            },\n            \"match\": \"(case .:|async enable\\\\(.\\\\){)(this.enabled=.+?\\\\(.{1,3},\\\"audio\\\"\\\\),|return this.enabled=...+?\\\\(.{1,3},\\\"audio\\\"\\\\))((;case 4:)?this.subscription=this.audioApi).+?this.onAdMessage\\\\)\",\n            \"replace\": \"$1$3.cosmosConnector.increaseStreamTime(-100000000000)\"\n        },\n        \"emptyblock\": {\n            \"version\": {\n                \"fr\": \"1.1.59\",\n                \"to\": \"\"\n            },\n            \"match\": \"adsEnabled:!0\",\n            \"replace\": \"adsEnabled:!1\"\n        },\n        \"playlistsponsor\": {\n            \"version\": {\n                \"fr\": \"1.1.59\",\n                \"to\": \"\"\n            },\n            \"match\": \"allSponsorships\",\n            \"replace\": \"\"\n        },\n        \"connectold\": {\n            \"version\": {\n                \"fr\": \"1.1.70\",\n                \"to\": \"1.1.92\"\n            },\n            \"match\": [\n                \" connect-device-list-item--disabled\",\n                \"connect-picker.unavailable-to-control\",\n                \"(\\\"button\\\",{className:.,disabled:)(..)\"\n            ],\n            \"replace\": [\n                \"\",\n                \"spotify-connect\",\n                \"$1false\"\n            ]\n        },\n        \"downloadquality\": {\n            \"version\": {\n                \"fr\": \"1.1.70\",\n                \"to\": \"1.2.29\"\n            },\n            \"match\": \"(\\\\(.,..jsxs\\\\)\\\\(.{1,3}|(.\\\\(\\\\).|..)createElement\\\\(.{1,4}),{(filterMatchQuery|filter:.,title|(variant:\\\"viola\\\",semanticColor:\\\"textSubdued\\\"|..:\\\"span\\\",variant:.{3,6}mesto,color:.{3,6}),htmlFor:\\\"desktop.settings.downloadQuality.+?).{1,6}get\\\\(\\\"desktop.settings.downloadQuality.title.+?(children:.{1,2}\\\\(.,.\\\\).+?,|\\\\(.,.\\\\){3,4},|,.\\\\)}},.\\\\(.,.\\\\)\\\\),)\",\n            \"replace\": \"\"\n        }\n    },\n    \"others\": {\n        \"discriptions\": {\n            \"version\": {\n                \"fr\": \"1.1.59\",\n                \"to\": \"\"\n            },\n            \"match\": \"((..createElement|children:\\\\(.{1,7}\\\\))\\\\(.{1,7},{source:).{1,7}get\\\\(\\\"about.copyright\\\",.\\\\),paragraphClassName:(?:\\\"[\\\\w]+\\\"|\\\\w+)}\\\\)\",\n            \"replace\": \"<h3>More about SpotX</h3><br><details><summary>{0} Github</summary><a href='https://github.com/SpotX-Official/SpotX'>SpotX-Windows</a><br><a href='https://github.com/SpotX-Official/SpotX-Bash'>SpotX-Mac/Linux</a><br><br/></details><details><summary>{1} Telegram</summary><a href='https://t.me/SpotxCommunity'>SpotX Community</a><br><a href='https://t.me/spotify_windows_mod'>SpotX Channel</a><br><br/></details><details><summary>{2} FAQ</summary><a href='https://te.legra.ph/SpotX-FAQ-09-19'>Windows</a><br><a href='https://github.com/jetfir3/SpotX-Bash/wiki/SpotX%E2%80%90Bash-FAQ'>Mac/Linux</a></details><br><h4>DISCLAIMER</h4>SpotX is a modified version of the official Spotify client, provided as an evaluation version, you use it at your own risk.\",\n            \"svgtg\": \"<svg xmlns='http://www.w3.org/2000/svg' width='20' height='20' viewBox='0 0 24 24'><path id='telegram-1' d='M18.384,22.779c0.322,0.228 0.737,0.285 1.107,0.145c0.37,-0.141 0.642,-0.457 0.724,-0.84c0.869,-4.084 2.977,-14.421 3.768,-18.136c0.06,-0.28 -0.04,-0.571 -0.26,-0.758c-0.22,-0.187 -0.525,-0.241 -0.797,-0.14c-4.193,1.552 -17.106,6.397 -22.384,8.35c-0.335,0.124 -0.553,0.446 -0.542,0.799c0.012,0.354 0.25,0.661 0.593,0.764c2.367,0.708 5.474,1.693 5.474,1.693c0,0 1.452,4.385 2.209,6.615c0.095,0.28 0.314,0.5 0.603,0.576c0.288,0.075 0.596,-0.004 0.811,-0.207c1.216,-1.148 3.096,-2.923 3.096,-2.923c0,0 3.572,2.619 5.598,4.062Zm-11.01,-8.677l1.679,5.538l0.373,-3.507c0,0 6.487,-5.851 10.185,-9.186c0.108,-0.098 0.123,-0.262 0.033,-0.377c-0.089,-0.115 -0.253,-0.142 -0.376,-0.064c-4.286,2.737 -11.894,7.596 -11.894,7.596Z' fill='#fff'/></svg>\",\n            \"svggit\": \"<svg xmlns='http://www.w3.org/2000/svg' width='20' height='20' viewBox='0 0 24 24'><path d='M12 0c-6.626 0-12 5.373-12 12 0 5.302 3.438 9.8 8.207 11.387.599.111.793-.261.793-.577v-2.234c-3.338.726-4.033-1.416-4.033-1.416-.546-1.387-1.333-1.756-1.333-1.756-1.089-.745.083-.729.083-.729 1.205.084 1.839 1.237 1.839 1.237 1.07 1.834 2.807 1.304 3.492.997.107-.775.418-1.305.762-1.604-2.665-.305-5.467-1.334-5.467-5.931 0-1.311.469-2.381 1.236-3.221-.124-.303-.535-1.524.117-3.176 0 0 1.008-.322 3.301 1.23.957-.266 1.983-.399 3.003-.404 1.02.005 2.047.138 3.006.404 2.291-1.552 3.297-1.23 3.297-1.23.653 1.653.242 2.874.118 3.176.77.84 1.235 1.911 1.235 3.221 0 4.609-2.807 5.624-5.479 5.921.43.372.823 1.102.823 2.222v3.293c0 .319.192.694.801.576 4.765-1.589 8.199-6.086 8.199-11.386 0-6.627-5.373-12-12-12z' fill='#fff'/></svg>\",\n            \"svgfaq\": \"<svg xmlns='http://www.w3.org/2000/svg' width='20' height='20' viewBox='0 0 24 24'><path d='M12 2c5.514 0 10 4.486 10 10s-4.486 10-10 10-10-4.486-10-10 4.486-10 10-10zm0-2c-6.627 0-12 5.373-12 12s5.373 12 12 12 12-5.373 12-12-5.373-12-12-12zm1.25 17c0 .69-.559 1.25-1.25 1.25-.689 0-1.25-.56-1.25-1.25s.561-1.25 1.25-1.25c.691 0 1.25.56 1.25 1.25zm1.393-9.998c-.608-.616-1.515-.955-2.551-.955-2.18 0-3.59 1.55-3.59 3.95h2.011c0-1.486.829-2.013 1.538-2.013.634 0 1.307.421 1.364 1.226.062.847-.39 1.277-.962 1.821-1.412 1.343-1.438 1.993-1.432 3.468h2.005c-.013-.664.03-1.203.935-2.178.677-.73 1.519-1.638 1.536-3.022.011-.924-.284-1.719-.854-2.297z' fill='#fff'/></svg>\"\n        },\n        \"ForcedExp\": {\n            \"version\": {\n                \"fr\": \"1.1.67\",\n                \"to\": \"\"\n            },\n            \"match\": \"((?:{configuration|{resolver|instance):(.).(?:getRemoteConfig|getUrlDispenserServiceClient).+?;)\",\n            \"replace\": \"$1const experiments={enable:[],disable:[],custom:[]},setExpValue=(v,e,val)=>v&&(v.set?v.set(e,val):v[e]&&(v[e].value=val)),config=$2.getRemoteConfigResolver?.()||$2.getRemoteConfiguration?.();config&&((values=>{for(const type in experiments)experiments[type].forEach(exp=>setExpValue(values,type==='custom'?exp.name:exp,type==='custom'?exp.value:type==='enable'));(window.Spotx??={}).RemoteExp=values})(config.values||config.activeProperties));\"\n        },\n        \"DisableExp\": {\n            \"InAppMessaging\": {\n                \"name\": \"enableInAppMessaging\",\n                \"description\": \"Disable pop-up window for premium account purchase\",\n                \"native_description\": \"Enables quicksilver in-app messaging modal\",\n                \"version\": {\n                    \"fr\": \"1.1.59\",\n                    \"to\": \"\"\n                }\n            },\n            \"ContentInformationMessage\": {\n                \"name\": \"enableContentInformationMessage\",\n                \"description\": \"Disable covid messages between podcasts\",\n                \"native_description\": \"Enable showing content information messages for episodes\",\n                \"version\": {\n                    \"fr\": \"1.1.78\",\n                    \"to\": \"1.2.50\"\n                }\n            },\n            \"PickShuffle\": {\n                \"name\": \"enablePickAndShuffle\",\n                \"description\": \"Removes restrictions on using the queue and listening to tracks in order\",\n                \"native_description\": \"Enable pick and shuffle\",\n                \"version\": {\n                    \"fr\": \"1.1.85\",\n                    \"to\": \"1.2.42\"\n                }\n            },\n            \"MusicLeavebehinds\": {\n                \"name\": \"enableDesktopMusicLeavebehinds\",\n                \"description\": \"Disabling ad blocks in playlists\",\n                \"native_description\": \"Enable music leavebehinds on eligible playlists for desktop\",\n                \"version\": {\n                    \"fr\": \"1.2.10\",\n                    \"to\": \"\"\n                }\n            },\n            \"HptoLocationRefactor\": {\n                \"name\": \"enableHptoLocationRefactor\",\n                \"description\": \"Disabling in some cases the banner on the main page\",\n                \"native_description\": \"Enable new permanent location for HPTO iframe to HptoHtml.js\",\n                \"version\": {\n                    \"fr\": \"1.2.1\",\n                    \"to\": \"1.2.20\"\n                }\n            },\n            \"UserFraudSignals\": {\n                \"name\": \"enableUserFraudSignals\",\n                \"description\": \"presumably protection against bots (reCAPTCHA)\",\n                \"native_description\": \"Enable user fraud signals\",\n                \"version\": {\n                    \"fr\": \"1.2.10\",\n                    \"to\": \"1.2.62\"\n                }\n            },\n            \"UserFraudVerificationRequest\": {\n                \"name\": \"enableUserFraudVerificationRequest\",\n                \"description\": \"presumably protection against bots (reCAPTCHA)\",\n                \"native_description\": \"Enable the IAV component make api requests\",\n                \"version\": {\n                    \"fr\": \"1.2.5\",\n                    \"to\": \"1.2.62\"\n                }\n            },\n            \"UserFraudVerification\": {\n                \"name\": \"enableUserFraudVerification\",\n                \"description\": \"presumably protection against bots (reCAPTCHA)\",\n                \"native_description\": \"Enable user fraud verification\",\n                \"version\": {\n                    \"fr\": \"1.2.3\",\n                    \"to\": \"1.2.62\"\n                }\n            },\n            \"UserFraudCspViolation\": {\n                \"name\": \"enableUserFraudCspViolation\",\n                \"description\": \"Enable CSP violation detection\",\n                \"native_description\": \"Enable CSP violation detection\",\n                \"version\": {\n                    \"fr\": \"1.2.17\",\n                    \"to\": \"1.2.62\"\n                }\n            },\n            \"EsperantoMigration\": {\n                \"name\": \"enableEsperantoMigration\",\n                \"description\": \"presumably, the advertising management transition from Cosmos to Esperanto\",\n                \"native_description\": \"Enable esperanto Migration for Ad Formats\",\n                \"version\": {\n                    \"fr\": \"1.2.6\",\n                    \"to\": \"1.2.50\"\n                }\n            },\n            \"RightSidebarMerchFallback\": {\n                \"name\": \"enableRightSidebarMerchFallback\",\n                \"description\": \"Allow merch to fallback to artist level merch if track level does not exist\",\n                \"native_description\": \"Allow merch to fallback to artist level merch if track level does not exist\",\n                \"version\": {\n                    \"fr\": \"1.2.5\",\n                    \"to\": \"1.2.11\"\n                }\n            },\n            \"ReportAudiobooks\": {\n                \"name\": \"enableReportAudiobooks\",\n                \"description\": \"Enable Report action for audiobooks\",\n                \"native_description\": \"Enable Report action for audiobooks\",\n                \"version\": {\n                    \"fr\": \"1.1.97\",\n                    \"to\": \"1.2.50\"\n                }\n            },\n            \"ReportPodcastShows\": {\n                \"name\": \"enableReportPodcastShows\",\n                \"description\": \"Enable Report action for podcast shows\",\n                \"native_description\": \"Enable Report action for podcast shows\",\n                \"version\": {\n                    \"fr\": \"1.2.12\",\n                    \"to\": \"\"\n                }\n            },\n            \"ReportPodcastEpisodes\": {\n                \"name\": \"enableReportPodcastEpisodes\",\n                \"description\": \"Enable Report action for podcast episodes\",\n                \"native_description\": \"Enable Report action for podcast episodes\",\n                \"version\": {\n                    \"fr\": \"1.2.12\",\n                    \"to\": \"\"\n                }\n            },\n            \"ReportAudiobookChapters\": {\n                \"name\": \"enableReportAudiobookChapters\",\n                \"description\": \"Enable Report action for audiobook chapters\",\n                \"native_description\": \"Enable Report action for audiobook chapters\",\n                \"version\": {\n                    \"fr\": \"1.2.12\",\n                    \"to\": \"1.2.50\"\n                }\n            },\n            \"Dsa\": {\n                \"name\": \"enableDsa\",\n                \"description\": \"Enable showing DSA (Digital Services Act) context menu and modal for ads\",\n                \"native_description\": \"Enable showing DSA (Digital Services Act) context menu and modal for ads\",\n                \"version\": {\n                    \"fr\": \"1.2.12\",\n                    \"to\": \"1.2.19\"\n                }\n            },\n            \"Dsa2\": {\n                \"name\": \"enableDsaAds\",\n                \"description\": \"Enable showing DSA (Digital Services Act) context menu and modal for ads\",\n                \"native_description\": \"Enable showing DSA (Digital Services Act) context menu and modal for ads\",\n                \"version\": {\n                    \"fr\": \"1.2.20\",\n                    \"to\": \"1.2.52\"\n                }\n            },\n            \"Dsa3\": {\n                \"name\": \"enableDSASetting\",\n                \"description\": \"Enable DSA (Digital Service Act) features for desktop and web\",\n                \"native_description\": \"Enable DSA (Digital Service Act) features for desktop and web\",\n                \"version\": {\n                    \"fr\": \"1.2.20\",\n                    \"to\": \"\"\n                }\n            },\n            \"NewAdsNpv\": {\n                \"name\": \"enableNewAdsNpv\",\n                \"description\": \"Enable showing new ads NPV\",\n                \"native_description\": \"Enable showing new ads NPV\",\n                \"version\": {\n                    \"fr\": \"1.2.18\",\n                    \"to\": \"1.2.50\"\n                }\n            },\n            \"NewAdsNpvVideoTakeover\": {\n                \"name\": \"enableNewAdsNpvVideoTakeover\",\n                \"description\": \"Enable redesigned VideoTakeover for new ads NPV\",\n                \"native_description\": \"Enable redesigned VideoTakeover for new ads NPV\",\n                \"version\": {\n                    \"fr\": \"1.2.18\",\n                    \"to\": \"1.2.50\"\n                }\n            },\n            \"NewAdsNpvColorExtraction\": {\n                \"name\": \"enableNewAdsNpvColorExtraction\",\n                \"description\": \"Enable CTA card color extraction for new ads NPV\",\n                \"native_description\": \"Enable CTA card color extraction for new ads NPV\",\n                \"version\": {\n                    \"fr\": \"1.2.18\",\n                    \"to\": \"1.2.50\"\n                }\n            },\n            \"AudiobookAdExclusivity\": {\n                \"name\": \"enableAudiobookAdExclusivity\",\n                \"description\": \"Enable Audiobook Ad Formats Exclusivity\",\n                \"native_description\": \"Enable Audiobook Ad Formats Exclusivity\",\n                \"version\": {\n                    \"fr\": \"1.2.19\",\n                    \"to\": \"\"\n                }\n            },\n            \"NewAdsNpvNewVideoTakeoverSlot\": {\n                \"name\": \"enableNewAdsNpvNewVideoTakeoverSlot\",\n                \"description\": \"Enable new modal slot to position redesigned new ads NPV VideoTakeover above all areas except RightSidebar and NPB\",\n                \"native_description\": \"Enable new modal slot to position redesigned new ads NPV VideoTakeover above all areas except RightSidebar and NPB\",\n                \"version\": {\n                    \"fr\": \"1.2.22\",\n                    \"to\": \"1.2.50\"\n                }\n            },\n            \"FraudLoadSignals\": {\n                \"name\": \"enableFraudLoadSignals\",\n                \"description\": \"Enable user fraud signals emitted on page load\",\n                \"native_description\": \"Enable user fraud signals emitted on page load\",\n                \"version\": {\n                    \"fr\": \"1.2.22\",\n                    \"to\": \"1.2.62\"\n                }\n            },\n            \"GabitoAdEvent\": {\n                \"name\": \"enableGabitoAdEvent\",\n                \"description\": \"Use Gabito AdEvent instead of Gabo AdEvent\",\n                \"native_description\": \"Use Gabito AdEvent instead of Gabo AdEvent\",\n                \"version\": {\n                    \"fr\": \"1.1.93\",\n                    \"to\": \"1.2.25\"\n                }\n            },\n            \"YourListeningUpsell\": {\n                \"name\": \"enableYourListeningUpsell\",\n                \"description\": \"Enable Your Listening Upsell Banner for free & unauth users\",\n                \"native_description\": \"Enable Your Listening Upsell Banner for free & unauth users\",\n                \"version\": {\n                    \"fr\": \"1.2.25\",\n                    \"to\": \"1.2.63\"\n                }\n            },\n            \"podcast-ads\": {\n                \"name\": \"podcastads-ads_npb\",\n                \"description\": \"Enable the podcast ads Now Playing Bar experience, including features like the podcast ad Now Playing Bar hat\",\n                \"native_description\": \"Enable the podcast ads Now Playing Bar experience, including features like the podcast ad Now Playing Bar hat\",\n                \"version\": {\n                    \"fr\": \"1.1.67\",\n                    \"to\": \"1.2.50\"\n                }\n            },\n            \"podcast-episode\": {\n                \"name\": \"podcastaudioplus-episode_entity\",\n                \"description\": \"Enable the Sponsored By section on the Episode Page with Call to Action cards\",\n                \"native_description\": \"Enable the Sponsored By section on the Episode Page with Call to Action cards\",\n                \"version\": {\n                    \"fr\": \"1.1.67\",\n                    \"to\": \"1.2.50\"\n                }\n            },\n            \"podcast-show_page\": {\n                \"name\": \"podcastaudioplus-show_page\",\n                \"description\": \"Enable show sponsors section on the Show Page\",\n                \"native_description\": \"Enable show sponsors section on the Show Page\",\n                \"version\": {\n                    \"fr\": \"1.1.77\",\n                    \"to\": \"1.2.50\"\n                }\n            },\n            \"betamaxAutoSeekToAdPosition\": {\n                \"name\": \"AutoSeekToAdPosition\",\n                \"description\": \"If true, the player will seek to the ad position when an stop position is registered. Usefull for debugging ads.\",\n                \"native_description\": \"If true, the player will seek to the ad position when an stop position is registered. Usefull for debugging ads.\",\n                \"version\": {\n                    \"fr\": \"1.2.26\",\n                    \"to\": \"\"\n                }\n            },\n            \"PodcastSponsoredContent\": {\n                \"name\": \"enablePodcastSponsoredContent\",\n                \"description\": \"Enable sponsored content information for podcasts\",\n                \"native_description\": \"Enable sponsored content information for podcasts\",\n                \"version\": {\n                    \"fr\": \"1.2.26\",\n                    \"to\": \"1.2.50\"\n                }\n            },\n            \"HomeAds\": {\n                \"name\": \"enableHomeAds\",\n                \"description\": \"Enable Fist Impression Takeover ads on Home Page\",\n                \"native_description\": \"Enable Fist Impression Takeover ads on Home Page\",\n                \"version\": {\n                    \"fr\": \"1.2.31\",\n                    \"to\": \"\"\n                }\n            },\n            \"LearningHomeCard\": {\n                \"name\": \"enableLearningHomeCard\",\n                \"description\": \"Enable Learning Home Card\",\n                \"native_description\": \"Enable Learning Home Card\",\n                \"version\": {\n                    \"fr\": \"1.2.31\",\n                    \"to\": \"1.2.40\"\n                }\n            },\n            \"BillboardEsperantoMigration\": {\n                \"name\": \"enableBillboardEsperantoMigration\",\n                \"description\": \"Enable esperanto migration for Billboard Ad Format\",\n                \"native_description\": \"Enable esperanto migration for Billboard Ad Format\",\n                \"version\": {\n                    \"fr\": \"1.2.32\",\n                    \"to\": \"1.2.52\"\n                }\n            },\n            \"LeaderboardEsperantoMigration\": {\n                \"name\": \"enableEsperantoMigrationLeaderboard\",\n                \"description\": \"Enable esperanto Migration for Leaderboard Ad Format\",\n                \"native_description\": \"Enable esperanto Migration for Leaderboard Ad Format\",\n                \"version\": {\n                    \"fr\": \"1.2.32\",\n                    \"to\": \"\"\n                }\n            },\n            \"SponsoredPlaylistEsperantoMigration\": {\n                \"name\": \"enableSponsoredPlaylistEsperantoMigration\",\n                \"description\": \"Enable esperanto Migration for Sponsored Playlist Ad Formats\",\n                \"native_description\": \"Enable esperanto Migration for Sponsored Playlist Ad Formats\",\n                \"version\": {\n                    \"fr\": \"1.2.32\",\n                    \"to\": \"1.2.50\"\n                }\n            },\n            \"PipImpressionLogging\": {\n                \"name\": \"enablePipImpressionLogging\",\n                \"description\": \"Enables impression logging for PiP\",\n                \"native_description\": \"Enables impression logging for PiP\",\n                \"version\": {\n                    \"fr\": \"1.2.32\",\n                    \"to\": \"1.2.78\"\n                }\n            },\n            \"SwitchingBetweenHomeAdsAndHpto\": {\n                \"name\": \"allowSwitchingBetweenHomeAdsAndHpto\",\n                \"description\": \"Allow switching between the new Home Ads format and legacy HPTO format (as opposed to only showing the legacy HPTO format)\",\n                \"native_description\": \"Allow switching between the new Home Ads format and legacy HPTO format (as opposed to only showing the legacy HPTO format)\",\n                \"version\": {\n                    \"fr\": \"1.2.34\",\n                    \"to\": \"\"\n                }\n            },\n            \"LyricsUpsell\": {\n                \"name\": \"enableLyricsUpsell\",\n                \"description\": \"Enable Lyrics Upsell\",\n                \"native_description\": \"Enable Lyrics Upsell\",\n                \"version\": {\n                    \"fr\": \"1.2.36\",\n                    \"to\": \"\"\n                }\n            },\n            \"ArtistNPVImpressionsLogging\": {\n                \"name\": \"enableArtistNPVImpressions\",\n                \"description\": \"Enables impression logging for the Artist About section in NPV\",\n                \"native_description\": \"Enables impression logging for the Artist About section in NPV\",\n                \"version\": {\n                    \"fr\": \"1.2.37\",\n                    \"to\": \"1.2.50\"\n                }\n            },\n            \"SpotlightImpressionLogging\": {\n                \"name\": \"enableSpotlightImpressionLogging\",\n                \"description\": \"Enables impression logging for Spotlight\",\n                \"native_description\": \"Enables impression logging for Spotlight\",\n                \"version\": {\n                    \"fr\": \"1.2.37\",\n                    \"to\": \"1.2.50\"\n                }\n            },\n            \"EnhanceLikedSongs\": {\n                \"name\": \"enableEnhanceLikedSongs\",\n                \"description\": \"disabled on the server side\",\n                \"native_description\": \"Enable Enhance Liked Songs UI and functionality\",\n                \"version\": {\n                    \"fr\": \"1.1.86\",\n                    \"to\": \"1.2.25\"\n                }\n            },\n            \"EnhancePlaylist\": {\n                \"name\": \"enableEnhancePlaylistProd\",\n                \"description\": \"disabled on the server side\",\n                \"native_description\": \"Enable Enhance Playlist UI and functionality for end-users\",\n                \"version\": {\n                    \"fr\": \"1.1.84\",\n                    \"to\": \"1.2.25\"\n                }\n            },\n            \"SurveyAds\": {\n                \"name\": \"enableSurveyAds\",\n                \"description\": \"Enable Spotify Brand Lift (SBL) Surveys in the NPV\",\n                \"native_description\": \"Enable Spotify Brand Lift (SBL) Surveys in the NPV\",\n                \"version\": {\n                    \"fr\": \"1.2.43\",\n                    \"to\": \"1.2.63\"\n                }\n            },\n            \"EFlag\": {\n                \"name\": \"enableEFlag\",\n                \"description\": \"Enables the Employee Flag to send to Sentry\",\n                \"native_description\": \"Enables the Employee Flag to send to Sentry\",\n                \"version\": {\n                    \"fr\": \"1.2.44\",\n                    \"to\": \"\"\n                }\n            },\n            \"HomeImpressions\": {\n                \"name\": \"enableHomeImpressions\",\n                \"description\": \"Enable impressions on home for impression economy (some impressions will still be logged with this disabled)\",\n                \"native_description\": \"Enable impressions on home for impression economy (some impressions will still be logged with this disabled)\",\n                \"version\": {\n                    \"fr\": \"1.2.44\",\n                    \"to\": \"1.2.63\"\n                }\n            },\n            \"SearchImpressions\": {\n                \"name\": \"enableSearchImpressions\",\n                \"description\": \"Enable impressions on search for impression economy\",\n                \"native_description\": \"Enable impressions on search for impression economy\",\n                \"version\": {\n                    \"fr\": \"1.2.44\",\n                    \"to\": \"1.2.63\"\n                }\n            },\n            \"StageDesktopDebug\": {\n                \"name\": \"enableTheStageDesktopDebug\",\n                \"description\": \"Enable debug messages for The Stage\",\n                \"native_description\": \"Enable debug messages for The Stage\",\n                \"version\": {\n                    \"fr\": \"1.2.51\",\n                    \"to\": \"\"\n                }\n            },\n            \"NewAdsNpvCanvasAds\": {\n                \"name\": \"enableNewAdsNpvCanvasAds\",\n                \"description\": \"Enable Canvas ads for new ads NPV\",\n                \"native_description\": \"Enable Canvas ads for new ads NPV\",\n                \"version\": {\n                    \"fr\": \"1.2.28\",\n                    \"to\": \"1.2.51\"\n                }\n            },\n            \"CanvasAds\": {\n                \"name\": \"enableCanvasAds\",\n                \"description\": \"Enable Canvas for ads\",\n                \"native_description\": \"Enable Canvas for ads\",\n                \"version\": {\n                    \"fr\": \"1.2.52\",\n                    \"to\": \"\"\n                }\n            },\n            \"ConnectedStateObserver\": {\n                \"name\": \"enableConnectedStateObserver\",\n                \"description\": \"Enable observer that logs errors related to connected state and ad info\",\n                \"native_description\": \"Enable observer that logs errors related to connected state and ad info\",\n                \"version\": {\n                    \"fr\": \"1.2.53\",\n                    \"to\": \"\"\n                }\n            },\n            \"EsperantoAdStateReportManager\": {\n                \"name\": \"enableEsperantoAdStateReportManager\",\n                \"description\": \"Enables esperanto migration of the adStateReportManager\",\n                \"native_description\": \"Enables esperanto migration of the adStateReportManager\",\n                \"version\": {\n                    \"fr\": \"1.2.55\",\n                    \"to\": \"1.2.60\"\n                }\n            },\n            \"EventsInYourLibrary\": {\n                \"name\": \"enableEventsInYourLibrary\",\n                \"description\": \"Enable event chips and event items in your library\",\n                \"native_description\": \"Enable event chips and event items in your library\",\n                \"version\": {\n                    \"fr\": \"1.2.55\",\n                    \"to\": \"1.2.71\"\n                }\n            },\n            \"LeavebehindsMockData\": {\n                \"name\": \"enableLeavebehindsMockData\",\n                \"description\": \"Use the mock2 endpoint to fetch Leavebehinds from AP4P\",\n                \"native_description\": \"Use the mock2 endpoint to fetch Leavebehinds from AP4P\",\n                \"version\": {\n                    \"fr\": \"1.2.30\",\n                    \"to\": \"\"\n                }\n            },\n            \"fixColorLyricsBug\": {\n                \"name\": \"enableDynamicColors\",\n                \"description\": \"if disabled then it fixes the bug with dynamic colors in lyrics\",\n                \"native_description\": \"Enable dynamic colors for the app\",\n                \"version\": {\n                    \"fr\": \"1.2.47\",\n                    \"to\": \"1.2.56\"\n                }\n            },\n            \"EmbeddedNpvAds\": {\n                \"name\": \"enableEmbeddedNpvAds\",\n                \"description\": \"Enable embedded display ads on NPV\",\n                \"native_description\": \"Enable embedded display ads on NPV\",\n                \"version\": {\n                    \"fr\": \"1.2.57\",\n                    \"to\": \"1.2.77\"\n                }\n            },\n            \"EnhancedAdsClientDeconfliction\": {\n                \"name\": \"enableEnhancedAdsClientDeconfliction\",\n                \"description\": \"Enable refactored version of ads orchestrator middleware\",\n                \"native_description\": \"Enable refactored version of ads orchestrator middleware\",\n                \"version\": {\n                    \"fr\": \"1.2.57\",\n                    \"to\": \"1.2.61\"\n                }\n            },\n            \"AdCountUi\": {\n                \"name\": \"enableAdCountUi\",\n                \"description\": \"Enable ad count feedback in NPV\",\n                \"native_description\": \"Enable ad count feedback in NPV\",\n                \"version\": {\n                    \"fr\": \"1.2.59\",\n                    \"to\": \"1.2.82\"\n                }\n            },\n            \"SaxLeaderboardAds\": {\n                \"name\": \"enableSaxLeaderboardAds\",\n                \"description\": \"Enable SAX Leaderboard Ad Format\",\n                \"native_description\": \"Enable SAX Leaderboard Ad Format\",\n                \"version\": {\n                    \"fr\": \"1.2.62\",\n                    \"to\": \"1.2.82\"\n                }\n            },\n            \"EmbeddedAdVisibilityLogging\": {\n                \"name\": \"enableEmbeddedAdVisibilityLogging\",\n                \"description\": \"When enabled, enhanced visibility logs will be sent for embedded ads\",\n                \"native_description\": \"EWhen enabled, enhanced visibility logs will be sent for embedded ads\",\n                \"version\": {\n                    \"fr\": \"1.2.63\",\n                    \"to\": \"1.2.77\"\n                }\n            },\n            \"Hpto\": {\n                \"name\": \"enableHpto\",\n                \"description\": \"Enable Hpto announcements on Home\",\n                \"native_description\": \"Enable Hpto announcements on Home\",\n                \"version\": {\n                    \"fr\": \"1.2.65\",\n                    \"to\": \"\"\n                }\n            },\n            \"SponsoredPlaylistV2\": {\n                \"name\": \"enableSponsoredPlaylistV2\",\n                \"description\": \"Enables the new suite of interfaces for Sponsored Playlists V2\",\n                \"native_description\": \"Enables the new suite of interfaces for Sponsored Playlists V2\",\n                \"version\": {\n                    \"fr\": \"1.2.66\",\n                    \"to\": \"\"\n                }\n            },\n            \"SponsoredPlaylistV2ScrollCard\": {\n                \"name\": \"enableSponsoredPlaylistV2ScrollCard\",\n                \"description\": \"Enables the music NPV scroll card rendering during a sponsored playlist playback\",\n                \"native_description\": \"Enables the music NPV scroll card rendering during a sponsored playlist playback\",\n                \"version\": {\n                    \"fr\": \"1.2.66\",\n                    \"to\": \"\"\n                }\n            },\n            \"EmbeddedAdsCarousel\": {\n                \"name\": \"enableEmbeddedAdsCarousel\",\n                \"description\": \"Enable embedded ads carousel for the NPV\",\n                \"native_description\": \"Enable embedded ads carousel for the NPV\",\n                \"version\": {\n                    \"fr\": \"1.2.73\",\n                    \"to\": \"\"\n                }\n            },\n            \"EmbeddedAdsFetchingOverCanvas\": {\n                \"name\": \"enableEmbeddedAdsFetchingOverCanvas\",\n                \"description\": \"Enable embedded ads fetching when canvas track is playing. Defaults to true since this is currently existing behavior\",\n                \"native_description\": \"Enable embedded ads fetching when canvas track is playing. Defaults to true since this is currently existing behavior\",\n                \"version\": {\n                    \"fr\": \"1.2.72\",\n                    \"to\": \"1.2.77\"\n                }\n            },\n            \"SponsoredPlaylistMockEndpoint\": {\n                \"name\": \"enableSponsoredPlaylistMockEndpoint\",\n                \"description\": \"Enables the endpoint to fetch mock sponsorships for e2e testing\",\n                \"native_description\": \"Enables the endpoint to fetch mock sponsorships for e2e testing\",\n                \"version\": {\n                    \"fr\": \"1.2.74\",\n                    \"to\": \"\"\n                }\n            },\n            \"WatchFeedPreviewReporting\": {\n                \"name\": \"enableWatchFeedPreviewReporting\",\n                \"description\": \"Enable watch feed preview reporting (requires enableOutroPreviewReporting)\",\n                \"native_description\": \"Enable watch feed preview reporting (requires enableOutroPreviewReporting)\",\n                \"version\": {\n                    \"fr\": \"1.2.70\",\n                    \"to\": \"\"\n                }\n            },\n            \"AgeAssuranceContent\": {\n                \"name\": \"enableAgeAssuranceContent\",\n                \"description\": \"Enables the age assurance feature for content aspects (e.g., switch to video)\",\n                \"native_description\": \"Enables the age assurance feature for content aspects (e.g., switch to video)\",\n                \"version\": {\n                    \"fr\": \"1.2.77\",\n                    \"to\": \"\"\n                }\n            },\n            \"AgeAssuranceFriendActivity\": {\n                \"name\": \"enableAgeAssuranceFriendActivity\",\n                \"version\": {\n                    \"fr\": \"1.2.78\",\n                    \"to\": \"\"\n                }\n            },\n            \"AgeAssuranceComments\": {\n                \"name\": \"enableAgeAssuranceComments\",\n                \"version\": {\n                    \"fr\": \"1.2.78\",\n                    \"to\": \"\"\n                }\n            },\n            \"AgeAssuranceProfileMenu\": {\n                \"name\": \"enableAgeAssuranceProfileMenu\",\n                \"version\": {\n                    \"fr\": \"1.2.78\",\n                    \"to\": \"\"\n                }\n            },\n            \"AgeAssuranceSettings\": {\n                \"name\": \"enableAgeAssuranceSettings\",\n                \"version\": {\n                    \"fr\": \"1.2.78\",\n                    \"to\": \"\"\n                }\n            },\n            \"UnderAgeBlockingModal\": {\n                \"name\": \"enableUnderAgeBlockingModal\",\n                \"native_description\": \"Enables the underage blocking modal for accounts in blocked/pending disabled state\",\n                \"version\": {\n                    \"fr\": \"1.2.78\",\n                    \"to\": \"\"\n                }\n            },\n            \"AdImpressionDoesNotIgnoreVisilibility\": {\n                \"name\": \"embeddedAdImpressionDoesNotIgnoreVisilibility\",\n                \"native_description\": \"If enabled, we do consider percent visibility when logging the display ad impression\",\n                \"version\": {\n                    \"fr\": \"1.2.78\",\n                    \"to\": \"\"\n                }\n            },\n            \"MadeForYou\": {\n                \"name\": \"enableMadeForYouEntryPoint\",\n                \"description\": \"Show 'Made For You' entry point in the left sidebar\",\n                \"version\": {\n                    \"fr\": \"1.1.67\",\n                    \"to\": \"1.1.95\"\n                }\n            },\n            \"bypassApplyUpdateCheck\": {\n                \"name\": \"bypassApplyUpdateCheck\",\n                \"version\": {\n                    \"fr\": \"1.2.84\",\n                    \"to\": \"\"\n                }\n            }\n        },\n        \"EnableExp\": {\n            \"HomeViaGraphQLV2\": {\n                \"name\": \"enableHomeViaGraphQLV2\",\n                \"description\": \"Enable fetching Home via GraphQL\",\n                \"native_description\": \"Enable fetching Home via GraphQL\",\n                \"version\": {\n                    \"fr\": \"1.1.86\",\n                    \"to\": \"1.1.92\"\n                }\n            },\n            \"BrowseViaPathfinder\": {\n                \"name\": \"enableBrowseViaPathfinder\",\n                \"description\": \"Fixes a bug on the genres page\",\n                \"native_description\": \"Fetch Browse data from Pathfinder\",\n                \"version\": {\n                    \"fr\": \"1.1.88\",\n                    \"to\": \"1.2.24\"\n                }\n            },\n            \"IgnoreInRecommendations\": {\n                \"name\": \"enableIgnoreInRecommendations\",\n                \"description\": \"Exclude playlists from recommendations\",\n                \"native_description\": \"Enable Ignore In Recommendations for desktop and web\",\n                \"version\": {\n                    \"fr\": \"1.1.87\",\n                    \"to\": \"1.2.50\"\n                }\n            },\n            \"Equalizer\": {\n                \"name\": \"enableEqualizer\",\n                \"description\": \"Enable audio equalizer for Desktop and Web Player\",\n                \"native_description\": \"Enable audio equalizer for Desktop and Web Player\",\n                \"version\": {\n                    \"fr\": \"1.1.88\",\n                    \"to\": \"\"\n                }\n            },\n            \"CarouselsOnHome\": {\n                \"name\": \"enableCarouselsOnHome\",\n                \"description\": \"Directly related to the blocking of podcasts and sections similar to ads on the main page\",\n                \"native_description\": \"Use carousels on Home\",\n                \"version\": {\n                    \"fr\": \"1.1.93\",\n                    \"to\": \"1.2.25\"\n                }\n            },\n            \"AttackOnTitanEaster\": {\n                \"name\": \"enableAttackOnTitanEasterEgg\",\n                \"description\": \"Enable Attack on Titan Easter egg turning progress bar red when playing official soundtrack\",\n                \"native_description\": \"Enable Attack on Titan Easter egg turning progress bar red when playing official soundtrack\",\n                \"version\": {\n                    \"fr\": \"1.2.6\",\n                    \"to\": \"1.2.50\"\n                }\n            },\n            \"AlbumReleaseAnniversaries\": {\n                \"name\": \"enableAlbumReleaseAnniversaries\",\n                \"description\": \"Enable showing balloons on album release date anniversaries\",\n                \"native_description\": \"Enable showing balloons on album release date anniversaries\",\n                \"version\": {\n                    \"fr\": \"1.1.89\",\n                    \"to\": \"\"\n                }\n            },\n            \"ClearAllDownloads\": {\n                \"name\": \"enableClearAllDownloads\",\n                \"description\": \"Enable option in settings to clear all downloads\",\n                \"native_description\": \"Enable option in settings to clear all downloads\",\n                \"version\": {\n                    \"fr\": \"1.1.92\",\n                    \"to\": \"1.1.98\"\n                }\n            },\n            \"LeftSidebar\": {\n                \"name\": \"enableYLXSidebar\",\n                \"description\": \"Enable Your Library X view of the left sidebar\",\n                \"native_description\": \"Enable Your Library X view of the left sidebar\",\n                \"version\": {\n                    \"fr\": \"1.2.0\",\n                    \"to\": \"1.2.14\"\n                }\n            },\n            \"RightSidebar\": {\n                \"name\": \"enableRightSidebar\",\n                \"description\": \"Enable the view on the right sidebar\",\n                \"native_description\": \"Enable the view on the right sidebar\",\n                \"version\": {\n                    \"fr\": \"1.1.98\",\n                    \"to\": \"1.2.23\"\n                }\n            },\n            \"AddPlaylistToPlaylist\": {\n                \"name\": \"enableAddPlaylistToPlaylist\",\n                \"description\": \"Enable support for adding a playlist to another playlist\",\n                \"native_description\": \"Enable support for adding a playlist to another playlist\",\n                \"version\": {\n                    \"fr\": \"1.1.98\",\n                    \"to\": \"1.2.3\"\n                }\n            },\n            \"RightSidebarLyrics\": {\n                \"name\": \"enableRightSidebarLyrics\",\n                \"description\": \"Show lyrics in the right sidebar (disables lyrics on bottom bar)\",\n                \"native_description\": \"Show lyrics in the right sidebar\",\n                \"version\": {\n                    \"fr\": \"1.2.0\",\n                    \"to\": \"1.2.61\"\n                }\n            },\n            \"RightSidebarColors\": {\n                \"name\": \"enableRightSidebarExtractedColors\",\n                \"description\": \"Extract background color based on artwork image\",\n                \"native_description\": \"Extract background color based on artwork image\",\n                \"version\": {\n                    \"fr\": \"1.2.1\",\n                    \"to\": \"1.2.78\"\n                }\n            },\n            \"SilenceTrimmer\": {\n                \"name\": \"enableSilenceTrimmer\",\n                \"description\": \"Enable silence trimming in podcasts\",\n                \"native_description\": \"Enable silence trimming in podcasts\",\n                \"version\": {\n                    \"fr\": \"1.1.99\",\n                    \"to\": \"\"\n                }\n            },\n            \"PlaybackSpeedIncrements\": {\n                \"name\": \"enableSmallPlaybackSpeedIncrements\",\n                \"description\": \"playback speed range from 0.5-3.5 with every 0.1 increment (in podcasts)\",\n                \"native_description\": \"playback speed range from 0.5-3.5 with every 0.1 increment\",\n                \"version\": {\n                    \"fr\": \"1.2.0\",\n                    \"to\": \"1.2.14\"\n                }\n            },\n            \"ShowFollowsSetting\": {\n                \"name\": \"enableShowFollowsSetting\",\n                \"description\": \"Enable a setting to control if followers and following lists are shown on profile\",\n                \"native_description\": \"Enable a setting to control if followers and following lists are shown on profile\",\n                \"version\": {\n                    \"fr\": \"1.2.1\",\n                    \"to\": \"1.2.50\"\n                }\n            },\n            \"RightSidebarCredits\": {\n                \"name\": \"enableRightSidebarCredits\",\n                \"description\": \"Show credits in the right sidebar\",\n                \"native_description\": \"Show credits in the right sidebar\",\n                \"version\": {\n                    \"fr\": \"1.2.7\",\n                    \"to\": \"1.2.25\"\n                }\n            },\n            \"WhatsNewFeed\": {\n                \"name\": \"enableWhatsNewFeed\",\n                \"description\": \"Enable the what's new feed panel\",\n                \"native_description\": \"Enable the what's new feed panel\",\n                \"version\": {\n                    \"fr\": \"1.2.12\",\n                    \"to\": \"1.2.16\"\n                }\n            },\n            \"WhatsNewFeedMainView\": {\n                \"name\": \"enableWhatsNewFeedMainView\",\n                \"description\": \"Enable Whats new feed in the main view\",\n                \"native_description\": \"Enable Whats new feed in the main view\",\n                \"version\": {\n                    \"fr\": \"1.2.17\",\n                    \"to\": \"1.2.45\"\n                }\n            },\n            \"RightSidebarArtistEnhanced\": {\n                \"name\": \"enableRightSidebarArtistEnhanced\",\n                \"description\": \"Enable Artist about V2 section in NPV\",\n                \"native_description\": \"Enable Artist about V2 section in NPV\",\n                \"version\": {\n                    \"fr\": \"1.2.16\",\n                    \"to\": \"1.2.50\"\n                }\n            },\n            \"NewEntityHeaders\": {\n                \"name\": \"enableNewEntityHeaders\",\n                \"description\": \"Enable New Entity Headers\",\n                \"native_description\": \"Enable New Entity Headers\",\n                \"version\": {\n                    \"fr\": \"1.2.15\",\n                    \"to\": \"1.2.27\"\n                }\n            },\n            \"ReadAlongTranscripts\": {\n                \"name\": \"enableReadAlongTranscripts\",\n                \"description\": \"Enable read along transcripts in the NPV\",\n                \"native_description\": \"Enable read along transcripts in the NPV\",\n                \"version\": {\n                    \"fr\": \"1.2.17\",\n                    \"to\": \"1.2.62\"\n                }\n            },\n            \"RightSidebarTransitionAnimations\": {\n                \"name\": \"enableRightSidebarTransitionAnimations\",\n                \"description\": \"Enable the slide-in/out transition on the right sidebar\",\n                \"native_description\": \"Enable the slide-in/out transition on the right sidebar\",\n                \"version\": {\n                    \"fr\": \"1.2.8\",\n                    \"to\": \"1.2.33\"\n                }\n            },\n            \"YLXEnhancements\": {\n                \"name\": \"enableYLXEnhancements\",\n                \"description\": \"Enable Your Library X Enhancements\",\n                \"native_description\": \"Enable Your Library X Enhancements\",\n                \"version\": {\n                    \"fr\": \"1.2.18\",\n                    \"to\": \"1.2.50\"\n                }\n            },\n            \"SmallerLineHeight\": {\n                \"name\": \"enableSmallerLineHeight\",\n                \"description\": \"Enable line height 1.5 on the <body />\",\n                \"native_description\": \"Enable line height 1.5 on the <body />\",\n                \"version\": {\n                    \"fr\": \"1.2.18\",\n                    \"to\": \"1.2.23\"\n                }\n            },\n            \"ConcertsInterested\": {\n                \"name\": \"enableConcertsInterested\",\n                \"description\": \"Enable Save and Retrieve feature for concerts\",\n                \"native_description\": \"Enable Save and Retrieve feature for concerts\",\n                \"version\": {\n                    \"fr\": \"1.2.7\",\n                    \"to\": \"1.2.62\"\n                }\n            },\n            \"ConcertsForThisIsPlaylist\": {\n                \"name\": \"enableConcertsForThisIsPlaylist\",\n                \"description\": \"Enable Tour Card on This is Playlist\",\n                \"native_description\": \"Enable Tour Card on This is Playlist\",\n                \"version\": {\n                    \"fr\": \"1.2.11\",\n                    \"to\": \"1.2.62\"\n                }\n            },\n            \"RemoteDownloads\": {\n                \"name\": \"enableRemoteDownloads\",\n                \"description\": \"Enable remote download support through the offline2 system\",\n                \"native_description\": \"Enable remote download support through the offline2 system\",\n                \"version\": {\n                    \"fr\": \"1.2.8\",\n                    \"to\": \"\"\n                }\n            },\n            \"AlbumCoverArtModal\": {\n                \"name\": \"enableAlbumCoverArtModal\",\n                \"description\": \"Enable the cover art modal on the Album page\",\n                \"native_description\": \"Enable the cover art modal on the Album page\",\n                \"version\": {\n                    \"fr\": \"1.2.13\",\n                    \"to\": \"1.2.50\"\n                }\n            },\n            \"SmartShuffle\": {\n                \"name\": \"enableSmartShuffle\",\n                \"description\": \"Enable Smart Shuffle in playlists\",\n                \"native_description\": \"Enable Smart Shuffle\",\n                \"version\": {\n                    \"fr\": \"1.2.22\",\n                    \"to\": \"\"\n                }\n            },\n            \"ConcertsTicketPrice\": {\n                \"name\": \"enableConcertsTicketPrice\",\n                \"description\": \"Display ticket price on Event page\",\n                \"native_description\": \"Display ticket price on Event page\",\n                \"version\": {\n                    \"fr\": \"1.2.15\",\n                    \"to\": \"1.2.62\"\n                }\n            },\n            \"DynamicNormalizer\": {\n                \"name\": \"enableDynamicNormalizer\",\n                \"description\": \"Enable the dynamic normalizer/compressor\",\n                \"native_description\": \"Enable the dynamic normalizer/compressor\",\n                \"version\": {\n                    \"fr\": \"1.2.14\",\n                    \"to\": \"1.2.60\"\n                }\n            },\n            \"HeBringsNpb\": {\n                \"name\": \"enableHeBringsNpb\",\n                \"description\": \"he brings you playback progress\",\n                \"native_description\": \"he brings you playback progress\",\n                \"version\": {\n                    \"fr\": \"1.2.14\",\n                    \"to\": \"1.2.50\"\n                }\n            },\n            \"AlbumPrerelease\": {\n                \"name\": \"enableAlbumPrerelease\",\n                \"description\": \"Enable album prerelease pages\",\n                \"native_description\": \"Enable album prerelease pages\",\n                \"version\": {\n                    \"fr\": \"1.2.18\",\n                    \"to\": \"1.2.50\"\n                }\n            },\n            \"ButtonAlwaysVisible\": {\n                \"name\": \"saveButtonAlwaysVisible\",\n                \"description\": \"Display save button always in whats new feed\",\n                \"native_description\": \"Display save button always in whats new feed\",\n                \"version\": {\n                    \"fr\": \"1.2.20\",\n                    \"to\": \"1.2.27\"\n                }\n            },\n            \"NpvAboutPodcast\": {\n                \"name\": \"enableNpvAboutPodcast\",\n                \"description\": \"Enable About Podcast section in  NPV\",\n                \"native_description\": \"Enable About Podcast section in  NPV\",\n                \"version\": {\n                    \"fr\": \"1.2.20\",\n                    \"to\": \"\"\n                }\n            },\n            \"QueueOnRightPanel\": {\n                \"name\": \"enableQueueOnRightPanel\",\n                \"description\": \"Enable Queue on the right panel\",\n                \"native_description\": \"Enable Queue on the right panel\",\n                \"version\": {\n                    \"fr\": \"1.2.26\",\n                    \"to\": \"1.2.61\"\n                }\n            },\n            \"RecentlyPlayedShortcut\": {\n                \"name\": \"enableRecentlyPlayedShortcut\",\n                \"description\": \"Show Recently Played shortcut in home view. Also increase max number of shortcuts to 8\",\n                \"native_description\": \"Show Recently Played shortcut in home view. Also increase max number of shortcuts to 8\",\n                \"version\": {\n                    \"fr\": \"1.2.21\",\n                    \"to\": \"1.2.25\"\n                }\n            },\n            \"EncoreCards\": {\n                \"name\": \"enableEncoreCards\",\n                \"description\": \"Enables all cards throughout app to be Encore Cards\",\n                \"native_description\": \"Enables all cards throughout app to be Encore Cards\",\n                \"version\": {\n                    \"fr\": \"1.2.26\",\n                    \"to\": \"1.2.33\"\n                }\n            },\n            \"Plus\": {\n                \"name\": \"enableAlignedCuration\",\n                \"description\": \"it`s killing the heart icon, you`re able to save and choose the destination for any song, playlist, or podcast\",\n                \"native_description\": \"Enable Aligned Curation\",\n                \"version\": {\n                    \"fr\": \"1.2.21\",\n                    \"to\": \"1.2.50\"\n                }\n            },\n            \"AlignedCurationSavedIn\": {\n                \"name\": \"enableAlignedCurationSavedIn\",\n                \"description\": \"Enables the Saved In section in Aligned Curation\",\n                \"native_description\": \"Enables the Saved In section in Aligned Curation\",\n                \"version\": {\n                    \"fr\": \"1.2.40\",\n                    \"to\": \"1.2.47\"\n                }\n            },\n            \"ViewMode\": {\n                \"name\": \"enableViewMode\",\n                \"description\": \"Added compact mode to playlist\",\n                \"native_description\": \"Enable list / compact mode in entity pages\",\n                \"version\": {\n                    \"fr\": \"1.2.24\",\n                    \"to\": \"\"\n                }\n            },\n            \"UserTopContent\": {\n                \"name\": \"showUserTopContent\",\n                \"description\": \"Show top tracks and top artists on profile page\",\n                \"native_description\": \"Show top tracks and top artists on profile page\",\n                \"version\": {\n                    \"fr\": \"1.2.22\",\n                    \"to\": \"\"\n                }\n            },\n            \"EightShortcuts\": {\n                \"name\": \"enableEightShortcuts\",\n                \"description\": \"Increase max number of shortcuts on home to 8\",\n                \"native_description\": \"Increase max number of shortcuts on home to 8\",\n                \"version\": {\n                    \"fr\": \"1.2.26\",\n                    \"to\": \"1.2.45\"\n                }\n            },\n            \"NPVCredits\": {\n                \"name\": \"enableNPVCredits\",\n                \"description\": \"Show credits in the right sidebar\",\n                \"native_description\": \"Show credits in the right sidebar\",\n                \"version\": {\n                    \"fr\": \"1.2.26\",\n                    \"to\": \"1.2.26\"\n                }\n            },\n            \"NPVCredits2\": {\n                \"name\": \"enableNPVCreditsWithLinkability\",\n                \"description\": \"Show credits in the right sidebar\",\n                \"native_description\": \"Show credits in the right sidebar\",\n                \"version\": {\n                    \"fr\": \"1.2.27\",\n                    \"to\": \"1.2.50\"\n                }\n            },\n            \"BanArtistAction\": {\n                \"name\": \"enableBanArtistAction\",\n                \"description\": \"Enable context menu action to ban/unban artists\",\n                \"native_description\": \"Enable context menu action to ban/unban artists\",\n                \"version\": {\n                    \"fr\": \"1.2.27\",\n                    \"to\": \"1.2.42\"\n                }\n            },\n            \"ArtistBans\": {\n                \"name\": \"enableArtistBans\",\n                \"description\": \"Enable context menu action to ban/unban artists\",\n                \"native_description\": \"Enable context menu action to ban/unban artists\",\n                \"version\": {\n                    \"fr\": \"1.2.43\",\n                    \"to\": \"1.2.50\"\n                }\n            },\n            \"LyricsFullAvailabilityCheck\": {\n                \"name\": \"enableLyricsFullAvailabilityCheck\",\n                \"description\": \"Enable full availability check before showing the mic button for lyrics\",\n                \"native_description\": \"Enable full availability check before showing the mic button for lyrics\",\n                \"version\": {\n                    \"fr\": \"1.2.43\",\n                    \"to\": \"\"\n                }\n            },\n            \"GlobalNavBar\": {\n                \"name\": \"enableGlobalNavBar\",\n                \"description\": \"Show global nav bar with home button, search input and user avatar\",\n                \"native_description\": \"Show global nav bar with home button, search input and user avatar\",\n                \"version\": {\n                    \"fr\": \"1.2.27\",\n                    \"to\": \"1.2.29\"\n                }\n            },\n            \"NotificationCenter\": {\n                \"name\": \"enableNotificationCenter\",\n                \"description\": \"Enables notification center for desktop & web\",\n                \"native_description\": \"Enables notification center for desktop & web\",\n                \"version\": {\n                    \"fr\": \"1.2.75\",\n                    \"to\": \"\"\n                }\n            },\n            \"DevicePickerSidePanel\": {\n                \"name\": \"enableDevicePickerSidePanel\",\n                \"description\": \"Enables Device Picker as a side panel\",\n                \"native_description\": \"Enables Device Picker as a side panel\",\n                \"version\": {\n                    \"fr\": \"1.2.30\",\n                    \"to\": \"1.2.45\"\n                }\n            },\n            \"Otfn\": {\n                \"name\": \"enableOtfn\",\n                \"description\": \"Enable On-The-Fly-Normalization\",\n                \"native_description\": \"Enable On-The-Fly-Normalization\",\n                \"version\": {\n                    \"fr\": \"1.2.31\",\n                    \"to\": \"\"\n                }\n            },\n            \"FullscreenMode\": {\n                \"name\": \"enableFullscreenMode\",\n                \"description\": \"Enable fullscreen mode\",\n                \"native_description\": \"Enable fullscreen mode\",\n                \"version\": {\n                    \"fr\": \"1.2.31\",\n                    \"to\": \"\"\n                }\n            },\n            \"NewConnectBar\": {\n                \"name\": \"enableNewConnectBar\",\n                \"description\": \"New Connect Bar without arrow and clickable elements\",\n                \"native_description\": \"New Connect Bar without arrow and clickable elements\",\n                \"version\": {\n                    \"fr\": \"1.2.14\",\n                    \"to\": \"1.2.35\"\n                }\n            },\n            \"ResizableTracklistColumns\": {\n                \"name\": \"enableResizableTracklistColumns\",\n                \"description\": \"Enable resizable tracklist columns\",\n                \"native_description\": \"Enable resizable tracklist columns\",\n                \"version\": {\n                    \"fr\": \"1.2.28\",\n                    \"to\": \"1.2.66\"\n                }\n            },\n            \"QueueOnRightPanelAnimations\": {\n                \"name\": \"enableQueueOnRightPanelAnimations\",\n                \"description\": \"Enable animations for Queue on the right panel\",\n                \"native_description\": \"Enable animations for Queue on the right panel\",\n                \"version\": {\n                    \"fr\": \"1.2.32\",\n                    \"to\": \"1.2.50\"\n                }\n            },\n            \"LikedSongsFilterTags\": {\n                \"name\": \"enableLikedSongsFilterTags\",\n                \"description\": \"Show filter tags on the Liked Songs entity view\",\n                \"native_description\": \"Show filter tags on the Liked Songs entity view\",\n                \"version\": {\n                    \"fr\": \"1.2.29\",\n                    \"to\": \"\"\n                }\n            },\n            \"MiniPlayer\": {\n                \"name\": \"enablePiPMiniPlayer\",\n                \"description\": \"Enable the PiP Mini Player\",\n                \"native_description\": \"Enable the PiP Mini Player\",\n                \"version\": {\n                    \"fr\": \"1.2.32\",\n                    \"to\": \"\"\n                }\n            },\n            \"MiniPlayerVideo\": {\n                \"name\": \"enablePiPMiniPlayerVideo\",\n                \"description\": \"Enable playback of video inside the PiP Mini Player\",\n                \"native_description\": \"Enable playback of video inside the PiP Mini Player\",\n                \"version\": {\n                    \"fr\": \"1.2.32\",\n                    \"to\": \"\"\n                }\n            },\n            \"PremiumUserForMiniPlayer\": {\n                \"name\": \"enablePremiumUserForMiniPlayer\",\n                \"description\": \"Enables premium user flag for mini player\",\n                \"native_description\": \"Enables premium user flag for mini player\",\n                \"version\": {\n                    \"fr\": \"1.2.32\",\n                    \"to\": \"\"\n                }\n            },\n            \"HomeSubfeeds\": {\n                \"name\": \"enableHomeSubfeeds\",\n                \"description\": \"Enable Subfeed filter chips on home\",\n                \"native_description\": \"Enable Subfeed filter chips on home\",\n                \"version\": {\n                    \"fr\": \"1.2.23\",\n                    \"to\": \"1.2.44\"\n                }\n            },\n            \"SidebarAnimations\": {\n                \"name\": \"enableSidebarAnimations\",\n                \"description\": \"Enable animations on the left and right on the sidebars and makes the right sidebar collapsible\",\n                \"native_description\": \"Enable animations on the left and right on the sidebars and makes the right sidebar collapsible\",\n                \"version\": {\n                    \"fr\": \"1.2.34\",\n                    \"to\": \"1.2.37\"\n                }\n            },\n            \"RightSidebarCollapsible\": {\n                \"name\": \"enableRightSidebarCollapsible\",\n                \"description\": \"Enable the right sidebar to collapse into the right margin\",\n                \"native_description\": \"Enable the right sidebar to collapse into the right margin\",\n                \"version\": {\n                    \"fr\": \"1.2.34\",\n                    \"to\": \"1.2.37\"\n                }\n            },\n            \"Spotlight\": {\n                \"name\": \"enableSpotlight\",\n                \"description\": \"adds a new section to the main page 'More like on...'\",\n                \"native_description\": \"Enables the Spotlight component on home\",\n                \"version\": {\n                    \"fr\": \"1.2.37\",\n                    \"to\": \"1.2.62\"\n                }\n            },\n            \"SharingButtonOnMiniPlayer\": {\n                \"name\": \"enableSharingButtonOnMiniPlayer\",\n                \"description\": \"Enables sharing button on MiniPlayer (this also moves the (+) icon close to the title)\",\n                \"native_description\": \"Enables sharing button on MiniPlayer (this also moves the (+) icon close to the title)\",\n                \"version\": {\n                    \"fr\": \"1.2.39\",\n                    \"to\": \"1.2.43\"\n                }\n            },\n            \"PrereleaseRadar\": {\n                \"name\": \"enablePrereleaseRadar\",\n                \"description\": \"Show a curated list of upcoming albums to a user\",\n                \"native_description\": \"Show a curated list of upcoming albums to a user\",\n                \"version\": {\n                    \"fr\": \"1.2.39\",\n                    \"to\": \"1.2.45\"\n                }\n            },\n            \"PremiumOnlyModal\": {\n                \"name\": \"disablePremiumOnlyModal\",\n                \"description\": \"Disable the Premium Only Modal\",\n                \"native_description\": \"Disable the Premium Only Modal\",\n                \"version\": {\n                    \"fr\": \"1.2.39\",\n                    \"to\": \"\"\n                }\n            },\n            \"CenteredLayout\": {\n                \"name\": \"enableCenteredLayout\",\n                \"description\": \"Enable centered in 'what's new'\",\n                \"native_description\": \"Enable centered layout\",\n                \"version\": {\n                    \"fr\": \"1.2.39\",\n                    \"to\": \"1.2.50\"\n                }\n            },\n            \"Lyrics\": {\n                \"name\": \"enableLyrics\",\n                \"description\": \"Feature flag that controls the availability of the lyrics feature\",\n                \"native_description\": \"Feature flag that controls the availability of the lyrics feature\",\n                \"version\": {\n                    \"fr\": \"1.2.41\",\n                    \"to\": \"\"\n                }\n            },\n            \"SeekWithArrowKeys\": {\n                \"name\": \"enableSeekWithArrowKeys\",\n                \"description\": \"Enable seeking 5s backward/forward with left/right arrow keys\",\n                \"native_description\": \"Enable seeking 5s backward/forward with left/right arrow keys\",\n                \"version\": {\n                    \"fr\": \"1.2.44\",\n                    \"to\": \"1.2.44\"\n                }\n            },\n            \"HomeCarousels\": {\n                \"name\": \"enableHomeCarousels\",\n                \"description\": \"Enable carousels on home (causes lags in the main menu 1.2.44-1.2.56)\",\n                \"native_description\": \"Enable carousels on home\",\n                \"version\": {\n                    \"fr\": \"1.2.44\",\n                    \"to\": \"1.2.62\"\n                }\n            },\n            \"canvasHome\": {\n                \"name\": \"enableHybridHomeFeedBaseline\",\n                \"description\": \"Enables the new Feed Baseline for Hybrid Home\",\n                \"native_description\": \"Enables the new Feed Baseline for Hybrid Home\",\n                \"version\": {\n                    \"fr\": \"1.2.42\",\n                    \"to\": \"1.2.62\"\n                }\n            },\n            \"canvasHomeAudioPreviews\": {\n                \"name\": \"enableFeedBaselineAudioPreviews\",\n                \"description\": \"Enable audio previews in the Big Cards\",\n                \"native_description\": \"Enable audio previews in the Big Cards\",\n                \"version\": {\n                    \"fr\": \"1.2.45\",\n                    \"to\": \"\"\n                }\n            },\n            \"HomePin\": {\n                \"name\": \"enableHomePin\",\n                \"description\": \"Enable pinning of home shelves\",\n                \"native_description\": \"Enable pinning of home shelves\",\n                \"version\": {\n                    \"fr\": \"1.2.45\",\n                    \"to\": \"\"\n                }\n            },\n            \"RecentSearchesDropdown\": {\n                \"name\": \"enableRecentSearchesDropdown\",\n                \"description\": \"Enables recent searches dropdown in GlobalNavBar\",\n                \"native_description\": \"Enables recent searches dropdown in GlobalNavBar\",\n                \"version\": {\n                    \"fr\": \"1.2.45\",\n                    \"to\": \"1.2.52\"\n                }\n            },\n            \"NearbyJams\": {\n                \"name\": \"enableNearbyJams\",\n                \"description\": \"Enable the support for Nearby Jams feature in the Device Picker\",\n                \"native_description\": \"Enable the support for Nearby Jams feature in the Device Picker\",\n                \"version\": {\n                    \"fr\": \"1.2.52\",\n                    \"to\": \"\"\n                }\n            },\n            \"TrackBans\": {\n                \"name\": \"enableContextualTrackBans\",\n                \"description\": \"Enable ability to ban/hide tracks from eligible contexts\",\n                \"native_description\": \"Enable ability to ban/hide tracks from eligible contexts\",\n                \"version\": {\n                    \"fr\": \"1.2.52\",\n                    \"to\": \"1.2.83\"\n                }\n            },\n            \"ArtistLikedSongs\": {\n                \"name\": \"enableArtistLikedSongs\",\n                \"description\": \"Enable Liked Songs section on Artist page\",\n                \"native_description\": \"Enable Liked Songs section on Artist page\",\n                \"version\": {\n                    \"fr\": \"1.1.67\",\n                    \"to\": \"1.2.17\"\n                }\n            },\n            \"ConcertsNotInterested\": {\n                \"name\": \"enableConcertsNotInterested\",\n                \"description\": \"Enable user to set not interested on concerts\",\n                \"native_description\": \"Enable user to set not interested on concerts\",\n                \"version\": {\n                    \"fr\": \"1.2.53\",\n                    \"to\": \"\"\n                }\n            },\n            \"GlobalCreateButton\": {\n                \"name\": \"enableGlobalCreateButton\",\n                \"description\": \"Enable plus button for creating different types of playlists from global nav bar\",\n                \"native_description\": \"Enable plus button for creating different types of playlists from global nav bar\",\n                \"version\": {\n                    \"fr\": \"1.2.53\",\n                    \"to\": \"1.2.56\"\n                }\n            },\n            \"ZoomSettingsUIDesktop\": {\n                \"name\": \"enableZoomSettingsUIDesktop\",\n                \"description\": \"Enable zoom settings from the settings page on Desktop\",\n                \"native_description\": \"Enable zoom settings from the settings page on Desktop\",\n                \"version\": {\n                    \"fr\": \"1.2.53\",\n                    \"to\": \"1.2.57\"\n                }\n            },\n            \"AmbientModeForMiniplayer\": {\n                \"name\": \"enableAmbientModeForMiniplayer\",\n                \"description\": \"Enable Ambient Mode for Miniplayer\",\n                \"native_description\": \"Enable Ambient Mode for Miniplayer\",\n                \"version\": {\n                    \"fr\": \"1.2.55\",\n                    \"to\": \"1.2.61\"\n                }\n            },\n            \"PeekNpv\": {\n                \"name\": \"enablePeekNpv\",\n                \"description\": \"Collapse right sidebar\",\n                \"native_description\": \"Enable the Peek NPV feature\",\n                \"version\": {\n                    \"fr\": \"1.2.53\",\n                    \"to\": \"\"\n                }\n            },\n            \"AlignedPanelHeaders\": {\n                \"name\": \"enableAlignedPanelHeaders\",\n                \"description\": \"Enable aligned panel headers\",\n                \"native_description\": \"Enable aligned panel headers\",\n                \"version\": {\n                    \"fr\": \"1.2.57\",\n                    \"to\": \"1.2.62\"\n                }\n            },\n            \"UserCommentsForEpisodes\": {\n                \"name\": \"enableUserCommentsForEpisodes\",\n                \"description\": \"Enable user comments for podcast episodes\",\n                \"native_description\": \"Enable user comments for podcast episodes\",\n                \"version\": {\n                    \"fr\": \"1.2.56\",\n                    \"to\": \"\"\n                }\n            },\n            \"AdsPrioritizeCanvas\": {\n                \"name\": \"embeddedAdsPrioritizeCanvas\",\n                \"description\": \"When enabled, tracks eligible for canvas will not be eligible for embedded ads\",\n                \"native_description\": \"When enabled, tracks eligible for canvas will not be eligible for embedded ads\",\n                \"version\": {\n                    \"fr\": \"1.2.58\",\n                    \"to\": \"\"\n                }\n            },\n            \"NewOverlayScrollbars\": {\n                \"name\": \"enableNewOverlayScrollbars\",\n                \"description\": \"Enable new overlay scrollbars\",\n                \"native_description\": \"Enable new overlay scrollbars\",\n                \"version\": {\n                    \"fr\": \"1.2.58\",\n                    \"to\": \"1.2.81\"\n                }\n            },\n            \"FullscreenLibrary\": {\n                \"name\": \"enableFullscreenLibrary\",\n                \"description\": \"Enable fullscreen library\",\n                \"native_description\": \"Enable fullscreen library\",\n                \"version\": {\n                    \"fr\": \"1.2.58\",\n                    \"to\": \"\"\n                }\n            },\n            \"ImprovedCinemaMode\": {\n                \"name\": \"enableImprovedCinemaMode\",\n                \"description\": \"Enable improved cinema mode\",\n                \"native_description\": \"Enable improved cinema mode\",\n                \"version\": {\n                    \"fr\": \"1.2.50\",\n                    \"to\": \"1.2.62\"\n                }\n            },\n            \"ImprovedCinemaModeCanvas\": {\n                \"name\": \"enableImprovedCinemaModeCanvas\",\n                \"description\": \"Enable canvas support inside improved cinema mode\",\n                \"native_description\": \"Enable canvas support inside improved cinema mode\",\n                \"version\": {\n                    \"fr\": \"1.2.56\",\n                    \"to\": \"\"\n                }\n            },\n            \"YlxReverseSorting\": {\n                \"name\": \"enableYlxReverseSorting\",\n                \"description\": \"Enable reverse sort direction in Your Library\",\n                \"native_description\": \"Enable reverse sort direction in Your Library\",\n                \"version\": {\n                    \"fr\": \"1.2.60\",\n                    \"to\": \"\"\n                }\n            },\n            \"BackendSearchHistory\": {\n                \"name\": \"enableBackendSearchHistory\",\n                \"description\": \"Enable backend search history\",\n                \"native_description\": \"Enable backend search history\",\n                \"version\": {\n                    \"fr\": \"1.2.60\",\n                    \"to\": \"\"\n                }\n            },\n            \"SyncingSearchHistoryToBackend\": {\n                \"name\": \"enableSyncingSearchHistoryToBackend\",\n                \"description\": \"Enables syncing search history to the backend\",\n                \"native_description\": \"Enables syncing search history to the backend\",\n                \"version\": {\n                    \"fr\": \"1.2.75\",\n                    \"to\": \"\"\n                }\n            },\n            \"WatchFeedEntityPages\": {\n                \"name\": \"enableWatchFeedEntityPages\",\n                \"description\": \"enabled track fragments in playlists, artists, albums\",\n                \"native_description\": \"Enable Watch Feed feature on entity pages\",\n                \"version\": {\n                    \"fr\": \"1.2.56\",\n                    \"to\": \"\"\n                }\n            },\n            \"WatchFeed\": {\n                \"name\": \"enableWatchFeed\",\n                \"description\": \"Enable Watch Feed feature\",\n                \"native_description\": \"Enable Watch Feed feature\",\n                \"version\": {\n                    \"fr\": \"1.2.56\",\n                    \"to\": \"\"\n                }\n            },\n            \"LyricsScrollToCurrentLineButton\": {\n                \"name\": \"enableLyricsScrollToCurrentLineButton\",\n                \"description\": \"Enable scroll to current line button in lyrics\",\n                \"native_description\": \"Enable scroll to current line button in lyrics\",\n                \"version\": {\n                    \"fr\": \"1.2.65\",\n                    \"to\": \"1.2.76\"\n                }\n            },\n            \"PiPMiniPlayerSettings\": {\n                \"name\": \"enablePiPMiniPlayerSettings\",\n                \"description\": \"Enable PiP settings\",\n                \"native_description\": \"Enable PiP settings\",\n                \"version\": {\n                    \"fr\": \"1.2.65\",\n                    \"to\": \"\"\n                }\n            },\n            \"SearchSuggestions\": {\n                \"name\": \"enableSearchSuggestions\",\n                \"description\": \"Enables the search suggestions dropdown\",\n                \"native_description\": \"Enables the search suggestions dropdown\",\n                \"version\": {\n                    \"fr\": \"1.2.66\",\n                    \"to\": \"\"\n                }\n            },\n            \"PiPMiniPlayerQueue\": {\n                \"name\": \"enablePiPMiniPlayerQueue\",\n                \"description\": \"Enables the PiP Mini Player Queue\",\n                \"native_description\": \"Enables the PiP Mini Player Queue\",\n                \"version\": {\n                    \"fr\": \"1.2.67\",\n                    \"to\": \"\"\n                }\n            },\n            \"SleepTimer\": {\n                \"name\": \"enableSleepTimer\",\n                \"description\": \"Enable Sleep timer\",\n                \"native_description\": \"Enable Sleep timer\",\n                \"version\": {\n                    \"fr\": \"1.2.69\",\n                    \"to\": \"\"\n                }\n            },\n            \"TracklistColumnsSorting\": {\n                \"name\": \"enableTracklistColumnsSorting\",\n                \"description\": \"Enable column reordering functionality in tracklists\",\n                \"native_description\": \"Enable column reordering functionality in tracklists\",\n                \"version\": {\n                    \"fr\": \"1.2.69\",\n                    \"to\": \"\"\n                }\n            },\n            \"ContextMenuShortcuts\": {\n                \"name\": \"enableContextMenuShortcuts\",\n                \"description\": \"Enables inline keyboard shortcuts for common context menu items\",\n                \"native_description\": \"Enables inline keyboard shortcuts for common context menu items\",\n                \"version\": {\n                    \"fr\": \"1.2.69\",\n                    \"to\": \"\"\n                }\n            },\n            \"CommentThreadsReactionsForEpisodes\": {\n                \"name\": \"enableCommentThreadsReactionsForEpisodes\",\n                \"description\": \"Enable users to react and reply to comments.\",\n                \"native_description\": \"Enable users to react and reply to comments.\",\n                \"version\": {\n                    \"fr\": \"1.2.74\",\n                    \"to\": \"1.2.81\"\n                }\n            },\n            \"ExcludeTrackFromTasteProfile\": {\n                \"name\": \"enableExcludeTrackFromTasteProfile\",\n                \"description\": \"Enables option to exclude track from taste profile via context menu\",\n                \"native_description\": \"Enables option to exclude track from taste profile via context menu\",\n                \"version\": {\n                    \"fr\": \"1.2.73\",\n                    \"to\": \"\"\n                }\n            },\n            \"LauncherAutoStartToggle\": {\n                \"name\": \"enableLauncherAutoStartToggle\",\n                \"description\": \"Enable launcher auto start toggle\",\n                \"native_description\": \"Enable launcher auto start toggle\",\n                \"version\": {\n                    \"fr\": \"1.2.71\",\n                    \"to\": \"\"\n                }\n            },\n            \"ProfileVisibilityControls\": {\n                \"name\": \"enableProfileVisibilityControls\",\n                \"description\": \"Enable profile visibility controls in the settings & profile page\",\n                \"native_description\": \"Enable profile visibility controls in the settings & profile page\",\n                \"version\": {\n                    \"fr\": \"1.2.74\",\n                    \"to\": \"\"\n                }\n            },\n            \"ShuffleSettings\": {\n                \"name\": \"enableShuffleSettings\",\n                \"description\": \"Enable shuffle settings section in advanced settings\",\n                \"native_description\": \"Enable shuffle settings section in advanced settings\",\n                \"version\": {\n                    \"fr\": \"1.2.74\",\n                    \"to\": \"\"\n                }\n            },\n            \"YlxMultiSelect\": {\n                \"name\": \"enableYlxMultiSelect\",\n                \"description\": \"Enable multi selection in Your Library\",\n                \"native_description\": \"Enable multi selection in Your Library\",\n                \"version\": {\n                    \"fr\": \"1.2.72\",\n                    \"to\": \"\"\n                }\n            },\n            \"MoreLikeThisPlaylist\": {\n                \"name\": \"enableMoreLikeThisPlaylist\",\n                \"description\": \"Enables More Like This playlist for playlists the user cannot edit\",\n                \"native_description\": \"Enables More Like This playlist for playlists the user cannot edit\",\n                \"version\": {\n                    \"fr\": \"1.2.32\",\n                    \"to\": \"\"\n                }\n            },\n            \"Tiltable3DArtwork\": {\n                \"name\": \"enableTiltable3DArtwork\",\n                \"description\": \"Enable tiltable 3D parallax effect on artwork (Cinema Mode and Cover Art Modal)\",\n                \"native_description\": \"Enable tiltable 3D parallax effect on artwork (Cinema Mode and Cover Art Modal)\",\n                \"version\": {\n                    \"fr\": \"1.2.76\",\n                    \"to\": \"\"\n                }\n            },\n            \"ExclusiveModeSetting\": {\n                \"name\": \"enableExclusiveModeSetting\",\n                \"native_description\": \"Display a setting to enable exclusive mode for an output device\",\n                \"version\": {\n                    \"fr\": \"1.2.78\",\n                    \"to\": \"\"\n                }\n            },\n            \"ForceVolumeInExclusiveMode\": {\n                \"name\": \"enableForceVolumeInExclusiveMode\",\n                \"native_description\": \"Enables the force volume toggle when exclusive mode is enabled\",\n                \"version\": {\n                    \"fr\": \"1.2.82\",\n                    \"to\": \"\"\n                }\n            },\n            \"ListPrivateByDefaultSetting\": {\n                \"name\": \"enableListPrivateByDefaultSetting\",\n                \"native_description\": \"Enable List Private By Default setting in Desktop Social Settings\",\n                \"version\": {\n                    \"fr\": \"1.2.78\",\n                    \"to\": \"\"\n                }\n            },\n            \"Wrapped2025ListenCount\": {\n                \"name\": \"enableWrapped2025ListenCount\",\n                \"native_description\": \"Enable displaying listen counts for tracks in Wrapped 2025 Your Top Songs playlists\",\n                \"version\": {\n                    \"fr\": \"1.2.80\",\n                    \"to\": \"\"\n                }\n            },\n            \"MagpiePrompting\": {\n                \"name\": \"enableMagpiePrompting\",\n                \"version\": {\n                    \"fr\": \"1.2.77\",\n                    \"to\": \"\"\n                }\n            },\n            \"MagpieScheduling\": {\n                \"name\": \"enableMagpieScheduling\",\n                \"version\": {\n                    \"fr\": \"1.2.77\",\n                    \"to\": \"\"\n                }\n            },\n            \"MagpieCuration\": {\n                \"name\": \"enableMagpieCuration\",\n                \"version\": {\n                    \"fr\": \"1.2.81\",\n                    \"to\": \"\"\n                }\n            },\n            \"Magpie\": {\n                \"name\": \"enableMagpie\",\n                \"version\": {\n                    \"fr\": \"1.2.77\",\n                    \"to\": \"\"\n                }\n            },\n            \"PlaylistExtenderBpmKey\": {\n                \"name\": \"enablePlaylistExtenderBpmKey\",\n                \"native_description\": \"Enable BPM and key columns in playlist recommendations\",\n                \"version\": {\n                    \"fr\": \"1.2.82\",\n                    \"to\": \"\"\n                }\n            }\n        },\n        \"CustomExp\": {\n            \"SocialConnectOnDesktop\": {\n                \"name\": \"enableSocialConnectOnDesktop\",\n                \"description\": \"Enable the Social Connect API that powers group listening sessions for Desktop\",\n                \"native_description\": \"Enable the Social Connect API that powers group listening sessions for Desktop\",\n                \"value\": \"ENABLED\",\n                \"version\": {\n                    \"fr\": \"1.2.21\",\n                    \"to\": \"1.2.50\"\n                }\n            },\n            \"SocialConnectOnDesktopWebPlayer\": {\n                \"name\": \"enableSocialConnectOnDesktopWebPlayer\",\n                \"description\": \"Enable the Social Connect API that powers group listening sessions for Desktop Web Player\",\n                \"native_description\": \"Enable the Social Connect API that powers group listening sessions for Desktop Web Player\",\n                \"value\": \"ENABLED\",\n                \"version\": {\n                    \"fr\": \"1.2.21\",\n                    \"to\": \"1.2.50\"\n                }\n            },\n            \"MandalorianEaster\": {\n                \"name\": \"enableMandalorianEasterEgg\",\n                \"description\": \"Enable the Mandalorian easter-egg\",\n                \"native_description\": \"Enable the Mandalorian easter-egg\",\n                \"value\": \"HELMET_AND_SOUND\",\n                \"version\": {\n                    \"fr\": \"1.2.10\",\n                    \"to\": \"\"\n                }\n            },\n            \"NavAlt\": {\n                \"name\": \"enableNavAltExperiment\",\n                \"description\": \"Enable the new home structure and navigation\",\n                \"native_description\": \"Enable the new home structure and navigation\",\n                \"value\": \"ENABLED_CENTER\",\n                \"version\": {\n                    \"fr\": \"1.1.94\",\n                    \"to\": \"1.1.96\"\n                }\n            },\n            \"NavAlt2\": {\n                \"name\": \"enableNavAltExperiment2\",\n                \"description\": \"Enable the new home structure and navigation\",\n                \"native_description\": \"Enable the new home structure and navigation\",\n                \"value\": \"ENABLED_CENTER\",\n                \"version\": {\n                    \"fr\": \"1.1.97\",\n                    \"to\": \"1.2.2\"\n                }\n            },\n            \"LyricsUpsell\": {\n                \"name\": \"forceLyricsUpsell\",\n                \"description\": \"Force Lyrics Upsell for testing\",\n                \"native_description\": \"Force Lyrics Upsell for testing\",\n                \"value\": \"CONTROL\",\n                \"version\": {\n                    \"fr\": \"1.2.19\",\n                    \"to\": \"\"\n                }\n            },\n            \"InternalTrackSearch\": {\n                \"name\": \"enableInternalTrackSearch\",\n                \"description\": \"Enable internal track search on desktop UI\",\n                \"native_description\": \"Enable internal track search on desktop UI\",\n                \"value\": \"VARIANT\",\n                \"version\": {\n                    \"fr\": \"1.2.19\",\n                    \"to\": \"1.2.47\"\n                }\n            },\n            \"TrackRecommender\": {\n                \"name\": \"enableTrackInternalLinkRecommender\",\n                \"description\": \"Enable internal link recommender component for track entity pages\",\n                \"native_description\": \"Enable internal link recommender component for track entity pages\",\n                \"value\": \"canonical-top-position\",\n                \"version\": {\n                    \"fr\": \"1.2.19\",\n                    \"to\": \"1.2.33\"\n                }\n            },\n            \"GlobalNavBar\": {\n                \"name\": \"enableGlobalNavBar\",\n                \"description\": \"Show global nav bar with home button, search input and user avatar\",\n                \"native_description\": \"Show global nav bar with home button, search input and user avatar\",\n                \"value\": \"home-next-to-search\",\n                \"version\": {\n                    \"fr\": \"1.2.30\",\n                    \"to\": \"1.2.45\"\n                }\n            },\n            \"VideosPremiumUpsell\": {\n                \"name\": \"musicVideosPremiumUpsell\",\n                \"description\": \"Testing Premium upsell for Free users on music videos\",\n                \"native_description\": \"Testing Premium upsell for Free users on music videos\",\n                \"value\": \"CONTROL\",\n                \"version\": {\n                    \"fr\": \"1.2.31\",\n                    \"to\": \"\"\n                }\n            },\n            \"CanvasNpv\": {\n                \"name\": \"enableCanvasNpv\",\n                \"description\": \"Enables short, looping visuals on tracks\",\n                \"native_description\": \"Enables short, looping visuals on tracks\",\n                \"value\": \"canvas-play-loop\",\n                \"version\": {\n                    \"fr\": \"1.2.33\",\n                    \"to\": \"1.2.62\"\n                }\n            },\n            \"shareButtonPositioning\": {\n                \"name\": \"shareButtonPositioning\",\n                \"description\": \"Share button positioning in NPV\",\n                \"native_description\": \"Share button positioning in NPV\",\n                \"value\": \"NPV_ALWAYS_VISIBLE\",\n                \"version\": {\n                    \"fr\": \"1.2.39\",\n                    \"to\": \"1.2.50\"\n                }\n            },\n            \"CreateButton\": {\n                \"name\": \"enableCreateButton\",\n                \"description\": \"Enable create button either in the global navbar or in YLX\",\n                \"native_description\": \"Enable create button either in the global navbar or in YLX\",\n                \"value\": \"your_library\",\n                \"version\": {\n                    \"fr\": \"1.2.57\",\n                    \"to\": \"1.2.81\"\n                }\n            },\n            \"AdsDismissTimeInterval\": {\n                \"name\": \"embeddedAdsDismissTimeInterval\",\n                \"description\": \"How long to wait (in seconds) before autodismissing embedded ad\",\n                \"native_description\": \"How long to wait (in seconds) before autodismissing embedded ad\",\n                \"value\": \"0\",\n                \"version\": {\n                    \"fr\": \"1.2.59\",\n                    \"to\": \"\"\n                }\n            },\n            \"AdsRefreshTimeInterval\": {\n                \"name\": \"embeddedAdsRefreshTimeInterval\",\n                \"description\": \"How long to wait (in seconds) between each successful render of embedded ad\",\n                \"native_description\": \"How long to wait (in seconds) between each successful render of embedded ad\",\n                \"value\": \"99999\",\n                \"version\": {\n                    \"fr\": \"1.2.59\",\n                    \"to\": \"\"\n                }\n            },\n            \"SpotifyOnboardingChecklist\": {\n                \"name\": \"enableSpotifyOnboardingChecklist\",\n                \"description\": \"Enable checklist-based onboarding\",\n                \"native_description\": \"Enable checklist-based onboarding\",\n                \"value\": \"control\",\n                \"version\": {\n                    \"fr\": \"1.2.60\",\n                    \"to\": \"\"\n                }\n            },\n            \"LyricsVariationsInNPV\": {\n                \"name\": \"enableLyricsVariationsInNPV\",\n                \"description\": \"Enable Lyrics in NPV and reducing accidental view\",\n                \"native_description\": \"Enable Lyrics in NPV and reducing accidental view\",\n                \"value\": \"REDUCED_VISIBILITY\",\n                \"version\": {\n                    \"fr\": \"1.2.66\",\n                    \"to\": \"\"\n                }\n            },\n            \"SkipNextTooltip\": {\n                \"name\": \"enableSkipNextTooltip\",\n                \"description\": \"Enable tooltip that shows a preview of the next item in queue\",\n                \"native_description\": \"Enable tooltip that shows a preview of the next item in queue\",\n                \"value\": \"expanded\",\n                \"version\": {\n                    \"fr\": \"1.2.65\",\n                    \"to\": \"\"\n                }\n            },\n            \"OutroPreviewReporting\": {\n                \"name\": \"enableOutroPreviewReporting\",\n                \"description\": \"Enable outro reporter for audio previews\",\n                \"native_description\": \"Enable outro reporter for audio previews\",\n                \"value\": \"DISABLED\",\n                \"version\": {\n                    \"fr\": \"1.2.70\",\n                    \"to\": \"\"\n                }\n            },\n            \"LibraryImportSettings\": {\n                \"name\": \"enableLibraryImportSettings\",\n                \"description\": \"Enable library import on settings page\",\n                \"native_description\": \"Enable library import on settings page\",\n                \"value\": \"enabled\",\n                \"version\": {\n                    \"fr\": \"1.2.73\",\n                    \"to\": \"\"\n                }\n            },\n            \"SearchResultsAsList\": {\n                \"name\": \"enableSearchResultsAsList\",\n                \"description\": \"Enables the search results as a list of top results\",\n                \"native_description\": \"Enables the search results as a list of top results\",\n                \"value\": \"LIST_WITH_TOP_RESULT\",\n                \"version\": {\n                    \"fr\": \"1.2.73\",\n                    \"to\": \"\"\n                }\n            }\n        },\n        \"binary\": {\n            \"block_update\": {\n                \"version\": {\n                    \"fr\": \"1.1.59\",\n                    \"to\": \"\"\n                },\n                \"add\": \"(?<=desktop-update\\/.)7(\\/update)\",\n                \"match\": \"(?<=desktop-update\\/.)2(\\/update)\",\n                \"replace\": \"7/update\"\n            },\n            \"block_slots\": {\n                \"version\": {\n                    \"fr\": \"1.1.59\",\n                    \"to\": \"\"\n                },\n                \"add\": \"slot}(?=.{3,8}(override_url|queued_ads))\",\n                \"match\": \"slots(?=.{3,8}(override_url|queued_ads))\",\n                \"replace\": \"slot}\"\n            },\n            \"block_slots_2\": {\n                \"version\": {\n                    \"fr\": \"1.2.55\",\n                    \"to\": \"\"\n                },\n                \"add\": \"slot}(?=.{25,35}state)\",\n                \"match\": \"slots(?=.{25,35}state)\",\n                \"replace\": \"slot}\"\n            },\n            \"block_slots_3\": {\n                \"version\": {\n                    \"fr\": \"1.2.55\",\n                    \"to\": \"\"\n                },\n                \"add\": \"}(?=payload=)\",\n                \"match\": \"\\\\?(?=payload=)\",\n                \"replace\": \"}\"\n            },\n            \"block_gabo\": {\n                \"version\": {\n                    \"fr\": \"1.1.59\",\n                    \"to\": \"1.2.73\"\n                },\n                \"add\": \"dodo(?=.receiver-service)\",\n                \"match\": \"gabo(?=.receiver-service)\",\n                \"replace\": \"dodo\"\n            },\n            \"block_gabo2\": {\n                \"version\": {\n                    \"fr\": \"1.2.74\",\n                    \"to\": \"\"\n                },\n                \"add\": \"dodo(?=.receiver-service(?:/public|[^/]))\",\n                \"match\": \"gabo(?=.receiver-service(?:/public|[^/]))\",\n                \"replace\": \"dodo\"\n            }\n        },\n        \"themelyrics\": {\n            \"theme\": {\n                \"default\": {\n                    \"pasttext\": \"#575757\",\n                    \"current\": \"#C8C8C8\",\n                    \"next\": \"#575757\",\n                    \"hover\": \"#C8C8C8\",\n                    \"background\": \"#121212\",\n                    \"maxmatch\": \"#969696\"\n                },\n                \"red\": {\n                    \"pasttext\": \"#575757\",\n                    \"current\": \"#FF3737\",\n                    \"next\": \"#575757\",\n                    \"hover\": \"#C8C8C8\",\n                    \"background\": \"#121212\",\n                    \"maxmatch\": \"#969696\"\n                },\n                \"orange\": {\n                    \"pasttext\": \"#575757\",\n                    \"current\": \"#F68D00\",\n                    \"next\": \"#575757\",\n                    \"hover\": \"#C8C8C8\",\n                    \"background\": \"#121212\",\n                    \"maxmatch\": \"#969696\"\n                },\n                \"yellow\": {\n                    \"pasttext\": \"#575757\",\n                    \"current\": \"#ECE224\",\n                    \"next\": \"#575757\",\n                    \"hover\": \"#C8C8C8\",\n                    \"background\": \"#121212\",\n                    \"maxmatch\": \"#969696\"\n                },\n                \"spotify\": {\n                    \"pasttext\": \"#575757\",\n                    \"current\": \"#1ED760\",\n                    \"next\": \"#575757\",\n                    \"hover\": \"#C8C8C8\",\n                    \"background\": \"#121212\",\n                    \"maxmatch\": \"#969696\"\n                },\n                \"spotify#2\": {\n                    \"pasttext\": \"#9b9b9b\",\n                    \"current\": \"#1ed760\",\n                    \"next\": \"#666666\",\n                    \"hover\": \"#f2f2f2\",\n                    \"background\": \"#242424\",\n                    \"maxmatch\": \"#C2C2C2\"\n                },\n                \"blue\": {\n                    \"pasttext\": \"#575757\",\n                    \"current\": \"#00DFEA\",\n                    \"next\": \"#575757\",\n                    \"hover\": \"#C8C8C8\",\n                    \"background\": \"#121212\",\n                    \"maxmatch\": \"#969696\"\n                },\n                \"purple\": {\n                    \"pasttext\": \"#575757\",\n                    \"current\": \"#9E6BE3\",\n                    \"next\": \"#575757\",\n                    \"hover\": \"#C8C8C8\",\n                    \"background\": \"#121212\",\n                    \"maxmatch\": \"#969696\"\n                },\n                \"strawberry\": {\n                    \"pasttext\": \"#F17F7F\",\n                    \"current\": \"#E43A47\",\n                    \"next\": \"#595959\",\n                    \"hover\": \"#F2F2F2\",\n                    \"background\": \"#1C1C1E\",\n                    \"maxmatch\": \"#595959\"\n                },\n                \"pumpkin\": {\n                    \"pasttext\": \"#FDAC69\",\n                    \"current\": \"#E88500\",\n                    \"next\": \"#595959\",\n                    \"hover\": \"#F2F2F2\",\n                    \"background\": \"#1C1C1E\",\n                    \"maxmatch\": \"#595959\"\n                },\n                \"sandbar\": {\n                    \"pasttext\": \"#FFDB7A\",\n                    \"current\": \"#F5BA18\",\n                    \"next\": \"#595959\",\n                    \"hover\": \"#F2F2F2\",\n                    \"background\": \"#1C1C1E\",\n                    \"maxmatch\": \"#595959\"\n                },\n                \"radium\": {\n                    \"pasttext\": \"#AAFFA3\",\n                    \"current\": \"#17D344\",\n                    \"next\": \"#595959\",\n                    \"hover\": \"#F2F2F2\",\n                    \"background\": \"#1C1C1E\",\n                    \"maxmatch\": \"#595959\"\n                },\n                \"oceano\": {\n                    \"pasttext\": \"#70DBF0\",\n                    \"current\": \"#13A1BD\",\n                    \"next\": \"#595959\",\n                    \"hover\": \"#F2F2F2\",\n                    \"background\": \"#1C1C1E\",\n                    \"maxmatch\": \"#595959\"\n                },\n                \"royal\": {\n                    \"pasttext\": \"#B8A3EB\",\n                    \"current\": \"#8461DD\",\n                    \"next\": \"#595959\",\n                    \"hover\": \"#F2F2F2\",\n                    \"background\": \"#1C1C1E\",\n                    \"maxmatch\": \"#595959\"\n                },\n                \"github\": {\n                    \"pasttext\": \"#AD82F8\",\n                    \"current\": \"#7EE787\",\n                    \"next\": \"#47566D\",\n                    \"hover\": \"#70B3FF\",\n                    \"background\": \"#161B22\",\n                    \"maxmatch\": \"#408BD0\"\n                },\n                \"discord\": {\n                    \"pasttext\": \"#616774\",\n                    \"current\": \"#7A8FDC\",\n                    \"next\": \"#616774\",\n                    \"hover\": \"#FFFFFF\",\n                    \"background\": \"#23272A\",\n                    \"maxmatch\": \"#616774\"\n                },\n                \"drot\": {\n                    \"pasttext\": \"#505050\",\n                    \"current\": \"#F37171\",\n                    \"next\": \"#505050\",\n                    \"hover\": \"#A13131\",\n                    \"background\": \"#191414\",\n                    \"maxmatch\": \"#787878\"\n                },\n                \"forest\": {\n                    \"pasttext\": \"#505050\",\n                    \"current\": \"#AEF97B\",\n                    \"next\": \"#505050\",\n                    \"hover\": \"#418022\",\n                    \"background\": \"#141914\",\n                    \"maxmatch\": \"#787878\"\n                },\n                \"fresh\": {\n                    \"pasttext\": \"#505050\",\n                    \"current\": \"#50DCF0\",\n                    \"next\": \"#505050\",\n                    \"hover\": \"#0B7383\",\n                    \"background\": \"#14191E\",\n                    \"maxmatch\": \"#787878\"\n                },\n                \"zing\": {\n                    \"pasttext\": \"#4E596F\",\n                    \"current\": \"#F67064\",\n                    \"next\": \"#4E596F\",\n                    \"hover\": \"#FFFFFF\",\n                    \"background\": \"#202430\",\n                    \"maxmatch\": \"#9EA8BC\"\n                },\n                \"pinkle\": {\n                    \"pasttext\": \"#9579E3\",\n                    \"current\": \"#CD3B99\",\n                    \"next\": \"#5E547C\",\n                    \"hover\": \"#FFFFFF\",\n                    \"background\": \"#1C1925\",\n                    \"maxmatch\": \"#5E547C\"\n                },\n                \"krux\": {\n                    \"pasttext\": \"#5C89D2\",\n                    \"current\": \"#01C38D\",\n                    \"next\": \"#696E79\",\n                    \"hover\": \"#FFFFFF\",\n                    \"background\": \"#191E29\",\n                    \"maxmatch\": \"#696E79\"\n                },\n                \"blueberry\": {\n                    \"pasttext\": \"#1CAAC6\",\n                    \"current\": \"#90E0F0\",\n                    \"next\": \"#516377\",\n                    \"hover\": \"#A0D1FA\",\n                    \"background\": \"#232937\",\n                    \"maxmatch\": \"#516377\"\n                },\n                \"postlight\": {\n                    \"pasttext\": \"#C9A8FE\",\n                    \"current\": \"#9D65C7\",\n                    \"next\": \"#534D6F\",\n                    \"hover\": \"#D1D1D1\",\n                    \"background\": \"#13101C\",\n                    \"maxmatch\": \"#534D6F\"\n                },\n                \"relish\": {\n                    \"pasttext\": \"#9D2117\",\n                    \"current\": \"#C8C8C8\",\n                    \"next\": \"#C8A032\",\n                    \"hover\": \"#E5CB8B\",\n                    \"background\": \"#121212\",\n                    \"maxmatch\": \"#787878\"\n                },\n                \"turquoise\": {\n                    \"pasttext\": \"#00656aa0\",\n                    \"current\": \"#01dfea\",\n                    \"next\": \"#575757\",\n                    \"hover\": \"#a97aff\",\n                    \"background\": \"#121212\",\n                    \"maxmatch\": \"#00656a\"\n                },\n                \"lavender\": {\n                    \"pasttext\": \"#B8A2EA\",\n                    \"current\": \"#8462DD\",\n                    \"next\": \"#575757\",\n                    \"hover\": \"#F2F2F2\",\n                    \"background\": \"#121212\",\n                    \"maxmatch\": \"#C2C2C2\"\n                }\n            }\n        },\n        \"collaboration\": {\n            \"version\": {\n                \"fr\": \"1.1.74\",\n                \"to\": \"1.2.81\"\n            },\n            \"match\": \"[\\\\w$]+\\\\??\\\\.canAdministratePermissions(\\\\W.*?\\\"permissions\\\\.invite-collaborators\\\")\",\n            \"replace\": \"false$1\"\n        },\n        \"byspotx\": {\n            \"add\": \"// Patched by SpotX\"\n        },\n        \"disablesentry\": {\n            \"version\": {\n                \"fr\": \"1.1.70\",\n                \"to\": \"\"\n            },\n            \"match\": [\n                \"@\\\\w+\\/gabo[^\\\"]+\"\n            ],\n            \"replace\": [\n                \"\"\n            ]\n        },\n        \"cssmin\": {\n            \"version\": {\n                \"fr\": \"1.1.70\",\n                \"to\": \"\"\n            },\n            \"match\": [\n                \"[/]\\\\*([^*]|[\\r\\n]|(\\\\*([^/]|[\\r\\n])))*\\\\*[/]\",\n                \"[/][/]#\\\\s.*\",\n                \"\\r?\\n(?!\\\\(1|\\\\d)\"\n            ],\n            \"replace\": [\n                \"\",\n                \"\",\n                \"\"\n            ]\n        },\n        \"htmlmin\": {\n            \"version\": {\n                \"fr\": \"1.1.70\",\n                \"to\": \"\"\n            },\n            \"match\": [\n                \"<li><a href=\\\"#[A-Za-z0-9]{5}\\\">zlib<\\/a><\\/li>\\n(.|\\n)*<\\/p><!-- END CONTAINER DEPS LICENSES -->(<\\/div>)\",\n                \"\\t\",\n                \"  \",\n                \"(?m)(^\\\\s*\\r?\\n)\",\n                \"\\r?\\n(?!\\\\(1|\\\\d)\"\n            ],\n            \"replace\": [\n                \"$2\",\n                \"\",\n                \"\",\n                \"\",\n                \"\"\n            ]\n        },\n        \"blankmin\": {\n            \"version\": {\n                \"fr\": \"1.1.70\",\n                \"to\": \"\"\n            },\n            \"match\": [\n                \"  \",\n                \"(?m)(^\\\\s*\\r?\\n)\",\n                \"\\r?\\n(?!\\\\(1|\\\\d)\"\n            ],\n            \"replace\": [\n                \"\",\n                \"\",\n                \"\"\n            ]\n        },\n        \"minjs\": {\n            \"version\": {\n                \"fr\": \"1.1.70\",\n                \"to\": \"\"\n            },\n            \"match\": [\n                \"[/][/][#] sourceMappingURL=.*[.]map\",\n                \"\\r?\\n(?!\\\\(1|\\\\d)\"\n            ],\n            \"replace\": [\n                \"\",\n                \"\"\n            ]\n        },\n        \"minjson\": {\n            \"version\": {\n                \"fr\": \"1.1.70\",\n                \"to\": \"\"\n            },\n            \"match\": [\n                \"  \",\n                \"    \",\n                \"\\\": \",\n                \"\\r?\\n(?!\\\\(1|\\\\d)\"\n            ],\n            \"replace\": [\n                \"\",\n                \"\",\n                \"\\\":\",\n                \"\"\n            ]\n        },\n        \"block_subfeeds\": {\n            \"version\": {\n                \"fr\": \"1.2.36\",\n                \"to\": \"\"\n            },\n            \"add\": \" .LVMjmN2CaPruPAo62RAY, .Wn4fEKCJ6jYPfG2Y0ABn, .Y3Kd8WKnE3ZW9lzgA8nN, .C_T1Uoz7Fws_AFDl { display: none !important }\"\n        },\n        \"downloadquality\": {\n            \"version\": {\n                \"fr\": \"1.2.30\",\n                \"to\": \"\"\n            },\n            \"add\": \" :is(.weV_qxFz4gF5sPotO10y, .BMtRRwqaJD_95vJFMFD0, .eguwzH_QWTBXry7hiNj3, .qV_CxbowaNkMarye, .qV_CxbowaNkMarye):has([for=\\\"desktop.settings.downloadQuality\\\"]) {display: none}\"\n        },\n        \"downloadicon\": {\n            \"version\": {\n                \"fr\": \"1.1.74\",\n                \"to\": \"\"\n            },\n            \"add\": \" .BKsbV2Xl786X9a09XROH, .GWCBhKJqeZal3n5tCQwl, .pX3IkLhEry0wVfiU {display:none}\"\n        },\n        \"submenudownload\": {\n            \"version\": {\n                \"fr\": \"1.1.74\",\n                \"to\": \"\"\n            },\n            \"add\": \" .pzkhLqffqF_4hucrVVQA, .egE6UQjF_UUoCzvMxREj, .Y98_oiegQgSpY_o7hoKG, .tT_JypfxNakuY1jHgyBN, .zVA1h9TUy8QQBogj {display:none}\"\n        },\n        \"veryhighstream\": {\n            \"version\": {\n                \"fr\": \"1.1.74\",\n                \"to\": \"1.2.29\"\n            },\n            \"add\": \" #desktop\\\\.settings\\\\.streamingQuality>option:nth-child(5) {display:none}\"\n        },\n        \"fix-scrollbar\": {\n            \"version\": {\n                \"fr\": \"1.1.59\",\n                \"to\": \"\"\n            },\n            \"add\": \" .main-view-container__scroll-node > .os-scrollbar-vertical {top:0px !important}\"\n        },\n        \"fix-old-theme\": {\n            \"version\": {\n                \"fr\": \"1.1.74\",\n                \"to\": \"1.2.13\"\n            },\n            \"match\": \"((LKgm9fCDTO7wqig_5U1q|eFQFeXVbY8rrcTagg0oH){--left-sidebar-item-height.+?margin-top)(:\\\\d+px)\",\n            \"replace\": \"$1:0px\"\n        },\n        \"searchFixes\": {\n            \"version\": {\n                \"fr\": \"1.1.85\",\n                \"to\": \"1.2.57\"\n            },\n            \"match\": \"(typeName\\\\])\",\n            \"replace\": \"$1 || []\"\n        }\n    },\n    \"VariousJs\": {\n        \"product_state\": {\n            \"version\": {\n                \"fr\": \"1.1.93\",\n                \"to\": \"\"\n            },\n            \"match\": \"(this\\\\.(?:productStateApi|_product_state)(?:|_service)=(.))(?=}|(?:,this\\\\.cache=.)?,this\\\\.productStateApi|,this\\\\._events)\",\n            \"replace\": \"$1,$2?.putOverridesValues?.({0})\",\n            \"add\": \"ads:'0',catalogue:'premium',product:'premium',type:'premium',name:'Spotify','unrestricted':'1'\",\n            \"add2\": \"'storage-size-config':'{0},90,500,3'\"\n        },\n        \"dev-tools\": {\n            \"version\": {\n                \"fr\": \"1.1.98\",\n                \"to\": \"1.2.37\"\n            },\n            \"match\": [\n                \"(onSelected:).{3,14}({..\\\"app.enable.developer.mode.,).\\\\)(,.\\\\(!0\\\\))?}\",\n                \"{(.{5,20}?|)(this\\\\.(?:productStateApi|_product_state)(?:|_service)=(.))(?=}|,this\\\\.productStateApi|,this\\\\._events|,.\\\\?\\\\.putOverridesValues)\",\n                \"(..\\\\(.\\\\)|.)(\\\\?(..createElement|\\\\(.{1,7}jsxs\\\\))\\\\(.{1,3},{filterMatchQuery:.{2,15}\\\\(\\\"settings.employee\\\"\\\\))\"\n            ],\n            \"replace\": [\n                \"$1(check)=>$2check);localStorage.setItem('dev-tools',check);Spotx.ProductState.putOverridesValues({pairs:{'com.spotify.madprops.use.ucs.product.state':check?'1':'0','employee':check?'1':'0'}});setTimeout(()=>{window.sendCosmosRequest({ request:JSON.stringify({method:'POST',uri:'sp://desktop/v1/restart'})})},700);}\",\n                \"{window.Spotx={ProductState:$3};if(localStorage.getItem('dev-tools')==='true'){$3.putOverridesValues({pairs:{'com.spotify.madprops.use.ucs.product.state':'1','employee':'1'}})};$1$2\",\n                \"true$2\"\n            ]\n        },\n        \"banner_home\": {\n            \"version\": {\n                \"fr\": \"1.1.70\",\n                \"to\": \"\"\n            },\n            \"match\": \"(ADS_PREMIUM,isPremium:).(.{20,60}?isHptoHidden:).\",\n            \"replace\": \"$1true$2true\"\n        },\n        \"sentry\": {\n            \"version\": {\n                \"fr\": \"1.1.70\",\n                \"to\": \"\"\n            },\n            \"match\": \"(864e5)<30\",\n            \"replace\": \"$1<0\"\n        },\n        \"disablelog\": {\n            \"version\": {\n                \"fr\": \"1.1.70\",\n                \"to\": \"\"\n            },\n            \"match\": \"sp://logging/v3/\\\\w+\",\n            \"replace\": \"\"\n        },\n        \"hidemerchsidebar\": {\n            \"version\": {\n                \"fr\": \"1.2.0\",\n                \"to\": \"1.2.44\"\n            },\n            \"match\": \"((return|merch:.}\\\\)\\\\=\\\\>)( .&&\\\\(\\\\!.\\\\|\\\\|..length\\\\<1\\\\)&&..length\\\\>0&&\\\\(.=.\\\\),)?\\\\!.\\\\|\\\\|..length\\\\<1)\",\n            \"replace\": \"$2 true \"\n        },\n        \"offrujs\": {\n            \"version\": {\n                \"fr\": \"1.1.92\",\n                \"to\": \"\"\n            },\n            \"match\": \"\\\\[(.\\\\..{1,2}\\\\.)en,.\\\\..{1,2}\\\\.a(.+?\\\\])\",\n            \"replace\": \"[$1en,$1ru]\"\n        },\n        \"goofyhistory\": {\n            \"version\": {\n                \"fr\": \"1.1.70\",\n                \"to\": \"\"\n            },\n            \"match\": \"({data:.}\\\\)=>{|.\\\\.data;)((?:this|.)\\\\._state=(.))\",\n            \"replace\": \"$1goofyHistory($3, {0}, {1});$2\"\n        },\n        \"similarplaylist\": {\n            \"version\": {\n                \"fr\": \"1.1.85\",\n                \"to\": \"1.2.24\"\n            },\n            \"match\": \"(Fragment,(?:null,|{children:\\\\[))(?:[^}]{1,100}?)contextmenu\\\\.create-similar-playlist\\\"\\\\)}\\\\),\",\n            \"replace\": \"$1\"\n        },\n        \"sidebar_fix\": {\n            \"version\": {\n                \"fr\": \"1.1.99\",\n                \"to\": \"1.2.6\"\n            },\n            \"match\": \"min:320,max:420\",\n            \"replace\": \"min:250,max:400\"\n        },\n        \"filtertags_locale_fix\": {\n            \"version\": {\n                \"fr\": \"1.2.29\",\n                \"to\": \"\"\n            },\n            \"match\": \"(withPath\\\\(\\\"\\/liked-songs\\\"\\\\))\",\n            \"replace\": \"$1.withLocale(\\\"en\\\")\"\n        },\n        \"lyrics-old-on\": {\n            \"version\": {\n                \"fr\": \"1.1.70\",\n                \"to\": \"1.2.35\"\n            },\n            \"match\": \"((?:\\\\(?await )?.\\\\.build.{20,60}encodeURIComponent.{20,140}\\\"\\/track\\/{trackId}.+?)(.send)\",\n            \"replace\": \"$1.withHeaders([{key:'spotify-app-version',value:'1.2.43'}])$2\"\n        },\n        \"lyrics-block\": {\n            \"version\": {\n                \"fr\": \"1.1.70\",\n                \"to\": \"1.2.40\"\n            },\n            \"match\": \"(?:\\\\(?await )?.\\\\.build.{20,60}encodeURIComponent.{20,140}\\\"\\\\/track\\\\/{trackId}.+?send\\\\(\\\\)(?:\\\\)\\\\.body)?\",\n            \"replace\": \"{}\"\n        },\n        \"fixTitlebarHeight\": {\n            \"version\": {\n                \"fr\": \"1.2.45\",\n                \"to\": \"1.2.45\"\n            },\n            \"match\": \"(\\\"update_titlebar\\\",height:).\",\n            \"replace\": \"$1'40'\"\n        },\n        \"mock\": {\n            \"version\": {\n                \"fr\": \"1.2.55\",\n                \"to\": \"\"\n            },\n            \"match\": \"\\/(?:leavebehinds\\/mock|leavebehinds|mock|sponsoredplaylist)\\/\",\n            \"replace\": \"/localhost/\"\n        },\n        \"upgradeButton\": {\n            \"version\": {\n                \"fr\": \"1.2.55\",\n                \"to\": \"\"\n            },\n            \"match\": \"\\\"\\\\(min-width: 1024px\\\\)\\\"\",\n            \"replace\": \"\\\"(min-width: 9999990px)\\\"\"\n        },\n        \"upgradeMenu\": {\n            \"version\": {\n                \"fr\": \"1.2.55\",\n                \"to\": \"\"\n            },\n            \"match\": \"=>\\\\{((?:(?!=>\\\\{).)*?(?=\\\"loggedin_upgrade_menu))\",\n            \"replace\": \"=>{ return null; $1\"\n        },\n        \"hideEmptyYourEpisodes\": {\n            \"version\": {\n                \"fr\": \"1.2.78\",\n                \"to\": \"\"\n            },\n            \"match\": \"(includeYourEpisodes\\\\?\\\\{inclusionMode:[^,}]+\\\\.)INCLUDE_ALWAYS\",\n            \"replace\": \"$1INCLUDE_IF_NOT_EMPTY\"\n        },\n        \"GenreHubHashFix\": {\n            \"version\": {\n                \"fr\": \"1.1.85\",\n                \"to\": \"1.1.99\"\n            },\n            \"match\": \"((sha256Hash: *await|return [^,]+,) *)([^ (]+[.]k[.]hash)[(]([^.()]+)[.]body[)]\",\n            \"replace\": \"$1(\\\"browsePage\\\"===$4.name?\\\"d8346883162a16a62a5b69e73e70c66a68c27b14265091cd9e1517f48334bbb3\\\":$3($4.body))\"\n        }\n    }\n}"
  },
  {
    "path": "run.ps1",
    "content": "[CmdletBinding()]\nparam\n(\n    [Parameter(HelpMessage = 'Latest recommended Spotify version for Windows 10+.')]\n    [string]$latest_full = \"1.2.85.519.g549a528b\",\n\n    [Parameter(HelpMessage = 'Latest supported Spotify version for Windows 7-8.1')]\n    [string]$last_win7_full = \"1.2.5.1006.g22820f93\",\n\n    [Parameter(HelpMessage = 'Latest supported Spotify version for x86')]\n    [string]$last_x86_full = \"1.2.53.440.g7b2f582a\",\n\n\n    [Parameter(HelpMessage = 'Force a specific download method. Default is automatic selection.')]\n    [Alias('dm')]\n    [ValidateSet('curl', 'webclient')]\n    [string]$download_method,\n\n    [Parameter(HelpMessage = \"Change recommended Spotify version. Example: 1.2.85.519.g549a528b.\")]\n    [Alias(\"v\")]\n    [string]$version,\n\n    [Parameter(HelpMessage = 'Custom path to Spotify installation directory. Default is %APPDATA%\\Spotify.')]\n    [string]$SpotifyPath,\n\n    [Parameter(HelpMessage = \"Use github.io mirror instead of raw.githubusercontent.\")]\n    [Alias(\"m\")]\n    [switch]$mirror,\n\n    [Parameter(HelpMessage = \"Developer mode activation.\")]\n    [Alias(\"dev\")]\n    [switch]$devtools,\n\n    [Parameter(HelpMessage = 'Disable podcasts/episodes/audiobooks from homepage.')]\n    [switch]$podcasts_off,\n\n    [Parameter(HelpMessage = 'Disable Ad-like sections from homepage')]\n    [switch]$adsections_off,\n\n    [Parameter(HelpMessage = 'Disable canvas from homepage')]\n    [switch]$canvashome_off,\n    \n    [Parameter(HelpMessage = 'Do not disable podcasts/episodes/audiobooks from homepage.')]\n    [switch]$podcasts_on,\n    \n    [Parameter(HelpMessage = 'Block Spotify automatic updates.')]\n    [switch]$block_update_on,\n    \n    [Parameter(HelpMessage = 'Do not block Spotify automatic updates.')]\n    [switch]$block_update_off,\n    \n    [Parameter(HelpMessage = 'Change limit for clearing audio cache.')]\n    [Alias('cl')]\n    [int]$cache_limit,\n    \n    [Parameter(HelpMessage = 'Automatic uninstallation of Spotify MS if it was found.')]\n    [switch]$confirm_uninstall_ms_spoti,\n    \n    [Parameter(HelpMessage = 'Overwrite outdated or unsupported version of Spotify with the recommended version.')]\n    [Alias('sp-over')]\n    [switch]$confirm_spoti_recomended_over,\n    \n    [Parameter(HelpMessage = 'Uninstall outdated or unsupported version of Spotify and install the recommended version.')]\n    [Alias('sp-uninstall')]\n    [switch]$confirm_spoti_recomended_uninstall,\n    \n    [Parameter(HelpMessage = 'Installation without ad blocking for premium accounts.')]\n    [switch]$premium,\n\n    [Parameter(HelpMessage = 'Disable Spotify autostart on Windows boot.')]\n    [switch]$DisableStartup,\n    \n    [Parameter(HelpMessage = 'Automatic launch of Spotify after installation is complete.')]\n    [switch]$start_spoti,\n    \n    [Parameter(HelpMessage = 'Experimental features operated by Spotify.')]\n    [switch]$exp_spotify,\n\n    [Parameter(HelpMessage = 'Enable top search bar.')]\n    [switch]$topsearchbar,\n\n    [Parameter(HelpMessage = 'Enable new fullscreen mode (Experimental)')]\n    [switch]$newFullscreenMode,\n\n    [Parameter(HelpMessage = 'disable subfeed filter chips on home.')]\n    [switch]$homesub_off,\n    \n    [Parameter(HelpMessage = 'Do not hide the icon of collaborations in playlists.')]\n    [switch]$hide_col_icon_off,\n    \n    [Parameter(HelpMessage = 'Disable new right sidebar.')]\n    [switch]$rightsidebar_off,\n\n    [Parameter(HelpMessage = 'it`s killing the heart icon, you`re able to save and choose the destination for any song, playlist, or podcast')]\n    [switch]$plus,\n\n    [Parameter(HelpMessage = 'Enable funny progress bar.')]\n    [switch]$funnyprogressBar,\n\n    [Parameter(HelpMessage = 'New theme activated (new right and left sidebar, some cover change)')]\n    [switch]$new_theme,\n\n    [Parameter(HelpMessage = 'Enable right sidebar coloring to match cover color)')]\n    [switch]$rightsidebarcolor,\n    \n    [Parameter(HelpMessage = 'Returns old lyrics')]\n    [switch]$old_lyrics,\n\n    [Parameter(HelpMessage = 'Disable native lyrics')]\n    [switch]$lyrics_block,\n\n    [Parameter(HelpMessage = 'Do not create desktop shortcut.')]\n    [switch]$no_shortcut,\n\n    [Parameter(HelpMessage = 'Static color for lyrics.')]\n    [ArgumentCompleter({ param($cmd, $param, $wordToComplete)\n            [array] $validValues = @('blue', 'blueberry', 'discord', 'drot', 'default', 'forest', 'fresh', 'github', 'lavender', 'orange', 'postlight', 'pumpkin', 'purple', 'radium', 'relish', 'red', 'sandbar', 'spotify', 'spotify#2', 'strawberry', 'turquoise', 'yellow', 'zing', 'pinkle', 'krux', 'royal', 'oceano')\n            $validValues -like \"*$wordToComplete*\"\n        })]\n    [string]$lyrics_stat,\n\n    [Parameter(HelpMessage = 'Accumulation of track listening history with Goofy.')]\n    [string]$urlform_goofy = $null,\n\n    [Parameter(HelpMessage = 'Accumulation of track listening history with Goofy.')]\n    [string]$idbox_goofy = $null,\n\n    [Parameter(HelpMessage = 'Error log ru string.')]\n    [switch]$err_ru,\n    \n    [Parameter(HelpMessage = 'Select the desired language to use for installation. Default is the detected system language.')]\n    [Alias('l')]\n    [string]$language\n)\n\n# Ignore errors from `Stop-Process`\n$PSDefaultParameterValues['Stop-Process:ErrorAction'] = [System.Management.Automation.ActionPreference]::SilentlyContinue\n\nfunction Format-LanguageCode {\n    \n    # Normalizes and confirms support of the selected language.\n    [CmdletBinding()]\n    [OutputType([string])]\n    param\n    (\n        [string]$LanguageCode\n    )\n    \n    $supportLanguages = @(\n        'be', 'bn', 'cs', 'de', 'el', 'en', 'es', 'fa', 'fi', 'fil', 'fr', 'hi', 'hu', \n        'id', 'it', 'ja', 'ka', 'ko', 'lv', 'pl', 'pt', 'ro', 'ru', 'sk', 'sr', 'sr-Latn',\n        'sv', 'ta', 'tr', 'ua', 'vi', 'zh', 'zh-TW'\n    )\n    \n    # Trim the language code down to two letter code.\n    switch -Regex ($LanguageCode) {\n        '^be' {\n            $returnCode = 'be'\n            break\n        }\n        '^bn' {\n            $returnCode = 'bn'\n            break\n        }\n        '^cs' {\n            $returnCode = 'cs'\n            break\n        }\n        '^de' {\n            $returnCode = 'de'\n            break\n        }\n        '^el' {\n            $returnCode = 'el'\n            break\n        }\n        '^en' {\n            $returnCode = 'en'\n            break\n        }\n        '^es' {\n            $returnCode = 'es'\n            break\n        }\n        '^fa' {\n            $returnCode = 'fa'\n            break\n        }\n        '^fi$' {\n            $returnCode = 'fi'\n            break\n        }\n        '^fil' {\n            $returnCode = 'fil'\n            break\n        }\n        '^fr' {\n            $returnCode = 'fr'\n            break\n        }\n        '^hi' {\n            $returnCode = 'hi'\n            break\n        }\n        '^hu' {\n            $returnCode = 'hu'\n            break\n        }\n        '^id' {\n            $returnCode = 'id'\n            break\n        }\n        '^it' {\n            $returnCode = 'it'\n            break\n        }\n        '^ja' {\n            $returnCode = 'ja'\n            break\n        }\n        '^ka' {\n            $returnCode = 'ka'\n            break\n        }\n        '^ko' {\n            $returnCode = 'ko'\n            break\n        }\n        '^lv' {\n            $returnCode = 'lv'\n            break\n        }\n        '^pl' {\n            $returnCode = 'pl'\n            break\n        }\n        '^pt' {\n            $returnCode = 'pt'\n            break\n        }\n        '^ro' {\n            $returnCode = 'ro'\n            break\n        }\n        '^(ru|py)' {\n            $returnCode = 'ru'\n            break\n        }\n        '^sk' {\n            $returnCode = 'sk'\n            break\n        }\n        '^(sr|sr-Cyrl)$' {\n            $returnCode = 'sr'\n            break\n        }\n        '^sr-Latn' {\n            $returnCode = 'sr-Latn'\n            break\n        }\n        '^sv' {\n            $returnCode = 'sv'\n            break\n        }\n        '^ta' {\n            $returnCode = 'ta'\n            break\n        }\n        '^tr' {\n            $returnCode = 'tr'\n            break\n        }\n        '^ua' {\n            $returnCode = 'ua'\n            break\n        }\n        '^vi' {\n            $returnCode = 'vi'\n            break\n        }\n        '^(zh|zh-CN)$' {\n            $returnCode = 'zh'\n            break\n        }\n        '^zh-TW' {\n            $returnCode = 'zh-TW'\n            break\n        }\n        Default {\n            $returnCode = $PSUICulture\n            $long_code = $true\n            break\n        }\n    }\n    \n    # Checking the long language code\n    if ($long_code -and $returnCode -NotIn $supportLanguages) {\n        if ($returnCode -match '-') {\n            $intermediateCode = $returnCode.Substring(0, $returnCode.LastIndexOf('-'))\n            \n            if ($intermediateCode -in $supportLanguages) {\n                $returnCode = $intermediateCode\n            }\n            else {\n                $returnCode = $returnCode -split \"-\" | Select-Object -First 1\n            }\n        }\n    }\n\n    if ($returnCode -NotIn $supportLanguages) {\n\n        $returnCode = 'en'\n    }\n    return $returnCode \n}   \n\n$spotifyDirectory = Join-Path $env:APPDATA 'Spotify'\n$spotifyDirectory2 = Join-Path $env:LOCALAPPDATA 'Spotify'\n\n# Использовать кастомный путь если указан параметр -SpotifyPath\nif ($SpotifyPath) {\n    $spotifyDirectory = $SpotifyPath\n}\n$spotifyExecutable = Join-Path $spotifyDirectory 'Spotify.exe'\n$spotifyDll = Join-Path $spotifyDirectory 'Spotify.dll' \n$chrome_elf = Join-Path $spotifyDirectory 'chrome_elf.dll'\n$exe_bak = Join-Path $spotifyDirectory 'Spotify.bak'\n$dll_bak = Join-Path $spotifyDirectory 'Spotify.dll.bak'\n$chrome_elf_bak = Join-Path $spotifyDirectory 'chrome_elf.dll.bak'\n$spotifyUninstall = Join-Path ([System.IO.Path]::GetTempPath()) 'SpotifyUninstall.exe'\n$start_menu = Join-Path $env:APPDATA 'Microsoft\\Windows\\Start Menu\\Programs\\Spotify.lnk'\n\n$upgrade_client = $false\n\n# Check version Powershell\n$psv = $PSVersionTable.PSVersion.major\nif ($psv -ge 7) {\n    Import-Module Appx -UseWindowsPowerShell -WarningAction:SilentlyContinue\n}\n\n# add Tls12\n[Net.ServicePointManager]::SecurityProtocol = [Net.ServicePointManager]::SecurityProtocol -bor [Net.SecurityProtocolType]::Tls12;\n\nfunction Stop-Script {\n    param(\n        [string]$Message = ($lang).StopScript\n    )\n\n    Write-Host $Message\n\n    switch ($Host.Name) {\n        \"Windows PowerShell ISE Host\" {\n            pause\n            break\n        }\n        default {\n            Write-Host ($lang).PressAnyKey\n            [void][System.Console]::ReadKey($true)\n            break\n        }\n    }\n    Exit\n}\nfunction Get-Link {\n    param (\n        [Alias(\"e\")]\n        [string]$endlink\n    )\n\n    switch ($mirror) {\n        $true { return \"https://spotx-official.github.io/SpotX\" + $endlink }\n        default { return \"https://raw.githubusercontent.com/SpotX-Official/SpotX/main\" + $endlink }\n    }\n}\n\nfunction CallLang($clg) {\n\n    $ProgressPreference = 'SilentlyContinue'\n    \n    try {\n        $response = (iwr -Uri (Get-Link -e \"/scripts/installer-lang/$clg.ps1\") -UseBasicParsing).Content\n        if ($mirror) { $response = [System.Text.Encoding]::UTF8.GetString($response) }\n        Invoke-Expression $response\n    }\n    catch {\n        Write-Host \"Error loading $clg language\"\n        Pause\n        Exit\n    }\n}\n\n# Set language code for script.\n$langCode = Format-LanguageCode -LanguageCode $Language\n\n$lang = CallLang -clg $langCode\n\nWrite-Host ($lang).Welcome\nWrite-Host\n\n# Check version Windows\n$os = Get-CimInstance -ClassName \"Win32_OperatingSystem\" -ErrorAction SilentlyContinue\nif ($os) {\n    $osCaption = $os.Caption\n}\nelse {\n    $osCaption = (Get-ItemProperty -Path \"HKLM:\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\" -Name ProductName).ProductName\n}\n$pattern = \"\\bWindows (7|8(\\.1)?|10|11|12)\\b\"\n$reg = [regex]::Matches($osCaption, $pattern)\n$win_os = $reg.Value\n\n$win12 = $win_os -match \"\\windows 12\\b\"\n$win11 = $win_os -match \"\\windows 11\\b\"\n$win10 = $win_os -match \"\\windows 10\\b\"\n$win8_1 = $win_os -match \"\\windows 8.1\\b\"\n$win8 = $win_os -match \"\\windows 8\\b\"\n$win7 = $win_os -match \"\\windows 7\\b\"\n\nfunction Get-SystemArchitecture {\n    $archNames = @($env:PROCESSOR_ARCHITEW6432, $env:PROCESSOR_ARCHITECTURE) | Where-Object { $_ }\n\n    foreach ($archName in $archNames) {\n        switch ($archName.ToUpperInvariant()) {\n            'ARM64' { return 'arm64' }\n            'AMD64' { return 'x64' }\n            'X86' { return 'x86' }\n        }\n    }\n\n    return 'x64'\n}\n\nfunction Get-SpotifyVersionNumber {\n    param(\n        [Parameter(Mandatory = $true)]\n        [string]$SpotifyVersion\n    )\n\n    return [Version]($SpotifyVersion -replace '\\.g[0-9a-f]{8}$', '')\n}\n\nfunction Get-SpotifyInstallerArchitecture {\n    param(\n        [Parameter(Mandatory = $true)]\n        [string]$SystemArchitecture,\n        [Parameter(Mandatory = $true)]\n        [version]$SpotifyVersion,\n        [Parameter(Mandatory = $true)]\n        [version]$LastX86SupportedVersion\n    )\n\n    switch ($SystemArchitecture) {\n        'arm64' { return 'arm64' }\n        'x64' {\n            if ($SpotifyVersion -le $LastX86SupportedVersion) {\n                return 'x86'\n            }\n\n            return 'x64'\n        }\n        'x86' {\n            if ($SpotifyVersion -le $LastX86SupportedVersion) {\n                return 'x86'\n            }\n\n            throw \"Version $SpotifyVersion is not supported on x86 systems\"\n        }\n        default { return 'x64' }\n    }\n}\n\n$spotifyDownloadBaseUrl = \"https://broad-pine-bbc0.amd64fox1.workers.dev/download\"\n$systemArchitecture = Get-SystemArchitecture\n\n$match_v = \"^(?<version>\\d+\\.\\d+\\.\\d+\\.\\d+\\.g[0-9a-f]{8})(?:-\\d+)?$\"\n$versionIsSupported = $false\nif ($version) {\n    if ($version -match $match_v) {\n        $onlineFull = $Matches.version\n        $versionIsSupported = $true\n    }\n    else {      \n        Write-Warning \"Invalid $($version) format. Example: 1.2.13.661.ga588f749 (legacy -4064 suffix is optional)\"\n        Write-Host\n    }\n}\n\n$old_os = $win7 -or $win8 -or $win8_1\n\n$last_win7 = Get-SpotifyVersionNumber -SpotifyVersion $last_win7_full\n\n$last_x86 = Get-SpotifyVersionNumber -SpotifyVersion $last_x86_full\n\nif (-not $versionIsSupported) {\n    if ($old_os) { \n        $onlineFull = $last_win7_full\n    }\n    elseif ($systemArchitecture -eq 'x86') {\n        $onlineFull = $last_x86_full\n    }\n    else {  \n        # latest tested version for Win 10-12 \n        $onlineFull = $latest_full\n    }\n}\nelse {\n    $requestedOnlineVersion = Get-SpotifyVersionNumber -SpotifyVersion $onlineFull\n\n    if ($old_os) {\n        if ($requestedOnlineVersion -gt $last_win7) { \n\n            Write-Warning (\"Version {0} is only supported on Windows 10 and above\" -f $requestedOnlineVersion)\n            Write-Warning (\"The recommended version has been automatically changed to {0}, the latest supported version for Windows 7-8.1\" -f $last_win7)\n            Write-Host\n            $onlineFull = $last_win7_full\n            $requestedOnlineVersion = $last_win7\n        }\n    }\n\n    if ($systemArchitecture -eq 'x86' -and $requestedOnlineVersion -gt $last_x86) {\n        Write-Warning (\"Version {0} is not supported on 32-bit (x86) Windows systems\" -f $requestedOnlineVersion)\n        Write-Warning (\"The recommended version has been automatically changed to {0}, the latest supported version for x86 systems\" -f $last_x86)\n        Write-Host\n        $onlineFull = $last_x86_full\n        $requestedOnlineVersion = $last_x86\n    }\n}\n$online = (Get-SpotifyVersionNumber -SpotifyVersion $onlineFull).ToString()\n\n\nfunction Get {\n    param (\n        [Parameter(Mandatory = $true)]\n        [string]$Url,\n        [int]$MaxRetries = 3,\n        [int]$RetrySeconds = 3,\n        [string]$OutputPath\n    )\n\n    $params = @{\n        Uri        = $Url\n        TimeoutSec = 15\n    }\n\n    if ($OutputPath) {\n        $params['OutFile'] = $OutputPath\n    }\n\n    for ($i = 0; $i -lt $MaxRetries; $i++) {\n        try {\n            $response = Invoke-RestMethod @params\n            return $response\n        }\n        catch {\n            Write-Warning \"Attempt $($i+1) of $MaxRetries failed: $_\"\n            if ($i -lt $MaxRetries - 1) {\n                Start-Sleep -Seconds $RetrySeconds\n            }\n        }\n    }\n\n    Write-Host\n    Write-Host \"ERROR: \" -ForegroundColor Red -NoNewline; Write-Host \"Failed to retrieve data from $Url\" -ForegroundColor White\n    Write-Host\n    return $null\n}\n\n\nfunction incorrectValue {\n\n    Write-Host ($lang).Incorrect\"\" -ForegroundColor Red -NoNewline\n    Write-Host ($lang).Incorrect2\"\" -NoNewline\n    Start-Sleep -Milliseconds 1000\n    Write-Host \"3\" -NoNewline \n    Start-Sleep -Milliseconds 1000\n    Write-Host \" 2\" -NoNewline\n    Start-Sleep -Milliseconds 1000\n    Write-Host \" 1\"\n    Start-Sleep -Milliseconds 1000     \n    Clear-Host\n} \n\nfunction Unlock-Folder {\n    $blockFileUpdate = Join-Path $env:LOCALAPPDATA 'Spotify\\Update'\n\n    if (Test-Path $blockFileUpdate -PathType Container) {\n        $folderUpdateAccess = Get-Acl $blockFileUpdate\n        $hasDenyAccessRule = $false\n        \n        foreach ($accessRule in $folderUpdateAccess.Access) {\n            if ($accessRule.AccessControlType -eq 'Deny') {\n                $hasDenyAccessRule = $true\n                $folderUpdateAccess.RemoveAccessRule($accessRule)\n            }\n        }\n        \n        if ($hasDenyAccessRule) {\n            Set-Acl $blockFileUpdate $folderUpdateAccess\n        }\n    }\n}\nfunction Mod-F {\n    param(\n        [string] $template,\n        [object[]] $arguments\n    )\n    \n    $result = $template\n    for ($i = 0; $i -lt $arguments.Length; $i++) {\n        $placeholder = \"{${i}}\"\n        $value = $arguments[$i]\n        $result = $result -replace [regex]::Escape($placeholder), $value\n    }\n    \n    return $result\n}\n\nfunction Test-CurlAvailability {\n    try {\n        if (curl.exe -V) {\n            return $true\n        }\n    }\n    catch { }\n\n    return $false\n}\n\nfunction Resolve-SpotifyDownloadMethod {\n    param(\n        [string]$ForcedMethod\n    )\n\n    if ($ForcedMethod) {\n        switch ($ForcedMethod) {\n            'curl' {\n                if (Test-CurlAvailability) {\n                    return 'curl'\n                }\n\n                throw \"Forced download method 'curl' is not available on this system\"\n            }\n            'webclient' {\n                return 'webclient'\n            }\n        }\n    }\n\n    if (Test-CurlAvailability) {\n        return 'curl'\n    }\n\n    return 'webclient'\n}\n\nfunction Format-DownloadSizeMb {\n    param(\n        [long]$Bytes\n    )\n\n    return ('{0:N2} MB' -f ($Bytes / 1MB))\n}\n\nfunction Invoke-WebClientDownloadWithProgress {\n    param(\n        [Parameter(Mandatory = $true)]\n        [System.Net.WebClient]$WebClient,\n        [Parameter(Mandatory = $true)]\n        [string]$Url,\n        [Parameter(Mandatory = $true)]\n        [string]$DestinationPath\n    )\n\n    $fileName = Split-Path -Path $DestinationPath -Leaf\n    $previousProgressPreference = $ProgressPreference\n    $responseStream = $null\n    $fileStream = $null\n    $stopwatch = $null\n\n    try {\n        $ProgressPreference = 'Continue'\n        $responseStream = $WebClient.OpenRead($Url)\n\n        if ($null -eq $responseStream) {\n            throw \"Failed to open response stream for $Url\"\n        }\n\n        $totalBytes = 0L\n        $contentLength = $WebClient.ResponseHeaders['Content-Length']\n        if ($contentLength) {\n            $null = [long]::TryParse($contentLength, [ref]$totalBytes)\n        }\n\n        $fileStream = [System.IO.File]::Open($DestinationPath, [System.IO.FileMode]::Create, [System.IO.FileAccess]::Write, [System.IO.FileShare]::None)\n\n        $buffer = New-Object byte[] 262144\n        $bytesReceived = 0L\n        $progressUpdateIntervalMs = 200\n        $stopwatch = [System.Diagnostics.Stopwatch]::StartNew()\n        $lastProgressUpdateMs = - $progressUpdateIntervalMs\n\n        while (($bytesRead = $responseStream.Read($buffer, 0, $buffer.Length)) -gt 0) {\n            $fileStream.Write($buffer, 0, $bytesRead)\n            $bytesReceived += $bytesRead\n\n            if (($stopwatch.ElapsedMilliseconds - $lastProgressUpdateMs) -ge $progressUpdateIntervalMs) {\n                if ($totalBytes -gt 0) {\n                    $percentComplete = [Math]::Min([int][Math]::Floor(($bytesReceived / $totalBytes) * 100), 100)\n                    $status = \"{0} / {1} ({2}%)\" -f (Format-DownloadSizeMb -Bytes $bytesReceived), (Format-DownloadSizeMb -Bytes $totalBytes), $percentComplete\n                    Write-Progress -Activity \"Downloading $fileName\" -Status $status -PercentComplete $percentComplete\n                }\n                else {\n                    $status = \"{0} downloaded\" -f (Format-DownloadSizeMb -Bytes $bytesReceived)\n                    Write-Progress -Activity \"Downloading $fileName\" -Status $status -PercentComplete 0\n                }\n\n                $lastProgressUpdateMs = $stopwatch.ElapsedMilliseconds\n            }\n        }\n\n        if ($totalBytes -gt 0) {\n            $completedStatus = \"{0} / {1} (100%)\" -f (Format-DownloadSizeMb -Bytes $bytesReceived), (Format-DownloadSizeMb -Bytes $totalBytes)\n            Write-Progress -Activity \"Downloading $fileName\" -Status $completedStatus -PercentComplete 100\n        }\n\n        Write-Progress -Activity \"Downloading $fileName\" -Completed\n    }\n    finally {\n        if ($null -ne $stopwatch) {\n            $stopwatch.Stop()\n        }\n        if ($null -ne $fileStream) {\n            $fileStream.Dispose()\n        }\n        if ($null -ne $responseStream) {\n            $responseStream.Dispose()\n        }\n\n        Write-Progress -Activity \"Downloading $fileName\" -Completed\n        $ProgressPreference = $previousProgressPreference\n    }\n}\n\nfunction Invoke-SpotifyDownloadAttempt {\n    param(\n        [Parameter(Mandatory = $true)]\n        [string]$Url,\n        [Parameter(Mandatory = $true)]\n        [string]$DestinationPath,\n        [Parameter(Mandatory = $true)]\n        [System.Net.WebClient]$WebClient,\n        [Parameter(Mandatory = $true)]\n        [ValidateSet('curl', 'webclient')]\n        [string]$DownloadMethod\n    )\n\n    switch ($DownloadMethod) {\n        'curl' {\n            $stcode = curl.exe -Is -w \"%{http_code}\" -o NUL -k $Url --retry 2 --ssl-no-revoke\n            if ($stcode.trim() -ne \"200\") {\n                throw \"Unexpected HTTP status: $($stcode.Trim())\"\n            }\n\n            curl.exe -q -k $Url -o $DestinationPath --progress-bar --retry 3 --ssl-no-revoke\n            return\n        }\n        'webclient' {\n            Invoke-WebClientDownloadWithProgress -WebClient $WebClient -Url $Url -DestinationPath $DestinationPath\n            return\n        }\n    }\n}\n\nfunction downloadSp([string]$DownloadFolder) {\n\n    $webClient = New-Object -TypeName System.Net.WebClient\n\n    $spotifyVersion = Get-SpotifyVersionNumber -SpotifyVersion $onlineFull\n    $arch = Get-SpotifyInstallerArchitecture `\n        -SystemArchitecture $systemArchitecture `\n        -SpotifyVersion $spotifyVersion `\n        -LastX86SupportedVersion $last_x86\n\n    $web_Url = \"$spotifyDownloadBaseUrl/spotify_installer-$onlineFull-$arch.exe\"\n    $local_Url = Join-Path $DownloadFolder 'SpotifySetup.exe'\n    $web_name_file = \"SpotifySetup.exe\"\n    try {\n        $selectedDownloadMethod = Resolve-SpotifyDownloadMethod -ForcedMethod $download_method\n    }\n    catch {\n        Write-Warning $_.Exception.Message\n        Stop-Script\n    }\n\n    for ($attempt = 1; $attempt -le 2; $attempt++) {\n        try {\n            Invoke-SpotifyDownloadAttempt `\n                -Url $web_Url `\n                -DestinationPath $local_Url `\n                -WebClient $webClient `\n                -DownloadMethod $selectedDownloadMethod\n            return\n        }\n        catch {\n            Write-Host\n\n            if ($attempt -eq 1) {\n                Write-Host ($lang).Download $web_name_file -ForegroundColor RED\n                $_.Exception\n                Write-Host\n                Write-Host ($lang).Download2`n\n                Start-Sleep -Milliseconds 5000\n                continue\n            }\n\n            Write-Host ($lang).Download3 -ForegroundColor RED\n            $_.Exception\n            Write-Host\n            Write-Host ($lang).Download4`n\n\n            if ($DownloadFolder -and (Test-Path $DownloadFolder)) {\n                Start-Sleep -Milliseconds 200\n                Remove-Item -Recurse -LiteralPath $DownloadFolder -ErrorAction SilentlyContinue\n            }\n\n            Stop-Script\n        }\n    }\n} \n\nfunction Remove-TempDirectory {\n    param(\n        [string]$Directory,\n        [int]$DelayMs = 200\n    )\n    if ($Directory -and (Test-Path $Directory)) {\n        Start-Sleep -Milliseconds $DelayMs\n        Remove-Item -Recurse -LiteralPath $Directory -ErrorAction SilentlyContinue -Force\n    }\n}\n\nfunction DesktopFolder {\n\n    # If the default Dekstop folder does not exist, then try to find it through the registry.\n    $ErrorActionPreference = 'SilentlyContinue' \n    if (Test-Path \"$env:USERPROFILE\\Desktop\") {  \n        $desktop_folder = \"$env:USERPROFILE\\Desktop\"  \n    }\n\n    $regedit_desktop_folder = Get-ItemProperty -Path \"Registry::HKEY_CURRENT_USER\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\User Shell Folders\\\"\n    $regedit_desktop = $regedit_desktop_folder.'{754AC886-DF64-4CBA-86B5-F7FBF4FBCEF5}'\n \n    if (!(Test-Path \"$env:USERPROFILE\\Desktop\")) {\n        $desktop_folder = $regedit_desktop\n    }\n    return $desktop_folder\n}\n\nfunction Kill-Spotify {\n    param (\n        [int]$maxAttempts = 5\n    )\n\n    for ($attempt = 1; $attempt -le $maxAttempts; $attempt++) {\n        $allProcesses = Get-Process -ErrorAction SilentlyContinue\n\n        $spotifyProcesses = $allProcesses | Where-Object { $_.ProcessName -like \"*spotify*\" }\n\n        if ($spotifyProcesses) {\n            foreach ($process in $spotifyProcesses) {\n                try {\n                    Stop-Process -Id $process.Id -Force\n                }\n                catch {\n                    # Ignore NoSuchProcess exception\n                }\n            }\n            Start-Sleep -Seconds 1\n        }\n        else {\n            break\n        }\n    }\n\n    if ($attempt -gt $maxAttempts) {\n        Write-Host \"The maximum number of attempts to terminate a process has been reached.\"\n    }\n}\n\n\nKill-Spotify\n\n# Remove Spotify Windows Store If Any\nif ($win10 -or $win11 -or $win8_1 -or $win8 -or $win12) {\n\n    if (Get-AppxPackage -Name SpotifyAB.SpotifyMusic) {\n        Write-Host ($lang).MsSpoti`n\n        \n        if (!($confirm_uninstall_ms_spoti)) {\n            do {\n                $ch = Read-Host -Prompt ($lang).MsSpoti2\n                Write-Host\n                if (!($ch -eq 'n' -or $ch -eq 'y')) {\n                    incorrectValue\n                }\n            }\n    \n            while ($ch -notmatch '^y$|^n$')\n        }\n        if ($confirm_uninstall_ms_spoti) { $ch = 'y' }\n        if ($ch -eq 'y') {      \n            $previousProgressPreference = $ProgressPreference\n            try {\n                $ProgressPreference = 'SilentlyContinue' # Hiding Progress Bars\n                if ($confirm_uninstall_ms_spoti) { Write-Host ($lang).MsSpoti3`n }\n                if (!($confirm_uninstall_ms_spoti)) { Write-Host ($lang).MsSpoti4`n }\n                Get-AppxPackage -Name SpotifyAB.SpotifyMusic | Remove-AppxPackage\n            }\n            finally {\n                $ProgressPreference = $previousProgressPreference\n            }\n        }\n        if ($ch -eq 'n') {\n            Stop-Script\n        }\n    }\n}\n\nif ($premium) {\n    Write-Host ($lang).Prem`n\n}\n\n$spotifyInstalled = (Test-Path -LiteralPath $spotifyExecutable)\n\nif ($SpotifyPath -and -not $spotifyInstalled) {\n    Write-Warning \"Spotify not found in custom path: $spotifyDirectory\"\n    Stop-Script\n}\n\nif ($spotifyInstalled) {\n    \n    # Check version Spotify offline\n    $offline = (Get-Item $spotifyExecutable).VersionInfo.FileVersion\n \n    # Version comparison\n    # converting strings to arrays of numbers using the -split operator and a foreach loop\n    \n    $arr1 = $online -split '\\.' | foreach { [int]$_ }\n    $arr2 = $offline -split '\\.' | foreach { [int]$_ }\n\n    # compare each element of the array in order from most significant to least significant.\n    for ($i = 0; $i -lt $arr1.Length; $i++) {\n        if ($arr1[$i] -gt $arr2[$i]) {\n            $oldversion = $true\n            break\n        }\n        elseif ($arr1[$i] -lt $arr2[$i]) {\n            $testversion = $true\n            break\n        }\n    }\n\n    # Old version Spotify (skip if custom path is used)\n    if ($oldversion -and -not $SpotifyPath) {\n        if ($confirm_spoti_recomended_over -or $confirm_spoti_recomended_uninstall) {\n            Write-Host ($lang).OldV`n\n        }\n        if (!($confirm_spoti_recomended_over) -and !($confirm_spoti_recomended_uninstall)) {\n            do {\n                Write-Host (($lang).OldV2 -f $offline, $online)\n                $ch = Read-Host -Prompt ($lang).OldV3\n                Write-Host\n                if (!($ch -eq 'n' -or $ch -eq 'y')) {\n                    incorrectValue\n                }\n            }\n            while ($ch -notmatch '^y$|^n$')\n        }\n        if ($confirm_spoti_recomended_over -or $confirm_spoti_recomended_uninstall) { \n            $ch = 'y' \n            Write-Host ($lang).AutoUpd`n\n        }\n        if ($ch -eq 'y') { \n            $upgrade_client = $true \n\n            if (!($confirm_spoti_recomended_over) -and !($confirm_spoti_recomended_uninstall)) {\n                do {\n                    $ch = Read-Host -Prompt (($lang).DelOrOver -f $offline)\n                    Write-Host\n                    if (!($ch -eq 'n' -or $ch -eq 'y')) {\n                        incorrectValue\n                    }\n                }\n                while ($ch -notmatch '^y$|^n$')\n            }\n            if ($confirm_spoti_recomended_uninstall) { $ch = 'y' }\n            if ($confirm_spoti_recomended_over) { $ch = 'n' }\n            if ($ch -eq 'y') {\n                Write-Host ($lang).DelOld`n \n                $null = Unlock-Folder \n                cmd /c $spotifyExecutable /UNINSTALL /SILENT\n                wait-process -name SpotifyUninstall\n                Start-Sleep -Milliseconds 200\n                if (Test-Path $spotifyDirectory) { Remove-Item -Recurse -Force -LiteralPath $spotifyDirectory }\n                if (Test-Path $spotifyDirectory2) { Remove-Item -Recurse -Force -LiteralPath $spotifyDirectory2 }\n                if (Test-Path $spotifyUninstall ) { Remove-Item -Recurse -Force -LiteralPath $spotifyUninstall }\n            }\n            if ($ch -eq 'n') { $ch = $null }\n        }\n        if ($ch -eq 'n') { \n            $downgrading = $true\n        }\n    }\n    \n    # Unsupported version Spotify (skip if custom path is used)\n    if ($testversion -and -not $SpotifyPath) {\n\n        if ($confirm_spoti_recomended_over -or $confirm_spoti_recomended_uninstall) {\n            Write-Host ($lang).NewV`n\n        }\n        if (!($confirm_spoti_recomended_over) -and !($confirm_spoti_recomended_uninstall)) {\n            do {\n                Write-Host (($lang).NewV2 -f $offline, $online)\n                $ch = Read-Host -Prompt (($lang).NewV3 -f $offline)\n                Write-Host\n                if (!($ch -eq 'n' -or $ch -eq 'y')) {\n                    incorrectValue\n                }\n            }\n            while ($ch -notmatch '^y$|^n$')\n        }\n        if ($confirm_spoti_recomended_over -or $confirm_spoti_recomended_uninstall) { $ch = 'n' }\n        if ($ch -eq 'y') { $upgrade_client = $false }\n        if ($ch -eq 'n') {\n            if (!($confirm_spoti_recomended_over) -and !($confirm_spoti_recomended_uninstall)) {\n                do {\n                    $ch = Read-Host -Prompt (($lang).Recom -f $online)\n                    Write-Host\n                    if (!($ch -eq 'n' -or $ch -eq 'y')) {\n                        incorrectValue\n                    }\n                }\n                while ($ch -notmatch '^y$|^n$')\n            }\n            if ($confirm_spoti_recomended_over -or $confirm_spoti_recomended_uninstall) { \n                $ch = 'y' \n                Write-Host ($lang).AutoUpd`n\n            }\n            if ($ch -eq 'y') {\n                $upgrade_client = $true\n                $downgrading = $true\n                if (!($confirm_spoti_recomended_over) -and !($confirm_spoti_recomended_uninstall)) {\n                    do {\n                        $ch = Read-Host -Prompt (($lang).DelOrOver -f $offline)\n                        Write-Host\n                        if (!($ch -eq 'n' -or $ch -eq 'y')) {\n                            incorrectValue\n                        }\n                    }\n                    while ($ch -notmatch '^y$|^n$')\n                }\n                if ($confirm_spoti_recomended_uninstall) { $ch = 'y' }\n                if ($confirm_spoti_recomended_over) { $ch = 'n' }\n                if ($ch -eq 'y') {\n                    Write-Host ($lang).DelNew`n\n                    $null = Unlock-Folder\n                    cmd /c $spotifyExecutable /UNINSTALL /SILENT\n                    wait-process -name SpotifyUninstall\n                    Start-Sleep -Milliseconds 200\n                    if (Test-Path $spotifyDirectory) { Remove-Item -Recurse -Force -LiteralPath $spotifyDirectory }\n                    if (Test-Path $spotifyDirectory2) { Remove-Item -Recurse -Force -LiteralPath $spotifyDirectory2 }\n                    if (Test-Path $spotifyUninstall ) { Remove-Item -Recurse -Force -LiteralPath $spotifyUninstall }\n                }\n                if ($ch -eq 'n') { $ch = $null }\n            }\n\n            if ($ch -eq 'n') {\n                Remove-TempDirectory -Directory $tempDirectory\n                Stop-Script\n            }\n        }\n    }\n}\n# If there is no client or it is outdated, then install (skip if custom path is used)\nif (-not $SpotifyPath -and (-not $spotifyInstalled -or $upgrade_client)) {\n\n    Write-Host ($lang).DownSpoti\"\" -NoNewline\n    Write-Host  $online -ForegroundColor Green\n    Write-Host ($lang).DownSpoti2`n\n    \n    # Delete old version files of Spotify before installing, leave only profile files\n    $ErrorActionPreference = 'SilentlyContinue'\n    Kill-Spotify\n    Start-Sleep -Milliseconds 600\n    $null = Unlock-Folder \n    Start-Sleep -Milliseconds 200\n    Get-ChildItem $spotifyDirectory -Exclude 'Users', 'prefs' | Remove-Item -Recurse -Force \n    Start-Sleep -Milliseconds 200\n\n    $tempDirName = \"SpotX_Temp-$(Get-Date -UFormat '%Y-%m-%d_%H-%M-%S')\"\n    $tempDirectory = Join-Path ([System.IO.Path]::GetTempPath()) $tempDirName\n    if (-not (Test-Path -LiteralPath $tempDirectory)) { New-Item -ItemType Directory -Path $tempDirectory | Out-Null }\n\n    # Client download\n    downloadSp -DownloadFolder $tempDirectory\n    Write-Host\n\n    Start-Sleep -Milliseconds 200\n\n    # Client installation\n    $setupExe = Join-Path $tempDirectory 'SpotifySetup.exe'\n    Start-Process -FilePath explorer.exe -ArgumentList $setupExe\n    while (-not (get-process | Where-Object { $_.ProcessName -eq 'SpotifySetup' })) {}\n    wait-process -name SpotifySetup\n    Kill-Spotify\n\n    # Upgrade check version Spotify offline\n    $offline = (Get-Item $spotifyExecutable).VersionInfo.FileVersion\n\n    # Upgrade check version Spotify.bak\n    $offline_bak = (Get-Item $exe_bak).VersionInfo.FileVersion\n}\n\n\n\n# Delete Spotify shortcut if it is on desktop\nif ($no_shortcut) {\n    $ErrorActionPreference = 'SilentlyContinue'\n    $desktop_folder = DesktopFolder\n    Start-Sleep -Milliseconds 1000\n    remove-item \"$desktop_folder\\Spotify.lnk\" -Recurse -Force\n}\n\n$ch = $null\n\n\n# updated Russian translation\nif ($langCode -eq 'ru' -and [version]$offline -ge [version]\"1.1.92.644\") { \n    \n    $webjsonru = Get -Url (Get-Link -e \"/patches/Augmented%20translation/ru.json\")\n\n    if ($webjsonru -ne $null) {\n\n        $ru = $true\n    }\n}\n\nif ($podcasts_off) { \n    Write-Host ($lang).PodcatsOff`n \n    $ch = 'y'\n}\nif ($podcasts_on) {\n    Write-Host ($lang).PodcastsOn`n\n    $ch = 'n'\n}\nif (!($podcasts_off) -and !($podcasts_on)) {\n\n    do {\n        $ch = Read-Host -Prompt ($lang).PodcatsSelect\n        Write-Host\n        if (!($ch -eq 'n' -or $ch -eq 'y')) { incorrectValue }\n    }\n    while ($ch -notmatch '^y$|^n$')\n}\nif ($ch -eq 'y') { $podcast_off = $true }\n\n$ch = $null\n\nif ($downgrading) { $upd = \"`n\" + [string]($lang).DowngradeNote }\n\nelse { $upd = \"\" }\n\nif ($block_update_on) { \n    Write-Host ($lang).UpdBlock`n\n    $ch = 'y'\n}\nif ($block_update_off) {\n    Write-Host ($lang).UpdUnblock`n\n    $ch = 'n'\n}\nif (!($block_update_on) -and !($block_update_off)) {\n    do {\n        $text_upd = [string]($lang).UpdSelect + $upd\n        $ch = Read-Host -Prompt $text_upd\n        Write-Host\n        if (!($ch -eq 'n' -or $ch -eq 'y')) { incorrectValue } \n    }\n    while ($ch -notmatch '^y$|^n$')\n}\nif ($ch -eq 'y') { $not_block_update = $false }\n\nif (!($new_theme) -and [version]$offline -ge [version]\"1.2.14.1141\") {\n    Write-Warning \"This version does not support the old theme, use version 1.2.13.661 or below\"\n    Write-Host\n}\n\nif ($ch -eq 'n') {\n    $not_block_update = $true\n    $ErrorActionPreference = 'SilentlyContinue'\n    if ((Test-Path -LiteralPath $exe_bak) -and $offline -eq $offline_bak) {\n        Remove-Item $spotifyExecutable -Recurse -Force\n        Rename-Item $exe_bak $spotifyExecutable\n    }\n}\n\n$ch = $null\n\n$webjson = Get -Url (Get-Link -e \"/patches/patches.json\") -RetrySeconds 5\n        \nif ($webjson -eq $null) { \n    Write-Host\n    Write-Host \"Failed to get patches.json\" -ForegroundColor Red\n    Remove-TempDirectory -Directory $tempDirectory\n    Stop-Script\n}\n\n\nfunction Helper($paramname) {\n\n\n    function Remove-Json {\n        param (\n            [Parameter(Mandatory = $true)]\n            [Alias(\"j\")]\n            [PSObject]$Json,\n            \n            [Parameter(Mandatory = $true, ValueFromPipeline = $true)]\n            [Alias(\"p\")]\n            [string[]]$Properties\n        )\n        \n        foreach ($Property in $Properties) {\n            $Json.psobject.properties.Remove($Property)\n        }\n    }\n    function Move-Json {\n        param (\n            [Parameter(Mandatory = $true)]\n            [Alias(\"t\")]\n            [PSObject]$to,\n    \n            [Parameter(Mandatory = $true)]\n            [Alias(\"n\")]\n            [string[]]$name,\n    \n            [Parameter(Mandatory = $true)]\n            [Alias(\"f\")]\n            [PSObject]$from\n        )\n    \n        foreach ($propertyName in $name) {\n            $from | Add-Member -MemberType NoteProperty -Name $propertyName -Value $to.$propertyName\n            Remove-Json -j $to -p $propertyName\n        }\n    }\n\n    switch ( $paramname ) {\n        \"HtmlLicMin\" { \n            # licenses.html minification\n            $name = \"patches.json.others.\"\n            $n = \"licenses.html\"\n            $contents = \"htmlmin\"\n            $json = $webjson.others\n        }\n        \"HtmlBlank\" { \n            # htmlBlank minification\n            $name = \"patches.json.others.\"\n            $n = \"blank.html\"\n            $contents = \"blank.html\"\n            $json = $webjson.others\n        }\n        \"MinJs\" { \n            # Minification of all *.js\n            $contents = \"minjs\"\n            $json = $webjson.others\n        }\n        \"MinJson\" { \n            # Minification of all *.json\n            $contents = \"minjson\"\n            $json = $webjson.others\n        }\n        \"FixCss\" { \n            # Remove indent for old theme xpui.css\n            $name = \"patches.json.others.\"\n            $n = \"xpui.css\"\n            $json = $webjson.others\n        }\n        \"Fixjs\" { \n            $n = $name\n            $contents = \"searchFixes\"\n            $name = \"patches.json.others.\"\n            $json = $webjson.others\n        }\n        \"Cssmin\" { \n            # Minification of all *.css\n            $contents = \"cssmin\"\n            $json = $webjson.others\n        }\n        \"DisableSentry\" { \n\n            $name = \"patches.json.others.\"\n            $n = $fileName\n            $contents = \"disablesentry\"\n            $json = $webjson.others\n        }\n        \"Discriptions\" {  \n            # Add discriptions (xpui-desktop-modals.js)\n\n            $svg_tg = $webjson.others.discriptions.svgtg\n            $svg_git = $webjson.others.discriptions.svggit\n            $svg_faq = $webjson.others.discriptions.svgfaq\n            $replace = $webjson.others.discriptions.replace\n\n            $replacedText = $replace -f $svg_git, $svg_tg, $svg_faq\n\n            $webjson.others.discriptions.replace = '$1\"' + $replacedText + '\"})'\n\n            $name = \"patches.json.others.\"\n            $n = \"xpui-desktop-modals.js\"\n            $contents = \"discriptions\"\n            $json = $webjson.others\n        }\n        \"OffadsonFullscreen\" { \n            # Full screen mode activation and removing \"Upgrade to premium\" menu, upgrade button, disabling a playlist sponsor\n            $name = \"patches.json.free.\"\n            $n = \"xpui.js\"\n            $contents = $webjson.free.psobject.properties.name\n            $json = $webjson.free\n        }\n        \"ForcedExp\" {  \n            # Forced disable some exp (xpui.js)\n            $offline_patch = $offline -replace '(\\d+\\.\\d+\\.\\d+)(.\\d+)', '$1'\n            $Enable = $webjson.others.EnableExp\n            $Disable = $webjson.others.DisableExp\n            $Custom = $webjson.others.CustomExp\n\n            # causes lags in the main menu 1.2.44-1.2.56\n            if ([version]$offline -le [version]'1.2.56.502') { Move-Json -n 'HomeCarousels' -t $Enable -f $Disable }\n\n            # disable search suggestions\n            Move-Json -n 'SearchSuggestions' -t $Enable -f $Disable\n\n            # disable new scrollbar\n            Move-Json -n 'NewOverlayScrollbars' -t $Enable -f $Disable\n\n            # temporarily disable collapsing right sidebar\n            Move-Json -n 'PeekNpv' -t $Enable -f $Disable\n \n            if ($podcast_off) { Move-Json -n 'HomePin' -t $Enable -f $Disable }\n\n            # disabled broken panel from 1.2.37 to 1.2.38\n            if ([version]$offline -eq [version]'1.2.37.701' -or [version]$offline -eq [version]'1.2.38.720' ) { \n                Move-Json -n 'DevicePickerSidePanel' -t $Enable -f $Disable\n            }\n\n            if ([version]$offline -ge [version]'1.2.41.434' -and $lyrics_block) { Move-Json -n 'Lyrics' -t $Enable -f $Disable } \n\n            if ([version]$offline -eq [version]'1.2.30.1135') { Move-Json -n 'QueueOnRightPanel' -t $Enable -f $Disable }\n\n            if ([version]$offline -le [version]'1.2.50.335') {\n\n                if (!($plus)) { Move-Json -n \"Plus\", \"AlignedCurationSavedIn\" -t $Enable -f $Disable }\n            \n            }\n\n            if (!$topsearchbar) {\n                Move-Json -n \"GlobalNavBar\" -t $Enable -f $Disable \n                $Custom.GlobalNavBar.value = \"control\"\n                if ([version]$offline -le [version]\"1.2.45.454\") {\n                    Move-Json -n \"RecentSearchesDropdown\" -t $Enable -f $Disable \n                }\n            }\n            if ([version]$offline -le [version]'1.2.50.335') {\n\n                if (!($funnyprogressbar)) { Move-Json -n 'HeBringsNpb' -t $Enable -f $Disable }\n            \n            }\n\n            if ([version]$offline -le [version]'1.2.62.580') {\n\n                if (!$newFullscreenMode) { Move-Json -n \"ImprovedCinemaMode\", \"ImprovedCinemaModeCanvas\" -t $Enable -f $Disable }\n            \n            }\n            # disable subfeed filter chips on home\n            if ($homesub_off) { \n                Move-Json -n \"HomeSubfeeds\" -t $Enable -f $Disable \n            }\n\n            # Old theme\n            if (!($new_theme) -and [version]$offline -le [version]\"1.2.13.661\") {\n\n                Move-Json -n 'RightSidebar', 'LeftSidebar' -t $Enable -f $Disable\n\n                Remove-Json -j $Custom -p \"NavAlt\", 'NavAlt2'\n                Remove-Json -j $Enable -p 'RightSidebarLyrics', 'RightSidebarCredits', 'RightSidebar', 'LeftSidebar', 'RightSidebarColors'\n            }\n            # New theme\n            else {\n                if ($rightsidebar_off -and [version]$offline -lt [version]\"1.2.24.756\") { \n                    Move-Json -n 'RightSidebar' -t $Enable -from $Disable\n                }\n                else {\n                    if (!($rightsidebarcolor)) { Remove-Json -j $Enable -p 'RightSidebarColors' }\n                    \n                    if ($old_lyrics) { \n                        Remove-Json -j $Enable -p 'RightSidebarLyrics' \n                        $Custom.LyricsVariationsInNPV.value = \"CONTROL\"\n                    } \n                }\n            }\n            if (!$premium) { Remove-Json -j $Enable -p 'RemoteDownloads', 'Magpie', 'MagpiePrompting', 'MagpieScheduling', 'MagpieCuration' }\n\n            # Disable unimportant exp\n            if ($exp_spotify) {\n                $objects = @(\n                    @{\n                        Object           = $webjson.others.CustomExp.psobject.properties\n                        PropertiesToKeep = @('LyricsUpsell')\n                    },\n                    @{\n                        Object           = $webjson.others.EnableExp.psobject.properties\n                        PropertiesToKeep = @('BrowseViaPathfinder', 'HomeViaGraphQLV2')\n                    }\n                )\n\n                foreach ($obj in $objects) {\n                    $propertiesToRemove = $obj.Object.Name | Where-Object { $_ -notin $obj.PropertiesToKeep }\n                    $propertiesToRemove | foreach {\n                        $obj.Object.Remove($_)\n                    }\n                }\n\n            }\n\n            $Exp = ($Enable, $Disable, $Custom)\n\n            foreach ($item in $Exp) {\n                $itemProperties = $item | Get-Member -MemberType NoteProperty | Select-Object -ExpandProperty Name\n            \n                foreach ($key in $itemProperties) {\n                    $vers = $item.$key.version\n            \n                    if (!($vers.to -eq \"\" -or [version]$vers.to -ge [version]$offline_patch -and [version]$vers.fr -le [version]$offline_patch)) {\n                        if ($item.PSObject.Properties.Name -contains $key) {\n                            $item.PSObject.Properties.Remove($key)\n                        }\n                    }\n                }\n            }\n\n            $Enable = $webjson.others.EnableExp\n            $Disable = $webjson.others.DisableExp\n            $Custom = $webjson.others.CustomExp\n\n            $enableNames = foreach ($item in $Enable.PSObject.Properties.Name) {\n                $webjson.others.EnableExp.$item.name\n            }\n\n            $disableNames = foreach ($item in $Disable.PSObject.Properties.Name) {\n                $webjson.others.DisableExp.$item.name\n            }\n\n            $customNames = foreach ($item in $Custom.PSObject.Properties.Name) {\n                $custname = $webjson.others.CustomExp.$item.name\n                $custvalue = $webjson.others.CustomExp.$item.value\n\n                # Create a string with the desired format\n                $objectString = \"{name:'$custname',value:'$custvalue'}\"\n                $objectString\n            }\n               \n            # Convert the strings of objects into a single text string\n            if ([string]::IsNullOrEmpty($customNames)) { $customTextVariable = '[]' }\n            else { $customTextVariable = \"[\" + ($customNames -join ',') + \"]\" }\n            if ([string]::IsNullOrEmpty($enableNames)) { $enableTextVariable = '[]' }\n            else { $enableTextVariable = \"['\" + ($enableNames -join \"','\") + \"']\" }\n            if ([string]::IsNullOrEmpty($disableNames)) { $disableTextVariable = '[]' }\n            else { $disableTextVariable = \"['\" + ($disableNames -join \"','\") + \"']\" }\n\n            $replacements = @(\n                @(\"enable:[]\", \"enable:$enableTextVariable\"),\n                @(\"disable:[]\", \"disable:$disableTextVariable\"),\n                @(\"custom:[]\", \"custom:$customTextVariable\")\n            )\n\n            foreach ($replacement in $replacements) {\n                $webjson.others.ForcedExp.replace = $webjson.others.ForcedExp.replace.Replace($replacement[0], $replacement[1])\n            }\n\n            $name = \"patches.json.others.\"\n            $n = \"xpui.js\"\n            $contents = \"ForcedExp\"\n            $json = $webjson.others\n        }\n        \"RuTranslate\" { \n            # Additional translation of some words for the Russian language\n            $n = \"ru.json\"\n            $contents = $webjsonru.psobject.properties.name\n            $json = $webjsonru\n        }\n        \"Binary\" { \n\n            $binary = $webjson.others.binary\n\n            if ($not_block_update) { Remove-Json -j $binary -p 'block_update' }\n\n            if ($premium) { Remove-Json -j $binary -p 'block_slots_2', 'block_slots_3' }\n\n            $name = \"patches.json.others.binary.\"\n            $n = \"Spotify.exe\"\n            $contents = $webjson.others.binary.psobject.properties.name\n            $json = $webjson.others.binary\n        }\n        \"Collaborators\" { \n            # Hide Collaborators icon\n            $name = \"patches.json.others.\"\n            $n = \"xpui-routes-playlist.js\"\n            $contents = \"collaboration\"\n            $json = $webjson.others\n        }\n        \"Dev\" { \n\n            $name = \"patches.json.others.\"\n            $n = \"xpui-routes-desktop-settings.js\"\n            $contents = \"dev-tools\"\n            $json = $webjson.others\n\n        }        \n        \"VariousofXpui-js\" { \n\n            $VarJs = $webjson.VariousJs\n\n            if ($premium) { Remove-Json -j $VarJs -p 'mock', 'upgradeButton', 'upgradeMenu' }\n\n            if ($topsearchbar -or ([version]$offline -ne [version]\"1.2.45.451\" -and [version]$offline -ne [version]\"1.2.45.454\")) { \n                Remove-Json -j $VarJs -p \"fixTitlebarHeight\"\n            }\n\n            if (!($lyrics_block)) { Remove-Json -j $VarJs -p \"lyrics-block\" }\n\n            else { \n                Remove-Json -j $VarJs -p \"lyrics-old-on\"\n            }\n\n            if (!($devtools)) { Remove-Json -j $VarJs -p \"dev-tools\" }\n\n            else {\n                if ([version]$offline -ge [version]\"1.2.35.663\") {\n\n                    # Create a copy of 'dev-tools'\n                    $newDevTools = $webjson.VariousJs.'dev-tools'.PSObject.Copy()\n                    \n                    # Delete the first item and change the version\n                    $newDevTools.match = $newDevTools.match[0], $newDevTools.match[2]\n                    $newDevTools.replace = $newDevTools.replace[0], $newDevTools.replace[2]\n                    $newDevTools.version.fr = '1.2.35'\n                    \n                    # Assign a copy of 'devtools' to the 'devtools' property in $web json.others\n                    $webjson.others | Add-Member -Name 'dev-tools' -Value $newDevTools -MemberType NoteProperty\n\t\t\t\t\t\n                    # leave only first item in $web json.Various Js.'devtools' match & replace\n                    $webjson.VariousJs.'dev-tools'.match = $webjson.VariousJs.'dev-tools'.match[1]\n                    $webjson.VariousJs.'dev-tools'.replace = $webjson.VariousJs.'dev-tools'.replace[1] \n                }\n            }\n\n            if ($urlform_goofy -and $idbox_goofy) {\n                $webjson.VariousJs.goofyhistory.replace = $webjson.VariousJs.goofyhistory.replace -f \"`\"$urlform_goofy`\"\", \"`\"$idbox_goofy`\"\"\n            }\n            else { Remove-Json -j $VarJs -p \"goofyhistory\" }\n            \n            if (!($ru)) { Remove-Json -j $VarJs -p \"offrujs\" }\n\n            if (!($premium) -or ($cache_limit)) {\n                if (!($premium)) { \n                    $adds += $webjson.VariousJs.product_state.add\n                }\n\n                if ($cache_limit) { \n        \n                    if ($cache_limit -lt 500) { $cache_limit = 500 }\n                    if ($cache_limit -gt 20000) { $cache_limit = 20000 }\n                        \n                    $adds2 = $webjson.VariousJs.product_state.add2\n                    if (!([string]::IsNullOrEmpty($adds))) { $adds2 = ',' + $adds2 }\n                    $adds += $adds2 -f $cache_limit\n\n                }\n                $repl = $webjson.VariousJs.product_state.replace\n                $webjson.VariousJs.product_state.replace = $repl -f \"{pairs:{$adds}}\"\n            }\n            else { Remove-Json -j $VarJs -p 'product_state' }\n\n            \n            $name = \"patches.json.VariousJs.\"\n            $n = \"xpui.js\"\n            $contents = $webjson.VariousJs.psobject.properties.name\n            $json = $webjson.VariousJs\n        }\n    }\n    $paramdata = $xpui\n    $novariable = \"Didn't find variable \"\n    $offline_patch = $offline -replace '(\\d+\\.\\d+\\.\\d+)(.\\d+)', '$1'\n\n    $contents | foreach { \n\n        if ( $json.$PSItem.version.to ) { $to = [version]$json.$PSItem.version.to -ge [version]$offline_patch } else { $to = $true }\n        if ( $json.$PSItem.version.fr ) { $fr = [version]$json.$PSItem.version.fr -le [version]$offline_patch } else { $fr = $false }\n        \n        $checkVer = $fr -and $to; $translate = $paramname -eq \"RuTranslate\"\n\n        if ($checkVer -or $translate) {\n\n            if ($json.$PSItem.match.Count -gt 1) {\n\n                $count = $json.$PSItem.match.Count - 1\n                $numbers = 0\n\n                While ($numbers -le $count) {\n\n                    if ($paramdata -match $json.$PSItem.match[$numbers]) { \n                        $paramdata = $paramdata -replace $json.$PSItem.match[$numbers], $json.$PSItem.replace[$numbers] \n                    }\n                    else { \n                        $notlog = \"MinJs\", \"MinJson\", \"Cssmin\"\n                        if ($paramname -notin $notlog) {\n    \n                            Write-Host $novariable -ForegroundColor red -NoNewline \n                            Write-Host \"$name$PSItem $numbers\"'in'$n\n                        }\n                    }  \n                    $numbers++\n                }\n            }\n            if ($json.$PSItem.match.Count -eq 1) {\n                if ($paramdata -match $json.$PSItem.match) { \n                    $paramdata = $paramdata -replace $json.$PSItem.match, $json.$PSItem.replace \n                }\n                else { \n                    if (!($translate) -or $err_ru) {\n                        Write-Host $novariable -ForegroundColor red -NoNewline \n                        Write-Host \"$name$PSItem\"'in'$n\n                    }\n                }\n            }   \n        }\n    }\n    $paramdata\n}\n\nfunction extract ($counts, $method, $name, $helper, $add, $patch) {\n    switch ( $counts ) {\n        \"one\" { \n            if ($method -eq \"zip\") {\n                Add-Type -Assembly 'System.IO.Compression.FileSystem'\n                $xpui_spa_patch = Join-Path (Join-Path $spotifyDirectory 'Apps') 'xpui.spa'\n                $zip = [System.IO.Compression.ZipFile]::Open($xpui_spa_patch, 'update')   \n                $file = $zip.GetEntry($name)\n                $reader = New-Object System.IO.StreamReader($file.Open())\n            }\n            if ($method -eq \"nonezip\") {\n                $file = Get-Item (Join-Path (Join-Path (Join-Path $spotifyDirectory 'Apps') 'xpui') $name)\n                $reader = New-Object -TypeName System.IO.StreamReader -ArgumentList $file\n            }\n            $xpui = $reader.ReadToEnd()\n            $reader.Close()\n            if ($helper) { $xpui = Helper -paramname $helper } \n            if ($method -eq \"zip\") { $writer = New-Object System.IO.StreamWriter($file.Open()) }\n            if ($method -eq \"nonezip\") { $writer = New-Object System.IO.StreamWriter -ArgumentList $file }\n            $writer.BaseStream.SetLength(0)\n            $writer.Write($xpui)\n            if ($add) { $add | foreach { $writer.Write([System.Environment]::NewLine + $PSItem ) } }\n            $writer.Close()  \n            if ($method -eq \"zip\") { $zip.Dispose() }\n        }\n        \"more\" {  \n            Add-Type -Assembly 'System.IO.Compression.FileSystem'\n            $xpui_spa_patch = Join-Path (Join-Path $spotifyDirectory 'Apps') 'xpui.spa'\n            $zip = [System.IO.Compression.ZipFile]::Open($xpui_spa_patch, 'update') \n            $zip.Entries | Where-Object { $_.FullName -like $name -and $_.FullName.Split('/') -notcontains 'spotx-helper' } | foreach { \n                $reader = New-Object System.IO.StreamReader($_.Open())\n                $xpui = $reader.ReadToEnd()\n                $reader.Close()\n                $xpui = Helper -paramname $helper \n                $writer = New-Object System.IO.StreamWriter($_.Open())\n                $writer.BaseStream.SetLength(0)\n                $writer.Write($xpui)\n                $writer.Close()\n            }\n            $zip.Dispose()\n        }\n        \"exe\" {\n            $ANSI = [Text.Encoding]::GetEncoding(1251)\n            $xpui = [IO.File]::ReadAllText($spotify_binary, $ANSI)\n            $xpui = Helper -paramname $helper\n            [IO.File]::WriteAllText($spotify_binary, $xpui, $ANSI)\n        }\n    }\n}\n\nfunction injection {\n    param(\n        [Alias(\"p\")]\n        [string]$ArchivePath,\n\n        [Alias(\"f\")]\n        [string]$FolderInArchive,\n\n        [Alias(\"n\")]\n        [string[]]$FileNames, \n\n        [Alias(\"c\")]\n        [string[]]$FileContents,\n\n        [Alias(\"i\")]\n        [string[]]$FilesToInject  # force only specific file/files to connect index.html otherwise all will be connected\n    )\n\n    $folderPathInArchive = \"$($FolderInArchive)/\"\n\n    Add-Type -AssemblyName System.IO.Compression.FileSystem\n    $archive = [System.IO.Compression.ZipFile]::Open($ArchivePath, 'Update')\n    \n    try {\n        for ($i = 0; $i -lt $FileNames.Length; $i++) {\n            $fileName = $FileNames[$i]\n            $fileContent = $FileContents[$i]\n\n            $entry = $archive.GetEntry($folderPathInArchive + $fileName)\n            if ($entry -eq $null) {\n                $stream = $archive.CreateEntry($folderPathInArchive + $fileName).Open()\n            }\n            else {\n                $stream = $entry.Open()\n            }\n\n            $writer = [System.IO.StreamWriter]::new($stream)\n            $writer.Write($fileContent)\n\n            $writer.Dispose()\n            $stream.Dispose()\n        }\n\n        $indexEntry = $archive.Entries | Where-Object { $_.FullName -eq \"index.html\" }\n        if ($indexEntry -ne $null) {\n            $indexStream = $indexEntry.Open()\n            $reader = [System.IO.StreamReader]::new($indexStream)\n            $indexContent = $reader.ReadToEnd()\n            $reader.Dispose()\n            $indexStream.Dispose()\n\n            $headTagIndex = $indexContent.IndexOf(\"</head>\")\n            $scriptTagIndex = $indexContent.IndexOf(\"<script\")\n\n            if ($headTagIndex -ge 0 -or $scriptTagIndex -ge 0) {\n                $filesToInject = if ($FilesToInject) { $FilesToInject } else { $FileNames }\n\n                foreach ($fileName in $filesToInject) {\n                    if ($fileName.EndsWith(\".js\")) {\n                        $modifiedIndexContent = $indexContent.Insert($scriptTagIndex, \"<script defer=`\"defer`\" src=`\"/$FolderInArchive/$fileName`\"></script>\")\n                        $indexContent = $modifiedIndexContent\n                    }\n                    elseif ($fileName.EndsWith(\".css\")) {\n                        $modifiedIndexContent = $indexContent.Insert($headTagIndex, \"<link href=`\"/$FolderInArchive/$fileName`\" rel=`\"stylesheet`\">\")\n                        $indexContent = $modifiedIndexContent\n                    }\n                }\n\n                $indexEntry.Delete()\n                $newIndexEntry = $archive.CreateEntry(\"index.html\").Open()\n                $indexWriter = [System.IO.StreamWriter]::new($newIndexEntry)\n                $indexWriter.Write($indexContent)\n                $indexWriter.Dispose()\n                $newIndexEntry.Dispose()\n\n            }\n            else {\n                Write-Warning \"<script or </head> tag was not found in the index.html file in the archive.\"\n            }\n        }\n        else {\n            Write-Warning \"index.html not found in xpui.spa\"\n        }\n    }\n    finally {\n        if ($archive -ne $null) {\n            $archive.Dispose()\n        }\n    }\n}\n\n\nfunction Extract-WebpackModules {\n    param(\n        [Parameter(Mandatory = $true)]\n        [string]$InputFile\n    )\n\n    $scriptStart = Get-Date\n    Write-Debug \"=== Script execution started ===\"\n    Write-Debug \"Input file: $InputFile\"\n\n    function Encode-UTF16LE {\n        param([byte[]]$Bytes)\n        $str = [System.Text.Encoding]::UTF8.GetString($Bytes)\n        [System.Text.Encoding]::Unicode.GetBytes($str)\n    }\n\n    $StartMarker = [System.Text.Encoding]::UTF8.GetBytes(\"var __webpack_modules__={\")\n    $EndMarker = [System.Text.Encoding]::UTF8.GetBytes(\"//# sourceMappingURL=xpui-modules.js.map\")\n\n    [byte[]]$fileContent = [System.IO.File]::ReadAllBytes($InputFile)\n\n    $isUTF16LE = $false\n    if ($fileContent.Length -ge 2 -and $fileContent[0] -eq 0xFF -and $fileContent[1] -eq 0xFE) {\n        $isUTF16LE = $true\n    }\n    elseif ($fileContent.Length -gt 100 -and $fileContent[1] -eq 0x00) {\n        $isUTF16LE = $true\n    }\n    if (-not $isUTF16LE) {\n        Write-Error \"File is not in UTF-16LE format: $InputFile\"\n        exit 1\n    }\n\n    $searchStartMarker = Encode-UTF16LE -Bytes $StartMarker\n    $searchEndMarker = Encode-UTF16LE -Bytes $EndMarker\n\n    function IndexOfBytes($haystack, $needle, [int]$startIndex = 0) {\n        if ($startIndex -lt 0) { $startIndex = 0 }\n        $haystackLength = $haystack.Length\n        $needleLength = $needle.Length\n        $searchLimit = $haystackLength - $needleLength\n        if ($searchLimit -lt $startIndex) { return -1 }\n        $firstNeedleByte = $needle[0]\n        for ($i = $startIndex; $i -le $searchLimit; $i++) {\n            if ($haystack[$i] -eq $firstNeedleByte) {\n                $found = $true\n                for ($j = 1; $j -lt $needleLength; $j++) {\n                    if ($haystack[$i + $j] -ne $needle[$j]) {\n                        $found = $false\n                        break\n                    }\n                }\n                if ($found) { return $i }\n            }\n        }\n        return -1\n    }\n\n    $startIdx = IndexOfBytes $fileContent $searchStartMarker 2\n    if ($startIdx -eq -1) {\n        Write-Error \"Start marker not found\"\n        exit 1\n    }\n    Write-Debug \"Start marker found at index $startIdx\"\n\n    $endMarkerSearchOffset = $startIdx + $searchStartMarker.Length\n    $endIdx = IndexOfBytes $fileContent $searchEndMarker $endMarkerSearchOffset\n    if ($endIdx -eq -1) {\n        Write-Error \"End marker not found after index $endMarkerSearchOffset\"\n        exit 1\n    }\n    Write-Debug \"End marker found at absolute index $endIdx\"\n\n    $endDataIdx = $endIdx + $searchEndMarker.Length\n    $length = $endDataIdx - $startIdx\n\n    Write-Debug \"Decoding data from UTF-16LE...\"\n    $decodedString = [System.Text.Encoding]::Unicode.GetString($fileContent, $startIdx, $length)\n\n    $scriptEnd = Get-Date\n    $duration = [math]::Round(($scriptEnd - $scriptStart).TotalSeconds, 1)\n    Write-Debug \"=== Execution completed in $duration seconds ===\"\n\n    return $decodedString\n}\n\nfunction Reset-Dll-Sign {\n    [CmdletBinding()]\n    param (\n        [string]$FilePath\n    )\n\n    $TargetStringText = \"Check failed: sep_pos != std::wstring::npos.\"\n\n    $Patch_x64 = \"B8 01 00 00 00 C3\"\n\n    $Patch_ARM64 = \"20 00 80 52 C0 03 5F D6\"\n\n    $Patch_x64 = [byte[]]($Patch_x64 -split ' ' | ForEach-Object { [Convert]::ToByte($_, 16) })\n    $Patch_ARM64 = [byte[]]($Patch_ARM64 -split ' ' | ForEach-Object { [Convert]::ToByte($_, 16) })\n\n    $csharpCode = @\"\nusing System;\nusing System.Collections.Generic;\n\npublic class ScannerCore {\n    public static int FindBytes(byte[] data, byte[] pattern) {\n        for (int i = 0; i < data.Length - pattern.Length; i++) {\n            bool match = true;\n            for (int j = 0; j < pattern.Length; j++) {\n                if (data[i + j] != pattern[j]) { match = false; break; }\n            }\n            if (match) return i;\n        }\n        return -1;\n    }\n\n    public static List<int> FindXref_ARM64(byte[] data, ulong stringRVA, ulong sectionRVA, uint sectionRawPtr, uint sectionSize) {\n        List<int> results = new List<int>();\n        for (uint i = 0; i < sectionSize; i += 4) {\n            uint fileOffset = sectionRawPtr + i;\n            if (fileOffset + 8 > data.Length) break;\n            uint inst1 = BitConverter.ToUInt32(data, (int)fileOffset);\n            \n            // ADRP\n            if ((inst1 & 0x9F000000) == 0x90000000) {\n                int rd = (int)(inst1 & 0x1F);\n                long immLo = (inst1 >> 29) & 3;\n                long immHi = (inst1 >> 5) & 0x7FFFF;\n                long imm = (immHi << 2) | immLo;\n                if ((imm & 0x100000) != 0) { imm |= unchecked((long)0xFFFFFFFFFFE00000); }\n                imm = imm << 12; \n                ulong pc = sectionRVA + i;\n                ulong pcPage = pc & 0xFFFFFFFFFFFFF000; \n                ulong page = (ulong)((long)pcPage + imm);\n\n                uint inst2 = BitConverter.ToUInt32(data, (int)fileOffset + 4);\n                // ADD\n                if ((inst2 & 0xFF800000) == 0x91000000) {\n                    int rn = (int)((inst2 >> 5) & 0x1F);\n                    if (rn == rd) {\n                        long imm12 = (inst2 >> 10) & 0xFFF;\n                        ulong target = page + (ulong)imm12;\n                        if (target == stringRVA) { results.Add((int)fileOffset); }\n                    }\n                }\n            }\n        }\n        return results;\n    }\n\n    public static int FindStart(byte[] data, int startOffset, bool isArm) {\n        int step = isArm ? 4 : 1;\n        if (isArm && (startOffset % 4 != 0)) { startOffset -= (startOffset % 4); }\n\n        for (int i = startOffset; i > 0; i -= step) {\n            if (isArm) {\n                if (i < 4) break;\n                uint currInst = BitConverter.ToUInt32(data, i);\n                // ARM64 Prologue: STP X29, X30, [SP, -imm]! -> FD 7B .. A9\n                if ((currInst & 0xFF00FFFF) == 0xA9007BFD) { return i; }\n            } else {\n                // x64: Look for at least 2 bytes of padding (CC or 90) followed by a valid function start\n                if (i >= 2) {\n                    if ((data[i-1] == 0xCC && data[i-2] == 0xCC) || (data[i-1] == 0x90 && data[i-2] == 0x90)) {\n                        if (data[i] != 0xCC && data[i] != 0x90) {\n                            // Check for common function start bytes:\n                            // 0x48 (REX.W), 0x40 (REX), 0x55 (push rbp), 0x53-0x57 (push reg)\n                            byte b = data[i];\n                            if (b == 0x48 || b == 0x40 || b == 0x55 || (b >= 0x53 && b <= 0x57)) {\n                                return i;\n                            }\n                        }\n                    }\n                }\n            }\n            if (startOffset - i > 20000) break; \n        }\n        return 0;\n    }\n}\n\"@\n\n    if (-not ([System.Management.Automation.PSTypeName]'ScannerCore').Type) {\n        Add-Type -TypeDefinition $csharpCode\n    }\n    \n    Write-Verbose \"Loading file: $FilePath\"\n    if (-not (Test-Path $FilePath)) { \n        Write-Warning \"File Spotify.dll not found\"\n        Stop-Script\n    }\n    $bytes = [System.IO.File]::ReadAllBytes($FilePath)\n\n    try {\n        $e_lfanew = [BitConverter]::ToInt32($bytes, 0x3C)\n        $Machine = [BitConverter]::ToUInt16($bytes, $e_lfanew + 4)\n        $IsArm64 = $false\n        $ArchName = \"Unknown\"\n        \n        if ($Machine -eq 0x8664) { $ArchName = \"x64\"; $IsArm64 = $false }\n        elseif ($Machine -eq 0xAA64) { $ArchName = \"ARM64\"; $IsArm64 = $true }\n        else { \n            Write-Warning \"Architecture not supported for patching Spotify.dll\"\n            Stop-Script\n        }\n\n        Write-Verbose \"Architecture: $ArchName\"\n\n        $NumberOfSections = [BitConverter]::ToUInt16($bytes, $e_lfanew + 0x06)\n        $SizeOfOptionalHeader = [BitConverter]::ToUInt16($bytes, $e_lfanew + 0x14)\n        $SectionTableStart = $e_lfanew + 0x18 + $SizeOfOptionalHeader\n        \n        $Sections = @(); $CodeSection = $null\n        for ($i = 0; $i -lt $NumberOfSections; $i++) {\n            $secEntry = $SectionTableStart + ($i * 40)\n            $VA = [BitConverter]::ToUInt32($bytes, $secEntry + 12)\n            $RawSize = [BitConverter]::ToUInt32($bytes, $secEntry + 16)\n            $RawPtr = [BitConverter]::ToUInt32($bytes, $secEntry + 20)\n            $Chars = [BitConverter]::ToUInt32($bytes, $secEntry + 36)\n            $SecObj = [PSCustomObject]@{ VA = $VA; RawPtr = $RawPtr; RawSize = $RawSize }\n            $Sections += $SecObj\n            if (($Chars -band 0x20) -ne 0 -and $CodeSection -eq $null) { $CodeSection = $SecObj }\n        }\n    }\n    catch { \n        Write-Warning \"PE Error in Spotify.dll\"\n        Stop-Script\n    }\n\n    function Get-RVA($FileOffset) {\n        foreach ($sec in $Sections) {\n            if ($FileOffset -ge $sec.RawPtr -and $FileOffset -lt ($sec.RawPtr + $sec.RawSize)) {\n                return ($FileOffset - $sec.RawPtr) + $sec.VA\n            }\n        }\n        return 0\n    }\n\n    Write-Verbose \"Searching for function...\"\n    $StringBytes = [System.Text.Encoding]::ASCII.GetBytes($TargetStringText)\n    $StringOffset = [ScannerCore]::FindBytes($bytes, $StringBytes)\n    if ($StringOffset -eq -1) { \n        Write-Warning \"String not found in Spotify.dll\"\n        Stop-Script\n    }\n    $StringRVA = Get-RVA $StringOffset\n\n    $PatchOffset = 0\n    if (-not $IsArm64) {\n        $RawStart = $CodeSection.RawPtr; $RawEnd = $RawStart + $CodeSection.RawSize\n        for ($i = $RawStart; $i -lt $RawEnd; $i++) {\n            if ($bytes[$i] -eq 0x48 -and $bytes[$i + 1] -eq 0x8D -and $bytes[$i + 2] -eq 0x15) {\n                $Rel = [BitConverter]::ToInt32($bytes, $i + 3)\n                $Target = (Get-RVA $i) + 7 + $Rel\n                if ($Target -eq $StringRVA) {\n                    $PatchOffset = [ScannerCore]::FindStart($bytes, $i, $false)\n                    if ($PatchOffset -gt 0) { break }\n                }\n            }\n        }\n    }\n    else {\n        $Results = [ScannerCore]::FindXref_ARM64($bytes, [uint64]$StringRVA, [uint64]$CodeSection.VA, [uint32]$CodeSection.RawPtr, [uint32]$CodeSection.RawSize)\n        if ($Results.Count -gt 0) {\n            $PatchOffset = [ScannerCore]::FindStart($bytes, $Results[0], $true)\n        }\n    }\n\n    if ($PatchOffset -eq 0) { \n        Write-Warning \"Function not found in Spotify.dll\"\n        Stop-Script\n    }\n\n    $BytesToWrite = if ($IsArm64) { $Patch_ARM64 } else { $Patch_x64 }\n\n    $CurrentBytes = @(); for ($i = 0; $i -lt $BytesToWrite.Length; $i++) { $CurrentBytes += $bytes[$PatchOffset + $i] }\n    $FoundHex = ($CurrentBytes | ForEach-Object { $_.ToString(\"X2\") }) -join \" \"\n    Write-Verbose \"Found (Offset: 0x$($PatchOffset.ToString(\"X\"))): $FoundHex\"\n\n    if ($CurrentBytes[0] -eq $BytesToWrite[0] -and $CurrentBytes[$BytesToWrite.Length - 1] -eq $BytesToWrite[$BytesToWrite.Length - 1]) {\n        Write-Warning \"File Spotify.dll already patched\"\n        return\n    }\n\n    Write-Verbose \"Applying patch...\"\n    for ($i = 0; $i -lt $BytesToWrite.Length; $i++) { $bytes[$PatchOffset + $i] = $BytesToWrite[$i] }\n\n    try {\n        [System.IO.File]::WriteAllBytes($FilePath, $bytes)\n        Write-Verbose \"Success\"\n    }\n    catch { \n        Write-Warning \"Write error in Spotify.dll $($_.Exception.Message)\" \n        Stop-Script\n    }\n}\n\nfunction Get-PEArchitectureOffsets {\n    param(\n        [byte[]]$bytes,\n        [int]$fileHeaderOffset\n    )\n    $machineType = [System.BitConverter]::ToUInt16($bytes, $fileHeaderOffset)\n    $result = @{ Architecture = $null; DataDirectoryOffset = 0 }\n    switch ($machineType) {\n        0x8664 { $result.Architecture = 'x64'; $result.DataDirectoryOffset = 112 }\n        0xAA64 { $result.Architecture = 'ARM64'; $result.DataDirectoryOffset = 112 }\n        0x014c { $result.Architecture = 'x86'; $result.DataDirectoryOffset = 96 }\n        default { $result.Architecture = 'Unknown'; $result.DataDirectoryOffset = $null }\n    }\n    $result.MachineType = $machineType\n    return $result\n}\n\nfunction Remove-Sign {\n    [CmdletBinding()]\n    param([string]$filePath)\n    try {\n        $bytes = [System.IO.File]::ReadAllBytes($filePath)\n        $peHeaderOffset = [System.BitConverter]::ToUInt32($bytes, 0x3C)\n        if ($bytes[$peHeaderOffset] -ne 0x50 -or $bytes[$peHeaderOffset + 1] -ne 0x45) {\n            Write-Warning \"File '$(Split-Path $filePath -Leaf)' is not a valid PE file.\"\n            return $false\n        }\n        $fileHeaderOffset = $peHeaderOffset + 4\n        $optionalHeaderOffset = $fileHeaderOffset + 20\n        $archInfo = Get-PEArchitectureOffsets -bytes $bytes -fileHeaderOffset $fileHeaderOffset\n        if ($archInfo.DataDirectoryOffset -eq $null) {\n            Write-Warning \"Unsupported architecture type ($($archInfo.MachineType.ToString('X'))) in file '$(Split-Path $filePath -Leaf)'.\"\n            return $false\n        }\n        $dataDirectoryOffsetWithinOptionalHeader = $archInfo.DataDirectoryOffset\n        $securityDirectoryIndex = 4\n        $certificateTableEntryOffset = $optionalHeaderOffset + $dataDirectoryOffsetWithinOptionalHeader + ($securityDirectoryIndex * 8)\n        if ($certificateTableEntryOffset + 8 -gt $bytes.Length) {\n            Write-Warning \"Could not find Data Directory in file '$(Split-Path $filePath -Leaf)'. Header is corrupted or has non-standard format.\"\n            return $false\n        }\n        $rva = [System.BitConverter]::ToUInt32($bytes, $certificateTableEntryOffset)\n        $size = [System.BitConverter]::ToUInt32($bytes, $certificateTableEntryOffset + 4)\n        if ($rva -eq 0 -and $size -eq 0) {\n            Write-Host \"Signature in file '$(Split-Path $filePath -Leaf)' is already absent.\" -ForegroundColor Yellow\n            return $true\n        }\n        for ($i = 0; $i -lt 8; $i++) {\n            $bytes[$certificateTableEntryOffset + $i] = 0\n        }\n        [System.IO.File]::WriteAllBytes($filePath, $bytes)\n        return $true\n    }\n    catch {\n        Write-Error \"Error processing file '$filePath': $_\"\n        return $false\n    }\n}\n\nfunction Remove-Signature-FromFiles {\n    [CmdletBinding()]\n    param([string[]]$fileNames)\n    foreach ($fileName in $fileNames) {\n        $fullPath = Join-Path -Path $spotifyDirectory -ChildPath $fileName\n        if (-not (Test-Path $fullPath)) {\n            Write-Error \"File not found: $fullPath\"\n            Stop-Script\n        }\n        try {\n            Write-Verbose \"Processing file: $fileName\"\n            if (Remove-Sign -filePath $fullPath) {\n                Write-Verbose \"  -> Signature entry successfully zeroed.\"\n            }\n        }\n        catch {\n            Write-Error \"Failed to process file '$fileName': $_\"\n            Stop-Script\n        }\n    }\n}\n\n\nfunction Update-ZipEntry {\n    [CmdletBinding()]\n    param (\n        [Parameter(Mandatory)]\n        [System.IO.Compression.ZipArchive]$archive,\n        [Parameter(Mandatory)]\n        [string]$entryName,\n        [string]$newEntryName = $null,\n        [string]$prepend = $null,\n        [scriptblock]$contentTransform = $null\n    )\n\n    $entry = $archive.GetEntry($entryName)\n    if ($entry) {\n        Write-Verbose \"Updating entry: $entryName\"\n        $streamReader = $null\n        $content = ''\n        try {\n            $streamReader = New-Object System.IO.StreamReader($entry.Open(), [System.Text.Encoding]::UTF8)\n            $content = $streamReader.ReadToEnd()\n        }\n        finally {\n            if ($null -ne $streamReader) {\n                $streamReader.Close()\n            }\n        }\n\n        $entry.Delete()\n\n        if ($prepend) { $content = \"$prepend`n$content\" }\n        if ($contentTransform) { $content = & $contentTransform $content }\n\n        $finalEntryName = if ($newEntryName) { $newEntryName } else { $entryName }\n        Write-Verbose \"Creating new entry: $finalEntryName\"\n\n        $newEntry = $archive.CreateEntry($finalEntryName)\n        $streamWriter = $null\n        try {\n            $streamWriter = New-Object System.IO.StreamWriter($newEntry.Open(), [System.Text.Encoding]::UTF8)\n            $streamWriter.Write($content)\n            $streamWriter.Flush()\n        }\n        finally {\n            if ($null -ne $streamWriter) {\n                $streamWriter.Close()\n            }\n        }\n        Write-Verbose \"Entry $finalEntryName updated successfully.\"\n    }\n    else {\n        Write-Warning \"Entry '$entryName' not found in archive.\"\n    }\n}\n\n\nWrite-Host ($lang).ModSpoti`n\n\nRemove-TempDirectory -Directory $tempDirectory \n\n$xpui_spa_patch = Join-Path (Join-Path $spotifyDirectory 'Apps') 'xpui.spa'\n$xpui_js_patch = Join-Path (Join-Path (Join-Path $spotifyDirectory 'Apps') 'xpui') 'xpui.js'\n$test_spa = Test-Path -Path $xpui_spa_patch\n$test_js = Test-Path -Path $xpui_js_patch\n\nif ($test_spa -and $test_js) {\n    Write-Host ($lang).Error -ForegroundColor Red\n    Write-Host ($lang).FileLocBroken\n    Stop-Script\n}\n\nif ($test_js) {\n    \n    do {\n        $ch = Read-Host -Prompt ($lang).Spicetify\n        Write-Host\n        if (!($ch -eq 'n' -or $ch -eq 'y')) { incorrectValue }\n    }\n    while ($ch -notmatch '^y$|^n$')\n\n    if ($ch -eq 'y') { \n        $Url = \"https://telegra.ph/SpotX-FAQ-09-19#Can-I-use-SpotX-and-Spicetify-together?\"\n        Start-Process $Url\n    }\n\n    Stop-Script\n}  \n\nif (!($test_js) -and !($test_spa)) { \n    Write-Host \"xpui.spa not found, reinstall Spotify\"\n    Stop-Script\n}\n\nif ($test_spa) {\n    \n    Add-Type -Assembly 'System.IO.Compression.FileSystem'\n    \n    # Check for the presence of xpui.js in the xpui.spa archive\n\n    $archive_spa = $null\n\n    try {\n        $archive_spa = [System.IO.Compression.ZipFile]::OpenRead($xpui_spa_patch)\n        $xpuiJsEntry = $archive_spa.GetEntry('xpui.js')\n        $xpuiSnapshotEntry = $archive_spa.GetEntry('xpui-snapshot.js')\n\n        if (($null -eq $xpuiJsEntry) -and ($null -ne $xpuiSnapshotEntry)) {\n        \n            $snapshot_x64 = Join-Path $spotifyDirectory 'v8_context_snapshot.bin'\n            $snapshot_arm64 = Join-Path $spotifyDirectory 'v8_context_snapshot.arm64.bin'\n\n            $v8_snapshot = switch ($true) {\n                { Test-Path $snapshot_x64 } { $snapshot_x64; break }\n                { Test-Path $snapshot_arm64 } { $snapshot_arm64; break }\n                default { $null }\n            }\n\n            if ($v8_snapshot) {\n                $modules = Extract-WebpackModules -InputFile $v8_snapshot\n\n                $archive_spa.Dispose()\n                $archive_spa = [System.IO.Compression.ZipFile]::Open($xpui_spa_patch, [System.IO.Compression.ZipArchiveMode]::Update)\n\n                Update-ZipEntry -archive $archive_spa -entryName 'xpui-snapshot.js' -prepend $modules -newEntryName 'xpui.js' -Verbose:$VerbosePreference\n            \n                Update-ZipEntry -archive $archive_spa -entryName 'xpui-snapshot.css' -newEntryName 'xpui.css' -Verbose:$VerbosePreference\n            \n                Update-ZipEntry -archive $archive_spa -entryName 'index.html' -contentTransform {\n                    param($c)\n                    $c = $c -replace 'xpui-snapshot.js', 'xpui.js'\n                    $c = $c -replace 'xpui-snapshot.css', 'xpui.css'\n                    return $c\n                } -Verbose:$VerbosePreference\n            }\n            \n        }\n    }\n    catch {\n        Write-Warning \"Error: $($_.Exception.Message)\"\n    }\n    finally {\n        if ($null -ne $archive_spa) {\n            $archive_spa.Dispose()\n        }\n        if (-not $v8_snapshot -and $null -eq $xpuiJsEntry) {\n            Write-Warning \"v8_context_snapshot file not found, cannot create xpui.js\"\n            Stop-Script\n        }\n    }\n\n    $bak_spa = Join-Path (Join-Path $spotifyDirectory 'Apps') 'xpui.bak'\n    $test_bak_spa = Test-Path -Path $bak_spa\n\n    # Make a backup copy of xpui.spa if it is original\n    $zip = [System.IO.Compression.ZipFile]::Open($xpui_spa_patch, 'update')\n    $entry = $zip.GetEntry('xpui.js')\n    $reader = New-Object System.IO.StreamReader($entry.Open())\n    $patched_by_spotx = $reader.ReadToEnd()\n    $reader.Close()\n\n\n    if ($offline -ge [version]'1.2.70.253') {\n        \n        $spotify_binary_bak = $dll_bak \n        $spotify_binary = $spotifyDll\n    }\n    else {\n        $spotify_binary_bak = $exe_bak\n        $spotify_binary = $spotifyExecutable\n    }\n\n    If ($patched_by_spotx -match 'patched by spotx') {\n        $zip.Dispose()    \n\n        if ($test_bak_spa) {\n            Remove-Item $xpui_spa_patch -Recurse -Force\n            Rename-Item $bak_spa $xpui_spa_patch\n\n            if (Test-Path -Path $spotify_binary_bak) {\n                Remove-Item $spotify_binary -Recurse -Force\n                Rename-Item $spotify_binary_bak $spotify_binary\n            }\n            if ($spotify_binary_bak -eq $dll_bak) {\n\n                if (Test-Path -Path $exe_bak) {\n                    Remove-Item $spotifyExecutable -Recurse -Force\n                    Rename-Item $exe_bak $spotifyExecutable\n                }\n                else {\n                    $binary_exe_bak = [System.IO.Path]::GetFileName($exe_bak)\n                    Write-Warning (\"Backup copy {0} not found. Please reinstall Spotify and run SpotX again\" -f $binary_exe_bak)\n                    Pause\n                    Exit\n                }\n\n                if (Test-Path -Path $chrome_elf_bak) {\n                    Remove-Item $chrome_elf -Recurse -Force\n                    Rename-Item $chrome_elf_bak $chrome_elf\n                }\n                else {\n                    $binary_chrome_elf_bak = [System.IO.Path]::GetFileName($chrome_elf_bak)\n                    Write-Warning (\"Backup copy {0} not found. Please reinstall Spotify and run SpotX again\" -f $binary_chrome_elf_bak)\n                    Pause\n                    Exit\n                }\n\n            }\n        }\n        else {\n            Write-Host ($lang).NoRestore`n\n            Pause\n            Exit\n        }\n\n    }\n    $zip.Dispose()\n    Copy-Item $xpui_spa_patch $bak_spa\n\n    if ($spotify_binary_bak -eq $dll_bak) {\n        Copy-Item $spotifyExecutable $exe_bak\n        Copy-Item $chrome_elf $chrome_elf_bak\n\n    }\n\n    # Remove all languages except En and Ru from xpui.spa\n    if ($ru) {\n        $null = [Reflection.Assembly]::LoadWithPartialName('System.IO.Compression')\n        $stream = New-Object IO.FileStream($xpui_spa_patch, [IO.FileMode]::Open)\n        $mode = [IO.Compression.ZipArchiveMode]::Update\n        $zip_xpui = New-Object IO.Compression.ZipArchive($stream, $mode)\n\n        ($zip_xpui.Entries | Where-Object { $_.FullName -match \"i18n\" -and $_.FullName -inotmatch \"(ru|en.json|longest)\" }) | foreach { $_.Delete() }\n\n        $zip_xpui.Dispose()\n        $stream.Close()\n        $stream.Dispose()\n    }\n\n    # Full screen mode activation and removing \"Upgrade to premium\" menu, upgrade button, disabling a playlist sponsor\n    if (!($premium)) {\n        extract -counts 'one' -method 'zip' -name 'xpui.js' -helper 'OffadsonFullscreen'\n    }\n\n    # Forced exp\n    extract -counts 'one' -method 'zip' -name 'xpui.js' -helper 'ForcedExp' -add $webjson.others.byspotx.add\n\n    # Hiding Ad-like sections or turn off podcasts from the homepage\n    if ($podcast_off -or $adsections_off -or $canvashome_off) {\n\n        $section = Get -Url (Get-Link -e \"/js-helper/sectionBlock.js\")\n        \n        if ($section -ne $null) {\n\n            $calltype = switch ($true) {\n                ($podcast_off -and $adsections_off -and $canvashome_off) { \"'all'\"; break }\n                ($podcast_off -and $adsections_off) { \"['podcast', 'section']\"; break }\n                ($podcast_off -and $canvashome_off) { \"['podcast', 'canvas']\"; break }\n                ($adsections_off -and $canvashome_off) { \"['section', 'canvas']\"; break }\n                $podcast_off { \"'podcast'\"; break }\n                $adsections_off { \"'section'\"; break }\n                $canvashome_off { \"'canvas'\"; break }\n                default { $null } \n            }\n\n            if (!($calltype -eq \"'canvas'\" -and [version]$offline -le [version]\"1.2.44.405\")) {\n                $section = $section -replace \"sectionBlock\\(data, ''\\)\", \"sectionBlock(data, $calltype)\"\n                injection -p $xpui_spa_patch -f \"spotx-helper\" -n \"sectionBlock.js\" -c $section\n            }\n        }\n\n    }\n\t\n    # goofy History\n    if ($urlform_goofy -and $idbox_goofy) {\n\n        $goofy = Get -Url (Get-Link -e \"/js-helper/goofyHistory.js\")\n        \n        if ($goofy -ne $null) {\n\n            injection -p $xpui_spa_patch -f \"spotx-helper\" -n \"goofyHistory.js\" -c $goofy\n        }\n    }\n\n    # Static color for lyrics\n    if ($lyrics_stat) {\n        $rulesContent = Get -Url (Get-Link -e \"/css-helper/lyrics-color/rules.css\")\n        $colorsContent = Get -Url (Get-Link -e \"/css-helper/lyrics-color/colors.css\")\n\n        $colorsContent = $colorsContent -replace '{{past}}', \"$($webjson.others.themelyrics.theme.$lyrics_stat.pasttext)\"\n        $colorsContent = $colorsContent -replace '{{current}}', \"$($webjson.others.themelyrics.theme.$lyrics_stat.current)\"\n        $colorsContent = $colorsContent -replace '{{next}}', \"$($webjson.others.themelyrics.theme.$lyrics_stat.next)\"\n        $colorsContent = $colorsContent -replace '{{hover}}', \"$($webjson.others.themelyrics.theme.$lyrics_stat.hover)\"\n        $colorsContent = $colorsContent -replace '{{background}}', \"$($webjson.others.themelyrics.theme.$lyrics_stat.background)\"\n        $colorsContent = $colorsContent -replace '{{musixmatch}}', \"$($webjson.others.themelyrics.theme.$lyrics_stat.maxmatch)\"\n\n        injection -p $xpui_spa_patch -f \"spotx-helper/lyrics-color\" -n @(\"rules.css\", \"colors.css\") -c @($rulesContent, $colorsContent) -i \"rules.css\"\n\n    }\n    extract -counts 'one' -method 'zip' -name 'xpui.js' -helper 'VariousofXpui-js'\n    \n    if ([version]$offline -ge [version]\"1.1.85.884\" -and [version]$offline -le [version]\"1.2.57.463\") {\n        \n        if ([version]$offline -ge [version]\"1.2.45.454\") { $typefile = \"xpui.js\" }\n\n        else { $typefile = \"xpui-routes-search.js\" }\n\n        extract -counts 'one' -method 'zip' -name $typefile -helper \"Fixjs\"\n    }\n    \n\n    if ($devtools -and [version]$offline -ge [version]\"1.2.35.663\") {\n        extract -counts 'one' -method 'zip' -name 'xpui-routes-desktop-settings.js' -helper 'Dev' \n    }\n\n    # Hide Collaborators icon\n    if (!($hide_col_icon_off) -and !($exp_spotify)) {\n        extract -counts 'one' -method 'zip' -name 'xpui-routes-playlist.js' -helper 'Collaborators'\n    }\n\n    # Add discriptions (xpui-desktop-modals.js)\n    extract -counts 'one' -method 'zip' -name 'xpui-desktop-modals.js' -helper 'Discriptions'\n\n    # Disable Sentry \n    if ( [version]$offline -le [version]\"1.2.56.502\" ) {  \n        $fileName = 'vendor~xpui.js'\n\n    }\n    else { $fileName = 'xpui.js' }\n\n    extract -counts 'one' -method 'zip' -name $fileName -helper 'DisableSentry'\n\n    # Minification of all *.js\n    extract -counts 'more' -name '*.js' -helper 'MinJs'\n\n    # xpui.css\n    if (!($premium)) {\n        # Hide download block\n        if ([version]$offline -ge [version]\"1.2.30.1135\") {\n            $css += $webjson.others.downloadquality.add\n        }\n        # Hide download icon on different pages\n        $css += $webjson.others.downloadicon.add\n        # Hide submenu item \"download\"\n        $css += $webjson.others.submenudownload.add\n        # Hide very high quality streaming\n        if ([version]$offline -le [version]\"1.2.29.605\") {\n            $css += $webjson.others.veryhighstream.add\n        }\n    }\n    # block subfeeds\n    if ($calltype -match \"all\" -or $calltype -match \"podcast\") {\n        $css += $webjson.others.block_subfeeds.add\n    }\n    # scrollbar indent fixes\n    $css += $webjson.others.'fix-scrollbar'.add\n\n    if ($null -ne $css ) { extract -counts 'one' -method 'zip' -name 'xpui.css' -add $css }\n    \n    # Old UI fix\n    $contents = \"fix-old-theme\"\n    extract -counts 'one' -method 'zip' -name 'xpui.css' -helper \"FixCss\"\n\n    # Remove RTL and minification of all *.css\n    extract -counts 'more' -name '*.css' -helper 'Cssmin'\n    \n    # licenses.html minification\n\n    extract -counts 'one' -method 'zip' -name 'licenses.html' -helper 'HtmlLicMin'\n    # blank.html minification\n    extract -counts 'one' -method 'zip' -name 'blank.html' -helper 'HtmlBlank'\n    \n    if ($ru) {\n        # Additional translation of the ru.json file\n        extract -counts 'more' -name '*ru.json' -helper 'RuTranslate'\n    }\n    # Minification of all *.json\n    extract -counts 'more' -name '*.json' -helper 'MinJson'\n}\n\n# Delete all files except \"en\" and \"ru\"\nif ($ru) {\n    $patch_lang = \"$spotifyDirectory\\locales\"\n    Remove-Item $patch_lang -Exclude *en*, *ru* -Recurse\n}\n\n# Create a desktop shortcut\n$ErrorActionPreference = 'SilentlyContinue' \n\nif (!($no_shortcut)) {\n\n    $desktop_folder = DesktopFolder\n\n    If (!(Test-Path $desktop_folder\\Spotify.lnk)) {\n        $source = $spotifyExecutable\n        $target = \"$desktop_folder\\Spotify.lnk\"\n        $WorkingDir = $spotifyDirectory\n        $WshShell = New-Object -comObject WScript.Shell\n        $Shortcut = $WshShell.CreateShortcut($target)\n        $Shortcut.WorkingDirectory = $WorkingDir\n        $Shortcut.TargetPath = $source\n        $Shortcut.Save()      \n    }\n}\n\n# Create shortcut in start menu\nIf (!(Test-Path $start_menu)) {\n    $source = $spotifyExecutable\n    $target = $start_menu\n    $WorkingDir = $spotifyDirectory\n    $WshShell = New-Object -comObject WScript.Shell\n    $Shortcut = $WshShell.CreateShortcut($target)\n    $Shortcut.WorkingDirectory = $WorkingDir\n    $Shortcut.TargetPath = $source\n    $Shortcut.Save()      \n}\n\n$ANSI = [Text.Encoding]::GetEncoding(1251)\n$old = [IO.File]::ReadAllText($spotify_binary, $ANSI)\n\n$regex1 = $old -notmatch $webjson.others.binary.block_update.add\n$regex2 = $old -notmatch $webjson.others.binary.block_slots.add\n$regex3 = $old -notmatch $webjson.others.binary.block_slots_2.add\n$regex4 = $old -notmatch $webjson.others.binary.block_slots_3.add\n$regex5 = $old -notmatch $(\n    if ([version]$offline -gt [version]'1.2.73.474') { $webjson.others.binary.block_gabo2.add }\n    else { $webjson.others.binary.block_gabo.add }\n)\n\nif ($regex1 -and $regex2 -and $regex3 -and $regex4 -and $regex5) {\n\n    if (Test-Path -LiteralPath $spotify_binary_bak) { \n        Remove-Item $spotify_binary_bak -Recurse -Force\n        Start-Sleep -Milliseconds 150\n    }\n    copy-Item $spotify_binary $spotify_binary_bak\n}\n\nif (-not (Test-Path -LiteralPath $spotify_binary_bak)) {\n    $name_binary = [System.IO.Path]::GetFileName($spotify_binary_bak)\n    Write-Warning (\"Backup copy {0} not found. Please reinstall Spotify and run SpotX again\" -f $name_binary)\n    Pause\n    Exit\n}\n\n# disable signature verification\nif ($spotify_binary_bak -eq $dll_bak) {\n    Reset-Dll-Sign -FilePath $spotifyDll\n\n    $files = @(\"Spotify.dll\", \"Spotify.exe\", \"chrome_elf.dll\")\n    Remove-Signature-FromFiles $files\n}\n\n# binary patch\nextract -counts 'exe' -helper 'Binary'\n\n# fix login for old versions\nif ([version]$offline -ge [version]\"1.1.87.612\" -and [version]$offline -le [version]\"1.2.5.1006\") {\n    $login_spa = Join-Path (Join-Path $spotifyDirectory 'Apps') 'login.spa'\n    Get -Url (Get-Link -e \"/res/login.spa\") -OutputPath $login_spa\n}\n\n# Disable Startup client\nif ($DisableStartup) {\n    $prefsPath = Join-Path $spotifyDirectory 'prefs'\n    $keyPath = \"HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\Run\"\n    $keyName = \"Spotify\"\n\n    # delete key in registry\n    if (Get-ItemProperty -Path $keyPath -Name $keyName -ErrorAction SilentlyContinue) {\n        Remove-ItemProperty -Path $keyPath -Name $keyName -Force\n    } \n\n    # create new prefs\n    if (-not (Test-Path $prefsPath)) {\n        $content = @\"\napp.autostart-configured=true\napp.autostart-mode=\"off\"\n\"@\n        [System.IO.File]::WriteAllLines($prefsPath, $content, [System.Text.UTF8Encoding]::new($false))\n    }\n    \n    # update prefs\n    else {\n        $content = [System.IO.File]::ReadAllText($prefsPath)\n        if (-not $content.EndsWith(\"`n\")) {\n            $content += \"`n\"\n        }\n        $content += 'app.autostart-mode=\"off\"'\n        [System.IO.File]::WriteAllText($prefsPath, $content, [System.Text.UTF8Encoding]::new($false))\n    }\n\n}\n\n# Start Spotify\nif ($start_spoti) { Start-Process -WorkingDirectory $spotifyDirectory -FilePath $spotifyExecutable }\n\nWrite-Host ($lang).InstallComplete`n -ForegroundColor Green\n"
  },
  {
    "path": "scripts/Install_Auto.bat",
    "content": "@echo off\n\n:: Line for changing spotx parameters, each parameter should be separated by a space\nset param=-confirm_uninstall_ms_spoti -confirm_spoti_recomended_over -podcasts_off -block_update_on -start_spoti -new_theme -adsections_off -lyrics_stat spotify\n\nset url='https://raw.githubusercontent.com/SpotX-Official/SpotX/refs/heads/main/run.ps1'\nset url2='https://spotx-official.github.io/SpotX/run.ps1'\nset tls=[Net.ServicePointManager]::SecurityProtocol = [Net.ServicePointManager]::SecurityProtocol -bor [Net.SecurityProtocolType]::Tls12;\n\n%SYSTEMROOT%\\System32\\WindowsPowerShell\\v1.0\\powershell.exe ^\n-Command %tls% $p='%param%'; \"\"\" & { $(try { iwr -useb %url% } catch { $p+= ' -m'; iwr -useb %url2% })} $p \"\"\"\" | iex\n\npause\nexit /b"
  },
  {
    "path": "scripts/Install_Prem.bat",
    "content": "@echo off\n\n:: Line for changing spotx parameters, each parameter should be separated by a space\nset param=-premium -new_theme\n\nset url='https://raw.githubusercontent.com/SpotX-Official/SpotX/refs/heads/main/run.ps1'\nset url2='https://spotx-official.github.io/SpotX/run.ps1'\nset tls=[Net.ServicePointManager]::SecurityProtocol = [Net.ServicePointManager]::SecurityProtocol -bor [Net.SecurityProtocolType]::Tls12;\n\n%SYSTEMROOT%\\System32\\WindowsPowerShell\\v1.0\\powershell.exe ^\n-Command %tls% $p='%param%'; \"\"\" & { $(try { iwr -useb %url% } catch { $p+= ' -m'; iwr -useb %url2% })} $p \"\"\"\" | iex\n\npause\nexit /b"
  },
  {
    "path": "scripts/installer-lang/be.ps1",
    "content": "[PSCustomObject]@{\n    Welcome         = \"\n╔════════════════════════════════════════╗\n║ Сардэчна запрашаем у SpotX для Windows ║\n╚════════════════════════════════════════╝\"\n    Incorrect       = \"Вой, няправільнае значэнне,\"\n    Incorrect2      = \"увядзіце зноў праз \"\n    Download        = \"Памылка спампоўкі\"\n    Download2       = \"Будзе перазапыт праз 5 секунд...\"\n    Download3       = \"Памылка зноў\"\n    Download4       = \"Праверце свае налады сеткі і запусціце ўстаноўку зноў\"\n    Download5       = \"Спампоўка Spotify\"\n    StopScript      = \"Сцэнарый спынены\"\n    MsSpoti         = \"Выяўлена версія Spotify з Microsoft Store, якая не падтрымліваецца\"\n    MsSpoti2        = \"Выдаліць выданне Spotify Microsoft Store? [Y/N]\"\n    MsSpoti3        = \"Аўтаматычнае выдаленне Spotify MS...\"\n    MsSpoti4        = \"Выдаленне Spotify MS...\"\n    Prem            = \"Мадыфікацыя для прэміум-акаўнта...\"\n    OldV            = \"Знойдзена састарэлая версія Spotify\"\n    OldV2           = \"Ваша версія Spotify ({0}) састарэла, бягучая апошняя версія — {1}\"\n    OldV3           = \"Хочаце абнавіць? [Y/N]\"\n    AutoUpd         = \"Аўтаматычнае абнаўленне да рэкамендаванай версіі\"\n    DelOrOver       = \"Выдаліць бягучую версію ({0}) або ўсталяваць паверх яе? Y [Выдаліць] / N [Усталяваць паверх]\"\n    DelOld          = \"Выдаленне старой версіі Spotify...\"\n    NewV            = \"Знойдзена непадтрымоўваная версія Spotify\"\n    NewV2           = \"Ваша версія Spotify ({0}) не была пратэставана. Стабільная версія для SpotX — {1}\"\n    NewV3           = \"Працягнуць з {0} (могуць узнікнуць памылкі)? [Y/N]\"\n    Recom           = \"Усталяваць апошнюю версію {0}? [Y/N]\"\n    DelNew          = \"Выдаленне неправеранай версіі Spotify...\"\n    DownSpoti       = \"Спампоўка і ўсталёўка Spotify\"\n    DownSpoti2      = \"Калі ласка, пачакайце...\"\n    PodcatsOff      = \"Падкасты выкл\"\n    PodcastsOn      = \"Падкасты ўкл\"\n    PodcatsSelect   = \"Схаваць падкасты, шоу і аўдыякнігі на галоўнай старонцы? [Y/N]\"\n    DowngradeNote   = \"Рэкамендуецца заблакаваць, таму што Spotify быў паніжаны да папярэдняй версіі\"\n    UpdBlock        = \"Абнаўленні Spotify заблакаваныя\"\n    UpdUnblock      = \"Абнаўленні Spotify не заблакаваныя\"\n    UpdSelect       = \"Заблакаваць абнаўленні Spotify? [Y/N]\"\n    ModSpoti        = \"Патчынг Spotify...\"\n    Error           = \"Памылка\"\n    FileLocBroken   = \"Месцазнаходжанне файлаў Spotify пашкоджана, выдаліце кліент Spotify і запусціце сцэнарый зноў\"\n    Spicetify       = \"Spicetify выяўлены, ён павінен быць усталяваны пасля SpotX, адкрыць рэкамендаваныя дзеянні ў FAQ? [Y/N]\"\n    NoRestore       = \"SpotX ужо ўсталяваны, xpui.bak не знойдзены. Калі ласка, выдаліце кліент Spotify і запусціце Install.bat зноў\"\n    InstallComplete = \"Усталёўка завершана\"\n    HostInfo        = \"Непажаданыя URL-адрасы знойдзены ў файле hosts\"\n    HostBak         = \"Рэзервовае капіраванне hosts.bak...\"\n    HostDel         = \"Спроба выдаліць непажаданыя URL-адрасы з арыгінальнага файла hosts...\"\n    HostError       = \"Нешта пайшло не так пры рэдагаванні файла hosts, адрэдагуйце яго ўручную або запусціце сцэнарый ад імя адміністратара\"\n    PressAnyKey     = \"Націсніце любую клавішу, каб выйсці...\"\n}\n"
  },
  {
    "path": "scripts/installer-lang/bn.ps1",
    "content": "[PSCustomObject]@{\n    Welcome         = \"\n╔═══════════════════════════════════╗\n║ উইন্ডোজ স্পটএক্স এ আপনাকে স্বাগতম ║\n╚═══════════════════════════════════╝\"\n    Incorrect       = \"দুঃখিত! একটি ভুল সংকেত,\"\n    Incorrect2      = \"পুনরায় এর মাধ্যমে প্রবেশ করুন\"\n    Download        = \"ডাউনলোড করতে সমস্যা হচ্ছে\"\n    Download2       = \"৫ সেকেন্ডের মধ্যে আবার চেষ্টা করা হবে...\"\n    Download3       = \"আবার সমস্যা হচ্ছে\"\n    Download4       = \"আপনার নেটওয়ার্ক সেটিংস চেক করুন এবং পুনরায় ইনস্টলেশন শুরু করুন\"\n    Download5       = \"স্পটিফাই ডাউনলোড হচ্ছে\"\n    StopScript      = \"স্ক্রিপ্ট থেমে গেছে\"\n    MsSpoti         = \"স্পটিফাই এর মাইক্রোসফট স্টোর সংস্করণ সনাক্ত করা হয়েছে যেটি সমর্থিত নয়\"\n    MsSpoti2        = \"স্পটিফাই এর উইন্ডোজ স্টোর সংস্করণ আনইন্সটল করুন [Y/N]\"\n    MsSpoti3        = \"স্বয়ংক্রিয়ভাবে স্পটিফাই এর মাইক্রোসফট স্টোর সংস্করণ আনইন্সটল করা হচ্ছে...\"\n    MsSpoti4        = \"স্পটিফাই এর মাইক্রোসফট স্টোর সংস্করণ আনইন্সটল করা হচ্ছে...\"\n    Prem            = \"প্রিমিয়াম একাউন্ট এর জন্য পরিবর্তন...\"\n    OldV            = \"স্পটিফাই এর একটি অসমর্থিত সংস্করণ পাওয়া গিয়েছে\"\n    OldV2           = \"আপনার স্পটিফাই এর {0} সংস্করণটি অসমর্থিত, আপনাকে {1} সংস্করণে হালনাগাদের জন্য পরামর্শ দেয়া হলো\"\n    OldV3           = \"হালনাগাদ করতে চান ? [Y/N]\"\n    AutoUpd         = \"সুপারিশকৃত সংস্করণে স্বয়ংক্রিয় হালনাগাদকরণ\"\n    DelOrOver       = \"আপনি কি বর্তমানে ইনস্টল থাকা {0} সংস্করণটি আনইনস্টল করতে চান নাকি আগেরটির সাথেই ইনস্টল করবেন? Y [আনইন্সটল করুন] / N [আগেরটির সাথেই ইনস্টল করুন]\"\n    DelOld          = \"পুরাতন স্পটিফাই আনইন্সটল করা হচ্ছে...\"\n    NewV            = \"স্পটিফাই এর একটি অসমর্থিত সংস্করণ পাওয়া গিয়েছে\"\n    NewV2           = \"আপনার স্পটিফাই এর {0} সংস্করণটি এখনো পরীক্ষা করা হয়নি, বর্তমানে এটি স্থায়ী {1} সংস্করণ\"\n    NewV3           = \"আপনি কি {0} সংস্করণের সাথে চালিয়ে যেতে চান (এটিতে সমস্যা থাকতে পারে) ? [Y/N]\"\n    Recom           = \"আপনি কি সুপারিশকৃত {0} সংস্করণটি ইনস্টল করতে চান ? [Y/N]\"\n    DelNew          = \"অপরীক্ষিত স্পটিফাই আনইন্সটল করা হচ্ছে...\"\n    DownSpoti       = \"স্পটিফাই ডাউনলোড এবং ইনস্টল করা হচ্ছে\"\n    DownSpoti2      = \"দয়া করে অপেক্ষা করুন...\"\n    PodcatsOff      = \"পডকাস্ট বন্ধ রাখুন\"\n    PodcastsOn      = \"পডকাস্ট চালু রাখুন\"\n    PodcatsSelect   = \"আপনি কি মূল পেইজ থেকে পডকাস্ট, এপিসোড এবং অডিও বই সরিয়ে রাখতে চান? [Y/N]\"\n    DowngradeNote   = \"ব্লক করার সুপারিশ করা হচ্ছে যেহেতু স্পটিফাই ডাউনগ্রেড করা হয়েছে\"\n    UpdBlock        = \"স্পটিফাই হালনাগাদ ব্লক করা হয়েছে\"\n    UpdUnblock      = \"স্পটিফাই হালনাগাদ ব্লক করা হয় নি\"\n    UpdSelect       = \"স্পটিফাই হালনাগাদ বন্ধ রাখতে চান? [Y/N]\"\n    ModSpoti        = \"স্পটিফাই প্যাচ করা হচ্ছে...\"\n    Error           = \"সমস্যা হয়েছে\"\n    FileLocBroken   = \"স্পটিফাই ফাইলের লোকেশনটি খুঁজে পাওয়া যাচ্ছে না, ব্যবহারকারী সংস্করণটি আনইনস্টল করুন এবং পুনরায় স্ক্রিপ্ট চালু করুন\"\n    Spicetify       = \"Spicetify detected, it must be installed after SpotX, open recommended actions in FAQ ? [Y/N]\"\n    NoRestore       = \"স্পটিফাই ইতোমধ্যে ইনস্টল করা আছে, xpui.bak ফাইলটি খুঁজে পাওয়া যায় নি। `nদয়া করে স্পটিফাই এর ব্যবহারকারী সংস্করণটি আনইন্সটল করুন এবং Install.bat ফাইলটি আবার রান করুন\"\n    InstallComplete = \"ইনস্টলেশন সম্পন্ন হয়েছে\"\n    HostInfo        = \"হোস্ট ফাইলে কিছু অপ্রত্যাশিত ইউআরএল পাওয়া গিয়েছে\"\n    HostBak         = \"hosts.bak ফাইলটি ব্যাকআপ রাখা হয়েছে...\"\n    HostDel         = \"অরিজিনাল হোস্ট ফাইল থেকে অপ্রত্যাশিত ইউআরএল মুছে ফেলার চেষ্টা করা হচ্ছে...\"\n    HostError       = \"হোস্ট ফাইল মুছে ফেলার সময় কিছু একটা সমস্যা হয়েছে, এটি ম্যানুয়ালি সম্পাদন করুন অথবা এডমিনিস্ট্রেটর হিসেবে স্ক্রিপ্টটি রান করুন\"\n    PressAnyKey     = \"Press any key to exit...\"\n}\n"
  },
  {
    "path": "scripts/installer-lang/cs.ps1",
    "content": "[PSCustomObject]@{\n    Welcome         = \"\n╔═════════════════════════════╗\n║ Vítejte v SpotX pro Windows ║\n╚═════════════════════════════╝\"\n    Incorrect       = \"Ups, nesprávná hodnota,\"\n    Incorrect2      = \"zadejte znovu přes \"\n    Download        = \"Chyba při stahování\"\n    Download2       = \"Zkusím znovu za 5 sekund...\"\n    Download3       = \"Chyba znovu\"\n    Download4       = \"Podívejte se na nastavení sítě a spusťte instalaci znovu\"\n    Download5       = \"Stahuji Spotify\"\n    StopScript      = \"Skript je zastaven\"\n    MsSpoti         = \"Byla detekována verze Spotify z Microsoft Store, tato verze není podporována\"\n    MsSpoti2        = \"Odinštalujte verzi Spotify z Microsoft Store [Y/N]\"\n    MsSpoti3        = \"Automaticky odinstalovávám Spotify z Microsoft Store...\"\n    MsSpoti4        = \"Odinštalovávám Spotify z Microsoft Store...\"\n    Prem            = \"Úprava kvůli prémiovému účtu...\"\n    OldV            = \"Nalezena stará verze Spotify\"\n    OldV2           = \"Vaše Spotify {0} verze je stará, doporučuje se aktualizovat na verzi {1}\"\n    OldV3           = \"Chcete aktualizovat? [Y/N]\"\n    AutoUpd         = \"Automatická aktualizace na doporučenou verzi\"\n    DelOrOver       = \"Chcete odinstalovat současnou verzi {0} nebo nainstalovat novější na současnou (zůstanou některé soubory)? Y [Odinštalovat] / N [Nainstalovat novější na současnou]\"\n    DelOld          = \"Odinštalovávám staré Spotify...\"\n    NewV            = \"Byla nalezena nepodporovaná verze Spotify\"\n    NewV2           = \"Vaše Spotify {0} verze zatím nebyla testována, stabilní je nyní {1} verze\"\n    NewV3           = \"Chcete pokračovat s {0} verzí (mohou nastat chyby)? [Y/N]\"\n    Recom           = \"Chcete nainstalovat doporučenou {0} verzi? [Y/N]\"\n    DelNew          = \"Odinštalovávám netestovanou verzi Spotify...\"\n    DownSpoti       = \"Stahuji a instaluji Spotify\"\n    DownSpoti2      = \"Prosím čekejte...\"\n    PodcatsOff      = \"Vypněte podcasty\"\n    PodcastsOn      = \"Zapněte podcasty/Nechte zapnuté\"\n    PodcatsSelect   = \"Chcete vypnout podcasty, epizody a audioknihy z hlavní stránky? [Y/N]\"\n    DowngradeNote   = \"Doporučuje se blokování, protože byla nainstalována starší verze Spotify\"\n    UpdBlock        = \"Aktualizace Spotify blokovány\"\n    UpdUnblock      = \"Aktualizace Spotify nejsou blokovány\"\n    UpdSelect       = \"Chcete blokovat aktualizace Spotify? [Y/N]\"\n    ModSpoti        = \"Upravuji Spotify...\"\n    Error           = \"Chyba\"\n    FileLocBroken   = \"Umístění souborů Spotify je chybné, odinstalujte klienta Spotify a spusťte skript znovu\"\n    Spicetify       = \"Spicetify nalezeno, musí být nainstalováno po SpotX, otevřít doporučené akce ve FAQ? [Y/N]\"\n    NoRestore       = \"SpotX byl již nainstalován, xpui.bak se nenašlo. `nProsím odinstalujte klienta Spotify a spusťte Install.bat znovu\"\n    InstallComplete = \"Instalace dokončena\"\n    HostInfo        = \"Nechtěné URL adresy nalezeny v souboru hosts\"\n    HostBak         = \"Zálohuji soubor hosts.bak...\"\n    HostDel         = \"Pokouším se odebrat nechtěné URL adresy z originálního souboru hosts...\"\n    HostError       = \"Něco se nepovedlo s úpravou souboru hosts, upravte ho manuálně nebo spusťte skript jako\"\n    PressAnyKey     = \"Stiskněte libovolnou klávesu pro ukončení...\"\n}\n"
  },
  {
    "path": "scripts/installer-lang/de.ps1",
    "content": "[PSCustomObject]@{\r\n    Welcome         = \"\r\n╔══════════════════════════════════╗\r\n║ Willkommen bei SpotX für Windows ║\r\n╚══════════════════════════════════╝\"\r\n    Incorrect       = \"Hoppla, ein falscher Wert,\"\r\n    Incorrect2      = \"bitte geben Sie einen neuen Wert ein in \"\r\n    Download        = \"Fehler beim Download\"\r\n    Download2       = \"Wird in 5 Sekunden erneut angefordert...\"\r\n    Download3       = \"Erneuter Fehler\"\r\n    Download4       = \"Überprüfen Sie Ihre Netzwerkeinstellungen und starten Sie die Installation erneut\"\r\n    Download5       = \"Lade Spotify herunter\"\r\n    StopScript      = \"Skript wurde gestoppt\"\r\n    MsSpoti         = \"Die Microsoft Store Version von Spotify wurde gefunden, jedoch wird sie nicht unterstützt\"\r\n    MsSpoti2        = \"Die Microsoft Store Version von Spotify deinstallieren? [Y/N]\"\r\n    MsSpoti3        = \"Deinstalliere die MS Version von Spotify automatisch...\"\r\n    MsSpoti4        = \"Deinstalliere die MS Version von Spotify...\"\r\n    Prem            = \"Modifikation für Premium Accounts...\"\r\n    OldV            = \"Veraltete Version von Spotify gefunden\"\r\n    OldV2           = \"Ihre Spotify {0} Version ist veraltet, es wird empfohlen, Spotify auf {1} zu aktualisieren\"\r\n    OldV3           = \"Möchten Sie Spotify aktualisieren? [Y/N]\"\r\n    AutoUpd         = \"Automatisches Aktualisieren zur empfohlenen Version\"\r\n    DelOrOver       = \"Möchten Sie die bestehenden Version von Spotify {0} deinstallieren oder möchten Sie sie überschreiben? Y [Deinstallieren] / N [Überschreiben]\"\r\n    DelOld          = \"Deinstalliere das alte Spotify...\"\r\n    NewV            = \"Nicht unterstützte Version von Spotify gefunden\"\r\n    NewV2           = \"Ihre Spotify {0} Version wurde noch nicht getestet, im Moment ist {1} die stabile Version\"\r\n    NewV3           = \"Möchten Sie mit der {0} Version fortfahren? (Fehler können auftreten) [Y/N]\"\r\n    Recom           = \"Möchten Sie die empfohlene Version von Spotify installieren? [Y/N]\"\r\n    DelNew          = \"Deinstalliere eine ungetestete Version von Spotify...\"\r\n    DownSpoti       = \"Installiere Spotify\"\r\n    DownSpoti2      = \"Bitte warten...\"\r\n    PodcatsOff      = \"Podcasts Aus\"\r\n    PodcastsOn      = \"Podcasts An\"\r\n    PodcatsSelect   = \"Möchten Sie Podcasts, Episoden und Hörbücher auf der Hauptseite deaktivieren? [Y/N]\"\r\n    DowngradeNote   = \"Es wird empfohlen, Updates zu blockieren, da Spotify herabgestuft wurde\"\r\n    UpdBlock        = \"Spotify-Updates blockiert\"\r\n    UpdUnblock      = \"Spotify-Updates sind nicht blockiert\"\r\n    UpdSelect       = \"Möchten Sie Spotify-Updates blockieren? [Y/N]\"\r\n    ModSpoti        = \"Patche Spotify...\"\r\n    Error           = \"Fehler\"\r\n    FileLocBroken   = \"Speicherort von Spotify ist fehlerhaft, deinstallieren Sie Spotify und führen Sie das Skript erneut aus\"\r\n    Spicetify       = \"Spicetify detected, it must be installed after SpotX, open recommended actions in FAQ ? [Y/N]\"\r\n    NoRestore       = \"SpotX wurde schon installiert, xpui.bak wurde aber nicht gefunden. `nBitte deinstallieren Sie Spotify und starten Sie Install.bat nochmal\"\r\n    InstallComplete = \"Installation fertiggestellt\"\r\n    HostInfo        = \"Unerwünschte URLs, die in der hosts-Datei gefunden wurden\"\r\n    HostBak         = \"Sichere hosts.bak...\"\r\n    HostDel         = \"Versuche, unerwünschte URLs von der originalen hosts-Datei zu entfernen...\"\r\n    HostError       = \"Beim Bearbeiten der hosts-Datei ist etwas schief gelaufen, bearbeiten Sie sie manuell oder führen Sie die Installation als Administrator aus\"\r\n    PressAnyKey     = \"Drücken Sie eine beliebige Taste zum Beenden...\"\r\n}\r\n"
  },
  {
    "path": "scripts/installer-lang/el.ps1",
    "content": "[PSCustomObject]@{\n    Welcome         = \"\n╔════════════════════════════════════╗\n║ Καλώς ήρθατε στο SpotX για Windows ║\n╚════════════════════════════════════╝\"\n    Incorrect       = \"Ουπς, μια λανθασμένη τιμή,\"\n    Incorrect2      = \"εισάγετε μια νέα τιμή \"\n    Download        = \"Σφάλμα λήψης\"\n    Download2       = \"Θα γίνει εκ νέου αίτημα σε 5 δευτερόλεπτα...\"\n    Download3       = \"Σφάλμα Ξανά\"\n    Download4       = \"Ελέγξτε τις ρυθμίσεις του δικτύου σας και εκτελέστε ξανά την εγκατάσταση\"\n    Download5       = \"Λήψη Spotify\"\n    StopScript      = \"Το Script έχει σταματήσει\"\n    MsSpoti         = \"Εντοπίστηκε η έκδοση του Spotify του Microsoft Store η οποία δεν υποστηρίζεται\"\n    MsSpoti2        = \"Απεγκατάσταση Spotify έκδοσης Microsoft Store [Y/N]\"\n    MsSpoti3        = \"Αυτόματη απεγκατάσταση Spotify MS...\"\n    MsSpoti4        = \"Απεγκατάσταση Spotify MS...\"\n    Prem            = \"Τροποποίηση για premium λογαριασμό...\"\n    OldV            = \"Βρέθηκε ξεπερασμένη έκδοση του Spotify\"\n    OldV2           = \"Η έκδοση Spotify {0} είναι ξεπερασμένη, συνιστάται η αναβάθμιση σε {1}\"\n    OldV3           = \"Θέλετε να ενημερώσετε; [Y/N]\"\n    AutoUpd         = \"Αυτόματη αναβάθμιση στην προτεινόμενη έκδοση\"\n    DelOrOver       = \"Θέλετε να απεγκαταστήσετε την τρέχουσα έκδοση του {0} η να αντικατασταθεί; Y [Απεγκατάσταση] / N [Αντικατάσταση]\"\n    DelOld          = \"Απεγκατάσταση του παλιού Spotify...\"\n    NewV            = \"Μη υποστηριζόμενη έκδοση του Spotify βρέθηκε\"\n    NewV2           = \"Η έκδοσή σας στο Spotify {0} δεν έχει δοκιμαστεί ακόμα, αυτή τη στιγμή είναι σταθερή {1} έκδοση\"\n    NewV3           = \"Θέλετε να συνεχίσετε με την {0} έκδοση (πιθανά σφάλματα); [Y/N]\"\n    Recom           = \"Θέλετε να εγκαταστήσετε την προτεινόμενη {0} έκδοση; [Y/N]\"\n    DelNew          = \"Απεγκατάσταση μη δοκιμασμένου Spotify...\"\n    DownSpoti       = \"Λήψη και εγκατάσταση Spotify\"\n    DownSpoti2      = \"Παρακαλώ περιμένετε...\"\n    PodcatsOff      = \"Podcasts Απενεργοποιημένα\"\n    PodcastsOn      = \"Podcasts Ενεργοποιημένα\"\n    PodcatsSelect   = \"Θέλετε να απενεργοποιήσετε τα podcast, τα επεισόδια και τα ηχητικά βιβλία από την κύρια σελίδα; [Y/N]\"\n    DowngradeNote   = \"Συνιστάται ο αποκλεισμός επειδή το Spotify υποβαθμίστηκε\"\n    UpdBlock        = \"Αποκλείστηκαν οι ενημερώσεις του Spotify\"\n    UpdUnblock      = \"Οι ενημερώσεις του Spotify δεν είναι αποκλεισμένες\"\n    UpdSelect       = \"Θέλετε να αποκλείσετε τις ενημερώσεις του Spotify; [Y/N]\"\n    ModSpoti        = \"Επιδιόρθωση Spotify...\"\n    Error           = \"Σφάλμα\"\n    FileLocBroken   = \"Η τοποθεσία των αρχείων Spotify είναι κατεστραμμένη, απεγκαταστήστε το πρόγραμμα Spotify και εκτελέστε ξανά το script\"\n    Spicetify       = \"Spicetify detected, it must be installed after SpotX, open recommended actions in FAQ ? [Y/N]\"\n    NoRestore       = \"Το SpotX έχει ήδη εγκατασταθεί, το xpui.bak δεν βρέθηκε. `nΠαρακαλώ απεγκαταστήστε το πρόγραμμα Spotify και εκτελέστε ξανά το Install.bat\"\n    InstallComplete = \"Η εγκατάσταση ολοκληρώθηκε\"\n    HostInfo        = \"Ανεπιθύμητες διευθύνσεις URL βρέθηκαν στο αρχείο hosts\"\n    HostBak         = \"Δημιουργείται αντίγραφο ασφαλείας hosts.bak...\"\n    HostDel         = \"Προσπάθεια κατάργησης ανεπιθύμητων διευθύνσεων URL από το αρχικό αρχείο hosts...\"\n    HostError       = \"Παρουσιάστηκε κάποιο πρόβλημα κατά την επεξεργασία του αρχείου hosts, επεξεργαστείτε το χειροκίνητα ή εκτελέστε το script ως διαχειριστής\"\n    PressAnyKey     = \"Πατήστε οποιοδήποτε πλήκτρο για έξοδο...\"\n}\n"
  },
  {
    "path": "scripts/installer-lang/en.ps1",
    "content": "[PSCustomObject]@{\n    Welcome         = \"\n╔══════════════════════════════╗\n║ Welcome to SpotX for Windows ║\n╚══════════════════════════════╝\"\n    Incorrect       = \"Oops, an incorrect value,\"\n    Incorrect2      = \"enter again through \"\n    Download        = \"Error downloading\"\n    Download2       = \"Will re-request in 5 seconds...\"\n    Download3       = \"Error again\"\n    Download4       = \"Check your network settings and run the installation again\"\n    Download5       = \"Downloading Spotify\"\n    StopScript      = \"Script is stopped\"\n    MsSpoti         = \"The Microsoft Store version of Spotify has been detected which is not supported\"\n    MsSpoti2        = \"Uninstall Spotify Microsoft Store edition ? [Y/N]\"\n    MsSpoti3        = \"Automatically uninstalling Spotify MS...\"\n    MsSpoti4        = \"Uninstalling Spotify MS...\"\n    Prem            = \"Modification for premium account...\"\n    OldV            = \"Found outdated version of Spotify\"\n    OldV2           = \"Your Spotify version ({0}) is outdated, the current latest version is — {1}\"\n    OldV3           = \"Want to update ? [Y/N]\"\n    AutoUpd         = \"Automatic update to the recommended version\"\n    DelOrOver       = \"Remove the current version ({0}) or install over it? Y [Remove] / N [Install Over]\"\n    DelOld          = \"Uninstalling old Spotify...\"\n    NewV            = \"Unsupported version of Spotify found\"\n    NewV2           = \"Your Spotify version ({0}) has not been tested. The stable version for SpotX is {1}\"\n    NewV3           = \"Continue with {0} (errors may occur) ? [Y/N]\"\n    Recom           = \"Install the latest version {0} ? [Y/N]\"\n    DelNew          = \"Uninstalling an untested Spotify...\"\n    DownSpoti       = \"Downloading and installing Spotify\"\n    DownSpoti2      = \"Please wait...\"\n    PodcatsOff      = \"Off Podcasts\"\n    PodcastsOn      = \"On Podcasts\"\n    PodcatsSelect   = \"Hide podcasts, shows, and audiobooks on the homepage ? [Y/N]\"\n    DowngradeNote   = \"It is recommended to block because there is already a newer version of Spotify\"\n    UpdBlock        = \"Spotify updates blocked\"\n    UpdUnblock      = \"Spotify updates are not blocked\"\n    UpdSelect       = \"Block Spotify updates ? [Y/N]\"\n    ModSpoti        = \"Patching Spotify...\"\n    Error           = \"Error\"\n    FileLocBroken   = \"Location of Spotify files is broken, uninstall Spotify client and run the script again\"\n    Spicetify       = \"Spicetify detected, it must be installed after SpotX, open recommended actions in FAQ ? [Y/N]\"\n    NoRestore       = \"SpotX has already been installed, xpui.bak not found. `nPlease uninstall Spotify client and run Install.bat again\"\n    InstallComplete = \"installation completed\"\n    HostInfo        = \"Unwanted URLs found in hosts file\"\n    HostBak         = \"Backing up hosts.bak...\"\n    HostDel         = \"Trying to remove unwanted URLs from the original hosts file...\"\n    HostError       = \"Something went wrong while editing the hosts file, edit it manually or run the script as administrator\"\n    PressAnyKey     = \"Press any key to exit...\"\n}\n"
  },
  {
    "path": "scripts/installer-lang/es.ps1",
    "content": "[PSCustomObject]@{\n    Welcome         = \"\n╔═════════════════════════════════════════════╗\n║ Le damos la bienvenida a SpotX para Windows ║\n╚═════════════════════════════════════════════╝\"\n    Incorrect       = \"Ufff, un valor incorrecto,\"\n    Incorrect2      = \"introduzca nuevamente el valor \"\n    Download        = \"Error al descargar\"\n    Download2       = \"Se volverá a realizar la solicitud en 5 segundos...\"\n    Download3       = \"Error de nuevo\"\n    Download4       = \"Compruebe su configuración de red y ejecute la instalación de nuevo\"\n    Download5       = \"Descargando Spotify\"\n    StopScript      = \"El script se ha detenido\"\n    MsSpoti         = \"La versión de Spotify de Microsoft Store se ha detectado y no es compatible\"\n    MsSpoti2        = \"Desinstalar Spotify edición Microsoft Store [Y/N]\"\n    MsSpoti3        = \"Desinstalación automática de Spotify de Microsoft Store...\"\n    MsSpoti4        = \"Desinstalación de Spotify de Microsoft Store...\"\n    Prem            = \"Modificación para la cuenta prémium...\"\n    OldV            = \"Se ha encontrado una versión obsoleta de Spotify\"\n    OldV2           = \"Su versión de Spotify {0} está obsoleta, se recomienda actualizar a {1}\"\n    OldV3           = \"¿Quiere actualizar? [Y/N]\"\n    AutoUpd         = \"Actualización automática a la versión recomendada\"\n    DelOrOver       = \"¿Desea desinstalar la versión actual de {0} o instalar sobre ella? Y [Desinstalar] / N [Instalar encima]\"\n    DelOld          = \"Desinstalando el antiguo Spotify...\"\n    NewV            = \"Se ha encontrado una versión no compatible de Spotify\"\n    NewV2           = \"Su versión de Spotify {0} aún no se ha probado; actualmente la versión estable es la {1}\"\n    NewV3           = \"¿Quieres continuar con la versión {0} (posibles errores)? [Y/N]\"\n    Recom           = \"¿Desea instalar la versión recomendada {0}? [Y/N]\"\n    DelNew          = \"Desinstalando un Spotify no probado...\"\n    DownSpoti       = \"Descargando e instalando Spotify\"\n    DownSpoti2      = \"Espere un momento...\"\n    PodcatsOff      = \"Pódcast desactivados\"\n    PodcastsOn      = \"Pódcast activados\"\n    PodcatsSelect   = \"¿Quiere desactivar los pódcast, episodios y audiolibros de la página principal? [Y/N]\"\n    DowngradeNote   = \"Es recomendable bloquear las actualizaciones porque ha habido una bajada en la versión de Spotify\"\n    UpdBlock        = \"Actualizaciones de Spotify bloqueadas\"\n    UpdUnblock      = \"Las actualizaciones de Spotify no están bloqueadas\"\n    UpdSelect       = \"¿Quiere bloquear las actualizaciones de Spotify? [Y/N]\"\n    ModSpoti        = \"Parcheando Spotify...\"\n    Error           = \"Error\"\n    FileLocBroken   = \"La ubicación de los archivos de Spotify no funciona; desinstale el cliente y vuelva a ejecutar el script\"\n    Spicetify       = \"Spicetify detectado, debe ser instalado después de SpotX, abrir acciones recomendadas en las preguntas frecuentes? [Y/N]\"\n    NoRestore       = \"SpotX ya ha sido instalado, xpui.bak no se encuentra. `nDesinstale el cliente de Spotify y ejecute Install.bat de nuevo\"\n    InstallComplete = \"Instalación completada\"\n    HostInfo        = \"Se han encontrado URL no deseados en el archivo de hosts\"\n    HostBak         = \"Haciendo una copia de seguridad de hosts.bak...\"\n    HostDel         = \"Intentando eliminar los URL no deseados del archivo hosts original...\"\n    HostError       = \"Algo salió mal al editar el archivo hosts; edítelo manualmente o ejecute el script como administrador\"\n    PressAnyKey     = \"Presione cualquier tecla para salir...\"\n}\n"
  },
  {
    "path": "scripts/installer-lang/fa.ps1",
    "content": "[PSCustomObject]@{\r\n    Welcome         = \"\r\n╔══════════════════════════════╗\r\n║ Welcome to SpotX for Windows ║\r\n╚══════════════════════════════╝\"\r\n    Incorrect       = \"اوه، یک مقدار نادرست\"\r\n    Incorrect2      = \"دوباره وارد شوید \"\r\n    Download        = \"خطا در دانلود\"\r\n    Download2       = \"در عرض 5 ثانیه مجدد درخواست می شود...\"\r\n    Download3       = \"دوباره خطا\"\r\n    Download4       = \"تنظیمات شبکه خود را بررسی کنید و دوباره نصب را اجرا کنید\"\r\n    Download5       = \"در حال دانلود اسپاتیفای\"\r\n    StopScript      = \"اسکریپت متوقف شده است\"\r\n    MsSpoti         = \"نسخه اسپاتیفای ویندوز استور شناسایی شده است که پشتیبانی نمی شود\"\r\n    MsSpoti2        = \"نسخه اسپاتیفای ویندوز استور حذف شود [Y/N]\"\r\n    MsSpoti3        = \"حذف خودکار اسپاتیفای MS\"\r\n    MsSpoti4        = \"حذف نصب اسپاتیفای MS\"\r\n    Prem            = \"تغییر برای حساب پریمیوم\"\r\n    OldV            = \"نسخه قدیمی اسپاتیفای پیدا شد\"\r\n    OldV2           = \"نسخه اسپاتیفای {0} شما قدیمی است، توصیه می شود به {1} ارتقا دهید\"\r\n    OldV3           = \"می خواهید به روز رسانی کنید؟ [Y/N]\"\r\n    AutoUpd         = \"به روز رسانی خودکار به نسخه پیشنهادی\"\r\n    DelOrOver       = \"آیا می خواهید نسخه فعلی {0} را حذف نصب کنید یا روی آن نصب کنید؟ Y [Uninstall] / N [Install Over]\"\r\n    DelOld          = \"حذف نصب اسپاتیفای قدیمی\"\r\n    NewV            = \"نسخه پشتیبانی نشده اسپاتیفای پیدا شد\"\r\n    NewV2           = \"نسخه اسپاتیفای {0} شما هنوز آزمایش نشده است، در حال حاضر یک نسخه پایدار {1} است\"\r\n    NewV3           = \"آیا می خواهید با نسخه {0} ادامه دهید (خطا ممکن است رخ دهد)؟ [Y/N]\"\r\n    Recom           = \"آیا می خواهید نسخه پیشنهادی {0} را نصب کنید؟ [Y/N]\"\r\n    DelNew          = \"حذف نصب اسپاتیفای تست نشده...\"\r\n    DownSpoti       = \"دانلود و نصب اسپاتیفای\"\r\n    DownSpoti2      = \"لطفا صبر کنید...\"\r\n    PodcatsOff      = \"خاموش کردن پادکست\"\r\n    PodcastsOn      = \"روشن کردن پادکست\"\r\n    PodcatsSelect   = \"آیا می خواهید پادکست ها، قسمت ها و کتاب های صوتی را از صفحه اصلی غیرفعال کنید؟ [Y/N]\"\r\n    DowngradeNote   = \"توصیه می شود به دلیل پایین بودن نسخه اسپاتیفای آن را مسدود کنید\"\r\n    UpdBlock        = \"به روز رسانی اسپاتیفای مسدود شده است\"\r\n    UpdUnblock      = \"به روز رسانی اسپاتیفای مسدود نمی شود\"\r\n    UpdSelect       = \"آیا می خواهید به روز رسانی های اسپاتیفای را مسدود کنید؟ [Y/N]\"\r\n    ModSpoti        = \"در حال پچ کردن اسپاتیفای\"\r\n    Error           = \"خطا\"\r\n    FileLocBroken   = \"محل فایل های اسپاتیفای خراب است، کلاینت را حذف نصب کنید و اسکریپت را دوباره اجرا کنید\"\r\n    Spicetify       = \"Spicetify detected, it must be installed after SpotX, open recommended actions in FAQ ? [Y/N]\"\r\n    NoRestore       = \"SpotX قبلاً نصب شده است، xpui.bak یافت نشد. `nلطفاً کلاینت Spotify را حذف نصب کنید و Install.bat را دوباره اجرا کنید\"\r\n    InstallComplete = \"نصب تکمیل شد\"\r\n    HostInfo        = \"URL های ناخواسته در فایل هاست یافت می شود\"\r\n    HostBak         = \"پشتیبان گیری از hosts.bak\"\r\n    HostDel         = \"تلاش برای حذف URL های ناخواسته از فایل میزبان اصلی\"\r\n    HostError       = \"هنگام ویرایش فایل میزبان مشکلی پیش آمد، آن را به صورت دستی ویرایش کنید یا اسکریپت را صورت ادمینستریتور اجرا کنید\"\r\n    PressAnyKey     = \"برای خروج هر کلیدی را فشار دهید...\"\r\n}\r\n"
  },
  {
    "path": "scripts/installer-lang/fi.ps1",
    "content": "[PSCustomObject]@{\n    Welcome         = \"\n╔═══════════════════════════════╗\n║ Tervetuloa SpotX:n Windowsiin ║\n╚═══════════════════════════════╝\"\n    Incorrect       = \"Hupsista, väärä arvo,\"\n    Incorrect2      = \"Syötä uudelleen \"\n    Download        = \"Latauksen aikana tapahtui virhe\"\n    Download2       = \"Pyydetään latausta uudelleen 5 sekunnin kuluttua...\"\n    Download3       = \"Taas virhe\"\n    Download4       = \"Tarkista verkkoasetuksesi ja suorita asennus uudelleen\"\n    Download5       = \"Ladataan Spotify:tä\"\n    StopScript      = \"Skripti on pysäytetty\"\n    MsSpoti         = \"Spotifyn Microsoft Store -versio on havaittu, jota ei tueta\"\n    MsSpoti2        = \"Poista Spotifyn Windows Store -versio [Y/N]\"\n    MsSpoti3        = \"Spotifyn Microsoft Store -version automaattinen poistaminen...\"\n    MsSpoti4        = \"Poistetaan Spotifyn Microsoft Store -versiota.\"\n    Prem            = \"Muunnos premium-tiliin...\"\n    OldV            = \"Spotifysta löytyi vanhentunut versio\"\n    OldV2           = \"Spotify {0} -versiosi on vanhentunut, on suositeltavaa päivittää versioon {1}\"\n    OldV3           = \"Haluatko päivittää? [Y/N]\"\n    AutoUpd         = \"Automaattinen päivitys suositeltuun versioon\"\n    DelOrOver       = \"Haluatko poistaa nykyisen version {0} vai asentaa sen päälle? Y [Poista asennus] / N [Asenna edellisen päälle]\"\n    DelOld          = \"Poistetaan vanhaa Spotify versiota...\"\n    NewV            = \"Spotifyn ei-tuettu versio löytyi\"\n    NewV2           = \"Spotify-versiotasi {0} ei ole vielä testattu, tällä hetkellä versio {1} on vakaa\"\n    NewV3           = \"Haluatko jatkaa versiolla {0} (bugit sekä virheet mahdollista)? [Y/N]\"\n    Recom           = \"Haluatko asentaa suositellun {0} version? [Y/N]\"\n    DelNew          = \"Poistetaan testaamattoman Spotify versiota...\"\n    DownSpoti       = \"Ladataan ja asennetaan spotify:tä\"\n    DownSpoti2      = \"Odota hetki...\"\n    PodcatsOff      = \"podcastit poissa päältä\"\n    PodcastsOn      = \"podcastit päällä\"\n    PodcatsSelect   = \"Haluatko poistaa käytöstä podcastit, jaksot ja äänikirjat pääsivulta? [Y/N]\"\n    DowngradeNote   = \"On suositeltavaa estää päivitykset, koska Spotify muutettiin vanhempaan versioon\"\n    UpdBlock        = \"Spotifyn päivitykset estetty\"\n    UpdUnblock      = \"Spotifyn päivityksiä ei ole estetty\"\n    UpdSelect       = \"Haluatko estää Spotifyn päivitykset? [Y/N]\"\n    ModSpoti        = \"Paikataan Spotifyn tiedostoja...\"\n    Error           = \"Virhe\"\n    FileLocBroken   = \"Spotify-tiedostojen sijainti on rikki, asenna spotify uudelleen ja suorita komentosarja uudelleen\"\n    Spicetify       = \"Spicetify detected, it must be installed after SpotX, open recommended actions in FAQ ? [Y/N]\"\n    NoRestore       = \"SpotX on jo asennettu, xpui.bak tiedostoa ei löynyt. `nAsenna spotify uudelleen ja suorita Install.bat tiedosto uudelleen\"\n    InstallComplete = \"asennus suoritettu\"\n    HostInfo        = \"Hosts-tiedostosta löytyi ei-toivottuja URL-osoitteita\"\n    HostBak         = \"Varmuuskopioidaan hosts.bak...\"\n    HostDel         = \"Yritetään poistaa ei toivottuja URL-osoitteita alkuperäisestä hosts-tiedostosta...\"\n    HostError       = \"Jotain meni pieleen, hosts-tiedostoton muokkaamisessa, muokkaa sitä manuaalisesti tai suorita komentosarja järjestelmänvalvojana\"\n    PressAnyKey     = \"Paina mitä tahansa näppäintä poistuaksesi...\"\n}\n"
  },
  {
    "path": "scripts/installer-lang/fil.ps1",
    "content": "[PSCustomObject]@{\n    Welcome         = \"\n╔═══════════════════════════════════════════════╗\n║ Maligayang pagdating sa SpotX para sa Windows ║\n╚═══════════════════════════════════════════════╝\"\n    Incorrect       = \"Oops, maling halaga,\"\n    Incorrect2      = \"subukang muli sa pamamagitan ng \"\n    Download        = \"Error sa pag-download\"\n    Download2       = \"Magre-request muli sa loob ng 5 segundo...\"\n    Download3       = \"Muling nagka-error\"\n    Download4       = \"Suriin ang iyong mga setting sa network at patakbuhin muli ang pag-install\"\n    Download5       = \"Nagdo-download ng Spotify\"\n    StopScript      = \"Itinigil ang script\"\n    MsSpoti         = \"Nadiskubre ang bersyon ng Spotify ay mula sa Microsoft Store na hindi suportado\"\n    MsSpoti2        = \"I-uninstall ang edisyon ng Spotify mula sa Microsoft Store [Y/N]\"\n    MsSpoti3        = \"Awtomatikong i-uninstall ang Spotify na MS...\"\n    MsSpoti4        = \"Ina-uninstall ang Spotify MS...\"\n    Prem            = \"Pagbabago para sa premium account...\"\n    OldV            = \"Natagpuan ang lumang bersyon ng Spotify\"\n    OldV2           = \"Ang iyong bersyon ng Spotify na {0} ay luma na, ito ay inirerekomenda na i-upgrade sa {1}\"\n    OldV3           = \"Gusto mo ba mag-update? [Y/N]\"\n    AutoUpd         = \"Awtomatikong i-update sa inirerekumendang bersyon\"\n    DelOrOver       = \"Gusto mo bang i-uninstall ang kasalukuyang bersyon ng {0} o mag-install ng panibagong bersyon? Y [I-uninstall] / N [Mag-install ng Panibagong Bersyon]\"\n    DelOld          = \"Tinatanggal ang lumang Spotify...\"\n    NewV            = \"Natagpuan ang hindi suportadong bersyon ng Spotify\"\n    NewV2           = \"Ang iyong bersyon ng Spotify {0} ay hindi pa nasusubukan, kasalukuyang ito ay nasa stable na bersyon na {1}\"\n    NewV3           = \"Gusto mo bang magpatuloy sa {0} bersyon (mayroong mga error)? [Y/N]\"\n    Recom           = \"Gusto mo bang mag-install ng inirerekumendang {0} na bersyon? [Y/N]\"\n    DelNew          = \"Ina-uninstall ang hindi pa nasusubukan na Spotify...\"\n    DownSpoti       = \"Nagda-download at nag-i-install ng Spotify\"\n    DownSpoti2      = \"Mangyaring maghintay...\"\n    PodcatsOff      = \"I-off ang mga Podcast\"\n    PodcastsOn      = \"I-on ang mga Podcast\"\n    PodcatsSelect   = \"Gusto mo bang hindi paganahin ang mga podcast, mga episode at mga audiobook sa pangunahing pahina? [Y/N]\"\n    DowngradeNote   = \"Inirerekumendang i-block dahil ang Spotify ay na-downgrade\"\n    UpdBlock        = \"Ang pag-update ng Spotify ay na-block\"\n    UpdUnblock      = \"Ang pag-update ng Spotify ay hindi na-block\"\n    UpdSelect       = \"Gusto mo bang i-block ang mga update ng Spotify? [Y/N]\"\n    ModSpoti        = \"Pinapatch ang Spotify...\"\n    Error           = \"May nangyaring mali\"\n    FileLocBroken   = \"Ang lokasyon ng mga file ng Spotify ay sira, mag-uninstall ng Spotify client at patakbuhin muli ang script.\"\n    Spicetify       = \"Nakadetect ang Spicetify, ito ay dapat na mai-install pagkatapos ng SpotX, buksan ang rekomendadong mga hakbang sa FAQ? [Y/N]\"\n    NoRestore       = \"Nakainstall na ang SpotX, hindi nakita ang xpui.bak. `nMangyaring mag-uninstall ng Spotify client at patakbuhin muli ang Install.bat\"\n    InstallComplete = \"Ang pag-install ay tapos na\"\n    HostInfo        = \"May mga hindi kinakailangang mga URL ay natagpuan sa hosts file\"\n    HostBak         = \"Nagbabackup ng hosts.bak...\"\n    HostDel         = \"Sinusubukang alisin ang mga hindi kanais-nais na URL mula sa orihinal na hosts file...\"\n    HostError       = \"May naging problema sa pag-eedit ng hosts file, i-edit ito ng manu-mano o patakbuhin ang script bilang administrator\"\n    PressAnyKey     = \"Pindutin ang anumang key upang lumabas...\"\n}\n"
  },
  {
    "path": "scripts/installer-lang/fr.ps1",
    "content": "[PSCustomObject]@{\n    Welcome         = \"\n╔══════════════════════════════════╗\n║ Bienvenue sur SpotX pour Windows ║\n╚══════════════════════════════════╝\"\n    Incorrect       = \"Oups, une valeur est incorrecte,\"\n    Incorrect2      = \"veuillez recommencer \"\n    Download        = \"Erreur durant le téléchargement\"\n    Download2       = \"Renvoi d'une requête dans 5 secondes...\"\n    Download3       = \"Une nouvelle erreur est survenue\"\n    Download4       = \"Vérifiez vos réglages réseau et lancez à nouveau l'installation\"\n    Download5       = \"Téléchargement de Spotify\"\n    StopScript      = \"Le script est arrêté\"\n    MsSpoti         = \"La version du Microsoft Store de Spotify a été détectée et n'est pas prise en charge\"\n    MsSpoti2        = \"Désinstaller la version du Microsoft Store de Spotify [Y/N] ?\"\n    MsSpoti3        = \"Désinstallation automatique de Spotify MS...\"\n    MsSpoti4        = \"Désinstallation de Spotify MS...\"\n    Prem            = \"Modification pour compte premium...\"\n    OldV            = \"Ancienne version de Spotify trouvée\"\n    OldV2           = \"Votre version Spotify {0} est obsolète, il est recommandé de mettre à jour vers la {1}\"\n    OldV3           = \"Voulez-vous faire la mise à jour ? [Y/N]\"\n    AutoUpd         = \"Mise à jour automatique vers la version recommandée\"\n    DelOrOver       = \"Voulez-vous désinstaller la version actuelle {0} ou installer par dessus ? Y [Désinstaller] / N [Installer par dessus]\"\n    DelOld          = \"Désinstallation de l'ancienne version de Spotify...\"\n    NewV            = \"Version non supportée de Spotify trouvée\"\n    NewV2           = \"Votre version {0} de Spotify n'a pas encore été testée, actuellement {1} est une version stable\"\n    NewV3           = \"Voulez-vous continuer avec la version {0} (erreurs possibles) ? [Y/N]\"\n    Recom           = \"Voulez-vous installer la version {0} recommandée ? [Y/N]\"\n    DelNew          = \"Désinstallation d'une version de Spotify non testée...\"\n    DownSpoti       = \"Téléchargement et installation de Spotify\"\n    DownSpoti2      = \"Veuillez patienter...\"\n    PodcatsOff      = \"Podcasts désactivés\"\n    PodcastsOn      = \"Podcasts activés\"\n    PodcatsSelect   = \"Voulez-vous désactiver les podcasts, épisodes et livres audio de la page d'accueil ? [Y/N]\"\n    DowngradeNote   = \"Il est recommandé de bloquer les mises à jour car une version antérieure de Spotify a été installée\"\n    UpdBlock        = \"Mises à jour de Spotify bloquées\"\n    UpdUnblock      = \"Les mises à jour de Spotify ne sont pas bloquées\"\n    UpdSelect       = \"Voulez-vous bloquer les mises à jour de Spotify ? [Y/N]\"\n    ModSpoti        = \"Modification de Spotify...\"\n    Error           = \"Erreur\"\n    FileLocBroken   = \"L'emplacement des fichiers de Spotify est invalide, désinstallez Spotify et lancez de nouveau le script\"\n    Spicetify       = \"Spicetify détecté, il faut l'installer après SpotX, ouvrir les actions recommandées dans la FAQ ? [Y/N]\"\n    NoRestore       = \"SpotX a déjà été installé, xpui.bak introuvable. `nMerci de désinstaller Spotify et de lancer à nouveau le script\"\n    InstallComplete = \"installation terminée\"\n    HostInfo        = \"URLs indésirables trouvées dans le fichier hosts\"\n    HostBak         = \"Sauvegarde de hosts.bak...\"\n    HostDel         = \"Tentative de suppression des URLs indésirables du fichier hosts original...\"\n    HostError       = \"Quelque chose ne s'est pas bien passé lors de l'édition du fichier hosts, modifiez le manuellement ou lancez le script en tant qu'administrateur\"\n    PressAnyKey     = \"Appuyez sur n'importe quelle touche pour quitter...\"\n}\n"
  },
  {
    "path": "scripts/installer-lang/hi.ps1",
    "content": "[PSCustomObject]@{\n    Welcome         = \"\n╔════════════════════════════════════╗\n║ SpotX for Windows में आपका स्वागत है  ║\n╚════════════════════════════════════╝\"\n    Incorrect       = \"ओह, एक गलत मान,\"\n    Incorrect2      = \"के माध्यम से फिर से दर्ज करें \"\n    Download        = \"डाउनलोड करने में गड़बड़ी\"\n    Download2       = \"5 सेकंड में फिर से कोशिश की जाएगी...\"\n    Download3       = \"फिर से गड़बड़ी\"\n    Download4       = \"अपनी नेटवर्क सेटिंग्स जाँचें और इंस्टॉलेशन फिर से चलाएँ\"\n    Download5       = \"Spotify डाउनलोड हो रहा है\"\n    StopScript      = \"स्क्रिप्ट रोक दी गई है\"\n    MsSpoti         = \"Spotify का Microsoft Store वर्जन मिला है, जो सपोर्टेड नहीं है\"\n    MsSpoti2        = \"Spotify का Microsoft Store वर्जन अनइंस्टॉल करें? [Y/N]\"\n    MsSpoti3        = \"Spotify MS अपने आप अनइंस्टॉल हो रहा है...\"\n    MsSpoti4        = \"Spotify MS अनइंस्टॉल किया जा रहा है...\"\n    Prem            = \"प्रीमियम अकाउंट के लिए मॉडिफिकेशन किया जा रहा है...\"\n    OldV            = \"Spotify का पुराना वर्जन मिला\"\n    OldV2           = \"आपका Spotify वर्जन ({0}) पुराना है। लेटेस्ट वर्जन {1} है\"\n    OldV3           = \"क्या आप अपडेट करना चाहते हैं? [Y/N]\"\n    AutoUpd         = \"सुझाए गए वर्जन पर ऑटोमेटिक अपडेट\"\n    DelOrOver       = \"मौजूदा वर्जन ({0}) को हटाएँ या इसी पर इंस्टॉल करें? Y [हटाएँ] / N [इसी पर इंस्टॉल करें]\"\n    DelOld          = \"पुराना Spotify अनइंस्टॉल किया जा रहा है...\"\n    NewV            = \"Spotify का अनसपोर्टेड वर्जन मिला\"\n    NewV2           = \"आपके Spotify वर्जन ({0}) को टेस्ट नहीं किया गया है। SpotX के लिए स्टेबल वर्जन {1} है\"\n    NewV3           = \"क्या आप वर्जन {0} के साथ जारी रखना चाहते हैं (इसमें समस्याएं आ सकती हैं)? [Y/N]\"\n    Recom           = \"क्या आप लेटेस्ट वर्जन {0} इंस्टॉल करना चाहते हैं? [Y/N]\"\n    DelNew          = \"टेस्ट न किए गए Spotify को अनइंस्टॉल किया जा रहा है...\"\n    DownSpoti       = \"Spotify डाउनलोड और इंस्टॉल किया जा रहा है\"\n    DownSpoti2      = \"कृपया प्रतीक्षा करें...\"\n    PodcatsOff      = \"पॉडकास्ट बंद\"\n    PodcastsOn      = \"पॉडकास्ट चालू\"\n    PodcatsSelect   = \"क्या आप होमपेज से पॉडकास्ट, शो और ऑडियोबुक छिपाना चाहते हैं? [Y/N]\"\n    DowngradeNote   = \"अपडेट्स ब्लॉक करने की सलाह दी जाती है, क्योंकि Spotify को डाउनग्रेड किया गया था\"\n    UpdBlock        = \"Spotify अपडेट्स ब्लॉक कर दिए गए हैं\"\n    UpdUnblock      = \"Spotify अपडेट्स ब्लॉक नहीं हैं\"\n    UpdSelect       = \"क्या Spotify अपडेट्स को ब्लॉक करना है? [Y/N]\"\n    ModSpoti        = \"Spotify को पैच किया जा रहा है...\"\n    Error           = \"त्रुटि\"\n    FileLocBroken   = \"Spotify फाइलों का लोकेशन गलत है। कृपया Spotify क्लाइंट को अनइंस्टॉल करें और स्क्रिप्ट फिर से चलाएँ\"\n    Spicetify       = \"Spicetify मिला है। इसे SpotX के बाद इंस्टॉल किया जाना चाहिए। क्या आप FAQ में सुझाए गए एक्शन देखना चाहते हैं? [Y/N]\"\n    NoRestore       = \"SpotX पहले से इंस्टॉल है, लेकिन xpui.bak नहीं मिला। `nकृपया Spotify क्लाइंट को अनइंस्टॉल करें और Install.bat को फिर से चलाएँ\"\n    InstallComplete = \"इंस्टॉलेशन पूरा हुआ\"\n    HostInfo        = \"hosts फ़ाइल में कुछ गैर-जरूरी URLs मिले हैं\"\n    HostBak         = \"hosts.bak का बैकअप बनाया जा रहा है...\"\n    HostDel         = \"ओरिजिनल hosts फ़ाइल से गैर-जरूरी URLs को हटाने की कोशिश की जा रही है...\"\n    HostError       = \"hosts फ़ाइल को एडिट करते समय कोई समस्या हुई है। कृपया इसे मैनुअली एडिट करें या स्क्रिप्ट को एडमिनिस्ट्रेटर के रूप में चलाएँ\"\n    PressAnyKey     = \"Press any key to exit...\"\n}\n"
  },
  {
    "path": "scripts/installer-lang/hu.ps1",
    "content": "[PSCustomObject]@{\n    Welcome         = \"\n╔════════════════════════════════════════════╗\n║ Üdvözöllek a SpotX Windowsos telepítőjében ║\n╚════════════════════════════════════════════╝\"\n    Incorrect       = \"Hoppá, helytelen érték,\"\n    Incorrect2      = \"Próbáld újra \"\n    Download        = \"Letöltési hiba\"\n    Download2       = \"Újrapróbálás 5 másodpercen belül...\"\n    Download3       = \"Ismét hiba\"\n    Download4       = \"Ellenőrizze a hálózati beállításokat, és futtassa újra a telepítést\"\n    Download5       = \"Spotify letöltése\"\n    StopScript      = \"A script leállt\"\n    MsSpoti         = \"A Spotify Microsoft Store verziója van telepítve, amely nem támogatott\"\n    MsSpoti2        = \"A Spotify Microsoft Store kiadásának eltávolítása [Y/N]\"\n    MsSpoti3        = \"A Spotify MS automatikus eltávolítása...\"\n    MsSpoti4        = \"Spotify MS eltávolítása...\"\n    Prem            = \"Módosítás a prémium fiókhoz...\"\n    OldV            = \"A Spotify elavult verziója van telepítve\"\n    OldV2           = \"A Spotify {0} verziója elavult, ajánlott frissíteni a {1} verzióra.\"\n    OldV3           = \"Szeretné frissíteni ? [Y/N]\"\n    AutoUpd         = \"Automatikus frissítés a javasolt verzióra\"\n    DelOrOver       = \"A {0} jelenlegi verzióját szeretné eltávolítani vagy telepíteni rá? Y [Eltávolítás] / N [Felül telepítés]\"\n    DelOld          = \"A régi Spotify eltávolítása...\"\n    NewV            = \"A Spotify nem támogatott verziója van telepítve\"\n    NewV2           = \"A Spotify {0} verzióját még nem teszteltük, jelenlegi stabil verzió: {1}. \"\n    NewV3           = \"Folytatni szeretné a {0} verzióval (hibák léphetnek fel) ? [Y/N]\"\n    Recom           = \"Szeretné telepíteni a {0} ajánlott verziót? [Y/N]\"\n    DelNew          = \"Nem tesztelt Spotify eltávolítása...\"\n    DownSpoti       = \"A Spotify letöltése és telepítése\"\n    DownSpoti2      = \"Kérem várjon...\"\n    PodcatsOff      = \"Podcastok kikapcsolása\"\n    PodcastsOn      = \"Podcastok bekapcsolása\"\n    PodcatsSelect   = \"Szeretné letiltani a podcastokat, epizódokat és hangoskönyveket a főoldalról? [Y/N]\"\n    DowngradeNote   = \"Ajánlott blokkolni, mert a Spotify lett alacsonyabb szintre lett állítva.\"\n    UpdBlock        = \"Spotify frissítések blokkolva\"\n    UpdUnblock      = \"A Spotify frissítések nincsenek blokkolva\"\n    UpdSelect       = \"Szeretnéd letiltani a Spotify frissítéseket? [Y/N]\"\n    ModSpoti        = \"Spotify patchelése...\"\n    Error           = \"Hiba\"\n    FileLocBroken   = \"A Spotify fájlok sérültek, távolítsa el a klienst, és futtassa újra a szkriptet.\"\n    Spicetify       = \"Spicetify detected, it must be installed after SpotX, open recommended actions in FAQ ? [Y/N]\"\n    NoRestore       = \"A SpotX már telepítve van, az xpui.bak nem található. `nTávolítsa el a Spotify klienst, és futtassa újra az Install.bat fájlt.\"\n    InstallComplete = \"Telepítés befejeződött\"\n    HostInfo        = \"Nemkívánatos URL-címek a hosts fájlban\"\n    HostBak         = \"A hosts.bak mentése...\"\n    HostDel         = \"A nem kívánt URL-ek eltávolítása az eredeti hosts fájlból...\"\n    HostError       = \"Valami hiba történt a hosts fájl szerkesztése közben, szerkeszd meg manuálisan, vagy futtasd a szkriptet rendszergazdaként.\"\n    PressAnyKey     = \"Nyomjon meg egy gombot a kilépéshez...\"\n}\n"
  },
  {
    "path": "scripts/installer-lang/id.ps1",
    "content": "[PSCustomObject]@{\r\n    Welcome         = \"\r\n╔═══════════════════════════════════════╗\r\n║ Selamat datang di SpotX untuk Windows ║\r\n╚═══════════════════════════════════════╝\"\r\n    Incorrect       = \"Oops, nilai salah,\"\r\n    Incorrect2      = \"masukkan lagi \"\r\n    Download        = \"Error saat mengunduh\"\r\n    Download2       = \"Akan meminta ulang dalam 5 detik...\"\r\n    Download3       = \"Error lagi\"\r\n    Download4       = \"Periksa pengaturan jaringan Anda dan jalankan instalasi lagi\"\r\n    Download5       = \"Mengunduh Spotify\"\r\n    StopScript      = \"Skrip dihentikan\"\r\n    MsSpoti         = \"Versi Microsoft Store dari Spotify terdeteksi, versi ini tidak didukung\"\r\n    MsSpoti2        = \"Uninstall edisi Spotify Microsoft Store [Y/N]\"\r\n    MsSpoti3        = \"Menghapus Spotify MS secara otomatis...\"\r\n    MsSpoti4        = \"Menghapus Spotify MS...\"\r\n    Prem            = \"Modifikasi untuk akun premium...\"\r\n    OldV            = \"Versi lama Spotify ditemukan\"\r\n    OldV2           = \"Versi Spotify {0} Anda sudah usang, disarankan untuk upgrade ke versi {1}\"\r\n    OldV3           = \"Ingin mengupdate? [Y/N]\"\r\n    AutoUpd         = \"Pembaruan otomatis ke versi yang direkomendasikan\"\r\n    DelOrOver       = \"Apakah Anda ingin menghapus versi {0} saat ini atau menimpanya? Y [Uninstall] / N [Timpa]\"\r\n    DelOld          = \"Menghapus Spotify lama...\"\r\n    NewV            = \"Ditemukan versi Spotify yang tidak didukung\"\r\n    NewV2           = \"Versi Spotify {0} Anda belum diuji, saat ini adalah versi {1} yang stabil\"\r\n    NewV3           = \"Ingin melanjutkan dengan versi {0} (mungkin ada kesalahan)? [Y/N]\"\r\n    Recom           = \"Ingin menginstal versi {0} yang direkomendasikan? [Y/N]\"\r\n    DelNew          = \"Menghapus Spotify yang belum diuji...\"\r\n    DownSpoti       = \"Mengunduh dan menginstal Spotify\"\r\n    DownSpoti2      = \"Tunggu sebentar...\"\r\n    PodcatsOff      = \"Podcast Nonaktif\"\r\n    PodcastsOn      = \"Podcast Aktif\"\r\n    PodcatsSelect   = \"Apakah Anda ingin menonaktifkan podcast, episode, dan audiobooks dari halaman utama? [Y/N]\"\r\n    DowngradeNote   = \"Disarankan untuk memblokir karena Spotify telah di downgrade\"\r\n    UpdBlock        = \"Pembaruan Spotify diblokir\"\r\n    UpdUnblock      = \"Pembaruan Spotify tidak diblokir\"\r\n    UpdSelect       = \"Ingin memblokir pembaruan Spotify? [Y/N]\"\r\n    ModSpoti        = \"Memasang patch ke Spotify...\"\r\n    Error           = \"Kesalahan\"\r\n    FileLocBroken   = \"Lokasi file Spotify rusak, uninstall aplikasi Spotify dan jalankan skrip lagi\"\r\n    Spicetify       = \"Spicetify terdeteksi, harus diinstal setelah SpotX, buka tindakan yang direkomendasikan di FAQ? [Y/N]\"\r\n    NoRestore       = \"SpotX sudah diinstal, xpui.bak tidak ditemukan. `nSilakan uninstall aplikasi Spotify dan jalankan Install.bat lagi\"\r\n    InstallComplete = \"instalasi selesai\"\r\n    HostInfo        = \"URL yang tidak diinginkan ditemukan dalam file host\"\r\n    HostBak         = \"Membuat cadangan hosts.bak...\"\r\n    HostDel         = \"Mencoba menghapus URL yang tidak diinginkan dari file hosts asli...\"\r\n    HostError       = \"Ada yang salah saat mengedit file hosts, edit manual atau jalankan skrip sebagai administrator\"\r\n    PressAnyKey     = \"Tekan sembarang tombol untuk keluar...\"\r\n}\r\n"
  },
  {
    "path": "scripts/installer-lang/it.ps1",
    "content": "[PSCustomObject]@{\n    Welcome         = \"\n╔═══════════════════════════════╗\n║ Benvenuti a SpotX per Windows ║\n╚═══════════════════════════════╝\"\n    Incorrect       = \"Ops, un valore sbagliato,\"\n    Incorrect2      = \"inserisci di nuovo \"\n    Download        = \"Errore nel download\"\n    Download2       = \"Nuova richiesta in 5 secondi...\"\n    Download3       = \"Nuovo errore\"\n    Download4       = \"Verifica le tue impostazioni di rete ed esegui di nuovo l'installazione\"\n    Download5       = \"Scaricamento di Spotify\"\n    StopScript      = \"Lo script è stato fermato\"\n    MsSpoti         = \"È stata rilevata la versione di Spotify del Microsoft Store, che non è supportata\"\n    MsSpoti2        = \"Disinstallare la versione del Microsoft Store di Spotify ? [Y/N]\"\n    MsSpoti3        = \"Disinstallazione automatica di Spotify MS...\"\n    MsSpoti4        = \"Disinstallazione di Spotify MS...\"\n    Prem            = \"Modifica per account premium...\"\n    OldV            = \"Trovata vecchia versione di Spotify\"\n    OldV2           = \"La tua versione di Spotify {0} è vecchia, la versione attuale più recente è — {1}\"\n    OldV3           = \"Vorresti aggiornare ? [Y/N]\"\n    AutoUpd         = \"Aggiornamento automatico alla versione consigliata\"\n    DelOrOver       = \"Rimuovere la versione attuale {0} o sovrascriverla? Y [Rimuovi] / N [Sovrascrivi]\"\n    DelOld          = \"Disinstallando vecchia versione di Spotify...\"\n    NewV            = \"Trovata versione di Spotify non supportata\"\n    NewV2           = \"La tua versione {0} di Spotify non è stata testata. La versione stabile per SpotX è {1}\"\n    NewV3           = \"Continuare con {0} (possibili errori) ? [Y/N]\"\n    Recom           = \"Installare l'ultima versione {0} ? [Y/N]\"\n    DelNew          = \"Disinstallando una versione non testata di Spotify...\"\n    DownSpoti       = \"Scaricando ed installando Spotify\"\n    DownSpoti2      = \"Attendere...\"\n    PodcatsOff      = \"Podcasts OFF\"\n    PodcastsOn      = \"Podcasts ON\"\n    PodcatsSelect   = \"Nascondere podcast, episodi ed audiolibri dalla pagina principale ? [Y/N]\"\n    DowngradeNote   = \"Si consiglia il blocco dato il downgrade di Spotify\"\n    UpdBlock        = \"Aggiornamenti di Spotify bloccati\"\n    UpdUnblock      = \"Aggiornamenti di Spotify non bloccati\"\n    UpdSelect       = \"Bloccare gli aggiornamenti di Spotify ? [Y/N]\"\n    ModSpoti        = \"Patching Spotify...\"\n    Error           = \"Errore\"\n    FileLocBroken   = \"La posizione dei file di Spotify è danneggiata, disinstallare il client di Spotify ed eseguire nuovamente lo script\"\n    Spicetify       = \"Spicetify rilevato, deve essere installato dopo SpotX, aprire le azioni consigliate nelle FAQ ? [Y/N]\"\n    NoRestore       = \"SpotX è già stato installato, xpui.bak non trovato. `nPer favore, disinstalla Spotify e riapri il file Install.bat\"\n    InstallComplete = \"installazione completata\"\n    HostInfo        = \"Trovati URL non desiderati nel file hosts\"\n    HostBak         = \"Backup di hosts.bak in corso...\"\n    HostDel         = \"Provo a rimuovere URL non desiderati dal file hosts originale...\"\n    HostError       = \"Qualcosa è andato storto durante la modifica del file hosts, modificalo manualmente o fai partire lo script come amministratore\"\n    PressAnyKey     = \"Premi un tasto qualsiasi per uscire...\"\n}\n"
  },
  {
    "path": "scripts/installer-lang/ja.ps1",
    "content": "[PSCustomObject]@{\n    Welcome         = \"\n╔═══════════════════════════╗\n║ SpotX Windows用にようこそ ║\n╚═══════════════════════════╝\"\n    Incorrect       = \"無効な値です\"\n    Incorrect2      = \"再入力してください\"\n    Download        = \"ダウンロード時のエラー\"\n    Download2       = \"5秒後に再試行します...\"\n    Download3       = \"再びエラー\"\n    Download4       = \"ネットワークの設定を確認し再度インストールを実行してくささい\"\n    Download5       = \"Spotify のダウンロード中\"\n    StopScript      = \"スクリプトが停止しました\"\n    MsSpoti         = \"Microsoft Store 版の Spotify には対応していません\"\n    MsSpoti2        = \"Microsoft Store 版の Spotifyをアンインストールしますか ? [Y/N]\"\n    MsSpoti3        = \"Spotify MS 版を自動でアンインストール中...\"\n    MsSpoti4        = \"Spotify MS 版をアンインストール中...\"\n    Prem            = \"Premium アカウント用の修正...\"\n    OldV            = \"古い Spotify を使用中です\"\n    OldV2           = \"お使いの Spotify のバージョン {0} は古いため以下へのアップグレードを推奨 {1}\"\n    OldV3           = \"更新しますか ? [Y/N]\"\n    AutoUpd         = \"推奨するバージョンに自動更新\"\n    DelOrOver       = \"既存のバージョン {0} をアンインストール、または上書しますか ? Y [アンインストール] / N [上書き]\"\n    DelOld          = \"古い Spotify をアンインストール中...\"\n    NewV            = \"未対応の Spotify のバージョンです\"\n    NewV2           = \"お使いの Spotify のバージョン {0} はまだ検証しておらず現在の安定バージョンは {1}\"\n    NewV3           = \"バージョン {0} のままぞこうしますか (エラーの可能性) ? [Y/N]\"\n    Recom           = \"推奨するバージョン {0} をインストールしますか ? [Y/N]\"\n    DelNew          = \"未検証版の Spotify をアンインストール...\"\n    DownSpoti       = \"Spotify をダウンロードしインストール\"\n    DownSpoti2      = \"お待ちください...\"\n    PodcatsOff      = \"ポッドキャスト 有効\"\n    PodcastsOn      = \"ポッドキャスト 無効\"\n    PodcatsSelect   = \"メインページのポッドキャスト、エピソード、オーディオブックを無効にしますか ? [Y/N]\"\n    DowngradeNote   = \"Spotify をダウングレードしたので阻止を推奨\"\n    UpdBlock        = \"Spotify の更新を阻止\"\n    UpdUnblock      = \"Spotify の更新を阻止していません\"\n    UpdSelect       = \"Spotify の更新を阻止しますか ? [Y/N]\"\n    ModSpoti        = \"Spotify にパッチ適用中...\"\n    Error           = \"エラー\"\n    FileLocBroken   = \"Spotify のファイルの場所が壊れています。Spotify クライアントをアンインストールし再度スクリプトを実行してください\"\n    Spicetify       = \"Spicetify が検出されましたが、SpotX の後にインストールする必要があります。推奨方法の解説ページを開きますか? [Y/N]\"\n    NoRestore       = \"SpotXはインストール済みですが xpui.bak が見つかりません。`nSpotify クライアントをアンインストールし、再度 Install.bat を実行してください\"\n    InstallComplete = \"インストール完了\"\n    HostInfo        = \"hosts ファイル内に望まない URL があります\"\n    HostBak         = \"hosts.bak にバックアップ中...\"\n    HostDel         = \"元の hosts から望まない URL を削除中...\"\n    HostError       = \"hosts ファイルの編集中に不明の問題が発生、手動で編集するか、管理者としてスクリプトを実行してください\"\n    PressAnyKey     = \"終了するには何かキーを押してください...\"\n}\n"
  },
  {
    "path": "scripts/installer-lang/ka.ps1",
    "content": "[PSCustomObject]@{\n    Welcome         = \"\n╔══════════════════════════════╗\n║ Welcome to SpotX for Windows ║\n╚══════════════════════════════╝\"\n    Incorrect       = \"უპს, არასწორი შენატანი,\"\n    Incorrect2      = \"მაგრამ თავიდან სცადე\"\n    Download        = \"შეცდომა ჩაწერის დროს\"\n    Download2       = \"თავიდან ვცდი 5 წამში...\"\n    Download3       = \"შეცდომა ისევ\"\n    Download4       = \"შეამოწმეთ თქვენი კავშირი ქსელთან და თავიდან სცადე ინსტალაცია\"\n    Download5       = \"Spotify იწერება\"\n    StopScript      = \"სკრიპტი ჩერდება\"\n    MsSpoti         = \"Microsoft Store-ის ვერსია მოიძებნა რომელიც არ არის მხარდაჯერილი\" \n    MsSpoti2        = \"წავშალოთ Spotify Microsoft Store-ის ვერსია [Y/N]\"\n    MsSpoti3        = \"ავტუმატურად იშლება Spotify MS...\"\n    MsSpoti4        = \"იშლება Spotify MS...\"\n    Prem            = \"მოდიფიკაცია პრემიუმ აკკოუნტის...\"\n    OldV            = \"მოიძებნა მოძველებული Spotify-ს ვერსია\"\n    OldV2           = \"თქვენი Spotify-ს {0} ვერსია არის მოძველებული, რეკომენდურია მისი აპგრეიდობა ამ ვერსიაზე {1}\"\n    OldV3           = \"გინდა განაახლოთ ? [Y/N]\"\n    AutoUpd         = \"აუტომატიკური აპდაიტი რეკომენდებულ ვერსიაზე\"\n    DelOrOver       = \"გინდა წაშალო ეხლანდელი ვერსია: {0} თუ თავიდან ჩაწერა? Y [წაშლა] / N [თავიდან ჩაწერა]\"\n    DelOld          = \"ძველი Spotify იშლება...\"\n    NewV            = \"არა მხარდაჯერილი Spotify-ს ვერსია არის მოწებნილი\"\n    NewV2           = \"თქვენი Spotify-ს {0} ვერსია ჯერ არ არის დატესტილი, ამჟამად არის სტაბილური {1} ვერსია\"\n    NewV3           = \"გინდათ რომ გააგრძელოთ {0} ვერსიაზე (შეცდომები შესაძლებელია) ? [Y/N]\"\n    Recom           = \"გინდათ რო ჩაიწეროთ რეკომენდირებული {0} ვერსია ? [Y/N]\"\n    DelNew          = \"იშლება არა ტესტირებულ Spotify...\"\n    DownSpoti       = \"ვტვირთავთ და ვიწერთ Spotify-ს\"\n    DownSpoti2      = \"გთხოვთ დაიცადოთ...\"\n    PodcatsOff      = \"პოდკასტები გათიშული\"\n    PodcastsOn      = \"პოდკასტები ჩართული\"\n    PodcatsSelect   = \"Do you want to disable podcasts, episodes and audiobooks from the main page? [Y/N]\" #\n    DowngradeNote   = \"რეკომენდირებული რომ დაბლოკოთ იმიტომ რომ იყო Spotify-ს დაქვეითება\"\n    UpdBlock        = \"Spotify-ს განახლებები დაბლოკილია\"\n    UpdUnblock      = \"Spotify-ს განახლებები არ არის დაბლოკილი\"\n    UpdSelect       = \"გინდათ რომ დაბლოკოთ Spotify-ს განახლებები? [Y/N]\"\n    ModSpoti        = \"Spotify იკერვება...\"\n    Error           = \"შეცდომა\"\n    FileLocBroken   = \"Spotify ფაილების ლოკაცია არის გადეხილი, წაშალეთ კლიენტი და თავიდან გაუშვით სკრიპტი\"\n    Spicetify       = \"Spicetify detected, it must be installed after SpotX, open recommended actions in FAQ ? [Y/N]\"\n    NoRestore       = \"SpotX უკვე დაინსტალირებულია, xpui.bak ვერ მოიძებნა. `nგთხოვთ, წაშალოთ Spotify აპლიკაცია და თავიდან გაუშვით Install.bat\"\n    InstallComplete = \"ინსტალაცია დასრულდა\"\n    HostInfo        = \"არასასურველი URL-ები ნაპოვნი მასპინძელის ფაილში\"\n    HostBak         = \"იქმნება hosts.bak-ის სარევეზნო ასლი...\"\n    HostDel         = \"ვცდილობთ რომ ამოვიღოთ არასასურველი URL-ები ორიგინალური მასპინძელის ფაილიდან...\"\n    HostError       = \"რაღაც შეცდომა მოხდა მასპინძელის ფაილის რედაქტირებისას, დაარედაქტირეთ ის ხელით ან გაუშვით სკრიპტი ადმინისტრატორის სახით\"\n    PressAnyKey     = \"დააჭირეთ ნებისმიერ ღილაკს გასასვლელად...\"\n}\n"
  },
  {
    "path": "scripts/installer-lang/ko.ps1",
    "content": "[PSCustomObject]@{\n    Welcome         = \"\n╔══════════════════════════════╗\n║ Welcome to SpotX for Windows ║\n╚══════════════════════════════╝\"\n    Incorrect       = \"이런, 잘못된 값이네요,\"\n    Incorrect2      = \"다시 입력해주세요 \"\n    Download        = \"다운로드 오류\"\n    Download2       = \"5초 후 다시 시도합니다...\"\n    Download3       = \"오류 발생\"\n    Download4       = \"네트워크 설정을 확인하시고 다시 실행해주세요\"\n    Download5       = \"Spotify 다운로드 중\"\n    StopScript      = \"스크립트가 중단되었습니다\"\n    MsSpoti         = \"Microsoft Store 버전의 Spotify가 감지되었으며 이는 지원되지 않습니다\"\n    MsSpoti2        = \"Spotify Microsoft Store 버전을 제거할까요? [Y/N]\"\n    MsSpoti3        = \"Spotify Microsoft Store 버전을 자동으로 제거하는 중...\"\n    MsSpoti4        = \"Spotify Microsoft Store 버전을 제거하는 중...\"\n    Prem            = \"프리미엄 계정을 위한 모드...\"\n    OldV            = \"Spotify 구버전을 감지했습니다\"\n    OldV2           = \"Spotify {0} 버전은 오래되었습니다, {1} 버전으로 업데이트하시는 것을 추천합니다\"\n    OldV3           = \"업데이트를 진행할까요? [Y/N]\"\n    AutoUpd         = \"권장 버전으로 자동 업데이트할까요?\"\n    DelOrOver       = \"설치된 {0} 버전을 제거할까요? 아니면 덮어쓰고 설치할까요? Y [제거] / N [덮어쓰고 설치]\"\n    DelOld          = \"구버전의 Spotify를 제거하는 중...\"\n    NewV            = \"지원되지 않는 버전의 Spotify가 감지되었습니다\"\n    NewV2           = \"Spotify {0} 버전은 아직 테스트되지 않았습니다, 현재 최신 안정 버전은 {1} 입니다\"\n    NewV3           = \"{0} 버전으로 진행할까요? (오류가 발생할 수 있음) [Y/N]\"\n    Recom           = \"추천하는 {0} 버전을 설치할까요? [Y/N]\"\n    DelNew          = \"테스트되지 않은 Spotify를 제거하는 중...\"\n    DownSpoti       = \"Spotify를 다운로드하고 설치하는 중\"\n    DownSpoti2      = \"잠시만 기다려 주세요...\"\n    PodcatsOff      = \"팟캐스트 끄기\"\n    PodcastsOn      = \"팟캐스트 켜기\"\n    PodcatsSelect   = \"메인 페이지의 팟캐스트, 에피소드, 오디오북을 비활성화할까요? [Y/N]\"\n    DowngradeNote   = \"Spotify가 다운그레이드되기에 차단하는 것을 추천합니다\"\n    UpdBlock        = \"Spotify 업데이트가 차단됨\"\n    UpdUnblock      = \"Spotify 업데이트가 차단되지 않음\"\n    UpdSelect       = \"Spotify 업데이트를 차단할까요? [Y/N]\"\n    ModSpoti        = \"Spotify를 패치하는 중...\"\n    Error           = \"오류\"\n    FileLocBroken   = \"Spotify 폴더의 파일이 손상되었습니다, Spotify를 제거하고 이 스크립트를 다시 실행하세요\"\n    Spicetify       = \"Spicetify detected, it must be installed after SpotX, open recommended actions in FAQ ? [Y/N]\"\n    NoRestore       = \"SpotX가 이미 설치되었지만, xpui.bak 파일을 찾을 수 없습니다. `nSpotify를 제거하고 Install.bat을 다시 실행해주세요\"\n    InstallComplete = \"설치가 완료되었습니다\"\n    HostInfo        = \"hosts 파일에서 불필요한 URL이 감지되었습니다\"\n    HostBak         = \"hosts.bak 백업 파일을 생성하는 중...\"\n    HostDel         = \"원본 hosts 파일에서 불필요한 URL 제거를 시도하는 중...\"\n    HostError       = \"파일을 수정하는 데 오류가 발생했습니다, 직접 수정하거나 이 스크립트를 관리자 권한으로 실행해주세요\"\n    PressAnyKey     = \"종료하려면 아무 키나 누르십시오...\"\n}\n"
  },
  {
    "path": "scripts/installer-lang/lv.ps1",
    "content": "[PSCustomObject]@{\n    Welcome         = \"\n╔══════════════════════════════╗\n║ Welcome to SpotX for Windows ║\n╚══════════════════════════════╝\"\n    Incorrect       = \"Hmm. Nepareiza vērtība,\"\n    Incorrect2      = \"lūdzu ievadiet to vēlreiz \"\n    Download        = \"Kļūda lejuplādējot\"\n    Download2       = \"Atkārtosim lejuplādi pēc 5 sekundēm...\"\n    Download3       = \"Atkal kļūda\"\n    Download4       = \"Pārbaudi savus tīkla iestatījumus un mēģini instalēt vēlreiz\"\n    Download5       = \"Lejuplādejam Spotify\"\n    StopScript      = \"Skripts ir apstājies\"\n    MsSpoti         = \"Microsoft veikala Spotify versija tika konstatēta, un nav atbalstīta.\"\n    MsSpoti2        = \"Izdzēst Spotify Microsoft Store versiju [Y/N]\"\n    MsSpoti3        = \"Automātiski izdzēš Spotify MS...\"\n    MsSpoti4        = \"Izdzēš Spotify MS...\"\n    Prem            = \"Modifikācija premium kontam...\"\n    OldV            = \"Spotify vecā versija bija konstatēta.\"\n    OldV2           = \"Tava Spotify {0} versija ir novecojusi, bet ir ieteicams atjaunot uz {1} versiju\"\n    OldV3           = \"Vēlies atjaunot? [Y/N]\"\n    AutoUpd         = \"Automātiski atjauno uz ieteicamo versiju\"\n    DelOrOver       = \"Vai vēlies izdzēst līdzšinejo {0} versiju vai instalēt ieteicamo versiju virs vecās? Y [Izdzēst] / N [Instalēt Virs]\"\n    DelOld          = \"Izdzēš veco Spotify...\"\n    NewV            = \"Atrasta neatbalstītā Spotify versija\"\n    NewV2           = \"Tava Spotify {0} versija nav tikusi testēta, šobrīd stabilākā ir {1} versija\"\n    NewV3           = \"Vai vēlies turpināt ar {0} versiju? (ir iespējamas kļūdas) [Y/N]\"\n    Recom           = \"Vai vēlies instalēt ieteikto {0} versiju? [Y/N]\"\n    DelNew          = \"Izdzēšam netestēto Spotify...\"\n    DownSpoti       = \"Lejuplādējam un instalējam Spotify\"\n    DownSpoti2      = \"Lūdzu nedaudz uzgaidiet...\"\n    PodcatsOff      = \"Raidieraksti ir izslēgti\"\n    PodcastsOn      = \"Raidieraksti ir ieslēgti\"\n    PodcatsSelect   = \"Vai vēlies ieslēkt raidierakstus, epizodes un audiogrāmatas no galvenās lapas? [Y/N]\"\n    DowngradeNote   = \"Ir ieteikts izslēgt atjauninājumus, tāpēc ka Spotify versija tika pazemināta.\"\n    UpdBlock        = \"Spotify atjauninājumi ir bloķēti\"\n    UpdUnblock      = \"Spotify atjauninājumi nav bloķēti\"\n    UpdSelect       = \"Vai vēlies bloķēt Spotify atjauninājumus? [Y/N]\"\n    ModSpoti        = \"Modo Spotify...\"\n    Error           = \"Kļūda\"\n    FileLocBroken   = \"Spotify failu atrašanās vieta ir bojāta, atinstalējiet klientu un palaidiet skriptu vēlreiz\"\n    Spicetify       = \"Spicetify ir konstatēts, to ir jāinstalē pēc SpotX, atvērt piemērotākos darbībus BUJ lapā? [Y/N]\"\n    NoRestore       = \"SpotX ir jau instalēts, bet xpui.bak nebija atrasts. `nLūdzu izdzēs Spotify klientu un palaid Install.bat vēlreiz\"\n    InstallComplete = \"Instalācija pabeigta\"\n    HostInfo        = \"hosts failā atrasti nevēlami URL\"\n    HostBak         = \"Dublē hosts.bak ...\"\n    HostDel         = \"Mēģina noņemt nevēlamus URL no sākotnējā hosts faila...\"\n    HostError       = \"Kaut kas greizi aizgāja rediģējot hosts failu, rediģējiet to manuāli vai palaidiet skriptu ar administratora privilēģijām\"\n    PressAnyKey     = \"Nospiediet jebkuru taustiņu, lai izietu...\"\n}\n"
  },
  {
    "path": "scripts/installer-lang/pl.ps1",
    "content": "[PSCustomObject]@{\n    Welcome         = \"\n╔════════════════════════════╗\n║ Witamy w SpotX dla Windows ║\n╚════════════════════════════╝\"\n    Incorrect       = \"Ups, błędna wartość,\"\n    Incorrect2      = \"wejdź ponownie przez \"\n    Download        = \"Błąd podczas pobierania\"\n    Download2       = \"Ponowna próba za 5 sekund...\"\n    Download3       = \"Pobieranie się nie powiodło\"\n    Download4       = \"Sprawdź ustawienia sieci i uruchom instalację ponownie\"\n    Download5       = \"Pobieranie Spotify\"\n    StopScript      = \"Skrypt jest zatrzymany\"\n    MsSpoti         = \"Wykryto wersję Spotify ze Sklepu Microsoft, która nie jest wspierana\"\n    MsSpoti2        = \"Czy chcesz odinstalować wersję Spotify ze Sklepu Microsoft? [Y/N]\"\n    MsSpoti3        = \"Automatyczne odinstalowywanie Spotify z MS...\"\n    MsSpoti4        = \"Odinstalowywanie Spotify MS...\"\n    Prem            = \"Modyfikacja dla konta premium...\"\n    OldV            = \"Znaleziono przestarzałą wersję Spotify\"\n    OldV2           = \"Twoja wersja Spotify {0} jest przestarzała, zalecana jest aktualizacja do wersji {1}\"\n    OldV3           = \"Czy chcesz ją pobrać? [Y/N]\"\n    AutoUpd         = \"Automatyczna aktualizacja do zalecanej wersji\"\n    DelOrOver       = \"Chcesz odinstalować aktualną wersję {0}, czy pobrać nową? Y [Odinstaluj] / N [Pobierz Nową]\"\n    DelOld          = \"Odinstalowywanie nieaktualnej wersji Spotify...\"\n    NewV            = \"Wykryto niewspieraną wersję Spotify\"\n    NewV2           = \"Twoja wersja {0} nie została jeszcze przetestowana, obecna jest to stabilna wersja {1} \"\n    NewV3           = \"Czy chcesz kontynuować z wersją {0} (możliwe błędy)? [Y/N]\"\n    Recom           = \"Czy chcesz pobrać zalecaną wersję {0}? [Y/N]\"\n    DelNew          = \"Odinstalowywanie nieprzetestowanej wersji Spotify...\"\n    DownSpoti       = \"Pobieranie i instalowanie Spotify\"\n    DownSpoti2      = \"Proszę czekać...\"\n    PodcatsOff      = \"Podcasty wyłączone\"\n    PodcastsOn      = \"Podcasty włączone\"\n    PodcatsSelect   = \"Czy chcesz ukryć podcasty, epizody i audiobooki ze strony głównej? [Y/N]\"\n    DowngradeNote   = \"Zalecane jest zablokowanie, ze względu na obniżenie wersji Spotify\"\n    UpdBlock        = \"Aktualizacje Spotify zablokowane\"\n    UpdUnblock      = \"Aktualizacje Spotify nie są zablokowane\"\n    UpdSelect       = \"Czy chcesz zablokować aktualizacje Spotify? [Y/N]\"\n    ModSpoti        = \"Łatanie Spotify...\"\n    Error           = \"Błąd\"\n    FileLocBroken   = \"Lokalizacje plików Spotify jest uszkodzona, odinstaluj klienta Spotify i uruchom skrypt ponownie\"\n    Spicetify       = \"Wykryto Spicetify. Należy zainstalować je po SpotX. Czy otworzyć zalecane działania w FAQ? [Y/N]\"\n    NoRestore       = \"SpotX został już pobrany, lecz xpui.bak nie został znaleziony. `nProszę odinstalować klienta Spotify i uruchomić Install.bat ponownie\"\n    InstallComplete = \"instalacja zakończona\"\n    HostInfo        = \"Niepożądane adresy URL znalezione w plikach hosts\"\n    HostBak         = \"Tworzenie kopii zapasowej pliku hosts.bak...\"\n    HostDel         = \"Próba usunięcia niechcianych adresów URL z oryginalnego pliku hosts...\"\n    HostError       = \"Coś poszło nie tak podczas edycji pliku hosts, edytuj go ręcznie lub uruchom skrypt jako administrator\"\n    PressAnyKey     = \"Naciśnij dowolny klawisz, aby wyjść...\"\n}\n"
  },
  {
    "path": "scripts/installer-lang/pt.ps1",
    "content": "[PSCustomObject]@{\n    Welcome         = \"\n╔═════════════════════════════════╗\n║ Bem-vindo ao SpotX para Windows ║\n╚═════════════════════════════════╝\"\n    Incorrect       = \"Ops, um valor incorreto,\"\n    Incorrect2      = \"entre novamente por \"\n    Download        = \"Erro no download\"\n    Download2       = \"Solicitando novamente em 5 segundos...\"\n    Download3       = \"Erro de novo\"\n    Download4       = \"Verifique suas configurações de rede e tente executar a instalação novamente\"\n    Download5       = \"Baixando o Spotify\"\n    StopScript      = \"O script foi interrompido\"\n    MsSpoti         = \"A versão do Spotify da Microsoft Store foi detectada, a qual não é suportada\"\n    MsSpoti2        = \"Desinstalar edição do Spotify da Microsoft Store [Y/N]\"\n    MsSpoti3        = \"Desinstalação automática do Spotify da MS...\"\n    MsSpoti4        = \"Desinstalando Spotify da MS...\"\n    Prem            = \"Modificação para conta Premium...\"\n    OldV            = \"Encontrada uma versão desatualizada do Spotify\"\n    OldV2           = \"A sua versão {0} do Spotify está desatualizada, é recomendado atualizar para {1}\"\n    OldV3           = \"Gostaria de atualizar? [Y/N]\"\n    AutoUpd         = \"Atualização automática para a versão recomendada\"\n    DelOrOver       = \"Gostaria de desinstalar a versão atual {0} ou substituir a instalação atual? Y [Desinstalar] / N [Substituir]\"\n    DelOld          = \"Desinstalando a versão antiga do Spotify...\"\n    NewV            = \"Encontrada uma versão não suportada do Spotify\"\n    NewV2           = \"A sua versão do Spotify {0} não foi testada ainda, no momento, há uma versão estável {1}\"\n    NewV3           = \"Gostaria de continuar com a versão {0} (possíveis erros) ? [Y/N]\"\n    Recom           = \"Gostaria de instalar a versão recomendada {0}? [Y/N]\"\n    DelNew          = \"Desinstalando versão não testada do Spotify...\"\n    DownSpoti       = \"Baixando e instalando o Spotify\"\n    DownSpoti2      = \"Aguarde...\"\n    PodcatsOff      = \"Podcasts desativado\"\n    PodcastsOn      = \"Podcasts ativado\"\n    PodcatsSelect   = \"Gostaria de desativar os podcasts, episódios e audiobooks da página principal? [Y/N]\"\n    DowngradeNote   = \"É recomendado bloquear, pois houve um downgrade do Spotify\"\n    UpdBlock        = \"Atualizações do Spotify bloqueadas\"\n    UpdUnblock      = \"Atualizações do Spotify não bloqueadas\"\n    UpdSelect       = \"Deseja bloquear as atualizações do Spotify? [Y/N]\"\n    ModSpoti        = \"Aplicando patch no Spotify...\"\n    Error           = \"Erro\"\n    FileLocBroken   = \"A localização dos arquivos do Spotify está incorreta, desinstale o Spotify e execute o script novamente\"\n    Spicetify       = \"Spicetify detected, it must be installed after SpotX, open recommended actions in FAQ ? [Y/N]\"\n    NoRestore       = \"O SpotX já foi instalado, xpui.bak não encontrado. `nPor favor, desinstale o cliente do Spotify e execute Install.bat novamente\"\n    InstallComplete = \"instalação concluída\"\n    HostInfo        = \"URLs indesejados encontradas no arquivo hosts\"\n    HostBak         = \"Fazendo backup de hosts.bak...\"\n    HostDel         = \"Tentando remover URLs indesejados do arquivo hosts original...\"\n    HostError       = \"Algo deu errado ao editar o arquivo hosts, edite-o manualmente ou execute o script como Administrador\"\n    PressAnyKey     = \"Pressione qualquer tecla para sair...\"\n}\n"
  },
  {
    "path": "scripts/installer-lang/ro.ps1",
    "content": "[PSCustomObject]@{\n    Welcome         = \"\n╔════════════════════════════════════════╗\n║ Bine ați venit la SpotX pentru Windows ║\n╚════════════════════════════════════════╝\"\n    Incorrect       = \"Ups, o valoare incorectă,\"\n    Incorrect2      = \"introduceți din nou prin \"\n    Download        = \"Eroare la descărcare\"\n    Download2       = \"Va solicita din nou în 5 secunde...\"\n    Download3       = \"Eroare din nou\"\n    Download4       = \"Verificați setările de rețea și rulați din nou instalarea\"\n    Download5       = \"Se descarca Spotify\"\n    StopScript      = \"Scriptul a fost oprit\"\n    MsSpoti         = \"A fost detectată versiunea Microsoft Store a Spotify, care nu este suportată\"\n    MsSpoti2        = \"Dezinstalati versiunea Microsoft Store a Spotify [Y/N]\"\n    MsSpoti3        = \"Dezinstalare automată a Spotify MS...\"\n    MsSpoti4        = \"Se dezinstaleaza Spotify MS...\"\n    Prem            = \"Modificare pentru contul premium...\"\n    OldV            = \"Am găsit o versiune învechită a Spotify\"\n    OldV2           = \"Versiunea dvs. de Spotify {0} este învechită, se recomandă actualizarea la {1}\"\n    OldV3           = \"Doriți să faceți o actualizare ? [Y/N]\"\n    AutoUpd         = \"Actualizare automată la versiunea recomandată\"\n    DelOrOver       = \"Doriți să dezinstalați versiunea curentă de {0} sau să o instalați peste ea? Y [Dezinstalare] / N [Instalare peste]\"\n    DelOld          = \"Dezinstalarea vechiului Spotify...\"\n    NewV            = \"A fost găsită o versiune nesuportată de Spotify\"\n    NewV2           = \"Versiunea dvs. de Spotify {0} nu a fost încă testată, în prezent este o versiune stabilă {1}\"\n    NewV3           = \"Doriți să continuați cu versiunea {0} (sunt posibile erori)? [Y/N]\"\n    Recom           = \"Doriți să instalați versiunea recomandată {0}? [Y/N]\"\n    DelNew          = \"Se dezinstalează Spotify-ul netestat...\"\n    DownSpoti       = \"Se descarcă și instalează Spotify\"\n    DownSpoti2      = \"Vă rugăm să așteptați...\"\n    PodcatsOff      = \"Podcasturi dezactivate\"\n    PodcastsOn      = \"Podcasturi activate\"\n    PodcatsSelect   = \"Doriți să dezactivați podcasturile, episoadele si cartile audio de pe pagina principală? [Y/N]\"\n    DowngradeNote   = \"Se recomandă blocarea deoarece a avut loc un downgrade al Spotify\"\n    UpdBlock        = \"Actualizările Spotify au fost blocate\"\n    UpdUnblock      = \"Actualizările Spotify nu sunt blocate\"\n    UpdSelect       = \"Doriți să blocați actualizările Spotify? [Y/N]\"\n    ModSpoti        = \"Se patchuiește Spotify...\"\n    Error           = \"Eroare\"\n    FileLocBroken   = \"Locația fișierelor Spotify este stricată, dezinstalați clientul și rulați din nou scriptul\"\n    Spicetify       = \"Spicetify detected, it must be installed after SpotX, open recommended actions in FAQ ? [Y/N]\"\n    NoRestore       = \"SpotX a fost deja instalat, xpui.bak nu a fost găsit. `nVă rugăm să dezinstalați clientul Spotify și să rulați din nou Install.bat\"\n    InstallComplete = \"Instalare completă!\"\n    HostInfo        = \"URL-uri nedorite au fost găsite in fișierul hosts\"\n    HostBak         = \"Se efectuează o copie de siguranță a fișierului hosts.bak...\"\n    HostDel         = \"Se încearcă eliminarea URL-urilor nedorite din fișierul original hosts...\"\n    HostError       = \"Ceva nu a mers bine in timpul editării fișierului hosts, editează-l manual sau rulează scriptul ca Administrator.\"\n    PressAnyKey     = \"Apăsați orice tastă pentru a ieși...\"\n}\n"
  },
  {
    "path": "scripts/installer-lang/ru.ps1",
    "content": "[PSCustomObject]@{\n    Welcome         = \"\n╔══════════════════════════════════════╗\n║ Добро пожаловать в SpotX для Windows ║\n╚══════════════════════════════════════╝\"\n    Incorrect       = \"Ой, некорректное значение,\"\n    Incorrect2      = \"повторите ввод через\"\n    Download        = \"Ошибка загрузки\"\n    Download2       = \"Повторный запрос через 5 секунд...\"\n    Download3       = \"Опять ошибка\"\n    Download4       = \"Проверьте настройки вашей сети и снова запустите установку\"\n    Download5       = \"Загрузка Spotify\"\n    StopScript      = \"Cкрипт остановлен\"\n    MsSpoti         = \"Обнаружена версия Spotify из Microsoft Store, которая не поддерживается\"\n    MsSpoti2        = \"Удалить Spotify Microsoft Store ? [Y/N]\"\n    MsSpoti3        = \"Автоматическое удаление Spotify MS...\"\n    MsSpoti4        = \"Удаление Spotify MS...\"\n    Prem            = \"Модификация для премиум аккаунта...\"\n    OldV            = \"Найдена устаревшая версия Spotify\"\n    OldV2           = \"Ваша версия Spotify ({0}) устарела. Текущая актуальная версия — {1}\"\n    OldV3           = \"Обновить ? [Y/N]\"\n    AutoUpd         = \"Автоматическое обновление до рекомендуемой версии\"\n    DelOrOver       = \"Удалить текущую версию ({0}) или установить поверх? Y [Удалить] / N [Поверх]\"\n    DelOld          = \"Удаление устаревшего Spotify...\"\n    NewV            = \"Найдена неподдерживаемая версия Spotify\"\n    NewV2           = \"Ваша версия Spotify ({0}) не тестировалась. Стабильная версия для SpotX — {1}\"\n    NewV3           = \"Продолжить с {0} (возможны ошибки) ? [Y/N]\"\n    Recom           = \"Установить последнюю версию {0} ? [Y/N]\"\n    DelNew          = \"Удаление неподдерживаемого Spotify...\"\n    DownSpoti       = \"Загружаю и устанавливаю Spotify\"\n    DownSpoti2      = \"Пожалуйста подождите...\"\n    PodcatsOff      = \"Подкасты отключены\"\n    PodcastsOn      = \"Подкасты не отключены\"\n    PodcatsSelect   = \"Скрыть подкасты, шоу и аудиокниги на главной странице ? [Y/N]\"\n    DowngradeNote   = \"Рекомендуется заблокировать т.к. уже существует более новая версия Spotify\"\n    UpdBlock        = \"Обновления Spotify заблокированы\"\n    UpdUnblock      = \"Обновления Spotify не заблокированы\"\n    UpdSelect       = \"Заблокировать обновления Spotify ? [Y/N]\"\n    ModSpoti        = \"Модифицирую Spotify...\"\n    Error           = \"Ошибка\"\n    FileLocBroken   = \"Расположение файлов Spotify нарушено, удалите клиент Spotify и снова запустите скрипт\"\n    Spicetify       = \"Обнаружен Spicetify, он должен быть установлен после SpotX, открыть рекомендуемые действия в FAQ ? [Y/N]\"\n    NoRestore       = \"SpotX уже был установлен, но файл для восстановления xpui.bak не найден. `nУдалите клиент Spotify и снова запустите Install.bat\"\n    InstallComplete = \"Установка завершена\"\n    HostInfo        = \"В файле hosts найдены нежелательные Url-адреса\"\n    HostBak         = \"Создаю резервную копию hosts.bak...\"\n    HostDel         = \"Попытка удалить нежелательные Url-адреса из оригинального файла hosts...\"\n    HostError       = \"Что-то пошло не так при редактировании файла hosts, отредактируйте его вручную или запустите скрипт от администратора\"\n    PressAnyKey     = \"Нажмите любую клавишу для выхода...\"\n}\n"
  },
  {
    "path": "scripts/installer-lang/sk.ps1",
    "content": "[PSCustomObject]@{\n    Welcome         = \"\n╔══════════════════════════════╗\n║ Welcome to SpotX for Windows ║\n╚══════════════════════════════╝\"\n    Incorrect       = \"Ups, nesprávna hodnota,\"\n    Incorrect2      = \"zadaj znova cez \"\n    Download        = \"Chyba pri sťahovaní\"\n    Download2       = \"Skúsim znova o 5 sekúnd...\"\n    Download3       = \"Chyba znova\"\n    Download4       = \"Pozri sa na nastavenia siete a spusti inštaláciu znova\"\n    Download5       = \"Sťahujem Spotify\"\n    StopScript      = \"Skript je zastavený\"\n    MsSpoti         = \"Verzia Spotify z Microsoft Store bola detekovaná, táto verzia nie je podporovaná\"\n    MsSpoti2        = \"Odinštaluj Microsoft Store Spotify verziu [Y/N]\"\n    MsSpoti3        = \"Automaticky odinštalovávam Spotify z Microsoft Store...\"\n    MsSpoti4        = \"Odinštalovávam Spotify z Microsoft Store...\"\n    Prem            = \"Úprava kvôli prémiovému účtu...\"\n    OldV            = \"Nájdená stará verzia Spotify\"\n    OldV2           = \"Tvoja Spotify {0} verzia je stará, je odporúčané aktualizovať na verziu {1}\"\n    OldV3           = \"Chcete aktualizovať ? [Y/N]\"\n    AutoUpd         = \"Automatická aktualizácia na odporúčanú verziu\"\n    DelOrOver       = \"Chcete odinštalovať terajšiu verziu {0} alebo inštalovať novšiu na terajšiu(ostanú niektoré súbory)? Y [Odinštaluj] / N [Inštaluj novšiu na terajšiu]\"\n    DelOld          = \"Odinštalovávam staré Spotify...\"\n    NewV            = \"Nepodporovaná verzia Spotify bola nájdená\"\n    NewV2           = \"Tvoja Spotify {0} verzia zatiaľ nebola testovaná, teraz je stabilná {1} verzia\"\n    NewV3           = \"Chcete pokračovať s {0} verziou (môžu nastať chyby) ? [Y/N]\"\n    Recom           = \"Chcete nainštalovať odporúčanú {0} verziu ? [Y/N]\"\n    DelNew          = \"Odinštalovávam netestovanú verziu Spotify...\"\n    DownSpoti       = \"Sťahujem a inštalujem Spotify\"\n    DownSpoti2      = \"Prosím čakajte...\"\n    PodcatsOff      = \"Vypni podcasty\"\n    PodcastsOn      = \"Zapni podcasty/Nechaj zapnuté\"\n    PodcatsSelect   = \"Chceš vypnúť podcasty, epizódy a audioknihy z hlavnej stránky? [Y/N]\"\n    DowngradeNote   = \"Je odporúčané blokovanie pretože bola nainštalovaná staršia verzia Spotify\"\n    UpdBlock        = \"Spotify aktualizácie blokované\"\n    UpdUnblock      = \"Spotify aktualizácie nie sú blokované\"\n    UpdSelect       = \"Chcete blokovať Spotify aktualizácie? [Y/N]\"\n    ModSpoti        = \"Upravovanie Spotify...\"\n    Error           = \"Chyba\"\n    FileLocBroken   = \"Umiestnenie Spotify súborov je chybné, odinštaluj Spotify klient a spusti skript znova\"\n    Spicetify       = \"Spicetify nájdené, musí byť inštalované po SpotX, otvoriť odporúčané akcie vo FAQ ? [Y/N]\"\n    NoRestore       = \"SpotX už bol nainštalovaný, xpui.bak sa nenašlo. `nProsím odinštaluj Spotify klient a spusti Install.bat znova\"\n    InstallComplete = \"Inštalácia dokončená\"\n    HostInfo        = \"Nechcené URLs nájdené v súbore hosts\"\n    HostBak         = \"Zálohujem súbor hosts.bak...\"\n    HostDel         = \"Pokúšam sa odobrať nechcené URLs z originálneho hosts súboru...\"\n    HostError       = \"Niečo sa nepodarilo s upravovaním súboru hosts, uprav ho manuálne alebo spusti skript ako administrátor\"\n    PressAnyKey     = \"Stlačte ľubovoľnú klávesu pre ukončenie...\"\n}\n"
  },
  {
    "path": "scripts/installer-lang/sr-Latn.ps1",
    "content": "[PSCustomObject]@{\n    Welcome         = \"\n╔══════════════════════════════╗\n║ Welcome to SpotX for Windows ║\n╚══════════════════════════════╝\"\n    Incorrect       = \"Ups, netačna vrednost,\"\n    Incorrect2      = \"unesite ponovo za \"\n    Download        = \"Greška preuzimanja\"\n    Download2       = \"Ponovan zahtev za 5 sekundi...\"\n    Download3       = \"Ponovo greška\"\n    Download4       = \"Proverite svoje postavke mreže i pokrenite instalaciju još jednom\"\n    Download5       = \"Preuzimanje Spotify-ja\"\n    StopScript      = \"Skripta zaustavljena\"\n    MsSpoti         = \"Detektovana je verzija Spotify-ja iz Microsoft Store-a, što nije podržano\"\n    MsSpoti2        = \"Deinstalirati verziju Spotify-ja iz Microsoft Store-a? [Y/N]\"\n    MsSpoti3        = \"Automatska deinstalacija Spotify MS...\"\n    MsSpoti4        = \"Deinstalacija Spotify MS...\"\n    Prem            = \"Modifikacija za premijum nalog...\"\n    OldV            = \"Pronađena je zastarela verzija Spotify-ja\"\n    OldV2           = \"Vaša verzija Spotify-ja {0} je zastarela, trenutno najnovija verzija je {1}\"\n    OldV3           = \"Želite li da ažurirate? [Y/N]\"\n    AutoUpd         = \"Automatsko ažuriranje na preporučenu verziju\"\n    DelOrOver       = \"Želite li da deinstalirate trenutnu verziju {0} ili da instalirate preko nje? Y [Deinstaliraj] / N [Preko]\"\n    DelOld          = \"Deinstalacija starog Spotify-ja...\"\n    NewV            = \"Pronađena je nepodržana verzija Spotify-ja\"\n    NewV2           = \"Vaša verzija Spotify-ja {0} još nije testirana, trenutna stabilna verzija je {1}\"\n    NewV3           = \"Želite li da nastavite sa verzijom {0} (moguće su greške)? [Y/N]\"\n    Recom           = \"Želite li da instalirate poslednju verziju {0}? [Y/N]\"\n    DelNew          = \"Deinstalacija netestiranog Spotify-ja...\"\n    DownSpoti       = \"Preuzimanje i instalacija Spotify-ja\"\n    DownSpoti2      = \"Molimo sačekajte...\"\n    PodcatsOff      = \"Isključi podkaste\"\n    PodcastsOn      = \"Uključi podkaste\"\n    PodcatsSelect   = \"Želite li da onemogućite podkaste, epizode i audioknjige na početnoj strani? [Y/N]\"\n    DowngradeNote   = \"Preporučuje se da blokirate pošto je Spotify bio daungrejdovan\"\n    UpdBlock        = \"Ažuriranja Spotify-ja blokirana\"\n    UpdUnblock      = \"Ažuriranja Spotify-ja nisu blokirana\"\n    UpdSelect       = \"Želite li da blokirate ažuriranja Spotify-ja? [Y/N]\"\n    ModSpoti        = \"Krpljenje Spotify-ja...\"\n    Error           = \"Greška\"\n    FileLocBroken   = \"Lokacija fajlova Spotify-ja je narušena, deinstalirajte klijent, pa pokrenite skriptu ponovo\"\n    Spicetify       = \"Detektovan je Spicetify koji mora biti instaliran nakon SpotX-a, otvori preporučene akcije u FAQ-u? [Y/N]\"\n    NoRestore       = \"SpotX je već bio instaliran, xpui.bak nije pronađen. `nMolimo deinstalirajte Spotify klijent i pokrenite Install.bat ponovo\"\n    InstallComplete = \"instalacija završena\"\n    HostInfo        = \"Neželjeni URL-ovi pronađeni u hosts fajlu\"\n    HostBak         = \"Pravljenje rezervne kopije hosts.bak...\"\n    HostDel         = \"Pokušavamo da uklonimo neželjene URL-ove iz originalnog hosts fajla...\"\n    HostError       = \"Nešto je pošlo naopako tokom uređivanja hosts fajla, uredite ga ručno ili pokrenite skriptu kao administrator\"\n    PressAnyKey     = \"Pritisnite bilo koji taster da izađete...\"\n}\n"
  },
  {
    "path": "scripts/installer-lang/sr.ps1",
    "content": "[PSCustomObject]@{\n    Welcome         = \"\n╔══════════════════════════════╗\n║ Welcome to SpotX for Windows ║\n╚══════════════════════════════╝\"\n    Incorrect       = \"Упс, нетачна вредност,\"\n    Incorrect2      = \"унесите поново за \"\n    Download        = \"Грешка преузимања\"\n    Download2       = \"Понован захтев за 5 секунди...\"\n    Download3       = \"Поново грешка\"\n    Download4       = \"Проверите своје поставке мреже и покрените инсталацију још једном\"\n    Download5       = \"Преузимање Spotify-ја\"\n    StopScript      = \"Скрипта заустављена\"\n    MsSpoti         = \"Детектована је верзија Spotify-ја из Microsoft Store-а, што није подржано\"\n    MsSpoti2        = \"Деинсталирати верзију Spotify-ја из Microsoft Store-а? [Y/N]\"\n    MsSpoti3        = \"Аутоматска деинсталација Spotify MS...\"\n    MsSpoti4        = \"Деинсталација Spotify MS...\"\n    Prem            = \"Модификација за премијум налог...\"\n    OldV            = \"Пронађена је застарела верзија Spotify-ја\"\n    OldV2           = \"Ваша верзија Spotify-ја {0} је застарела, тренутно најновија верзија је {1}\"\n    OldV3           = \"Желите ли да ажурирате? [Y/N]\"\n    AutoUpd         = \"Аутоматско ажурирање на препоручену верзију\"\n    DelOrOver       = \"Желите ли да деинсталирате тренутну верзију {0} или да инсталирате преко ње? Y [Деинсталирај] / N [Преко]\"\n    DelOld          = \"Деинсталација старог Spotify-ја...\"\n    NewV            = \"Пронађена је неподржана верзија Spotify-ја\"\n    NewV2           = \"Ваша верзија Spotify-ја {0} још није тестирана, тренутна стабилна верзија је {1}\"\n    NewV3           = \"Желите ли да наставите са верзијом {0} (могуће су грешке)? [Y/N]\"\n    Recom           = \"Желите ли да инсталирате последњу верзију {0}? [Y/N]\"\n    DelNew          = \"Деинсталација нетестираног Spotify-ја...\"\n    DownSpoti       = \"Преузимање и инсталација Spotify-ја\"\n    DownSpoti2      = \"Молимо сачекајте...\"\n    PodcatsOff      = \"Искључи подкасте\"\n    PodcastsOn      = \"Укључи подкасте\"\n    PodcatsSelect   = \"Желите ли да онемогућите подкасте, епизоде и аудиокњиге на почетној страни? [Y/N]\"\n    DowngradeNote   = \"Препоручује се да блокирате пошто је Spotify био даунгрејдован\"\n    UpdBlock        = \"Ажурирања Spotify-ја блокирана\"\n    UpdUnblock      = \"Ажурирања Spotify-ја нису блокирана\"\n    UpdSelect       = \"Желите ли да блокирате ажурирања Spotify-ја? [Y/N]\"\n    ModSpoti        = \"Крпљење Spotify-ја...\"\n    Error           = \"Грешка\"\n    FileLocBroken   = \"Локација фајлова Spotify-ја је нарушена, деинсталирајте клијент, па покрените скрипту поново\"\n    Spicetify       = \"Детектован је Spicetify који мора бити инсталиран након SpotX-а, отвори препоручене акције у FAQ-у? [Y/N]\"\n    NoRestore       = \"SpotX је већ био инсталиран, xpui.bak није пронађен. `nМолимо деинсталирајте Spotify клијент и покрените Install.bat поново\"\n    InstallComplete = \"инсталација завршена\"\n    HostInfo        = \"Нежељени URL-ови пронађени у hosts фајлу\"\n    HostBak         = \"Прављење резервне копије hosts.bak...\"\n    HostDel         = \"Покушавамо да уклонимо нежељене URL-ове из оригиналног hosts фајла...\"\n    HostError       = \"Нешто је пошло наопако током уређивања hosts фајла, уредите га ручно или покрените скрипту као администратор\"\n    PressAnyKey     = \"Притисните било који тастер да изађете...\"\n}\n"
  },
  {
    "path": "scripts/installer-lang/sv.ps1",
    "content": "[PSCustomObject]@{\n    Welcome         = \"\n╔══════════════════════════════════╗\n║ Välkommen till SpotX för Windows ║\n╚══════════════════════════════════╝\"\n    Incorrect       = \"Hoppsan, ett felaktigt värde,\"\n    Incorrect2      = \"ange igen igenom \"\n    Download        = \"Fel vid nedladdning\"\n    Download2       = \"Försöker igen om 5 sekunder...\"\n    Download3       = \"Fel igen\"\n    Download4       = \"Kontrollera dina nätverksinställningar och kör installationen igen\"\n    Download5       = \"Laddar ner Spotify\"\n    StopScript      = \"Skriptet har stoppats\"\n    MsSpoti         = \"Microsoft Store versionen av Spotify har upptäckts som inte stöds\"\n    MsSpoti2        = \"Avinstallera Spotify Microsoft Store versionen [Y/N]\"\n    MsSpoti3        = \"Avinstallerar Spotify MS automatiskt...\"\n    MsSpoti4        = \"Avinstallerar Spotify MS...\"\n    Prem            = \"Modifiering för premiumkonto...\"\n    OldV            = \"Hittade en föråldrad version av Spotify\"\n    OldV2           = \"Din Spotify {0} version är föråldrad, det rekommenderas att uppgradera till {1}\"\n    OldV3           = \"Vill du uppdatera? [Y/N]\"\n    AutoUpd         = \"Automatisk uppdatering till den rekommenderade versionen\"\n    DelOrOver       = \"Vill du avinstallera den aktuella versionen av {0} eller installera över den? Y [Avinstallera] / N [Installera över]\"\n    DelOld          = \"Avinstallerar gamla Spotify...\"\n    NewV            = \"En version av Spotify som inte stöds hittades\"\n    NewV2           = \"Din Spotify {0} version har inte testats ännu, för närvarande är den en stabil {1} version\"\n    NewV3           = \"Vill du fortsätta med {0} version (fel möjliga)? [Y/N]\"\n    Recom           = \"Vill du installera den rekommenderade versionen av {0}? [Y/N]\"\n    DelNew          = \"Avinstallerar en oprövad Spotify...\"\n    DownSpoti       = \"Ladda ner och installerar Spotify\"\n    DownSpoti2      = \"Vänta...\"\n    PodcatsOff      = \"Podcasts av\"\n    PodcastsOn      = \"Podcasts på\"\n    PodcatsSelect   = \"Vill du inaktivera poddar, avsnitt och ljudböcker från huvudsidan? [Y/N]\"\n    DowngradeNote   = \"Det rekommenderas att blockera eftersom Spotify har nedgraderats\"\n    UpdBlock        = \"Spotify uppdateringar blockerade\"\n    UpdUnblock      = \"Spotify uppdateringar är inte blockerade\"\n    UpdSelect       = \"Vill du blockera Spotify uppdateringar? [Y/N]\"\n    ModSpoti        = \"Patchar Spotify...\"\n    Error           = \"Fel\"\n    FileLocBroken   = \"Platsen för Spotify filer är trasig, avinstallera Spotify klienten och kör skriptet igen\"\n    Spicetify       = \"Spicetify upptäckt, det måste installeras efter SpotX, öppna rekommenderade åtgärder i FAQ ? [Y/N]\"\n    NoRestore       = \"SpotX har redan installerats, xpui.bak hittades inte. `nAvinstallera Spotify klienten och kör Install.bat igen\"\n    InstallComplete = \"installationen avslutad\"\n    HostInfo        = \"Oönskade webbadresser hittades i hosts-filen\"\n    HostBak         = \"Backar upp hosts.bak...\"\n    HostDel         = \"Försöker ta bort oönskade webbadresser från den ursprungliga hosts filen...\"\n    HostError       = \"Något gick fel vid redigering av hosts filen, redigera den manuellt eller kör skriptet som administratör\"\n    PressAnyKey     = \"Tryck på valfri tangent för att avsluta...\"\n}\n"
  },
  {
    "path": "scripts/installer-lang/ta.ps1",
    "content": "[PSCustomObject]@{\n    Welcome         = \"\n╔════════════════════════════════╗\n║ Windows SpotXக்கு வரவேற்கிறோம் ║\n╚════════════════════════════════╝\"\n    Incorrect       = \"அச்சச்சோ, தவறான மதிப்பு,\"\n    Incorrect2      = \"மீண்டும் உள்ளிடவும்\"\n    Download        = \"பதிவிறக்குவதில் பிழை\"\n    Download2       = \"5 வினாடிகளில் மீண்டும் வேண்டுகோள் விடுக்கப்படும்...\"\n    Download3       = \"மீண்டும் பிழை\"\n    Download4       = \"உங்கள் பிணைய அமைப்புகளைச் சரிபார்த்து, நிறுவலை மீண்டும் இயக்கவும்\"\n    Download5       = \"Spotifyயைப் பதிவிறக்குகிறது\"\n    StopScript      = \"Script நிறுத்தப்பட்டது\"\n    MsSpoti         = \"Spotifyயின் Microsoft Store பதிப்பு கண்டறியப்பட்டது, அதை ஆதரிக்கவில்லை\"\n    MsSpoti2        = \"Microsoft Store Spotify பதிப்பை நிறுவல் நீக்கவும் [Y/N]\"\n    MsSpoti3        = \"MS Spotifyயை தானாக நிறுவல் நீக்குகிறது...\"\n    MsSpoti4        = \"MS Spotifyயை நிறுவல் நீக்குகிறது...\"\n    Prem            = \"Premium கணக்கிற்கான மாற்றம்...\"\n    OldV            = \"Spotifyயின் காலாவதியான பதிப்பு கண்டறியப்பட்டது\"\n    OldV2           = \"உங்கள் Spotify {0} பதிப்பு காலாவதியானது, {1}க்கு மேம்படுத்த பரிந்துரைக்கப்படுகிறது\"\n    OldV3           = \"புதுப்பிக்க வேண்டுமா? [Y/N]\"\n    AutoUpd         = \"பரிந்துரைக்கப்பட்ட பதிப்பிற்கான தானியங்கி புதுப்பிப்பு\"\n    DelOrOver       = \"{0}யின் தற்போதைய பதிப்பை நிறுவல்நீக்கம் செய்ய விரும்புகிறீர்களா அல்லது நீங்கள் அதன் மீதே நிறுவ விரும்புகிறீர்கள்? Y [Uninstall] / N [Install Over]\"\n    DelOld          = \"பழைய Spotifyயை நிறுவல் நீக்குகிறது...\"\n    NewV            = \"Spotifyயின் ஆதரிக்கப்படாத பதிப்பு கண்டறியப்பட்டது\"\n    NewV2           = \"உங்கள் Spotify {0} பதிப்பு இன்னும் சோதிக்கப்படவில்லை, தற்போது {1} பதிப்பு நிலையானது\"\n    NewV3           = \"{0} பதிப்பைத் தொடர விரும்புகிறீர்களா (பிழைகள் சாத்தியம்) ? [Y/N]\"\n    Recom           = \"பரிந்துரைக்கப்பட்ட {0} பதிப்பை நிறுவ விரும்புகிறீர்களா ? [Y/N]\"\n    DelNew          = \"சோதிக்கப்படாத Spotifyயை நிறுவல் நீக்குகிறது...\"\n    DownSpoti       = \"Spotifyயைப் பதிவிறக்கி நிறுவுகிறது\"\n    DownSpoti2      = \"தயவுசெய்து காத்திருங்கள்...\"\n    PodcatsOff      = \"Off Podcasts\"\n    PodcastsOn      = \"On Podcasts\"\n    PodcatsSelect   = \"முகப்பு பக்கத்திலிருந்து Podcastகள், அத்தியாயங்கள் மற்றும் ஒலிபதிப்பு புத்தகங்களை முடக்க விரும்புகிறீர்களா? [Y/N]\"\n    DowngradeNote   = \"Spotify தரமிறக்கப்பட்டதால் தடுக்க பரிந்துரைக்கப்படுகிறது\"\n    UpdBlock        = \"Spotify புதுப்பிப்புகள் துண்டிக்கப்படவில்லை\"\n    UpdUnblock      = \"Spotify புதுப்பிப்புகள் துண்டிக்கப்பட்டது\"\n    UpdSelect       = \"Spotify புதுப்பிப்புகளைத் தடுக்க வேண்டுமா? [Y/N]\"\n    ModSpoti        = \"Spotifyயை Patch செய்யப்படுகிறது...\"\n    Error           = \"பிழை\"\n    FileLocBroken   = \"Spotify கோப்புகளின் இருப்பிடம் மாறிவிட்டது, Spotify clientயை நிறுவல் நீக்கி Scriptயை மீண்டும் இயக்கவும்\"\n    Spicetify       = \"Spicetify கண்டறியப்பட்டது, இது SpotX க்குப் பிறகு நிறுவப்பட வேண்டும், FAQ இல் பரிந்துரைக்கப்பட்ட செயல்களைத் திறக்க விரும்புகிறீர்களா? [Y/N]\"\n    NoRestore       = \"SpotX ஏற்கனவே நிறுவப்பட்டது, xpui.bak காணப்படவில்லை. 'nதயவுசெய்து Spotify clientயை நிறுவல் நீக்கி Install.batயை மீண்டும் இயக்கவும்\"\n    InstallComplete = \"நிறுவல் முடிந்தது\"\n    HostInfo        = \"Host filesல் தேவையற்ற URL கள் கண்டறியப்படுகின்றன\"\n    HostBak         = \"hosts.bak காப்புப்பிரதி...\"\n    HostDel         = \"Original host filesலிருந்து தேவையற்ற URL களை அகற்ற முயற்சிக்கிறது ...\"\n    HostError       = \"Hosts Filesயைத் திருத்தும் போது ஏதோ தவறு ஏற்பட்டது, அதை manualலாக திருத்தவும் அல்லது Scriptயை administratorராக இயக்கவும்\"\n    PressAnyKey     = \"Press any key to exit...\"\n}\n"
  },
  {
    "path": "scripts/installer-lang/tr.ps1",
    "content": "[PSCustomObject]@{\n    Welcome         = \"\n╔══════════════════════════════════╗\n║ Windows için SpotX'e Hoşgeldiniz ║\n╚══════════════════════════════════╝\"\n    Incorrect       = \"Eyvah, yanlış bir değer,\"\n    Incorrect2      = \"tekrar girin \"\n    Download        = \"İndirirken hata oluştu\"\n    Download2       = \"5 saniye içinde tekrar talep edilecek...\"\n    Download3       = \"Yine hata oluştu\"\n    Download4       = \"Ağ ayarlarınızı kontrol edin ve kurulumu tekrar çalıştırın\"\n    Download5       = \"Spotify indiriliyor\"\n    StopScript      = \"Komut dosyası durduruldu\"\n    MsSpoti         = \"Spotify'ın desteklenmeyen Microsoft Store sürümü tespit edildi\"\n    MsSpoti2        = \"Spotify'ın Microsoft Store sürümünü kaldır [Y/N]\"\n    MsSpoti3        = \"Spotify MS otomatik olarak kaldırlıyor...\"\n    MsSpoti4        = \"Spotify MS kaldırılıyor...\"\n    Prem            = \"Premium hesap için modifikasyon ...\"\n    OldV            = \"Spotify'ın eski bir sürümü bulundu\"\n    OldV2           = \"Spotify'ın {0} sürümü güncel değil, {1} sürümüne yükseltmeniz önerilir\"\n    OldV3           = \"Güncelleme yapılsın mı? [Y/N]\"\n    AutoUpd         = \"Önerilen sürüme otomatik olarak güncelle\"\n    DelOrOver       = \"Mevcut {0} sürümünü kaldırmak mı yoksa üzerine yüklemek mi istiyorsunuz? Y [Kaldır] / N [Üzerine Yükle]\"\n    DelOld          = \"Eski Spotify kaldırılıyor...\"\n    NewV            = \"Desteklenmeyen Spotify sürümü bulundu\"\n    NewV2           = \"Spotify {0} sürümü henüz test edilmedi, şu anda kararlı olan {1} sürümüdür\"\n    NewV3           = \"{0} sürümü ile devam etmek istiyor musunuz (hatalar olabilir) ? [Y/N]\"\n    Recom           = \"Önerilen {0} sürümünü yüklemek istiyor musunuz? [Y/N]\"\n    DelNew          = \"Test edilmemiş Spotify kaldırılıyor...\"\n    DownSpoti       = \"Spotify indiriliyor ve kuruluyor\"\n    DownSpoti2      = \"Lütfen bekleyin...\"\n    PodcatsOff      = \"Podcastler Kapalı\"\n    PodcastsOn      = \"Podcastler Açık\"\n    PodcatsSelect   = \"Ana sayfadan podcastleri, bölümleri ve sesli kitapları kaldırmak istiyor musunuz? [Y/N]\"\n    DowngradeNote   = \"Spotify'da sürüm düşürme olduğu için engellemeniz önerilir\"\n    UpdBlock        = \"Spotify güncellemeleri engellendi\"\n    UpdUnblock      = \"Spotify güncellemeleri engellenmedi\"\n    UpdSelect       = \"Spotify güncellemelerini engellemek ister misiniz? [Y/N]\"\n    ModSpoti        = \"Spotify'a yama yapılıyor...\"\n    Error           = \"Hata\"\n    FileLocBroken   = \"Spotify dosyalarının konumu bozuk, istemciyi kaldırın ve kodu tekrar çalıştırın\"\n    Spicetify       = \"Spicetify detected, it must be installed after SpotX, open recommended actions in FAQ ? [Y/N]\"\n    NoRestore       = \"SpotX zaten kurulmuş, xpui.bak dosyası bulunamadı. `nLütfen Spotify istemcisini kaldırın ve Install.bat dosyasını tekrar çalıştırın\"\n    InstallComplete = \"kurulum tamamlandı\"\n    HostInfo        = \"Hosts dosyasında istenmeyen URL'ler bulundu\"\n    HostBak         = \"hosts.bak dosyası yedekleniyor....\"\n    HostDel         = \"Orijinal hosts dosyasından istenmeyen URL'ler kaldırılmaya çalışılıyor...\"\n    HostError       = \"Hosts dosyasını düzenlerken bir şeyler ters gitti, elle düzenleyin veya kodu yönetici olarak çalıştırın\"\n    PressAnyKey     = \"Çıkmak için herhangi bir tuşa basın...\"\n}\n"
  },
  {
    "path": "scripts/installer-lang/ua.ps1",
    "content": "[PSCustomObject]@{\n    Welcome         = \"\n╔══════════════════════════════════════╗\n║ Ласкаво просимо до SpotX для Windows ║\n╚══════════════════════════════════════╝\"\n    Incorrect       = \"Упс, некоректне значення,\"\n    Incorrect2      = \"введіть знову через \"\n    Download        = \"Помилка завантаження\"\n    Download2       = \"Повторний запит через 5 секунд...\"\n    Download3       = \"Помилка знову\"\n    Download4       = \"Перевірте налаштування вашого з'єднання та запустіть інсталятор знову\"\n    Download5       = \"Завантаження Spotify\"\n    StopScript      = \"Скрипт зупинено\"\n    MsSpoti         = \"Знайдено версію Spotify з Microsoft Store, яка не підтримується\"\n    MsSpoti2        = \"Видалити версію Spotify з Microsoft Store [Y/N]\"\n    MsSpoti3        = \"Автоматичне видалення Spotify MS...\"\n    MsSpoti4        = \"Видалення Spotify MS...\"\n    Prem            = \"Модифікація для преміумкористувачів...\"\n    OldV            = \"Знайдена застаріла версія Spotify\"\n    OldV2           = \"Ваша версія Spotify {0} застаріла, її рекомендовано оновити до {1}\"\n    OldV3           = \"Хочете оновитися ? [Y/N]\"\n    AutoUpd         = \"Автоматичне оновлення на рекомендовану версію\"\n    DelOrOver       = \"Хочете видалити наявну версію {0} або встановити нову поряд? Y [Видалити] / N [Встановити поряд]\"\n    DelOld          = \"Видалення старої версії Spotify...\"\n    NewV            = \"Непідтримувана версія Spotify знайдена\"\n    NewV2           = \"Ваша версія Spotify {0} ще не була протестована, стабільна версія наразі {1}\"\n    NewV3           = \"Чи хочете продовжити на версії {0} (можливі помилки) ? [Y/N]\"\n    Recom           = \"Чи хочете встановити рекомендовану версію {0} ? [Y/N]\"\n    DelNew          = \"Видалення непротестованої версії Spotify...\"\n    DownSpoti       = \"Завантаження та встановлення Spotify\"\n    DownSpoti2      = \"Зачекайте, будь-ласка...\"\n    PodcatsOff      = \"Вимкнути подкасти\"\n    PodcastsOn      = \"Увімкнути подкасти\"\n    PodcatsSelect   = \"Чи хочете ви вимкнути подкасти, епізоди та аудіокниги з головної сторінки? [Y/N]\"\n    DowngradeNote   = \"Це рекомендується заблокувати, бо версію Spotify було знижено\"\n    UpdBlock        = \"Оновлення Spotify заблоковано\"\n    UpdUnblock      = \"Оновлення Spotify наразі не заблоковані\"\n    UpdSelect       = \"Хочете заблокувати оновлення Spotify ? [Y/N]\"\n    ModSpoti        = \"Встановлення патчів на Spotify...\"\n    Error           = \"Помилка\"\n    FileLocBroken   = \"Помилки у шляху до файлів Spotify, видаліть клієнт та запустіть скрипт ще раз.\"\n    Spicetify       = \"Spicetify detected, it must be installed after SpotX, open recommended actions in FAQ ? [Y/N]\"\n    NoRestore       = \"SpotX вже встановлено, але файл xpui.bak не знайдено. `nБудь-ласка, видаліть клієнт Spotify та запустіть скрипт ще раз.\"\n    InstallComplete = \"встановлення завершене\"\n    HostInfo        = \"Небажані посилання знайдені у файлі hosts\"\n    HostBak         = \"Бекап hosts.bak...\"\n    HostDel         = \"Спроба прибрати небажані посилання з оригінального файлу hosts...\"\n    HostError       = \"Щось пішло не так під час редагування файлу hosts, змініть його вручну, або спробуйте запустити скрипт від імені адміністратора\"\n    PressAnyKey     = \"Натисніть будь-яку клавішу, щоб вийти...\"\n}\n"
  },
  {
    "path": "scripts/installer-lang/vi.ps1",
    "content": "[PSCustomObject]@{\n    Welcome         = \"\n╔═════════════════════════════════════╗\n║ Chào mừng đến với SpotX cho Windows ║\n╚═════════════════════════════════════╝\"\n    Incorrect       = \"Ối, sai giá trị rồi,\"\n    Incorrect2      = \"hãy thử lại \"\n    Download        = \"Lỗi khi tải xuống\"\n    Download2       = \"Tải lại sau 5 giây...\"\n    Download3       = \"Lại bị lỗi\"\n    Download4       = \"Hãy kiểm tra cài đặt mạng và chạy lại chương trình\"\n    Download5       = \"Đang tải Spotify\"\n    StopScript      = \"Đã dừng bản vá\"\n    MsSpoti         = \"Phát hiện phiên bản Spotify của Microsoft Store, bản này không được hỗ trợ\"\n    MsSpoti2        = \"Gỡ Spotify của Microsoft Store [Y/N]\"\n    MsSpoti3        = \"Đang tự động gỡ Spotify MS...\"\n    MsSpoti4        = \"Đang gỡ Spotify MS...\"\n    Prem            = \"Chỉnh sửa dành cho tài khoản premium...\"\n    OldV            = \"Phát hiện Spotify phiên bản cũ\"\n    OldV2           = \"Phiên bản Spotify {0} của bạn đã cũ, khuyến khích nâng cấp lên {1}\"\n    OldV3           = \"Bạn có muốn cập nhật không ? [Y/N]\"\n    AutoUpd         = \"Tự động cập nhật lên phiên bản được đề xuất\"\n    DelOrOver       = \"Bạn muốn gỡ phiên bản hiện tại {0} hay cài đè lên? Y [Gỡ] / N [Cài đè lên]\"\n    DelOld          = \"Đang gỡ Spotify bản cũ...\"\n    NewV            = \"Phát hiện phiên bản không được hỗ trợ\"\n    NewV2           = \"Phiên bản Spotify {0} chưa được kiểm thử, hiện tại bản ổn định là {1}\"\n    NewV3           = \"Bạn có muốn tiếp tục với phiên bản {0} (có thể bị lỗi) ? [Y/N]\"\n    Recom           = \"Bạn có muốn cài đặt phiên bản được đề xuất: {0} ? [Y/N]\"\n    DelNew          = \"Đang gỡ phiên bản Spotify chưa được kiểm thử...\"\n    DownSpoti       = \"Đang tải và cài Spotify\"\n    DownSpoti2      = \"Vui lòng chờ...\"\n    PodcatsOff      = \"Tắt Podcasts\"\n    PodcastsOn      = \"Bật Podcasts\"\n    PodcatsSelect   = \"Bạn có muốn xóa podcast (dài tập) và sách nói khỏi màn hình chính không? [Y/N]\"\n    DowngradeNote   = \"Nên chặn cập nhật vì bạn đang dùng bản Spotify cũ\"\n    UpdBlock        = \"Đã chặn cập nhật Spotify\"\n    UpdUnblock      = \"Cập nhật Spotify không bị chặn\"\n    UpdSelect       = \"Bạn có muốn ngăn Spotify tự động cập nhật? [Y/N]\"\n    ModSpoti        = \"Đang vá Spotify...\"\n    Error           = \"Lỗi\"\n    FileLocBroken   = \"Vị trí các tệp của Spotify đã bị hỏng, gỡ Spotify và chạy lại bản vá\"\n    Spicetify       = \"Đã phát hiện Spicetify, nó cần phải được cài đặt sau SpotX, bạn có muốn mở những hành động khuyến khích trong mục FAQ ? [Y/N]\"\n    NoRestore       = \"Đã cài SpotX nhưng không tìm thấy tập tin xpui.bak. `nGỡ Spotify và chạy lại Install.bat\"\n    InstallComplete = \"cài đặt hoàn tất\"\n    HostInfo        = \"Tìm thấy các URL không cần thiết trong tệp hosts\"\n    HostBak         = \"Đang sao lưu hosts.bak...\"\n    HostDel         = \"Đang xóa các URL không cần thiết khỏi tệp hosts...\"\n    HostError       = \"Xảy ra lỗi khi đang chỉnh sửa tệp hosts. Hãy tự sửa hoặc chạy tệp này với tư cách quản trị viên\"\n    PressAnyKey     = \"Nhấn phím bất kỳ để thoát...\"\n}\n"
  },
  {
    "path": "scripts/installer-lang/zh-TW.ps1",
    "content": "[PSCustomObject]@{\n    Welcome         = \"\n╔═════════════════════════════╗\n║  歡迎使用 SpotX Windows 版  ║\n╚═════════════════════════════╝\"\n    Incorrect       = \"糟糕，參數錯誤，\"\n    Incorrect2      = \"請重新輸入 \"\n    Download        = \"下載錯誤\"\n    Download2       = \"將在五秒後重試\"\n    Download3       = \"再次出錯\"\n    Download4       = \"檢查您的網路設定後再次嘗試安裝\"\n    Download5       = \"下載 Spotify\"\n    StopScript      = \"腳本已停止\"\n    MsSpoti         = \"偵測到不支援的 Spotify 微軟商店版本\"\n    MsSpoti2        = \"解除安裝微軟商店的 Spotify [Y/N]\"\n    MsSpoti3        = \"自動解除安裝 Spotify 的微軟商店版本...\"\n    MsSpoti4        = \"正在解除安裝 Spotify 的微軟商店版本...\"\n    Prem            = \"針對 Premium 帳號的修改...\"\n    OldV            = \"發現過時的 Spotify 版本\"\n    OldV2           = \"您的Spotify {0} 版本已過時，建議更新到 {1}\"\n    OldV3           = \"需要更新嗎? [Y/N]\"\n    AutoUpd         = \"自動更新到推薦版本\"\n    DelOrOver       = \"是否要解除安裝目前版本 {0} 或者覆蓋安裝？ Y [解除安裝] / N [覆蓋安裝]\"\n    DelOld          = \"解除安裝舊版 Spotify...\"\n    NewV            = \"偵測到不支援的 Spotify 版本\"\n    NewV2           = \"您的 Spotify {0} 版本還沒有經過測試，目前穩定的版本是 {1} \"\n    NewV3           = \"您想要繼續使用 {0} 版本嗎 (可能會出現錯誤)？ [Y/N]\"\n    Recom           = \"您想安裝推薦的 {0} 版本嗎？ [Y/N]\"\n    DelNew          = \"解除安裝未經測試的 Spotify 版本...\"\n    DownSpoti       = \"下載並安裝 Spotify\"\n    DownSpoti2      = \"請稍候...\"\n    PodcatsOff      = \"關閉 Podcasts\"\n    PodcastsOn      = \"開啟 Podcasts\"\n    PodcatsSelect   = \"您想要關閉主頁上的 Podcasts，劇集和有聲書嗎？ [Y/N]\"\n    DowngradeNote   = \"由於 Spotify 已降級，故推薦阻止\"\n    UpdBlock        = \"阻止 Spotify 更新\"\n    UpdUnblock      = \"不阻止 Spotify 更新\"\n    UpdSelect       = \"您想要阻止 Spotify 更新嗎？ [Y/N]\"\n    ModSpoti        = \"修補 Spotify...\"\n    Error           = \"錯誤\"\n    FileLocBroken   = \"Spotify 的路徑已損壞，請解除安裝客戶端並重新執行腳本\"\n    Spicetify       = \"偵測到 Spicetify，它必須在安裝 SpotX 後進行安裝。是否啟用 FAQ 中的建議操作？[Y/N]\"\n    NoRestore       = \"SpotX 已經安裝，但是找不到 xpui.bak `n請重新安裝 Spotify 客戶端後再運行 Install.bat\"\n    InstallComplete = \"安裝完成\"\n    HostInfo        = \"在 hosts 檔案中發現不需要的網址\"\n    HostBak         = \"正在備份 hosts.bak...\"\n    HostDel         = \"正在嘗試從原始 hosts 檔案中刪除不需要的網址...\"\n    HostError       = \"在編輯 hosts 檔案時發生了錯誤，請手動編輯或以系統管理員身分執行腳本\"\n    PressAnyKey     = \"按任意鍵退出...\"\n}\n"
  },
  {
    "path": "scripts/installer-lang/zh.ps1",
    "content": "[PSCustomObject]@{\n    Welcome         = \"\n╔════════════════════════════════╗\n║ 欢迎使用 SpotX 的 Windows 版本 ║\n╚════════════════════════════════╝\"\n    Incorrect       = \"糟糕，不正确的参数,\"\n    Incorrect2      = \"请重新输入 \"\n    Download        = \"下载错误\"\n    Download2       = \"将在五秒后重试\"\n    Download3       = \"再次出错\"\n    Download4       = \"请检查您的网络设置后再次尝试安装\"\n    Download5       = \"下载 Spotify\"\n    StopScript      = \"脚本已停止\"\n    MsSpoti         = \"检测到 Spotify 为微软商店版本，此脚本不支持该版本\"\n    MsSpoti2        = \"是否卸载微软商店的 Spotify [Y/N]\"\n    MsSpoti3        = \"自动卸载 Spotify 的微软商店版本...\"\n    MsSpoti4        = \"正在卸载 Spotify 的微软商店版本...\"\n    Prem            = \"正在进行针对 Premium 账户的修改...\"\n    OldV            = \"发现已过时的 Spotify 版本\"\n    OldV2           = \"您的 Spotify {0} 版本已过时，建议更新到 {1}\"\n    OldV3           = \"是否需要更新？ [Y/N]\"\n    AutoUpd         = \"自动更新到推荐版本\"\n    DelOrOver       = \"是否要卸载当前版本 {0} 或者覆盖安装? Y [卸载] / N [覆盖安装]\"\n    DelOld          = \"正在卸载旧的 Spotify...\"\n    NewV            = \"检测到 Spotify 版本不受到支持\"\n    NewV2           = \"您的 Spotify {0} 版本没有经过测试，目前的推荐的版本是 {1}\"\n    NewV3           = \"您想要继续使用 {0} 版本吗 (可能会出现错误)？ [Y/N]\"\n    Recom           = \"您想安装推荐的 {0} 版本吗 ? [Y/N]\"\n    DelNew          = \"正在卸载未经测试的 Spotify 版本...\"\n    DownSpoti       = \"下载并安装 Spotify\"\n    DownSpoti2      = \"请稍等...\"\n    PodcatsOff      = \"关闭播客\"\n    PodcastsOn      = \"开启播客\"\n    PodcatsSelect   = \"您想关闭主页上的播客、剧集与有声读物吗？ [Y/N]\"\n    DowngradeNote   = \"由于 Spotify 已降级，建议屏蔽\"\n    UpdBlock        = \"阻止 Spotify 更新\"\n    UpdUnblock      = \"不阻止 Spotify 更新\"\n    UpdSelect       = \"您想要阻止 Spotify 更新吗？ [Y/N]\"\n    ModSpoti        = \"修补 Spotify...\"\n    Error           = \"错误\"\n    FileLocBroken   = \"Spotify 文件已损坏，请请卸载客户端并重新运行脚本\"\n    Spicetify       = \"检测到 Spicetify，它必须在安装 SpotX 后进行安装。是否启用 FAQ 中的建议操作？ [Y/N]\"\n    NoRestore       = \"SpotX 已经安装，但是找不到文件 xpui.bak . `n请重新安装 Spotify 客户端后再次运行 install.bat\"\n    InstallComplete = \"安装完成\"\n    HostInfo        = \"在 hosts 文件中发现了不需要的 URL\"\n    HostBak         = \"备份原始 hosts 文件为 hosts.bak...\"\n    HostDel         = \"正在试图从原始 hosts 文件中删除不需要的 URL...\"\n    HostError       = \"在编辑 hosts 文件时发生了错误,请手动编辑或以管理员身份重新运行该脚本。\"\n    PressAnyKey     = \"按任意键退出...\"\n}\n"
  }
]