Arkm20 commited on
Commit
fa12ad8
·
verified ·
1 Parent(s): be4672a

Upload 3 files

Browse files
Files changed (3) hide show
  1. Dockerfile +23 -0
  2. app.py +456 -0
  3. requirements.txt +5 -0
Dockerfile ADDED
@@ -0,0 +1,23 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+
2
+
3
+ FROM python:3.9
4
+
5
+ # Create a non‐root user (UID 1000) and switch to it
6
+ RUN useradd -m -u 1000 user
7
+ USER user
8
+ ENV PATH="/home/user/.local/bin:$PATH"
9
+
10
+ WORKDIR /app
11
+
12
+ # Copy & install requirements
13
+ COPY --chown=user ./requirements.txt requirements.txt
14
+ RUN pip install --no-cache-dir --upgrade -r requirements.txt
15
+
16
+ # Copy the FastAPI app code
17
+ COPY --chown=user . /app
18
+
19
+ # Expose the port 7860, matching what HF Spaces will hit
20
+ EXPOSE 7860
21
+
22
+ # Launch uvicorn, pointing at "app:app", listening on 0.0.0.0:7860
23
+ CMD ["uvicorn", "app:app", "--host", "0.0.0.0", "--port", "7860"]
app.py ADDED
@@ -0,0 +1,456 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ print("Starting Server...")
2
+ import re
3
+ import requests
4
+ from bs4 import BeautifulSoup
5
+ from fastapi import FastAPI, HTTPException, Query
6
+ from fastapi.responses import HTMLResponse
7
+ from enum import Enum
8
+ from fastapi.responses import HTMLResponse
9
+ from fastapi.templating import Jinja2Templates
10
+ from fastapi.requests import Request
11
+ from fastapi.responses import StreamingResponse
12
+ import httpx
13
+ import io
14
+
15
+ # Headers to mimic a browser
16
+ HEADERS = {
17
+ "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) "
18
+ "AppleWebKit/537.36 (KHTML, like Gecko) "
19
+ "Chrome/115.0.0.0 Safari/537.36",
20
+ "Accept": "application/json",
21
+ "Referer": "http://hato.malupdaterosx.moe/",
22
+ "Origin": "http://hato.malupdaterosx.moe",
23
+ }
24
+
25
+
26
+ app = FastAPI()
27
+
28
+ ANIME_DB_URL = "https://raw.githubusercontent.com/Fribb/anime-lists/refs/heads/master/anime-offline-database-reduced.json"
29
+ anime_data_cache = None
30
+
31
+ def load_anime_data():
32
+ global anime_data_cache
33
+ if anime_data_cache is None:
34
+ try:
35
+ resp = requests.get(ANIME_DB_URL, timeout=15)
36
+ resp.raise_for_status()
37
+ # Corrected line:
38
+ anime_data_cache = resp.json()
39
+ except Exception as e:
40
+ raise HTTPException(status_code=500, detail=f"Failed to load anime data: {str(e)}")
41
+ return anime_data_cache
42
+
43
+
44
+ @app.get("/map/mal/{mal_id}")
45
+ def mal_to_kitsu(mal_id: int):
46
+ """
47
+ Convert MAL ID to Kitsu ID using Fribb's anime data.
48
+ """
49
+ anime_list = load_anime_data()
50
+ for anime in anime_list:
51
+ if anime.get("mal_id") == mal_id:
52
+ kitsu_id = anime.get("kitsu_id")
53
+ if kitsu_id:
54
+ return {"kitsu_id": kitsu_id}
55
+ raise HTTPException(status_code=404, detail=f"No Kitsu ID for MAL ID {mal_id}")
56
+ raise HTTPException(status_code=404, detail=f"MAL ID {mal_id} not found")
57
+
58
+
59
+ @app.get("/map/kitsu/{kitsu_id}")
60
+ def kitsu_to_mal(kitsu_id: int):
61
+ """
62
+ Convert Kitsu ID to MAL ID using Fribb's anime data.
63
+ """
64
+ anime_list = load_anime_data()
65
+ for anime in anime_list:
66
+ if anime.get("kitsu_id") == kitsu_id:
67
+ mal_id = anime.get("mal_id")
68
+ if mal_id:
69
+ return {"mal_id": mal_id}
70
+ raise HTTPException(status_code=404, detail=f"No MAL ID for Kitsu ID {kitsu_id}")
71
+ raise HTTPException(status_code=404, detail=f"Kitsu ID {kitsu_id} not found")
72
+
73
+ ANILIST_API_URL = "https://graphql.anilist.co"
74
+
75
+ # GraphQL to convert MAL ID to AniList ID and get images
76
+ ANILIST_QUERY = """
77
+ query ($malId: Int) {
78
+ Media(idMal: $malId, type: ANIME) {
79
+ id
80
+ bannerImage
81
+ coverImage {
82
+ extraLarge
83
+ large
84
+ medium
85
+ }
86
+ }
87
+ }
88
+ """
89
+
90
+ @app.get("/anime/image")
91
+ async def get_anime_image(
92
+ mal_id: int = Query(..., description="MyAnimeList anime ID"),
93
+ cover: bool = Query(False, description="Return cover image instead of banner")
94
+ ):
95
+ payload = {
96
+ "query": ANILIST_QUERY,
97
+ "variables": {"malId": mal_id}
98
+ }
99
+
100
+ async with httpx.AsyncClient() as client:
101
+ res = await client.post(ANILIST_API_URL, json=payload)
102
+ data = res.json()
103
+ media = data.get("data", {}).get("Media")
104
+ if not media:
105
+ return {"error": "Anime not found"}
106
+
107
+ # Get the image URL
108
+ if cover:
109
+ image_url = (
110
+ media["coverImage"].get("extraLarge") or
111
+ media["coverImage"].get("large") or
112
+ media["coverImage"].get("medium")
113
+ )
114
+ else:
115
+ image_url = media.get("bannerImage")
116
+
117
+ if not image_url:
118
+ return {"error": "Image not available"}
119
+
120
+ # Fetch the actual image bytes
121
+ img_response = await client.get(image_url)
122
+ if img_response.status_code != 200:
123
+ return {"error": "Failed to fetch image"}
124
+
125
+ # Guess content type (fallback to generic image/jpeg)
126
+ content_type = img_response.headers.get("Content-Type", "image/jpeg")
127
+
128
+ return StreamingResponse(io.BytesIO(img_response.content), media_type=content_type)
129
+
130
+ def get_anime_title(jikan_id: str) -> str:
131
+ """
132
+ Fetch the anime title from Jikan API using the provided Jikan ID.
133
+ Prefers the English title if available; otherwise falls back to the default title.
134
+ """
135
+ url = f"https://api.jikan.moe/v4/anime/{jikan_id}"
136
+ try:
137
+ resp = requests.get(url, timeout=10)
138
+ resp.raise_for_status() # Will raise an exception for 4xx/5xx status
139
+ data = resp.json().get("data", {})
140
+ title = data.get("title_english") or data.get("title")
141
+ if not title:
142
+ raise HTTPException(status_code=500, detail="Failed to retrieve title from Jikan")
143
+ return title
144
+ except requests.exceptions.HTTPError:
145
+ raise HTTPException(status_code=404, detail=f"Jikan ID {jikan_id} not found")
146
+ except requests.exceptions.RequestException as e:
147
+ raise HTTPException(status_code=502, detail=f"Error contacting Jikan API: {e}")
148
+
149
+ def slugify_title_for_9anime(title: str) -> str:
150
+ """Converts a title to a URL-friendly slug, merging apostrophe-s into the preceding word."""
151
+ # 1) Handle English possessives: "journey's" → "journeys"
152
+ s = re.sub(r"(?i)([a-z0-9])'s\b", r"\1s", title)
153
+
154
+ # 2) Remove any remaining apostrophes (and typographic ’) entirely
155
+ s = re.sub(r"[’']", "", s)
156
+
157
+ # 3) Lowercase and replace any run of non-alphanumerics with a single hyphen
158
+ s = s.lower()
159
+ s = re.sub(r"[^a-z0-9]+", "-", s)
160
+
161
+ # 4) Collapse multiple hyphens into one and strip leading/trailing hyphens
162
+ s = re.sub(r"-{2,}", "-", s).strip("-")
163
+ return s
164
+
165
+ def resolve_redirect_url(url: str) -> str:
166
+ """Follows redirects to find the final direct download URL."""
167
+ try:
168
+ headers = {"User-Agent": "Mozilla/5.0"}
169
+ resp = requests.head(url, headers=headers, allow_redirects=True, timeout=15)
170
+ resp.raise_for_status()
171
+ return resp.url
172
+ except requests.exceptions.Timeout:
173
+ raise HTTPException(status_code=408, detail="Request timed out while resolving download redirect.")
174
+ except requests.exceptions.RequestException as e:
175
+ raise HTTPException(status_code=502, detail=f"Failed to resolve download redirect: {e}")
176
+
177
+ # --- NEW LOGIC: Nonce Extraction and AJAX Call ---
178
+
179
+ def extract_nonce_from_html(html: str) -> str:
180
+ """Extracts the nonce value from the HTML or JavaScript."""
181
+ match = re.search(r"nonce\s*[:=]\s*['\"]([a-fA-F0-9]{10,})['\"]", html)
182
+ if match:
183
+ return match.group(1)
184
+ raise HTTPException(status_code=500, detail="Could not find nonce in the 9anime page HTML.")
185
+
186
+ def get_nonce_from_9anime(jikan_id: str, episode: int, dub: bool) -> str:
187
+ """Fetches the 9anime episode page and extracts the security nonce."""
188
+ title = get_anime_title(jikan_id)
189
+ base_slug = slugify_title_for_9anime(title)
190
+ slug_suffix = f"-dub-episode-{episode}" if dub else f"-episode-{episode}"
191
+ nineanime_slug = f"{base_slug}{slug_suffix}"
192
+ nineanime_url = f"https://9anime.org.lv/{nineanime_slug}/"
193
+
194
+ headers = {"User-Agent": "Mozilla/5.0"}
195
+ try:
196
+ resp = requests.get(nineanime_url, headers=headers, timeout=10)
197
+ resp.raise_for_status()
198
+ return extract_nonce_from_html(resp.text)
199
+ except requests.exceptions.HTTPError:
200
+ raise HTTPException(status_code=404, detail=f"9anime page not found at: {nineanime_url}")
201
+ except requests.exceptions.RequestException as e:
202
+ raise HTTPException(status_code=502, detail=f"Failed to fetch 9anime page for nonce: {e}")
203
+
204
+ def get_download_link(jikan_id: str, episode: int, dub: bool, quality: 'Quality') -> str:
205
+ """
206
+ Fetches the final, direct download link by getting a nonce and using the
207
+ site's internal AJAX endpoint.
208
+ """
209
+ nonce = get_nonce_from_9anime(jikan_id, episode, dub)
210
+
211
+ ajax_params = {
212
+ "action": "fetch_download_links",
213
+ "mal_id": jikan_id,
214
+ "ep": episode,
215
+ "nonce": nonce
216
+ }
217
+
218
+ try:
219
+ resp = requests.get(
220
+ "https://9anime.org.lv/wp-admin/admin-ajax.php",
221
+ params=ajax_params,
222
+ headers={"User-Agent": "Mozilla/5.0"},
223
+ timeout=10
224
+ )
225
+ resp.raise_for_status()
226
+ data = resp.json()
227
+ except requests.exceptions.RequestException as e:
228
+ raise HTTPException(status_code=502, detail=f"Failed to fetch download links via AJAX: {e}")
229
+
230
+ # Check the status inside the JSON payload
231
+ response_data = data.get("data", data) # Handle both {data: {status...}} and {status...}
232
+ status = response_data.get("status")
233
+
234
+ if status == 200:
235
+ html_content = response_data.get("result")
236
+ soup = BeautifulSoup(html_content, "html.parser")
237
+
238
+ section_text = "Dub" if dub else "Sub"
239
+ section_heading = soup.find("div", string=section_text)
240
+ if not section_heading:
241
+ other_section = "Sub" if dub else "Dub"
242
+ hint = f" The '{other_section}' version might be available." if soup.find("div", string=other_section) else ""
243
+ raise HTTPException(status_code=404, detail=f"'{section_text}' download section not found.{hint}")
244
+
245
+ links_container = section_heading.find_next_sibling("div")
246
+ if not links_container:
247
+ raise HTTPException(status_code=404, detail=f"Could not find link container for '{section_text}'.")
248
+
249
+ quality_link_tag = links_container.find("a", string=lambda t: t and t.strip().lower() == quality.value.lower())
250
+
251
+ if not quality_link_tag or not quality_link_tag.has_attr('href'):
252
+ available_links = [a.get_text(strip=True) for a in links_container.find_all('a')]
253
+ detail_msg = f"Download link for quality '{quality.value}' not found in '{section_text}' section."
254
+ if available_links:
255
+ detail_msg += f" Available qualities: {', '.join(available_links)}"
256
+ raise HTTPException(status_code=404, detail=detail_msg)
257
+
258
+ initial_url = quality_link_tag['href']
259
+ return resolve_redirect_url(initial_url)
260
+
261
+ elif status == 500:
262
+ raise HTTPException(status_code=404, detail="No download links available yet for this episode.")
263
+ else:
264
+ error_message = response_data.get("result", "An unknown error occurred from the download link provider.")
265
+ raise HTTPException(status_code=500, detail=error_message)
266
+
267
+ # --- FastAPI Endpoints ---
268
+
269
+ # This endpoint is for the iframe player, it uses a different logic
270
+ def find_9anime_iframe_src(nineanime_url: str) -> str:
271
+ headers = {"User-Agent": "Mozilla/5.0"}
272
+ resp = requests.get(nineanime_url, headers=headers, timeout=10)
273
+ if resp.status_code != 200:
274
+ raise HTTPException(status_code=404, detail=f"9Anime page not found: {nineanime_url}")
275
+ soup = BeautifulSoup(resp.text, "html.parser")
276
+ embed_div = soup.find("div", id="embed_holder")
277
+ if not embed_div:
278
+ raise HTTPException(status_code=500, detail=f"No <div id='embed_holder'> on {nineanime_url}")
279
+ iframe_tag = embed_div.find("iframe", src=True)
280
+ if iframe_tag: return iframe_tag["src"]
281
+ script_tag = embed_div.find("script")
282
+ if script_tag and script_tag.string:
283
+ match = re.search(r"<iframe[^>]*\s+src=[\"']([^\"']+)[\"']", script_tag.string)
284
+ if match: return match.group(1)
285
+ raise HTTPException(status_code=500, detail=f"Could not extract iframe src from 9Anime page: {nineanime_url}")
286
+
287
+ def generate_iframe_src(jikan_id: str, episode: int, dub: bool = False) -> str:
288
+ title = get_anime_title(jikan_id)
289
+ base_slug = slugify_title_for_9anime(title)
290
+ slug_suffix = f"-dub-episode-{episode}" if dub else f"-episode-{episode}"
291
+ nineanime_slug = f"{base_slug}{slug_suffix}"
292
+ nineanime_url = f"https://9anime.org.lv/{nineanime_slug}/"
293
+ return find_9anime_iframe_src(nineanime_url)
294
+
295
+ @app.get("/iframe-src")
296
+ def iframe_src_endpoint(id: str = Query(..., description="Jikan anime ID"), episode: int = Query(...), dub: bool = Query(False)):
297
+ """Returns JSON: { "src": "<gogoanime-iframe-url>" } for embedding a video player."""
298
+ return {"src": generate_iframe_src(id, episode, dub)}
299
+
300
+ @app.get("/", response_class=HTMLResponse)
301
+ def full_player_page_endpoint(id: str = Query(..., description="Jikan anime ID"), episode: int = Query(...), dub: bool = Query(False)):
302
+ """Returns a full HTML page with the embedded video player."""
303
+ iframe_src = generate_iframe_src(id, episode, dub)
304
+ title_prefix = 'Dub ' if dub else ''
305
+ html_content = f"""
306
+ <!DOCTYPE html><html lang="en">
307
+ <head><meta charset="UTF-8"><title>{title_prefix}Episode {episode} Player</title>
308
+ <style>body, html {{ margin: 0; padding: 0; height: 100%; width: 100%; background-color: #000; }} iframe {{ display: block; border: none; width: 100%; height: 100vh; }}</style>
309
+ </head>
310
+ <body><iframe sandbox="allow-scripts allow-same-origin" src="{iframe_src}" allowfullscreen scrolling="no"></iframe></body>
311
+ </html>"""
312
+ return HTMLResponse(content=html_content, status_code=200)
313
+
314
+ # --- NEW, IMPROVED DOWNLOAD ENDPOINT ---
315
+
316
+ class Quality(str, Enum):
317
+ """Enum for allowed video qualities."""
318
+ p360 = "360p"
319
+ p720 = "720p"
320
+ p1080 = "1080p"
321
+
322
+ @app.get("/download-link")
323
+ def download_link_endpoint(
324
+ id: str = Query(..., description="Jikan anime ID"),
325
+ episode: int = Query(..., description="Episode number"),
326
+ dub: bool = Query(False, description="Whether to use dubbed version"),
327
+ quality: Quality = Query(..., description="Desired video quality."),
328
+ ):
329
+ """
330
+ Returns a JSON object with a direct download link for the specified episode.
331
+ This uses a reliable internal API method with a security nonce.
332
+ """
333
+ try:
334
+ final_url = get_download_link(id, episode, dub, quality)
335
+ return {"download_url": final_url}
336
+ except HTTPException as e:
337
+ # Re-raise exceptions we've already formatted for the API
338
+ raise e
339
+ except Exception as e:
340
+ # Catch any other unexpected errors and format them
341
+ raise HTTPException(status_code=500, detail=f"An unexpected internal error occurred: {e}")
342
+
343
+ @app.get("/download", response_class=HTMLResponse)
344
+ def download_page(
345
+ request: Request,
346
+ id: str = Query(..., description="Jikan anime ID"),
347
+ episode: int = Query(..., description="Episode number"),
348
+ dub: bool = Query(False, description="Dubbed version?"),
349
+ quality: Quality = Query(..., description="Desired video quality")
350
+ ):
351
+ html = f"""
352
+ <!DOCTYPE html>
353
+ <html lang="en">
354
+ <head>
355
+ <meta charset="UTF-8" />
356
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
357
+ <title>Download Episode</title>
358
+ <style>
359
+ body {{
360
+ margin: 0;
361
+ height: 100vh;
362
+ background-color: #000;
363
+ color: #fff;
364
+ font-family: sans-serif;
365
+ display: flex;
366
+ justify-content: center;
367
+ align-items: center;
368
+ }}
369
+ .container {{
370
+ display: flex;
371
+ flex-direction: column;
372
+ align-items: center;
373
+ justify-content: center;
374
+ text-align: center;
375
+ }}
376
+ .logo {{
377
+ font-size: 2rem;
378
+ font-weight: bold;
379
+ color: #FFA500;
380
+ margin-bottom: 1.5rem;
381
+ }}
382
+ .spinner {{
383
+ border: 4px solid rgba(255,255,255,0.2);
384
+ border-top: 4px solid #fff;
385
+ border-radius: 50%;
386
+ width: 40px;
387
+ height: 40px;
388
+ animation: spin 1s linear infinite;
389
+ margin-bottom: 1rem;
390
+ }}
391
+ @keyframes spin {{
392
+ 0% {{ transform: rotate(0deg); }}
393
+ 100% {{ transform: rotate(360deg); }}
394
+ }}
395
+ </style>
396
+ </head>
397
+ <body>
398
+ <div class="container">
399
+ <div class="logo">
400
+ <svg width="169" height="69" viewBox="0 0 169 69" fill="none" xmlns="http://www.w3.org/2000/svg">
401
+ <g clip-path="url(#clip0_65_2)">
402
+ <mask id="mask0_65_2" style="mask-type:alpha" maskUnits="userSpaceOnUse" x="89" y="101" width="282" height="295">
403
+ <rect x="89" y="101" width="282" height="37" fill="#DE541E"/>
404
+ <rect x="89" y="163" width="282" height="37" fill="#DE541E"/>
405
+ <path d="M357 396H310.904L264 127H310.904L357 396Z" fill="#DE541E"/>
406
+ <path d="M108 396H154.096L201 127H154.096L108 396Z" fill="#DE541E"/>
407
+ <rect x="201" y="336.857" width="59" height="59.1429" fill="#DE541E"/>
408
+ <ellipse cx="230.5" cy="336.31" rx="29.5" ry="32.3095" fill="#DE541E"/>
409
+ </mask>
410
+ <g mask="url(#mask0_65_2)">
411
+ <rect x="69" y="81" width="328" height="341" fill="url(#paint0_linear_65_2)"/>
412
+ </g>
413
+ <path d="M390.024 389.659V396H383.683V389.659H390.024ZM390.024 383.317V389.659H383.683V383.317H390.024ZM390.024 376.976V383.317H383.683V376.976H390.024ZM390.024 370.634V376.976H383.683V370.634H390.024ZM390.024 364.293V370.634H383.683V364.293H390.024ZM390.024 357.951V364.293H383.683V357.951H390.024ZM390.024 351.61V357.951H383.683V351.61H390.024ZM390.024 345.268V351.61H383.683V345.268H390.024ZM390.024 338.927V345.268H383.683V338.927H390.024ZM390.024 332.585V338.927H383.683V332.585H390.024ZM390.024 326.244V332.585H383.683V326.244H390.024ZM390.024 319.902V326.244H383.683V319.902H390.024ZM390.024 313.561V319.902H383.683V313.561H390.024ZM390.024 307.22V313.561H383.683V307.22H390.024ZM390.024 300.878V307.22H383.683V300.878H390.024ZM396.366 300.878V307.22H390.024V300.878H396.366ZM396.366 307.22V313.561H390.024V307.22H396.366ZM396.366 313.561V319.902H390.024V313.561H396.366ZM396.366 319.902V326.244H390.024V319.902H396.366ZM396.366 326.244V332.585H390.024V326.244H396.366ZM396.366 332.585V338.927H390.024V332.585H396.366ZM396.366 338.927V345.268H390.024V338.927H396.366ZM402.707 345.268V351.61H396.366V345.268H402.707ZM402.707 351.61V357.951H396.366V351.61H402.707ZM402.707 357.951V364.293H396.366V357.951H402.707ZM402.707 364.293V370.634H396.366V364.293H402.707ZM402.707 370.634V376.976H396.366V370.634H402.707ZM402.707 376.976V383.317H396.366V376.976H402.707ZM402.707 383.317V389.659H396.366V383.317H402.707ZM402.707 389.659V396H396.366V389.659H402.707ZM409.049 389.659V396H402.707V389.659H409.049ZM415.39 389.659V396H409.049V389.659H415.39ZM415.39 383.317V389.659H409.049V383.317H415.39ZM415.39 376.976V383.317H409.049V376.976H415.39ZM415.39 370.634V376.976H409.049V370.634H415.39ZM415.39 364.293V370.634H409.049V364.293H415.39ZM415.39 357.951V364.293H409.049V357.951H415.39ZM415.39 351.61V357.951H409.049V351.61H415.39ZM415.39 345.268V351.61H409.049V345.268H415.39ZM409.049 345.268V351.61H402.707V345.268H409.049ZM409.049 338.927V345.268H402.707V338.927H409.049ZM409.049 351.61V357.951H402.707V351.61H409.049ZM409.049 357.951V364.293H402.707V357.951H409.049ZM409.049 364.293V370.634H402.707V364.293H409.049ZM409.049 370.634V376.976H402.707V370.634H409.049ZM409.049 376.976V383.317H402.707V376.976H409.049ZM409.049 383.317V389.659H402.707V383.317H409.049ZM396.366 389.659V396H390.024V389.659H396.366ZM396.366 383.317V389.659H390.024V383.317H396.366ZM396.366 376.976V383.317H390.024V376.976H396.366ZM396.366 370.634V376.976H390.024V370.634H396.366ZM396.366 364.293V370.634H390.024V364.293H396.366ZM396.366 357.951V364.293H390.024V357.951H396.366ZM396.366 351.61V357.951H390.024V351.61H396.366ZM396.366 345.268V351.61H390.024V345.268H396.366ZM390.024 275.512V281.854H383.683V275.512H390.024ZM390.024 281.854V288.195H383.683V281.854H390.024ZM390.024 288.195V294.537H383.683V288.195H390.024ZM390.024 294.537V300.878H383.683V294.537H390.024ZM409.049 281.854V288.195H402.707V281.854H409.049ZM409.049 288.195V294.537H402.707V288.195H409.049ZM409.049 294.537V300.878H402.707V294.537H409.049ZM409.049 300.878V307.22H402.707V300.878H409.049ZM409.049 307.22V313.561H402.707V307.22H409.049ZM409.049 313.561V319.902H402.707V313.561H409.049ZM409.049 319.902V326.244H402.707V319.902H409.049ZM415.39 326.244V332.585H409.049V326.244H415.39ZM415.39 332.585V338.927H409.049V332.585H415.39ZM415.39 338.927V345.268H409.049V338.927H415.39ZM415.39 319.902V326.244H409.049V319.902H415.39ZM415.39 313.561V319.902H409.049V313.561H415.39ZM415.39 307.22V313.561H409.049V307.22H415.39ZM415.39 300.878V307.22H409.049V300.878H415.39ZM415.39 294.537V300.878H409.049V294.537H415.39ZM415.39 288.195V294.537H409.049V288.195H415.39ZM415.39 281.854V288.195H409.049V281.854H415.39ZM415.39 275.512V281.854H409.049V275.512H415.39ZM409.049 275.512V281.854H402.707V275.512H409.049ZM402.707 275.512V281.854H396.366V275.512H402.707ZM402.707 281.854V288.195H396.366V281.854H402.707ZM396.366 288.195V294.537H390.024V288.195H396.366ZM396.366 294.537V300.878H390.024V294.537H396.366ZM396.366 281.854V288.195H390.024V281.854H396.366ZM396.366 275.512V281.854H390.024V275.512H396.366ZM402.707 288.195V294.537H396.366V288.195H402.707ZM402.707 294.537V300.878H396.366V294.537H402.707ZM402.707 300.878V307.22H396.366V300.878H402.707ZM402.707 307.22V313.561H396.366V307.22H402.707ZM402.707 313.561V319.902H396.366V313.561H402.707ZM402.707 319.902V326.244H396.366V319.902H402.707ZM402.707 326.244V332.585H396.366V326.244H402.707ZM402.707 332.585V338.927H396.366V332.585H402.707ZM402.707 338.927V345.268H396.366V338.927H402.707ZM409.049 332.585V338.927H402.707V332.585H409.049ZM409.049 326.244V332.585H402.707V326.244H409.049ZM459.78 389.659V396H453.439V389.659H459.78ZM466.122 389.659V396H459.78V389.659H466.122ZM472.463 389.659V396H466.122V389.659H472.463ZM478.805 389.659V396H472.463V389.659H478.805ZM485.146 383.317V389.659H478.805V383.317H485.146ZM485.146 376.976V383.317H478.805V376.976H485.146ZM485.146 389.659V396H478.805V389.659H485.146ZM478.805 383.317V389.659H472.463V383.317H478.805ZM472.463 383.317V389.659H466.122V383.317H472.463ZM466.122 383.317V389.659H459.78V383.317H466.122ZM459.78 383.317V389.659H453.439V383.317H459.78ZM459.78 376.976V383.317H453.439V376.976H459.78ZM459.78 370.634V376.976H453.439V370.634H459.78ZM466.122 370.634V376.976H459.78V370.634H466.122ZM472.463 370.634V376.976H466.122V370.634H472.463ZM478.805 370.634V376.976H472.463V370.634H478.805ZM485.146 370.634V376.976H478.805V370.634H485.146ZM478.805 376.976V383.317H472.463V376.976H478.805ZM472.463 376.976V383.317H466.122V376.976H472.463ZM466.122 376.976V383.317H459.78V376.976H466.122ZM485.146 300.878V307.22H478.805V300.878H485.146ZM478.805 300.878V307.22H472.463V300.878H478.805ZM466.122 300.878V307.22H459.78V300.878H466.122ZM466.122 307.22V313.561H459.78V307.22H466.122ZM466.122 313.561V319.902H459.78V313.561H466.122ZM459.78 319.902V326.244H453.439V319.902H459.78ZM459.78 326.244V332.585H453.439V326.244H459.78ZM459.78 332.585V338.927H453.439V332.585H459.78ZM459.78 338.927V345.268H453.439V338.927H459.78ZM459.78 345.268V351.61H453.439V345.268H459.78ZM459.78 351.61V357.951H453.439V351.61H459.78ZM459.78 357.951V364.293H453.439V357.951H459.78ZM459.78 364.293V370.634H453.439V364.293H459.78ZM466.122 364.293V370.634H459.78V364.293H466.122ZM472.463 364.293V370.634H466.122V364.293H472.463ZM478.805 364.293V370.634H472.463V364.293H478.805ZM485.146 364.293V370.634H478.805V364.293H485.146ZM485.146 357.951V364.293H478.805V357.951H485.146ZM485.146 345.268V351.61H478.805V345.268H485.146ZM485.146 338.927V345.268H478.805V338.927H485.146ZM485.146 332.585V338.927H478.805V332.585H485.146ZM485.146 326.244V332.585H478.805V326.244H485.146ZM485.146 319.902V326.244H478.805V319.902H485.146ZM485.146 313.561V319.902H478.805V313.561H485.146ZM485.146 307.22V313.561H478.805V307.22H485.146ZM478.805 332.585V338.927H472.463V332.585H478.805ZM478.805 345.268V351.61H472.463V345.268H478.805ZM478.805 351.61V357.951H472.463V351.61H478.805ZM478.805 357.951V364.293H472.463V357.951H478.805ZM485.146 351.61V357.951H478.805V351.61H485.146ZM478.805 319.902V326.244H472.463V319.902H478.805ZM472.463 319.902V326.244H466.122V319.902H472.463ZM466.122 319.902V326.244H459.78V319.902H466.122ZM466.122 326.244V332.585H459.78V326.244H466.122ZM466.122 332.585V338.927H459.78V332.585H466.122ZM466.122 338.927V345.268H459.78V338.927H466.122ZM466.122 345.268V351.61H459.78V345.268H466.122ZM466.122 351.61V357.951H459.78V351.61H466.122ZM466.122 357.951V364.293H459.78V357.951H466.122ZM472.463 357.951V364.293H466.122V357.951H472.463ZM472.463 351.61V357.951H466.122V351.61H472.463ZM472.463 345.268V351.61H466.122V345.268H472.463ZM472.463 338.927V345.268H466.122V338.927H472.463ZM472.463 332.585V338.927H466.122V332.585H472.463ZM472.463 326.244V332.585H466.122V326.244H472.463ZM478.805 326.244V332.585H472.463V326.244H478.805ZM478.805 338.927V345.268H472.463V338.927H478.805ZM478.805 313.561V319.902H472.463V313.561H478.805ZM478.805 307.22V313.561H472.463V307.22H478.805ZM472.463 307.22V313.561H466.122V307.22H472.463ZM472.463 313.561V319.902H466.122V313.561H472.463ZM459.78 313.561V319.902H453.439V313.561H459.78ZM459.78 307.22V313.561H453.439V307.22H459.78ZM459.78 300.878V307.22H453.439V300.878H459.78ZM472.463 300.878V307.22H466.122V300.878H472.463ZM459.78 275.512V281.854H453.439V275.512H459.78ZM459.78 281.854V288.195H453.439V281.854H459.78ZM466.122 281.854V288.195H459.78V281.854H466.122ZM472.463 281.854V288.195H466.122V281.854H472.463ZM472.463 288.195V294.537H466.122V288.195H472.463ZM478.805 288.195V294.537H472.463V288.195H478.805ZM478.805 294.537V300.878H472.463V294.537H478.805ZM472.463 294.537V300.878H466.122V294.537H472.463ZM466.122 294.537V300.878H459.78V294.537H466.122ZM466.122 288.195V294.537H459.78V288.195H466.122ZM459.78 288.195V294.537H453.439V288.195H459.78ZM453.439 288.195V294.537H447.098V288.195H453.439ZM453.439 294.537V300.878H447.098V294.537H453.439ZM459.78 294.537V300.878H453.439V294.537H459.78ZM453.439 300.878V307.22H447.098V300.878H453.439ZM447.098 294.537V300.878H440.756V294.537H447.098ZM447.098 288.195V294.537H440.756V288.195H447.098ZM447.098 281.854V288.195H440.756V281.854H447.098ZM447.098 275.512V281.854H440.756V275.512H447.098ZM453.439 275.512V281.854H447.098V275.512H453.439ZM453.439 281.854V288.195H447.098V281.854H453.439ZM440.756 275.512V281.854H434.415V275.512H440.756ZM440.756 281.854V288.195H434.415V281.854H440.756ZM440.756 288.195V294.537H434.415V288.195H440.756ZM440.756 294.537V300.878H434.415V294.537H440.756ZM434.415 275.512V281.854H428.073V275.512H434.415ZM434.415 281.854V288.195H428.073V281.854H434.415ZM428.073 281.854V288.195H421.732V281.854H428.073ZM428.073 288.195V294.537H421.732V288.195H428.073ZM421.732 288.195V294.537H415.39V288.195H421.732ZM421.732 294.537V300.878H415.39V294.537H421.732ZM428.073 294.537V300.878H421.732V294.537H428.073ZM434.415 294.537V300.878H428.073V294.537H434.415ZM434.415 288.195V294.537H428.073V288.195H434.415ZM421.732 300.878V307.22H415.39V300.878H421.732ZM428.073 275.512V281.854H421.732V275.512H428.073ZM421.732 281.854V288.195H415.39V281.854H421.732ZM510.63 237.463V243.805H504.288V237.463H510.63ZM510.63 243.805V250.146H504.288V243.805H510.63ZM510.63 250.146V256.488H504.288V250.146H510.63ZM529.654 237.463V243.805H523.313V237.463H529.654ZM529.654 243.805V250.146H523.313V243.805H529.654ZM529.654 250.146V256.488H523.313V250.146H529.654ZM535.996 250.146V256.488H529.654V250.146H535.996ZM535.996 243.805V250.146H529.654V243.805H535.996ZM535.996 237.463V243.805H529.654V237.463H535.996ZM523.313 237.463V243.805H516.971V237.463H523.313ZM516.971 237.463V243.805H510.63V237.463H516.971ZM516.971 243.805V250.146H510.63V243.805H516.971ZM523.313 243.805V250.146H516.971V243.805H523.313ZM523.313 250.146V256.488H516.971V250.146H523.313ZM516.971 250.146V256.488H510.63V250.146H516.971ZM510.63 256.488V262.829H504.288V256.488H510.63ZM516.971 256.488V262.829H510.63V256.488H516.971ZM523.313 256.488V262.829H516.971V256.488H523.313ZM529.654 256.488V262.829H523.313V256.488H529.654ZM535.996 256.488V262.829H529.654V256.488H535.996ZM510.63 389.659V396H504.288V389.659H510.63ZM510.63 383.317V389.659H504.288V383.317H510.63ZM510.63 376.976V383.317H504.288V376.976H510.63ZM510.63 370.634V376.976H504.288V370.634H510.63ZM510.63 364.293V370.634H504.288V364.293H510.63ZM510.63 357.951V364.293H504.288V357.951H510.63ZM510.63 351.61V357.951H504.288V351.61H510.63ZM510.63 345.268V351.61H504.288V345.268H510.63ZM510.63 338.927V345.268H504.288V338.927H510.63ZM510.63 332.585V338.927H504.288V332.585H510.63ZM510.63 326.244V332.585H504.288V326.244H510.63ZM510.63 319.902V326.244H504.288V319.902H510.63ZM510.63 313.561V319.902H504.288V313.561H510.63ZM510.63 307.22V313.561H504.288V307.22H510.63ZM510.63 300.878V307.22H504.288V300.878H510.63ZM516.971 300.878V307.22H510.63V300.878H516.971ZM516.971 307.22V313.561H510.63V307.22H516.971ZM516.971 313.561V319.902H510.63V313.561H516.971ZM516.971 319.902V326.244H510.63V319.902H516.971ZM516.971 326.244V332.585H510.63V326.244H516.971ZM516.971 332.585V338.927H510.63V332.585H516.971ZM516.971 338.927V345.268H510.63V338.927H516.971ZM523.313 345.268V351.61H516.971V345.268H523.313ZM523.313 351.61V357.951H516.971V351.61H523.313ZM523.313 357.951V364.293H516.971V357.951H523.313ZM523.313 364.293V370.634H516.971V364.293H523.313ZM523.313 370.634V376.976H516.971V370.634H523.313ZM523.313 376.976V383.317H516.971V376.976H523.313ZM523.313 383.317V389.659H516.971V383.317H523.313ZM523.313 389.659V396H516.971V389.659H523.313ZM529.654 389.659V396H523.313V389.659H529.654ZM535.996 389.659V396H529.654V389.659H535.996ZM535.996 383.317V389.659H529.654V383.317H535.996ZM535.996 376.976V383.317H529.654V376.976H535.996ZM535.996 370.634V376.976H529.654V370.634H535.996ZM535.996 364.293V370.634H529.654V364.293H535.996ZM535.996 357.951V364.293H529.654V357.951H535.996ZM535.996 351.61V357.951H529.654V351.61H535.996ZM535.996 345.268V351.61H529.654V345.268H535.996ZM529.654 345.268V351.61H523.313V345.268H529.654ZM529.654 338.927V345.268H523.313V338.927H529.654ZM529.654 351.61V357.951H523.313V351.61H529.654ZM529.654 357.951V364.293H523.313V357.951H529.654ZM529.654 364.293V370.634H523.313V364.293H529.654ZM529.654 370.634V376.976H523.313V370.634H529.654ZM529.654 376.976V383.317H523.313V376.976H529.654ZM529.654 383.317V389.659H523.313V383.317H529.654ZM516.971 389.659V396H510.63V389.659H516.971ZM516.971 383.317V389.659H510.63V383.317H516.971ZM516.971 376.976V383.317H510.63V376.976H516.971ZM516.971 370.634V376.976H510.63V370.634H516.971ZM516.971 364.293V370.634H510.63V364.293H516.971ZM516.971 357.951V364.293H510.63V357.951H516.971ZM516.971 351.61V357.951H510.63V351.61H516.971ZM516.971 345.268V351.61H510.63V345.268H516.971ZM510.63 288.195V294.537H504.288V288.195H510.63ZM510.63 294.537V300.878H504.288V294.537H510.63ZM529.654 288.195V294.537H523.313V288.195H529.654ZM529.654 294.537V300.878H523.313V294.537H529.654ZM529.654 300.878V307.22H523.313V300.878H529.654ZM529.654 307.22V313.561H523.313V307.22H529.654ZM529.654 313.561V319.902H523.313V313.561H529.654ZM529.654 319.902V326.244H523.313V319.902H529.654ZM535.996 326.244V332.585H529.654V326.244H535.996ZM535.996 332.585V338.927H529.654V332.585H535.996ZM535.996 338.927V345.268H529.654V338.927H535.996ZM535.996 319.902V326.244H529.654V319.902H535.996ZM535.996 313.561V319.902H529.654V313.561H535.996ZM535.996 307.22V313.561H529.654V307.22H535.996ZM535.996 300.878V307.22H529.654V300.878H535.996ZM535.996 294.537V300.878H529.654V294.537H535.996ZM535.996 288.195V294.537H529.654V288.195H535.996ZM516.971 288.195V294.537H510.63V288.195H516.971ZM516.971 294.537V300.878H510.63V294.537H516.971ZM523.313 288.195V294.537H516.971V288.195H523.313ZM523.313 294.537V300.878H516.971V294.537H523.313ZM523.313 300.878V307.22H516.971V300.878H523.313ZM523.313 307.22V313.561H516.971V307.22H523.313ZM523.313 313.561V319.902H516.971V313.561H523.313ZM523.313 319.902V326.244H516.971V319.902H523.313ZM523.313 326.244V332.585H516.971V326.244H523.313ZM523.313 332.585V338.927H516.971V332.585H523.313ZM523.313 338.927V345.268H516.971V338.927H523.313ZM529.654 332.585V338.927H523.313V332.585H529.654ZM529.654 326.244V332.585H523.313V326.244H529.654ZM529.654 281.854V288.195H523.313V281.854H529.654ZM535.996 281.854V288.195H529.654V281.854H535.996ZM523.313 281.854V288.195H516.971V281.854H523.313ZM516.971 281.854V288.195H510.63V281.854H516.971ZM510.63 281.854V288.195H504.288V281.854H510.63ZM567.759 389.659V396H561.417V389.659H567.759ZM567.759 383.317V389.659H561.417V383.317H567.759ZM567.759 376.976V383.317H561.417V376.976H567.759ZM567.759 370.634V376.976H561.417V370.634H567.759ZM567.759 364.293V370.634H561.417V364.293H567.759ZM567.759 357.951V364.293H561.417V357.951H567.759ZM567.759 351.61V357.951H561.417V351.61H567.759ZM567.759 345.268V351.61H561.417V345.268H567.759ZM567.759 338.927V345.268H561.417V338.927H567.759ZM567.759 332.585V338.927H561.417V332.585H567.759ZM567.759 326.244V332.585H561.417V326.244H567.759ZM567.759 319.902V326.244H561.417V319.902H567.759ZM567.759 313.561V319.902H561.417V313.561H567.759ZM567.759 307.22V313.561H561.417V307.22H567.759ZM567.759 300.878V307.22H561.417V300.878H567.759ZM574.1 300.878V307.22H567.759V300.878H574.1ZM574.1 307.22V313.561H567.759V307.22H574.1ZM574.1 313.561V319.902H567.759V313.561H574.1ZM574.1 319.902V326.244H567.759V319.902H574.1ZM574.1 326.244V332.585H567.759V326.244H574.1ZM574.1 332.585V338.927H567.759V332.585H574.1ZM574.1 338.927V345.268H567.759V338.927H574.1ZM580.442 345.268V351.61H574.1V345.268H580.442ZM580.442 351.61V357.951H574.1V351.61H580.442ZM580.442 357.951V364.293H574.1V357.951H580.442ZM580.442 364.293V370.634H574.1V364.293H580.442ZM580.442 370.634V376.976H574.1V370.634H580.442ZM580.442 376.976V383.317H574.1V376.976H580.442ZM580.442 383.317V389.659H574.1V383.317H580.442ZM580.442 389.659V396H574.1V389.659H580.442ZM586.783 389.659V396H580.442V389.659H586.783ZM593.125 389.659V396H586.783V389.659H593.125ZM593.125 383.317V389.659H586.783V383.317H593.125ZM593.125 376.976V383.317H586.783V376.976H593.125ZM593.125 370.634V376.976H586.783V370.634H593.125ZM593.125 364.293V370.634H586.783V364.293H593.125ZM593.125 357.951V364.293H586.783V357.951H593.125ZM593.125 351.61V357.951H586.783V351.61H593.125ZM593.125 345.268V351.61H586.783V345.268H593.125ZM586.783 345.268V351.61H580.442V345.268H586.783ZM586.783 338.927V345.268H580.442V338.927H586.783ZM586.783 351.61V357.951H580.442V351.61H586.783ZM586.783 357.951V364.293H580.442V357.951H586.783ZM586.783 364.293V370.634H580.442V364.293H586.783ZM586.783 370.634V376.976H580.442V370.634H586.783ZM586.783 376.976V383.317H580.442V376.976H586.783ZM586.783 383.317V389.659H580.442V383.317H586.783ZM574.1 389.659V396H567.759V389.659H574.1ZM574.1 383.317V389.659H567.759V383.317H574.1ZM574.1 376.976V383.317H567.759V376.976H574.1ZM574.1 370.634V376.976H567.759V370.634H574.1ZM574.1 364.293V370.634H567.759V364.293H574.1ZM574.1 357.951V364.293H567.759V357.951H574.1ZM574.1 351.61V357.951H567.759V351.61H574.1ZM574.1 345.268V351.61H567.759V345.268H574.1ZM567.759 275.512V281.854H561.417V275.512H567.759ZM567.759 281.854V288.195H561.417V281.854H567.759ZM567.759 288.195V294.537H561.417V288.195H567.759ZM567.759 294.537V300.878H561.417V294.537H567.759ZM586.783 281.854V288.195H580.442V281.854H586.783ZM586.783 288.195V294.537H580.442V288.195H586.783ZM586.783 294.537V300.878H580.442V294.537H586.783ZM586.783 300.878V307.22H580.442V300.878H586.783ZM586.783 307.22V313.561H580.442V307.22H586.783ZM586.783 313.561V319.902H580.442V313.561H586.783ZM586.783 319.902V326.244H580.442V319.902H586.783ZM593.125 326.244V332.585H586.783V326.244H593.125ZM593.125 332.585V338.927H586.783V332.585H593.125ZM593.125 338.927V345.268H586.783V338.927H593.125ZM593.125 319.902V326.244H586.783V319.902H593.125ZM593.125 313.561V319.902H586.783V313.561H593.125ZM593.125 307.22V313.561H586.783V307.22H593.125ZM593.125 300.878V307.22H586.783V300.878H593.125ZM593.125 294.537V300.878H586.783V294.537H593.125ZM593.125 288.195V294.537H586.783V288.195H593.125ZM593.125 281.854V288.195H586.783V281.854H593.125ZM593.125 275.512V281.854H586.783V275.512H593.125ZM586.783 275.512V281.854H580.442V275.512H586.783ZM580.442 275.512V281.854H574.1V275.512H580.442ZM580.442 281.854V288.195H574.1V281.854H580.442ZM574.1 288.195V294.537H567.759V288.195H574.1ZM574.1 294.537V300.878H567.759V294.537H574.1ZM574.1 281.854V288.195H567.759V281.854H574.1ZM574.1 275.512V281.854H567.759V275.512H574.1ZM580.442 288.195V294.537H574.1V288.195H580.442ZM580.442 294.537V300.878H574.1V294.537H580.442ZM580.442 300.878V307.22H574.1V300.878H580.442ZM580.442 307.22V313.561H574.1V307.22H580.442ZM580.442 313.561V319.902H574.1V313.561H580.442ZM580.442 319.902V326.244H574.1V319.902H580.442ZM580.442 326.244V332.585H574.1V326.244H580.442ZM580.442 332.585V338.927H574.1V332.585H580.442ZM580.442 338.927V345.268H574.1V338.927H580.442ZM586.783 332.585V338.927H580.442V332.585H586.783ZM586.783 326.244V332.585H580.442V326.244H586.783ZM624.832 389.659V396H618.49V389.659H624.832ZM631.173 389.659V396H624.832V389.659H631.173ZM637.515 389.659V396H631.173V389.659H637.515ZM643.856 389.659V396H637.515V389.659H643.856ZM650.198 383.317V389.659H643.856V383.317H650.198ZM650.198 376.976V383.317H643.856V376.976H650.198ZM650.198 389.659V396H643.856V389.659H650.198ZM643.856 383.317V389.659H637.515V383.317H643.856ZM637.515 383.317V389.659H631.173V383.317H637.515ZM631.173 383.317V389.659H624.832V383.317H631.173ZM624.832 383.317V389.659H618.49V383.317H624.832ZM624.832 376.976V383.317H618.49V376.976H624.832ZM624.832 370.634V376.976H618.49V370.634H624.832ZM631.173 370.634V376.976H624.832V370.634H631.173ZM637.515 370.634V376.976H631.173V370.634H637.515ZM643.856 370.634V376.976H637.515V370.634H643.856ZM650.198 370.634V376.976H643.856V370.634H650.198ZM643.856 376.976V383.317H637.515V376.976H643.856ZM637.515 376.976V383.317H631.173V376.976H637.515ZM631.173 376.976V383.317H624.832V376.976H631.173ZM643.856 300.878V307.22H637.515V300.878H643.856ZM631.173 300.878V307.22H624.832V300.878H631.173ZM631.173 307.22V313.561H624.832V307.22H631.173ZM631.173 313.561V319.902H624.832V313.561H631.173ZM624.832 319.902V326.244H618.49V319.902H624.832ZM624.832 326.244V332.585H618.49V326.244H624.832ZM624.832 332.585V338.927H618.49V332.585H624.832ZM624.832 338.927V345.268H618.49V338.927H624.832ZM624.832 345.268V351.61H618.49V345.268H624.832ZM624.832 351.61V357.951H618.49V351.61H624.832ZM624.832 357.951V364.293H618.49V357.951H624.832ZM624.832 364.293V370.634H618.49V364.293H624.832ZM631.173 364.293V370.634H624.832V364.293H631.173ZM637.515 364.293V370.634H631.173V364.293H637.515ZM643.856 364.293V370.634H637.515V364.293H643.856ZM650.198 364.293V370.634H643.856V364.293H650.198ZM650.198 357.951V364.293H643.856V357.951H650.198ZM650.198 345.268V351.61H643.856V345.268H650.198ZM650.198 338.927V345.268H643.856V338.927H650.198ZM650.198 332.585V338.927H643.856V332.585H650.198ZM650.198 326.244V332.585H643.856V326.244H650.198ZM650.198 319.902V326.244H643.856V319.902H650.198ZM650.198 313.561V319.902H643.856V313.561H650.198ZM643.856 332.585V338.927H637.515V332.585H643.856ZM643.856 345.268V351.61H637.515V345.268H643.856ZM643.856 351.61V357.951H637.515V351.61H643.856ZM643.856 357.951V364.293H637.515V357.951H643.856ZM650.198 351.61V357.951H643.856V351.61H650.198ZM643.856 319.902V326.244H637.515V319.902H643.856ZM637.515 319.902V326.244H631.173V319.902H637.515ZM631.173 319.902V326.244H624.832V319.902H631.173ZM631.173 326.244V332.585H624.832V326.244H631.173ZM631.173 332.585V338.927H624.832V332.585H631.173ZM631.173 338.927V345.268H624.832V338.927H631.173ZM631.173 345.268V351.61H624.832V345.268H631.173ZM631.173 351.61V357.951H624.832V351.61H631.173ZM631.173 357.951V364.293H624.832V357.951H631.173ZM637.515 357.951V364.293H631.173V357.951H637.515ZM637.515 351.61V357.951H631.173V351.61H637.515ZM637.515 345.268V351.61H631.173V345.268H637.515ZM637.515 338.927V345.268H631.173V338.927H637.515ZM637.515 332.585V338.927H631.173V332.585H637.515ZM637.515 326.244V332.585H631.173V326.244H637.515ZM643.856 326.244V332.585H637.515V326.244H643.856ZM643.856 338.927V345.268H637.515V338.927H643.856ZM643.856 313.561V319.902H637.515V313.561H643.856ZM643.856 307.22V313.561H637.515V307.22H643.856ZM637.515 307.22V313.561H631.173V307.22H637.515ZM637.515 313.561V319.902H631.173V313.561H637.515ZM624.832 313.561V319.902H618.49V313.561H624.832ZM624.832 307.22V313.561H618.49V307.22H624.832ZM624.832 300.878V307.22H618.49V300.878H624.832ZM637.515 300.878V307.22H631.173V300.878H637.515ZM624.832 275.512V281.854H618.49V275.512H624.832ZM624.832 281.854V288.195H618.49V281.854H624.832ZM631.173 281.854V288.195H624.832V281.854H631.173ZM637.515 281.854V288.195H631.173V281.854H637.515ZM637.515 288.195V294.537H631.173V288.195H637.515ZM643.856 288.195V294.537H637.515V288.195H643.856ZM643.856 294.537V300.878H637.515V294.537H643.856ZM637.515 294.537V300.878H631.173V294.537H637.515ZM631.173 294.537V300.878H624.832V294.537H631.173ZM631.173 288.195V294.537H624.832V288.195H631.173ZM624.832 288.195V294.537H618.49V288.195H624.832ZM618.49 288.195V294.537H612.149V288.195H618.49ZM618.49 294.537V300.878H612.149V294.537H618.49ZM624.832 294.537V300.878H618.49V294.537H624.832ZM618.49 300.878V307.22H612.149V300.878H618.49ZM618.49 275.512V281.854H612.149V275.512H618.49ZM618.49 281.854V288.195H612.149V281.854H618.49ZM612.149 275.512V281.854H605.808V275.512H612.149ZM612.149 281.854V288.195H605.808V281.854H612.149ZM612.149 288.195V294.537H605.808V288.195H612.149ZM605.808 281.854V288.195H599.466V281.854H605.808ZM599.466 288.195V294.537H593.125V288.195H599.466ZM599.466 294.537V300.878H593.125V294.537H599.466ZM605.808 294.537V300.878H599.466V294.537H605.808ZM605.808 288.195V294.537H599.466V288.195H605.808ZM599.466 300.878V307.22H593.125V300.878H599.466ZM681.905 389.659V396H675.564V389.659H681.905ZM688.247 389.659V396H681.905V389.659H688.247ZM694.588 389.659V396H688.247V389.659H694.588ZM700.929 389.659V396H694.588V389.659H700.929ZM707.271 383.317V389.659H700.929V383.317H707.271ZM707.271 376.976V383.317H700.929V376.976H707.271ZM707.271 389.659V396H700.929V389.659H707.271ZM700.929 383.317V389.659H694.588V383.317H700.929ZM694.588 383.317V389.659H688.247V383.317H694.588ZM688.247 383.317V389.659H681.905V383.317H688.247ZM681.905 383.317V389.659H675.564V383.317H681.905ZM681.905 376.976V383.317H675.564V376.976H681.905ZM681.905 370.634V376.976H675.564V370.634H681.905ZM688.247 370.634V376.976H681.905V370.634H688.247ZM694.588 370.634V376.976H688.247V370.634H694.588ZM700.929 370.634V376.976H694.588V370.634H700.929ZM707.271 370.634V376.976H700.929V370.634H707.271ZM700.929 376.976V383.317H694.588V376.976H700.929ZM694.588 376.976V383.317H688.247V376.976H694.588ZM688.247 376.976V383.317H681.905V376.976H688.247ZM707.271 300.878V307.22H700.929V300.878H707.271ZM700.929 300.878V307.22H694.588V300.878H700.929ZM688.247 300.878V307.22H681.905V300.878H688.247ZM688.247 307.22V313.561H681.905V307.22H688.247ZM688.247 313.561V319.902H681.905V313.561H688.247ZM681.905 319.902V326.244H675.564V319.902H681.905ZM681.905 326.244V332.585H675.564V326.244H681.905ZM681.905 332.585V338.927H675.564V332.585H681.905ZM681.905 338.927V345.268H675.564V338.927H681.905ZM681.905 345.268V351.61H675.564V345.268H681.905ZM681.905 351.61V357.951H675.564V351.61H681.905ZM681.905 357.951V364.293H675.564V357.951H681.905ZM681.905 364.293V370.634H675.564V364.293H681.905ZM688.247 364.293V370.634H681.905V364.293H688.247ZM694.588 364.293V370.634H688.247V364.293H694.588ZM700.929 364.293V370.634H694.588V364.293H700.929ZM707.271 364.293V370.634H700.929V364.293H707.271ZM707.271 357.951V364.293H700.929V357.951H707.271ZM707.271 345.268V351.61H700.929V345.268H707.271ZM707.271 338.927V345.268H700.929V338.927H707.271ZM707.271 332.585V338.927H700.929V332.585H707.271ZM707.271 326.244V332.585H700.929V326.244H707.271ZM707.271 319.902V326.244H700.929V319.902H707.271ZM707.271 313.561V319.902H700.929V313.561H707.271ZM707.271 307.22V313.561H700.929V307.22H707.271ZM700.929 332.585V338.927H694.588V332.585H700.929ZM700.929 345.268V351.61H694.588V345.268H700.929ZM700.929 351.61V357.951H694.588V351.61H700.929ZM700.929 357.951V364.293H694.588V357.951H700.929ZM707.271 351.61V357.951H700.929V351.61H707.271ZM700.929 319.902V326.244H694.588V319.902H700.929ZM694.588 319.902V326.244H688.247V319.902H694.588ZM688.247 319.902V326.244H681.905V319.902H688.247ZM688.247 326.244V332.585H681.905V326.244H688.247ZM688.247 332.585V338.927H681.905V332.585H688.247ZM688.247 338.927V345.268H681.905V338.927H688.247ZM688.247 345.268V351.61H681.905V345.268H688.247ZM688.247 351.61V357.951H681.905V351.61H688.247ZM688.247 357.951V364.293H681.905V357.951H688.247ZM694.588 357.951V364.293H688.247V357.951H694.588ZM694.588 351.61V357.951H688.247V351.61H694.588ZM694.588 345.268V351.61H688.247V345.268H694.588ZM694.588 338.927V345.268H688.247V338.927H694.588ZM694.588 332.585V338.927H688.247V332.585H694.588ZM694.588 326.244V332.585H688.247V326.244H694.588ZM700.929 326.244V332.585H694.588V326.244H700.929ZM700.929 338.927V345.268H694.588V338.927H700.929ZM700.929 313.561V319.902H694.588V313.561H700.929ZM700.929 307.22V313.561H694.588V307.22H700.929ZM694.588 307.22V313.561H688.247V307.22H694.588ZM694.588 313.561V319.902H688.247V313.561H694.588ZM681.905 313.561V319.902H675.564V313.561H681.905ZM681.905 307.22V313.561H675.564V307.22H681.905ZM681.905 300.878V307.22H675.564V300.878H681.905ZM694.588 300.878V307.22H688.247V300.878H694.588ZM681.905 275.512V281.854H675.564V275.512H681.905ZM681.905 281.854V288.195H675.564V281.854H681.905ZM688.247 281.854V288.195H681.905V281.854H688.247ZM694.588 281.854V288.195H688.247V281.854H694.588ZM694.588 288.195V294.537H688.247V288.195H694.588ZM700.929 288.195V294.537H694.588V288.195H700.929ZM700.929 294.537V300.878H694.588V294.537H700.929ZM694.588 294.537V300.878H688.247V294.537H694.588ZM688.247 294.537V300.878H681.905V294.537H688.247ZM688.247 288.195V294.537H681.905V288.195H688.247ZM681.905 288.195V294.537H675.564V288.195H681.905ZM675.564 288.195V294.537H669.222V288.195H675.564ZM675.564 294.537V300.878H669.222V294.537H675.564ZM681.905 294.537V300.878H675.564V294.537H681.905ZM675.564 300.878V307.22H669.222V300.878H675.564ZM669.222 294.537V300.878H662.881V294.537H669.222ZM669.222 288.195V294.537H662.881V288.195H669.222ZM669.222 281.854V288.195H662.881V281.854H669.222ZM669.222 275.512V281.854H662.881V275.512H669.222ZM675.564 275.512V281.854H669.222V275.512H675.564ZM675.564 281.854V288.195H669.222V281.854H675.564ZM662.881 275.512V281.854H656.539V275.512H662.881ZM662.881 281.854V288.195H656.539V281.854H662.881ZM656.539 281.854V288.195H650.198V281.854H656.539ZM656.539 288.195V294.537H650.198V288.195H656.539ZM650.198 288.195V294.537H643.856V288.195H650.198ZM650.198 294.537V300.878H643.856V294.537H650.198ZM656.539 294.537V300.878H650.198V294.537H656.539ZM662.881 294.537V300.878H656.539V294.537H662.881ZM662.881 288.195V294.537H656.539V288.195H662.881ZM650.198 300.878V307.22H643.856V300.878H650.198ZM656.539 300.878V307.22H650.198V300.878H656.539ZM650.198 307.22V313.561H643.856V307.22H650.198ZM605.808 275.512V281.854H599.466V275.512H605.808ZM599.466 281.854V288.195H593.125V281.854H599.466ZM656.539 275.512V281.854H650.198V275.512H656.539ZM650.198 281.854V288.195H643.856V281.854H650.198ZM612.149 294.537V300.878H605.808V294.537H612.149ZM631.173 275.512V281.854H624.832V275.512H631.173ZM795.959 313.561V319.902H789.617V313.561H795.959ZM802.3 313.561V319.902H795.959V313.561H802.3ZM808.641 313.561V319.902H802.3V313.561H808.641ZM814.983 313.561V319.902H808.641V313.561H814.983ZM821.324 313.561V319.902H814.983V313.561H821.324ZM821.324 307.22V313.561H814.983V307.22H821.324ZM821.324 300.878V307.22H814.983V300.878H821.324ZM814.983 300.878V307.22H808.641V300.878H814.983ZM808.641 300.878V307.22H802.3V300.878H808.641ZM802.3 300.878V307.22H795.959V300.878H802.3ZM802.3 307.22V313.561H795.959V307.22H802.3ZM795.959 307.22V313.561H789.617V307.22H795.959ZM808.641 307.22V313.561H802.3V307.22H808.641ZM814.983 307.22V313.561H808.641V307.22H814.983ZM795.959 300.878V307.22H789.617V300.878H795.959ZM789.617 300.878V307.22H783.276V300.878H789.617ZM789.617 294.537V300.878H783.276V294.537H789.617ZM795.959 294.537V300.878H789.617V294.537H795.959ZM802.3 294.537V300.878H795.959V294.537H802.3ZM808.641 294.537V300.878H802.3V294.537H808.641ZM814.983 294.537V300.878H808.641V294.537H814.983ZM814.983 288.195V294.537H808.641V288.195H814.983ZM808.641 288.195V294.537H802.3V288.195H808.641ZM802.3 288.195V294.537H795.959V288.195H802.3ZM795.959 288.195V294.537H789.617V288.195H795.959ZM789.617 288.195V294.537H783.276V288.195H789.617ZM802.3 281.854V288.195H795.959V281.854H802.3ZM808.641 281.854V288.195H802.3V281.854H808.641ZM795.959 281.854V288.195H789.617V281.854H795.959ZM795.959 275.512V281.854H789.617V275.512H795.959ZM789.617 275.512V281.854H783.276V275.512H789.617ZM789.617 281.854V288.195H783.276V281.854H789.617ZM783.276 281.854V288.195H776.934V281.854H783.276ZM783.276 275.512V281.854H776.934V275.512H783.276ZM783.276 288.195V294.537H776.934V288.195H783.276ZM776.934 288.195V294.537H770.593V288.195H776.934ZM776.934 294.537V300.878H770.593V294.537H776.934ZM783.276 294.537V300.878H776.934V294.537H783.276ZM770.593 294.537V300.878H764.251V294.537H770.593ZM770.593 288.195V294.537H764.251V288.195H770.593ZM770.593 281.854V288.195H764.251V281.854H770.593ZM770.593 275.512V281.854H764.251V275.512H770.593ZM776.934 275.512V281.854H770.593V275.512H776.934ZM776.934 281.854V288.195H770.593V281.854H776.934ZM764.251 275.512V281.854H757.91V275.512H764.251ZM757.91 275.512V281.854H751.568V275.512H757.91ZM751.568 275.512V281.854H745.227V275.512H751.568ZM751.568 281.854V288.195H745.227V281.854H751.568ZM751.568 288.195V294.537H745.227V288.195H751.568ZM751.568 294.537V300.878H745.227V294.537H751.568ZM757.91 294.537V300.878H751.568V294.537H757.91ZM764.251 294.537V300.878H757.91V294.537H764.251ZM764.251 288.195V294.537H757.91V288.195H764.251ZM764.251 281.854V288.195H757.91V281.854H764.251ZM757.91 281.854V288.195H751.568V281.854H757.91ZM757.91 288.195V294.537H751.568V288.195H757.91ZM745.227 288.195V294.537H738.885V288.195H745.227ZM745.227 281.854V288.195H738.885V281.854H745.227ZM738.885 281.854V288.195H732.544V281.854H738.885ZM738.885 288.195V294.537H732.544V288.195H738.885ZM732.544 288.195V294.537H726.202V288.195H732.544ZM732.544 294.537V300.878H726.202V294.537H732.544ZM732.544 300.878V307.22H726.202V300.878H732.544ZM738.885 300.878V307.22H732.544V300.878H738.885ZM738.885 294.537V300.878H732.544V294.537H738.885ZM745.227 294.537V300.878H738.885V294.537H745.227ZM745.227 300.878V307.22H738.885V300.878H745.227ZM751.568 300.878V307.22H745.227V300.878H751.568ZM757.91 300.878V307.22H751.568V300.878H757.91ZM726.202 300.878V307.22H719.861V300.878H726.202ZM726.202 307.22V313.561H719.861V307.22H726.202ZM726.202 313.561V319.902H719.861V313.561H726.202ZM726.202 319.902V326.244H719.861V319.902H726.202ZM726.202 326.244V332.585H719.861V326.244H726.202ZM726.202 332.585V338.927H719.861V332.585H726.202ZM726.202 338.927V345.268H719.861V338.927H726.202ZM726.202 345.268V351.61H719.861V345.268H726.202ZM726.202 351.61V357.951H719.861V351.61H726.202ZM726.202 357.951V364.293H719.861V357.951H726.202ZM732.544 357.951V364.293H726.202V357.951H732.544ZM732.544 364.293V370.634H726.202V364.293H732.544ZM726.202 364.293V370.634H719.861V364.293H726.202ZM738.885 364.293V370.634H732.544V364.293H738.885ZM745.227 364.293V370.634H738.885V364.293H745.227ZM751.568 364.293V370.634H745.227V364.293H751.568ZM757.91 364.293V370.634H751.568V364.293H757.91ZM751.568 357.951V364.293H745.227V357.951H751.568ZM751.568 351.61V357.951H745.227V351.61H751.568ZM751.568 345.268V351.61H745.227V345.268H751.568ZM751.568 338.927V345.268H745.227V338.927H751.568ZM751.568 332.585V338.927H745.227V332.585H751.568ZM751.568 326.244V332.585H745.227V326.244H751.568ZM751.568 319.902V326.244H745.227V319.902H751.568ZM751.568 313.561V319.902H745.227V313.561H751.568ZM751.568 307.22V313.561H745.227V307.22H751.568ZM745.227 307.22V313.561H738.885V307.22H745.227ZM738.885 307.22V313.561H732.544V307.22H738.885ZM732.544 307.22V313.561H726.202V307.22H732.544ZM732.544 313.561V319.902H726.202V313.561H732.544ZM732.544 319.902V326.244H726.202V319.902H732.544ZM732.544 326.244V332.585H726.202V326.244H732.544ZM732.544 332.585V338.927H726.202V332.585H732.544ZM732.544 338.927V345.268H726.202V338.927H732.544ZM732.544 345.268V351.61H726.202V345.268H732.544ZM732.544 351.61V357.951H726.202V351.61H732.544ZM738.885 357.951V364.293H732.544V357.951H738.885ZM745.227 357.951V364.293H738.885V357.951H745.227ZM745.227 351.61V357.951H738.885V351.61H745.227ZM745.227 345.268V351.61H738.885V345.268H745.227ZM745.227 338.927V345.268H738.885V338.927H745.227ZM745.227 332.585V338.927H738.885V332.585H745.227ZM738.885 332.585V338.927H732.544V332.585H738.885ZM738.885 326.244V332.585H732.544V326.244H738.885ZM738.885 319.902V326.244H732.544V319.902H738.885ZM738.885 313.561V319.902H732.544V313.561H738.885ZM745.227 313.561V319.902H738.885V313.561H745.227ZM745.227 319.902V326.244H738.885V319.902H745.227ZM745.227 326.244V332.585H738.885V326.244H745.227ZM738.885 345.268V351.61H732.544V345.268H738.885ZM738.885 351.61V357.951H732.544V351.61H738.885ZM738.885 338.927V345.268H732.544V338.927H738.885ZM795.959 357.951V364.293H789.617V357.951H795.959ZM802.3 357.951V364.293H795.959V357.951H802.3ZM808.641 357.951V364.293H802.3V357.951H808.641ZM814.983 357.951V364.293H808.641V357.951H814.983ZM821.324 357.951V364.293H814.983V357.951H821.324ZM821.324 364.293V370.634H814.983V364.293H821.324ZM814.983 364.293V370.634H808.641V364.293H814.983ZM808.641 364.293V370.634H802.3V364.293H808.641ZM802.3 364.293V370.634H795.959V364.293H802.3ZM795.959 364.293V370.634H789.617V364.293H795.959ZM789.617 364.293V370.634H783.276V364.293H789.617ZM789.617 370.634V376.976H783.276V370.634H789.617ZM795.959 370.634V376.976H789.617V370.634H795.959ZM802.3 370.634V376.976H795.959V370.634H802.3ZM808.641 370.634V376.976H802.3V370.634H808.641ZM808.641 376.976V383.317H802.3V376.976H808.641ZM814.983 376.976V383.317H808.641V376.976H814.983ZM814.983 370.634V376.976H808.641V370.634H814.983ZM808.641 383.317V389.659H802.3V383.317H808.641ZM802.3 383.317V389.659H795.959V383.317H802.3ZM802.3 376.976V383.317H795.959V376.976H802.3ZM795.959 376.976V383.317H789.617V376.976H795.959ZM795.959 383.317V389.659H789.617V383.317H795.959ZM795.959 389.659V396H789.617V389.659H795.959ZM789.617 389.659V396H783.276V389.659H789.617ZM783.276 389.659V396H776.934V389.659H783.276ZM776.934 389.659V396H770.593V389.659H776.934ZM770.593 389.659V396H764.251V389.659H770.593ZM764.251 389.659V396H757.91V389.659H764.251ZM757.91 389.659V396H751.568V389.659H757.91ZM751.568 389.659V396H745.227V389.659H751.568ZM757.91 383.317V389.659H751.568V383.317H757.91ZM764.251 383.317V389.659H757.91V383.317H764.251ZM770.593 383.317V389.659H764.251V383.317H770.593ZM776.934 383.317V389.659H770.593V383.317H776.934ZM783.276 383.317V389.659H776.934V383.317H783.276ZM789.617 383.317V389.659H783.276V383.317H789.617ZM789.617 376.976V383.317H783.276V376.976H789.617ZM783.276 376.976V383.317H776.934V376.976H783.276ZM776.934 376.976V383.317H770.593V376.976H776.934ZM770.593 376.976V383.317H764.251V376.976H770.593ZM764.251 376.976V383.317H757.91V376.976H764.251ZM757.91 376.976V383.317H751.568V376.976H757.91ZM751.568 383.317V389.659H745.227V383.317H751.568ZM745.227 383.317V389.659H738.885V383.317H745.227ZM738.885 383.317V389.659H732.544V383.317H738.885ZM738.885 376.976V383.317H732.544V376.976H738.885ZM732.544 376.976V383.317H726.202V376.976H732.544ZM732.544 370.634V376.976H726.202V370.634H732.544ZM738.885 370.634V376.976H732.544V370.634H738.885ZM745.227 370.634V376.976H738.885V370.634H745.227ZM751.568 370.634V376.976H745.227V370.634H751.568ZM757.91 370.634V376.976H751.568V370.634H757.91ZM764.251 370.634V376.976H757.91V370.634H764.251ZM770.593 370.634V376.976H764.251V370.634H770.593ZM776.934 370.634V376.976H770.593V370.634H776.934ZM783.276 370.634V376.976H776.934V370.634H783.276ZM751.568 376.976V383.317H745.227V376.976H751.568ZM745.227 376.976V383.317H738.885V376.976H745.227ZM821.324 319.902V326.244H814.983V319.902H821.324ZM814.983 319.902V326.244H808.641V319.902H814.983ZM808.641 319.902V326.244H802.3V319.902H808.641ZM802.3 319.902V326.244H795.959V319.902H802.3ZM795.959 319.902V326.244H789.617V319.902H795.959ZM821.324 326.244V332.585H814.983V326.244H821.324ZM808.641 326.244V332.585H802.3V326.244H808.641ZM802.3 326.244V332.585H795.959V326.244H802.3ZM789.617 326.244V332.585H783.276V326.244H789.617ZM783.276 326.244V332.585H776.934V326.244H783.276ZM776.934 326.244V332.585H770.593V326.244H776.934ZM770.593 326.244V332.585H764.251V326.244H770.593ZM764.251 326.244V332.585H757.91V326.244H764.251ZM757.91 326.244V332.585H751.568V326.244H757.91ZM795.959 326.244V332.585H789.617V326.244H795.959ZM814.983 326.244V332.585H808.641V326.244H814.983ZM821.324 332.585V338.927H814.983V332.585H821.324ZM814.983 332.585V338.927H808.641V332.585H814.983ZM808.641 332.585V338.927H802.3V332.585H808.641ZM802.3 332.585V338.927H795.959V332.585H802.3ZM795.959 332.585V338.927H789.617V332.585H795.959ZM789.617 332.585V338.927H783.276V332.585H789.617ZM783.276 332.585V338.927H776.934V332.585H783.276ZM776.934 332.585V338.927H770.593V332.585H776.934ZM770.593 332.585V338.927H764.251V332.585H770.593ZM764.251 332.585V338.927H757.91V332.585H764.251ZM757.91 332.585V338.927H751.568V332.585H757.91ZM757.91 338.927V345.268H751.568V338.927H757.91ZM764.251 338.927V345.268H757.91V338.927H764.251ZM770.593 338.927V345.268H764.251V338.927H770.593ZM783.276 338.927V345.268H776.934V338.927H783.276ZM789.617 338.927V345.268H783.276V338.927H789.617ZM795.959 338.927V345.268H789.617V338.927H795.959ZM802.3 338.927V345.268H795.959V338.927H802.3ZM808.641 338.927V345.268H802.3V338.927H808.641ZM814.983 338.927V345.268H808.641V338.927H814.983ZM821.324 338.927V345.268H814.983V338.927H821.324ZM776.934 338.927V345.268H770.593V338.927H776.934ZM846.802 275.512V281.854H840.46V275.512H846.802ZM853.143 275.512V281.854H846.802V275.512H853.143ZM859.485 275.512V281.854H853.143V275.512H859.485ZM859.485 281.854V288.195H853.143V281.854H859.485ZM865.826 281.854V288.195H859.485V281.854H865.826ZM872.168 288.195V294.537H865.826V288.195H872.168ZM872.168 294.537V300.878H865.826V294.537H872.168ZM872.168 281.854V288.195H865.826V281.854H872.168ZM872.168 275.512V281.854H865.826V275.512H872.168ZM865.826 275.512V281.854H859.485V275.512H865.826ZM853.143 281.854V288.195H846.802V281.854H853.143ZM853.143 288.195V294.537H846.802V288.195H853.143ZM846.802 288.195V294.537H840.46V288.195H846.802ZM846.802 281.854V288.195H840.46V281.854H846.802ZM846.802 294.537V300.878H840.46V294.537H846.802ZM846.802 300.878V307.22H840.46V300.878H846.802ZM846.802 307.22V313.561H840.46V307.22H846.802ZM853.143 307.22V313.561H846.802V307.22H853.143ZM859.485 307.22V313.561H853.143V307.22H859.485ZM865.826 307.22V313.561H859.485V307.22H865.826ZM872.168 307.22V313.561H865.826V307.22H872.168ZM872.168 300.878V307.22H865.826V300.878H872.168ZM865.826 300.878V307.22H859.485V300.878H865.826ZM865.826 294.537V300.878H859.485V294.537H865.826ZM865.826 288.195V294.537H859.485V288.195H865.826ZM859.485 288.195V294.537H853.143V288.195H859.485ZM859.485 294.537V300.878H853.143V294.537H859.485ZM853.143 294.537V300.878H846.802V294.537H853.143ZM853.143 300.878V307.22H846.802V300.878H853.143ZM859.485 300.878V307.22H853.143V300.878H859.485ZM853.143 313.561V319.902H846.802V313.561H853.143ZM859.485 313.561V319.902H853.143V313.561H859.485ZM859.485 319.902V326.244H853.143V319.902H859.485ZM865.826 319.902V326.244H859.485V319.902H865.826ZM865.826 326.244V332.585H859.485V326.244H865.826ZM872.168 326.244V332.585H865.826V326.244H872.168ZM872.168 332.585V338.927H865.826V332.585H872.168ZM872.168 338.927V345.268H865.826V338.927H872.168ZM872.168 345.268V351.61H865.826V345.268H872.168ZM865.826 345.268V351.61H859.485V345.268H865.826ZM865.826 338.927V345.268H859.485V338.927H865.826ZM859.485 351.61V357.951H853.143V351.61H859.485ZM859.485 345.268V351.61H853.143V345.268H859.485ZM859.485 357.951V364.293H853.143V357.951H859.485ZM853.143 357.951V364.293H846.802V357.951H853.143ZM853.143 351.61V357.951H846.802V351.61H853.143ZM846.802 357.951V364.293H840.46V357.951H846.802ZM859.485 364.293V370.634H853.143V364.293H859.485ZM865.826 364.293V370.634H859.485V364.293H865.826ZM872.168 364.293V370.634H865.826V364.293H872.168ZM872.168 357.951V364.293H865.826V357.951H872.168ZM878.509 357.951V364.293H872.168V357.951H878.509ZM878.509 351.61V357.951H872.168V351.61H878.509ZM884.851 351.61V357.951H878.509V351.61H884.851ZM884.851 345.268V351.61H878.509V345.268H884.851ZM891.192 345.268V351.61H884.851V345.268H891.192ZM897.533 345.268V351.61H891.192V345.268H897.533ZM903.875 345.268V351.61H897.533V345.268H903.875ZM903.875 351.61V357.951H897.533V351.61H903.875ZM910.216 351.61V357.951H903.875V351.61H910.216ZM910.216 357.951V364.293H903.875V357.951H910.216ZM916.558 357.951V364.293H910.216V357.951H916.558ZM916.558 364.293V370.634H910.216V364.293H916.558ZM922.899 364.293V370.634H916.558V364.293H922.899ZM922.899 357.951V364.293H916.558V357.951H922.899ZM929.241 357.951V364.293H922.899V357.951H929.241ZM935.582 357.951V364.293H929.241V357.951H935.582ZM941.924 357.951V364.293H935.582V357.951H941.924ZM941.924 364.293V370.634H935.582V364.293H941.924ZM935.582 351.61V357.951H929.241V351.61H935.582ZM929.241 351.61V357.951H922.899V351.61H929.241ZM929.241 345.268V351.61H922.899V345.268H929.241ZM922.899 345.268V351.61H916.558V345.268H922.899ZM916.558 345.268V351.61H910.216V345.268H916.558ZM916.558 338.927V345.268H910.216V338.927H916.558ZM910.216 345.268V351.61H903.875V345.268H910.216ZM922.899 351.61V357.951H916.558V351.61H922.899ZM916.558 351.61V357.951H910.216V351.61H916.558ZM884.851 332.585V338.927H878.509V332.585H884.851ZM891.192 332.585V338.927H884.851V332.585H891.192ZM897.533 332.585V338.927H891.192V332.585H897.533ZM903.875 332.585V338.927H897.533V332.585H903.875ZM910.216 332.585V338.927H903.875V332.585H910.216ZM916.558 332.585V338.927H910.216V332.585H916.558ZM910.216 338.927V345.268H903.875V338.927H910.216ZM903.875 338.927V345.268H897.533V338.927H903.875ZM897.533 338.927V345.268H891.192V338.927H897.533ZM891.192 338.927V345.268H884.851V338.927H891.192ZM884.851 338.927V345.268H878.509V338.927H884.851ZM878.509 338.927V345.268H872.168V338.927H878.509ZM878.509 332.585V338.927H872.168V332.585H878.509ZM878.509 345.268V351.61H872.168V345.268H878.509ZM872.168 351.61V357.951H865.826V351.61H872.168ZM865.826 357.951V364.293H859.485V357.951H865.826ZM865.826 351.61V357.951H859.485V351.61H865.826ZM922.899 338.927V345.268H916.558V338.927H922.899ZM922.899 326.244V332.585H916.558V326.244H922.899ZM922.899 319.902V326.244H916.558V319.902H922.899ZM929.241 319.902V326.244H922.899V319.902H929.241ZM929.241 313.561V319.902H922.899V313.561H929.241ZM935.582 313.561V319.902H929.241V313.561H935.582ZM935.582 307.22V313.561H929.241V307.22H935.582ZM941.924 307.22V313.561H935.582V307.22H941.924ZM941.924 300.878V307.22H935.582V300.878H941.924ZM941.924 294.537V300.878H935.582V294.537H941.924ZM941.924 288.195V294.537H935.582V288.195H941.924ZM941.924 281.854V288.195H935.582V281.854H941.924ZM941.924 275.512V281.854H935.582V275.512H941.924ZM935.582 275.512V281.854H929.241V275.512H935.582ZM929.241 275.512V281.854H922.899V275.512H929.241ZM922.899 275.512V281.854H916.558V275.512H922.899ZM916.558 275.512V281.854H910.216V275.512H916.558ZM916.558 281.854V288.195H910.216V281.854H916.558ZM916.558 288.195V294.537H910.216V288.195H916.558ZM916.558 294.537V300.878H910.216V294.537H916.558ZM916.558 300.878V307.22H910.216V300.878H916.558ZM916.558 307.22V313.561H910.216V307.22H916.558ZM910.216 307.22V313.561H903.875V307.22H910.216ZM910.216 313.561V319.902H903.875V313.561H910.216ZM903.875 313.561V319.902H897.533V313.561H903.875ZM903.875 319.902V326.244H897.533V319.902H903.875ZM897.533 319.902V326.244H891.192V319.902H897.533ZM891.192 319.902V326.244H884.851V319.902H891.192ZM884.851 313.561V319.902H878.509V313.561H884.851ZM878.509 313.561V319.902H872.168V313.561H878.509ZM878.509 307.22V313.561H872.168V307.22H878.509ZM872.168 313.561V319.902H865.826V313.561H872.168ZM865.826 313.561V319.902H859.485V313.561H865.826ZM872.168 319.902V326.244H865.826V319.902H872.168ZM878.509 319.902V326.244H872.168V319.902H878.509ZM884.851 319.902V326.244H878.509V319.902H884.851ZM884.851 326.244V332.585H878.509V326.244H884.851ZM878.509 326.244V332.585H872.168V326.244H878.509ZM891.192 326.244V332.585H884.851V326.244H891.192ZM897.533 326.244V332.585H891.192V326.244H897.533ZM903.875 326.244V332.585H897.533V326.244H903.875ZM910.216 326.244V332.585H903.875V326.244H910.216ZM916.558 326.244V332.585H910.216V326.244H916.558ZM916.558 319.902V326.244H910.216V319.902H916.558ZM910.216 319.902V326.244H903.875V319.902H910.216ZM922.899 281.854V288.195H916.558V281.854H922.899ZM929.241 281.854V288.195H922.899V281.854H929.241ZM935.582 281.854V288.195H929.241V281.854H935.582ZM935.582 288.195V294.537H929.241V288.195H935.582ZM935.582 294.537V300.878H929.241V294.537H935.582ZM935.582 300.878V307.22H929.241V300.878H935.582ZM929.241 300.878V307.22H922.899V300.878H929.241ZM929.241 294.537V300.878H922.899V294.537H929.241ZM929.241 288.195V294.537H922.899V288.195H929.241ZM922.899 288.195V294.537H916.558V288.195H922.899ZM922.899 294.537V300.878H916.558V294.537H922.899ZM922.899 300.878V307.22H916.558V300.878H922.899ZM922.899 307.22V313.561H916.558V307.22H922.899ZM929.241 307.22V313.561H922.899V307.22H929.241ZM922.899 313.561V319.902H916.558V313.561H922.899ZM916.558 313.561V319.902H910.216V313.561H916.558ZM846.802 364.293V370.634H840.46V364.293H846.802ZM853.143 364.293V370.634H846.802V364.293H853.143ZM929.241 364.293V370.634H922.899V364.293H929.241ZM935.582 364.293V370.634H929.241V364.293H935.582ZM916.558 370.634V376.976H910.216V370.634H916.558ZM916.558 376.976V383.317H910.216V376.976H916.558ZM916.558 383.317V389.659H910.216V383.317H916.558ZM916.558 389.659V396H910.216V389.659H916.558ZM922.899 389.659V396H916.558V389.659H922.899ZM929.241 389.659V396H922.899V389.659H929.241ZM935.582 389.659V396H929.241V389.659H935.582ZM941.924 389.659V396H935.582V389.659H941.924ZM941.924 383.317V389.659H935.582V383.317H941.924ZM941.924 376.976V383.317H935.582V376.976H941.924ZM941.924 370.634V376.976H935.582V370.634H941.924ZM935.582 370.634V376.976H929.241V370.634H935.582ZM929.241 370.634V376.976H922.899V370.634H929.241ZM922.899 370.634V376.976H916.558V370.634H922.899ZM922.899 376.976V383.317H916.558V376.976H922.899ZM922.899 383.317V389.659H916.558V383.317H922.899ZM929.241 383.317V389.659H922.899V383.317H929.241ZM935.582 383.317V389.659H929.241V383.317H935.582ZM935.582 376.976V383.317H929.241V376.976H935.582ZM929.241 376.976V383.317H922.899V376.976H929.241ZM846.802 370.634V376.976H840.46V370.634H846.802ZM846.802 376.976V383.317H840.46V376.976H846.802ZM846.802 383.317V389.659H840.46V383.317H846.802ZM853.143 383.317V389.659H846.802V383.317H853.143ZM853.143 389.659V396H846.802V389.659H853.143ZM846.802 389.659V396H840.46V389.659H846.802ZM859.485 389.659V396H853.143V389.659H859.485ZM865.826 389.659V396H859.485V389.659H865.826ZM872.168 389.659V396H865.826V389.659H872.168ZM872.168 383.317V389.659H865.826V383.317H872.168ZM872.168 376.976V383.317H865.826V376.976H872.168ZM872.168 370.634V376.976H865.826V370.634H872.168ZM865.826 370.634V376.976H859.485V370.634H865.826ZM865.826 376.976V383.317H859.485V376.976H865.826ZM865.826 383.317V389.659H859.485V383.317H865.826ZM859.485 383.317V389.659H853.143V383.317H859.485ZM859.485 376.976V383.317H853.143V376.976H859.485ZM859.485 370.634V376.976H853.143V370.634H859.485ZM853.143 376.976V383.317H846.802V376.976H853.143ZM853.143 370.634V376.976H846.802V370.634H853.143Z" fill="#DE541E"/>
414
+ </g>
415
+ <defs>
416
+ <linearGradient id="paint0_linear_65_2" x1="169" y1="111.5" x2="233" y2="422" gradientUnits="userSpaceOnUse">
417
+ <stop offset="0.317308" stop-color="#DE541E"/>
418
+ <stop offset="1" stop-color="#282828"/>
419
+ </linearGradient>
420
+ <clipPath id="clip0_65_2">
421
+ <rect width="169" height="69" fill="white"/>
422
+ </clipPath>
423
+ </defs>
424
+ </svg>
425
+ </div>
426
+ <div class="spinner"></div>
427
+ <p>Preparing your download...</p>
428
+ </div>
429
+ <script>
430
+ const params = new URLSearchParams({{
431
+ id: "{id}",
432
+ episode: "{episode}",
433
+ dub: "{str(dub).lower()}",
434
+ quality: "{quality.value}"
435
+ }});
436
+ fetch(`/download-link?${{params}}`)
437
+ .then(resp => {{
438
+ if (!resp.ok) throw new Error("Failed to get download link");
439
+ return resp.json();
440
+ }})
441
+ .then(data => {{
442
+ if (data.download_url) {{
443
+ window.location.href = data.download_url;
444
+ }} else {{
445
+ document.body.innerHTML = "<p>Download link not found.</p>";
446
+ }}
447
+ }})
448
+ .catch(err => {{
449
+ console.error(err);
450
+ document.body.innerHTML = "<p>Error preparing download. Please try again.</p>";
451
+ }});
452
+ </script>
453
+ </body>
454
+ </html>
455
+ """
456
+ return HTMLResponse(content=html)
requirements.txt ADDED
@@ -0,0 +1,5 @@
 
 
 
 
 
 
1
+ fastapi
2
+ uvicorn[standard]
3
+ requests
4
+ beautifulsoup4
5
+ httpx