Greasy Fork is available in English.

RuTor popular torrents highlight + TorrServer integration

Highlight popular torrents (based on peers) + Add to TorrServer button

// ==UserScript==
// @name            RuTor popular torrents highlight + TorrServer integration
// @description     Highlight popular torrents (based on peers) + Add to TorrServer button
// @version         1.11
// @match           *://rutor.is/*
// @match           *://rutor.org/*
// @match           *://rutor.info/*
// @run-at          document-end
// @grant           none
// @copyright       2024, MSerj
// @license         MIT
//
// @grant           GM_getValue
// @grant           GM_setValue
// @grant           GM_addStyle

// @icon data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAhwAAAIYCAYAAAAmbzVqAAAACXBIWXMAAAsTAAALEwEAmpwYAAA54GlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMwMTQgNzkuMTU2Nzk3LCAyMDE0LzA4LzIwLTA5OjUzOjAyICAgICAgICAiPgogICA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIKICAgICAgICAgICAgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIgogICAgICAgICAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgICAgICAgICAgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIKICAgICAgICAgICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAvIj4KICAgICAgICAgPHhtcDpDcmVhdG9yVG9vbD5BZG9iZSBQaG90b3Nob3AgQ0MgMjAxNCAoV2luZG93cyk8L3htcDpDcmVhdG9yVG9vbD4KICAgICAgICAgPHhtcDpDcmVhdGVEYXRlPjIwMjQtMDYtMjJUMTg6MDA6MTUrMDM6MDA8L3htcDpDcmVhdGVEYXRlPgogICAgICAgICA8eG1wOk1vZGlmeURhdGU+MjAyNC0wNi0yMlQxODowMjoxMCswMzowMDwveG1wOk1vZGlmeURhdGU+CiAgICAgICAgIDx4bXA6TWV0YWRhdGFEYXRlPjIwMjQtMDYtMjJUMTg6MDI6MTArMDM6MDA8L3htcDpNZXRhZGF0YURhdGU+CiAgICAgICAgIDxkYzpmb3JtYXQ+aW1hZ2UvcG5nPC9kYzpmb3JtYXQ+CiAgICAgICAgIDxwaG90b3Nob3A6Q29sb3JNb2RlPjM8L3Bob3Rvc2hvcDpDb2xvck1vZGU+CiAgICAgICAgIDx4bXBNTTpJbnN0YW5jZUlEPnhtcC5paWQ6MGE4MDkxOTktZTMxMy03YjQ0LWExNWYtODZmMzA3OGJkZjY5PC94bXBNTTpJbnN0YW5jZUlEPgogICAgICAgICA8eG1wTU06RG9jdW1lbnRJRD54bXAuZGlkOmExMmQ0ZmZmLWFjZjktODM0Zi05Njc1LWE1MzA1OTM3NTJlMjwveG1wTU06RG9jdW1lbnRJRD4KICAgICAgICAgPHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD54bXAuZGlkOmExMmQ0ZmZmLWFjZjktODM0Zi05Njc1LWE1MzA1OTM3NTJlMjwveG1wTU06T3JpZ2luYWxEb2N1bWVudElEPgogICAgICAgICA8eG1wTU06SGlzdG9yeT4KICAgICAgICAgICAgPHJkZjpTZXE+CiAgICAgICAgICAgICAgIDxyZGY6bGkgcmRmOnBhcnNlVHlwZT0iUmVzb3VyY2UiPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6YWN0aW9uPmNyZWF0ZWQ8L3N0RXZ0OmFjdGlvbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0Omluc3RhbmNlSUQ+eG1wLmlpZDphMTJkNGZmZi1hY2Y5LTgzNGYtOTY3NS1hNTMwNTkzNzUyZTI8L3N0RXZ0Omluc3RhbmNlSUQ+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDp3aGVuPjIwMjQtMDYtMjJUMTg6MDA6MTUrMDM6MDA8L3N0RXZ0OndoZW4+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDpzb2Z0d2FyZUFnZW50PkFkb2JlIFBob3Rvc2hvcCBDQyAyMDE0IChXaW5kb3dzKTwvc3RFdnQ6c29mdHdhcmVBZ2VudD4KICAgICAgICAgICAgICAgPC9yZGY6bGk+CiAgICAgICAgICAgICAgIDxyZGY6bGkgcmRmOnBhcnNlVHlwZT0iUmVzb3VyY2UiPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6YWN0aW9uPnNhdmVkPC9zdEV2dDphY3Rpb24+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDppbnN0YW5jZUlEPnhtcC5paWQ6MGE4MDkxOTktZTMxMy03YjQ0LWExNWYtODZmMzA3OGJkZjY5PC9zdEV2dDppbnN0YW5jZUlEPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6d2hlbj4yMDI0LTA2LTIyVDE4OjAyOjEwKzAzOjAwPC9zdEV2dDp3aGVuPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6c29mdHdhcmVBZ2VudD5BZG9iZSBQaG90b3Nob3AgQ0MgMjAxNCAoV2luZG93cyk8L3N0RXZ0OnNvZnR3YXJlQWdlbnQ+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDpjaGFuZ2VkPi88L3N0RXZ0OmNoYW5nZWQ+CiAgICAgICAgICAgICAgIDwvcmRmOmxpPgogICAgICAgICAgICA8L3JkZjpTZXE+CiAgICAgICAgIDwveG1wTU06SGlzdG9yeT4KICAgICAgICAgPHRpZmY6T3JpZW50YXRpb24+MTwvdGlmZjpPcmllbnRhdGlvbj4KICAgICAgICAgPHRpZmY6WFJlc29sdXRpb24+NzIwMDAwLzEwMDAwPC90aWZmOlhSZXNvbHV0aW9uPgogICAgICAgICA8dGlmZjpZUmVzb2x1dGlvbj43MjAwMDAvMTAwMDA8L3RpZmY6WVJlc29sdXRpb24+CiAgICAgICAgIDx0aWZmOlJlc29sdXRpb25Vbml0PjI8L3RpZmY6UmVzb2x1dGlvblVuaXQ+CiAgICAgICAgIDxleGlmOkNvbG9yU3BhY2U+NjU1MzU8L2V4aWY6Q29sb3JTcGFjZT4KICAgICAgICAgPGV4aWY6UGl4ZWxYRGltZW5zaW9uPjU0MDwvZXhpZjpQaXhlbFhEaW1lbnNpb24+CiAgICAgICAgIDxleGlmOlBpeGVsWURpbWVuc2lvbj41MzY8L2V4aWY6UGl4ZWxZRGltZW5zaW9uPgogICAgICA8L3JkZjpEZXNjcmlwdGlvbj4KICAgPC9yZGY6UkRGPgo8L3g6eG1wbWV0YT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAKPD94cGFja2V0IGVuZD0idyI/PmLM52kAAAAgY0hSTQAAeiUAAICDAAD5/wAAgOkAAHUwAADqYAAAOpgAABdvkl/FRgAAEBVJREFUeNrs3dFu27gWhlGx8Jtk3v+J6mfRXBQDTNEGiWz9lDb3WlcHOJ02JinyC526Y+MlHx8fBgFgjj38+w9DnPcwBAA0iovv/pkiRHAAIC6mf20CRHAAIDIEiOAAQGSs/ZrEh+AAQGhMe53CQ3AAIDKmvnbxITgAEBrTxkN4CA4AhIbwEBwACA3hsYwf1gAAYsPYpbnhAMBhec04trrtEBwACA3hEectFQDEhjEWHABcdgiKDdEhOABw+Ik8wQGA2MAcCA4A+nx3LToEBwAONxpEoOAAcKhhjgQHAA4y6s+V4ABwgGHOBAcADi7qz53gAHBgYQ4FBwBig/pzKTgAHFCYU8EBwNuHktgQHYIDAIcR68+z4ABwCGG+BQcAYoP68y44ABw6mH/BAYDYoP46EBwADhmsB8EBgNig/roQHAAOFawPwQGA2KD+OhEcAA4RrBfBAcAfB4fYoFx0CA4ABwbWkOAAQGxQfy0JDgAHBNaU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

