prompt: You will be provided with a partial code base and an issue statement explaining a problem to resolve.
  <issue>
  Remove aurora redirects
  I just looked at our root urls.py, and saw a bunch of aurora-related redirects.
  
  It's been ... a decade or so, let's get rid of them.
  
  CC @flodolo 
  
  </issue>
  <code>
  [start of pontoon/urls.py]
  1 from django.urls import include, path, register_converter
  2 from django.urls.converters import StringConverter
  3 from django.contrib import admin
  4 from django.contrib.auth import logout
  5 from django.views.generic import RedirectView, TemplateView
  6 
  7 from pontoon.teams.views import team
  8 
  9 
  10 class LocaleConverter(StringConverter):
  11     regex = r"[A-Za-z0-9\-\@\.]+"
  12 
  13 
  14 register_converter(LocaleConverter, "locale")
  15 
  16 pontoon_js_view = TemplateView.as_view(
  17     template_name="js/pontoon.js", content_type="text/javascript"
  18 )
  19 
  20 permission_denied_view = TemplateView.as_view(template_name="403.html")
  21 page_not_found_view = TemplateView.as_view(template_name="404.html")
  22 server_error_view = TemplateView.as_view(template_name="500.html")
  23 
  24 urlpatterns = [
  25     # Redirect legacy Aurora projects
  26     path(
  27         "projects/firefox-aurora/<path:url>",
  28         RedirectView.as_view(url="/projects/firefox/%(url)s", permanent=True),
  29     ),
  30     path(
  31         "projects/firefox-for-android-aurora/<path:url>",
  32         RedirectView.as_view(
  33             url="/projects/firefox-for-android/%(url)s", permanent=True
  34         ),
  35     ),
  36     path(
  37         "projects/thunderbird-aurora/<path:url>",
  38         RedirectView.as_view(url="/projects/thunderbird/%(url)s", permanent=True),
  39     ),
  40     path(
  41         "projects/lightning-aurora/<path:url>",
  42         RedirectView.as_view(url="/projects/lightning/%(url)s", permanent=True),
  43     ),
  44     path(
  45         "projects/seamonkey-aurora/<path:url>",
  46         RedirectView.as_view(url="/projects/seamonkey/%(url)s", permanent=True),
  47     ),
  48     path(
  49         "<locale:locale>/firefox-aurora/<path:url>",
  50         RedirectView.as_view(url="/%(locale)s/firefox/%(url)s", permanent=True),
  51     ),
  52     path(
  53         "<locale:locale>/firefox-for-android-aurora/<path:url>",
  54         RedirectView.as_view(
  55             url="/%(locale)s/firefox-for-android/%(url)s", permanent=True
  56         ),
  57     ),
  58     path(
  59         "<locale:locale>/thunderbird-aurora/<path:url>",
  60         RedirectView.as_view(url="/%(locale)s/thunderbird/%(url)s", permanent=True),
  61     ),
  62     path(
  63         "<locale:locale>/lightning-aurora/<path:url>",
  64         RedirectView.as_view(url="/%(locale)s/lightning/%(url)s", permanent=True),
  65     ),
  66     path(
  67         "<locale:locale>/seamonkey-aurora/<path:url>",
  68         RedirectView.as_view(url="/%(locale)s/seamonkey/%(url)s", permanent=True),
  69     ),
  70     # Accounts
  71     path("accounts/", include("pontoon.allauth_urls")),
  72     # Admin
  73     path("admin/", include("pontoon.administration.urls")),
  74     # Django admin: Disable the login form
  75     path("a/login/", permission_denied_view),
  76     # Django admin
  77     path("a/", admin.site.urls),
  78     # Logout
  79     path("signout/", logout, {"next_page": "/"}, name="signout"),
  80     # Error pages
  81     path("403/", permission_denied_view),
  82     path("404/", page_not_found_view),
  83     path("500/", server_error_view),
  84     # Robots.txt
  85     path(
  86         "robots.txt",
  87         TemplateView.as_view(template_name="robots.txt", content_type="text/plain"),
  88     ),
  89     # contribute.json
  90     path(
  91         "contribute.json",
  92         TemplateView.as_view(
  93             template_name="contribute.json", content_type="text/plain"
  94         ),
  95     ),
  96     # Favicon
  97     path(
  98         "favicon.ico",
  99         RedirectView.as_view(url="/static/img/favicon.ico", permanent=True),
  100     ),
  101     # Include script
  102     path("pontoon.js", pontoon_js_view),
  103     path("static/js/pontoon.js", pontoon_js_view),
  104     # Include URL configurations from installed apps
  105     path("terminology/", include("pontoon.terminology.urls")),
  106     path("translations/", include("pontoon.translations.urls")),
  107     path("", include("pontoon.teams.urls")),
  108     path("", include("pontoon.tour.urls")),
  109     path("", include("pontoon.tags.urls")),
  110     path("", include("pontoon.sync.urls")),
  111     path("", include("pontoon.projects.urls")),
  112     path("", include("pontoon.machinery.urls")),
  113     path("", include("pontoon.contributors.urls")),
  114     path("", include("pontoon.localizations.urls")),
  115     path("", include("pontoon.base.urls")),
  116     path("", include("pontoon.translate.urls")),
  117     path("", include("pontoon.batch.urls")),
  118     path("", include("pontoon.api.urls")),
  119     path("", include("pontoon.homepage.urls")),
  120     path("", include("pontoon.in_context.urls")),
  121     path("", include("pontoon.uxactionlog.urls")),
  122     # Team page: Must be at the end
  123     path("<locale:locale>/", team, name="pontoon.teams.team"),
  124 ]
  125
  [end of pontoon/urls.py]
  </code>
  
  I need you to solve this issue by generating a single patch file that I can apply directly to this repository using git apply. Please respond with a single patch file in the following format.
  <patch>
  diff --git a/file.py b/file.py
  --- a/file.py
  +++ b/file.py
  @@ -1,27 +1,35 @@
   def euclidean(a, b):
  -    while b:
  -        a, b = b, a % b
  -    return a
  +    if b == 0:
  +        return a
  +    return euclidean(b, a % b)
   
   
   def bresenham(x0, y0, x1, y1):
       points = []
       dx = abs(x1 - x0)
       dy = abs(y1 - y0)
  -    sx = 1 if x0 < x1 else -1
  -    sy = 1 if y0 < y1 else -1
  -    err = dx - dy
  +    x, y = x0, y0
  +    sx = -1 if x0 > x1 else 1
  +    sy = -1 if y0 > y1 else 1
   
  -    while True:
  -        points.append((x0, y0))
  -        if x0 == x1 and y0 == y1:
  -            break
  -        e2 = 2 * err
  -        if e2 > -dy:
  -            err -= dy
  -            x0 += sx
  -        if e2 < dx:
  -            err += dx
  -            y0 += sy
  +    if dx > dy:
  +        err = dx / 2.0
  +        while x != x1:
  +            points.append((x, y))
  +            err -= dy
  +            if err < 0:
  +                y += sy
  +                err += dx
  +            x += sx
  +    else:
  +        err = dy / 2.0
  +        while y != y1:
  +            points.append((x, y))
  +            err -= dx
  +            if err < 0:
  +                x += sx
  +                err += dy
  +            y += sy
  +
  +    points.append((x, y))
       return points
  
  </patch>
