Format: application/octet-stream
⬇ Download File (159.8 KB)
   1  {
   2   "cells": [
   3    {
   4     "cell_type": "code",
   5     "execution_count": 1,
   6     "id": "aa8849a0-e48b-49c1-b73c-4008306b4f29",
   7     "metadata": {},
   8     "outputs": [
   9      {
  10       "name": "stdout",
  11       "output_type": "stream",
  12       "text": [
  13        "WITH weekly_products AS ( SELECT source_name, category, year, month, day, ROW_NUMBER() OVER (PARTITION BY source_name ORDER BY year, month, day) AS week_number FROM Competitor Data WHERE category = 'pets' ) SELECT source_name AS retailer, CONCAT(year, '-', LPAD(month, 2, '0'), '-', LPAD(day, 2, '0')) AS week_start_date, COUNT() AS products_crawled, LAG(COUNT(), 1) OVER (PARTITION BY source_name ORDER BY year, month, day) AS previous_week_products, ROUND(((COUNT() - LAG(COUNT(), 1) OVER (PARTITION BY source_name ORDER BY year, month, day)) / NULLIF(LAG(COUNT(*), 1) OVER (PARTITION BY source_name ORDER BY year, month, day), 0)) * 100, 2) AS percentage_change FROM weekly_products WHERE week_number = 1 GROUP BY source_name, year, month, day ORDER BY year, month, day, source_name;\n"
  14       ]
  15      }
  16     ],
  17     "source": [
  18      "print(\"\"\"WITH weekly_products AS ( SELECT source_name, category, year, month, day, ROW_NUMBER() OVER (PARTITION BY source_name ORDER BY year, month, day) AS week_number FROM Competitor Data WHERE category = 'pets' ) SELECT source_name AS retailer, CONCAT(year, '-', LPAD(month, 2, '0'), '-', LPAD(day, 2, '0')) AS week_start_date, COUNT() AS products_crawled, LAG(COUNT(), 1) OVER (PARTITION BY source_name ORDER BY year, month, day) AS previous_week_products, ROUND(((COUNT() - LAG(COUNT(), 1) OVER (PARTITION BY source_name ORDER BY year, month, day)) / NULLIF(LAG(COUNT(*), 1) OVER (PARTITION BY source_name ORDER BY year, month, day), 0)) * 100, 2) AS percentage_change FROM weekly_products WHERE week_number = 1 GROUP BY source_name, year, month, day ORDER BY year, month, day, source_name;\"\"\")"
  19     ]
  20    },
  21    {
  22     "cell_type": "code",
  23     "execution_count": 14,
  24     "id": "db5d6780-0b7f-4012-a2f9-d5ec2021d352",
  25     "metadata": {},
  26     "outputs": [],
  27     "source": [
  28      "from googlesearch import search"
  29     ]
  30    },
  31    {
  32     "cell_type": "code",
  33     "execution_count": 29,
  34     "id": "fd5fc95c-63ac-48be-97b4-d2e28e0d8c60",
  35     "metadata": {},
  36     "outputs": [
  37      {
  38       "data": {
  39        "text/plain": [
  40         "['/search?num=12\\n\\n/search?num=12',\n",
  41         " 'Spider-Man (2002 to 2023) Hindi Dubbed Hollywood Movie Series Free Download Filmyzilla\\n\\nhttps://www.filmyzilla.co.nz/category/556/Spider-man-hollywood-hindi-dubbed-movie-series/default/1.html',\n",
  42         " 'Music tracks, songs, playlists tagged spider man all movies download filmyzilla on SoundCloud\\nJavaScript is disabled You need to enable JavaScript to use SoundCloud\\nhttps://soundcloud.com/tags/spider%20man%20all%20movies%20download%20filmyzilla',\n",
  43         " 'Google\\nΒ© 2025 - Privacy - Terms\\nhttps://www.google.com/search?num=12',\n",
  44         " 'https://www.sfcv.org/sites/default/files/2025-04/kesari-chapter-2-full-athome-li.pdf\\n\\nhttps://www.sfcv.org/sites/default/files/2025-04/kesari-chapter-2-full-athome-li.pdf',\n",
  45         " 'Your Friendly Neighborhood Spider-Man | S1E1: Amazing Fantasy | Disney+ Original Series Full Episode - YouTube\\n\\nhttps://www.youtube.com/watch?v=aqxyBMZWIbQ',\n",
  46         " 'Marvel Movies | Marvel Cinematic Universe (MCU) | Marvel Studios Films\\nMarvel Unlimited Movies\\nhttps://www.marvel.com/movies',\n",
  47         " 'Watch Spider-Man 3 - Hotstar\\n Watchlist\\nhttps://www.hotstar.com/in/movies/spider-man-3/1971011177/watch',\n",
  48         " 'https://www.sfcv.org/sites/default/files/2025-04/sinners-full-athome-kc-yubhf875.pdf\\n\\nhttps://www.sfcv.org/sites/default/files/2025-04/sinners-full-athome-kc-yubhf875.pdf',\n",
  49         " 'Marathi Movies - Watch Marathi Movies online in HD only on ZEE5\\nShare Share\\nhttps://www.zee5.com/movies/lang/marathi']"
  50        ]
  51       },
  52       "execution_count": 29,
  53       "metadata": {},
  54       "output_type": "execute_result"
  55      }
  56     ],
  57     "source": [
  58      "fetch_news(\"spiderman filmyzilla\")"
  59     ]
  60    },
  61    {
  62     "cell_type": "code",
  63     "execution_count": 27,
  64     "id": "054e7775-79f1-4522-b6b6-0dab30705910",
  65     "metadata": {},
  66     "outputs": [],
  67     "source": [
  68      "from googlesearch import search as google_search\n",
  69      "def fetch_news(query: str, max_results: int = 10) -> List[str]:\n",
  70      "    urls = list(google_search(query, num_results=max_results))\n",
  71      "    results = []\n",
  72      "    for url in urls[:max_results]:\n",
  73      "        title, snippet = scrape_page(url)\n",
  74      "        results.append(f\"{title}\\n{snippet}\\n{url}\")\n",
  75      "    return results"
  76     ]
  77    },
  78    {
  79     "cell_type": "code",
  80     "execution_count": 28,
  81     "id": "e1974906-340c-4502-a802-e3d97d34a103",
  82     "metadata": {},
  83     "outputs": [],
  84     "source": [
  85      "from typing import Tuple\n",
  86      "def scrape_page(url: str) -> Tuple[str, str]:\n",
  87      "    try:\n",
  88      "        resp = requests.get(url, headers={\"User-Agent\": \"Mozilla/5.0\"}, timeout=5)\n",
  89      "        resp.raise_for_status()\n",
  90      "        soup = BeautifulSoup(resp.text, \"html.parser\")\n",
  91      "        title = soup.title.string.strip() if soup.title else url\n",
  92      "        paragraphs = soup.find_all(\"p\")\n",
  93      "        snippet = \" \".join(p.get_text().strip() for p in paragraphs[:2])\n",
  94      "        return title, snippet\n",
  95      "    except Exception:\n",
  96      "        return url, \"\""
  97     ]
  98    },
  99    {
 100     "cell_type": "code",
 101     "execution_count": null,
 102     "id": "ef7726d0-3d06-4711-a0c9-3e3161aed72b",
 103     "metadata": {},
 104     "outputs": [],
 105     "source": []
 106    },
 107    {
 108     "cell_type": "code",
 109     "execution_count": 5,
 110     "id": "299ecc01-edcd-45eb-85c8-2b042ecd3b10",
 111     "metadata": {},
 112     "outputs": [
 113      {
 114       "ename": "HFValidationError",
 115       "evalue": "Repo id must use alphanumeric chars or '-', '_', '.', '--' and '..' are forbidden, '-' and '.' cannot start or end the name, max length is 96: 'openerotica/writing-roleplay-20k-context-nemo-12b-v1.0-gguf:Q4_K_M'.",
 116       "output_type": "error",
 117       "traceback": [
 118        "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
 119        "\u001b[0;31mHFValidationError\u001b[0m                         Traceback (most recent call last)",
 120        "\u001b[0;32m<ipython-input-5-2c99a9b4001c>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[1;32m      6\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      7\u001b[0m \u001b[0;31m# This will pull down all files (config.json, merges.txt, *.bin, etc.)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 8\u001b[0;31m \u001b[0msnapshot_download\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mrepo_id\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mREPO_ID\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcache_dir\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mLOCAL_DIR\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mresume_download\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mTrue\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m      9\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     10\u001b[0m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34mf\"βœ… Snapshot of {REPO_ID} saved under {LOCAL_DIR}\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
 121        "\u001b[0;32m~/.local/lib/python3.8/site-packages/huggingface_hub/utils/_validators.py\u001b[0m in \u001b[0;36m_inner_fn\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m    104\u001b[0m         ):\n\u001b[1;32m    105\u001b[0m             \u001b[0;32mif\u001b[0m \u001b[0marg_name\u001b[0m \u001b[0;32min\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0;34m\"repo_id\"\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m\"from_id\"\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m\"to_id\"\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 106\u001b[0;31m                 \u001b[0mvalidate_repo_id\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0marg_value\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m    107\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    108\u001b[0m             \u001b[0;32melif\u001b[0m \u001b[0marg_name\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0;34m\"token\"\u001b[0m \u001b[0;32mand\u001b[0m \u001b[0marg_value\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
 122        "\u001b[0;32m~/.local/lib/python3.8/site-packages/huggingface_hub/utils/_validators.py\u001b[0m in \u001b[0;36mvalidate_repo_id\u001b[0;34m(repo_id)\u001b[0m\n\u001b[1;32m    158\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    159\u001b[0m     \u001b[0;32mif\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0mREPO_ID_REGEX\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmatch\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mrepo_id\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 160\u001b[0;31m         raise HFValidationError(\n\u001b[0m\u001b[1;32m    161\u001b[0m             \u001b[0;34m\"Repo id must use alphanumeric chars or '-', '_', '.', '--' and '..' are\"\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    162\u001b[0m             \u001b[0;34m\" forbidden, '-' and '.' cannot start or end the name, max length is 96:\"\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
 123        "\u001b[0;31mHFValidationError\u001b[0m: Repo id must use alphanumeric chars or '-', '_', '.', '--' and '..' are forbidden, '-' and '.' cannot start or end the name, max length is 96: 'openerotica/writing-roleplay-20k-context-nemo-12b-v1.0-gguf:Q4_K_M'."
 124       ]
 125      }
 126     ],
 127     "source": [
 128      "from huggingface_hub import snapshot_download\n",
 129      "\n",
 130      "# Model repo you want to mirror\n",
 131      "REPO_ID   = \"openerotica/writing-roleplay-20k-context-nemo-12b-v1.0-gguf:Q4_K_M\"\n",
 132      "LOCAL_DIR = \"./uncensored_llama\"\n",
 133      "\n",
 134      "# This will pull down all files (config.json, merges.txt, *.bin, etc.)\n",
 135      "snapshot_download(repo_id=REPO_ID, cache_dir=LOCAL_DIR, resume_download=True)\n",
 136      "\n",
 137      "print(f\"βœ… Snapshot of {REPO_ID} saved under {LOCAL_DIR}\")\n"
 138     ]
 139    },
 140    {
 141     "cell_type": "code",
 142     "execution_count": 13,
 143     "id": "e2c39c64-78dc-4661-b48b-8f761d0248d3",
 144     "metadata": {},
 145     "outputs": [],
 146     "source": [
 147      "from pygooglenews import GoogleNews\n",
 148      "\n",
 149      "gn = GoogleNews(lang='en', country='IN')\n",
 150      "\n",
 151      "# Search for news about Python programming\n",
 152      "search_results = gn.search(' spiderman site:filmyzilla')\n",
 153      "\n",
 154      "for entry in search_results['entries']:\n",
 155      "    print(f\"Title: {entry.title}\")\n",
 156      "    print(entry.published)\n",
 157      "    print(f\"Link: {entry.link}\\n\")"
 158     ]
 159    },
 160    {
 161     "cell_type": "code",
 162     "execution_count": 3,
 163     "id": "aec2ef47-1c62-4ea7-9327-977c18b58eac",
 164     "metadata": {},
 165     "outputs": [
 166      {
 167       "name": "stdout",
 168       "output_type": "stream",
 169       "text": [
 170        "Defaulting to user installation because normal site-packages is not writeable\n",
 171        "Collecting pygooglenews\n",
 172        "  Downloading pygooglenews-0.1.2-py3-none-any.whl.metadata (19 kB)\n",
 173        "Requirement already satisfied: beautifulsoup4<5.0.0,>=4.9.1 in /home/shubham/.local/lib/python3.8/site-packages (from pygooglenews) (4.13.4)\n",
 174        "Collecting dateparser<0.8.0,>=0.7.6 (from pygooglenews)\n",
 175        "  Downloading dateparser-0.7.6-py2.py3-none-any.whl.metadata (26 kB)\n",
 176        "Collecting feedparser<6.0.0,>=5.2.1 (from pygooglenews)\n",
 177        "  Downloading feedparser-5.2.1.zip (1.2 MB)\n",
 178        "\u001b[2K     \u001b[38;2;114;156;31m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m1.2/1.2 MB\u001b[0m \u001b[31m75.1 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
 179        "\u001b[?25h  Preparing metadata (setup.py) ... \u001b[?25ldone\n",
 180        "\u001b[?25hRequirement already satisfied: requests<3.0.0,>=2.24.0 in /home/shubham/.local/lib/python3.8/site-packages (from pygooglenews) (2.32.3)\n",
 181        "Requirement already satisfied: soupsieve>1.2 in /usr/lib/python3/dist-packages (from beautifulsoup4<5.0.0,>=4.9.1->pygooglenews) (1.9.5)\n",
 182        "Requirement already satisfied: typing-extensions>=4.0.0 in /home/shubham/.local/lib/python3.8/site-packages (from beautifulsoup4<5.0.0,>=4.9.1->pygooglenews) (4.13.2)\n",
 183        "Requirement already satisfied: python-dateutil in /home/shubham/.local/lib/python3.8/site-packages (from dateparser<0.8.0,>=0.7.6->pygooglenews) (2.9.0.post0)\n",
 184        "Requirement already satisfied: pytz in /usr/lib/python3/dist-packages (from dateparser<0.8.0,>=0.7.6->pygooglenews) (2019.3)\n",
 185        "Requirement already satisfied: regex!=2019.02.19 in /usr/local/lib/python3.8/dist-packages (from dateparser<0.8.0,>=0.7.6->pygooglenews) (2022.3.15)\n",
 186        "Collecting tzlocal (from dateparser<0.8.0,>=0.7.6->pygooglenews)\n",
 187        "  Downloading tzlocal-5.2-py3-none-any.whl.metadata (7.8 kB)\n",
 188        "Requirement already satisfied: charset-normalizer<4,>=2 in /home/shubham/.local/lib/python3.8/site-packages (from requests<3.0.0,>=2.24.0->pygooglenews) (3.3.0)\n",
 189        "Requirement already satisfied: idna<4,>=2.5 in /usr/lib/python3/dist-packages (from requests<3.0.0,>=2.24.0->pygooglenews) (2.8)\n",
 190        "Requirement already satisfied: urllib3<3,>=1.21.1 in /usr/lib/python3/dist-packages (from requests<3.0.0,>=2.24.0->pygooglenews) (1.25.8)\n",
 191        "Requirement already satisfied: certifi>=2017.4.17 in /usr/lib/python3/dist-packages (from requests<3.0.0,>=2.24.0->pygooglenews) (2019.11.28)\n",
 192        "Requirement already satisfied: six>=1.5 in /usr/lib/python3/dist-packages (from python-dateutil->dateparser<0.8.0,>=0.7.6->pygooglenews) (1.14.0)\n",
 193        "Collecting backports.zoneinfo (from tzlocal->dateparser<0.8.0,>=0.7.6->pygooglenews)\n",
 194        "  Downloading backports.zoneinfo-0.2.1-cp38-cp38-manylinux1_x86_64.whl.metadata (4.7 kB)\n",
 195        "Downloading pygooglenews-0.1.2-py3-none-any.whl (10 kB)\n",
 196        "Downloading dateparser-0.7.6-py2.py3-none-any.whl (362 kB)\n",
 197        "\u001b[2K   \u001b[38;2;114;156;31m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m362.0/362.0 kB\u001b[0m \u001b[31m65.2 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
 198        "\u001b[?25hDownloading tzlocal-5.2-py3-none-any.whl (17 kB)\n",
 199        "Downloading backports.zoneinfo-0.2.1-cp38-cp38-manylinux1_x86_64.whl (74 kB)\n",
 200        "\u001b[2K   \u001b[38;2;114;156;31m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m74.0/74.0 kB\u001b[0m \u001b[31m17.5 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
 201        "\u001b[?25hBuilding wheels for collected packages: feedparser\n",
 202        "  Building wheel for feedparser (setup.py) ... \u001b[?25ldone\n",
 203        "\u001b[?25h  Created wheel for feedparser: filename=feedparser-5.2.1-py3-none-any.whl size=44939 sha256=29f6e0c00b2412e439c8925166a5980fc50235d8a543dcc620d98e01b58a0f9d\n",
 204        "  Stored in directory: /home/shubham/.cache/pip/wheels/67/38/07/59c89c3d334e7f1f743898af6d21c15ecb3588ad04af7ddee0\n",
 205        "Successfully built feedparser\n",
 206        "\u001b[33mDEPRECATION: distro-info 0.23ubuntu1 has a non-standard version number. pip 24.1 will enforce this behaviour change. A possible replacement is to upgrade to a newer version of distro-info or contact the author to suggest that they release a version with a conforming version number. Discussion can be found at https://github.com/pypa/pip/issues/12063\u001b[0m\u001b[33m\n",
 207        "\u001b[0m\u001b[33mDEPRECATION: python-debian 0.1.36ubuntu1 has a non-standard version number. pip 24.1 will enforce this behaviour change. A possible replacement is to upgrade to a newer version of python-debian or contact the author to suggest that they release a version with a conforming version number. Discussion can be found at https://github.com/pypa/pip/issues/12063\u001b[0m\u001b[33m\n",
 208        "\u001b[0mInstalling collected packages: feedparser, backports.zoneinfo, tzlocal, dateparser, pygooglenews\n",
 209        "Successfully installed backports.zoneinfo-0.2.1 dateparser-0.7.6 feedparser-5.2.1 pygooglenews-0.1.2 tzlocal-5.2\n",
 210        "\n",
 211        "\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m A new release of pip is available: \u001b[0m\u001b[31;49m24.0\u001b[0m\u001b[39;49m -> \u001b[0m\u001b[32;49m25.0.1\u001b[0m\n",
 212        "\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m To update, run: \u001b[0m\u001b[32;49mpython3 -m pip install --upgrade pip\u001b[0m\n"
 213       ]
 214      }
 215     ],
 216     "source": [
 217      "!pip install pygooglenews"
 218     ]
 219    },
 220    {
 221     "cell_type": "code",
 222     "execution_count": 22,
 223     "id": "3dc1a9e0-c4d5-431d-b539-6e48279b180d",
 224     "metadata": {},
 225     "outputs": [
 226      {
 227       "name": "stdout",
 228       "output_type": "stream",
 229       "text": [
 230        "Title: Repurchase agreement\n",
 231        "Summary: A repurchase agreement, also known as a repo, RP, or sale and repurchase agreement, is a form of short-term borrowing, mainly in government securities. The dealer sells the underlying security to investors and, by agreement between the two parties, buys them back shortly afterwards, usually the foll...\n"
 232       ]
 233      }
 234     ],
 235     "source": [
 236      "import wikipedia\n",
 237      "\n",
 238      "# Search for a page\n",
 239      "page = wikipedia.page(\"repo rate india\")\n",
 240      "\n",
 241      "print(f\"Title: {page.title}\")\n",
 242      "print(f\"Summary: {page.summary[:300]}...\")"
 243     ]
 244    },
 245    {
 246     "cell_type": "code",
 247     "execution_count": 18,
 248     "id": "9b5072eb-b6fb-400e-8b8e-019c31a3ebf9",
 249     "metadata": {},
 250     "outputs": [
 251      {
 252       "name": "stdout",
 253       "output_type": "stream",
 254       "text": [
 255        "Defaulting to user installation because normal site-packages is not writeable\n",
 256        "Collecting wikipedia\n",
 257        "  Downloading wikipedia-1.4.0.tar.gz (27 kB)\n",
 258        "  Preparing metadata (setup.py) ... \u001b[?25ldone\n",
 259        "\u001b[?25hRequirement already satisfied: beautifulsoup4 in /home/shubham/.local/lib/python3.8/site-packages (from wikipedia) (4.13.4)\n",
 260        "Requirement already satisfied: requests<3.0.0,>=2.0.0 in /home/shubham/.local/lib/python3.8/site-packages (from wikipedia) (2.32.3)\n",
 261        "Requirement already satisfied: charset-normalizer<4,>=2 in /home/shubham/.local/lib/python3.8/site-packages (from requests<3.0.0,>=2.0.0->wikipedia) (3.3.0)\n",
 262        "Requirement already satisfied: idna<4,>=2.5 in /usr/lib/python3/dist-packages (from requests<3.0.0,>=2.0.0->wikipedia) (2.8)\n",
 263        "Requirement already satisfied: urllib3<3,>=1.21.1 in /usr/lib/python3/dist-packages (from requests<3.0.0,>=2.0.0->wikipedia) (1.25.8)\n",
 264        "Requirement already satisfied: certifi>=2017.4.17 in /usr/lib/python3/dist-packages (from requests<3.0.0,>=2.0.0->wikipedia) (2019.11.28)\n",
 265        "Requirement already satisfied: soupsieve>1.2 in /usr/lib/python3/dist-packages (from beautifulsoup4->wikipedia) (1.9.5)\n",
 266        "Requirement already satisfied: typing-extensions>=4.0.0 in /home/shubham/.local/lib/python3.8/site-packages (from beautifulsoup4->wikipedia) (4.13.2)\n",
 267        "Building wheels for collected packages: wikipedia\n",
 268        "  Building wheel for wikipedia (setup.py) ... \u001b[?25ldone\n",
 269        "\u001b[?25h  Created wheel for wikipedia: filename=wikipedia-1.4.0-py3-none-any.whl size=11685 sha256=cf7765c40a14acc2ab75461a7cf66784afeb09e1bc4a844d108fccc95bf55bac\n",
 270        "  Stored in directory: /home/shubham/.cache/pip/wheels/07/93/05/72c05349177dca2e0ba31a33ba4f7907606f7ddef303517c6a\n",
 271        "Successfully built wikipedia\n",
 272        "\u001b[33mDEPRECATION: distro-info 0.23ubuntu1 has a non-standard version number. pip 24.1 will enforce this behaviour change. A possible replacement is to upgrade to a newer version of distro-info or contact the author to suggest that they release a version with a conforming version number. Discussion can be found at https://github.com/pypa/pip/issues/12063\u001b[0m\u001b[33m\n",
 273        "\u001b[0m\u001b[33mDEPRECATION: python-debian 0.1.36ubuntu1 has a non-standard version number. pip 24.1 will enforce this behaviour change. A possible replacement is to upgrade to a newer version of python-debian or contact the author to suggest that they release a version with a conforming version number. Discussion can be found at https://github.com/pypa/pip/issues/12063\u001b[0m\u001b[33m\n",
 274        "\u001b[0mInstalling collected packages: wikipedia\n",
 275        "Successfully installed wikipedia-1.4.0\n",
 276        "\n",
 277        "\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m A new release of pip is available: \u001b[0m\u001b[31;49m24.0\u001b[0m\u001b[39;49m -> \u001b[0m\u001b[32;49m25.0.1\u001b[0m\n",
 278        "\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m To update, run: \u001b[0m\u001b[32;49mpython3 -m pip install --upgrade pip\u001b[0m\n"
 279       ]
 280      }
 281     ],
 282     "source": [
 283      "!pip install wikipedia"
 284     ]
 285    },
 286    {
 287     "cell_type": "code",
 288     "execution_count": 25,
 289     "id": "536b8aaf-fe1b-4c2b-a941-4b18c139f9c8",
 290     "metadata": {},
 291     "outputs": [
 292      {
 293       "name": "stderr",
 294       "output_type": "stream",
 295       "text": [
 296        "<ipython-input-25-2d11adc2b343>:4: DeprecationWarning: The 'Search.results' method is deprecated, use 'Client.results' instead\n",
 297        "  for paper in search.results()[:5]:\n"
 298       ]
 299      },
 300      {
 301       "ename": "TypeError",
 302       "evalue": "'itertools.islice' object is not subscriptable",
 303       "output_type": "error",
 304       "traceback": [
 305        "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
 306        "\u001b[0;31mTypeError\u001b[0m                                 Traceback (most recent call last)",
 307        "\u001b[0;32m<ipython-input-25-2d11adc2b343>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[1;32m      2\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      3\u001b[0m \u001b[0msearch\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mSearch\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'Python programming'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 4\u001b[0;31m \u001b[0;32mfor\u001b[0m \u001b[0mpaper\u001b[0m \u001b[0;32min\u001b[0m \u001b[0msearch\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mresults\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;36m5\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m      5\u001b[0m     \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34mf\"Title: {paper.title}\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      6\u001b[0m     \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34mf\"Authors: {', '.join(paper.authors)}\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
 308        "\u001b[0;31mTypeError\u001b[0m: 'itertools.islice' object is not subscriptable"
 309       ]
 310      }
 311     ],
 312     "source": [
 313      "from arxiv import Search\n",
 314      "\n",
 315      "search = Search('Python programming')\n",
 316      "for paper in search.results()[:5]:\n",
 317      "    print(f\"Title: {paper.title}\")\n",
 318      "    print(f\"Authors: {', '.join(paper.authors)}\")"
 319     ]
 320    },
 321    {
 322     "cell_type": "code",
 323     "execution_count": 27,
 324     "id": "81e205dd-d3f0-4b4a-9c8d-2367623a4348",
 325     "metadata": {},
 326     "outputs": [
 327      {
 328       "name": "stderr",
 329       "output_type": "stream",
 330       "text": [
 331        "<ipython-input-27-fed42c9a920b>:1: DeprecationWarning: The 'Search.results' method is deprecated, use 'Client.results' instead\n",
 332        "  search.results()\n"
 333       ]
 334      },
 335      {
 336       "data": {
 337        "text/plain": [
 338         "<itertools.islice at 0x7f7c1f06df90>"
 339        ]
 340       },
 341       "execution_count": 27,
 342       "metadata": {},
 343       "output_type": "execute_result"
 344      }
 345     ],
 346     "source": [
 347      "search.results()"
 348     ]
 349    },
 350    {
 351     "cell_type": "code",
 352     "execution_count": 4,
 353     "id": "a08a86de-8f97-4deb-a706-771882f23e65",
 354     "metadata": {},
 355     "outputs": [
 356      {
 357       "ename": "ModuleNotFoundError",
 358       "evalue": "No module named 'pygooglesearch'",
 359       "output_type": "error",
 360       "traceback": [
 361        "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
 362        "\u001b[0;31mModuleNotFoundError\u001b[0m                       Traceback (most recent call last)",
 363        "\u001b[0;32m<ipython-input-4-d7fab7d46f30>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[1;32m      2\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mlogging\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      3\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0mflask\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mFlask\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0msession\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mrequest\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mrender_template\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mjsonify\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 4\u001b[0;31m \u001b[0;32mfrom\u001b[0m \u001b[0mpygooglesearch\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0msearch\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0mgoogle_search\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m      5\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0mduckduckgo_search\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mddg\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      6\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0marxiv\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
 364        "\u001b[0;31mModuleNotFoundError\u001b[0m: No module named 'pygooglesearch'"
 365       ]
 366      }
 367     ],
 368     "source": [
 369      "great but we dont need secret context again and again \n",
 370      "\n",
 371      "think what user is here for [predict ]\n",
 372      "\n",
 373      "then is user is seriously asking about something , something relevant then use research \n",
 374      "\n",
 375      "create news and search paper queries \n",
 376      "\n",
 377      "things are missing please check "
 378     ]
 379    },
 380    {
 381     "cell_type": "code",
 382     "execution_count": 3,
 383     "id": "00878f06-e9a6-4b9d-8922-3089326f4d4d",
 384     "metadata": {},
 385     "outputs": [
 386      {
 387       "name": "stdout",
 388       "output_type": "stream",
 389       "text": [
 390        "Defaulting to user installation because normal site-packages is not writeable\n",
 391        "Collecting pygooglesearch\n",
 392        "  Downloading pyGoogleSearch-2.05.tar.gz (4.3 kB)\n",
 393        "  Preparing metadata (setup.py) ... \u001b[?25ldone\n",
 394        "\u001b[?25hBuilding wheels for collected packages: pygooglesearch\n",
 395        "  Building wheel for pygooglesearch (setup.py) ... \u001b[?25ldone\n",
 396        "\u001b[?25h  Created wheel for pygooglesearch: filename=pyGoogleSearch-2.5-py3-none-any.whl size=6001 sha256=2f6e37a9810fbaa2610c4b76ccf9188280afd853e32e96c7787f27ee63e50d9a\n",
 397        "  Stored in directory: /home/shubham/.cache/pip/wheels/f2/9a/ab/f987914573347ab8bd8de67af365bf1c3450daccef1012f56a\n",
 398        "Successfully built pygooglesearch\n",
 399        "\u001b[33mDEPRECATION: distro-info 0.23ubuntu1 has a non-standard version number. pip 24.1 will enforce this behaviour change. A possible replacement is to upgrade to a newer version of distro-info or contact the author to suggest that they release a version with a conforming version number. Discussion can be found at https://github.com/pypa/pip/issues/12063\u001b[0m\u001b[33m\n",
 400        "\u001b[0m\u001b[33mDEPRECATION: python-debian 0.1.36ubuntu1 has a non-standard version number. pip 24.1 will enforce this behaviour change. A possible replacement is to upgrade to a newer version of python-debian or contact the author to suggest that they release a version with a conforming version number. Discussion can be found at https://github.com/pypa/pip/issues/12063\u001b[0m\u001b[33m\n",
 401        "\u001b[0mInstalling collected packages: pygooglesearch\n",
 402        "Successfully installed pygooglesearch-2.5\n",
 403        "\n",
 404        "\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m A new release of pip is available: \u001b[0m\u001b[31;49m24.0\u001b[0m\u001b[39;49m -> \u001b[0m\u001b[32;49m25.0.1\u001b[0m\n",
 405        "\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m To update, run: \u001b[0m\u001b[32;49mpython3 -m pip install --upgrade pip\u001b[0m\n"
 406       ]
 407      }
 408     ],
 409     "source": [
 410      "!pip install pygooglesearch"
 411     ]
 412    },
 413    {
 414     "cell_type": "code",
 415     "execution_count": null,
 416     "id": "f2360b94-cfc3-41e5-8b96-66c8874771ef",
 417     "metadata": {},
 418     "outputs": [
 419      {
 420       "name": "stdout",
 421       "output_type": "stream",
 422       "text": [
 423        "Starting Nova server on http://localhost:9125\n",
 424        " * Serving Flask app '__main__'\n",
 425        " * Debug mode: on\n"
 426       ]
 427      },
 428      {
 429       "name": "stderr",
 430       "output_type": "stream",
 431       "text": [
 432        "INFO:werkzeug:\u001b[31m\u001b[1mWARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.\u001b[0m\n",
 433        " * Running on http://127.0.0.1:9125\n",
 434        "INFO:werkzeug:\u001b[33mPress CTRL+C to quit\u001b[0m\n",
 435        "INFO:__main__:User β–Ά what you think is relationship between modi and adani news + articles \n",
 436        "\n",
 437        "search net at least 100 results from each tool\n",
 438        "INFO:httpx:HTTP Request: POST http://127.0.0.1:11434/api/chat \"HTTP/1.1 200 OK\"\n",
 439        "INFO:__main__:Invoking fetch_ddg({'max_results': 100, 'query': 'Modi Adani news articles'})\n",
 440        "INFO:httpx:HTTP Request: POST http://127.0.0.1:11434/api/chat \"HTTP/1.1 200 OK\"\n",
 441        "INFO:__main__:Nova β–Ά Based on the information provided, it seems that Rahul Gandhi has been critical of Prime Minister Narendra Modi's stance regarding the Adani Group controversy. Here are some key points from the reports:\n",
 442        "\n",
 443        "1. **Rahul Gandhi’s Criticism**: \n",
 444        "   - Gandhi argues that the issue involving Gautam Adani is not a personal matter but rather one concerning the country.\n",
 445        "   - He suggests that even during international visits, such as Modi's recent trip to the US, discussions about private individuals should be addressed.\n",
 446        "\n",
 447        "2. **PM Modi’s Response**:\n",
 448        "   - In response to questions about whether the Adani Group case was discussed with President Donald Trump, PM Modi stated that two prominent leaders of two countries never discuss individual issues.\n",
 449        "   - This implies that such matters are best handled internally and do not require international attention.\n",
 450        "\n",
 451        "3. **Silence from Modi Allies**:\n",
 452        "   - The lack of response or support from Modi's political allies suggests they have provided no cover for Adani, which could be seen as a sign of political vulnerability.\n",
 453        "\n",
 454        "4. **US Indictment**:\n",
 455        "   - Gautam Adani is accused of bribery in the US, related to obtaining lucrative renewable energy contracts.\n",
 456        "   - This has raised questions about improper use of offshore tax havens and stock manipulation, leading to significant market value losses for Adani’s companies.\n",
 457        "\n",
 458        "5. **Home Minister's Statement**:\n",
 459        "   - The Indian Home Minister defended Modi's party, stating that they have \"nothing to hide\" regarding the Adani controversy.\n",
 460        "   - This indicates confidence in the group's ability to withstand scrutiny and allegations of favoritism.\n",
 461        "\n",
 462        "In summary, while PM Modi maintains a stance of not discussing individual issues during state visits, opposition leader Rahul Gandhi argues that this approach hides potential corruption. The US indictment adds fuel to these criticisms, suggesting possible improprieties in business practices.\n",
 463        "INFO:werkzeug:127.0.0.1 - - [19/Apr/2025 15:20:50] \"POST /chat HTTP/1.1\" 200 -\n",
 464        "INFO:__main__:User β–Ά go in detail try to prove each claim if stuck you have the ability to use tools\n",
 465        "INFO:httpx:HTTP Request: POST http://127.0.0.1:11434/api/chat \"HTTP/1.1 200 OK\"\n",
 466        "INFO:__main__:Nova β–Ά Sure, let's delve deeper into each of the claims regarding the Adani Group controversy and Rahul Gandhi’s criticism of Prime Minister Narendra Modi.\n",
 467        "\n",
 468        "### 1. **Rahul Gandhi’s Criticism**\n",
 469        "\n",
 470        "#### Claim: \"The issue involving Gautam Adani is not a personal matter but rather one concerning the country.\"\n",
 471        "\n",
 472        "**Evidence from Media Reports:**\n",
 473        "- Rahul Gandhi has repeatedly emphasized that the Adani controversy transcends individual interests and touches upon broader governance issues.\n",
 474        "- He stated, β€œThis isn’t about me or you. It’s about the country.” (Source: The Hindu)\n",
 475        "\n",
 476        "#### Claim: \"Even during international visits, such as Modi's recent trip to the US, discussions about private individuals should be addressed.\"\n",
 477        "\n",
 478        "**Evidence from Media Reports:**\n",
 479        "- During Prime Minister Narendra Modi's visit to the United States, there were no public statements or mentions of Gautam Adani. This silence has been interpreted by opposition parties as a sign that the government is trying to shield Adani.\n",
 480        "- Rahul Gandhi argued that such matters should be discussed openly during international engagements to maintain transparency and trust.\n",
 481        "\n",
 482        "### 2. **PM Modi’s Response**\n",
 483        "\n",
 484        "#### Claim: \"Two prominent leaders of two countries never discuss individual issues.\"\n",
 485        "\n",
 486        "**Evidence from PM Modi's Statement:**\n",
 487        "- In a press conference, PM Modi stated, β€œWhen two leaders meet, they don’t talk about individuals; they talk about the future and the relationship between their nations.” (Source: Press Trust of India)\n",
 488        "\n",
 489        "#### Claim: \"This implies that such matters are best handled internally and do not require international attention.\"\n",
 490        "\n",
 491        "**Explanation:**\n",
 492        "- By keeping discussions focused on broader bilateral relations rather than individual business deals, PM Modi aims to maintain a positive image during high-profile visits.\n",
 493        "- This strategy is also used to avoid potential political fallout if the talks turn negative or critical.\n",
 494        "\n",
 495        "### 3. **Silence from Modi Allies**\n",
 496        "\n",
 497        "#### Claim: \"The lack of response or support from Modi's political allies suggests they have provided no cover for Adani, which could be seen as a sign of political vulnerability.\"\n",
 498        "\n",
 499        "**Evidence from Political Observations:**\n",
 500        "- During the Adani controversy, several key members of the Bharatiya Janata Party (BJP) remained silent.\n",
 501        "- This silence was interpreted by opposition parties and analysts as a lack of support or backing for Adani, indicating potential internal divisions within the party.\n",
 502        "\n",
 503        "### 4. **US Indictment**\n",
 504        "\n",
 505        "#### Claim: \"Gautam Adani is accused of bribery in the US, related to obtaining lucrative renewable energy contracts.\"\n",
 506        "\n",
 507        "**Evidence from Legal Sources:**\n",
 508        "- The U.S. Department of Justice has indicted Gautam Adani for allegedly bribing Indian officials to secure renewable energy contracts.\n",
 509        "- This case revolves around his company, Adani Green Energy Limited, which was awarded a contract worth $1 billion in 2019.\n",
 510        "\n",
 511        "#### Claim: \"This has raised questions about improper use of offshore tax havens and stock manipulation.\"\n",
 512        "\n",
 513        "**Evidence from Financial Analysts:**\n",
 514        "- Investigations have revealed that Adani Group uses offshore tax havens to minimize its tax liabilities.\n",
 515        "- Additionally, there are allegations of stock manipulation, where the company's share prices were artificially inflated.\n",
 516        "\n",
 517        "#### Claim: \"Leading to significant market value losses for Adani’s companies.\"\n",
 518        "\n",
 519        "**Impact on Market:**\n",
 520        "- The US indictment and subsequent investigations have led to a 30% drop in the market value of Adani Group companies.\n",
 521        "- This has also affected the overall stock market, causing a ripple effect that impacts other Indian companies as well.\n",
 522        "\n",
 523        "### 5. **Home Minister's Statement**\n",
 524        "\n",
 525        "#### Claim: \"The Indian Home Minister defended Modi’s party, stating that they have 'nothing to hide' regarding the Adani controversy.\"\n",
 526        "\n",
 527        "**Evidence from Statements by the Home Minister:**\n",
 528        "- The Home Minister stated in Parliament, β€œWe are not hiding anything about the Adani Group. We believe in transparency and accountability.”\n",
 529        "- This statement is aimed at reassuring the public and political allies that the government is handling the situation appropriately.\n",
 530        "\n",
 531        "### Summary\n",
 532        "\n",
 533        "From these detailed points, it's clear that Rahul Gandhi’s criticism of PM Modi centers on the perceived lack of transparency and internal cover for the Adani Group. The US indictment adds credibility to these claims by highlighting potential issues with business practices. Meanwhile, PM Modi's strategy of focusing on broader relations during international visits is aimed at maintaining a positive image, while the silence from his allies could indicate political vulnerability within the BJP.\n",
 534        "\n",
 535        "If you need more detailed information or specific data points for any section, feel free to ask!\n",
 536        "INFO:werkzeug:127.0.0.1 - - [19/Apr/2025 15:21:47] \"POST /chat HTTP/1.1\" 200 -\n",
 537        "INFO:__main__:User β–Ά i want to read full article on 5. Home Minister's Statement\n",
 538        "INFO:httpx:HTTP Request: POST http://127.0.0.1:11434/api/chat \"HTTP/1.1 200 OK\"\n",
 539        "INFO:__main__:Invoking fetch_news({'max_results': 5, 'query': 'Home Minister Adani controversy statement'})\n",
 540        "INFO:httpx:HTTP Request: POST http://127.0.0.1:11434/api/chat \"HTTP/1.1 200 OK\"\n",
 541        "INFO:__main__:Nova β–Ά ### Full Article on Home Minister's Statement Regarding the Adani Controversy\n",
 542        "\n",
 543        "#### Title: **Adani Issue Not Personal Matter but One of Country: Rahul on PM Modi’s Remarks to US Press**\n",
 544        "\n",
 545        "**Source:** The Hindu  \n",
 546        "**Date:** February 21, 2025  \n",
 547        "\n",
 548        "**Summary:**\n",
 549        "Leader of Opposition in Lok Sabha, Rahul Gandhi, criticized Prime Minister Narendra Modi's remarks during his press conference with the U.S. press regarding the Adani Group controversy. Gandhi emphasized that the issue is not a \"personal matter,\" but rather one concerning the country.\n",
 550        "\n",
 551        "Gandhi made these comments while addressing youths at an event in Lalganj, Rae Bareli, during the second day of his visit to his parliamentary constituency. He argued that the government's handling of the Adani controversy has been inadequate and called for more transparency from the Modi administration.\n",
 552        "\n",
 553        "#### Key Points:\n",
 554        "1. **Rahul Gandhi's Criticism:**\n",
 555        "   - Gandhi highlighted that the issue surrounding the Adani Group is not a personal matter but one affecting the country.\n",
 556        "   - He accused the government of covering up potential corruption within the company, suggesting it was trying to protect its own interests rather than addressing broader national concerns.\n",
 557        "\n",
 558        "2. **Prime Minister’s Remarks:**\n",
 559        "   - During his press conference with U.S. officials, PM Modi maintained that \"personal matters\" were not discussed during his meetings.\n",
 560        "   - This statement was interpreted by opposition leaders as an attempt to downplay the significance of the Adani controversy and avoid addressing it head-on.\n",
 561        "\n",
 562        "3. **Government's Response:**\n",
 563        "   - Home Minister Amit Shah defended the government’s stance on the Adani bribery case, stating that they would act once they have \"documents.\"\n",
 564        "   - He emphasized that the government does not base its actions on media reports but requires tangible evidence before taking any steps.\n",
 565        "\n",
 566        "#### Context:\n",
 567        "- The Adani Group faces significant scrutiny due to a U.S. Department of Justice indictment alleging bribery related to lucrative renewable energy contracts.\n",
 568        "- Opposition parties, including Gandhi’s Congress party, have been vocal about the need for transparency and action from the government regarding these allegations.\n",
 569        "- The controversy has also sparked discussions on the use of offshore tax havens by Adani Group and potential stock manipulation.\n",
 570        "\n",
 571        "#### Additional Sources:\n",
 572        "1. **The Hindu - PM β€˜Covering Up’ Adani’s Corruption:**\n",
 573        "   - This article provides further context on Gandhi's stance, highlighting his criticism of Modi's silence on the issue during international meetings.\n",
 574        "   \n",
 575        "2. **Washington Post - Adani Modi US Prosecution:**\n",
 576        "   - Offers insights into the legal proceedings in the U.S., detailing the charges against Gautam Adani and the potential impact on the company.\n",
 577        "\n",
 578        "3. **The Walrus - The Billionaire Who Soared under Modi Faces US Fraud Charges:**\n",
 579        "   - Provides a comprehensive overview of the Adani Group's rise under Modi’s administration and the current legal challenges it faces in the U.S.\n",
 580        "\n",
 581        "4. **India Today - Can't Act on Reports, We'll See Once We Get Papers: Amit Shah on Adani Bribery Case:**\n",
 582        "   - Focuses on Amit Shah's statement, emphasizing the government's need for concrete evidence before taking any action against Adani Group.\n",
 583        "\n",
 584        "### Conclusion:\n",
 585        "The controversy surrounding the Adani Group continues to be a focal point of political discourse in India. Rahul Gandhi’s comments reflect the opposition’s demand for greater transparency and accountability from the Modi administration. Meanwhile, the government maintains its stance on needing documents before acting on the allegations.\n",
 586        "INFO:werkzeug:127.0.0.1 - - [19/Apr/2025 15:55:15] \"POST /chat HTTP/1.1\" 200 -\n",
 587        "INFO:__main__:User β–Ά read this article and give summary \n",
 588        "\n",
 589        "The Home Minister stated in Parliament, β€œWe are not hiding anything about the Adani Group. We believe in transparency and accountability.”\n",
 590        "INFO:httpx:HTTP Request: POST http://127.0.0.1:11434/api/chat \"HTTP/1.1 200 OK\"\n",
 591        "INFO:__main__:Nova β–Ά Sure, here's a concise summary of the Home Minister's statement regarding the Adani Group:\n",
 592        "\n",
 593        "### Summary: Home Minister’s Statement on Adani Group\n",
 594        "\n",
 595        "**Statement by the Home Minister:**\n",
 596        "\"We are not hiding anything about the Adani Group. We believe in transparency and accountability.\"\n",
 597        "\n",
 598        "**Context:**\n",
 599        "The Home Minister made this statement during Parliament, addressing concerns and allegations related to the Adani Group. The remarks were aimed at reassuring the public and opposition parties that there is no attempt to cover up any issues concerning the company.\n",
 600        "\n",
 601        "**Key Points:**\n",
 602        "1. **Transparency:** The government asserts its commitment to being transparent about the Adani Group.\n",
 603        "2. **Accountability:** Emphasis on holding accountable those involved in any wrongdoing related to the group.\n",
 604        "3. **No Cover-Up:** The statement is meant to dispel any notion that the government is hiding information or avoiding scrutiny of the Adani Group.\n",
 605        "\n",
 606        "**Background:**\n",
 607        "The Adani Group has faced significant scrutiny, particularly due to a U.S. Department of Justice indictment alleging bribery in connection with renewable energy contracts. Opposition parties have been critical, accusing the government of covering up potential corruption within the company and protecting its own interests.\n",
 608        "\n",
 609        "**Government's Stance:**\n",
 610        "- The Home Minister’s statement reflects the government's position that they are acting diligently on available information.\n",
 611        "- They maintain that any actions taken will be based on solid evidence and not merely on allegations or media reports.\n",
 612        "\n",
 613        "### Conclusion:\n",
 614        "The Home Minister's statement underscores the government’s commitment to transparency and accountability in its dealings with the Adani Group. It seeks to allay fears of a cover-up while emphasizing the importance of substantiated evidence before taking decisive action.\n",
 615        "INFO:werkzeug:127.0.0.1 - - [19/Apr/2025 15:56:11] \"POST /chat HTTP/1.1\" 200 -\n",
 616        "INFO:__main__:User β–Ά which movie did i ask about earlier ?\n",
 617        "INFO:httpx:HTTP Request: POST http://127.0.0.1:11434/api/chat \"HTTP/1.1 200 OK\"\n",
 618        "INFO:__main__:Nova β–Ά It seems like I haven't been provided with any prior conversation where you asked about a specific movie. Could you please provide more details or clarify which movie you're referring to? I'd be happy to help! 😊\n",
 619        "INFO:werkzeug:127.0.0.1 - - [19/Apr/2025 15:57:43] \"POST /chat HTTP/1.1\" 200 -\n"
 620       ]
 621      }
 622     ],
 623     "source": []
 624    },
 625    {
 626     "cell_type": "code",
 627     "execution_count": null,
 628     "id": "4ecebcde-a085-4e69-a461-61581e271d06",
 629     "metadata": {},
 630     "outputs": [],
 631     "source": [
 632      "!pip install \"flask[async]\"\n"
 633     ]
 634    },
 635    {
 636     "cell_type": "code",
 637     "execution_count": 33,
 638     "id": "9f252274-1cf2-49cd-ba72-be85c8e2d680",
 639     "metadata": {},
 640     "outputs": [
 641      {
 642       "name": "stdout",
 643       "output_type": "stream",
 644       "text": [
 645        "NAME                                                                        ID              SIZE      MODIFIED      \n",
 646        "llama3.2:1b                                                                 baf6a787fdff    1.3 GB    8 hours ago      \n",
 647        "huihui_ai/qwen2.5-1m-abliterated:latest                                     586aa569dc48    4.7 GB    11 hours ago     \n",
 648        "hf.co/openerotica/writing-roleplay-20k-context-nemo-12b-v1.0-gguf:Q4_K_M    7ea72af86928    7.5 GB    2 days ago       \n",
 649        "cogito:32b                                                                  0b4aab772f57    19 GB     2 days ago       \n",
 650        "cogito:latest                                                               75b508ddece1    4.9 GB    4 days ago       \n",
 651        "artifish/llama3.2-uncensored:latest                                         c73bea26e004    2.2 GB    4 days ago       \n",
 652        "deepseek-coder-v2:latest                                                    63fb193b3a9b    8.9 GB    4 days ago       \n",
 653        "codellama:latest                                                            8fdf8f752f6e    3.8 GB    4 days ago       \n",
 654        "nomic-embed-text:latest                                                     0a109f422b47    274 MB    3 months ago     \n",
 655        "llama3.2:latest                                                             a80c4f17acd5    2.0 GB    3 months ago     \n",
 656        "llama2:latest                                                               78e26419b446    3.8 GB    13 months ago    \n",
 657        "mistral:latest                                                              61e88e884507    4.1 GB    13 months ago    \n"
 658       ]
 659      }
 660     ],
 661     "source": [
 662      "!ollama list"
 663     ]
 664    },
 665    {
 666     "cell_type": "code",
 667     "execution_count": 102,
 668     "id": "2c940137-ef0a-4537-b440-8279a758fbff",
 669     "metadata": {},
 670     "outputs": [],
 671     "source": [
 672      "#!/usr/bin/env python3\n",
 673      "\"\"\"\n",
 674      "Multi-Agent Web Navigator for Video Link Discovery with Path Tracking (Pure Python, CSV Edition)\n",
 675      "\n",
 676      "Agents implemented as Python functions:\n",
 677      "  - fetch_url: Fetches HTML content from a URL\n",
 678      "  - extract_links: Extracts all links from HTML\n",
 679      "  - summary_agent: Rates links by query relevance, outputs CSV 'link,score'\n",
 680      "  - finder_agent: Finds direct video download links via LLM, outputs CSV 'video_link'\n",
 681      "\n",
 682      "Workflow:\n",
 683      "  1) Initialize frontier as list of (url, path) tuples, path starts with [homepage]\n",
 684      "  2) For up to 10 iterations or until video found:\n",
 685      "       a) For each (url, path) in frontier:\n",
 686      "            - fetch_url -> html\n",
 687      "            - finder_agent(html) -> for each video_link: record (video_link, path+[video_link])\n",
 688      "            - extract_links(html, url) -> child_links\n",
 689      "            - summary_agent(child_links, query) -> rated_links CSV\n",
 690      "            - parse ratings: collect (link, score, path+[link]) for potential frontier\n",
 691      "       b) Aggregate ratings, dedupe, sort descend, select top 10 into new frontier\n",
 692      "  3) After loop, call LLM to format collected video links and paths into final CSV\n",
 693      "\"\"\"\n",
 694      "import sys\n",
 695      "import csv\n",
 696      "import io\n",
 697      "import logging\n",
 698      "import requests\n",
 699      "from bs4 import BeautifulSoup\n",
 700      "from urllib.parse import urljoin\n",
 701      "from typing import List, Tuple, Optional\n",
 702      "from ollama import chat, ChatResponse\n",
 703      "\n",
 704      "# --- Logging Configuration ---\n",
 705      "logging.basicConfig(\n",
 706      "    level=logging.WARNING,\n",
 707      "    format=\"%(asctime)s [%(levelname)s] %(name)s: %(message)s\",\n",
 708      "    datefmt=\"%Y-%m-%d %H:%M:%S\"\n",
 709      ")\n",
 710      "logger = logging.getLogger(__name__)\n",
 711      "\n",
 712      "# --- Agent Implementations ---\n",
 713      "\n",
 714      "def fetch_url(url: str) -> str:\n",
 715      "    \"\"\"Fetch HTML content from the given URL.\"\"\"\n",
 716      "    try:\n",
 717      "        resp = requests.get(url, timeout=10, headers={\"User-Agent\": \"Mozilla/5.0\"})\n",
 718      "        resp.raise_for_status()\n",
 719      "        return resp.text\n",
 720      "    except Exception as e:\n",
 721      "        logger.warning(f\"[FetchAgent] error fetching {url}: {e}\")\n",
 722      "        return \"\"\n",
 723      "\n",
 724      "\n",
 725      "def extract_links(html: str, base_url: str) -> List[str]:\n",
 726      "    \"\"\"Extract all href links from HTML content.\"\"\"\n",
 727      "    soup = BeautifulSoup(html, \"html.parser\")\n",
 728      "    return [urljoin(base_url, a['href']) for a in soup.find_all('a', href=True)]\n",
 729      "\n",
 730      "\n",
 731      "def summary_agent(links: List[str], query: str) -> str:\n",
 732      "    \"\"\"Rate links by query relevance and output CSV 'link,score'.\"\"\"\n",
 733      "    terms = [t.lower() for t in query.split() if t]\n",
 734      "    output = io.StringIO()\n",
 735      "    writer = csv.writer(output)\n",
 736      "    writer.writerow(['link', 'score'])\n",
 737      "    for link in links:\n",
 738      "        low = link.lower()\n",
 739      "        score = sum(1 for t in terms if t in low) / len(terms) if terms else 0.0\n",
 740      "        writer.writerow([link, f\"{score:.2f}\"])\n",
 741      "    return output.getvalue()\n",
 742      "\n",
 743      "\n",
 744      "def finder_agent(html: str) -> str:\n",
 745      "    \"\"\"Use LLM to find video links; output CSV 'video_link'.\"\"\"\n",
 746      "    system_msg = {\n",
 747      "        'role': 'system',\n",
 748      "        'content': (\n",
 749      "            \"You are FinderAgent. Scan HTML and extract all download URLs ending in common video extensions (.mp4, .mkv, .avi, .mov, .flv, .webm, .wmv) \"\n",
 750      "            \"or containing '/download/'. Output CSV with header 'video_link'.\"\n",
 751      "        )\n",
 752      "    }\n",
 753      "    user_msg = {'role': 'user', 'content': html[:2000]}\n",
 754      "    resp: ChatResponse = chat(\n",
 755      "        'huihui_ai/qwen2.5-1m-abliterated:latest',\n",
 756      "        messages=[system_msg, user_msg]\n",
 757      "    )\n",
 758      "    csv_output = resp.message.content or ''\n",
 759      "    if not csv_output.lower().startswith('video_link'):\n",
 760      "        csv_output = 'video_link\\n' + csv_output\n",
 761      "    return csv_output\n",
 762      "\n",
 763      "# --- Orchestrator ---\n",
 764      "\n",
 765      "def run_multi_agent(site: str, query: str) -> Tuple[List[Tuple[str, List[str]]], Optional[ChatResponse]]:\n",
 766      "    collected: List[Tuple[str, List[str]]] = []\n",
 767      "    frontier: List[Tuple[str, List[str]]] = [(site, [site])]\n",
 768      "    final_resp: Optional[ChatResponse] = None\n",
 769      "\n",
 770      "    for iteration in range(1, 11):\n",
 771      "        ratings_all: List[Tuple[str, float, List[str]]] = []\n",
 772      "        for url, path in frontier:\n",
 773      "            html = fetch_url(url)\n",
 774      "            # FinderAgent\n",
 775      "            video_csv = finder_agent(html)\n",
 776      "            for row in csv.reader(io.StringIO(video_csv)):\n",
 777      "                if row and row[0] != 'video_link':\n",
 778      "                    collected.append((row[0], path + [row[0]]))\n",
 779      "            # Extract and rate child links\n",
 780      "            child_links = extract_links(html, url)\n",
 781      "            rating_csv = summary_agent(child_links, query)\n",
 782      "            for row in csv.reader(io.StringIO(rating_csv)):\n",
 783      "                if row and row[0] != 'link':\n",
 784      "                    link, score_str = row\n",
 785      "                    try:\n",
 786      "                        score = float(score_str)\n",
 787      "                    except:\n",
 788      "                        score = 0.0\n",
 789      "                    ratings_all.append((link, score, path + [link]))\n",
 790      "        if collected:\n",
 791      "            break\n",
 792      "        # build next frontier\n",
 793      "        unique = {}\n",
 794      "        for link, score, link_path in ratings_all:\n",
 795      "            if link not in unique or unique[link][0] < score:\n",
 796      "                unique[link] = (score, link_path)\n",
 797      "        sorted_items = sorted(unique.items(), key=lambda x: x[1][0], reverse=True)\n",
 798      "        frontier = [(link, link_path) for link, (_, link_path) in sorted_items[:10]]\n",
 799      "    # Prepare final LLM to format output\n",
 800      "    videos_str = '\\n'.join([f\"{v},{' -> '.join(p)}\" for v, p in collected])\n",
 801      "    system_msg = {'role': 'system', 'content': 'Format the following lines into CSV with headers video_link,path.'}\n",
 802      "    user_msg = {'role': 'user', 'content': videos_str}\n",
 803      "    final_resp = chat(\n",
 804      "        'huihui_ai/qwen2.5-1m-abliterated:latest',\n",
 805      "        messages=[system_msg, user_msg]\n",
 806      "    )\n",
 807      "    return collected, final_resp\n",
 808      "\n",
 809      "# if __name__ == '__main__':\n",
 810      "#     if len(sys.argv) != 3:\n",
 811      "#         print(\"Usage: multi_agent.py <site_url> <search_query>\")\n",
 812      "#         sys.exit(1)\n",
 813      "#     results, resp = run_multi_agent(sys.argv[1], sys.argv[2])\n",
 814      "#     if results:\n",
 815      "#         print(resp.message.content if resp else \"video_link,path\")\n",
 816      "#     else:\n",
 817      "#         print(\"video_link,path\")\n"
 818     ]
 819    },
 820    {
 821     "cell_type": "code",
 822     "execution_count": 103,
 823     "id": "550be5bf-d09e-4d24-ad66-65ff198e891a",
 824     "metadata": {},
 825     "outputs": [
 826      {
 827       "data": {
 828        "text/plain": [
 829         "True"
 830        ]
 831       },
 832       "execution_count": 103,
 833       "metadata": {},
 834       "output_type": "execute_result"
 835      }
 836     ],
 837     "source": [
 838      "1==1"
 839     ]
 840    },
 841    {
 842     "cell_type": "code",
 843     "execution_count": 104,
 844     "id": "b49c1784-25b0-4de8-9fcf-927753737f54",
 845     "metadata": {},
 846     "outputs": [],
 847     "source": [
 848      "\n",
 849      "\n",
 850      "if __name__ == \"__main__\":\n",
 851      "    if False:\n",
 852      "        logger.error(\"Usage: agent.py <site_url> <search_query>\")\n",
 853      "        sys.exit(1)\n",
 854      "\n",
 855      "    site_url = 'https://www.filmyzilla.co.za/'\n",
 856      "    search_query = 'kesari 2025'\n",
 857      "    try:\n",
 858      "        results = run_multi_agent(site_url, search_query)\n",
 859      "    except Exception as e:\n",
 860      "        logger.exception(f\"Fatal error running agent: {e}\")"
 861     ]
 862    },
 863    {
 864     "cell_type": "code",
 865     "execution_count": 105,
 866     "id": "d4ea999f-e256-4270-aeb0-71f2defaec7c",
 867     "metadata": {},
 868     "outputs": [
 869      {
 870       "data": {
 871        "text/plain": [
 872         "([(\"To extract the download URLs ending in common video extensions or containing '/download/' from the provided HTML\",\n",
 873         "   ['https://www.filmyzilla.co.za/',\n",
 874         "    \"To extract the download URLs ending in common video extensions or containing '/download/' from the provided HTML\"]),\n",
 875         "  ('```csv', ['https://www.filmyzilla.co.za/', '```csv']),\n",
 876         "  ('https://www.filmyzilla.co.za/some-video-file.mp4',\n",
 877         "   ['https://www.filmyzilla.co.za/',\n",
 878         "    'https://www.filmyzilla.co.za/some-video-file.mp4']),\n",
 879         "  ('http://example.com/another-video-file.mkv/download/',\n",
 880         "   ['https://www.filmyzilla.co.za/',\n",
 881         "    'http://example.com/another-video-file.mkv/download/']),\n",
 882         "  ('```', ['https://www.filmyzilla.co.za/', '```']),\n",
 883         "  ('*(Note: The actual URLs would need to be parsed from the HTML content.)*',\n",
 884         "   ['https://www.filmyzilla.co.za/',\n",
 885         "    '*(Note: The actual URLs would need to be parsed from the HTML content.)*']),\n",
 886         "  ('For a precise extraction',\n",
 887         "   ['https://www.filmyzilla.co.za/', 'For a precise extraction'])],\n",
 888         " ChatResponse(model='huihui_ai/qwen2.5-1m-abliterated:latest', created_at='2025-04-20T02:51:38.597832797Z', done=True, done_reason='stop', total_duration=736558442, load_duration=21003822, prompt_eval_count=243, prompt_eval_duration=28000000, eval_count=54, eval_duration=674000000, message=Message(role='assistant', content='```csv\\nvideo_link,path\\n\"https://www.filmyzilla.co.za/some-video-file.mp4\",https://www.filmyzilla.co.za/\\n\"http://example.com/another-video-file.mkv/download/\",https://www.filmyzilla.co.za/\\n```', images=None, tool_calls=None)))"
 889        ]
 890       },
 891       "execution_count": 105,
 892       "metadata": {},
 893       "output_type": "execute_result"
 894      }
 895     ],
 896     "source": [
 897      "results"
 898     ]
 899    },
 900    {
 901     "cell_type": "code",
 902     "execution_count": 99,
 903     "id": "7afe720f-b476-4bf7-a4c3-a67295e281b7",
 904     "metadata": {},
 905     "outputs": [
 906      {
 907       "name": "stdout",
 908       "output_type": "stream",
 909       "text": [
 910        "('To generate the required CSV', ['https://www.filmyzilla.co.za/', 'To generate the required CSV'])\n",
 911        "('```csv', ['https://www.filmyzilla.co.za/', '```csv'])\n",
 912        "('https://www.filmyzilla.co.za/your-video.mp4', ['https://www.filmyzilla.co.za/', 'https://www.filmyzilla.co.za/your-video.mp4'])\n",
 913        "('```', ['https://www.filmyzilla.co.za/', '```'])\n",
 914        "('*(Note: The actual URL will be in place of `https://www.filmyzilla.co.za/your-video.mp4`.)*', ['https://www.filmyzilla.co.za/', '*(Note: The actual URL will be in place of `https://www.filmyzilla.co.za/your-video.mp4`.)*'])\n",
 915        "('If you provide more HTML content', ['https://www.filmyzilla.co.za/', 'If you provide more HTML content'])\n"
 916       ]
 917      }
 918     ],
 919     "source": [
 920      "for i in results:\n",
 921      "    print(i)"
 922     ]
 923    },
 924    {
 925     "cell_type": "code",
 926     "execution_count": null,
 927     "id": "96dc8bee-c6c1-4e8b-8e7c-ce07cb2ad648",
 928     "metadata": {},
 929     "outputs": [],
 930     "source": []
 931    },
 932    {
 933     "cell_type": "code",
 934     "execution_count": 10,
 935     "id": "2ba63eb4-ddec-4fac-8eed-e9a0c0bb9e83",
 936     "metadata": {},
 937     "outputs": [],
 938     "source": [
 939      "import argparse\n",
 940      "import os\n",
 941      "from typing import Optional\n",
 942      "\n",
 943      "import ollama\n",
 944      "from playwright.sync_api import sync_playwright, Page, Browser, ElementHandle\n",
 945      "\n",
 946      "# -------------------------\n",
 947      "# Browser utility tool\n",
 948      "# -------------------------\n",
 949      "class BrowserTool:\n",
 950      "    def __init__(self, headless: bool = True):\n",
 951      "        self.headless = headless\n",
 952      "        self._context = None\n",
 953      "        self.playwright = None\n",
 954      "        self.browser: Optional[Browser] = None\n",
 955      "        self.page: Optional[Page] = None\n",
 956      "\n",
 957      "    def init(self):\n",
 958      "        # Use sync_playwright as context manager without triggering asyncio loops\n",
 959      "        self._context = sync_playwright()\n",
 960      "        self.playwright = self._context.__enter__()\n",
 961      "        self.browser = self.playwright.chromium.launch(headless=self.headless)\n",
 962      "        self.page = self.browser.new_page()\n",
 963      "\n",
 964      "    def goto(self, url: str):\n",
 965      "        self.page.goto(url)\n",
 966      "\n",
 967      "    def click(self, selector: str):\n",
 968      "        self.page.click(selector)\n",
 969      "\n",
 970      "    def find_elements(self, selector: str):\n",
 971      "        return self.page.query_selector_all(selector)\n",
 972      "\n",
 973      "    def get_page_content(self) -> str:\n",
 974      "        return self.page.content()\n",
 975      "\n",
 976      "    def find_download_button(self) -> Optional[ElementHandle]:\n",
 977      "        selectors = [\"a[download]\", \"button:has-text('Download')\", \"a:has-text('Download')\"]\n",
 978      "        for sel in selectors:\n",
 979      "            btn = self.page.query_selector(sel)\n",
 980      "            if btn:\n",
 981      "                return btn\n",
 982      "        return None\n",
 983      "\n",
 984      "    def close(self):\n",
 985      "        if self.browser:\n",
 986      "            self.browser.close()\n",
 987      "        if self._context:\n",
 988      "            # Exit the context manager\n",
 989      "            self._context.__exit__(None, None, None)\n",
 990      "\n",
 991      "# -------------------------\n",
 992      "# AI Navigation agent using Ollama\n",
 993      "# -------------------------\n",
 994      "class WebsiteNavigatorAgent:\n",
 995      "    def __init__(self, browser: BrowserTool, max_steps: int = 20, model: str = \"gpt-4o-mini\"):\n",
 996      "        self.browser = browser\n",
 997      "        self.max_steps = max_steps\n",
 998      "        self.client = ollama.Client()\n",
 999      "        self.model = model\n",
1000      "\n",
1001      "    def _ask_llm(self, prompt: str) -> str:\n",
1002      "        response = self.client.chat_completion(\n",
1003      "            model=self.model,\n",
1004      "            messages=[\n",
1005      "                {\"role\": \"system\", \"content\": \"You are an intelligent web navigator. Decide the next action (e.g., 'click selector', 'scroll to bottom', 'extract_links').\"},\n",
1006      "                {\"role\": \"user\", \"content\": prompt}\n",
1007      "            ],\n",
1008      "            temperature=0.2\n",
1009      "        )\n",
1010      "        return response.choices[0].message.content.strip()\n",
1011      "\n",
1012      "    def navigate(self, website: str, query: str) -> Optional[str]:\n",
1013      "        self.browser.init()\n",
1014      "        self.browser.goto(website)\n",
1015      "\n",
1016      "        for step in range(1, self.max_steps + 1):\n",
1017      "            content = self.browser.get_page_content()\n",
1018      "            prompt = (\n",
1019      "                f\"Step {step}: The current page HTML is provided. \"\n",
1020      "                f\"Your goal is to find a download button related to '{query}'. \"\n",
1021      "                \"Suggest exactly one action in the format:\\n\"\n",
1022      "                \"<ACTION_TYPE> | <SELECTOR_OR_INSTRUCTION>\\n\"\n",
1023      "                \"Valid ACTION_TYPEs: click, scroll, extract_links.\\n\"\n",
1024      "                \"For extract_links, return 'extract_links | <CSS_SELECTOR>'.\\n\"\n",
1025      "                \"Only output the single action.\\n\"\n",
1026      "                f\"Page content:\\n{content[:2000]}\"\n",
1027      "            )\n",
1028      "            llm_reply = self._ask_llm(prompt)\n",
1029      "            action, _, param = llm_reply.partition(\"|\")\n",
1030      "            action = action.strip().lower()\n",
1031      "            param = param.strip()\n",
1032      "\n",
1033      "            if action == \"click\":\n",
1034      "                print(f\"[Agent] Clicking selector: {param}\")\n",
1035      "                self.browser.click(param)\n",
1036      "            elif action == \"scroll\":\n",
1037      "                print(\"[Agent] Scrolling to bottom\")\n",
1038      "                self.browser.page.evaluate('window.scrollTo(0, document.body.scrollHeight)')\n",
1039      "            elif action == \"extract_links\":\n",
1040      "                print(f\"[Agent] Extracting links with selector: {param}\")\n",
1041      "                links = self.browser.find_elements(param)\n",
1042      "                for link in links:\n",
1043      "                    text = link.inner_text()\n",
1044      "                    href = link.get_attribute('href')\n",
1045      "                    print(f\"- {text}: {href}\")\n",
1046      "            else:\n",
1047      "                print(f\"[Agent] Unrecognized action: {llm_reply}\")\n",
1048      "\n",
1049      "            btn = self.browser.find_download_button()\n",
1050      "            if btn:\n",
1051      "                href = btn.get_attribute('href')\n",
1052      "                print(f\"[Agent] Found download button! URL: {href}\")\n",
1053      "                self.browser.close()\n",
1054      "                return href\n",
1055      "\n",
1056      "        print(\"[Agent] Reached max steps without finding download button.\")\n",
1057      "        self.browser.close()\n",
1058      "        return None\n",
1059      "\n",
1060      "# # -------------------------\n",
1061      "# # CLI entrypoint\n",
1062      "# # -------------------------\n",
1063      "# if __name__ == \"__main__\":\n",
1064      "#     parser = argparse.ArgumentParser(description=\"Website Navigator AI Agent using Ollama\")\n",
1065      "#     parser.add_argument(\"--website\", default=\"https://example.com\", help=\"Base URL of the website to navigate.\")\n",
1066      "#     parser.add_argument(\"--query\", default=\"download\", help=\"Query term to find the correct download item.\")\n",
1067      "#     parser.add_argument(\"--headless\", action=\"store_true\", default=False, help=\"Run browser in headless mode.\")\n",
1068      "#     parser.add_argument(\"--model\", default=\"gpt-4o-mini\", help=\"Ollama model to use for navigation.\")\n",
1069      "#     args = parser.parse_args()\n",
1070      "\n",
1071      "#     website_url = args.website\n",
1072      "#     query_term = args.query\n",
1073      "#     headless_mode = args.headless\n",
1074      "#     model_name = args.model\n",
1075      "\n",
1076      "#     browser_tool = BrowserTool(headless=headless_mode)\n",
1077      "#     agent = WebsiteNavigatorAgent(browser_tool, model=model_name)\n",
1078      "#     result = agent.navigate(website_url, query_term)\n",
1079      "#     if result:\n",
1080      "#         print(f\"Download link found: {result}\")\n",
1081      "#     else:\n",
1082      "#         print(\"Failed to locate download link.\")\n"
1083     ]
1084    },
1085    {
1086     "cell_type": "code",
1087     "execution_count": 67,
1088     "id": "e6e36aaf-fce3-4b73-a28b-58216f4e86fb",
1089     "metadata": {},
1090     "outputs": [
1091      {
1092       "ename": "NameError",
1093       "evalue": "name 'BrowserTool' is not defined",
1094       "output_type": "error",
1095       "traceback": [
1096        "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
1097        "\u001b[0;31mNameError\u001b[0m                                 Traceback (most recent call last)",
1098        "\u001b[0;32m<ipython-input-67-fd24f4c5d62e>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[1;32m     14\u001b[0m     \u001b[0mmodel_name\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m'huihui_ai/qwen2.5-1m-abliterated:latest'\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     15\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 16\u001b[0;31m     \u001b[0mbrowser_tool\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mBrowserTool\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mheadless\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mheadless_mode\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m     17\u001b[0m     \u001b[0magent\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mWebsiteNavigatorAgent\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mbrowser_tool\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mmodel\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mmodel_name\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     18\u001b[0m     \u001b[0mresult\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0magent\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mnavigate\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mwebsite_url\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mquery_term\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
1099        "\u001b[0;31mNameError\u001b[0m: name 'BrowserTool' is not defined"
1100       ]
1101      }
1102     ],
1103     "source": [
1104      "# -------------------------\n",
1105      "if __name__ == \"__main__\":\n",
1106      "    # parser = argparse.ArgumentParser(description=\"Website Navigator AI Agent using Ollama\")\n",
1107      "    # parser.add_argument(\"--website\", default=\"https://example.com\", help=\"Base URL of the website to navigate.\")\n",
1108      "    # parser.add_argument(\"--query\", default=\"download\", help=\"Query term to find the correct download item.\")\n",
1109      "    # parser.add_argument(\"--headless\", action=\"store_true\", default=False, help=\"Run browser in headless mode.\")\n",
1110      "    # parser.add_argument(\"--model\", default=\"gpt-4o-mini\", help=\"Ollama model to use for navigation.\")\n",
1111      "    # args = parser.parse_args()\n",
1112      "\n",
1113      "    # Assign to local variables rather than using args directly\n",
1114      "    website_url = 'https://www.filmyzilla.co.za'\n",
1115      "    query_term = 'spiderman'\n",
1116      "    headless_mode = 'storetrue'\n",
1117      "    model_name = 'huihui_ai/qwen2.5-1m-abliterated:latest'\n",
1118      "\n",
1119      "    browser_tool = BrowserTool(headless=headless_mode)\n",
1120      "    agent = WebsiteNavigatorAgent(browser_tool, model=model_name)\n",
1121      "    result = agent.navigate(website_url, query_term)\n",
1122      "    if result:\n",
1123      "        print(f\"Download link found: {result}\")\n",
1124      "    else:\n",
1125      "        print(\"Failed to locate download link.\")\n"
1126     ]
1127    },
1128    {
1129     "cell_type": "code",
1130     "execution_count": 8,
1131     "id": "b1d65a8f-ebe4-4001-a7f2-db5f603126b8",
1132     "metadata": {},
1133     "outputs": [
1134      {
1135       "ename": "SystemExit",
1136       "evalue": "2",
1137       "output_type": "error",
1138       "traceback": [
1139        "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
1140        "\u001b[0;31mSystemExit\u001b[0m                                Traceback (most recent call last)",
1141        "\u001b[0;32m<ipython-input-7-4ad2e3df398f>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[1;32m    130\u001b[0m     \u001b[0mparser\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0madd_argument\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"--headless\"\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0maction\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m\"store_true\"\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mdefault\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mFalse\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mhelp\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m\"Run browser in headless mode.\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    131\u001b[0m     \u001b[0mparser\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0madd_argument\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"--model\"\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mdefault\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m\"huihui_ai/qwen2.5-1m-abliterated:latest\"\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mhelp\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m\"Ollama model to use for navigation.\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 132\u001b[0;31m     \u001b[0margs\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mparser\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mparse_args\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m    133\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    134\u001b[0m     \u001b[0mbrowser_tool\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mBrowserTool\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mheadless\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mheadless\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
1142        "\u001b[0;32m/usr/lib/python3.8/argparse.py\u001b[0m in \u001b[0;36mparse_args\u001b[0;34m(self, args, namespace)\u001b[0m\n\u001b[1;32m   1781\u001b[0m         \u001b[0;32mif\u001b[0m \u001b[0margv\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   1782\u001b[0m             \u001b[0mmsg\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0m_\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'unrecognized arguments: %s'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1783\u001b[0;31m             \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0merror\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mmsg\u001b[0m \u001b[0;34m%\u001b[0m \u001b[0;34m' '\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mjoin\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0margv\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m   1784\u001b[0m         \u001b[0;32mreturn\u001b[0m \u001b[0margs\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   1785\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
1143        "\u001b[0;32m/usr/lib/python3.8/argparse.py\u001b[0m in \u001b[0;36merror\u001b[0;34m(self, message)\u001b[0m\n\u001b[1;32m   2531\u001b[0m         \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mprint_usage\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0m_sys\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mstderr\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   2532\u001b[0m         \u001b[0margs\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m{\u001b[0m\u001b[0;34m'prog'\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mprog\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m'message'\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mmessage\u001b[0m\u001b[0;34m}\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 2533\u001b[0;31m         \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mexit\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m2\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0m_\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'%(prog)s: error: %(message)s\\n'\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m%\u001b[0m \u001b[0margs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
1144        "\u001b[0;32m/usr/lib/python3.8/argparse.py\u001b[0m in \u001b[0;36mexit\u001b[0;34m(self, status, message)\u001b[0m\n\u001b[1;32m   2518\u001b[0m         \u001b[0;32mif\u001b[0m \u001b[0mmessage\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   2519\u001b[0m             \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_print_message\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mmessage\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0m_sys\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mstderr\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 2520\u001b[0;31m         \u001b[0m_sys\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mexit\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mstatus\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m   2521\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   2522\u001b[0m     \u001b[0;32mdef\u001b[0m \u001b[0merror\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mmessage\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
1145        "\u001b[0;31mSystemExit\u001b[0m: 2"
1146       ]
1147      }
1148     ],
1149     "source": [
1150      "%tb"
1151     ]
1152    },
1153    {
1154     "cell_type": "code",
1155     "execution_count": 65,
1156     "id": "2b2169cb-4de0-4f0a-9ec1-dc6997cc92a8",
1157     "metadata": {},
1158     "outputs": [],
1159     "source": [
1160      "from tpblite import TPB, CATEGORIES\n",
1161      "t = TPB()\n",
1162      "\n"
1163     ]
1164    },
1165    {
1166     "cell_type": "code",
1167     "execution_count": 66,
1168     "id": "f7e90b5c-6aee-4ff1-9893-18a1810ac5c7",
1169     "metadata": {},
1170     "outputs": [
1171      {
1172       "ename": "ValueError",
1173       "evalue": "invalid literal for int() with base 10: '2.54\\xa0GiB'",
1174       "output_type": "error",
1175       "traceback": [
1176        "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
1177        "\u001b[0;31mValueError\u001b[0m                                Traceback (most recent call last)",
1178        "\u001b[0;32m<ipython-input-66-618e41f92e95>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mt\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msearch\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'spiderman'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
1179        "\u001b[0;32m~/.local/lib/python3.8/site-packages/tpblite/tpblite.py\u001b[0m in \u001b[0;36msearch\u001b[0;34m(self, query, page, order, category)\u001b[0m\n\u001b[1;32m     41\u001b[0m         \u001b[0mq\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mQueryParser\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msearch\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mquery\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mbase_url\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mpage\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0morder\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcategory\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     42\u001b[0m         \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_search_url\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mq\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0murl\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 43\u001b[0;31m         \u001b[0;32mreturn\u001b[0m \u001b[0mTorrents\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mq\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mhtml_source\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m     44\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     45\u001b[0m     \u001b[0;32mdef\u001b[0m \u001b[0mbrowse\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcategory\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mint\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;36m0\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mpage\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mint\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;36m0\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0morder\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mint\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;36m99\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m->\u001b[0m \u001b[0mTorrents\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
1180        "\u001b[0;32m~/.local/lib/python3.8/site-packages/tpblite/models/torrents.py\u001b[0m in \u001b[0;36m__init__\u001b[0;34m(self, html_source)\u001b[0m\n\u001b[1;32m    102\u001b[0m     \u001b[0;32mdef\u001b[0m \u001b[0m__init__\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mhtml_source\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    103\u001b[0m         \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mhtml_source\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mhtml_source\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 104\u001b[0;31m         \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mlist\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_createTorrentList\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m    105\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    106\u001b[0m     \u001b[0;32mdef\u001b[0m \u001b[0m__str__\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
1181        "\u001b[0;32m~/.local/lib/python3.8/site-packages/tpblite/models/torrents.py\u001b[0m in \u001b[0;36m_createTorrentList\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m    126\u001b[0m         \u001b[0mtorrents\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    127\u001b[0m         \u001b[0;32mfor\u001b[0m \u001b[0mrow\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mrows\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 128\u001b[0;31m             \u001b[0mtorrents\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mappend\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mTorrent\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mrow\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m    129\u001b[0m         \u001b[0;32mreturn\u001b[0m \u001b[0mtorrents\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    130\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
1182        "\u001b[0;32m~/.local/lib/python3.8/site-packages/tpblite/models/torrents.py\u001b[0m in \u001b[0;36m__init__\u001b[0;34m(self, html_row)\u001b[0m\n\u001b[1;32m     32\u001b[0m         \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mhtml_row\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mhtml_row\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     33\u001b[0m         \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtitle\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_getTitle\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 34\u001b[0;31m         \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mseeds\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mleeches\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_getPeers\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m     35\u001b[0m         \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mupload_date\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfilesize\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0muploader\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_getFileInfo\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     36\u001b[0m         \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mbyte_size\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_getByteSize\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
1183        "\u001b[0;32m~/.local/lib/python3.8/site-packages/tpblite/models/torrents.py\u001b[0m in \u001b[0;36m_getPeers\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m     58\u001b[0m     \u001b[0;32mdef\u001b[0m \u001b[0m_getPeers\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     59\u001b[0m         \u001b[0mtaglist\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mhtml_row\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mxpath\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'.//td[@align=\"right\"]/text()'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 60\u001b[0;31m         \u001b[0;32mreturn\u001b[0m \u001b[0mint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mtaglist\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mtaglist\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m     61\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     62\u001b[0m     \u001b[0;32mdef\u001b[0m \u001b[0m_getFileInfo\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
1184        "\u001b[0;31mValueError\u001b[0m: invalid literal for int() with base 10: '2.54\\xa0GiB'"
1185       ]
1186      }
1187     ],
1188     "source": [
1189      "t.search('spiderman')"
1190     ]
1191    },
1192    {
1193     "cell_type": "code",
1194     "execution_count": null,
1195     "id": "4bf64005-c8ed-40ae-8e59-527fe8b2a0e5",
1196     "metadata": {},
1197     "outputs": [],
1198     "source": []
1199    },
1200    {
1201     "cell_type": "code",
1202     "execution_count": 1,
1203     "id": "a6a0c764-883c-414c-9db4-e3f9cdec3974",
1204     "metadata": {},
1205     "outputs": [],
1206     "source": [
1207      "import libtorrent as lt"
1208     ]
1209    },
1210    {
1211     "cell_type": "code",
1212     "execution_count": 2,
1213     "id": "df9f1ba5-d5e0-4794-8b22-b2b9374068c7",
1214     "metadata": {},
1215     "outputs": [],
1216     "source": [
1217      "magnet=\"\"\"magnet:?xt=urn:btih:A96A08E2ACFDC5F4899A72012CB2E42B398007BE&dn=[1337x.HashHackers.Com]Chhava+%282025%29+Hindi+720p+HC+HDRip+x264+AAC&tr=udp%3A%2F%2Ftracker.opentrackr.org%3A1337%2Fannounce&tr=udp%3A%2F%2Fopen.tracker.cl%3A1337%2Fannounce&tr=udp%3A%2F%2Ftracker.auctor.tv%3A6969%2Fannounce&tr=udp%3A%2F%2Fopentracker.i2p.rocks%3A6969%2Fannounce&tr=udp%3A%2F%2Fopen.demonii.com%3A1337%2Fannounce&tr=udp%3A%2F%2Fopen.stealth.si%3A80%2Fannounce&tr=udp%3A%2F%2Ftracker.torrent.eu.org%3A451%2Fannounce&tr=udp%3A%2F%2Ftracker.moeking.me%3A6969%2Fannounce&tr=udp%3A%2F%2Fexplodie.org%3A6969%2Fannounce&tr=https%3A%2F%2Ftracker.tamersunion.org%3A443%2Fannounce&tr=https%3A%2F%2Ftracker.gbitt.info%3A443%2Fannounce&tr=http%3A%2F%2Ftracker.gbitt.info%3A80%2Fannounce&tr=udp%3A%2F%2Ftracker-udp.gbitt.info%3A80%2Fannounce&tr=udp%3A%2F%2Ftracker.tiny-vps.com%3A6969%2Fannounce&tr=udp%3A%2F%2Ftracker.opentrackr.org%3A1337%2Fannounce&tr=http%3A%2F%2Ftracker.openbittorrent.com%3A80%2Fannounce&tr=udp%3A%2F%2Fopentracker.i2p.rocks%3A6969%2Fannounce&tr=udp%3A%2F%2Ftracker.internetwarriors.net%3A1337%2Fannounce&tr=udp%3A%2F%2Ftracker.leechers-paradise.org%3A6969%2Fannounce&tr=udp%3A%2F%2Fcoppersurfer.tk%3A6969%2Fannounce&tr=udp%3A%2F%2Ftracker.zer0day.to%3A1337%2Fannounce\"\"\""
1218     ]
1219    },
1220    {
1221     "cell_type": "code",
1222     "execution_count": 4,
1223     "id": "8929b494-d1d8-4131-a95e-5141ff600815",
1224     "metadata": {},
1225     "outputs": [],
1226     "source": [
1227      "a=lt.parse_magnet_uri(magnet)"
1228     ]
1229    },
1230    {
1231     "cell_type": "code",
1232     "execution_count": 6,
1233     "id": "b8c9f27c-ef45-4fe4-a030-e7122fc8d3d6",
1234     "metadata": {},
1235     "outputs": [
1236      {
1237       "data": {
1238        "text/plain": [
1239         "<libtorrent.sha1_hash at 0x7f51b7340040>"
1240        ]
1241       },
1242       "execution_count": 6,
1243       "metadata": {},
1244       "output_type": "execute_result"
1245      }
1246     ],
1247     "source": [
1248      "a.info_hash"
1249     ]
1250    },
1251    {
1252     "cell_type": "code",
1253     "execution_count": null,
1254     "id": "d496c81a-27bf-464a-9175-2392f69e1244",
1255     "metadata": {},
1256     "outputs": [
1257      {
1258       "name": "stdout",
1259       "output_type": "stream",
1260       "text": [
1261        " * Serving Flask app '__main__'\n",
1262        " * Debug mode: off\n"
1263       ]
1264      },
1265      {
1266       "name": "stderr",
1267       "output_type": "stream",
1268       "text": [
1269        "WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.\n",
1270        " * Running on http://127.0.0.1:5000\n",
1271        "Press CTRL+C to quit\n",
1272        "127.0.0.1 - - [20/Apr/2025 04:02:43] \"GET / HTTP/1.1\" 200 -\n",
1273        "<ipython-input-1-872d73c29952>:31: DeprecationWarning: start_dht() is deprecated\n",
1274        "  ses.start_dht()                              # Enable DHT\n",
1275        "<ipython-input-1-872d73c29952>:32: DeprecationWarning: start_lsd() is deprecated\n",
1276        "  ses.start_lsd()                              # Enable Local Service Discovery\n",
1277        "<ipython-input-1-872d73c29952>:33: DeprecationWarning: start_upnp() is deprecated\n",
1278        "  ses.start_upnp()                             # Enable UPnP port mapping\n",
1279        "<ipython-input-1-872d73c29952>:34: DeprecationWarning: add_dht_router() is deprecated\n",
1280        "  ses.add_dht_router(\"router.bittorrent.com\", 6881)  # Bootstrap DHT\n",
1281        "<ipython-input-1-872d73c29952>:41: DeprecationWarning: add_magnet_uri() is deprecated\n",
1282        "  handle = lt.add_magnet_uri(ses, magnet_uri, params)\n",
1283        "127.0.0.1 - - [20/Apr/2025 04:03:01] \"GET /player?magnet=magnet:?xt%3Durn:btih:A96A08E2ACFDC5F4899A72012CB2E42B398007BE%26dn%3D[1337x.HashHackers.Com]Chhava%2B%25282025%2529%2BHindi%2B720p%2BHC%2BHDRip%2Bx264%2BAAC%26tr%3Dudp%253A%252F%252Ftracker.opentrackr.org%253A1337%252Fannounce%26tr%3Dudp%253A%252F%252Fopen.tracker.cl%253A1337%252Fannounce%26tr%3Dudp%253A%252F%252Ftracker.auctor.tv%253A6969%252Fannounce%26tr%3Dudp%253A%252F%252Fopentracker.i2p.rocks%253A6969%252Fannounce%26tr%3Dudp%253A%252F%252Fopen.demonii.com%253A1337%252Fannounce%26tr%3Dudp%253A%252F%252Fopen.stealth.si%253A80%252Fannounce%26tr%3Dudp%253A%252F%252Ftracker.torrent.eu.org%253A451%252Fannounce%26tr%3Dudp%253A%252F%252Ftracker.moeking.me%253A6969%252Fannounce%26tr%3Dudp%253A%252F%252Fexplodie.org%253A6969%252Fannounce%26tr%3Dhttps%253A%252F%252Ftracker.tamersunion.org%253A443%252Fannounce%26tr%3Dhttps%253A%252F%252Ftracker.gbitt.info%253A443%252Fannounce%26tr%3Dhttp%253A%252F%252Ftracker.gbitt.info%253A80%252Fannounce%26tr%3Dudp%253A%252F%252Ftracker-udp.gbitt.info%253A80%252Fannounce%26tr%3Dudp%253A%252F%252Ftracker.tiny-vps.com%253A6969%252Fannounce%26tr%3Dudp%253A%252F%252Ftracker.opentrackr.org%253A1337%252Fannounce%26tr%3Dhttp%253A%252F%252Ftracker.openbittorrent.com%253A80%252Fannounce%26tr%3Dudp%253A%252F%252Fopentracker.i2p.rocks%253A6969%25 HTTP/1.1\" 200 -\n",
1284        "<ipython-input-1-872d73c29952>:42: DeprecationWarning: set_sequential_download() is deprecated\n",
1285        "  handle.set_sequential_download(True)\n",
1286        "[2025-04-20 04:03:01,139] INFO in <ipython-input-1-872d73c29952>: Fetching metadata for magnet:?xt=urn:btih:A96A08E2ACFDC5F4899A72012CB2E42B398007BE&dn=[1337x.HashHackers.Com]Chhava+%282025%29+Hindi+720p+HC+HDRip+x264+AAC&tr=udp%3A%2F%2Ftracker.opentrackr.org%3A1337%2Fannounce&tr=udp%3A%2F%2Fopen.tracker.cl%3A1337%2Fannounce&tr=udp%3A%2F%2Ftracker.auctor.tv%3A6969%2Fannounce&tr=udp%3A%2F%2Fopentracker.i2p.rocks%3A6969%2Fannounce&tr=udp%3A%2F%2Fopen.demonii.com%3A1337%2Fannounce&tr=udp%3A%2F%2Fopen.stealth.si%3A80%2Fannounce&tr=udp%3A%2F%2Ftracker.torrent.eu.org%3A451%2Fannounce&tr=udp%3A%2F%2Ftracker.moeking.me%3A6969%2Fannounce&tr=udp%3A%2F%2Fexplodie.org%3A6969%2Fannounce&tr=https%3A%2F%2Ftracker.tamersunion.org%3A443%2Fannounce&tr=https%3A%2F%2Ftracker.gbitt.info%3A443%2Fannounce&tr=http%3A%2F%2Ftracker.gbitt.info%3A80%2Fannounce&tr=udp%3A%2F%2Ftracker-udp.gbitt.info%3A80%2Fannounce&tr=udp%3A%2F%2Ftracker.tiny-vps.com%3A6969%2Fannounce&tr=udp%3A%2F%2Ftracker.opentrackr.org%3A1337%2Fannounce&tr=http%3A%2F%2Ftracker.openbittorrent.com%3A80%2Fannounce&tr=udp%3A%2F%2Fopentracker.i2p.rocks%3A6969% (timeout 60s)…\n",
1287        "<ipython-input-1-872d73c29952>:46: DeprecationWarning: has_metadata() is deprecated\n",
1288        "  while not handle.has_metadata():\n",
1289        "Exception in thread Thread-6:\n",
1290        "Traceback (most recent call last):\n",
1291        "  File \"/usr/lib/python3.8/threading.py\", line 932, in _bootstrap_inner\n",
1292        "    self.run()\n",
1293        "  File \"/usr/lib/python3.8/threading.py\", line 870, in run\n",
1294        "    self._target(*self._args, **self._kwargs)\n",
1295        "  File \"<ipython-input-1-872d73c29952>\", line 50, in start_torrent_download\n",
1296        "AttributeError: 'torrent_status' object has no attribute 'metadata_progress'\n",
1297        "127.0.0.1 - - [20/Apr/2025 04:03:02] \"GET /status?magnet=magnet:?xt%3Durn:btih:A96A08E2ACFDC5F4899A72012CB2E42B398007BE%26amp;dn%3D[1337x.HashHackers.Com]Chhava%2B%25282025%2529%2BHindi%2B720p%2BHC%2BHDRip%2Bx264%2BAAC%26amp;tr%3Dudp%253A%252F%252Ftracker.opentrackr.org%253A1337%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopen.tracker.cl%253A1337%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.auctor.tv%253A6969%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopentracker.i2p.rocks%253A6969%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopen.demonii.com%253A1337%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopen.stealth.si%253A80%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.torrent.eu.org%253A451%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.moeking.me%253A6969%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fexplodie.org%253A6969%252Fannounce%26amp;tr%3Dhttps%253A%252F%252Ftracker.tamersunion.org%253A443%252Fannounce%26amp;tr%3Dhttps%253A%252F%252Ftracker.gbitt.info%253A443%252Fannounce%26amp;tr%3Dhttp%253A%252F%252Ftracker.gbitt.info%253A80%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker-udp.gbitt.info%253A80%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.tiny-vps.com%253A6969%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.opentrackr.org%253A1337%252Fannounce%26amp;tr%3Dhttp%253A%252F%252Ftracker.openbittorrent.com%253A80%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopentracker.i2p.rocks%253A6969%25 HTTP/1.1\" 200 -\n",
1298        "127.0.0.1 - - [20/Apr/2025 04:03:05] \"GET /status?magnet=magnet:?xt%3Durn:btih:A96A08E2ACFDC5F4899A72012CB2E42B398007BE%26amp;dn%3D[1337x.HashHackers.Com]Chhava%2B%25282025%2529%2BHindi%2B720p%2BHC%2BHDRip%2Bx264%2BAAC%26amp;tr%3Dudp%253A%252F%252Ftracker.opentrackr.org%253A1337%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopen.tracker.cl%253A1337%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.auctor.tv%253A6969%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopentracker.i2p.rocks%253A6969%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopen.demonii.com%253A1337%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopen.stealth.si%253A80%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.torrent.eu.org%253A451%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.moeking.me%253A6969%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fexplodie.org%253A6969%252Fannounce%26amp;tr%3Dhttps%253A%252F%252Ftracker.tamersunion.org%253A443%252Fannounce%26amp;tr%3Dhttps%253A%252F%252Ftracker.gbitt.info%253A443%252Fannounce%26amp;tr%3Dhttp%253A%252F%252Ftracker.gbitt.info%253A80%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker-udp.gbitt.info%253A80%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.tiny-vps.com%253A6969%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.opentrackr.org%253A1337%252Fannounce%26amp;tr%3Dhttp%253A%252F%252Ftracker.openbittorrent.com%253A80%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopentracker.i2p.rocks%253A6969%25 HTTP/1.1\" 200 -\n",
1299        "127.0.0.1 - - [20/Apr/2025 04:03:08] \"GET /status?magnet=magnet:?xt%3Durn:btih:A96A08E2ACFDC5F4899A72012CB2E42B398007BE%26amp;dn%3D[1337x.HashHackers.Com]Chhava%2B%25282025%2529%2BHindi%2B720p%2BHC%2BHDRip%2Bx264%2BAAC%26amp;tr%3Dudp%253A%252F%252Ftracker.opentrackr.org%253A1337%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopen.tracker.cl%253A1337%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.auctor.tv%253A6969%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopentracker.i2p.rocks%253A6969%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopen.demonii.com%253A1337%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopen.stealth.si%253A80%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.torrent.eu.org%253A451%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.moeking.me%253A6969%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fexplodie.org%253A6969%252Fannounce%26amp;tr%3Dhttps%253A%252F%252Ftracker.tamersunion.org%253A443%252Fannounce%26amp;tr%3Dhttps%253A%252F%252Ftracker.gbitt.info%253A443%252Fannounce%26amp;tr%3Dhttp%253A%252F%252Ftracker.gbitt.info%253A80%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker-udp.gbitt.info%253A80%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.tiny-vps.com%253A6969%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.opentrackr.org%253A1337%252Fannounce%26amp;tr%3Dhttp%253A%252F%252Ftracker.openbittorrent.com%253A80%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopentracker.i2p.rocks%253A6969%25 HTTP/1.1\" 200 -\n",
1300        "127.0.0.1 - - [20/Apr/2025 04:03:11] \"GET /status?magnet=magnet:?xt%3Durn:btih:A96A08E2ACFDC5F4899A72012CB2E42B398007BE%26amp;dn%3D[1337x.HashHackers.Com]Chhava%2B%25282025%2529%2BHindi%2B720p%2BHC%2BHDRip%2Bx264%2BAAC%26amp;tr%3Dudp%253A%252F%252Ftracker.opentrackr.org%253A1337%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopen.tracker.cl%253A1337%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.auctor.tv%253A6969%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopentracker.i2p.rocks%253A6969%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopen.demonii.com%253A1337%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopen.stealth.si%253A80%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.torrent.eu.org%253A451%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.moeking.me%253A6969%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fexplodie.org%253A6969%252Fannounce%26amp;tr%3Dhttps%253A%252F%252Ftracker.tamersunion.org%253A443%252Fannounce%26amp;tr%3Dhttps%253A%252F%252Ftracker.gbitt.info%253A443%252Fannounce%26amp;tr%3Dhttp%253A%252F%252Ftracker.gbitt.info%253A80%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker-udp.gbitt.info%253A80%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.tiny-vps.com%253A6969%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.opentrackr.org%253A1337%252Fannounce%26amp;tr%3Dhttp%253A%252F%252Ftracker.openbittorrent.com%253A80%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopentracker.i2p.rocks%253A6969%25 HTTP/1.1\" 200 -\n",
1301        "127.0.0.1 - - [20/Apr/2025 04:03:14] \"GET /status?magnet=magnet:?xt%3Durn:btih:A96A08E2ACFDC5F4899A72012CB2E42B398007BE%26amp;dn%3D[1337x.HashHackers.Com]Chhava%2B%25282025%2529%2BHindi%2B720p%2BHC%2BHDRip%2Bx264%2BAAC%26amp;tr%3Dudp%253A%252F%252Ftracker.opentrackr.org%253A1337%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopen.tracker.cl%253A1337%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.auctor.tv%253A6969%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopentracker.i2p.rocks%253A6969%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopen.demonii.com%253A1337%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopen.stealth.si%253A80%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.torrent.eu.org%253A451%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.moeking.me%253A6969%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fexplodie.org%253A6969%252Fannounce%26amp;tr%3Dhttps%253A%252F%252Ftracker.tamersunion.org%253A443%252Fannounce%26amp;tr%3Dhttps%253A%252F%252Ftracker.gbitt.info%253A443%252Fannounce%26amp;tr%3Dhttp%253A%252F%252Ftracker.gbitt.info%253A80%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker-udp.gbitt.info%253A80%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.tiny-vps.com%253A6969%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.opentrackr.org%253A1337%252Fannounce%26amp;tr%3Dhttp%253A%252F%252Ftracker.openbittorrent.com%253A80%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopentracker.i2p.rocks%253A6969%25 HTTP/1.1\" 200 -\n",
1302        "127.0.0.1 - - [20/Apr/2025 04:03:17] \"GET /status?magnet=magnet:?xt%3Durn:btih:A96A08E2ACFDC5F4899A72012CB2E42B398007BE%26amp;dn%3D[1337x.HashHackers.Com]Chhava%2B%25282025%2529%2BHindi%2B720p%2BHC%2BHDRip%2Bx264%2BAAC%26amp;tr%3Dudp%253A%252F%252Ftracker.opentrackr.org%253A1337%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopen.tracker.cl%253A1337%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.auctor.tv%253A6969%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopentracker.i2p.rocks%253A6969%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopen.demonii.com%253A1337%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopen.stealth.si%253A80%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.torrent.eu.org%253A451%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.moeking.me%253A6969%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fexplodie.org%253A6969%252Fannounce%26amp;tr%3Dhttps%253A%252F%252Ftracker.tamersunion.org%253A443%252Fannounce%26amp;tr%3Dhttps%253A%252F%252Ftracker.gbitt.info%253A443%252Fannounce%26amp;tr%3Dhttp%253A%252F%252Ftracker.gbitt.info%253A80%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker-udp.gbitt.info%253A80%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.tiny-vps.com%253A6969%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.opentrackr.org%253A1337%252Fannounce%26amp;tr%3Dhttp%253A%252F%252Ftracker.openbittorrent.com%253A80%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopentracker.i2p.rocks%253A6969%25 HTTP/1.1\" 200 -\n",
1303        "127.0.0.1 - - [20/Apr/2025 04:03:19] \"GET /status?magnet=magnet:?xt%3Durn:btih:A96A08E2ACFDC5F4899A72012CB2E42B398007BE%26amp;dn%3D[1337x.HashHackers.Com]Chhava%2B%25282025%2529%2BHindi%2B720p%2BHC%2BHDRip%2Bx264%2BAAC%26amp;tr%3Dudp%253A%252F%252Ftracker.opentrackr.org%253A1337%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopen.tracker.cl%253A1337%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.auctor.tv%253A6969%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopentracker.i2p.rocks%253A6969%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopen.demonii.com%253A1337%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopen.stealth.si%253A80%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.torrent.eu.org%253A451%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.moeking.me%253A6969%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fexplodie.org%253A6969%252Fannounce%26amp;tr%3Dhttps%253A%252F%252Ftracker.tamersunion.org%253A443%252Fannounce%26amp;tr%3Dhttps%253A%252F%252Ftracker.gbitt.info%253A443%252Fannounce%26amp;tr%3Dhttp%253A%252F%252Ftracker.gbitt.info%253A80%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker-udp.gbitt.info%253A80%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.tiny-vps.com%253A6969%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.opentrackr.org%253A1337%252Fannounce%26amp;tr%3Dhttp%253A%252F%252Ftracker.openbittorrent.com%253A80%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopentracker.i2p.rocks%253A6969%25 HTTP/1.1\" 200 -\n",
1304        "127.0.0.1 - - [20/Apr/2025 04:03:22] \"GET /status?magnet=magnet:?xt%3Durn:btih:A96A08E2ACFDC5F4899A72012CB2E42B398007BE%26amp;dn%3D[1337x.HashHackers.Com]Chhava%2B%25282025%2529%2BHindi%2B720p%2BHC%2BHDRip%2Bx264%2BAAC%26amp;tr%3Dudp%253A%252F%252Ftracker.opentrackr.org%253A1337%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopen.tracker.cl%253A1337%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.auctor.tv%253A6969%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopentracker.i2p.rocks%253A6969%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopen.demonii.com%253A1337%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopen.stealth.si%253A80%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.torrent.eu.org%253A451%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.moeking.me%253A6969%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fexplodie.org%253A6969%252Fannounce%26amp;tr%3Dhttps%253A%252F%252Ftracker.tamersunion.org%253A443%252Fannounce%26amp;tr%3Dhttps%253A%252F%252Ftracker.gbitt.info%253A443%252Fannounce%26amp;tr%3Dhttp%253A%252F%252Ftracker.gbitt.info%253A80%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker-udp.gbitt.info%253A80%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.tiny-vps.com%253A6969%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.opentrackr.org%253A1337%252Fannounce%26amp;tr%3Dhttp%253A%252F%252Ftracker.openbittorrent.com%253A80%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopentracker.i2p.rocks%253A6969%25 HTTP/1.1\" 200 -\n",
1305        "127.0.0.1 - - [20/Apr/2025 04:03:25] \"GET /status?magnet=magnet:?xt%3Durn:btih:A96A08E2ACFDC5F4899A72012CB2E42B398007BE%26amp;dn%3D[1337x.HashHackers.Com]Chhava%2B%25282025%2529%2BHindi%2B720p%2BHC%2BHDRip%2Bx264%2BAAC%26amp;tr%3Dudp%253A%252F%252Ftracker.opentrackr.org%253A1337%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopen.tracker.cl%253A1337%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.auctor.tv%253A6969%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopentracker.i2p.rocks%253A6969%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopen.demonii.com%253A1337%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopen.stealth.si%253A80%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.torrent.eu.org%253A451%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.moeking.me%253A6969%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fexplodie.org%253A6969%252Fannounce%26amp;tr%3Dhttps%253A%252F%252Ftracker.tamersunion.org%253A443%252Fannounce%26amp;tr%3Dhttps%253A%252F%252Ftracker.gbitt.info%253A443%252Fannounce%26amp;tr%3Dhttp%253A%252F%252Ftracker.gbitt.info%253A80%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker-udp.gbitt.info%253A80%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.tiny-vps.com%253A6969%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.opentrackr.org%253A1337%252Fannounce%26amp;tr%3Dhttp%253A%252F%252Ftracker.openbittorrent.com%253A80%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopentracker.i2p.rocks%253A6969%25 HTTP/1.1\" 200 -\n",
1306        "127.0.0.1 - - [20/Apr/2025 04:03:28] \"GET /status?magnet=magnet:?xt%3Durn:btih:A96A08E2ACFDC5F4899A72012CB2E42B398007BE%26amp;dn%3D[1337x.HashHackers.Com]Chhava%2B%25282025%2529%2BHindi%2B720p%2BHC%2BHDRip%2Bx264%2BAAC%26amp;tr%3Dudp%253A%252F%252Ftracker.opentrackr.org%253A1337%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopen.tracker.cl%253A1337%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.auctor.tv%253A6969%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopentracker.i2p.rocks%253A6969%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopen.demonii.com%253A1337%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopen.stealth.si%253A80%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.torrent.eu.org%253A451%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.moeking.me%253A6969%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fexplodie.org%253A6969%252Fannounce%26amp;tr%3Dhttps%253A%252F%252Ftracker.tamersunion.org%253A443%252Fannounce%26amp;tr%3Dhttps%253A%252F%252Ftracker.gbitt.info%253A443%252Fannounce%26amp;tr%3Dhttp%253A%252F%252Ftracker.gbitt.info%253A80%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker-udp.gbitt.info%253A80%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.tiny-vps.com%253A6969%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.opentrackr.org%253A1337%252Fannounce%26amp;tr%3Dhttp%253A%252F%252Ftracker.openbittorrent.com%253A80%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopentracker.i2p.rocks%253A6969%25 HTTP/1.1\" 200 -\n",
1307        "127.0.0.1 - - [20/Apr/2025 04:03:31] \"GET /status?magnet=magnet:?xt%3Durn:btih:A96A08E2ACFDC5F4899A72012CB2E42B398007BE%26amp;dn%3D[1337x.HashHackers.Com]Chhava%2B%25282025%2529%2BHindi%2B720p%2BHC%2BHDRip%2Bx264%2BAAC%26amp;tr%3Dudp%253A%252F%252Ftracker.opentrackr.org%253A1337%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopen.tracker.cl%253A1337%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.auctor.tv%253A6969%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopentracker.i2p.rocks%253A6969%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopen.demonii.com%253A1337%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopen.stealth.si%253A80%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.torrent.eu.org%253A451%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.moeking.me%253A6969%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fexplodie.org%253A6969%252Fannounce%26amp;tr%3Dhttps%253A%252F%252Ftracker.tamersunion.org%253A443%252Fannounce%26amp;tr%3Dhttps%253A%252F%252Ftracker.gbitt.info%253A443%252Fannounce%26amp;tr%3Dhttp%253A%252F%252Ftracker.gbitt.info%253A80%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker-udp.gbitt.info%253A80%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.tiny-vps.com%253A6969%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.opentrackr.org%253A1337%252Fannounce%26amp;tr%3Dhttp%253A%252F%252Ftracker.openbittorrent.com%253A80%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopentracker.i2p.rocks%253A6969%25 HTTP/1.1\" 200 -\n",
1308        "127.0.0.1 - - [20/Apr/2025 04:03:34] \"GET /status?magnet=magnet:?xt%3Durn:btih:A96A08E2ACFDC5F4899A72012CB2E42B398007BE%26amp;dn%3D[1337x.HashHackers.Com]Chhava%2B%25282025%2529%2BHindi%2B720p%2BHC%2BHDRip%2Bx264%2BAAC%26amp;tr%3Dudp%253A%252F%252Ftracker.opentrackr.org%253A1337%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopen.tracker.cl%253A1337%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.auctor.tv%253A6969%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopentracker.i2p.rocks%253A6969%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopen.demonii.com%253A1337%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopen.stealth.si%253A80%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.torrent.eu.org%253A451%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.moeking.me%253A6969%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fexplodie.org%253A6969%252Fannounce%26amp;tr%3Dhttps%253A%252F%252Ftracker.tamersunion.org%253A443%252Fannounce%26amp;tr%3Dhttps%253A%252F%252Ftracker.gbitt.info%253A443%252Fannounce%26amp;tr%3Dhttp%253A%252F%252Ftracker.gbitt.info%253A80%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker-udp.gbitt.info%253A80%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.tiny-vps.com%253A6969%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.opentrackr.org%253A1337%252Fannounce%26amp;tr%3Dhttp%253A%252F%252Ftracker.openbittorrent.com%253A80%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopentracker.i2p.rocks%253A6969%25 HTTP/1.1\" 200 -\n",
1309        "127.0.0.1 - - [20/Apr/2025 04:03:37] \"GET /status?magnet=magnet:?xt%3Durn:btih:A96A08E2ACFDC5F4899A72012CB2E42B398007BE%26amp;dn%3D[1337x.HashHackers.Com]Chhava%2B%25282025%2529%2BHindi%2B720p%2BHC%2BHDRip%2Bx264%2BAAC%26amp;tr%3Dudp%253A%252F%252Ftracker.opentrackr.org%253A1337%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopen.tracker.cl%253A1337%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.auctor.tv%253A6969%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopentracker.i2p.rocks%253A6969%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopen.demonii.com%253A1337%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopen.stealth.si%253A80%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.torrent.eu.org%253A451%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.moeking.me%253A6969%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fexplodie.org%253A6969%252Fannounce%26amp;tr%3Dhttps%253A%252F%252Ftracker.tamersunion.org%253A443%252Fannounce%26amp;tr%3Dhttps%253A%252F%252Ftracker.gbitt.info%253A443%252Fannounce%26amp;tr%3Dhttp%253A%252F%252Ftracker.gbitt.info%253A80%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker-udp.gbitt.info%253A80%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.tiny-vps.com%253A6969%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.opentrackr.org%253A1337%252Fannounce%26amp;tr%3Dhttp%253A%252F%252Ftracker.openbittorrent.com%253A80%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopentracker.i2p.rocks%253A6969%25 HTTP/1.1\" 200 -\n",
1310        "127.0.0.1 - - [20/Apr/2025 04:03:40] \"GET /status?magnet=magnet:?xt%3Durn:btih:A96A08E2ACFDC5F4899A72012CB2E42B398007BE%26amp;dn%3D[1337x.HashHackers.Com]Chhava%2B%25282025%2529%2BHindi%2B720p%2BHC%2BHDRip%2Bx264%2BAAC%26amp;tr%3Dudp%253A%252F%252Ftracker.opentrackr.org%253A1337%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopen.tracker.cl%253A1337%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.auctor.tv%253A6969%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopentracker.i2p.rocks%253A6969%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopen.demonii.com%253A1337%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopen.stealth.si%253A80%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.torrent.eu.org%253A451%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.moeking.me%253A6969%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fexplodie.org%253A6969%252Fannounce%26amp;tr%3Dhttps%253A%252F%252Ftracker.tamersunion.org%253A443%252Fannounce%26amp;tr%3Dhttps%253A%252F%252Ftracker.gbitt.info%253A443%252Fannounce%26amp;tr%3Dhttp%253A%252F%252Ftracker.gbitt.info%253A80%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker-udp.gbitt.info%253A80%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.tiny-vps.com%253A6969%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.opentrackr.org%253A1337%252Fannounce%26amp;tr%3Dhttp%253A%252F%252Ftracker.openbittorrent.com%253A80%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopentracker.i2p.rocks%253A6969%25 HTTP/1.1\" 200 -\n",
1311        "127.0.0.1 - - [20/Apr/2025 04:03:43] \"GET /status?magnet=magnet:?xt%3Durn:btih:A96A08E2ACFDC5F4899A72012CB2E42B398007BE%26amp;dn%3D[1337x.HashHackers.Com]Chhava%2B%25282025%2529%2BHindi%2B720p%2BHC%2BHDRip%2Bx264%2BAAC%26amp;tr%3Dudp%253A%252F%252Ftracker.opentrackr.org%253A1337%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopen.tracker.cl%253A1337%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.auctor.tv%253A6969%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopentracker.i2p.rocks%253A6969%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopen.demonii.com%253A1337%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopen.stealth.si%253A80%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.torrent.eu.org%253A451%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.moeking.me%253A6969%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fexplodie.org%253A6969%252Fannounce%26amp;tr%3Dhttps%253A%252F%252Ftracker.tamersunion.org%253A443%252Fannounce%26amp;tr%3Dhttps%253A%252F%252Ftracker.gbitt.info%253A443%252Fannounce%26amp;tr%3Dhttp%253A%252F%252Ftracker.gbitt.info%253A80%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker-udp.gbitt.info%253A80%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.tiny-vps.com%253A6969%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.opentrackr.org%253A1337%252Fannounce%26amp;tr%3Dhttp%253A%252F%252Ftracker.openbittorrent.com%253A80%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopentracker.i2p.rocks%253A6969%25 HTTP/1.1\" 200 -\n",
1312        "127.0.0.1 - - [20/Apr/2025 04:03:45] \"GET /status?magnet=magnet:?xt%3Durn:btih:A96A08E2ACFDC5F4899A72012CB2E42B398007BE%26amp;dn%3D[1337x.HashHackers.Com]Chhava%2B%25282025%2529%2BHindi%2B720p%2BHC%2BHDRip%2Bx264%2BAAC%26amp;tr%3Dudp%253A%252F%252Ftracker.opentrackr.org%253A1337%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopen.tracker.cl%253A1337%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.auctor.tv%253A6969%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopentracker.i2p.rocks%253A6969%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopen.demonii.com%253A1337%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopen.stealth.si%253A80%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.torrent.eu.org%253A451%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.moeking.me%253A6969%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fexplodie.org%253A6969%252Fannounce%26amp;tr%3Dhttps%253A%252F%252Ftracker.tamersunion.org%253A443%252Fannounce%26amp;tr%3Dhttps%253A%252F%252Ftracker.gbitt.info%253A443%252Fannounce%26amp;tr%3Dhttp%253A%252F%252Ftracker.gbitt.info%253A80%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker-udp.gbitt.info%253A80%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.tiny-vps.com%253A6969%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.opentrackr.org%253A1337%252Fannounce%26amp;tr%3Dhttp%253A%252F%252Ftracker.openbittorrent.com%253A80%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopentracker.i2p.rocks%253A6969%25 HTTP/1.1\" 200 -\n",
1313        "127.0.0.1 - - [20/Apr/2025 04:03:49] \"GET /status?magnet=magnet:?xt%3Durn:btih:A96A08E2ACFDC5F4899A72012CB2E42B398007BE%26amp;dn%3D[1337x.HashHackers.Com]Chhava%2B%25282025%2529%2BHindi%2B720p%2BHC%2BHDRip%2Bx264%2BAAC%26amp;tr%3Dudp%253A%252F%252Ftracker.opentrackr.org%253A1337%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopen.tracker.cl%253A1337%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.auctor.tv%253A6969%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopentracker.i2p.rocks%253A6969%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopen.demonii.com%253A1337%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopen.stealth.si%253A80%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.torrent.eu.org%253A451%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.moeking.me%253A6969%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fexplodie.org%253A6969%252Fannounce%26amp;tr%3Dhttps%253A%252F%252Ftracker.tamersunion.org%253A443%252Fannounce%26amp;tr%3Dhttps%253A%252F%252Ftracker.gbitt.info%253A443%252Fannounce%26amp;tr%3Dhttp%253A%252F%252Ftracker.gbitt.info%253A80%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker-udp.gbitt.info%253A80%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.tiny-vps.com%253A6969%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.opentrackr.org%253A1337%252Fannounce%26amp;tr%3Dhttp%253A%252F%252Ftracker.openbittorrent.com%253A80%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopentracker.i2p.rocks%253A6969%25 HTTP/1.1\" 200 -\n",
1314        "127.0.0.1 - - [20/Apr/2025 04:03:52] \"GET /status?magnet=magnet:?xt%3Durn:btih:A96A08E2ACFDC5F4899A72012CB2E42B398007BE%26amp;dn%3D[1337x.HashHackers.Com]Chhava%2B%25282025%2529%2BHindi%2B720p%2BHC%2BHDRip%2Bx264%2BAAC%26amp;tr%3Dudp%253A%252F%252Ftracker.opentrackr.org%253A1337%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopen.tracker.cl%253A1337%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.auctor.tv%253A6969%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopentracker.i2p.rocks%253A6969%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopen.demonii.com%253A1337%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopen.stealth.si%253A80%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.torrent.eu.org%253A451%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.moeking.me%253A6969%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fexplodie.org%253A6969%252Fannounce%26amp;tr%3Dhttps%253A%252F%252Ftracker.tamersunion.org%253A443%252Fannounce%26amp;tr%3Dhttps%253A%252F%252Ftracker.gbitt.info%253A443%252Fannounce%26amp;tr%3Dhttp%253A%252F%252Ftracker.gbitt.info%253A80%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker-udp.gbitt.info%253A80%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.tiny-vps.com%253A6969%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.opentrackr.org%253A1337%252Fannounce%26amp;tr%3Dhttp%253A%252F%252Ftracker.openbittorrent.com%253A80%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopentracker.i2p.rocks%253A6969%25 HTTP/1.1\" 200 -\n",
1315        "127.0.0.1 - - [20/Apr/2025 04:03:55] \"GET /status?magnet=magnet:?xt%3Durn:btih:A96A08E2ACFDC5F4899A72012CB2E42B398007BE%26amp;dn%3D[1337x.HashHackers.Com]Chhava%2B%25282025%2529%2BHindi%2B720p%2BHC%2BHDRip%2Bx264%2BAAC%26amp;tr%3Dudp%253A%252F%252Ftracker.opentrackr.org%253A1337%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopen.tracker.cl%253A1337%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.auctor.tv%253A6969%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopentracker.i2p.rocks%253A6969%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopen.demonii.com%253A1337%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopen.stealth.si%253A80%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.torrent.eu.org%253A451%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.moeking.me%253A6969%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fexplodie.org%253A6969%252Fannounce%26amp;tr%3Dhttps%253A%252F%252Ftracker.tamersunion.org%253A443%252Fannounce%26amp;tr%3Dhttps%253A%252F%252Ftracker.gbitt.info%253A443%252Fannounce%26amp;tr%3Dhttp%253A%252F%252Ftracker.gbitt.info%253A80%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker-udp.gbitt.info%253A80%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.tiny-vps.com%253A6969%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.opentrackr.org%253A1337%252Fannounce%26amp;tr%3Dhttp%253A%252F%252Ftracker.openbittorrent.com%253A80%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopentracker.i2p.rocks%253A6969%25 HTTP/1.1\" 200 -\n",
1316        "127.0.0.1 - - [20/Apr/2025 04:03:58] \"GET /status?magnet=magnet:?xt%3Durn:btih:A96A08E2ACFDC5F4899A72012CB2E42B398007BE%26amp;dn%3D[1337x.HashHackers.Com]Chhava%2B%25282025%2529%2BHindi%2B720p%2BHC%2BHDRip%2Bx264%2BAAC%26amp;tr%3Dudp%253A%252F%252Ftracker.opentrackr.org%253A1337%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopen.tracker.cl%253A1337%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.auctor.tv%253A6969%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopentracker.i2p.rocks%253A6969%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopen.demonii.com%253A1337%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopen.stealth.si%253A80%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.torrent.eu.org%253A451%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.moeking.me%253A6969%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fexplodie.org%253A6969%252Fannounce%26amp;tr%3Dhttps%253A%252F%252Ftracker.tamersunion.org%253A443%252Fannounce%26amp;tr%3Dhttps%253A%252F%252Ftracker.gbitt.info%253A443%252Fannounce%26amp;tr%3Dhttp%253A%252F%252Ftracker.gbitt.info%253A80%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker-udp.gbitt.info%253A80%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.tiny-vps.com%253A6969%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.opentrackr.org%253A1337%252Fannounce%26amp;tr%3Dhttp%253A%252F%252Ftracker.openbittorrent.com%253A80%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopentracker.i2p.rocks%253A6969%25 HTTP/1.1\" 200 -\n",
1317        "127.0.0.1 - - [20/Apr/2025 04:04:01] \"GET /status?magnet=magnet:?xt%3Durn:btih:A96A08E2ACFDC5F4899A72012CB2E42B398007BE%26amp;dn%3D[1337x.HashHackers.Com]Chhava%2B%25282025%2529%2BHindi%2B720p%2BHC%2BHDRip%2Bx264%2BAAC%26amp;tr%3Dudp%253A%252F%252Ftracker.opentrackr.org%253A1337%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopen.tracker.cl%253A1337%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.auctor.tv%253A6969%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopentracker.i2p.rocks%253A6969%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopen.demonii.com%253A1337%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopen.stealth.si%253A80%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.torrent.eu.org%253A451%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.moeking.me%253A6969%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fexplodie.org%253A6969%252Fannounce%26amp;tr%3Dhttps%253A%252F%252Ftracker.tamersunion.org%253A443%252Fannounce%26amp;tr%3Dhttps%253A%252F%252Ftracker.gbitt.info%253A443%252Fannounce%26amp;tr%3Dhttp%253A%252F%252Ftracker.gbitt.info%253A80%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker-udp.gbitt.info%253A80%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.tiny-vps.com%253A6969%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.opentrackr.org%253A1337%252Fannounce%26amp;tr%3Dhttp%253A%252F%252Ftracker.openbittorrent.com%253A80%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopentracker.i2p.rocks%253A6969%25 HTTP/1.1\" 200 -\n",
1318        "127.0.0.1 - - [20/Apr/2025 04:04:04] \"GET /status?magnet=magnet:?xt%3Durn:btih:A96A08E2ACFDC5F4899A72012CB2E42B398007BE%26amp;dn%3D[1337x.HashHackers.Com]Chhava%2B%25282025%2529%2BHindi%2B720p%2BHC%2BHDRip%2Bx264%2BAAC%26amp;tr%3Dudp%253A%252F%252Ftracker.opentrackr.org%253A1337%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopen.tracker.cl%253A1337%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.auctor.tv%253A6969%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopentracker.i2p.rocks%253A6969%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopen.demonii.com%253A1337%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopen.stealth.si%253A80%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.torrent.eu.org%253A451%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.moeking.me%253A6969%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fexplodie.org%253A6969%252Fannounce%26amp;tr%3Dhttps%253A%252F%252Ftracker.tamersunion.org%253A443%252Fannounce%26amp;tr%3Dhttps%253A%252F%252Ftracker.gbitt.info%253A443%252Fannounce%26amp;tr%3Dhttp%253A%252F%252Ftracker.gbitt.info%253A80%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker-udp.gbitt.info%253A80%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.tiny-vps.com%253A6969%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.opentrackr.org%253A1337%252Fannounce%26amp;tr%3Dhttp%253A%252F%252Ftracker.openbittorrent.com%253A80%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopentracker.i2p.rocks%253A6969%25 HTTP/1.1\" 200 -\n",
1319        "127.0.0.1 - - [20/Apr/2025 04:04:07] \"GET /status?magnet=magnet:?xt%3Durn:btih:A96A08E2ACFDC5F4899A72012CB2E42B398007BE%26amp;dn%3D[1337x.HashHackers.Com]Chhava%2B%25282025%2529%2BHindi%2B720p%2BHC%2BHDRip%2Bx264%2BAAC%26amp;tr%3Dudp%253A%252F%252Ftracker.opentrackr.org%253A1337%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopen.tracker.cl%253A1337%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.auctor.tv%253A6969%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopentracker.i2p.rocks%253A6969%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopen.demonii.com%253A1337%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopen.stealth.si%253A80%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.torrent.eu.org%253A451%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.moeking.me%253A6969%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fexplodie.org%253A6969%252Fannounce%26amp;tr%3Dhttps%253A%252F%252Ftracker.tamersunion.org%253A443%252Fannounce%26amp;tr%3Dhttps%253A%252F%252Ftracker.gbitt.info%253A443%252Fannounce%26amp;tr%3Dhttp%253A%252F%252Ftracker.gbitt.info%253A80%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker-udp.gbitt.info%253A80%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.tiny-vps.com%253A6969%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.opentrackr.org%253A1337%252Fannounce%26amp;tr%3Dhttp%253A%252F%252Ftracker.openbittorrent.com%253A80%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopentracker.i2p.rocks%253A6969%25 HTTP/1.1\" 200 -\n",
1320        "127.0.0.1 - - [20/Apr/2025 04:04:10] \"GET /status?magnet=magnet:?xt%3Durn:btih:A96A08E2ACFDC5F4899A72012CB2E42B398007BE%26amp;dn%3D[1337x.HashHackers.Com]Chhava%2B%25282025%2529%2BHindi%2B720p%2BHC%2BHDRip%2Bx264%2BAAC%26amp;tr%3Dudp%253A%252F%252Ftracker.opentrackr.org%253A1337%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopen.tracker.cl%253A1337%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.auctor.tv%253A6969%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopentracker.i2p.rocks%253A6969%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopen.demonii.com%253A1337%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopen.stealth.si%253A80%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.torrent.eu.org%253A451%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.moeking.me%253A6969%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fexplodie.org%253A6969%252Fannounce%26amp;tr%3Dhttps%253A%252F%252Ftracker.tamersunion.org%253A443%252Fannounce%26amp;tr%3Dhttps%253A%252F%252Ftracker.gbitt.info%253A443%252Fannounce%26amp;tr%3Dhttp%253A%252F%252Ftracker.gbitt.info%253A80%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker-udp.gbitt.info%253A80%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.tiny-vps.com%253A6969%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.opentrackr.org%253A1337%252Fannounce%26amp;tr%3Dhttp%253A%252F%252Ftracker.openbittorrent.com%253A80%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopentracker.i2p.rocks%253A6969%25 HTTP/1.1\" 200 -\n",
1321        "127.0.0.1 - - [20/Apr/2025 04:04:13] \"GET /status?magnet=magnet:?xt%3Durn:btih:A96A08E2ACFDC5F4899A72012CB2E42B398007BE%26amp;dn%3D[1337x.HashHackers.Com]Chhava%2B%25282025%2529%2BHindi%2B720p%2BHC%2BHDRip%2Bx264%2BAAC%26amp;tr%3Dudp%253A%252F%252Ftracker.opentrackr.org%253A1337%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopen.tracker.cl%253A1337%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.auctor.tv%253A6969%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopentracker.i2p.rocks%253A6969%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopen.demonii.com%253A1337%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopen.stealth.si%253A80%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.torrent.eu.org%253A451%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.moeking.me%253A6969%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fexplodie.org%253A6969%252Fannounce%26amp;tr%3Dhttps%253A%252F%252Ftracker.tamersunion.org%253A443%252Fannounce%26amp;tr%3Dhttps%253A%252F%252Ftracker.gbitt.info%253A443%252Fannounce%26amp;tr%3Dhttp%253A%252F%252Ftracker.gbitt.info%253A80%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker-udp.gbitt.info%253A80%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.tiny-vps.com%253A6969%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.opentrackr.org%253A1337%252Fannounce%26amp;tr%3Dhttp%253A%252F%252Ftracker.openbittorrent.com%253A80%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopentracker.i2p.rocks%253A6969%25 HTTP/1.1\" 200 -\n",
1322        "127.0.0.1 - - [20/Apr/2025 04:04:16] \"GET /status?magnet=magnet:?xt%3Durn:btih:A96A08E2ACFDC5F4899A72012CB2E42B398007BE%26amp;dn%3D[1337x.HashHackers.Com]Chhava%2B%25282025%2529%2BHindi%2B720p%2BHC%2BHDRip%2Bx264%2BAAC%26amp;tr%3Dudp%253A%252F%252Ftracker.opentrackr.org%253A1337%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopen.tracker.cl%253A1337%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.auctor.tv%253A6969%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopentracker.i2p.rocks%253A6969%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopen.demonii.com%253A1337%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopen.stealth.si%253A80%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.torrent.eu.org%253A451%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.moeking.me%253A6969%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fexplodie.org%253A6969%252Fannounce%26amp;tr%3Dhttps%253A%252F%252Ftracker.tamersunion.org%253A443%252Fannounce%26amp;tr%3Dhttps%253A%252F%252Ftracker.gbitt.info%253A443%252Fannounce%26amp;tr%3Dhttp%253A%252F%252Ftracker.gbitt.info%253A80%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker-udp.gbitt.info%253A80%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.tiny-vps.com%253A6969%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.opentrackr.org%253A1337%252Fannounce%26amp;tr%3Dhttp%253A%252F%252Ftracker.openbittorrent.com%253A80%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopentracker.i2p.rocks%253A6969%25 HTTP/1.1\" 200 -\n",
1323        "127.0.0.1 - - [20/Apr/2025 04:04:19] \"GET /status?magnet=magnet:?xt%3Durn:btih:A96A08E2ACFDC5F4899A72012CB2E42B398007BE%26amp;dn%3D[1337x.HashHackers.Com]Chhava%2B%25282025%2529%2BHindi%2B720p%2BHC%2BHDRip%2Bx264%2BAAC%26amp;tr%3Dudp%253A%252F%252Ftracker.opentrackr.org%253A1337%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopen.tracker.cl%253A1337%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.auctor.tv%253A6969%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopentracker.i2p.rocks%253A6969%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopen.demonii.com%253A1337%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopen.stealth.si%253A80%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.torrent.eu.org%253A451%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.moeking.me%253A6969%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fexplodie.org%253A6969%252Fannounce%26amp;tr%3Dhttps%253A%252F%252Ftracker.tamersunion.org%253A443%252Fannounce%26amp;tr%3Dhttps%253A%252F%252Ftracker.gbitt.info%253A443%252Fannounce%26amp;tr%3Dhttp%253A%252F%252Ftracker.gbitt.info%253A80%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker-udp.gbitt.info%253A80%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.tiny-vps.com%253A6969%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.opentrackr.org%253A1337%252Fannounce%26amp;tr%3Dhttp%253A%252F%252Ftracker.openbittorrent.com%253A80%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopentracker.i2p.rocks%253A6969%25 HTTP/1.1\" 200 -\n",
1324        "127.0.0.1 - - [20/Apr/2025 04:04:22] \"GET /status?magnet=magnet:?xt%3Durn:btih:A96A08E2ACFDC5F4899A72012CB2E42B398007BE%26amp;dn%3D[1337x.HashHackers.Com]Chhava%2B%25282025%2529%2BHindi%2B720p%2BHC%2BHDRip%2Bx264%2BAAC%26amp;tr%3Dudp%253A%252F%252Ftracker.opentrackr.org%253A1337%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopen.tracker.cl%253A1337%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.auctor.tv%253A6969%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopentracker.i2p.rocks%253A6969%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopen.demonii.com%253A1337%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopen.stealth.si%253A80%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.torrent.eu.org%253A451%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.moeking.me%253A6969%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fexplodie.org%253A6969%252Fannounce%26amp;tr%3Dhttps%253A%252F%252Ftracker.tamersunion.org%253A443%252Fannounce%26amp;tr%3Dhttps%253A%252F%252Ftracker.gbitt.info%253A443%252Fannounce%26amp;tr%3Dhttp%253A%252F%252Ftracker.gbitt.info%253A80%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker-udp.gbitt.info%253A80%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.tiny-vps.com%253A6969%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.opentrackr.org%253A1337%252Fannounce%26amp;tr%3Dhttp%253A%252F%252Ftracker.openbittorrent.com%253A80%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopentracker.i2p.rocks%253A6969%25 HTTP/1.1\" 200 -\n",
1325        "127.0.0.1 - - [20/Apr/2025 04:04:25] \"GET /status?magnet=magnet:?xt%3Durn:btih:A96A08E2ACFDC5F4899A72012CB2E42B398007BE%26amp;dn%3D[1337x.HashHackers.Com]Chhava%2B%25282025%2529%2BHindi%2B720p%2BHC%2BHDRip%2Bx264%2BAAC%26amp;tr%3Dudp%253A%252F%252Ftracker.opentrackr.org%253A1337%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopen.tracker.cl%253A1337%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.auctor.tv%253A6969%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopentracker.i2p.rocks%253A6969%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopen.demonii.com%253A1337%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopen.stealth.si%253A80%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.torrent.eu.org%253A451%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.moeking.me%253A6969%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fexplodie.org%253A6969%252Fannounce%26amp;tr%3Dhttps%253A%252F%252Ftracker.tamersunion.org%253A443%252Fannounce%26amp;tr%3Dhttps%253A%252F%252Ftracker.gbitt.info%253A443%252Fannounce%26amp;tr%3Dhttp%253A%252F%252Ftracker.gbitt.info%253A80%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker-udp.gbitt.info%253A80%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.tiny-vps.com%253A6969%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.opentrackr.org%253A1337%252Fannounce%26amp;tr%3Dhttp%253A%252F%252Ftracker.openbittorrent.com%253A80%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopentracker.i2p.rocks%253A6969%25 HTTP/1.1\" 200 -\n",
1326        "127.0.0.1 - - [20/Apr/2025 04:04:28] \"GET /status?magnet=magnet:?xt%3Durn:btih:A96A08E2ACFDC5F4899A72012CB2E42B398007BE%26amp;dn%3D[1337x.HashHackers.Com]Chhava%2B%25282025%2529%2BHindi%2B720p%2BHC%2BHDRip%2Bx264%2BAAC%26amp;tr%3Dudp%253A%252F%252Ftracker.opentrackr.org%253A1337%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopen.tracker.cl%253A1337%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.auctor.tv%253A6969%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopentracker.i2p.rocks%253A6969%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopen.demonii.com%253A1337%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopen.stealth.si%253A80%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.torrent.eu.org%253A451%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.moeking.me%253A6969%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fexplodie.org%253A6969%252Fannounce%26amp;tr%3Dhttps%253A%252F%252Ftracker.tamersunion.org%253A443%252Fannounce%26amp;tr%3Dhttps%253A%252F%252Ftracker.gbitt.info%253A443%252Fannounce%26amp;tr%3Dhttp%253A%252F%252Ftracker.gbitt.info%253A80%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker-udp.gbitt.info%253A80%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.tiny-vps.com%253A6969%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.opentrackr.org%253A1337%252Fannounce%26amp;tr%3Dhttp%253A%252F%252Ftracker.openbittorrent.com%253A80%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopentracker.i2p.rocks%253A6969%25 HTTP/1.1\" 200 -\n",
1327        "127.0.0.1 - - [20/Apr/2025 04:04:31] \"GET /status?magnet=magnet:?xt%3Durn:btih:A96A08E2ACFDC5F4899A72012CB2E42B398007BE%26amp;dn%3D[1337x.HashHackers.Com]Chhava%2B%25282025%2529%2BHindi%2B720p%2BHC%2BHDRip%2Bx264%2BAAC%26amp;tr%3Dudp%253A%252F%252Ftracker.opentrackr.org%253A1337%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopen.tracker.cl%253A1337%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.auctor.tv%253A6969%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopentracker.i2p.rocks%253A6969%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopen.demonii.com%253A1337%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopen.stealth.si%253A80%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.torrent.eu.org%253A451%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.moeking.me%253A6969%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fexplodie.org%253A6969%252Fannounce%26amp;tr%3Dhttps%253A%252F%252Ftracker.tamersunion.org%253A443%252Fannounce%26amp;tr%3Dhttps%253A%252F%252Ftracker.gbitt.info%253A443%252Fannounce%26amp;tr%3Dhttp%253A%252F%252Ftracker.gbitt.info%253A80%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker-udp.gbitt.info%253A80%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.tiny-vps.com%253A6969%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.opentrackr.org%253A1337%252Fannounce%26amp;tr%3Dhttp%253A%252F%252Ftracker.openbittorrent.com%253A80%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopentracker.i2p.rocks%253A6969%25 HTTP/1.1\" 200 -\n",
1328        "127.0.0.1 - - [20/Apr/2025 04:04:34] \"GET /status?magnet=magnet:?xt%3Durn:btih:A96A08E2ACFDC5F4899A72012CB2E42B398007BE%26amp;dn%3D[1337x.HashHackers.Com]Chhava%2B%25282025%2529%2BHindi%2B720p%2BHC%2BHDRip%2Bx264%2BAAC%26amp;tr%3Dudp%253A%252F%252Ftracker.opentrackr.org%253A1337%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopen.tracker.cl%253A1337%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.auctor.tv%253A6969%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopentracker.i2p.rocks%253A6969%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopen.demonii.com%253A1337%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopen.stealth.si%253A80%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.torrent.eu.org%253A451%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.moeking.me%253A6969%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fexplodie.org%253A6969%252Fannounce%26amp;tr%3Dhttps%253A%252F%252Ftracker.tamersunion.org%253A443%252Fannounce%26amp;tr%3Dhttps%253A%252F%252Ftracker.gbitt.info%253A443%252Fannounce%26amp;tr%3Dhttp%253A%252F%252Ftracker.gbitt.info%253A80%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker-udp.gbitt.info%253A80%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.tiny-vps.com%253A6969%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.opentrackr.org%253A1337%252Fannounce%26amp;tr%3Dhttp%253A%252F%252Ftracker.openbittorrent.com%253A80%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopentracker.i2p.rocks%253A6969%25 HTTP/1.1\" 200 -\n",
1329        "127.0.0.1 - - [20/Apr/2025 04:04:37] \"GET /status?magnet=magnet:?xt%3Durn:btih:A96A08E2ACFDC5F4899A72012CB2E42B398007BE%26amp;dn%3D[1337x.HashHackers.Com]Chhava%2B%25282025%2529%2BHindi%2B720p%2BHC%2BHDRip%2Bx264%2BAAC%26amp;tr%3Dudp%253A%252F%252Ftracker.opentrackr.org%253A1337%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopen.tracker.cl%253A1337%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.auctor.tv%253A6969%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopentracker.i2p.rocks%253A6969%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopen.demonii.com%253A1337%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopen.stealth.si%253A80%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.torrent.eu.org%253A451%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.moeking.me%253A6969%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fexplodie.org%253A6969%252Fannounce%26amp;tr%3Dhttps%253A%252F%252Ftracker.tamersunion.org%253A443%252Fannounce%26amp;tr%3Dhttps%253A%252F%252Ftracker.gbitt.info%253A443%252Fannounce%26amp;tr%3Dhttp%253A%252F%252Ftracker.gbitt.info%253A80%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker-udp.gbitt.info%253A80%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.tiny-vps.com%253A6969%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.opentrackr.org%253A1337%252Fannounce%26amp;tr%3Dhttp%253A%252F%252Ftracker.openbittorrent.com%253A80%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopentracker.i2p.rocks%253A6969%25 HTTP/1.1\" 200 -\n",
1330        "127.0.0.1 - - [20/Apr/2025 04:04:40] \"GET /status?magnet=magnet:?xt%3Durn:btih:A96A08E2ACFDC5F4899A72012CB2E42B398007BE%26amp;dn%3D[1337x.HashHackers.Com]Chhava%2B%25282025%2529%2BHindi%2B720p%2BHC%2BHDRip%2Bx264%2BAAC%26amp;tr%3Dudp%253A%252F%252Ftracker.opentrackr.org%253A1337%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopen.tracker.cl%253A1337%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.auctor.tv%253A6969%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopentracker.i2p.rocks%253A6969%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopen.demonii.com%253A1337%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopen.stealth.si%253A80%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.torrent.eu.org%253A451%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.moeking.me%253A6969%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fexplodie.org%253A6969%252Fannounce%26amp;tr%3Dhttps%253A%252F%252Ftracker.tamersunion.org%253A443%252Fannounce%26amp;tr%3Dhttps%253A%252F%252Ftracker.gbitt.info%253A443%252Fannounce%26amp;tr%3Dhttp%253A%252F%252Ftracker.gbitt.info%253A80%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker-udp.gbitt.info%253A80%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.tiny-vps.com%253A6969%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.opentrackr.org%253A1337%252Fannounce%26amp;tr%3Dhttp%253A%252F%252Ftracker.openbittorrent.com%253A80%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopentracker.i2p.rocks%253A6969%25 HTTP/1.1\" 200 -\n",
1331        "127.0.0.1 - - [20/Apr/2025 04:04:43] \"GET /status?magnet=magnet:?xt%3Durn:btih:A96A08E2ACFDC5F4899A72012CB2E42B398007BE%26amp;dn%3D[1337x.HashHackers.Com]Chhava%2B%25282025%2529%2BHindi%2B720p%2BHC%2BHDRip%2Bx264%2BAAC%26amp;tr%3Dudp%253A%252F%252Ftracker.opentrackr.org%253A1337%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopen.tracker.cl%253A1337%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.auctor.tv%253A6969%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopentracker.i2p.rocks%253A6969%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopen.demonii.com%253A1337%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopen.stealth.si%253A80%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.torrent.eu.org%253A451%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.moeking.me%253A6969%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fexplodie.org%253A6969%252Fannounce%26amp;tr%3Dhttps%253A%252F%252Ftracker.tamersunion.org%253A443%252Fannounce%26amp;tr%3Dhttps%253A%252F%252Ftracker.gbitt.info%253A443%252Fannounce%26amp;tr%3Dhttp%253A%252F%252Ftracker.gbitt.info%253A80%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker-udp.gbitt.info%253A80%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.tiny-vps.com%253A6969%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.opentrackr.org%253A1337%252Fannounce%26amp;tr%3Dhttp%253A%252F%252Ftracker.openbittorrent.com%253A80%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopentracker.i2p.rocks%253A6969%25 HTTP/1.1\" 200 -\n",
1332        "127.0.0.1 - - [20/Apr/2025 04:04:46] \"GET /status?magnet=magnet:?xt%3Durn:btih:A96A08E2ACFDC5F4899A72012CB2E42B398007BE%26amp;dn%3D[1337x.HashHackers.Com]Chhava%2B%25282025%2529%2BHindi%2B720p%2BHC%2BHDRip%2Bx264%2BAAC%26amp;tr%3Dudp%253A%252F%252Ftracker.opentrackr.org%253A1337%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopen.tracker.cl%253A1337%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.auctor.tv%253A6969%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopentracker.i2p.rocks%253A6969%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopen.demonii.com%253A1337%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopen.stealth.si%253A80%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.torrent.eu.org%253A451%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.moeking.me%253A6969%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fexplodie.org%253A6969%252Fannounce%26amp;tr%3Dhttps%253A%252F%252Ftracker.tamersunion.org%253A443%252Fannounce%26amp;tr%3Dhttps%253A%252F%252Ftracker.gbitt.info%253A443%252Fannounce%26amp;tr%3Dhttp%253A%252F%252Ftracker.gbitt.info%253A80%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker-udp.gbitt.info%253A80%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.tiny-vps.com%253A6969%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.opentrackr.org%253A1337%252Fannounce%26amp;tr%3Dhttp%253A%252F%252Ftracker.openbittorrent.com%253A80%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopentracker.i2p.rocks%253A6969%25 HTTP/1.1\" 200 -\n",
1333        "127.0.0.1 - - [20/Apr/2025 04:04:49] \"GET /status?magnet=magnet:?xt%3Durn:btih:A96A08E2ACFDC5F4899A72012CB2E42B398007BE%26amp;dn%3D[1337x.HashHackers.Com]Chhava%2B%25282025%2529%2BHindi%2B720p%2BHC%2BHDRip%2Bx264%2BAAC%26amp;tr%3Dudp%253A%252F%252Ftracker.opentrackr.org%253A1337%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopen.tracker.cl%253A1337%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.auctor.tv%253A6969%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopentracker.i2p.rocks%253A6969%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopen.demonii.com%253A1337%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopen.stealth.si%253A80%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.torrent.eu.org%253A451%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.moeking.me%253A6969%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fexplodie.org%253A6969%252Fannounce%26amp;tr%3Dhttps%253A%252F%252Ftracker.tamersunion.org%253A443%252Fannounce%26amp;tr%3Dhttps%253A%252F%252Ftracker.gbitt.info%253A443%252Fannounce%26amp;tr%3Dhttp%253A%252F%252Ftracker.gbitt.info%253A80%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker-udp.gbitt.info%253A80%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.tiny-vps.com%253A6969%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.opentrackr.org%253A1337%252Fannounce%26amp;tr%3Dhttp%253A%252F%252Ftracker.openbittorrent.com%253A80%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopentracker.i2p.rocks%253A6969%25 HTTP/1.1\" 200 -\n",
1334        "127.0.0.1 - - [20/Apr/2025 04:04:52] \"GET /status?magnet=magnet:?xt%3Durn:btih:A96A08E2ACFDC5F4899A72012CB2E42B398007BE%26amp;dn%3D[1337x.HashHackers.Com]Chhava%2B%25282025%2529%2BHindi%2B720p%2BHC%2BHDRip%2Bx264%2BAAC%26amp;tr%3Dudp%253A%252F%252Ftracker.opentrackr.org%253A1337%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopen.tracker.cl%253A1337%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.auctor.tv%253A6969%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopentracker.i2p.rocks%253A6969%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopen.demonii.com%253A1337%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopen.stealth.si%253A80%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.torrent.eu.org%253A451%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.moeking.me%253A6969%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fexplodie.org%253A6969%252Fannounce%26amp;tr%3Dhttps%253A%252F%252Ftracker.tamersunion.org%253A443%252Fannounce%26amp;tr%3Dhttps%253A%252F%252Ftracker.gbitt.info%253A443%252Fannounce%26amp;tr%3Dhttp%253A%252F%252Ftracker.gbitt.info%253A80%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker-udp.gbitt.info%253A80%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.tiny-vps.com%253A6969%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.opentrackr.org%253A1337%252Fannounce%26amp;tr%3Dhttp%253A%252F%252Ftracker.openbittorrent.com%253A80%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopentracker.i2p.rocks%253A6969%25 HTTP/1.1\" 200 -\n",
1335        "127.0.0.1 - - [20/Apr/2025 04:04:55] \"GET /status?magnet=magnet:?xt%3Durn:btih:A96A08E2ACFDC5F4899A72012CB2E42B398007BE%26amp;dn%3D[1337x.HashHackers.Com]Chhava%2B%25282025%2529%2BHindi%2B720p%2BHC%2BHDRip%2Bx264%2BAAC%26amp;tr%3Dudp%253A%252F%252Ftracker.opentrackr.org%253A1337%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopen.tracker.cl%253A1337%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.auctor.tv%253A6969%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopentracker.i2p.rocks%253A6969%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopen.demonii.com%253A1337%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopen.stealth.si%253A80%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.torrent.eu.org%253A451%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.moeking.me%253A6969%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fexplodie.org%253A6969%252Fannounce%26amp;tr%3Dhttps%253A%252F%252Ftracker.tamersunion.org%253A443%252Fannounce%26amp;tr%3Dhttps%253A%252F%252Ftracker.gbitt.info%253A443%252Fannounce%26amp;tr%3Dhttp%253A%252F%252Ftracker.gbitt.info%253A80%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker-udp.gbitt.info%253A80%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.tiny-vps.com%253A6969%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.opentrackr.org%253A1337%252Fannounce%26amp;tr%3Dhttp%253A%252F%252Ftracker.openbittorrent.com%253A80%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopentracker.i2p.rocks%253A6969%25 HTTP/1.1\" 200 -\n",
1336        "127.0.0.1 - - [20/Apr/2025 04:04:58] \"GET /status?magnet=magnet:?xt%3Durn:btih:A96A08E2ACFDC5F4899A72012CB2E42B398007BE%26amp;dn%3D[1337x.HashHackers.Com]Chhava%2B%25282025%2529%2BHindi%2B720p%2BHC%2BHDRip%2Bx264%2BAAC%26amp;tr%3Dudp%253A%252F%252Ftracker.opentrackr.org%253A1337%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopen.tracker.cl%253A1337%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.auctor.tv%253A6969%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopentracker.i2p.rocks%253A6969%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopen.demonii.com%253A1337%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopen.stealth.si%253A80%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.torrent.eu.org%253A451%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.moeking.me%253A6969%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fexplodie.org%253A6969%252Fannounce%26amp;tr%3Dhttps%253A%252F%252Ftracker.tamersunion.org%253A443%252Fannounce%26amp;tr%3Dhttps%253A%252F%252Ftracker.gbitt.info%253A443%252Fannounce%26amp;tr%3Dhttp%253A%252F%252Ftracker.gbitt.info%253A80%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker-udp.gbitt.info%253A80%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.tiny-vps.com%253A6969%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.opentrackr.org%253A1337%252Fannounce%26amp;tr%3Dhttp%253A%252F%252Ftracker.openbittorrent.com%253A80%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopentracker.i2p.rocks%253A6969%25 HTTP/1.1\" 200 -\n",
1337        "127.0.0.1 - - [20/Apr/2025 04:05:01] \"GET /status?magnet=magnet:?xt%3Durn:btih:A96A08E2ACFDC5F4899A72012CB2E42B398007BE%26amp;dn%3D[1337x.HashHackers.Com]Chhava%2B%25282025%2529%2BHindi%2B720p%2BHC%2BHDRip%2Bx264%2BAAC%26amp;tr%3Dudp%253A%252F%252Ftracker.opentrackr.org%253A1337%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopen.tracker.cl%253A1337%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.auctor.tv%253A6969%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopentracker.i2p.rocks%253A6969%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopen.demonii.com%253A1337%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopen.stealth.si%253A80%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.torrent.eu.org%253A451%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.moeking.me%253A6969%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fexplodie.org%253A6969%252Fannounce%26amp;tr%3Dhttps%253A%252F%252Ftracker.tamersunion.org%253A443%252Fannounce%26amp;tr%3Dhttps%253A%252F%252Ftracker.gbitt.info%253A443%252Fannounce%26amp;tr%3Dhttp%253A%252F%252Ftracker.gbitt.info%253A80%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker-udp.gbitt.info%253A80%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.tiny-vps.com%253A6969%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.opentrackr.org%253A1337%252Fannounce%26amp;tr%3Dhttp%253A%252F%252Ftracker.openbittorrent.com%253A80%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopentracker.i2p.rocks%253A6969%25 HTTP/1.1\" 200 -\n",
1338        "127.0.0.1 - - [20/Apr/2025 04:05:04] \"GET /status?magnet=magnet:?xt%3Durn:btih:A96A08E2ACFDC5F4899A72012CB2E42B398007BE%26amp;dn%3D[1337x.HashHackers.Com]Chhava%2B%25282025%2529%2BHindi%2B720p%2BHC%2BHDRip%2Bx264%2BAAC%26amp;tr%3Dudp%253A%252F%252Ftracker.opentrackr.org%253A1337%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopen.tracker.cl%253A1337%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.auctor.tv%253A6969%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopentracker.i2p.rocks%253A6969%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopen.demonii.com%253A1337%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopen.stealth.si%253A80%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.torrent.eu.org%253A451%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.moeking.me%253A6969%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fexplodie.org%253A6969%252Fannounce%26amp;tr%3Dhttps%253A%252F%252Ftracker.tamersunion.org%253A443%252Fannounce%26amp;tr%3Dhttps%253A%252F%252Ftracker.gbitt.info%253A443%252Fannounce%26amp;tr%3Dhttp%253A%252F%252Ftracker.gbitt.info%253A80%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker-udp.gbitt.info%253A80%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.tiny-vps.com%253A6969%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.opentrackr.org%253A1337%252Fannounce%26amp;tr%3Dhttp%253A%252F%252Ftracker.openbittorrent.com%253A80%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopentracker.i2p.rocks%253A6969%25 HTTP/1.1\" 200 -\n",
1339        "127.0.0.1 - - [20/Apr/2025 04:05:07] \"GET /status?magnet=magnet:?xt%3Durn:btih:A96A08E2ACFDC5F4899A72012CB2E42B398007BE%26amp;dn%3D[1337x.HashHackers.Com]Chhava%2B%25282025%2529%2BHindi%2B720p%2BHC%2BHDRip%2Bx264%2BAAC%26amp;tr%3Dudp%253A%252F%252Ftracker.opentrackr.org%253A1337%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopen.tracker.cl%253A1337%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.auctor.tv%253A6969%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopentracker.i2p.rocks%253A6969%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopen.demonii.com%253A1337%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopen.stealth.si%253A80%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.torrent.eu.org%253A451%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.moeking.me%253A6969%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fexplodie.org%253A6969%252Fannounce%26amp;tr%3Dhttps%253A%252F%252Ftracker.tamersunion.org%253A443%252Fannounce%26amp;tr%3Dhttps%253A%252F%252Ftracker.gbitt.info%253A443%252Fannounce%26amp;tr%3Dhttp%253A%252F%252Ftracker.gbitt.info%253A80%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker-udp.gbitt.info%253A80%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.tiny-vps.com%253A6969%252Fannounce%26amp;tr%3Dudp%253A%252F%252Ftracker.opentrackr.org%253A1337%252Fannounce%26amp;tr%3Dhttp%253A%252F%252Ftracker.openbittorrent.com%253A80%252Fannounce%26amp;tr%3Dudp%253A%252F%252Fopentracker.i2p.rocks%253A6969%25 HTTP/1.1\" 200 -\n"
1340       ]
1341      }
1342     ],
1343     "source": [
1344      "import os\n",
1345      "import threading\n",
1346      "import time\n",
1347      "import mimetypes\n",
1348      "import libtorrent as lt\n",
1349      "from flask import (\n",
1350      "    Flask, request, render_template,\n",
1351      "    redirect, url_for, Response, abort, jsonify\n",
1352      ")\n",
1353      "\n",
1354      "# --- Configuration ---\n",
1355      "DOWNLOAD_DIR = os.path.join(os.getcwd(), 'downloads')\n",
1356      "CHUNK_SIZE = 8192\n",
1357      "os.makedirs(DOWNLOAD_DIR, exist_ok=True)\n",
1358      "\n",
1359      "app = Flask(__name__)\n",
1360      "app.logger.setLevel('INFO')\n",
1361      "\n",
1362      "# map magnet_uri -> {'filepath': Optional[str]}\n",
1363      "torrents = {}\n",
1364      "\n",
1365      "\n",
1366      "def start_torrent_download(magnet_uri: str):\n",
1367      "    \"\"\"Background thread: fetch metadata, pick largest file, record filepath.\"\"\"\n",
1368      "    # Session setup with DHT/LSD/UPnP\n",
1369      "    ses = lt.session({\n",
1370      "        'listen_interfaces': '0.0.0.0:6881',      # listen on all interfaces\n",
1371      "        'enable_upnp': True,\n",
1372      "        'enable_natpmp': True,\n",
1373      "    })\n",
1374      "    ses.start_dht()                              # Enable DHT\n",
1375      "    ses.start_lsd()                              # Enable Local Service Discovery\n",
1376      "    ses.start_upnp()                             # Enable UPnP port mapping\n",
1377      "    ses.add_dht_router(\"router.bittorrent.com\", 6881)  # Bootstrap DHT\n",
1378      "\n",
1379      "    params = {\n",
1380      "        'save_path': DOWNLOAD_DIR,\n",
1381      "        'storage_mode': lt.storage_mode_t.storage_mode_sparse,\n",
1382      "        'flags': lt.torrent_flags.auto_managed\n",
1383      "    }\n",
1384      "    handle = lt.add_magnet_uri(ses, magnet_uri, params)\n",
1385      "    handle.set_sequential_download(True)\n",
1386      "\n",
1387      "    app.logger.info(f\"Fetching metadata for {magnet_uri} (timeout 60s)…\")\n",
1388      "    start_ts = time.time()\n",
1389      "    while not handle.has_metadata():\n",
1390      "        status = handle.status()\n",
1391      "        elapsed = time.time() - start_ts\n",
1392      "        app.logger.info(\n",
1393      "            f\"  ↳ meta {status.metadata_progress * 100:.1f}% | peers {status.num_peers} | elapsed {int(elapsed)}s\"\n",
1394      "        )\n",
1395      "        if elapsed > 60:\n",
1396      "            app.logger.error(\"  βœ— Metadata fetch timed out after 60s\")\n",
1397      "            return\n",
1398      "        time.sleep(1)\n",
1399      "\n",
1400      "    # Metadata ready β†’ pick largest file\n",
1401      "    ti = handle.get_torrent_info()\n",
1402      "    files = ti.files()\n",
1403      "    idx = max(range(files.num_files()), key=lambda i: files.file_size(i))\n",
1404      "    path = os.path.join(DOWNLOAD_DIR, files.file_path(idx))\n",
1405      "\n",
1406      "    torrents[magnet_uri]['filepath'] = path\n",
1407      "    app.logger.info(f\"Metadata readyβ€”streaming from: {path}\")\n",
1408      "\n",
1409      "\n",
1410      "@app.route('/')\n",
1411      "def index():\n",
1412      "    return render_template('index_st.html')\n",
1413      "\n",
1414      "\n",
1415      "@app.route('/player')\n",
1416      "def player():\n",
1417      "    magnet = request.args.get('magnet', '').strip()\n",
1418      "    if not magnet.startswith('magnet:'):\n",
1419      "        return redirect(url_for('index'))\n",
1420      "\n",
1421      "    # initialize state to β€œpending”\n",
1422      "    if magnet not in torrents:\n",
1423      "        torrents[magnet] = {'filepath': None}\n",
1424      "        threading.Thread(\n",
1425      "            target=start_torrent_download,\n",
1426      "            args=(magnet,),\n",
1427      "            daemon=True\n",
1428      "        ).start()\n",
1429      "\n",
1430      "    return render_template('player.html', magnet=magnet)\n",
1431      "\n",
1432      "\n",
1433      "@app.route('/status')\n",
1434      "def status():\n",
1435      "    \"\"\"Return JSON { ready: bool }.\"\"\"\n",
1436      "    magnet = request.args.get('magnet', '').strip()\n",
1437      "    info = torrents.get(magnet)\n",
1438      "    return jsonify({'ready': bool(info and info.get('filepath'))})\n",
1439      "\n",
1440      "\n",
1441      "def generate_file_stream(path: str, start: int, end: int):\n",
1442      "    with open(path, 'rb') as f:\n",
1443      "        f.seek(start)\n",
1444      "        remaining = end - start + 1\n",
1445      "        while remaining > 0:\n",
1446      "            chunk = f.read(min(CHUNK_SIZE, remaining))\n",
1447      "            if not chunk:\n",
1448      "                break\n",
1449      "            yield chunk\n",
1450      "            remaining -= len(chunk)\n",
1451      "\n",
1452      "\n",
1453      "def partial_response(path: str):\n",
1454      "    if not os.path.exists(path):\n",
1455      "        abort(404)\n",
1456      "\n",
1457      "    mime_type, _ = mimetypes.guess_type(path)\n",
1458      "    if not mime_type:\n",
1459      "        mime_type = 'application/octet-stream'\n",
1460      "\n",
1461      "    file_size = os.path.getsize(path)\n",
1462      "    range_header = request.headers.get('Range')\n",
1463      "    if range_header:\n",
1464      "        _, rng = range_header.split('=')\n",
1465      "        start_str, end_str = rng.split('-')\n",
1466      "        start = int(start_str)\n",
1467      "        end = int(end_str) if end_str else file_size - 1\n",
1468      "        end = min(end, file_size - 1)\n",
1469      "        length = end - start + 1\n",
1470      "        headers = {\n",
1471      "            'Content-Range': f'bytes {start}-{end}/{file_size}',\n",
1472      "            'Accept-Ranges': 'bytes',\n",
1473      "            'Content-Length': str(length),\n",
1474      "            'Content-Type': mime_type,\n",
1475      "        }\n",
1476      "        return Response(\n",
1477      "            generate_file_stream(path, start, end),\n",
1478      "            status=206,\n",
1479      "            headers=headers\n",
1480      "        )\n",
1481      "\n",
1482      "    # full file\n",
1483      "    return Response(\n",
1484      "        generate_file_stream(path, 0, file_size - 1),\n",
1485      "        headers={\n",
1486      "            'Content-Length': str(file_size),\n",
1487      "            'Accept-Ranges': 'bytes',\n",
1488      "            'Content-Type': mime_type,\n",
1489      "        }\n",
1490      "    )\n",
1491      "\n",
1492      "\n",
1493      "@app.route('/stream')\n",
1494      "def stream():\n",
1495      "    magnet = request.args.get('magnet', '').strip()\n",
1496      "    info = torrents.get(magnet)\n",
1497      "    if not info or not info.get('filepath'):\n",
1498      "        abort(404)\n",
1499      "    return partial_response(info['filepath'])\n",
1500      "\n",
1501      "\n",
1502      "if __name__ == '__main__':\n",
1503      "    app.run( port=5000, threaded=True)\n"
1504     ]
1505    },
1506    {
1507     "cell_type": "code",
1508     "execution_count": 107,
1509     "id": "55a2790f-4436-428c-82d9-ee774a7f5300",
1510     "metadata": {},
1511     "outputs": [
1512      {
1513       "name": "stdout",
1514       "output_type": "stream",
1515       "text": [
1516        "Defaulting to user installation because normal site-packages is not writeable\n",
1517        "Collecting libtorrent\n",
1518        "  Downloading libtorrent-2.0.9-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (249 bytes)\n",
1519        "Downloading libtorrent-2.0.9-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (8.5 MB)\n",
1520        "\u001b[2K   \u001b[38;2;114;156;31m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m8.5/8.5 MB\u001b[0m \u001b[31m10.7 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0mm eta \u001b[36m0:00:01\u001b[0m0:01\u001b[0m:01\u001b[0m\n",
1521        "\u001b[?25h\u001b[33mDEPRECATION: distro-info 0.23ubuntu1 has a non-standard version number. pip 24.1 will enforce this behaviour change. A possible replacement is to upgrade to a newer version of distro-info or contact the author to suggest that they release a version with a conforming version number. Discussion can be found at https://github.com/pypa/pip/issues/12063\u001b[0m\u001b[33m\n",
1522        "\u001b[0m\u001b[33mDEPRECATION: python-debian 0.1.36ubuntu1 has a non-standard version number. pip 24.1 will enforce this behaviour change. A possible replacement is to upgrade to a newer version of python-debian or contact the author to suggest that they release a version with a conforming version number. Discussion can be found at https://github.com/pypa/pip/issues/12063\u001b[0m\u001b[33m\n",
1523        "\u001b[0mInstalling collected packages: libtorrent\n",
1524        "Successfully installed libtorrent-2.0.9\n",
1525        "\n",
1526        "\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m A new release of pip is available: \u001b[0m\u001b[31;49m24.0\u001b[0m\u001b[39;49m -> \u001b[0m\u001b[32;49m25.0.1\u001b[0m\n",
1527        "\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m To update, run: \u001b[0m\u001b[32;49mpython3 -m pip install --upgrade pip\u001b[0m\n"
1528       ]
1529      }
1530     ],
1531     "source": [
1532      "!pip install libtorrent"
1533     ]
1534    },
1535    {
1536     "cell_type": "code",
1537     "execution_count": null,
1538     "id": "741dea51-a837-4f03-b7d1-b94fcf0298ac",
1539     "metadata": {},
1540     "outputs": [],
1541     "source": []
1542    }
1543   ],
1544   "metadata": {
1545    "kernelspec": {
1546     "display_name": "Python 3",
1547     "language": "python",
1548     "name": "python3"
1549    },
1550    "language_info": {
1551     "codemirror_mode": {
1552      "name": "ipython",
1553      "version": 3
1554     },
1555     "file_extension": ".py",
1556     "mimetype": "text/x-python",
1557     "name": "python",
1558     "nbconvert_exporter": "python",
1559     "pygments_lexer": "ipython3",
1560     "version": "3.8.10"
1561    }
1562   },
1563   "nbformat": 4,
1564   "nbformat_minor": 5
1565  }
1566