// @namespace       https://greasyfork.org/en/users/1321619-mserj
// ==/UserScript==

// General styles
GM_addStyle('table tr.backgr td { white-space: nowrap; }')
GM_addStyle('#mserj_settings { width: 400px; min-height: 150px; position: fixed; left: 0; top: 0; background-color: #fff; border: 1px solid #a00; }')
GM_addStyle(`#mserj_settings .header {\tbackground: #ffde00;\tpadding: 10px;\tfont-weight: bold; text-align: center; }`)
GM_addStyle('#mserj_settings .fields { padding: 5px; }')
GM_addStyle('#mserj_settings .fields .row { clear: both; height: 30px; }')
GM_addStyle('#mserj_settings .fields .row .col1 { width: 300px; float: left; }')
GM_addStyle('#mserj_settings .fields .row .col2 { width: 90px; float: left; }')
GM_addStyle('#mserj_settings .mserj-color { max-width: 70px; max-height: 20px; }')

// GM_addStyle('#mserj_settings .fields .row { display: flex; margin-bottom: 10px; }')
GM_addStyle('#mserj_settings .fields .row .label { display: flex; align-items: center; }')
GM_addStyle('#mserj_settings .fields .row .label span { margin-right: 10px; }')
GM_addStyle('#mserj_settings .fields .row .label span:first-child { width: 100px; }')