golden_diff: diff --git a/pontoon/urls.py b/pontoon/urls.py
  --- a/pontoon/urls.py
  +++ b/pontoon/urls.py
  @@ -22,51 +22,6 @@
   server_error_view = TemplateView.as_view(template_name="500.html")
   
   urlpatterns = [
  -    # Redirect legacy Aurora projects
  -    path(
  -        "projects/firefox-aurora/<path:url>",
  -        RedirectView.as_view(url="/projects/firefox/%(url)s", permanent=True),
  -    ),
  -    path(
  -        "projects/firefox-for-android-aurora/<path:url>",
  -        RedirectView.as_view(
  -            url="/projects/firefox-for-android/%(url)s", permanent=True
  -        ),
  -    ),
  -    path(
  -        "projects/thunderbird-aurora/<path:url>",
  -        RedirectView.as_view(url="/projects/thunderbird/%(url)s", permanent=True),
  -    ),
  -    path(
  -        "projects/lightning-aurora/<path:url>",
  -        RedirectView.as_view(url="/projects/lightning/%(url)s", permanent=True),
  -    ),
  -    path(
  -        "projects/seamonkey-aurora/<path:url>",
  -        RedirectView.as_view(url="/projects/seamonkey/%(url)s", permanent=True),
  -    ),
  -    path(
  -        "<locale:locale>/firefox-aurora/<path:url>",
  -        RedirectView.as_view(url="/%(locale)s/firefox/%(url)s", permanent=True),
  -    ),
  -    path(
  -        "<locale:locale>/firefox-for-android-aurora/<path:url>",
  -        RedirectView.as_view(
  -            url="/%(locale)s/firefox-for-android/%(url)s", permanent=True
  -        ),
  -    ),
  -    path(
  -        "<locale:locale>/thunderbird-aurora/<path:url>",
  -        RedirectView.as_view(url="/%(locale)s/thunderbird/%(url)s", permanent=True),
  -    ),
  -    path(
  -        "<locale:locale>/lightning-aurora/<path:url>",
  -        RedirectView.as_view(url="/%(locale)s/lightning/%(url)s", permanent=True),
  -    ),
  -    path(
  -        "<locale:locale>/seamonkey-aurora/<path:url>",
  -        RedirectView.as_view(url="/%(locale)s/seamonkey/%(url)s", permanent=True),
  -    ),
       # Accounts
       path("accounts/", include("pontoon.allauth_urls")),
       # Admin
  
verification_info: {"golden_diff": "diff --git a/pontoon/urls.py b/pontoon/urls.py\n--- a/pontoon/urls.py\n+++ b/pontoon/urls.py\n@@ -22,51 +22,6 @@\n server_error_view = TemplateView.as_view(template_name=\"500.html\")\n \n urlpatterns = [\n-    # Redirect legacy Aurora projects\n-    path(\n-        \"projects/firefox-aurora/<path:url>\",\n-        RedirectView.as_view(url=\"/projects/firefox/%(url)s\", permanent=True),\n-    ),\n-    path(\n-        \"projects/firefox-for-android-aurora/<path:url>\",\n-        RedirectView.as_view(\n-            url=\"/projects/firefox-for-android/%(url)s\", permanent=True\n-        ),\n-    ),\n-    path(\n-        \"projects/thunderbird-aurora/<path:url>\",\n-        RedirectView.as_view(url=\"/projects/thunderbird/%(url)s\", permanent=True),\n-    ),\n-    path(\n-        \"projects/lightning-aurora/<path:url>\",\n-        RedirectView.as_view(url=\"/projects/lightning/%(url)s\", permanent=True),\n-    ),\n-    path(\n-        \"projects/seamonkey-aurora/<path:url>\",\n-        RedirectView.as_view(url=\"/projects/seamonkey/%(url)s\", permanent=True),\n-    ),\n-    path(\n-        \"<locale:locale>/firefox-aurora/<path:url>\",\n-        RedirectView.as_view(url=\"/%(locale)s/firefox/%(url)s\", permanent=True),\n-    ),\n-    path(\n-        \"<locale:locale>/firefox-for-android-aurora/<path:url>\",\n-        RedirectView.as_view(\n-            url=\"/%(locale)s/firefox-for-android/%(url)s\", permanent=True\n-        ),\n-    ),\n-    path(\n-        \"<locale:locale>/thunderbird-aurora/<path:url>\",\n-        RedirectView.as_view(url=\"/%(locale)s/thunderbird/%(url)s\", permanent=True),\n-    ),\n-    path(\n-        \"<locale:locale>/lightning-aurora/<path:url>\",\n-        RedirectView.as_view(url=\"/%(locale)s/lightning/%(url)s\", permanent=True),\n-    ),\n-    path(\n-        \"<locale:locale>/seamonkey-aurora/<path:url>\",\n-        RedirectView.as_view(url=\"/%(locale)s/seamonkey/%(url)s\", permanent=True),\n-    ),\n     # Accounts\n     path(\"accounts/\", include(\"pontoon.allauth_urls\")),\n     # Admin\n", "issue": "Remove aurora redirects\nI just looked at our root urls.py, and saw a bunch of aurora-related redirects.\r\n\r\nIt's been ... a decade or so, let's get rid of them.\r\n\r\nCC @flodolo \n", "before_files": [{"content": "from django.urls import include, path, register_converter\nfrom django.urls.converters import StringConverter\nfrom django.contrib import admin\nfrom django.contrib.auth import logout\nfrom django.views.generic import RedirectView, TemplateView\n\nfrom pontoon.teams.views import team\n\n\nclass LocaleConverter(StringConverter):\n    regex = r\"[A-Za-z0-9\\-\\@\\.]+\"\n\n\nregister_converter(LocaleConverter, \"locale\")\n\npontoon_js_view = TemplateView.as_view(\n    template_name=\"js/pontoon.js\", content_type=\"text/javascript\"\n)\n\npermission_denied_view = TemplateView.as_view(template_name=\"403.html\")\npage_not_found_view = TemplateView.as_view(template_name=\"404.html\")\nserver_error_view = TemplateView.as_view(template_name=\"500.html\")\n\nurlpatterns = [\n    # Redirect legacy Aurora projects\n    path(\n        \"projects/firefox-aurora/<path:url>\",\n        RedirectView.as_view(url=\"/projects/firefox/%(url)s\", permanent=True),\n    ),\n    path(\n        \"projects/firefox-for-android-aurora/<path:url>\",\n        RedirectView.as_view(\n            url=\"/projects/firefox-for-android/%(url)s\", permanent=True\n        ),\n    ),\n    path(\n        \"projects/thunderbird-aurora/<path:url>\",\n        RedirectView.as_view(url=\"/projects/thunderbird/%(url)s\", permanent=True),\n    ),\n    path(\n        \"projects/lightning-aurora/<path:url>\",\n        RedirectView.as_view(url=\"/projects/lightning/%(url)s\", permanent=True),\n    ),\n    path(\n        \"projects/seamonkey-aurora/<path:url>\",\n        RedirectView.as_view(url=\"/projects/seamonkey/%(url)s\", permanent=True),\n    ),\n    path(\n        \"<locale:locale>/firefox-aurora/<path:url>\",\n        RedirectView.as_view(url=\"/%(locale)s/firefox/%(url)s\", permanent=True),\n    ),\n    path(\n        \"<locale:locale>/firefox-for-android-aurora/<path:url>\",\n        RedirectView.as_view(\n            url=\"/%(locale)s/firefox-for-android/%(url)s\", permanent=True\n        ),\n    ),\n    path(\n        \"<locale:locale>/thunderbird-aurora/<path:url>\",\n        RedirectView.as_view(url=\"/%(locale)s/thunderbird/%(url)s\", permanent=True),\n    ),\n    path(\n        \"<locale:locale>/lightning-aurora/<path:url>\",\n        RedirectView.as_view(url=\"/%(locale)s/lightning/%(url)s\", permanent=True),\n    ),\n    path(\n        \"<locale:locale>/seamonkey-aurora/<path:url>\",\n        RedirectView.as_view(url=\"/%(locale)s/seamonkey/%(url)s\", permanent=True),\n    ),\n    # Accounts\n    path(\"accounts/\", include(\"pontoon.allauth_urls\")),\n    # Admin\n    path(\"admin/\", include(\"pontoon.administration.urls\")),\n    # Django admin: Disable the login form\n    path(\"a/login/\", permission_denied_view),\n    # Django admin\n    path(\"a/\", admin.site.urls),\n    # Logout\n    path(\"signout/\", logout, {\"next_page\": \"/\"}, name=\"signout\"),\n    # Error pages\n    path(\"403/\", permission_denied_view),\n    path(\"404/\", page_not_found_view),\n    path(\"500/\", server_error_view),\n    # Robots.txt\n    path(\n        \"robots.txt\",\n        TemplateView.as_view(template_name=\"robots.txt\", content_type=\"text/plain\"),\n    ),\n    # contribute.json\n    path(\n        \"contribute.json\",\n        TemplateView.as_view(\n            template_name=\"contribute.json\", content_type=\"text/plain\"\n        ),\n    ),\n    # Favicon\n    path(\n        \"favicon.ico\",\n        RedirectView.as_view(url=\"/static/img/favicon.ico\", permanent=True),\n    ),\n    # Include script\n    path(\"pontoon.js\", pontoon_js_view),\n    path(\"static/js/pontoon.js\", pontoon_js_view),\n    # Include URL configurations from installed apps\n    path(\"terminology/\", include(\"pontoon.terminology.urls\")),\n    path(\"translations/\", include(\"pontoon.translations.urls\")),\n    path(\"\", include(\"pontoon.teams.urls\")),\n    path(\"\", include(\"pontoon.tour.urls\")),\n    path(\"\", include(\"pontoon.tags.urls\")),\n    path(\"\", include(\"pontoon.sync.urls\")),\n    path(\"\", include(\"pontoon.projects.urls\")),\n    path(\"\", include(\"pontoon.machinery.urls\")),\n    path(\"\", include(\"pontoon.contributors.urls\")),\n    path(\"\", include(\"pontoon.localizations.urls\")),\n    path(\"\", include(\"pontoon.base.urls\")),\n    path(\"\", include(\"pontoon.translate.urls\")),\n    path(\"\", include(\"pontoon.batch.urls\")),\n    path(\"\", include(\"pontoon.api.urls\")),\n    path(\"\", include(\"pontoon.homepage.urls\")),\n    path(\"\", include(\"pontoon.in_context.urls\")),\n    path(\"\", include(\"pontoon.uxactionlog.urls\")),\n    # Team page: Must be at the end\n    path(\"<locale:locale>/\", team, name=\"pontoon.teams.team\"),\n]\n", "path": "pontoon/urls.py"}]}