Datastar: Modern web dev, simplified
Panelists
What if there was a single 11-kilobyte framework that gave you everything HTMX and Alpine do, and more, with real-time updates, multiplayer collaboration out of the box, and performance so fast you're actually bottlenecked by the monitor's refresh rate? That's Datastar.
On this episode, I sit down with its creator Delaney Gillilan, core maintainer Ben Croker, and Datastar convert Chris May to explore how this backend-driven, server-sent-events-first framework is changing the way full-stack developers think about the modern web.
Episode Deep Dive
Guests Introduction and Background
Delaney Gillilan is the creator of Datastar. He comes from a non-traditional web development background, having worked in the circus, as a 3D artist, and then as an engineer building video games, slot machines, and military applications. He specializes in highly optimized, performance-critical systems and describes himself as "a C guy that knows some other things." His work on military applications that required extremely fast browser updates led him down the path that eventually became Datastar. He initially built a binary WebSocket-based framework before throwing it away after discovering the hypermedia approach was actually faster when measured properly.
Ben Croker is a core maintainer of Datastar. Based between Costa Rica and Europe, Ben has over 20 years of experience primarily in PHP development, though his commit history now shows he writes more Go than PHP. He was an early contributor to HTMX before joining the Datastar project and brings a strong backend-first philosophy to the team. Ben authored the Datastar guide, maintains the VS Code and JetBrains IDE extensions, and wrote the "Tau of Datastar" philosophy page in the docs.
Chris May is a Python developer and Datastar convert. He has been building websites since 1995 and picked up Python about 10 years later. Chris is a technical coach who discovered Datastar through the HTMX podcast and became an advocate after trying it. He uses Datastar with Django and Python in production, including real-time status dashboards at his workplace. His article about switching from HTMX to Datastar was the catalyst for this episode.
What to Know If You're New to Python
If you are newer to Python web development, here are a few things that will help you get the most from this episode:
- Server-side web frameworks like Django, FastAPI, and Flask generate HTML on the server and send it to the browser. This episode focuses on how Datastar enhances that server-driven model rather than replacing it with a JavaScript SPA.
- Server-Sent Events (SSE) are a browser-native technology that lets the server push updates to the client over a long-lived HTTP connection. Understanding that this is simpler than WebSockets (and built into the browser) is key to grasping Datastar's approach.
- Reactive signals are a concept from frontend development where changing a value automatically updates everything that depends on it, similar to how a formula cell in a spreadsheet recalculates when its inputs change.
- Hypermedia means the server sends HTML (not JSON) as responses, and the browser renders it directly. This is the foundational architecture of the web, and both HTMX and Datastar build on this idea.
Key Points and Takeaways
1. Datastar is a backend-driven hypermedia framework that replaces SPAs in 11 KB
Datastar is a lightweight, open-source hypermedia framework that fits in a single 11 KB JavaScript file. Unlike traditional single-page application (SPA) frameworks like React or Vue, Datastar puts the backend in charge of generating HTML and streaming it to the browser. It uses HTML data attributes (prefixed with data-*) to wire up interactivity declaratively, meaning most developers never need to write JavaScript. The framework is backend-agnostic and has official SDKs for Python, Go, PHP, TypeScript, Ruby, and more. Ben Croker describes it as giving you "everything you need and nothing you don't."
- data-star.dev -- Datastar homepage
- github.com/starfederation/datastar -- Datastar GitHub repository
2. Server-Sent Events (SSE) are the foundation of Datastar's real-time architecture
Datastar uses server-sent events as its primary transport mechanism rather than traditional request/response cycles or WebSockets. SSE is a long-established browser technology that works over plain HTTP (1, 2, and 3) with no complicated handshake. The server holds a connection open and streams events down to the browser as they happen. This push-based model eliminates the latency inherent in polling, halves the round-trip time compared to request/response patterns, and benefits from built-in browser compression that can achieve 40x reduction in data transfer. Delaney noted that SSE has had "a renaissance in recent years" thanks to LLM chatbots streaming their responses.
3. Datastar fills the gap that HTMX plus Alpine.js cannot
A major theme of the episode was the limitation of pairing HTMX with Alpine.js. Michael described HTMX as "really good as salt or seasoning -- something you sprinkle on to really make a website better. But if you try to make a meal out of salt, you're not going to want to eat it." HTMX handles about 90% of what developers need, but the remaining 10% typically requires pulling in Alpine.js or vanilla JavaScript for client-side interactivity. Datastar unifies both capabilities -- DOM patching and reactive client-side state -- into a single cohesive framework that is actually smaller than HTMX and Alpine combined.
- htmx.org -- HTMX homepage
- alpinejs.dev -- Alpine.js homepage
4. Morphing instead of swapping preserves page state during updates
Datastar uses a morphing strategy rather than the straight DOM swap approach used by HTMX. When the server sends new HTML, Datastar compares the incoming DOM against the existing DOM and only changes what is different. This preserves important UI state like input focus, scroll position, and form values even when the entire page is re-rendered from the server. This means developers can take a simpler mental model: just send the full page from the backend, and Datastar handles the diffing. Delaney compared it to "having the VDOM in the backend" without actually using a virtual DOM.
5. Out-of-band updates are the default, enabling multi-region page updates
In HTMX, out-of-band swaps (updating multiple parts of the page from a single response) are a special feature. In Datastar, this is the default behavior. The server can send back multiple HTML fragments with different IDs (or any CSS selector), and Datastar will morph each one into the corresponding element on the page. Combined with SSE streaming, a single server response can update a sidebar, a header notification, and a content area all at once. This design makes Datastar naturally suited for dashboards, status screens, and any page where multiple regions need to stay in sync.
6. Reactive signals bring client-side interactivity without a separate library
Datastar includes a built-in reactive signals system that handles client-side state and data binding. Signals are like spreadsheet formulas: you define a relationship between values, and when one changes, everything that depends on it updates automatically. Delaney explained that "a signal is instead of saying I'm setting a variable, you're saying I'm setting a relationship." The server can both read signals from the frontend (to know the current UI state) and push new signal values down to the client. Datastar uses the alien-signals library under the hood, which the team says is the fastest reactive signals implementation available.
- github.com/stackblitz/alien-signals -- Alien signals library used by Datastar
7. The Python SDK supports Django, FastAPI, Litestar, Quart, Sanic, and more
The Datastar Python SDK (datastar-py) provides framework-specific integrations for Django, FastAPI, FastHTML, Litestar, Quart, Sanic, and Starlette. The SDK is intentionally simple, essentially implementing three core functions: reading signals from the frontend, patching HTML elements, and patching signals. Chris walked through a Quart example where a @datastar_response decorator sets up the SSE headers, read_signals() pulls in frontend state, and sse.patch_elements() streams HTML fragments back to the browser. The SDK was built by community contributor "Gazpacho King" (Chase) along with other contributors.
- pypi.org/project/datastar-py -- Datastar Python SDK on PyPI
8. Real-time multiplayer is built in, not bolted on
One of Datastar's standout capabilities is that real-time collaborative (multiplayer) functionality comes out of the box. Ben demonstrated a TodoMVC example open in two browser tabs where changes in one tab appeared instantly in the other -- and crucially, this was not using optimistic updates. Every change went to the server first, and the server simultaneously pushed the update to all connected clients. The team also demonstrated a multiplayer Game of Life and a billion-checkbox demo, both running on a $5 VPS that survived the top of Hacker News without going down.
9. Datastar actively avoids optimistic updates, and that is a feature
Optimistic updates -- where the UI changes immediately before the server confirms -- are a common pattern in SPA development. Datastar's team argues against this approach. Delaney was blunt: "People will actively lie to users in the SPA world... The reason why people do it is because it's convenient, not because it's correct." Instead, Datastar provides built-in indicators (spinners, grayed-out fields) to show users that an action is in progress. Because Datastar's round-trip performance is so fast, the perceived delay is negligible, and the UI always reflects the true server state. This eliminates entire categories of bugs around state synchronization.
10. Plugin-based architecture inspired by game engine design
Delaney built Datastar like a game engine: a tiny core (roughly 300 lines) that handles registering plugins and setting up data-star elements, with everything else implemented as plugins. This architecture means any piece can be swapped out if someone builds something better. The team maintains a bundler on the Datastar website where users can select only the plugins they need, though the full bundle is only about 11 KB. This game-engine-inspired modularity is what allows Datastar to be smaller than HTMX alone while doing more.
11. Stario is a Python meta-framework built on Datastar and Starlette
Delaney mentioned Stario as a Python-specific way to work with Datastar. Stario combines Datastar with Starlette (the ASGI framework that also powers FastAPI) and bundles good defaults and best practices for building real-time hypermedia applications in Python. It launched its V2 recently and provides a more "Pythonic" development experience for those who want a batteries-included approach to building Datastar-powered apps.
- stario.dev -- Stario Python framework homepage
- github.com/Bobowski/stario -- Stario GitHub repository
12. Star Federation is a nonprofit backing Datastar's sustainability
Rather than pursuing venture capital, the Datastar team founded Star Federation, a 501(c)(3) nonprofit organization in the US. The nonprofit funds the project through Datastar Pro, a collection of additional plugins, an inspector tool, and access to Rocket (a web component layer) and Stellar CSS. Importantly, the core Datastar framework remains fully open source and free. The Pro revenue covers running costs, podcasting software, and potential conference travel -- not developer salaries. Ben and Delaney both maintain Datastar alongside their full-time work.
- data-star.dev/star_federation -- About Star Federation
- data-star.dev/datastar_pro -- Datastar Pro
13. LLMs and AI coding tools struggle with Datastar due to overfitting on SPA code
Delaney discussed how current LLMs (Claude, Codex, etc.) are heavily overfitted to React and SPA patterns. Research at a college in Oslo found that even when the entire Datastar codebase fits in any LLM's context window, the models still fall back to SPA habits. The team provides a /docs page that can be fed into an LLM context, but Delaney's advice was honest: if you want to vibe code something quickly, use React because that is what the models are trained on. If you want to build something fast, efficient, and correct, learn Datastar properly through Ben's guide first. Ben's getting-started guide takes about 15-20 minutes to read and an hour to work through.
- data-star.dev/guide/getting_started -- Datastar Getting Started Guide
14. No npm, no package.json, no JavaScript build pipeline required
Datastar deliberately avoids the JavaScript ecosystem's package management. There is no npm package, no package.json, and no node_modules. The framework is distributed as a single file via CDN or the website's custom bundler. Internally, the team uses Go tooling with esbuild embedded directly, bypassing the need for npm entirely. Delaney quipped that "it's funny to have a JavaScript framework that actively hates the JavaScript ecosystem." This also means no Webpack, no Vite configuration, and no tree-shaking setup for end users.
15. Version 1.0 stable is imminent, and it is intended to be the last major version
Datastar is currently at release candidate (RC) status, with the pace of bug fix releases slowing down, which the team sees as a positive sign. Ben explained that they are taking their time to get defaults right because they intend V1 to be the final major version, with no breaking changes going forward. They drew inspiration from Python and Go's approach to backward compatibility, contrasting it with the JavaScript ecosystem's frequent breaking changes. The switch from RC to stable is primarily about locking down defaults, not adding features. Ben expects V1 stable in the first half of 2025.
16. IDE support for VS Code, JetBrains, and AI-powered editors
The Datastar team maintains official editor extensions for VS Code and all JetBrains IDEs (PyCharm, WebStorm, etc.) through the JetBrains marketplace. The extensions provide autocomplete for all data-star attributes, reducing typos and helping developers discover available features. The extensions are also available on the OpenVSX registry, which serves AI-powered code editors like Cursor, Windsurf, and others that were removed from the VS Code marketplace.
Interesting Quotes and Stories
"The fastest JavaScript you can write is no JavaScript. So we really lean into what the browser can already do." -- Delaney Gillilan
"Datastar gives you everything you need and nothing you don't." -- Ben Croker
"People will actively lie to users in the SPA world and they'll do optimistic updates... The reason why people do it is because it's convenient, not because it's correct." -- Delaney Gillilan
"It feels like cheating in a weird way. It's hard to explain. It really, it's a weird, like, I don't know what we all were doing. I was part of the problem." -- Delaney Gillilan
"It's boring. And that's, it's so exciting. It's so amazing. And yet it's using all these boring technologies." -- Chris May
"We don't even use npm or any of that at all. It's funny to have a JavaScript framework that actively hates the JavaScript ecosystem." -- Delaney Gillilan
"Datastar is a journey of unlearning old and bad patterns, deeply rooted ones in what I think web development is." -- Ben Croker
"If you could do it the Datastar way, whether you're using React or HTMX or any other approach, it will be less code. It'll be faster. It'll be cheaper. And it'll be simpler to understand. I will take on anybody anywhere on that." -- Delaney Gillilan
"Circuses are very well-run logistic machines compared to most developer situations." -- Delaney Gillilan, on people calling things "a circus"
"Your Python app will be faster than most people's compiled, low-level language thing because you're getting orders of magnitude in the algorithms and how we're doing stuff under the hood." -- Delaney Gillilan
Key Definitions and Terms
Hypermedia: Hypertext combined with other media like images and CSS. It is the foundational architecture of the web -- the H in HTTP and HTML. Hypermedia frameworks like Datastar send HTML (not JSON) from the server to the browser.
Server-Sent Events (SSE): A browser-native technology where the server holds an HTTP connection open and streams text-based events down to the client. Unlike WebSockets, SSE is unidirectional (server to client) and works over standard HTTP.
Signals: Reactive data bindings that establish relationships between values. When a signal's value changes, anything that depends on it automatically updates. Similar to formulas in a spreadsheet. In Datastar, signals handle the client-side interactivity that Alpine.js would typically cover.
Morphing: A DOM update strategy where incoming HTML is compared against the existing page and only the differences are applied. This preserves UI state (focus, scroll position, form inputs) unlike a full DOM swap.
Out-of-band updates: Updating multiple parts of a page from a single server response. In HTMX this is a special feature; in Datastar it is the default behavior.
Optimistic updates: A UI pattern where the interface changes immediately before the server confirms the action, then rolls back if the server rejects it. Datastar's team discourages this pattern in favor of showing true server state.
Plugin architecture: Datastar's core is only about 300 lines of code. All functionality (DOM patching, signals, event handling) is implemented as plugins that can be added or removed independently.
Tau of Datastar: The philosophy document written by Ben Croker that explains the "way" of building with Datastar. The core principle: use as little Datastar as possible and leverage the browser's native capabilities.
Learning Resources
Here are resources to learn more and go deeper on the topics covered in this episode:
- data-star.dev/guide/getting_started -- The official Datastar getting started guide, written by Ben Croker. Takes about 15-20 minutes to read and an hour to work through the examples.
- pypi.org/project/datastar-py -- The Datastar Python SDK with support for Django, FastAPI, Litestar, Quart, Sanic, Starlette, and more.
- stario.dev -- Stario, a Python meta-framework combining Datastar with Starlette for a batteries-included experience.
- training.talkpython.fm/courses/htmx-django-modern-python-web-apps-hold-the-javascript?utm_source=talkpythondeepdive -- HTMX + Django course on Talk Python Training. While this course covers HTMX rather than Datastar, it teaches the hypermedia-driven approach that Datastar builds upon.
- training.talkpython.fm/courses/python-for-absolute-beginners-course?utm_source=talkpythondeepdive -- Python for Absolute Beginners on Talk Python Training. If you are new to Python and want to get started before diving into web frameworks, this is the place to begin.
Overall Takeaway
Datastar represents a genuine paradigm shift in how developers can think about building web applications. Rather than splitting your brain between a complex JavaScript frontend and a backend that merely serves JSON, Datastar lets Python developers do what they do best: write server-side logic that generates HTML. The framework's use of server-sent events, reactive signals, and intelligent DOM morphing means you get real-time, multiplayer-capable web apps without touching npm, configuring a build pipeline, or learning React. At 11 KB, it is smaller than most individual React components. The passion of this team -- a former circus performer turned game developer, a PHP veteran who now writes Go, and a Python coach who converted after years of HTMX -- is infectious. Whether you are building a simple CRUD app or a real-time collaborative dashboard, Datastar's message is clear: the browser is already an incredibly powerful platform, and maybe we have been overcomplicating things for a very long time.
Links from the show
Delaney Gillilan: linkedin.com
Ben Croker: x.com
Chris May: everydaysuperpowers.dev
Datastar: data-star.dev
HTMX: htmx.org
AlpineJS: alpinejs.dev
Core Attribute Tour: data-star.dev
data-star.dev/examples: data-star.dev
github.com/starfederation/datastar-python: github.com
VSCode: marketplace.visualstudio.com
OpenVSX: open-vsx.org
PyCharm/Intellij plugin: plugins.jetbrains.com
data-star.dev/datastar_pro: data-star.dev
gg: discord.gg
HTML-ivating your Django web app's experience with HTMX, AlpineJS, and streaming HTML - Chris May: www.youtube.com
Senior Engineer tries Vibe Coding: www.youtube.com
1 Billion Checkboxes: checkboxes.andersmurphy.com
Game of life example: example.andersmurphy.com
Watch this episode on YouTube: youtube.com
Episode #537 deep-dive: talkpython.fm/537
Episode transcripts: talkpython.fm
Theme Song: Developer Rap
🥁 Served in a Flask 🎸: talkpython.fm/flasksong
---== Don't be a stranger ==---
YouTube: youtube.com/@talkpython
Bluesky: @talkpython.fm
Mastodon: @talkpython@fosstodon.org
X.com: @talkpython
Michael on Bluesky: @mkennedy.codes
Michael on Mastodon: @mkennedy@fosstodon.org
Michael on X.com: @mkennedy
Episode Transcript
Collapse transcript
00:00
00:05
00:11
00:16
00:20
00:26
00:31
00:37
00:38
00:43
00:50
00:55
01:19
01:24
01:26
01:30
01:32
01:35
01:38
01:42
01:45
01:46
01:50
01:54
01:59
02:01
02:02
02:04
02:08
02:13
02:15
02:18
02:23
02:27
02:30
02:31
02:32
02:33
02:34
02:42
02:45
02:47
02:52
02:54
02:55
02:55
02:57
03:02
03:07
03:08
03:10
03:14
03:26
03:37
03:44
03:50
03:53
03:58
04:04
04:11
04:14
04:20
04:24
04:27
04:33
04:34
04:36
04:38
04:39
04:42
04:45
04:48
04:50
04:50
04:52
04:52
04:54
04:55
04:55
05:02
05:07
05:10
05:12
05:14
05:14
05:25
05:30
05:32
05:36
05:40
05:46
05:50
05:54
05:55
05:56
05:57
06:00
06:05
06:10
06:18
06:24
06:30
06:37
06:42
06:47
06:52
06:57
07:03
07:09
07:13
07:17
07:21
07:26
07:31
07:37
07:41
07:45
07:49
07:53
07:58
08:02
08:07
08:11
08:16
08:22
08:27
08:33
08:37
08:42
08:46
08:51
08:53
08:54
08:59
08:59
09:00
09:03
09:03
09:06
09:09
09:14
09:17
09:20
09:23
09:25
09:28
09:32
09:34
09:37
09:40
09:41
09:43
09:45
09:49
09:52
09:57
09:58
10:02
10:05
10:09
10:16
10:22
10:34
10:39
10:45
10:47
10:49
10:54
10:58
11:02
11:06
11:08
11:12
11:19
11:21
11:27
11:33
11:36
11:39
11:46
11:50
11:56
12:02
12:09
12:13
12:15
12:20
12:24
12:28
12:35
12:38
12:41
12:47
12:51
12:56
12:59
13:03
13:05
13:08
13:13
13:16
13:20
13:24
13:26
13:28
13:33
13:37
13:41
13:45
13:47
13:51
13:53
13:55
14:01
14:01
14:06
14:07
14:12
14:15
14:17
14:17
14:18
14:21
14:23
14:34
14:36
14:47
14:52
14:59
15:00
15:03
15:08
15:12
15:16
15:19
15:21
15:25
15:30
15:32
15:36
15:39
15:44
15:48
15:51
15:56
15:59
16:03
16:04
16:05
16:07
16:10
16:14
16:15
16:19
16:22
16:27
16:32
16:37
16:41
16:43
16:47
16:55
17:01
17:06
17:12
17:19
17:26
17:29
17:29
17:33
17:35
17:42
17:45
17:53
17:56
18:00
18:03
18:05
18:06
18:11
18:17
18:26
18:34
18:42
18:46
18:51
18:57
19:02
19:07
19:09
19:13
19:16
19:18
19:22
19:24
19:29
19:32
19:35
19:38
19:41
19:45
19:48
19:49
19:52
19:56
19:59
20:02
20:03
20:06
20:10
20:13
20:14
20:15
20:18
20:22
20:23
20:26
20:28
20:30
20:35
20:36
20:38
20:42
20:53
20:57
21:04
21:06
21:11
21:14
21:17
21:26
21:29
21:32
21:33
21:34
21:41
21:46
21:50
21:51
21:57
22:02
22:03
22:08
22:10
22:12
22:16
22:22
22:29
22:33
22:43
22:50
22:53
22:53
22:54
22:56
22:57
22:57
23:00
23:01
23:05
23:06
23:08
23:16
23:20
23:20
23:21
23:22
23:24
23:28
23:30
23:34
23:39
23:41
23:44
23:50
23:57
23:58
24:00
24:05
24:08
24:13
24:15
24:21
24:22
24:28
24:32
24:33
24:35
24:39
24:43
24:50
24:54
24:56
24:59
25:01
25:04
25:07
25:10
25:11
25:13
25:16
25:23
25:27
25:33
25:35
25:40
25:43
25:46
25:48
25:52
25:56
25:59
26:03
26:06
26:14
26:20
26:25
26:28
26:33
26:38
26:42
26:44
26:46
26:49
26:51
26:53
26:54
26:56
26:58
27:01
27:03
27:08
27:10
27:14
27:19
27:23
27:29
27:34
27:37
27:44
27:48
27:54
28:01
28:07
28:13
28:18
28:24
28:30
28:34
28:39
28:45
28:52
28:58
29:04
29:08
29:11
29:14
29:18
29:19
29:22
29:24
29:26
29:30
29:33
29:36
29:40
29:43
29:45
29:46
29:54
29:57
29:57
30:00
30:03
30:09
30:13
30:18
30:23
30:30
30:36
30:40
30:47
30:52
30:57
30:59
31:01
31:05
31:09
31:13
31:15
31:20
31:23
31:26
31:28
31:30
31:32
31:35
31:38
31:41
31:44
31:48
31:51
31:52
31:55
31:59
32:02
32:05
32:06
32:11
32:14
32:18
32:21
32:23
32:27
32:35
32:39
32:42
32:46
32:49
32:51
32:53
32:58
33:02
33:03
33:05
33:09
33:12
33:14
33:16
33:20
33:28
33:33
33:33
33:39
33:44
33:46
33:47
33:49
33:49
33:51
33:52
33:53
33:54
33:57
33:58
34:03
34:03
34:09
34:12
34:15
34:19
34:24
34:28
34:32
34:37
34:41
34:46
34:51
34:55
35:01
35:07
35:13
35:19
35:24
35:31
35:35
35:40
35:44
35:50
35:54
35:59
36:03
36:10
36:12
36:14
36:16
36:19
36:22
36:29
36:36
36:38
36:43
36:44
36:47
36:51
36:53
36:58
37:01
37:02
37:04
37:05
37:09
37:10
37:15
37:22
37:27
37:31
37:35
37:40
37:46
37:51
37:57
38:00
38:03
38:04
38:10
38:15
38:19
38:21
38:27
38:29
38:33
38:35
38:38
38:43
38:47
38:50
38:52
38:54
38:58
38:59
39:02
39:05
39:10
39:14
39:15
39:19
39:23
39:25
39:35
39:37
39:38
39:38
39:39
39:42
39:43
39:43
39:45
39:46
39:48
39:50
39:54
39:58
40:00
40:01
40:02
40:04
40:06
40:09
40:14
40:17
40:21
40:26
40:29
40:32
40:36
40:37
40:40
40:44
40:49
40:52
40:54
40:55
40:57
41:00
41:01
41:03
41:06
41:09
41:10
41:12
41:15
41:18
41:19
41:25
41:32
41:36
41:42
41:51
41:52
41:53
41:57
42:03
42:06
42:07
42:12
42:15
42:20
42:21
42:25
42:29
42:30
42:33
42:35
42:37
42:41
42:43
42:48
42:50
42:53
42:55
43:02
43:04
43:08
43:10
43:11
43:13
43:14
43:15
43:16
43:18
43:18
43:20
43:24
43:26
43:29
43:34
43:37
43:43
43:44
43:47
43:49
43:53
43:57
44:00
44:04
44:07
44:13
44:16
44:22
44:24
44:28
44:33
44:37
44:41
44:45
44:51
44:55
44:57
45:00
45:04
45:07
45:13
45:19
45:23
45:29
45:33
45:38
45:39
45:43
45:45
45:46
45:49
45:50
45:52
45:54
45:56
45:59
46:01
46:07
46:09
46:14
46:17
46:20
46:22
46:31
46:33
46:39
46:42
46:45
46:49
46:51
46:52
46:54
46:58
47:05
47:06
47:09
47:10
47:14
47:18
47:20
47:23
47:26
47:27
47:31
47:36
47:41
47:45
47:50
47:55
47:59
48:00
48:03
48:05
48:06
48:13
48:15
48:16
48:17
48:21
48:23
48:23
48:24
48:27
48:28
48:32
48:33
48:36
48:41
48:43
48:48
48:51
48:58
49:05
49:09
49:10
49:19
49:23
49:30
49:34
49:38
49:42
49:44
49:48
49:51
49:55
50:03
50:10
50:11
50:14
50:23
50:30
50:34
50:36
50:41
50:46
50:51
50:56
51:00
51:03
51:08
51:14
51:19
51:24
51:29
51:31
51:35
51:38
51:41
51:44
51:48
51:51
51:52
51:53
51:54
51:55
51:55
51:56
51:57
51:57
51:59
52:03
52:08
52:10
52:16
52:16
52:22
52:24
52:25
52:27
52:34
52:35
52:38
52:39
52:40
52:42
52:54
52:56
53:03
53:10
53:16
53:21
53:25
53:26
53:35
53:39
53:41
53:45
53:47
53:51
53:56
54:01
54:07
54:11
54:12
54:13
54:14
54:15
54:16
54:17
54:18
54:21
54:27
54:31
54:32
54:33
54:38
54:43
54:43
54:45
54:45
54:48
54:48
54:51
54:56
55:00
55:04
55:04
55:08
55:10
55:12
55:13
55:17
55:19
55:20
55:21
55:25
55:28
55:32
55:33
55:34
55:36
55:37
55:40
55:44
55:46
55:47
55:52
55:56
55:59
56:00
56:06
56:12
56:16
56:19
56:25
56:25
56:28
56:29
56:37
56:41
56:50
56:51
56:53
56:54
56:56
56:57
56:58
57:01
57:07
57:11
57:13
57:14
57:20
57:23
57:26
57:29
57:31
57:33
57:33
57:34
57:38
57:42
57:45
57:46
57:48
57:50
57:52
57:55
57:58
58:05
58:08
58:13
58:22
58:28
58:33
58:38
58:43
58:49
58:51
58:54
58:59
59:03
59:05
59:08
59:15
59:19
59:21
59:22
59:26
59:28
59:29
59:34
59:39
59:41
59:46
59:47
59:52
59:54
59:55
59:58
01:00:03
01:00:05
01:00:06
01:00:10
01:00:13
01:00:15
01:00:20
01:00:22
01:00:24
01:00:25
01:00:29
01:00:32
01:00:35
01:00:37
01:00:42
01:00:45
01:00:49
01:00:51
01:00:52
01:00:59
01:01:02
01:01:04
01:01:06
01:01:08
01:01:14
01:01:23
01:01:30
01:01:36
01:01:39
01:01:41
01:01:45
01:01:47
01:01:48
01:01:48
01:01:49
01:01:53
01:01:55
01:01:59
01:02:02
01:02:03
01:02:07
01:02:09
01:02:14
01:02:17
01:02:17
01:02:18
01:02:25
01:02:25
01:02:27
01:02:29
01:02:30
01:02:33
01:02:36
01:02:40
01:02:41
01:02:46
01:02:51
01:02:56
01:03:00
01:03:01
01:03:05
01:03:15
01:03:18
01:03:21
01:03:26
01:03:28
01:03:30
01:03:35
01:04:05
01:04:10
01:04:12
01:04:18
01:04:22
01:04:25
01:04:31
01:04:32
01:04:44
01:04:58
01:05:01
01:05:07
01:05:11
01:05:12
01:05:13
01:05:19
01:05:26
01:05:28
01:05:35
01:05:38
01:05:46
01:05:53
01:05:56
01:06:06
01:06:07
01:06:14
01:06:16
01:06:21
01:06:26
01:06:31
01:06:34
01:06:36
01:06:38
01:06:39
01:06:40
01:06:46
01:06:46
01:06:51
01:06:55
01:07:01
01:07:02
01:07:07
01:07:10
01:07:15
01:07:16
01:07:20
01:07:24
01:07:27
01:07:32
01:07:34
01:07:37
01:07:38
01:07:39
01:07:42
01:07:44
01:07:46
01:07:51
01:07:54
01:08:00
01:08:05
01:08:09
01:08:11
01:08:13
01:08:18
01:08:20
01:08:27
01:08:30
01:08:35
01:08:46
01:08:55
01:09:05
01:09:07
01:09:12
01:09:18
01:09:22
01:09:28
01:09:34
01:09:36
01:09:38
01:09:41
01:09:42
01:09:46
01:09:50
01:09:54
01:09:59
01:10:03
01:10:08
01:10:14
01:10:20
01:10:25
01:10:30
01:10:36
01:10:43
01:10:50
01:10:55
01:11:00
01:11:05
01:11:06
01:11:08
01:11:13
01:11:18
01:11:23
01:11:29
01:11:35
01:11:39
01:11:41
01:11:44
01:11:49
01:11:53
01:11:55
01:11:56
01:11:57
01:11:59
01:12:00
01:12:01
01:12:03
01:12:04
01:12:07
01:12:09
01:12:14
01:12:16
01:12:21
01:12:24
01:12:27
01:12:27
01:12:31
01:12:34
01:12:35
01:12:38
01:12:41
01:12:46
01:12:47
01:12:48
01:12:49
01:12:52
01:12:55
01:12:56
01:12:59
01:13:02
01:13:05
01:13:06
01:13:10
01:13:12
01:13:13
01:13:16
01:13:20
01:13:22
01:13:25
01:13:27
01:13:30
01:13:34
01:13:34
01:13:35
01:13:39
01:13:42
01:13:44
01:13:48
01:13:50
01:13:52
01:13:55
01:13:57
01:14:01
01:14:02
01:14:06
01:14:08
01:14:09
01:14:10
01:14:11
01:14:15
01:14:16
01:14:17
01:14:18
01:14:23
01:14:25
01:14:29
01:14:32
01:14:36
01:14:36
01:14:38
01:14:40
01:14:41
01:14:41
01:14:42
01:14:42
01:14:44
01:14:46
01:14:47
01:14:49
01:14:50
01:14:52
01:14:58
01:15:03
01:15:06
01:15:11
01:15:18
01:15:21
01:15:24
01:15:26
01:15:30
01:15:35
01:15:39
01:15:42
01:15:45
01:15:47
01:15:51
01:15:53
01:15:55
01:15:56
01:15:59
01:16:02
01:16:03
01:16:05
01:16:06
01:16:18