// TorrServer icon
const getTorrServerIcon = (size = 25) =>
	`<img src="data:image/png;base64,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" width="${size}px" height="${size}px"  alt="TorrServer" />`

const createTorrServerButton = ({ id, size }) => {
	const torrServerButton = document.createElement('button')
	torrServerButton.id = `add_to_torrserver-${id}`
	torrServerButton.title = 'Добавить в TorrServer'
	torrServerButton.style.fontSize = '0px'
	torrServerButton.style.border = 'none'
	torrServerButton.style.padding = '0px'
	torrServerButton.style.cursor = 'pointer'
	torrServerButton.style.marginRight = '5px'
	torrServerButton.innerHTML = getTorrServerIcon(size)

	return torrServerButton
}

// Main script
;(() => {
	let settings = {}

	const loadSettings = () => {
		settings = {
			line_color: GM_getValue('line_color', '#ff0000'),
			mark_repack: GM_getValue('mark_repack', false),
			repack_color: GM_getValue('repack_color', '#ddffdd'),
			mark_fitGirl: GM_getValue('mark_fitGirl', true),
			fitGirl_color: GM_getValue('fitGirl_color', '#ddddff'),
			mark_highQuality: GM_getValue('mark_highQuality', true),
			highQuality_color: GM_getValue('highQuality_color', '#f4ddff'),
			mark_hidden: GM_getValue('mark_hidden', true),
			hidden_opacity: GM_getValue('hidden_opacity', 0.1),
			hidden_words: GM_getValue('hidden_words', 'МР3,FLAC,flac,КПК,Футбол,UFC,книг,книги,MP3'),

			showAddToTorrServerButton: GM_getValue('showAddToTorrServerButton', false),
			torrServerIp: GM_getValue('torrServerIp', 'localhost'),
			torrServerPort: GM_getValue('torrServerPort', 8090),
			torrServerLogin: GM_getValue('torrServerLogin', ''),
			torrServerPassword: GM_getValue('torrServerPassword', '')
		}
	}

	const setStyles = () => {
		GM_addStyle('.mserj-line { height: 3px; background-color: ' + settings.line_color + '; }')
		GM_addStyle('tr.mserj-repack td { background-color: ' + settings.repack_color + '; }')
		GM_addStyle('tr.mserj-fitGirl td { background-color: ' + settings.fitGirl_color + '; }')
		GM_addStyle('tr.mserj-4K td { background-color: ' + settings.highQuality_color + '; }')
		GM_addStyle(`tr.mserj-hidden { ${settings.hidden_opacity ? `opacity: ${settings.hidden_opacity}; display: table-row` : 'display: none'}; }`)
	}

	const toggleSettings = () => {
		const $sett_wnd = $('#mserj_settings'),
			x = parseInt(($(window).width() - $sett_wnd.width()) / 2),
			y = parseInt(($(window).height() - $sett_wnd.height()) / 2)

		$('#mserj_line_color').val(settings.line_color)

		$('#mserj_mark_repack').attr('checked', !!settings.mark_repack)
		$('#mserj_repack_color').val(settings.repack_color)

		$('#mserj_mark_fitGirl').attr('checked', !!settings.mark_fitGirl)
		$('#mserj_fitGirl_color').val(settings.fitGirl_color)

		$('#mserj_mark_highQuality').attr('checked', !!settings.mark_highQuality)
		$('#mserj_highQuality_color').val(settings.highQuality_color)

		$('#mserj_mark_hidden').attr('checked', !!settings.mark_hidden)
		$('#mserj_hidden_opacity').val(settings.hidden_opacity * 10)
		$('#mserj_hidden_words').val(settings.hidden_words)

		$('#mserj_showAddToTorrServerButton').attr('checked', !!settings.showAddToTorrServerButton)
		$('#mserj_torrServerIp').val(settings.torrServerIp)
		$('#mserj_torrServerPort').val(settings.torrServerPort)
		$('#mserj_torrServerLogin').val(settings.torrServerLogin)
		$('#mserj_torrServerPassword').val(settings.torrServerPassword)

		$('#mserj_settings').css({ left: x, top: y }).toggle('fast')
	}

	// Adding settings button & modal
	const addSettings = () => {
		const $tab = $('<a href="javascript:;" class="menu_b"><div>Настройки</div></a>')

		$tab.click(toggleSettings)
		$('#menu').append($tab)

		const $wnd = $(`
		<div id="mserj_settings" style="display: none">
		  <div class="header">Настройка скрипта</div>
		  <div class="fields">
		    <div class="row">
		      <div class="col1">Цвет полоски популярности раздачи:</div>
		      <div class="col2"><input type="color" class="mserj-color" id="mserj_line_color" /></div>
		    </div>
		    <div class="row">
		      <div class="col1"><input type="checkbox" id="mserj_mark_repack">Выделять репаки</div>
		      <div class="col2"><input type="color" class="mserj-color" id="mserj_repack_color" /></div>
		    </div>
		    <div class="row">
		    	<div class="col1"><input type="checkbox" id="mserj_mark_fitGirl">Выделять репаки от FitGirl</div>
		    	<div class="col2"><input type="color" class="mserj-color" id="mserj_fitGirl_color" /></div>
	        </div>
		  	<div class="row">
		  		<div class="col1"><input type="checkbox" id="mserj_mark_highQuality">Выделять 4K раздачи</div>
		  		<div class="col2"><input type="color" class="mserj-color" id="mserj_highQuality_color" /></div>
	        </div>
	        <div class="row">
	        	<div class="col1"><input type="checkbox" id="mserj_mark_hidden">Скрывать не интересные раздачи</div>
	        	<div class="col2"><input type="range" class="mserj-color" min="0" max="10" id="mserj_hidden_opacity" /></div>
	        </div>
		    <div class="row">
			    <div class="col1">Скрыть раздачи включающие (через запятую):</div>
			    <div class="col2"><input type="text" class="mserj-color" id="mserj_hidden_words" /></div>
		    </div>
		    <hr />
		    <div class="row">
		       <label class="label">
		         <input type="checkbox" id="mserj_showAddToTorrServerButton">
		         <span>Показывать кнопку "TorrServer"</span>
		         ${getTorrServerIcon()}
		       </label>
		     </div>
		     <div class="row">
		       <label class="label">
		         <span>TorrServer IP</span>
		         <input type="text" id="mserj_torrServerIp">
		       </label>
		     </div>
		     <div class="row">
		       <label class="label">
		         <span>TorrServer Port</span>
		         <input type="text" id="mserj_torrServerPort">
		       </label>
		     </div>
		     <div class="row">
		       <label class="label">
		         <span>TorrServer Login</span>
		         <input type="text" id="mserj_torrServerLogin">
		       </label>
		     </div>
		     <div class="row">
		       <label class="label">
		         <span>TorrServer Password</span>
		         <input type="password" id="mserj_torrServerPassword">
		       </label>
		     </div>
		    <div class="row" style="margin-top: 10px; text-align: center"><input type="button" value="Сохранить настройки" id="mserj_save_settings" /></div>
		  </div>
		</div>
		`)

		$('body').append($wnd)

		$('#mserj_save_settings').live('click', () => {
			GM_setValue('line_color', $('#mserj_line_color').val())
			GM_setValue('mark_repack', $('#mserj_mark_repack').is(':checked'))
			GM_setValue('repack_color', $('#mserj_repack_color').val())
			GM_setValue('mark_fitGirl', $('#mserj_mark_fitGirl').is(':checked'))
			GM_setValue('fitGirl_color', $('#mserj_fitGirl_color').val())
			GM_setValue('mark_highQuality', $('#mserj_mark_highQuality').is(':checked'))
			GM_setValue('highQuality_color', $('#mserj_highQuality_color').val())
			GM_setValue('mark_hidden', $('#mserj_mark_hidden').is(':checked'))
			GM_setValue('hidden_opacity', $('#mserj_hidden_opacity').val() * 0.1)
			GM_setValue('hidden_words', $('#mserj_hidden_words').val())

			GM_setValue('showAddToTorrServerButton', $('#mserj_showAddToTorrServerButton').is(':checked'))
			GM_setValue('torrServerIp', $('#mserj_torrServerIp').val())
			GM_setValue('torrServerPort', $('#mserj_torrServerPort').val())
			GM_setValue('torrServerLogin', $('#mserj_torrServerLogin').val())
			GM_setValue('torrServerPassword', $('#mserj_torrServerPassword').val())

			location.reload()
		})
	}

	/**
	 * TorrServer stuff
	 */
	async function addToTorrServer(data) {
		try {
			const response = await fetch(`${settings.torrServerIp}:${settings.torrServerPort}/torrents`, {
				method: 'POST',
				headers: {
					'Content-Type': 'application/json',
					Authorization:
						settings.torrServerLogin && settings.torrServerPassword
							? `Basic ${btoa(settings.torrServerLogin + ':' + settings.torrServerPassword)}`
							: undefined
				},
				body: JSON.stringify({ action: 'add', save_to_db: true, ...data })
			})
			if (response.ok) {
				alert('Успешно добавлено в TorrServer')
			} else {
				if (response.status === 401) {
					alert('Авторизация не удалась! Проверьте ( соединение / логин / пароль )')
				} else {
					alert('Не удалось отправить запрос на TorrServer')
				}
			}
		} catch (error) {
			alert('Не удалось отправить запрос на TorrServer')
		}
	}

	// Adding "add to torrServer" button on details page
	const addTorrServerButtonOnDetailPage = () => {
		const downloadSection = document.getElementById('download')

		if (downloadSection) {
			const magnetLink = downloadSection.querySelectorAll('a')[0].href

			const id = location.href.split('torrent/')[1].split('/')[0]
			const torrServerButton = createTorrServerButton({ id, size: 30 })
			downloadSection.prepend(torrServerButton)

			$(`#add_to_torrserver-${id}`).bind('click', () => {
				addToTorrServer({
					link: magnetLink.split('&dn')[0],
					poster: $('#details img')[0].src
				})
			})
		}
	}

	// Fetch torrent poster
	async function fetchTorrentPoster(url) {
		try {
			const response = await fetch(url)
			if (!response.ok) {
				throw new Error(`HTTP error! status: ${response.status}`)
			}
			const htmlString = await response.text()
			const parser = new DOMParser()
			const doc = parser.parseFromString(htmlString, 'text/html')

			const poster = doc.querySelector('#details img')
			if (poster) {
				return poster.src
			} else {
				return null
			}
		} catch (error) {
			console.error('Error fetching or parsing HTML:', error)
			return null
		}
	}

	// Mark/highlight lines
	const markLines = () => {
		const max_width = $(window).width() - 280 - 214

		$('tr.gai, tr.tum').each(function () {
			const cells = $(this).find('td'),
				links_cell = cells.get(1),
				peers_spans = $(cells.get().pop()).find('span'),
				links = $(links_cell).find('a'),
				magnetLink = links.get(1).href,
				titleLink = links.length === 2 ? links.get(1) : links.get(2)
			const count = (parseInt($.trim($(peers_spans.get(0)).text())) + parseInt($.trim($(peers_spans.get(1)).text()))) * 1.3

			$(links_cell).append('<div class="mserj-line" style="width: ' + Math.min(max_width, parseInt(count / 1)) + 'px"></div>')

			// Adding "add to torrServer" button the row
			if (settings.showAddToTorrServerButton && magnetLink) {
				const id = titleLink.href.split('torrent/')[1].split('/')[0]
				const torrServerButton = createTorrServerButton({ id, size: 13 })
				links_cell.insertBefore(torrServerButton, titleLink)

				$(`#add_to_torrserver-${id}`).bind('click', () => {
					;(async () => {
						const poster = await fetchTorrentPoster(titleLink)
						addToTorrServer({
							link: magnetLink.split('&dn')[0],
							poster
						})
					})()
				})
			}

			if (settings.mark_repack && (titleLink.innerHTML.includes('RePack') || titleLink.innerHTML.includes('repack'))) {
				$(this).addClass('mserj-repack')
			}
			if (settings.mark_fitGirl && (titleLink.innerHTML.includes('FitGirl') || titleLink.innerHTML.includes('fitgirl'))) {
				$(this).addClass('mserj-fitGirl')
			}
			if (settings.mark_highQuality && (titleLink.innerHTML.includes(' 4K') || titleLink.innerHTML.includes('2160p'))) {
				$(this).addClass('mserj-4K')
			}
			if (settings.mark_hidden && settings.hidden_words.split(',').some(word => titleLink.innerHTML.includes(word))) {
				$(this).addClass('mserj-hidden')
			}
		})
	}

	/**
	 * Sorting functionality
	 */
	function sortByColumn(sortWhat, type, field, btnIndex) {
		let dataClicked = sortWhat.sorti[btnIndex].press,
			press = this

		sortWhat = Object.assign({}, sortWhat)

		if (type === 0) {
			sortWhat.razd.sort(function (a, b) {
				const an = a[field],
					bn = b[field]
				return an - bn
			})
		} else if (type === 1) {
			sortWhat.razd.sort(function (a, b) {
				const x = a[field].toLowerCase()
				const y = b[field].toLowerCase()

				if (x < y) return -1
				if (x > y) return 1
				return 0
			})
		}

		if (dataClicked) sortWhat.razd.reverse()

		for (let i = 0; i < sortWhat.razd.length; i++) {
			let elDetach = $(sortWhat.razd[i].es),
				childs = null

			if (elDetach.next().next().is('.my_tr')) childs = [elDetach.next(), elDetach.next().next()]

			elDetach.detach().appendTo(sortWhat.category)

			if (childs != null) {
				$(childs[1]).detach().insertAfter(elDetach)
				$(childs[0]).detach().insertAfter(elDetach)
			}
		}

		if (btnIndex === 3 || btnIndex === 4) {
			press = $(sortWhat.sorti[btnIndex].el_img)
		}

		sortWhat.sorti.map(function (currArr, indexArr) {
			if (indexArr !== btnIndex) {
				currArr.press = false

				if ($(currArr.el_img).is('img')) $(currArr.el_img).css('transform', 'scaleY(1)')
				else $(currArr.el_img).find('img').css('transform', 'scaleY(1)')
			}
		})

		if ($(press).is('img')) {
			$(press).css('transform', 'scaleY(' + (dataClicked ? '1' : '-1') + ')')
		} else {
			$(press)
				.find('img[width^=15]')
				.css('transform', 'scaleY(' + (dataClicked ? '1' : '-1') + ')')
		}

		sortWhat.sorti[btnIndex].press = !sortWhat.sorti[btnIndex].press
	}

	// Header events
	function setEventHeaderTitle(massiv) {
		let titleSort = [],
			titles = $(this)
				.find('.backgr > td')
				.each(function (indexEl, el) {
					if (indexEl === 3 && el.textContent === 'Пиры') {
						let img = $('<img>')
								.attr({ src: 'https://raw.githubusercontent.com/AlekPet/Rutor-Preview-Ajax/master/assets/images/arrow_icon.gif', width: '15' })
								.css({ position: 'relative', top: '3px', cursor: 'pointer' })
								.attr({ title: 'Сортировать по Раздающим', id: '_Up' }),
							img_clone = img.clone(false).attr({ title: 'Сортировать по Качающим', id: '_Down' })
						$(el)
							.css({ width: '90px' })
							.append($('<span class="green">').text(' Р').css({ cursor: 'pointer' }).attr({ title: 'Сортировать по Раздающим', id: '_Up' }))
							.append(img)
							.append($('<span class="red">>').text('К').css({ cursor: 'pointer' }).attr({ title: 'Сортировать по Качающим', id: '_Down' }))
							.append(img_clone)
						titleSort.push(
							{
								el_img: img,
								index: indexEl,
								press: false
							},
							{
								el_img: img_clone,
								index: indexEl + 1,
								press: false
							}
						)
					} else {
						let img = $('<img>')
							.attr({ src: 'https://raw.githubusercontent.com/AlekPet/Rutor-Preview-Ajax/master/assets/images/arrow_icon.gif', width: '15' })
							.css({ position: 'relative', top: $(el).children().first().is('img') ? '-10px' : '3px' })
						$(el)
							.css({ width: '80px', cursor: 'pointer' })
							.attr('title', 'Сортировать по "' + ($(el).children().first().is('img') ? 'Добавлено' : $(el).text()) + '"')
							.append(img)
						titleSort.push({
							el_img: el,
							index: indexEl,
							press: false
						})
					}
				})
		massiv.sorti = titleSort
		// By date
		titles.eq(0).click(function () {
			sortByColumn.call(this, massiv, 0, 'date', 0)
		})
		// By name
		titles.eq(1).click(function () {
			sortByColumn.call(this, massiv, 1, 'name', 1)
		})
		// By size
		titles.eq(2).click(function () {
			sortByColumn.call(this, massiv, 0, 'size', 2)
		})
		// By Up/Down
		titles
			.eq(3)
			.find('div, img')
			.each(function (index, el) {
				$(this).click(function () {
					if (el.id === '_Up') {
						sortByColumn.call(el, massiv, 0, 'up', 3)
					} else {
						sortByColumn.call(el, massiv, 0, 'down', 4)
					}
				})
			})
	}

	function sorting() {
		if (!location.href.includes('/torrent/')) {
			// Ищим классы для получения данных
			let massivT = [],
				month = ['Январь', 'Февраль', 'Март', 'Апрель', 'Май', 'Июнь', 'Июль', 'Август', 'Сентябрь', 'Октябрь', 'Ноябрь', 'Декабрь'],
				razmeronosti = ['kB', 'MB', 'GB']

			$('#index > table').each(function (idx) {
				let objCat = { category: this, name: $(this).prev().text(), razd: [] }

				$(this)
					.find('.gai, .tum')
					.each(function () {
						const rowWithComments = this.children.length === 5

						const dateCell = this.children[0]
						const nameCell = this.children[1]
						const sizeCell = this.children[rowWithComments ? 3 : 2]
						const peersCell = this.children[rowWithComments ? 4 : 3]

						const name = nameCell.children[2].textContent || nameCell.children[0].getAttribute('title')
						const size = sizeCell.textContent
						const colR = peersCell.children[0].textContent
						const colU = peersCell.children[2].textContent

						// Date
						let dateT = dateCell.textContent
						dateT = dateT.split(/\s+/)

						$.each(month, function (idx, val) {
							if (dateT[1] === val.substr(0, 3)) dateT[1] = idx
						})

						dateT = new Date(parseInt('20' + dateT[2]), dateT[1], dateT[0], 0, 0, 0)

						// Sizes
						let complSize
						$.each(razmeronosti, function (idx, val) {
							if (size.includes(val)) {
								complSize = size.substr(0, size.indexOf(razmeronosti[idx])) * 1
								if (idx === 1) {
									complSize = complSize * 1000
								} else if (idx === 2) {
									complSize = complSize * 1000000
								}
							} else {
								complSize = parseFloat(size)
							}
						})

						objCat.razd.push({ es: this, date: dateT, name, size: complSize, up: colR, down: colU })
					})
				massivT.push(objCat)
				setEventHeaderTitle.call(this, massivT[idx])
			})
		}
	}

	// settings
	loadSettings()
	setStyles()
	addSettings()
	markLines()
	addTorrServerButtonOnDetailPage()

	sorting()
})()