diff --git a/docs/community/README.md b/docs/community/README.md index f8a2d85b..e4d6ec93 100644 --- a/docs/community/README.md +++ b/docs/community/README.md @@ -16,3 +16,8 @@ The [three characteristics](https://www.communityofpractice.ca/background/what-i 3. Domain: A shared interest, problem, or concern. We regularly meet as a community, report [meeting summaries](meetings/README.md), and collect [case studies](case-studies/README.md) that showcase good practices. + +## Training events + +To support skill development, we have the capacity to prepare and deliver bespoke training events as standalone session and as part of larger meetings and conferences. +See our [Training events](training/README.md) page for further details. diff --git a/docs/community/training/README.md b/docs/community/training/README.md new file mode 100644 index 00000000..546671a6 --- /dev/null +++ b/docs/community/training/README.md @@ -0,0 +1,3 @@ +# Training events + +We will be running an [Introduction to Debugging](debugging/README.md) workshop at the [SPECTRUM](https://spectrum.edu.au/) Annual Meeting 2024 (23-25 September). diff --git a/docs/community/training/debugging/README.md b/docs/community/training/debugging/README.md new file mode 100644 index 00000000..54002252 --- /dev/null +++ b/docs/community/training/debugging/README.md @@ -0,0 +1,11 @@ +# Introduction to Debugging + +This workshop was prepared for the [SPECTRUM](https://spectrum.edu.au/) Annual Meeting 2024 (23-25 September). + +!!! tip + + **We all make mistakes** when writing code and introduce errors. + + Having good debugging skills means that you can spend **less time fixing your code**. + +See the discussion in our [August 2024 meeting](../../meetings/2024-08-08.md#debugging) for further background. diff --git a/docs/community/training/debugging/acknowledgements.md b/docs/community/training/debugging/acknowledgements.md new file mode 100644 index 00000000..82a67a6e --- /dev/null +++ b/docs/community/training/debugging/acknowledgements.md @@ -0,0 +1,17 @@ +# Acknowledgements + +Thank you to everyone who contributed to these materials, participated in the practice run, and/or provided feedback. +This includes, in no particular order: + +- Eamon Conway +- James Ong +- Michael Lydeamore +- Ada Yan +- Ruarai Tobin +- Lauren Smith +- Roben Delos Reyes +- Nefel Tellioglu +- Tanaphum Wichaita +- Jiahao Diao +- TK Le +- Dionne Argyropoulos diff --git a/docs/community/training/debugging/building-your-skills.md b/docs/community/training/debugging/building-your-skills.md new file mode 100644 index 00000000..b35bfc18 --- /dev/null +++ b/docs/community/training/debugging/building-your-skills.md @@ -0,0 +1,56 @@ +# Building your skills + +!!! tip + + Whenever you debug some code, consider it as an opportunity to learn, reflect, and [build your debugging skills](manifesto.md). + + Pay attention to your experience — what worked well, and what would you do differently next time? + +## Identifying errors + +Write a failing test case, this allows you to verify that the bug can be reproduced. + +## Developing a plan + +What information might help you decide how to begin? + +Can you identify a recent "known good" version of the code that doesn't include the error? + +If you're using version control, have a look at your recent commits and check whether any of them are likely to have introduced or exposed this error. + +## Searching for the root cause + +We've shown how a debugger allows you to pause your code and see what it's actually doing. +This is extremely helpful! + +!!! tip + + Other approaches may be useful, but avoid using trial-and-error. + +To quickly confirm or rule out specific suspicions, you might consider using: + +- `print()` statements; +- using `assert()` to verify whether specific conditions are met; +- manually calling functions from an interactive session (a "[REPL](https://en.wikipedia.org/wiki/Read%E2%80%93eval%E2%80%93print_loop)"); +- reverting or commenting out the most recent changes; or +- using `git bisect` to [identify the commit](../../../guides/using-git/where-did-this-problem-come-from.md) that introduced the error. + +## Fixing the root cause + +Is there an optimal solution? + +This might be the solution that changes as little code as possible, or it might be a solution that involves modifying and/or restructuring other parts of your code. + +## After it's fixed + +If you didn't write a test case to identify the error (see above), now is the time to write a test case to ensure you don't even make the same error again. + +Are there other parts of your code where you might make a similar mistake, for which you could also write test cases? + +Are there coding practices that might make this kind of error easier to find next time? +For example, this might involve dividing your code into smaller functions, using version control to record commits [early and often](../../../guides/version-control/what-should-I-commit.md). + +Have you considered defensive programming practices? +For example, at the start of a function it can often be a good idea to check that all of the arguments have valid values. + +Are there tools or approaches that you haven't used before, and which might be worth trying next time? diff --git a/docs/community/training/debugging/debugging-manifesto-poster.jpg b/docs/community/training/debugging/debugging-manifesto-poster.jpg new file mode 100644 index 00000000..4dd03eee Binary files /dev/null and b/docs/community/training/debugging/debugging-manifesto-poster.jpg differ diff --git a/docs/community/training/debugging/example-square-numbers.md b/docs/community/training/debugging/example-square-numbers.md new file mode 100644 index 00000000..0621bf47 --- /dev/null +++ b/docs/community/training/debugging/example-square-numbers.md @@ -0,0 +1,101 @@ +# Example: Square numbers + +[Square numbers](https://en.wikipedia.org/wiki/Square_number) are positive integers that are equal to the square of an integer. +Here we have provided example Python and R scripts that print all of the square numbers between 1 and 100: + +
+ +You can download these scripts to run on your own computer: + +- [square_numbers.py](square_numbers.py) +- [square_numbers.R](square_numbers.R) + +Each script contains three functions: + +- `main()` +- `find_squares(lower_bound, upper_bound)` +- `is_square(value)` + +The diagram below shows how `main()` calls `find_squares()`, which in turn calls `is_square()` many times. + +```mermaid +sequenceDiagram + participant M as main() + participant F as find_squares() + participant I as is_square() + activate M + M ->>+ F: lower_bound = 1, upper_bound = 100 + Note over F: squares = [ ] + F ->>+ I: value = 1 + I ->>- F: True/False + F ->>+ I: value = 2 + I ->>- F: True/False + F -->>+ I: ... + I -->>- F: ... + F ->>+ I: value = 100 + I ->>- F: True/False + F ->>- M: squares = [...] + Note over M: print(squares) + deactivate M +``` + +??? info "Source code" + + === "Python" + + ```py title="square_numbers.py" linenums="1" + --8<-- "square_numbers.py" + ``` + + === "R" + + ```R title="square_numbers.R" linenums="1" + --8<-- "square_numbers.R" + ``` + +## Stepping through the code + +These recorded terminal sessions demonstrate how to use Python and R debuggers from the command line. +They cover: + +- How to define breakpoints; +- How to inspect the current values of variables; and +- How to step through, and over, lines of code. + +!!! info "Manual breakpoints" + + You can also create breakpoints in your code by calling [`breakpoint()`](https://docs.python.org/3/library/pdb.html) in Python, and [`browser()`](https://adv-r.hadley.nz/debugging.html#browser) in R. + +!!! tip "Interactive debugger sessions" + + If your editor supports running a debugger, **use this feature!** + See these examples for [RStudio](https://support.posit.co/hc/en-us/articles/205612627-Debugging-with-the-RStudio-IDE), [PyCharm](https://www.jetbrains.com/pycharm/features/debugger.html), [Spyder](https://docs.spyder-ide.org/current/panes/debugging.html), and [VS Code](https://code.visualstudio.com/docs/editor/debugging). + +=== "Python debugger" + +
+ + Video timeline: + + 1. Set a breakpoint + 2. Show current location + 3. Step into `is_square()` + 4. Return from `is_square()` + 5. Show updated `squares` list + 6. Add a conditional breakpoint + 7. Stop at the conditional breakpoint + 8. Continue until the script ends + +=== "R debugger" + +
+ + Video timeline: + + 1. Set a breakpoint + 2. Step into `is_square()` + 3. Return from `is_square()` + 4. Show updated `squares` list + 5. Add a conditional breakpoint + 6. Stop at the conditional breakpoint + 7. Continue until the script ends diff --git a/docs/community/training/debugging/exercise-perfect-numbers.md b/docs/community/training/debugging/exercise-perfect-numbers.md new file mode 100644 index 00000000..9b4359d8 --- /dev/null +++ b/docs/community/training/debugging/exercise-perfect-numbers.md @@ -0,0 +1,50 @@ +# Exercise: Perfect numbers + +=== "Overview" + + [Perfect numbers](https://en.wikipedia.org/wiki/Perfect_number) are positive integers that are equal to the sum of their divisors. + Here we have provided example Python and R scripts that should print all of the perfect numbers up to 1,000. + + You can download each script to debug on your own computer: + + - [perfect_numbers.py](perfect_numbers.py) + - [perfect_numbers.R](perfect_numbers.R) + +=== "Python" + + ```py title="perfect_numbers.py" linenums="1" + --8<-- "perfect_numbers.py" + ``` + +=== "R" + + ```R title="perfect_numbers.R" linenums="1" + --8<-- "perfect_numbers.R" + ``` + +!!! bug "But there's a problem ..." + + If we run these scripts, we see that **they don't print anything**: + +
+ + How should we begin investigating? + +!!! tip "Interactive debugger sessions" + + If your editor supports running a debugger, **use this feature!** + See these examples for [RStudio](https://support.posit.co/hc/en-us/articles/205612627-Debugging-with-the-RStudio-IDE), [PyCharm](https://www.jetbrains.com/pycharm/features/debugger.html), [Spyder](https://docs.spyder-ide.org/current/panes/debugging.html), and [VS Code](https://code.visualstudio.com/docs/editor/debugging). + +??? note "Some initial thoughts ..." + + - Are we actually running the `main()` function at all? + + - The `main()` function is almost certainly not the cause of this error. + + - The `is_perfect()` function is very simple, so it's unlikely to be the cause of this error. + + - The `divisors_of()` function doesn't look obviously wrong. + + - But there must be a mistake **somewhere**! + + - Let's **use a debugger** to investigate. diff --git a/docs/community/training/debugging/exercise-python-vs-r.md b/docs/community/training/debugging/exercise-python-vs-r.md new file mode 100644 index 00000000..a73a8a6d --- /dev/null +++ b/docs/community/training/debugging/exercise-python-vs-r.md @@ -0,0 +1,58 @@ +# Exercise: Python vs R + +=== "Overview" + + Here we have provided SIR ODE model implementations in Python and in R. + Each script runs several scenarios and produces a plot of infection prevalence for each scenario. + + You can download each script to debug on your computer: + + - [sir_ode.py](sir_ode.py) + - [sir_ode.R](sir_ode.R) + +=== "Python" + + ```py title="sir_ode.py" linenums="1" + --8<-- "sir_ode.py" + ``` + +=== "R" + + ```R title="sir_ode.R" linenums="1" + --8<-- "sir_ode.R" + ``` + +!!! bug "The model outputs differ!" + + Here are prevalence time-series plots produced by each script: + + === "Python plot" + +
+ ![Python outputs](sir_ode_python.png) +
Model outputs for the Python script.
+
+ + === "R plot" + +
+ ![R outputs](sir_ode_r.png) +
Model outputs for the R script.
+
+ +!!! tip "Interactive debugger sessions" + + If your editor supports running a debugger, **use this feature!** + See these examples for [RStudio](https://support.posit.co/hc/en-us/articles/205612627-Debugging-with-the-RStudio-IDE), [PyCharm](https://www.jetbrains.com/pycharm/features/debugger.html), [Spyder](https://docs.spyder-ide.org/current/panes/debugging.html), and [VS Code](https://code.visualstudio.com/docs/editor/debugging). + +??? note "Some initial thoughts ..." + + - Is it obvious whether one of the figures is correct and the other is wrong? + + - The `sir_rhs()` functions in the two scripts appear to be equivalent — but are they? + + - The `default_settings()` functions appear to be equivalent — but are they? + + - The `run_model_scaled_beta()` and `run_model_scaled_gamma()` functions also appear to be equivalent. + + - Where might you begin looking? diff --git a/docs/community/training/debugging/first_demo.R b/docs/community/training/debugging/first_demo.R new file mode 100644 index 00000000..42771411 --- /dev/null +++ b/docs/community/training/debugging/first_demo.R @@ -0,0 +1,16 @@ +first_function <- function() { + total <- 0 + for (x in seq(49)) { + y <- second_function(x) + total <- total + y + } + total +} + +second_function <- function(a) { + result <- 3 * a^2 + 5 * a + result +} + +total <- first_function() +cat("Total =", total, "\n") diff --git a/docs/community/training/debugging/first_demo.py b/docs/community/training/debugging/first_demo.py new file mode 100644 index 00000000..260dc148 --- /dev/null +++ b/docs/community/training/debugging/first_demo.py @@ -0,0 +1,16 @@ +def first_function(): + total = 0 + for x in range(1, 50): + y = second_function(x) + total = total + y + + return total + + +def second_function(a): + result = 3 * a**2 + 5 * a + return result + + +total = first_function() +print(f'Total = {total}') diff --git a/docs/community/training/debugging/headless-horse.jpg b/docs/community/training/debugging/headless-horse.jpg new file mode 100644 index 00000000..3f2bf4fa Binary files /dev/null and b/docs/community/training/debugging/headless-horse.jpg differ diff --git a/docs/community/training/debugging/learning-objectives.md b/docs/community/training/debugging/learning-objectives.md new file mode 100644 index 00000000..f3cc8893 --- /dev/null +++ b/docs/community/training/debugging/learning-objectives.md @@ -0,0 +1,17 @@ +# Learning objectives + +In this workshop, we will introduce the concept of "debugging", and demonstrate techniques and tools that can help us efficiently identify and remove errors from our code. + +After completing this workshop, participants will: + ++ Understand that debugging can be divided into a sequence of actions; + ++ Understand the purpose of each of these actions; + ++ Be familiar with techniques and tools that can help perform these actions; + ++ Be able to apply these techniques and tools to their own code. + +!!! info + + By achieving these learning objectives, participants should be able to find and correct errors in their code more quickly and with greater confidence. diff --git a/docs/community/training/debugging/long_stacktrace.py b/docs/community/training/debugging/long_stacktrace.py new file mode 100755 index 00000000..50150350 --- /dev/null +++ b/docs/community/training/debugging/long_stacktrace.py @@ -0,0 +1,7 @@ +#!/usr/bin/env python3 + +import matplotlib.pyplot as plt +import matplotlib.cm as cm + +example_counts = [1, 2, 3, 4, 5] +plt.plot(example_counts, cbap=cm.Blues) diff --git a/docs/community/training/debugging/manifesto.md b/docs/community/training/debugging/manifesto.md new file mode 100644 index 00000000..55f04f3a --- /dev/null +++ b/docs/community/training/debugging/manifesto.md @@ -0,0 +1,12 @@ +# Debugging manifesto + +
+ ![A debugging manifesto poster.](debugging-manifesto-poster.jpg){ align=left, width="50%" } +
+ [Julia Evans](https://jvns.ca/) and [Tanya Brassie](https://tanyabrassie.com/): [Debugging Manifesto Poster](https://store.wizardzines.com/products/poster-debugging-manifesto), 2024. +
+
+ +!!! info + + See the [Resources](resources.md) page for links to more of Julia Evans' articles, stories, and zines about debugging. diff --git a/docs/community/training/debugging/perfect-numbers-first-run.cast b/docs/community/training/debugging/perfect-numbers-first-run.cast new file mode 100644 index 00000000..8b34ffc1 --- /dev/null +++ b/docs/community/training/debugging/perfect-numbers-first-run.cast @@ -0,0 +1,48 @@ +{"version": 2, "width": 80, "height": 4, "timestamp": 1723508323, "env": {"SHELL": "/bin/bash", "TERM": "xterm-256color"}} +[0.106254, "o", "\u001b[?2004h\u001b]2;(x1::debugging)\u0007\u001b[32;1m(x1::debugging)\u001b[0m "] +[1.439464, "o", "."] +[1.511348, "o", "/"] +[1.735208, "o", "p"] +[1.815337, "o", "e"] +[1.879152, "o", "r"] +[2.063205, "o", "f"] +[2.151301, "o", "e"] +[2.271034, "o", "c"] +[2.46335, "o", "t"] +[2.663166, "o", "_"] +[2.823218, "o", "n"] +[3.007567, "o", "u"] +[3.199264, "o", "m"] +[3.271363, "o", "b"] +[3.439513, "o", "e"] +[3.487438, "o", "r"] +[3.607177, "o", "s"] +[3.687383, "o", "."] +[3.847072, "o", "p"] +[3.991135, "o", "y"] +[4.967213, "o", "\r\n"] +[4.967292, "o", "\u001b[?2004l\r"] +[5.065072, "o", "\u001b[?2004h\u001b]2;(x1::debugging)\u0007\u001b[32;1m(x1::debugging)\u001b[0m "] +[6.879247, "o", "."] +[7.079536, "o", "/"] +[7.319153, "o", "p"] +[7.415356, "o", "e"] +[7.479395, "o", "r"] +[7.639271, "o", "f"] +[7.727076, "o", "e"] +[7.823333, "o", "c"] +[8.00743, "o", "t"] +[8.151241, "o", "_"] +[8.407055, "o", "n"] +[8.527353, "o", "u"] +[8.71911, "o", "m"] +[8.783422, "o", "b"] +[8.967451, "o", "e"] +[9.015325, "o", "r"] +[9.151235, "o", "s"] +[9.247291, "o", "."] +[9.575237, "o", "R"] +[10.167232, "o", "\r\n"] +[10.167313, "o", "\u001b[?2004l\r"] +[10.450741, "o", "\u001b[?2004h\u001b]2;(x1::debugging)\u0007\u001b[32;1m(x1::debugging)\u001b[0m "] +[12.800104, "o", "\u001b[?2004l"] diff --git a/docs/community/training/debugging/perfect_numbers.R b/docs/community/training/debugging/perfect_numbers.R new file mode 100755 index 00000000..5a5be50c --- /dev/null +++ b/docs/community/training/debugging/perfect_numbers.R @@ -0,0 +1,40 @@ +#!/usr/bin/env -S Rscript --vanilla +# +# This script prints perfect numbers. +# +# Perfect numbers are positive integers that are equal to the sum of their +# divisors. +# + + +main <- function() { + start <- 2 + end <- 1000 + for (value in seq.int(start, end)) { + if (is_perfect(value)) { + print(value) + } + } +} + + +is_perfect <- function(value) { + divisors <- divisors_of(value) + sum(divisors) == value +} + + +divisors_of <- function(value) { + divisors <- c() + candidate <- 2 + while (candidate < value) { + if (value %% candidate == 0) { + divisors <- c(divisors, candidate) + } + candidate <- candidate + 1 + } + divisors +} + + +main() diff --git a/docs/community/training/debugging/perfect_numbers.py b/docs/community/training/debugging/perfect_numbers.py new file mode 100755 index 00000000..149a2919 --- /dev/null +++ b/docs/community/training/debugging/perfect_numbers.py @@ -0,0 +1,34 @@ +#!/usr/bin/env python3 +""" +This script prints perfect numbers. + +Perfect numbers are positive integers that are equal to the sum of their +divisors. +""" + + +def main(): + start = 2 + end = 1_000 + for value in range(start, end + 1): + if is_perfect(value): + print(value) + + +def is_perfect(value): + divisors = divisors_of(value) + return sum(divisors) == value + + +def divisors_of(value): + divisors = [] + candidate = 2 + while candidate < value: + if value % candidate == 0: + divisors.append(candidate) + candidate += 1 + return divisors + + +if __name__ == '__main__': + main() diff --git a/docs/community/training/debugging/real-world-stories.md b/docs/community/training/debugging/real-world-stories.md new file mode 100644 index 00000000..65ba4d1a --- /dev/null +++ b/docs/community/training/debugging/real-world-stories.md @@ -0,0 +1,284 @@ +# Real-world stories + +## Rob Moss: pypfilt (Python) + +Last week (Tues 17 Sep, 2024) I encountered an error when running model simulations with my [pypfilt](https://pypfilt.readthedocs.io/) Python library. +I used the breakpoint technique described on [the previous page](when-something-fails.md), and identified the cause in **less than 2 minutes**. + +Here is the original stack trace that made me aware of the error: + +```text linenums="1" hl_lines="11" +Traceback (most recent call last): + File "./run_model_simulations.py", line 633, in + File "./run_model_simulations.py", line 56, in main + results = run_simulations( + File "./run_model_simulations.py", line 282, in run_simulations + results = pypfilt.fit(ctx, filename=filename) + File "venv/lib/python3.10/site-packages/pypfilt/__init__.py", line 536, in fit + ctx.component['summary'].save_forecasts(ctx, results, filepath) + File "venv/lib/python3.10/site-packages/pypfilt/summary.py", line 1523, in save_forecasts + save_data(obs_group, key, value) + File "venv/lib/python3.10/site-packages/pypfilt/summary.py", line 1467, in save_data + raise ValueError( +ValueError: Error saving dataset "00_to_04" with value [...] and type ndarray +``` + +The error occurred on **line 1467** (highlighted above). +This [piece of code](https://gitlab.unimelb.edu.au/rgmoss/particle-filter-for-python/-/blob/ada50f970e7787d97605dc11ed228640b0c72e1d/src/pypfilt/summary.py#L1458-L1469) looks like: + +```python title="pypfilt/summary.py" linenums="1458" +try: + if isinstance(value, np.ndarray): + save_dataset(time_scale, g, name, value, **kwargs) + else: + g.create_dataset(name, data=value, **kwargs) +except TypeError: + msg = ( + 'Error saving dataset "{}" with value {} and type {}' + ) + raise ValueError( + msg.format(name, value, type(value).__name__) + ) from None +``` + +So I added a `breakpoint()` call on line 1464 and ran the simulations again: + +```python title="pypfilt/summary.py" linenums="1458" hl_lines="7" +try: + if isinstance(value, np.ndarray): + save_dataset(time_scale, g, name, value, **kwargs) + else: + g.create_dataset(name, data=value, **kwargs) +except TypeError: + breakpoint() + msg = ( + 'Error saving dataset "{}" with value {} and type {}' + ) + raise ValueError( + msg.format(name, value, type(value).__name__) + ) from None +``` + +- I observed that `value` was a NumPy array. + +- This meant that `isinstance(value, np.ndarray)` returns `True`. + +- So the `save_dataset()` function on line 1460 was failing. + +- I called `save_dataset()` and stepped into the function. + +- This allowed me to **identify the cause:** + + - When the `value` array was created, it originally had columns called `"arrival_date"` and `"count"`; + + - The `"arrival_date"` column contains date values; + + - Dates must be converted into strings when saving data as a HDF5 dataset; + + - Metadata was attached to the `value` array, to indicate how to convert `"arrival_date"` values; + + - But then the columns were then renamed to `"time"` and `"value"`; + + - The metadata **was not updated**, so the `"time"` values were not converted into strings; and + + - This caused `save_dataset()` to fail. + +Here is the [faulty code](https://gitlab.unimelb.edu.au/rgmoss/particle-filter-for-python/-/blob/ada50f970e7787d97605dc11ed228640b0c72e1d/src/pypfilt/obs.py#L450-L462) (in a different file!): + +```python title="pypfilt/obs.py" linenums="450" hl_lines="4-12" +# Load the data table. +fields = [io.time_field(time_col), (value_col, np.float64)] +df = io.read_fields(time_scale, filename, fields) +# Rename the columns to 'time' and 'value'. +rename_to = { + time_col: 'time', + value_col: 'value', +} +new_names = tuple( + rename_to.get(name, name) for name in df.dtype.names +) +df.dtype.names = new_names +return df +``` + +And here is [the fix](https://gitlab.unimelb.edu.au/rgmoss/particle-filter-for-python/-/commit/5463da78fe6a2dc41267575b12a72aa5a00d232c): + +```python title="pypfilt/obs.py" linenums="450" hl_lines="4-8" +# Load the data table. +fields = [io.time_field(time_col), (value_col, np.float64)] +df = io.read_fields(time_scale, filename, fields) +# Rename the columns to 'time' and 'value', and ensure that the dtype +# metadata is updated to reflect the renamed columns. +fields_out = [io.time_field('time'), ('value', np.float64)] +dtype_out = io.fields_dtype(time_scale, fields_out) +return df.astype(dtype_out) +``` + +## Michael Lydeamore: ORCID publications (R) + +I wrote the `get_publications_from_orcid()` function (shown below) to retrieve the publications associated with a specific [ORCID](https://orcid.org/) ID, using the [`rorcid`](https://cran.r-project.org/web/packages/rorcid/index.html) package. + +!!! info "Retrieving research publications" + + This is now available as the [`publicationsscraper`](https://github.com/numbats/achievement-scraper) R package. + +The function has some error-catching built in: + +- If the ORCID ID doesn't exist (Error 404) then the function returns this error to the user (the `tryCatch` part, lines 26-35); + +- If DOIs aren't returned for a publication, they are filled with `NA` (using `purrr::map`, lines 50-63); and + +- If the `works` frame is empty, or doesn't exist, the function returns an empty frame (handled by the `if` statement on line 36). + +```R linenums="1" +#' get_publications_from_orcid +#' +#' @description +#' The `get_publications_from_orcid` function retrieves publications for given ORCID IDs using the rorcid package. +#' It fetches all works associated with each ORCID ID and combines them into a single data frame. +#' +#' @param orcid_ids A character vector of ORCID IDs for which publication information is requested. +#' +#' @return A data frame containing all publications for the specified ORCID IDs. +#' +#' @importFrom rorcid orcid_works +#' @importFrom dplyr select bind_rows mutate +#' @importFrom tibble tibble +#' @importFrom magrittr %>% +#' +#' @examples +#' \dontrun{get_publications_from_orcid(c("0000-0003-2531-9408", "0000-0001-5738-1471"))} +#' +#' @name get_publications_from_orcid +#' @export +get_publications_from_orcid <- function(orcid_ids) { + orcid_ids <- as.vector(orcid_ids) + all_pubs <- list() + + for (orcid_id in orcid_ids) { + pubs <- tryCatch( + rorcid::orcid_works(orcid_id), + error = function(e) { + if (inherits(e, "http_404")) { + stop(sprintf("Invalid ORCID ID: %s", orcid_id)) + } else { + print(e) + } + } + ) + if (!is.null(pubs[[1]]$works) && nrow(pubs[[1]]$works) > 0) { + all_pubs[[orcid_id]] <- pubs[[1]]$works |> + dplyr::select( + title = `title.title.value`, + DOI = `external-ids.external-id`, + authors = `source.assertion-origin-name.value`, + publication_year = `publication-date.year.value`, + journal_name = `journal-title.value` + ) |> + dplyr::mutate( + # the `external-ids` contains lots of things, not just DOI. It is a list containing a dataframe + # Mapping over that list, we can filter out just the 'doi' type + # Then pull it into a character vector + # Overwrite DOI with this value + DOI = purrr::map_chr( + .x = DOI, + .f = function(x) { + if(length(x) == 0L) + return(NA) + doi <- dplyr::filter(x, `external-id-type` == "doi") |> + dplyr::pull(`external-id-value`) + + if (length(doi) == 0L) { + return (NA) + } else { + return (doi[1]) + } + } + ), + orcid_id = orcid_id, + publication_year = as.numeric(publication_year) + ) + } + } + + return(dplyr::bind_rows(all_pubs)) +} +``` + +But I ran into an unusual error: this function failed for some ORCID IDs with valid works. + +```text +> get_publications_from_orcid("0000-0001-9379-0010") +Error in `dplyr::select()`: +! Can't subset columns that don't exist. +✖ Column `source.assertion-origin-name.value` doesn't exist. +Hide Traceback + ▆ + 1. ├─global get_publications_from_orcid("0000-0001-9379-0010") + 2. │ ├─dplyr::mutate(...) + 3. │ ├─dplyr::select(...) + 4. │ └─dplyr:::select.data.frame(...) + 5. │ └─tidyselect::eval_select(expr(c(...)), data = .data, error_call = error_call) + 6. │ └─tidyselect:::eval_select_impl(...) + 7. │ ├─tidyselect:::with_subscript_errors(...) + 8. │ │ └─rlang::try_fetch(...) + 9. │ │ └─base::withCallingHandlers(...) + 10. │ └─tidyselect:::vars_select_eval(...) + 11. │ └─tidyselect:::walk_data_tree(expr, data_mask, context_mask) + 12. │ └─tidyselect:::eval_c(expr, data_mask, context_mask) + 13. │ └─tidyselect:::reduce_sels(node, data_mask, context_mask, init = init) + 14. │ └─tidyselect:::walk_data_tree(new, data_mask, context_mask) + 15. │ └─tidyselect:::as_indices_sel_impl(...) + 16. │ └─tidyselect:::as_indices_impl(...) + 17. │ └─tidyselect:::chr_as_locations(x, vars, call = call, arg = arg) + 18. │ └─vctrs::vec_as_location(...) + 19. └─vctrs (local) ``() + 20. └─vctrs:::stop_subscript_oob(...) + 21. └─vctrs:::stop_subscript(...) + 22. └─rlang::abort(...) +``` + +To debug this, I made liberal use of the `browser()` command and analysed each part of the `pubs` object. +This quickly revealed the cause of the error: + +For ORCID works that **are not** journal publications (e.g., conference proceeedings), the `source.assertion-origin-name.value` column contains `NA` — in other words, these works **have no authors** defined. +And if there are no journal publications associated with the ORCID ID, the `source.assertion-origin-name.value` column **does not exist**! + +The solution was to only select columns if they existed, by using `dplyr::matches()`: + +``` r +all_pubs[[orcid_id]] <- pubs[[1]]$works |> + dplyr::select( + title = dplyr::matches("title.title.value"), + DOI = dplyr::matches("external-ids.external-id"), + authors = dplyr::matches("source.assertion-origin-name.value"), + publication_year = dplyr::matches("publication-date.year.value"), + journal_name = dplyr::matches("journal-title.value") + ) +``` + +and then adding any missing columns, filling them with a default value: + +``` r +append_column_if_missing <- function(.data, column, default_value = NA) { + + current_columns <- colnames(.data) + + if (!column %in% current_columns) { + return( + .data |> + mutate(!!column := default_value) + ) + } + + return (.data) +} + +# ... |> +append_column_if_missing("title", default_value = NA_character_) |> +append_column_if_missing("DOI", default_value = NA_character_) |> +append_column_if_missing("authors", default_value = NA_character_) |> +append_column_if_missing("publication_year", default_value = NA_integer_) |> +append_column_if_missing("journal_name", default_value = NA_character_) |> +# ... +``` diff --git a/docs/community/training/debugging/resources.md b/docs/community/training/debugging/resources.md new file mode 100644 index 00000000..e6047b95 --- /dev/null +++ b/docs/community/training/debugging/resources.md @@ -0,0 +1,10 @@ +# Resources + +- [Julia Evans](https://jvns.ca/) has written a lot of great materials about debugging: + - [Debugging articles](https://jvns.ca/#debugging) + - [Debugging stories](https://jvns.ca/#debugging-stories) + - [The Pocket Guide to Debugging](https://jvns.ca/blog/2022/12/21/new-zine--the-pocket-guide-to-debugging/) (see the [table of contents](https://jvns.ca/images/debugging-guide-toc.png)) + - [Notes on building debugging puzzles](https://jvns.ca/blog/2021/04/16/notes-on-debugging-puzzles/) +- [Debug with pdb and breakpoint](https://hamatti.org/posts/debug-with-pdb-and-breakpoint/) +- [Advanced R: Debugging](https://adv-r.hadley.nz/debugging.html) +- [RStudio Cheatsheet: Debugging](https://rstudio.github.io/cheatsheets/html/rstudio-ide.html#debug-mode) diff --git a/docs/community/training/debugging/sir_ode.R b/docs/community/training/debugging/sir_ode.R new file mode 100755 index 00000000..fc892f0b --- /dev/null +++ b/docs/community/training/debugging/sir_ode.R @@ -0,0 +1,109 @@ +#!/usr/bin/env -S Rscript --vanilla + +library(deSolve) +suppressPackageStartupMessages(library(dplyr)) +suppressPackageStartupMessages(library(ggplot2)) + + +# The right-hand side for the vanilla SIR compartmental model. +sir_rhs <- function(time, state, params) { + s_to_i <- params$beta * state["I"] * state["S"] / params$popn + i_to_r <- params$gamma * state["I"] + list(c(-s_to_i, s_to_i - i_to_r, i_to_r)) +} + + +# Return the SIR ODE solution for the given model settings. +run_model <- function(settings) { + # Define the time span and evaluation times. + times <- seq(0, settings$sim_days) + # Define the initial state. + popn <- settings$population + exposures <- settings$exposures + initial_state <- c(S = popn - exposures, I = exposures, R = 0) + # Define the SIR parameters. + params <- list( + popn = settings$population, + beta = settings$beta, + gamma = settings$gamma + ) + # Return the daily number of people in S, I, and R. + ode(initial_state, times, sir_rhs, params) +} + + +# The default model settings. +default_settings <- function() { + list( + sim_days = 20, + population = 100, + exposures = 2, + beta = 1.0, + gamma = 0.5 + ) +} + + +# Adjust the value of ``beta`` before running the model. +run_model_scaled_beta <- function(settings, scale) { + settings$beta <- scale * settings$beta + run_model(settings) +} + + +# Adjust the value of ``gamma`` before running the model. +run_model_scaled_gamma <- function(settings, scale) { + settings$gamma <- scale * settings$gamma + run_model(settings) +} + + +# Plot daily prevalence of infectious individuals for one or more scenarios. +plot_prevalence_time_series <- function(solutions) { + df <- lapply( + names(solutions), + function(name) { + solutions[[name]] |> + as.data.frame() |> + mutate(scenario = name) + } + ) |> + bind_rows() |> + mutate( + scenario = factor(scenario, levels = names(solutions), ordered = TRUE) + ) + fig <- ggplot() + + geom_line(aes(time, I), df) + + xlab(NULL) + + scale_y_continuous( + name = NULL, + limits = c(0, 40), + breaks = c(0, 20, 40) + ) + + facet_wrap(~ scenario, ncol = 1) + + theme_bw(base_size = 10) + + theme( + strip.background = element_blank(), + panel.grid = element_blank(), + ) + png_file <- "sir_ode_r.png" + ggsave(png_file, fig, width = 640, height = 480, units = "px", dpi = 150) +} + + +demonstration <- function() { + settings <- default_settings() + default_scenario <- run_model(settings) + scaled_beta_scenario <- run_model_scaled_beta(settings, scale=1.5) + scaled_gamma_scenario <- run_model_scaled_gamma(settings, scale=0.7) + + plot_prevalence_time_series( + list( + Default = default_scenario, + `Scaled Beta` = scaled_beta_scenario, + `Scaled Gamma` = scaled_gamma_scenario + ) + ) +} + +demonstration() diff --git a/docs/community/training/debugging/sir_ode.py b/docs/community/training/debugging/sir_ode.py new file mode 100755 index 00000000..21308275 --- /dev/null +++ b/docs/community/training/debugging/sir_ode.py @@ -0,0 +1,102 @@ +#!/usr/bin/env python3 + +import matplotlib.pyplot as plt +import numpy as np +from scipy.integrate import solve_ivp + + +def sir_rhs(time, state, popn, beta, gamma): + """ + The right-hand side for the vanilla SIR compartmental model. + """ + s_to_i = beta * state[1] * state[0] / popn # beta * I(t) * S(t) / N + i_to_r = gamma * state[1] # gamma * I(t) + return [-s_to_i, s_to_i - i_to_r, i_to_r] + + +def run_model(settings): + """ + Return the SIR ODE solution for the given model settings. + """ + # Define the time span and evaluation times. + sim_days = settings['sim_days'] + time_span = [0, sim_days] + times = np.linspace(0, sim_days, num=sim_days + 1) + # Define the initial state. + popn = settings['population'] + exposures = settings['exposures'] + initial_state = [popn - exposures, exposures, 0] + # Define the SIR parameters. + params = (popn, settings['beta'], settings['gamma']) + # Return the daily number of people in S, I, and R. + return solve_ivp( + sir_rhs, time_span, initial_state, t_eval=times, args=params + ) + + +def default_settings(): + """ + The default model settings. + """ + return { + 'sim_days': 20, + 'population': 100, + 'exposures': 2, + 'beta': 1.0, + 'gamma': 0.5, + } + + +def run_model_scaled_beta(settings, scale): + """ + Adjust the value of ``beta`` before running the model. + """ + settings['beta'] = scale * settings['beta'] + return run_model(settings) + + +def run_model_scaled_gamma(settings, scale): + """ + Adjust the value of ``gamma`` before running the model. + """ + settings['gamma'] = scale * settings['gamma'] + return run_model(settings) + + +def plot_prevalence_time_series(solutions): + """ + Plot daily prevalence of infectious individuals for one or more scenarios. + """ + fig, axes = plt.subplots( + constrained_layout=True, + nrows=len(solutions), + sharex=True, + sharey=True, + ) + for ix, (scenario_name, solution) in enumerate(solutions.items()): + ax = axes[ix] + ax.title.set_text(scenario_name) + ax.plot(solution.y[1], label='I') + ax.set_xticks([0, 5, 10, 15, 20]) + # Save the figure. + png_file = 'sir_ode_python.png' + fig.savefig(png_file, format='png', metadata={'Software': None}) + + +def demonstration(): + settings = default_settings() + default_scenario = run_model(settings) + scaled_beta_scenario = run_model_scaled_beta(settings, scale=1.5) + scaled_gamma_scenario = run_model_scaled_gamma(settings, scale=0.7) + + plot_prevalence_time_series( + { + 'Default': default_scenario, + 'Scaled Beta': scaled_beta_scenario, + 'Scaled Gamma': scaled_gamma_scenario, + } + ) + + +if __name__ == '__main__': + demonstration() diff --git a/docs/community/training/debugging/sir_ode_python.png b/docs/community/training/debugging/sir_ode_python.png new file mode 100644 index 00000000..d618e02c Binary files /dev/null and b/docs/community/training/debugging/sir_ode_python.png differ diff --git a/docs/community/training/debugging/sir_ode_r.png b/docs/community/training/debugging/sir_ode_r.png new file mode 100644 index 00000000..3bd40c2f Binary files /dev/null and b/docs/community/training/debugging/sir_ode_r.png differ diff --git a/docs/community/training/debugging/solutions.md b/docs/community/training/debugging/solutions.md new file mode 100644 index 00000000..4c0f6bc3 --- /dev/null +++ b/docs/community/training/debugging/solutions.md @@ -0,0 +1,54 @@ +# Exercise solutions + +!!! info + + Please don't look as these solutions until you have attempted the exercises. + +??? abstract "Perfect numbers" + + Perfect numbers are equal to the sum of their proper divisors — all divisors except the number itself. + + For example, 6 is a perfect number. + Its proper divisors are 1, 2, and 3, and 1 + 2 + 3 = 6. + + The mistake here is that the `divisors_of()` function only returns divisors **greater than one**, and so the code fails to identify any of the true perfect numbers. + + Interestingly, this mistake did not result in the code mistakenly identifying any other numbers as perfect numbers. + +??? abstract "Python vs R" + + If you're only familiar with one of these two languages, you may be surprised to discover that they have some fundamental differences. + In this exercise we demonstrated one consequence of the ways that these languages handle function arguments. + + !!! quote "The R Language Definition" + + The semantics of invoking a function in R argument are **call-by-value**. + In general, supplied arguments behave as if they are **local variables** initialized with the value supplied and the name of the corresponding formal argument. + Changing the value of a supplied argument within a function **will not affect** the value of the variable in the calling frame. + + — [Argument Evaluation](https://cran.r-project.org/doc/manuals/r-patched/R-lang.html#Argument-evaluation) + + !!! quote "Python Programming FAQ" + + Remember that arguments are **passed by assignment** in Python. + Since assignment just **creates references** to objects, there's no alias between an argument name in the caller and callee, and so no call-by-reference per se. + + — [How do I write a function with output parameters (call by reference)?](https://docs.python.org/3/faq/programming.html#how-do-i-write-a-function-with-output-parameters-call-by-reference) + + - In R the `run_model_scaled_beta()` and `run_model_scaled_gamma()` functions **do not modify** the value of `settings` in the `demonstration()` function. + This produces model outputs for the following parameter combinations: + + - β = 1.0 and γ = 0.5; + - β = 1.5 and γ = 0.5; and + - **β = 1.0 and γ = 0.35**. + + - In Python the `run_model_scaled_beta()` and `run_model_scaled_gamma()` functions **do modify** the value of `settings` in the `demonstration()` function. + This produces model outputs for the following parameter combinations: + + - β = 1.0 and γ = 0.5; + - β = 1.5 and γ = 0.5; and + - **β = 1.5 and γ = 0.35**. + + !!! success "Answer" + + The value of β is different in the third combination. diff --git a/docs/community/training/debugging/square-numbers-demo.cast b/docs/community/training/debugging/square-numbers-demo.cast new file mode 100644 index 00000000..646eb6de --- /dev/null +++ b/docs/community/training/debugging/square-numbers-demo.cast @@ -0,0 +1,46 @@ +{"version": 2, "width": 80, "height": 5, "timestamp": 1724287506, "env": {"SHELL": "/bin/bash", "TERM": "xterm-256color"}} +[0.085762, "o", "\u001b[?2004h\u001b]2;(x1::debugging)\u0007\u001b[32;1m(x1::debugging)\u001b[0m "] +[0.304444, "o", "."] +[0.450345, "o", "/"] +[0.613627, "o", "s"] +[0.873455, "o", "q"] +[1.108823, "o", "u"] +[1.287488, "o", "a"] +[1.454263, "o", "r"] +[1.674393, "o", "e"] +[1.812098, "o", "_"] +[2.047097, "o", "n"] +[2.335861, "o", "u"] +[2.485753, "o", "m"] +[2.776119, "o", "b"] +[3.009771, "o", "e"] +[3.129275, "o", "r"] +[3.317859, "o", "s"] +[3.595679, "o", "."] +[3.835811, "o", "p"] +[4.001456, "o", "y"] +[4.448924, "o", "\r\n\u001b[?2004l\r"] +[4.475384, "o", "[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]\r\n"] +[4.490576, "o", "\u001b[?2004h\u001b]2;(x1::debugging)\u0007\u001b[32;1m(x1::debugging)\u001b[0m "] +[5.316432, "o", "."] +[5.448534, "o", "/"] +[5.617079, "o", "s"] +[5.810295, "o", "q"] +[5.963872, "o", "u"] +[6.227657, "o", "a"] +[6.366643, "o", "r"] +[6.492842, "o", "e"] +[6.611395, "o", "_"] +[6.831541, "o", "n"] +[7.102805, "o", "u"] +[7.323411, "o", "m"] +[7.610398, "o", "b"] +[7.855683, "o", "e"] +[8.127994, "o", "r"] +[8.414289, "o", "s"] +[8.623942, "o", "."] +[8.911873, "o", "R"] +[9.311594, "o", "\r\n"] +[9.311712, "o", "\u001b[?2004l\r"] +[9.489246, "o", " [1] 1 4 9 16 25 36 49 64 81 100\r\n"] +[9.507689, "o", "\u001b[?2004h\u001b]2;(x1::debugging)\u0007\u001b[32;1m(x1::debugging)\u001b[0m "] diff --git a/docs/community/training/debugging/square-numbers-demo.toml b/docs/community/training/debugging/square-numbers-demo.toml new file mode 100644 index 00000000..ea83e614 --- /dev/null +++ b/docs/community/training/debugging/square-numbers-demo.toml @@ -0,0 +1,29 @@ +output_file = "square-numbers-demo.cast" +start_delay = 0.3 +end_delay = 0.5 +typing_delay = [ + 0.05, + 0.25, +] +pre_nl_delay = [ + 0.2, + 0.2, +] +post_nl_delay = [ + 0.8, + 1.0, +] +with_comments = false +comments_at_top = false +actions = [ + "./square_numbers.py", + "./square_numbers.R", + { action_id = "Marker", label = "END" }, + "exit", +] +cols = 80 +rows = 5 + +[[filters]] +filter_id = "EndMarkerFilter" +end_label = "END" diff --git a/docs/community/training/debugging/square-numbers-pdb.cast b/docs/community/training/debugging/square-numbers-pdb.cast new file mode 100644 index 00000000..1bb6254d --- /dev/null +++ b/docs/community/training/debugging/square-numbers-pdb.cast @@ -0,0 +1,349 @@ +{"version": 2, "width": 80, "height": 24, "timestamp": 1724216836, "env": {"SHELL": "/bin/bash", "TERM": "xterm-256color"}} +[0.004525, "o", "\u001b[!p\u001b[?3;4l\u001b[4l\u001b>\u001b[?1049h\u001b[22;0;0t\u001b[4l\u001b[?1h\u001b=\u001b[0m\u001b(B\u001b[1;24r"] +[0.006047, "o", "\u001b[H\u001b[2J\u001b[H\u001b[2J\u001b[23B\u001b[7m \u001b[H\u001b[27m\u001b[23B\u001b[7m \u001b[H\u001b[27m\u001b[23B\u001b[7m \u001b[H\u001b[27m\u001b[23B\u001b[7m \u001b[H\u001b[27m\u001b[H\u001b[2J\u001b[23B\u001b[7m \u001b[H\u001b[27m\u001b[23B\u001b[7m \u001b[H\u001b[27m"] +[0.111888, "o", "\u001b[22;2t\u001b]2;(x1::debugging)\u0007\u001b[1m\u001b[32m(x1::debugging)\u001b[0m "] +[0.297472, "o", "p"] +[0.408534, "o", "y"] +[0.524753, "o", "t"] +[0.66504, "o", "h"] +[0.798985, "o", "o"] +[0.918783, "o", "n"] +[1.035745, "o", "3"] +[1.166345, "o", " "] +[1.275735, "o", "-"] +[1.4096, "o", "m"] +[1.556987, "o", " "] +[1.669553, "o", "p"] +[1.817613, "o", "d"] +[1.951816, "o", "b"] +[2.056371, "o", " "] +[2.179294, "o", "s"] +[2.32357, "o", "q"] +[2.458568, "o", "u"] +[2.575096, "o", "a"] +[2.712077, "o", "r"] +[2.823579, "o", "e"] +[2.927899, "o", "_"] +[3.035931, "o", "n"] +[3.153274, "o", "u"] +[3.276966, "o", "m"] +[3.390595, "o", "b"] +[3.531795, "o", "e"] +[3.641283, "o", "r"] +[3.748397, "o", "s"] +[3.853112, "o", "."] +[3.98345, "o", "p"] +[4.126279, "o", "y"] +[4.456845, "o", "\r\n"] +[4.494598, "o", "> debugging/square_numbers.py(2)()\r\n-> \"\"\"\r\n(Pdb) "] +[4.7, "m", "Set a breakpoint"] +[5.452301, "o", "b"] +[5.595708, "o", "r"] +[5.742767, "o", "e"] +[5.870233, "o", "a"] +[6.017347, "o", "k"] +[6.14264, "o", " "] +[6.256639, "o", "1"] +[6.379398, "o", "6"] +[6.71338, "o", "\r\n"] +[6.713562, "o", "Breakpoint 1 at debugging/square_numbers.py:16\r\n(Pdb) "] +[7.745539, "o", "c"] +[7.85873, "o", "o"] +[7.976148, "o", "n"] +[8.090055, "o", "t"] +[8.207778, "o", "i"] +[8.308467, "o", "n"] +[8.440298, "o", "u"] +[8.554699, "o", "e"] +[8.85907, "o", "\r\n"] +[8.85921, "o", "> debugging/square_numbers.py(16)find_squares()\r\n-> if is_square(value):\r\n"] +[8.85924, "o", "(Pdb) "] +[9.081, "m", "Show current location"] +[9.745612, "o", "l"] +[9.860581, "o", "i"] +[9.983146, "o", "s"] +[10.090868, "o", "t"] +[11.203442, "o", "\r\n"] +[11.203536, "o", " 11 \r\n 12 def find_squares(lower_bound, upper_bound):\r\n 13 squares = []\r\n 14 value = lower_bound\r\n 15 while value <= upper_bound:\r\n 16 B-> if is_square(value):\r\n 17 squares.append(value)\r\n 18 value += 1\r\n 19 return squares\r\n 20 \r\n 21 \r\u001b[1;23r\u001b[23;1H\n(Pdb) "] +[13.256525, "o", "p"] +[13.368927, "o", "r"] +[13.483868, "o", "i"] +[13.598561, "o", "n"] +[13.711684, "o", "t"] +[13.835765, "o", "("] +[13.946968, "o", "v"] +[14.071736, "o", "a"] +[14.184584, "o", "l"] +[14.326651, "o", "u"] +[14.435913, "o", "e"] +[14.579051, "o", ")"] +[15.689609, "o", "\r\n"] +[15.689692, "o", "1\b\n"] +[15.689811, "o", "(Pdb) "] +[16.146, "m", "Step into `is_square()`"] +[17.742407, "o", "s"] +[17.853405, "o", "t"] +[17.99157, "o", "e"] +[18.104392, "o", "p"] +[18.408988, "o", "\r\n"] +[18.409075, "o", "--Call--\r\n"] +[18.409113, "o", "> debugging/square_numbers.py(22)is_square()\r\n-> def is_square(value):\r\n"] +[18.409141, "o", "(Pdb) "] +[19.367903, "o", "s"] +[19.499585, "o", "t"] +[19.608708, "o", "e"] +[19.721867, "o", "p"] +[20.057163, "o", "\r\n"] +[20.057264, "o", "> debugging/square_numbers.py(23)is_square()\r\n-> for i in range(1, value + 1):\r\n"] +[20.057397, "o", "(Pdb) "] +[21.083079, "o", "l"] +[21.205252, "o", "i"] +[21.336407, "o", "s"] +[21.452416, "o", "t"] +[22.562739, "o", "\r\n"] +[22.56286, "o", " 18 value += 1\r\n 19 return squares\r\n 20 \r\n 21 \r\n 22 def is_square(value):\r\n 23 -> for i in range(1, value + 1):\r\n 24 if i * i == value:\r\n 25 return True\r\n 26 return False\r\n 27 \r\n "] +[22.562907, "o", "28 \r\n(Pdb) "] +[24.615103, "o", "u"] +[24.759021, "o", "p"] +[25.107984, "o", "\r\n"] +[25.108063, "o", "> debugging/square_numbers.py(16)find_squares()\r\n-> if is_square(value):\r\n(Pdb) "] +[26.034808, "o", "l"] +[26.149422, "o", "i"] +[26.298029, "o", "s"] +[26.400998, "o", "t"] +[27.523337, "o", "\r\n"] +[27.523401, "o", " 11 \r\n 12 def find_squares(lower_bound, upper_bound):\r\n 13 squares = []\r\n 14 value = lower_bound\r\n 15 while value <= upper_bound:\r\n 16 B-> if is_square(value):\r\n 17 squares.append(value)\r\n 18 value += 1\r\n 19 return squares\r\n 20 \r\n 21 \r\n(Pdb) "] +[27.979, "o", "\u001b[s\u001b[24;1H\u001b[7m we can check the value of squares \u001b[m\u001b[u"] +[29.575679, "o", "p"] +[29.715048, "o", "r"] +[29.825091, "o", "i"] +[29.95373, "o", "n"] +[30.072316, "o", "t"] +[30.198288, "o", "("] +[30.315144, "o", "s"] +[30.429754, "o", "q"] +[30.54417, "o", "u"] +[30.648343, "o", "a"] +[30.772575, "o", "r"] +[30.916994, "o", "e"] +[31.064668, "o", "s"] +[31.166977, "o", ")"] +[31.513016, "o", "\r\n"] +[31.513096, "o", "[]\r\n"] +[31.513132, "o", "(Pdb) "] +[32.513611, "o", "d"] +[32.659259, "o", "o"] +[32.767921, "o", "w"] +[32.884711, "o", "n"] +[33.204342, "o", "\r\n"] +[33.204452, "o", "> debugging/square_numbers.py(23)is_square()\r\n-> for i in range(1, value + 1):\r\n(Pdb) "] +[33.44, "o", "\u001b[s\u001b[24;1H\u001b[7m \u001b[m\u001b[u"] +[34.15866, "o", "s"] +[34.259468, "o", "t"] +[34.380843, "o", "e"] +[34.525734, "o", "p"] +[34.830548, "o", "\r\n> debugging/square_numbers.py(24)is_square()\r\n-> if i * i == value:\r\n(Pdb) "] +[35.777766, "o", "s"] +[35.916978, "o", "t"] +[36.065687, "o", "e"] +[36.201439, "o", "p"] +[36.51544, "o", "\r\n"] +[36.515526, "o", "> debugging/square_numbers.py(25)is_square()\r\n-> return True\r\n"] +[36.515557, "o", "(Pdb) "] +[36.744, "m", "Return from `is_square()`"] +[37.43589, "o", "s"] +[37.574683, "o", "t"] +[37.708649, "o", "e"] +[37.857879, "o", "p"] +[38.201763, "o", "\r\n"] +[38.20196, "o", "--Return--\r\n> debugging/square_numbers.py(25)is_square()->True\r\n-> return True\r\n(Pdb) "] +[39.111629, "o", "s"] +[39.254985, "o", "t"] +[39.385075, "o", "e"] +[39.502855, "o", "p"] +[39.806283, "o", "\r\n"] +[39.806416, "o", "> debugging/square_numbers.py(17)find_squares()\r\n-> squares.append(value)\r\n(Pdb) "] +[40.021, "m", "Show updated `squares` list"] +[40.657363, "o", "p"] +[40.762232, "o", "r"] +[40.912148, "o", "i"] +[41.051649, "o", "n"] +[41.195581, "o", "t"] +[41.319649, "o", "("] +[41.428762, "o", "s"] +[41.55563, "o", "q"] +[41.676762, "o", "u"] +[41.785445, "o", "a"] +[41.893803, "o", "r"] +[42.00703, "o", "e"] +[42.154767, "o", "s"] +[42.304376, "o", ")"] +[42.640528, "o", "\r\n[]\r\n"] +[42.640681, "o", "(Pdb) "] +[43.63773, "o", "s"] +[43.764392, "o", "t"] +[43.87365, "o", "e"] +[44.017718, "o", "p"] +[44.362371, "o", "\r\n"] +[44.362648, "o", "> debugging/square_numbers.py(18)find_squares()\r\n-> value += 1\r\n(Pdb) "] +[45.399711, "o", "p"] +[45.549327, "o", "r"] +[45.674679, "o", "i"] +[45.812784, "o", "n"] +[45.943807, "o", "t"] +[46.049968, "o", "("] +[46.166126, "o", "s"] +[46.269687, "o", "q"] +[46.414211, "o", "u"] +[46.515515, "o", "a"] +[46.642921, "o", "r"] +[46.751832, "o", "e"] +[46.859613, "o", "s"] +[46.967873, "o", ")"] +[47.312719, "o", "\r\n"] +[47.312858, "o", "[1]\r\n(Pdb) "] +[47.541, "o", "\u001b[s\u001b[24;1H\u001b[7m the value of squares has changed! \u001b[m\u001b[u"] +[48.231614, "o", "s"] +[48.382485, "o", "t"] +[48.509991, "o", "e"] +[48.625551, "o", "p"] +[48.944535, "o", "\r\n"] +[48.944639, "o", "> debugging/square_numbers.py(15)find_squares()\r\n-> while value <= upper_bound:\r\n"] +[48.944703, "o", "(Pdb) "] +[49.819614, "o", "s"] +[49.957695, "o", "t"] +[50.102433, "o", "e"] +[50.226523, "o", "p"] +[50.548852, "o", "\r\n"] +[50.548947, "o", "> debugging/square_numbers.py(16)find_squares()\r\n-> if is_square(value):\r\n(Pdb) "] +[51.484711, "o", "n"] +[51.623307, "o", "e"] +[51.743909, "o", "x"] +[51.875723, "o", "t"] +[52.178744, "o", "\r\n> debugging/square_numbers.py(18)find_squares()\r\n-> value += 1\r\n(Pdb) "] +[52.402, "o", "\u001b[s\u001b[24;1H\u001b[7m \u001b[m\u001b[u"] +[53.071081, "o", "p"] +[53.219911, "o", "r"] +[53.322578, "o", "i"] +[53.433516, "o", "n"] +[53.535592, "o", "t"] +[53.668051, "o", "("] +[53.800433, "o", "v"] +[53.91804, "o", "a"] +[54.02024, "o", "l"] +[54.142308, "o", "u"] +[54.251735, "o", "e"] +[54.37299, "o", ")"] +[54.692186, "o", "\r\n"] +[54.692295, "o", "2\b\n"] +[54.692321, "o", "(Pdb) "] +[55.711625, "o", "p"] +[55.846289, "o", "r"] +[55.97021, "o", "i"] +[56.0905, "o", "n"] +[56.196059, "o", "t"] +[56.326526, "o", "("] +[56.451928, "o", "s"] +[56.597488, "o", "q"] +[56.746219, "o", "u"] +[56.887395, "o", "a"] +[57.030623, "o", "r"] +[57.155689, "o", "e"] +[57.275173, "o", "s"] +[57.398813, "o", ")"] +[57.726129, "o", "\r\n"] +[57.726207, "o", "[1]\r\n(Pdb) "] +[57.947, "o", "\u001b[s\u001b[24;1H\u001b[7m the value of squares has not changed! \u001b[m\u001b[u"] +[57.947, "m", "Add a conditional breakpoint"] +[58.607099, "o", "c"] +[58.737681, "o", "l"] +[58.883347, "o", "e"] +[58.994825, "o", "a"] +[59.109159, "o", "r"] +[59.251787, "o", " "] +[59.384621, "o", "1"] +[60.534392, "o", "\r\n"] +[60.534425, "o", "Deleted breakpoint 1 at debugging/square_numbers.py:16\r\n(Pdb) "] +[62.586635, "o", "b"] +[62.728743, "o", "r"] +[62.863095, "o", "e"] +[62.972939, "o", "a"] +[63.083646, "o", "k"] +[63.227127, "o", " "] +[63.344054, "o", "1"] +[63.478808, "o", "8"] +[63.600774, "o", ","] +[63.724199, "o", " "] +[63.824876, "o", "v"] +[63.966245, "o", "a"] +[64.082401, "o", "l"] +[64.199346, "o", "u"] +[64.303515, "o", "e"] +[64.435082, "o", " "] +[64.574237, "o", "="] +[64.700165, "o", "="] +[64.824254, "o", " "] +[64.963366, "o", "4"] +[65.06824, "o", "9"] +[66.196277, "o", "\r\nBreakpoint 2 at debugging/square_numbers.py:18\r\n"] +[66.196373, "o", "(Pdb) "] +[66.652, "o", "\u001b[s\u001b[24;1H\u001b[7m \u001b[m\u001b[u"] +[68.248328, "o", "c"] +[68.392739, "o", "o"] +[68.516071, "o", "n"] +[68.621905, "o", "t"] +[68.771138, "o", "i"] +[68.894353, "o", "n"] +[69.031926, "o", "u"] +[69.136275, "o", "e"] +[69.477046, "o", "\r\n"] +[69.479688, "o", "> debugging/square_numbers.py(18)find_squares()\r\n-> value += 1\r\n(Pdb) "] +[69.697, "m", "Stop at the conditional breakpoint"] +[70.352751, "o", "p"] +[70.466919, "o", "r"] +[70.588438, "o", "i"] +[70.713067, "o", "n"] +[70.835375, "o", "t"] +[70.937003, "o", "("] +[71.067244, "o", "v"] +[71.204682, "o", "a"] +[71.354011, "o", "l"] +[71.48225, "o", "u"] +[71.628841, "o", "e"] +[71.77667, "o", ")"] +[72.08829, "o", "\r\n"] +[72.088374, "o", "49\r\n(Pdb) "] +[72.972917, "o", "p"] +[73.11125, "o", "r"] +[73.224163, "o", "i"] +[73.330112, "o", "n"] +[73.477669, "o", "t"] +[73.612016, "o", "("] +[73.76012, "o", "s"] +[73.876853, "o", "q"] +[73.987119, "o", "u"] +[74.094043, "o", "a"] +[74.241785, "o", "r"] +[74.350153, "o", "e"] +[74.490289, "o", "s"] +[74.601531, "o", ")"] +[75.745992, "o", "\r\n"] +[75.746119, "o", "[1, 4, 9, 16, 25, 36, 49]\r\n(Pdb) "] +[76.202, "m", "Continue until the script ends"] +[77.798742, "o", "c"] +[77.919531, "o", "o"] +[78.069038, "o", "n"] +[78.214485, "o", "t"] +[78.333852, "o", "i"] +[78.455246, "o", "n"] +[78.591434, "o", "u"] +[78.723284, "o", "e"] +[79.86969, "o", "\r\n"] +[79.87667, "o", "[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]\r\nThe program finished and will be restarted\r\n"] +[79.876846, "o", "> debugging/square_numbers.py(2)()\r\n-> \"\"\"\r\n(Pdb) "] +[81.921356, "o", "q"] +[82.066705, "o", "u"] +[82.183706, "o", "i"] +[82.302386, "o", "t"] +[83.421588, "o", "\r\n"] +[83.453566, "o", "\u001b[1m\u001b[32m(x1::debugging)\u001b[0m "] diff --git a/docs/community/training/debugging/square-numbers-pdb.yaml b/docs/community/training/debugging/square-numbers-pdb.yaml new file mode 100644 index 00000000..e5757827 --- /dev/null +++ b/docs/community/training/debugging/square-numbers-pdb.yaml @@ -0,0 +1,113 @@ +output_file: square-numbers-pdb.cast +start_delay: 0.3 +end_delay: 0.5 +typing_delay: +- 0.05 +- 0.1 +pre_nl_delay: +- 0.2 +- 0.2 +post_nl_delay: +- 0.8 +- 1.0 +with_comments: true +comments_at_top: false +actions: +- python3 -m pdb square_numbers.py +- action_id: Marker + label: Set a breakpoint +- break 16 +- continue +- action_id: Marker + label: Show current location +- action_id: Input + text: list + pre_nl_delay: 1 + post_nl_delay: 2 +- action_id: Input + text: print(value) + pre_nl_delay: 1 + post_nl_delay: 2 +- action_id: Marker + label: Step into `is_square()` +- step +- step +- action_id: Input + text: list + pre_nl_delay: 1 + post_nl_delay: 2 +- up +- action_id: Input + text: list + pre_nl_delay: 1 + post_nl_delay: 2 +- action_id: Comment + comment: we can check the value of squares +- print(squares) +- down +- action_id: Comment + comment: '' +- step +- step +- action_id: Marker + label: Return from `is_square()` +- step +- step +- action_id: Marker + label: Show updated `squares` list +- print(squares) +- step +- print(squares) +- action_id: Comment + comment: the value of squares has changed! +- step +- step +- next +- action_id: Comment + comment: '' +- print(value) +- print(squares) +- action_id: Comment + comment: the value of squares has not changed! +- action_id: Marker + label: Add a conditional breakpoint +- action_id: Input + text: clear 1 + pre_nl_delay: 1 + post_nl_delay: 2 +- action_id: Input + text: break 18, value == 49 + pre_nl_delay: 1 + post_nl_delay: 2 +- action_id: Comment + comment: '' +- continue +- action_id: Marker + label: Stop at the conditional breakpoint +- print(value) +- action_id: Input + text: print(squares) + pre_nl_delay: 1 + post_nl_delay: 2 +- action_id: Marker + label: Continue until the script ends +- action_id: Input + text: continue + pre_nl_delay: 1 + post_nl_delay: 2 +- action_id: Input + text: quit + pre_nl_delay: 1 + post_nl_delay: 2 +- action_id: Marker + label: END +- exit +filters: +- filter_id: RegexReplacementFilter + regex: /home/.*/git-is-my-lab-book/docs/community/training/ + replacement: '' +- filter_id: EndMarkerFilter + end_label: END +- filter_id: CommentFilter +cols: 80 +rows: 24 diff --git a/docs/community/training/debugging/square-numbers-r-debug.cast b/docs/community/training/debugging/square-numbers-r-debug.cast new file mode 100644 index 00000000..4071549e --- /dev/null +++ b/docs/community/training/debugging/square-numbers-r-debug.cast @@ -0,0 +1,344 @@ +{"version": 2, "width": 80, "height": 24, "timestamp": 1724309699, "env": {"SHELL": "/bin/bash", "TERM": "xterm-256color"}} +[0.00455, "o", "\u001b[!p\u001b[?3;4l\u001b[4l\u001b>\u001b[?1049h\u001b[22;0;0t\u001b[4l\u001b[?1h\u001b=\u001b[0m\u001b(B\u001b[1;24r"] +[0.006336, "o", "\u001b[H\u001b[2J\u001b[H\u001b[2J\u001b[23B\u001b[7m \u001b[H\u001b[27m\u001b[23B\u001b[7m \u001b[H\u001b[27m\u001b[23B\u001b[7m "] +[0.006552, "o", " \u001b[H\u001b[27m\u001b[23B\u001b[7m \u001b[H\u001b[27m\u001b[H\u001b[2J\u001b[23B\u001b[7m \u001b[H\u001b[27m\u001b[23B\u001b[7m \u001b[H\u001b[27m"] +[0.09039, "o", "\u001b[22;2t\u001b]2;(x1::debugging)\u0007\u001b[1m\u001b[32m(x1::debugging)\u001b[0m "] +[0.304088, "o", "R"] +[0.415607, "o", " "] +[0.531889, "o", "-"] +[0.672262, "o", "-"] +[0.806414, "o", "v"] +[0.926004, "o", "a"] +[1.043039, "o", "n"] +[1.173584, "o", "i"] +[1.283196, "o", "l"] +[1.416635, "o", "l"] +[1.56413, "o", "a"] +[1.877132, "o", "\r\n"] +[1.971441, "o", "\nR version 4.1.2 (2021-11-01) -- \"Bird Hippie\"\r\nCopyright (C) 2021 The R Foundation for Statistical Computing\r\nPlatform: x86_64-pc-linux-gnu (64-bit)\r\n\n"] +[1.971559, "o", "R is free software and comes with ABSOLUTELY NO WARRANTY."] +[1.978739, "o", "\r\nYou are welcome to redistribute it under certain conditions.\r\nType 'license()' or 'licence()' for distribution details.\r\n\n"] +[1.978835, "o", " Natural language support but running in an English locale"] +[1.978916, "o", "\r\n\nR is a collaborative project with many contributors.\r\nType 'contributors()' for more information and\r\n'citation()' on how to cite R or R packages in publications.\r\n\n"] +[1.978976, "o", "Type 'demo()' for some demos, 'help()' for on-line help, or\r\n'help.start()' for an HTML browser interface to help.\r\nType 'q()' to quit R.\r\n\n"] +[2.034508, "o", "> "] +[2.86178, "o", "s"] +[2.967229, "o", "o"] +[3.089083, "o", "u"] +[3.233999, "o", "r"] +[3.369285, "o", "c"] +[3.486092, "o", "e"] +[3.622908, "o", "("] +[3.734226, "o", "\""] +[3.838529, "o", "s"] +[3.946974, "o", "q"] +[4.064265, "o", "u"] +[4.18749, "o", "a"] +[4.301131, "o", "r"] +[4.442219, "o", "e"] +[4.552575, "o", "_"] +[4.659398, "o", "n"] +[4.763779, "o", "u"] +[4.893945, "o", "m"] +[5.037252, "o", "b"] +[5.167748, "o", "e"] +[5.314534, "o", "r"] +[5.451162, "o", "s"] +[5.594524, "o", "."] +[5.741346, "o", "R"] +[5.868718, "o", "\""] +[6.015841, "o", ")"] +[6.341221, "o", "\r\n"] +[6.344886, "o", "> "] +[6.568, "m", "Set a breakpoint"] +[7.28264, "o", "s"] +[7.416226, "o", "e"] +[7.533014, "o", "t"] +[7.678574, "o", "B"] +[7.791643, "o", "r"] +[7.909016, "o", "e"] +[8.022578, "o", "a"] +[8.140504, "o", "k"] +[8.24114, "o", "p"] +[8.372651, "o", "o"] +[8.487062, "o", "i"] +[8.590615, "o", "n"] +[8.721881, "o", "t"] +[8.830896, "o", "("] +[8.946638, "o", "\""] +[9.068739, "o", "s"] +[9.176684, "o", "q"] +[9.287765, "o", "u"] +[9.411795, "o", "a"] +[9.535745, "o", "r"] +[9.64875, "o", "e"] +[9.763848, "o", "_"] +[9.878487, "o", "n"] +[9.991631, "o", "u"] +[10.116163, "o", "m"] +[10.227031, "o", "b"] +[10.351718, "o", "e"] +[10.464431, "o", "r"] +[10.60671, "o", "s"] +[10.715636, "o", "."] +[10.85902, "o", "R"] +[10.96863, "o", "\""] +[11.10657, "o", ","] +[11.23705, "o", " "] +[11.347725, "o", "l"] +[11.486073, "o", "i"] +[11.59877, "o", "n"] +[11.703644, "o", "e"] +[11.834519, "o", " "] +[11.961648, "o", "="] +[12.093746, "o", " "] +[12.202604, "o", "1"] +[12.315274, "o", "7"] +[12.449695, "o", ","] +[12.554616, "o", " "] +[12.698691, "o", "v"] +[12.820439, "o", "e"] +[12.951302, "o", "r"] +[13.067187, "o", "b"] +[13.176404, "o", "o"] +[13.277364, "o", "s"] +[13.38834, "o", "e"] +[13.532154, "o", " "] +[13.681061, "o", "="] +[13.803397, "o", " "] +[13.922746, "o", "F"] +[14.036735, "o", "A"] +[14.185012, "o", "L"] +[14.288165, "o", "S"] +[14.409133, "o", "E"] +[14.517603, "o", ")"] +[14.83011, "o", "\r\n"] +[14.835182, "o", "> "] +[15.722028, "o", "m"] +[15.849793, "o", "a"] +[15.968532, "o", "i"] +[16.094208, "o", "n"] +[16.211254, "o", "("] +[16.325508, "o", ")"] +[16.640188, "o", "\r\u001b[1;23r\u001b[23;1H\n"] +[16.658652, "o", "square_numbers.R#17\r\nCalled from: find_squares(1, 100)\r\nBrowse[1]> "] +[17.58767, "o", "v"] +[17.732139, "o", "a"] +[17.879699, "o", "l"] +[17.981337, "o", "u"] +[18.127805, "o", "e"] +[19.235087, "o", "\r\n[1]"] +[19.235175, "o", " 1\r\nBrowse[1]> "] +[21.287437, "o", "s"] +[21.395783, "o", "q"] +[21.512685, "o", "u"] +[21.63194, "o", "a"] +[21.749592, "o", "r"] +[21.875549, "o", "e"] +[21.976246, "o", "s"] +[23.0988, "o", "\r\nNULL\r\nBrowse[1]> "] +[23.548, "m", "Step into `is_square()`"] +[25.151027, "o", "s"] +[25.476148, "o", "\r\n"] +[25.476372, "o", "debug: if (is_square(value)) {\r\n squares <- c(squares, value)\r\n}\b\n"] +[25.476583, "o", "Browse[2]> "] +[26.483369, "o", "s"] +[26.832082, "o", "\r\n"] +[26.847086, "o", "debugging in: is_square(value)\r\ndebug at square_numbers.R#26: {\r\n for (i in seq(value)) {\r\n if (i * i == value) {\r\n return(TRUE)\r\n }\r\n }\r\n FALSE\r\n}\b\nBrowse[3]> "] +[27.737967, "o", "n"] +[28.071989, "o", "\r\n"] +[28.072078, "o", "debug at square_numbers.R#27: for (i in seq(value)) {\r\n if (i * i == value) {\r\n return(TRUE)\r\n }\r\n}\b\nBrowse[3]> "] +[29.076572, "o", "n"] +[29.411181, "o", "\r\n"] +[29.411507, "o", "debug at square_numbers.R#28: "] +[29.411565, "o", "if (i * i == value) {\r\n return(TRUE)\r\n}\b\nBrowse[3]> "] +[29.654, "m", "Return from `is_square()`"] +[30.435409, "o", "n"] +[30.738328, "o", "\r\n"] +[30.738441, "o", "debug at square_numbers.R#29: return(TRUE)\r\nBrowse[3]> "] +[31.761898, "o", "n"] +[32.092409, "o", "\r\n"] +[32.092437, "o", "exiting from: "] +[32.092524, "o", "is_square(value)\r\ndebug at square_numbers.R#18: squares <- c(squares, value)\r\nBrowse[2]> "] +[32.954507, "o", "n"] +[33.293211, "o", "\r\n"] +[33.293317, "o", "debug at square_numbers.R#20: value <- value + 1\r\nBrowse[2]> "] +[33.505, "m", "Show updated `squares` list"] +[34.163351, "o", "s"] +[34.312893, "o", "q"] +[34.452296, "o", "u"] +[34.595714, "o", "a"] +[34.719919, "o", "r"] +[34.828623, "o", "e"] +[34.955549, "o", "s"] +[36.07832, "o", "\r\n"] +[36.078469, "o", "[1] 1\r\nBrowse[2]> "] +[36.528, "o", "\u001b[s\u001b[24;1H\u001b[7m the value of squares has changed! \u001b[m\u001b[u"] +[38.131156, "o", "c"] +[38.444153, "o", "\r\n"] +[38.444245, "o", "square_numbers.R#17\r\nCalled from: "] +[38.444297, "o", "find_squares(1, 100)\r\nBrowse[1]> "] +[39.492837, "o", "v"] +[39.628324, "o", "a"] +[39.764841, "o", "l"] +[39.901651, "o", "u"] +[40.027996, "o", "e"] +[41.13825, "o", "\r\n"] +[41.138383, "o", "[1] 2\r\nBrowse[1]> "] +[43.190236, "o", "s"] +[43.325996, "o", "q"] +[43.472941, "o", "u"] +[43.622595, "o", "a"] +[43.748148, "o", "r"] +[43.886045, "o", "e"] +[44.017067, "o", "s"] +[45.124471, "o", "\r\n[1] 1\r\n"] +[45.124585, "o", "Browse[1]> "] +[45.574, "o", "\u001b[s\u001b[24;1H\u001b[7m \u001b[m\u001b[u"] +[47.176419, "o", "Q"] +[47.521424, "o", "\r\n"] +[47.521515, "o", "> "] +[47.751, "m", "Add a conditional breakpoint"] +[48.480604, "o", "s"] +[48.589214, "o", "e"] +[48.696994, "o", "t"] +[48.80528, "o", "B"] +[48.949426, "o", "r"] +[49.074369, "o", "e"] +[49.191722, "o", "a"] +[49.341928, "o", "k"] +[49.469452, "o", "p"] +[49.584842, "o", "o"] +[49.703955, "o", "i"] +[49.838891, "o", "n"] +[49.945227, "o", "t"] +[50.083748, "o", "("] +[50.228099, "o", "\""] +[50.352037, "o", "s"] +[50.47386, "o", "q"] +[50.581507, "o", "u"] +[50.702747, "o", "a"] +[50.841454, "o", "r"] +[50.962346, "o", "e"] +[51.093814, "o", "_"] +[51.196355, "o", "n"] +[51.307591, "o", "u"] +[51.418031, "o", "m"] +[51.567649, "o", "b"] +[51.669802, "o", "e"] +[51.781139, "o", "r"] +[51.882983, "o", "s"] +[52.015879, "o", "."] +[52.148397, "o", "R"] +[52.266042, "o", "\""] +[52.368102, "o", ","] +[52.489718, "o", " "] +[52.598758, "o", "l"] +[52.720445, "o", "i"] +[52.83964, "o", "n"] +[52.95058, "o", "e"] +[53.092932, "o", " "] +[53.228037, "o", "="] +[53.351909, "o", " "] +[53.472059, "o", "2"] +[53.57811, "o", "0"] +[53.708697, "o", ","] +[53.833803, "o", " "] +[53.979878, "o", "t"] +[54.1286, "o", "r"] +[54.268838, "o", "a"] +[54.412825, "o", "c"] +[54.537633, "o", "e"] +[54.656639, "o", "r"] +[54.781081, "o", " "] +[54.907596, "o", "="] +[55.048962, "o", " "] +[55.156612, "o", "q"] +[55.286897, "o", "u"] +[55.432484, "o", "o"] +[55.54468, "o", "t"] +[55.659697, "o", "e"] +[55.801914, "o", "("] +[55.935148, "o", "i"] +[56.083958, "o", "f"] +[56.216197, "o", " "] +[56.364006, "o", "("] +[56.505431, "o", "v"] +[56.639482, "o", "a"] +[56.749378, "o", "l"] +[56.860467, "o", "u"] +[57.003772, "o", "e"] +[57.120596, "o", " "] +[57.255117, "o", "="] +[57.377252, "o", "="] +[57.500282, "o", " "] +[57.601036, "o", "4"] +[57.74248, "o", "9"] +[57.858314, "o", ")"] +[57.97551, "o", " "] +[58.079556, "o", "b \b"] +[58.211079, "o", "r"] +[58.350429, "o", "o"] +[58.476235, "o", "w"] +[58.600882, "o", "s"] +[58.739262, "o", "e"] +[58.844809, "o", "r"] +[58.972202, "o", "("] +[59.109927, "o", ")"] +[59.228463, "o", ")"] +[59.372722, "o", ","] +[59.496124, "o", " "] +[59.601956, "o", "v"] +[59.751576, "o", "e"] +[59.874262, "o", "r"] +[60.012181, "o", "b"] +[60.116483, "o", "o"] +[60.25698, "o", "s"] +[60.364876, "o", "e"] +[60.47172, "o", " "] +[60.585706, "o", "="] +[60.707447, "o", " "] +[60.831903, "o", "F"] +[60.953303, "o", "A"] +[61.055954, "o", "L"] +[61.185817, "o", "S"] +[61.323568, "o", "E"] +[61.472923, "o", ")"] +[62.601588, "o", "\r\n"] +[62.645289, "o", "> "] +[66.654799, "o", "m"] +[66.765057, "o", "a"] +[66.868912, "o", "i"] +[66.977638, "o", "n"] +[67.115364, "o", "("] +[67.228527, "o", ")"] +[67.534651, "o", "\r\n"] +[67.551885, "o", "Called from: eval(expr, p)\r\nBrowse[1]> "] +[67.77, "m", "Stop at the conditional breakpoint"] +[68.522321, "o", "v"] +[68.670681, "o", "a"] +[68.787303, "o", "l"] +[68.897257, "o", "u"] +[69.00444, "o", "e"] +[70.152773, "o", "\r\n"] +[70.152878, "o", "[1] 49\r\nBrowse[1]> "] +[72.205565, "o", "s"] +[72.316534, "o", "q"] +[72.460451, "o", "u"] +[72.563346, "o", "a"] +[72.682565, "o", "r"] +[72.802687, "o", "e"] +[72.952042, "o", "s"] +[74.098063, "o", "\r\n"] +[74.098181, "o", "[1] 1 4 9 16 25 36 49\r\nBrowse[1]> "] +[74.546, "o", "\u001b[s\u001b[24;1H\u001b[7m the value of squares has changed! \u001b[m\u001b[u"] +[74.546, "m", "Continue until the script ends"] +[76.148542, "o", "c"] +[77.285765, "o", "\r\n"] +[77.287026, "o", " [1] 1 4 9 16 25 36 49 64 81 100\r\n> "] +[78.137, "o", "\u001b[s\u001b[24;1H\u001b[7m \u001b[m\u001b[u"] +[81.341221, "o", "q"] +[81.476015, "o", "("] +[81.602225, "o", ")"] +[81.947227, "o", "\r\n"] +[81.965089, "o", "\u001b[1m\u001b[32m(x1::debugging)\u001b[0m "] diff --git a/docs/community/training/debugging/square-numbers-r-debug.yaml b/docs/community/training/debugging/square-numbers-r-debug.yaml new file mode 100644 index 00000000..36bd1b44 --- /dev/null +++ b/docs/community/training/debugging/square-numbers-r-debug.yaml @@ -0,0 +1,97 @@ +output_file: square-numbers-r-debug.cast +cols: 80 +rows: 24 +start_delay: 0.3 +end_delay: 0.5 +typing_delay: +- 0.05 +- 0.1 +pre_nl_delay: +- 0.2 +- 0.2 +post_nl_delay: +- 0.8 +- 1.0 +with_comments: true +comments_at_top: false +actions: +- R --vanilla +- source("square_numbers.R") +- action_id: Marker + label: Set a breakpoint +- setBreakpoint("square_numbers.R", line = 17, verbose = FALSE) +- main() +- action_id: Input + text: value + pre_nl_delay: 1 + post_nl_delay: 2 +- action_id: Input + text: squares + pre_nl_delay: 1 + post_nl_delay: 2 +- action_id: Marker + label: Step into `is_square()` +- s +- s +- n +- n +- action_id: Marker + label: Return from `is_square()` +- n +- n +- n +- action_id: Marker + label: Show updated `squares` list +- action_id: Input + text: squares + pre_nl_delay: 1 + post_nl_delay: 2 +- action_id: Comment + comment: the value of squares has changed! +- c +- action_id: Input + text: value + pre_nl_delay: 1 + post_nl_delay: 2 +- action_id: Input + text: squares + pre_nl_delay: 1 + post_nl_delay: 2 +- action_id: Comment + comment: '' +- Q +- action_id: Marker + label: Add a conditional breakpoint +- action_id: Input + text: setBreakpoint("square_numbers.R", line = 20, tracer = quote(if (value == 49) browser()), verbose = FALSE) + pre_nl_delay: 1 + post_nl_delay: 4 +- main() +- action_id: Marker + label: Stop at the conditional breakpoint +- action_id: Input + text: value + pre_nl_delay: 1 + post_nl_delay: 2 +- action_id: Input + text: squares + pre_nl_delay: 1 + post_nl_delay: 2 +- action_id: Comment + comment: the value of squares has changed! +- action_id: Marker + label: Continue until the script ends +- action_id: Input + text: c + pre_nl_delay: 1 + post_nl_delay: 4 +- action_id: Comment + comment: '' +- q() +- action_id: Marker + label: END +- exit +filters: +- filter_id: EndMarkerFilter + end_label: END +- filter_id: CommentFilter diff --git a/docs/community/training/debugging/square_numbers.R b/docs/community/training/debugging/square_numbers.R new file mode 100755 index 00000000..d664ea39 --- /dev/null +++ b/docs/community/training/debugging/square_numbers.R @@ -0,0 +1,37 @@ +#!/usr/bin/env -S Rscript --vanilla +# +# Print the square numbers between 1 and 100. +# + + +main <- function() { + squares <- find_squares(1, 100) + print(squares) +} + + +find_squares <- function(lower_bound, upper_bound) { + squares <- c() + value <- lower_bound + while (value <= upper_bound) { + if (is_square(value)) { + squares <- c(squares, value) + } + value <- value + 1 + } + squares +} + + +is_square <- function(value) { + for (i in seq(value)) { + if (i * i == value) { + return(TRUE) + } + } + FALSE +} + +if (! interactive()) { + main() +} diff --git a/docs/community/training/debugging/square_numbers.py b/docs/community/training/debugging/square_numbers.py new file mode 100755 index 00000000..dd300fde --- /dev/null +++ b/docs/community/training/debugging/square_numbers.py @@ -0,0 +1,30 @@ +#!/usr/bin/env python3 +""" +Print the square numbers between 1 and 100. +""" + + +def main(): + squares = find_squares(1, 100) + print(squares) + + +def find_squares(lower_bound, upper_bound): + squares = [] + value = lower_bound + while value <= upper_bound: + if is_square(value): + squares.append(value) + value += 1 + return squares + + +def is_square(value): + for i in range(1, value + 1): + if i * i == value: + return True + return False + + +if __name__ == '__main__': + main() diff --git a/docs/community/training/debugging/stacktrace.R b/docs/community/training/debugging/stacktrace.R new file mode 100755 index 00000000..3dc5607a --- /dev/null +++ b/docs/community/training/debugging/stacktrace.R @@ -0,0 +1,54 @@ +#!/usr/bin/env -S Rscript --vanilla + +options(error = rlang::entrace) + + +main <- function() { + do_big_tasks() + invisible(0) +} + +do_big_tasks <- function(num_tasks = 20, quiet = TRUE) { + for (i in seq_len(num_tasks)) { + prepare_things(i, quiet = quiet) + do_first_step(i, quiet = quiet) + do_second_step(i, quiet = quiet) + if (i > 15) { + do_third_step(i, quiet = quiet) + } + } +} + +prepare_things <- function(task_num, quiet = TRUE) { + if (!quiet) { + cat("Preparing for task #", task_num, "\n", sep = "") + } +} + +do_first_step <- function(task_num, quiet = TRUE) { + if (!quiet) { + cat("Task #", task_num, ": doing step #1\n", sep = "") + } +} + +do_second_step <- function(task_num, quiet = TRUE) { + if (!quiet) { + cat("Task #", task_num, ": doing step #2\n", sep = "") + } +} + +do_third_step <- function(task_num, quiet = TRUE) { + if (!quiet) { + cat("Task #", task_num, ": doing step #3\n", sep = "") + } + try_something() +} + +try_something <- function() { + stop("Whoops, this failed") +} + +if (! interactive()) { + status <- main() + quit(status = status) +} diff --git a/docs/community/training/debugging/stacktrace.py b/docs/community/training/debugging/stacktrace.py new file mode 100755 index 00000000..7ce5d5e9 --- /dev/null +++ b/docs/community/training/debugging/stacktrace.py @@ -0,0 +1,47 @@ +#!/usr/bin/env python3 + +import sys + + +def main(): + do_big_tasks() + return 0 + + +def do_big_tasks(num_tasks=20, quiet=True): + for i in range(num_tasks): + prepare_things(i, quiet=quiet) + do_first_step(i, quiet=quiet) + do_second_step(i, quiet=quiet) + if i > 15: + do_third_step(i, quiet=quiet) + + +def prepare_things(task_num, quiet=True): + if not quiet: + print(f'Preparing for task #{task_num}') + + +def do_first_step(task_num, quiet=True): + if not quiet: + print(f'Task #{task_num}: doing step #1') + + +def do_second_step(task_num, quiet=True): + if not quiet: + print(f'Task #{task_num}: doing step #2') + + +def do_third_step(task_num, quiet=True): + if not quiet: + print(f'Task #{task_num}: doing step #3') + try_something() + + +def try_something(): + raise ValueError('Whoops, this failed') + + +if __name__ == '__main__': + status = main() + sys.exit(status) diff --git a/docs/community/training/debugging/understanding-error-messages.md b/docs/community/training/debugging/understanding-error-messages.md new file mode 100644 index 00000000..0c9bd4c3 --- /dev/null +++ b/docs/community/training/debugging/understanding-error-messages.md @@ -0,0 +1,130 @@ +# Understanding error messages + +!!! tip + + The visible error and its root cause may be located in very different parts of your code. + +If there's an error in your code that causes the program to terminate, **read the error message** and see what it can tell you. + +Most of the time, the error message should allow you to identify: + +- **What went wrong?** + For example, did it try to read data from a file that does not exist? + +- **Where did this happen?** + On which line of which file did the error occur? + +## Stack traces + +When an error occurs, one useful piece of information is knowing which functions were called in order to make the error occur. + +Below we have example Python and R scripts that produce an error. + +!!! question + + Can you identify where the error occurred, just by looking at the error message? + +!!! tip + + R may not give you a useful stack trace unless you instruct it do so. + In the example, we use: + + ```R + options(error = rlang::entrace) + ``` + +=== "Overview" + + You can download each script and run them on your own computer: + + - [stacktrace.py](stacktrace.py) + - [stacktrace.R](stacktrace.R) + +=== "Python" + + The error message is: + + ```text + Traceback (most recent call last): + File "stacktrace.py", line 46, in + status = main() + File "stacktrace.py", line 7, in main + do_big_tasks() + File "stacktrace.py", line 17, in do_big_tasks + do_third_step(i, quiet=quiet) + File "stacktrace.py", line 38, in do_third_step + try_something() + File "stacktrace.py", line 42, in try_something + raise ValueError("Whoops, this failed") + ValueError: Whoops, this failed + ``` + + ??? info "Source code" + + ```py title="stacktrace.py" linenums="1" + --8<-- "stacktrace.py" + ``` + +=== "R" + + The error message is: + + ```text + Error in try_something() : Whoops, this failed + Calls: main -> do_big_tasks -> do_third_step -> try_something + Backtrace: + ▆ + 1. └─global main() + 2. └─global do_big_tasks() + 3. └─global do_third_step(i, quiet = quiet) + 4. └─global try_something() + Execution halted + ``` + + ??? info "Source code" + + ```R title="stacktrace.R" linenums="1" + --8<-- "stacktrace.R" + ``` + +## Very long stack traces + +You may get a very long stack trace when a error occurs deep within a software package or library. +This means that the **cause** of the error, and location where the error is **reported** can be very far apart. + +For example, the following Python script has an incorrect parameter name on line 7 (``cbap`` should instead be ``cmap``): + +```py title="long_stacktrace.py" linenums="1" hl_lines="7" +--8<-- "long_stacktrace.py" +``` + +And here is the stacktrace you should see when running this Python script: + +```text linenums="1" hl_lines="3 24" +Traceback (most recent call last): + File "long_stacktrace.py", line 7, in + plt.plot(example_counts, cbap=cm.Blues) + File "venv/lib/python3.10/site-packages/matplotlib/pyplot.py", line 3794, in plot + return gca().plot( + File "venv/lib/python3.10/site-packages/matplotlib/axes/_axes.py", line 1779, in plot + lines = [*self._get_lines(self, *args, data=data, **kwargs)] + File "venv/lib/python3.10/site-packages/matplotlib/axes/_base.py", line 296, in __call__ + yield from self._plot_args( + File "venv/lib/python3.10/site-packages/matplotlib/axes/_base.py", line 534, in _plot_args + return [l[0] for l in result] + File "venv/lib/python3.10/site-packages/matplotlib/axes/_base.py", line 534, in + return [l[0] for l in result] + File "venv/lib/python3.10/site-packages/matplotlib/axes/_base.py", line 527, in + result = (make_artist(axes, x[:, j % ncx], y[:, j % ncy], kw, + File "venv/lib/python3.10/site-packages/matplotlib/axes/_base.py", line 335, in _makeline + seg = mlines.Line2D(x, y, **kw) + File "venv/lib/python3.10/site-packages/matplotlib/lines.py", line 407, in __init__ + self._internal_update(kwargs) + File "venv/lib/python3.10/site-packages/matplotlib/artist.py", line 1216, in _internal_update + return self._update_props( + File "venv/lib/python3.10/site-packages/matplotlib/artist.py", line 1190, in _update_props + raise AttributeError( +AttributeError: Line2D.set() got an unexpected keyword argument 'cbap' +``` + +While it **does** tell you the cause of the error, there are **ten function calls** between the root cause (line 3 of the stack trace) and the error (line 24 of the stack trace). diff --git a/docs/community/training/debugging/using-a-debugger.md b/docs/community/training/debugging/using-a-debugger.md new file mode 100644 index 00000000..37a9b0e6 --- /dev/null +++ b/docs/community/training/debugging/using-a-debugger.md @@ -0,0 +1,51 @@ +# Using a debugger + +The main features of a debugger are: + +- **Breakpoints:** pause the program when a particular line of code is about to be executed; + +- **Display/print:** show the current value of local variables; + +- **Next:** execute the current line of code and pause at the next line; + +- **Continue:** continue executing code until the next breakpoint, or the code finishes. + +Slightly more advanced features include: + +- **Conditional breakpoints:** pause the program when a particular line of code is about to be executed **and** a specific condition is satisfied. + +- **Step:** execute the current line of code and pause at the first possible point — either the line in the current function **or** the first line in a function that is called. + +- **Manual breakpoints:** call [`breakpoint()`](https://docs.python.org/3/library/pdb.html) in Python, and [`browser()`](https://adv-r.hadley.nz/debugging.html#browser) in R, to pause the program at the current line. + +For example, consider the following code example: + +=== "Python" + + ```py title="first_demo.py" linenums="1" hl_lines="4" + --8<-- "first_demo.py" + ``` + +=== "R" + + ```R title="first_demo.R" linenums="1" hl_lines="4" + --8<-- "first_demo.R" + ``` + +- We can use a **conditional breakpoint** to pause on line 4 (highlighted) only when `x = 42`. + +- We can then use **step** to begin executing line 4 and pause on line 11, where we will see that `a = 42`. + +- If we instead used **next** at line 4 (highlighted), the debugger would execute line 4 and then pause on line 5. + +## Try this yourself + +Download either demo script and try setting breakpoints and stepping through the code. + +- [first_demo.py](first_demo.py) +- [first_demo.R](first_demo.R) + +!!! tip "Interactive debugger sessions" + + If your editor supports running a debugger, **use this feature!** + See these examples for [RStudio](https://support.posit.co/hc/en-us/articles/205612627-Debugging-with-the-RStudio-IDE), [PyCharm](https://www.jetbrains.com/pycharm/features/debugger.html), [Spyder](https://docs.spyder-ide.org/current/panes/debugging.html), and [VS Code](https://code.visualstudio.com/docs/editor/debugging). diff --git a/docs/community/training/debugging/what-is-debugging.md b/docs/community/training/debugging/what-is-debugging.md new file mode 100644 index 00000000..cc3e6528 --- /dev/null +++ b/docs/community/training/debugging/what-is-debugging.md @@ -0,0 +1,79 @@ +# What is debugging? + +!!! info + + Debugging is the process of identifying and removing errors from computer software. + +You need to **identify (and reproduce) the problem** and **only then** begin fixing it. + +## Action 1: Identify the error + +!!! tip + + First make sure that you can reproduce the error. + +- What observations or outputs indicate the presence of this error? + +- Is the error reproducible, or does it come and go? + +- Can you write a test case that identifies the error? + This can help ensure you don't introduce a similar error in the future. + +## Action 2: Develop a plan + +!!! tip + + The visible error and its root cause may be located in very different parts of your code. + +- Identify which parts of your code are likely (and unlikely) to be the cause. + +- What parts of your code recently changed? + +- When was the last time you might have noticed this error? + +## Action 3: Search for the root cause + +!!! tip + + The search should be guided by **facts**, not **assumptions**. + Simple errors can often hide **in plain sight**. + +- Thinking "this looks right" is **not a reliable indicator** of whether a piece of code contains an error. + +- Our assumptions about the code can help us to develop a plan, but we need to **verify whether our assumptions are actually true**. + +- This can be done indirectly by adding print statements or writing test cases. + +- It can also be done by directly inspecting the state of the program with a debugger — more on that shortly! + +
+ ![A horse with its head buried in a haystack.](headless-horse.jpg){ align=left, width="50%" } +
Searching at random is like looking for a needle in a haystack. +
+ ([Perry McKenna](https://flickr.com/photos/63567936@N00/4210167891/), Flickr, 2009; CC BY 2.0) +
+
+ +## Action 4: Fix the root cause + +!!! tip + + It's worth considering if the root cause is a result of deliberate decisions or unintentional mistakes. + +- Don't start modifying/adding/removing lines based on suspicions or relying on luck. + +- Without identifying the **root cause**, making the visible error disappear may not fix the root cause. + +## Action 5: After it's fixed + +!!! tip + + This is the perfect time to reflect on your experience! + +- What can you learn from this experience? + +- Can you avoid this mistake in the future? + +- What parts of the process were the hardest or took the longest? + +- Are the tools and techniques that might help you next time? diff --git a/docs/community/training/debugging/when-something-fails.md b/docs/community/training/debugging/when-something-fails.md new file mode 100644 index 00000000..92c07632 --- /dev/null +++ b/docs/community/training/debugging/when-something-fails.md @@ -0,0 +1,47 @@ +# When something fails + +You may want to create a breakpoint when an error occurs. + +In Python, you can use a `try` statement to catch exceptions and create a breakpoint: + +```py linenums="1" hl_lines="8" +def print_c(data): + print(data['c']) + +x = {'a': 1, 'b': 2} +try: + print_c(x) +except KeyError: + breakpoint() +``` + +In R, you can take a similar approach and use `tryCatch()`: + +```R linenums="1" hl_lines="12" +f <- function(x) { + if (x == 10) { stop("ten") } + x +} + +g <- function(x_max) { + result <- tryCatch( + sapply(seq_len(x_max), f), + error = function(e) NULL + ) + if (is.null(result)) { + browser() + } + result +} + +g(9) # This completes without an error. +g(12) # This triggers the breakpoint. +``` + +In R, you can also define a global error handler (e.g., `browser` or `recover`): + +```R linenums="19" +options(error=recover) + +g(12) +``` diff --git a/docs/community/training/debugging/why-are-debuggers-useful.md b/docs/community/training/debugging/why-are-debuggers-useful.md new file mode 100644 index 00000000..ba755e4a --- /dev/null +++ b/docs/community/training/debugging/why-are-debuggers-useful.md @@ -0,0 +1,25 @@ +# Why are debuggers useful? + +!!! tip + + A debugger is a tool for examining the state of a running program. + + Debuggers are useful because they show us what the code **is actually doing**. + +Many of the errors that take a long time for us to find are relatively simple **once we find them**. + +We usually have a hard time finding these errors because: + +1. **We read what we expect to see**, rather than what is actually written; and + +2. **We rely on assumptions** about where the mistake might be, and our intuition is often wrong. + +Here are some common mistakes that can be difficult to identify when reading through your own code: + +- Using an incorrect index into an array, matrix, list, etc; + +- Using incorrect bounds on a loop or sequence; + +- Confusing the digit "1" with letter "l"; + +- Confusing the digit "0" with letter "O". diff --git a/docs/extra/asciinema-player.css b/docs/extra/asciinema-player.css index 3688b233..a942eedf 100644 --- a/docs/extra/asciinema-player.css +++ b/docs/extra/asciinema-player.css @@ -36,9 +36,6 @@ div.ap-wrapper:fullscreen { width: 100%; align-items: center; } -div.ap-wrapper:fullscreen div.ap-player { - position: static; -} div.ap-wrapper:fullscreen .title-bar { display: initial; } @@ -77,113 +74,101 @@ div.ap-wrapper div.ap-player { --term-color-14: var(--term-color-6); --term-color-15: var(--term-color-7); } -.ap-player .fg-default { - color: var(--term-color-foreground); -} -.ap-player .fg-bg { - color: var(--term-color-background); -} -.ap-player .bg-default { - background-color: var(--term-color-background); -} -.ap-player .bg-fg { - background-color: var(--term-color-foreground); -} .ap-player .fg-0 { - color: var(--term-color-0); + --fg: var(--term-color-0); } .ap-player .bg-0 { - background-color: var(--term-color-0); + --bg: var(--term-color-0); } .ap-player .fg-1 { - color: var(--term-color-1); + --fg: var(--term-color-1); } .ap-player .bg-1 { - background-color: var(--term-color-1); + --bg: var(--term-color-1); } .ap-player .fg-2 { - color: var(--term-color-2); + --fg: var(--term-color-2); } .ap-player .bg-2 { - background-color: var(--term-color-2); + --bg: var(--term-color-2); } .ap-player .fg-3 { - color: var(--term-color-3); + --fg: var(--term-color-3); } .ap-player .bg-3 { - background-color: var(--term-color-3); + --bg: var(--term-color-3); } .ap-player .fg-4 { - color: var(--term-color-4); + --fg: var(--term-color-4); } .ap-player .bg-4 { - background-color: var(--term-color-4); + --bg: var(--term-color-4); } .ap-player .fg-5 { - color: var(--term-color-5); + --fg: var(--term-color-5); } .ap-player .bg-5 { - background-color: var(--term-color-5); + --bg: var(--term-color-5); } .ap-player .fg-6 { - color: var(--term-color-6); + --fg: var(--term-color-6); } .ap-player .bg-6 { - background-color: var(--term-color-6); + --bg: var(--term-color-6); } .ap-player .fg-7 { - color: var(--term-color-7); + --fg: var(--term-color-7); } .ap-player .bg-7 { - background-color: var(--term-color-7); + --bg: var(--term-color-7); } .ap-player .fg-8 { - color: var(--term-color-8); + --fg: var(--term-color-8); } .ap-player .bg-8 { - background-color: var(--term-color-8); + --bg: var(--term-color-8); } .ap-player .fg-9 { - color: var(--term-color-9); + --fg: var(--term-color-9); } .ap-player .bg-9 { - background-color: var(--term-color-9); + --bg: var(--term-color-9); } .ap-player .fg-10 { - color: var(--term-color-10); + --fg: var(--term-color-10); } .ap-player .bg-10 { - background-color: var(--term-color-10); + --bg: var(--term-color-10); } .ap-player .fg-11 { - color: var(--term-color-11); + --fg: var(--term-color-11); } .ap-player .bg-11 { - background-color: var(--term-color-11); + --bg: var(--term-color-11); } .ap-player .fg-12 { - color: var(--term-color-12); + --fg: var(--term-color-12); } .ap-player .bg-12 { - background-color: var(--term-color-12); + --bg: var(--term-color-12); } .ap-player .fg-13 { - color: var(--term-color-13); + --fg: var(--term-color-13); } .ap-player .bg-13 { - background-color: var(--term-color-13); + --bg: var(--term-color-13); } .ap-player .fg-14 { - color: var(--term-color-14); + --fg: var(--term-color-14); } .ap-player .bg-14 { - background-color: var(--term-color-14); + --bg: var(--term-color-14); } .ap-player .fg-15 { - color: var(--term-color-15); + --fg: var(--term-color-15); } .ap-player .bg-15 { - background-color: var(--term-color-15); + --bg: var(--term-color-15); } .ap-player .fg-8, .ap-player .fg-9, @@ -211,6 +196,8 @@ pre.ap-terminal { color: var(--term-color-foreground); background-color: var(--term-color-background); border-color: var(--term-color-background); + outline: none; + line-height: var(--term-line-height); font-family: Consolas, Menlo, 'Bitstream Vera Sans Mono', monospace, 'Powerline Symbols'; font-variant-ligatures: none; } @@ -225,26 +212,209 @@ pre.ap-terminal .ap-line span { } pre.ap-terminal .ap-line { display: block; - width: 200%; + width: 100%; + height: var(--term-line-height); + position: relative; } -pre.ap-terminal .ap-line .ap-cursor-a { - display: inline-block; +pre.ap-terminal .ap-line span { + position: absolute; + left: calc(100% * var(--offset) / var(--term-cols)); + color: var(--fg); + background-color: var(--bg); } -pre.ap-terminal .ap-line .ap-cursor-b { - display: none; - border-radius: 0.05em; +pre.ap-terminal .ap-line .ap-inverse { + color: var(--bg); + background-color: var(--fg); } -pre.ap-terminal .ap-line .ap-blink { - visibility: hidden; +pre.ap-terminal .ap-line .cp-2580 { + border-top: calc(0.5 * var(--term-line-height)) solid var(--fg); + box-sizing: border-box; } -pre.ap-terminal.ap-cursor .ap-line .ap-cursor-a { - display: none; +pre.ap-terminal .ap-line .cp-2581 { + border-bottom: calc(0.125 * var(--term-line-height)) solid var(--fg); + box-sizing: border-box; } -pre.ap-terminal.ap-cursor .ap-line .ap-cursor-b { - display: inline-block; +pre.ap-terminal .ap-line .cp-2582 { + border-bottom: calc(0.25 * var(--term-line-height)) solid var(--fg); + box-sizing: border-box; } -pre.ap-terminal.ap-blink .ap-line .ap-blink { - visibility: visible; +pre.ap-terminal .ap-line .cp-2583 { + border-bottom: calc(0.375 * var(--term-line-height)) solid var(--fg); + box-sizing: border-box; +} +pre.ap-terminal .ap-line .cp-2584 { + border-bottom: calc(0.5 * var(--term-line-height)) solid var(--fg); + box-sizing: border-box; +} +pre.ap-terminal .ap-line .cp-2585 { + border-bottom: calc(0.625 * var(--term-line-height)) solid var(--fg); + box-sizing: border-box; +} +pre.ap-terminal .ap-line .cp-2586 { + border-bottom: calc(0.75 * var(--term-line-height)) solid var(--fg); + box-sizing: border-box; +} +pre.ap-terminal .ap-line .cp-2587 { + border-bottom: calc(0.875 * var(--term-line-height)) solid var(--fg); + box-sizing: border-box; +} +pre.ap-terminal .ap-line .cp-2588 { + background-color: var(--fg); +} +pre.ap-terminal .ap-line .cp-2589 { + border-left: 0.875ch solid var(--fg); + box-sizing: border-box; +} +pre.ap-terminal .ap-line .cp-258a { + border-left: 0.75ch solid var(--fg); + box-sizing: border-box; +} +pre.ap-terminal .ap-line .cp-258b { + border-left: 0.625ch solid var(--fg); + box-sizing: border-box; +} +pre.ap-terminal .ap-line .cp-258c { + border-left: 0.5ch solid var(--fg); + box-sizing: border-box; +} +pre.ap-terminal .ap-line .cp-258d { + border-left: 0.375ch solid var(--fg); + box-sizing: border-box; +} +pre.ap-terminal .ap-line .cp-258e { + border-left: 0.25ch solid var(--fg); + box-sizing: border-box; +} +pre.ap-terminal .ap-line .cp-258f { + border-left: 0.125ch solid var(--fg); + box-sizing: border-box; +} +pre.ap-terminal .ap-line .cp-2590 { + border-right: 0.5ch solid var(--fg); + box-sizing: border-box; +} +pre.ap-terminal .ap-line .cp-2591 { + background-color: color-mix(in srgb, var(--fg) 25%, var(--bg)); +} +pre.ap-terminal .ap-line .cp-2592 { + background-color: color-mix(in srgb, var(--fg) 50%, var(--bg)); +} +pre.ap-terminal .ap-line .cp-2593 { + background-color: color-mix(in srgb, var(--fg) 75%, var(--bg)); +} +pre.ap-terminal .ap-line .cp-2594 { + border-top: calc(0.125 * var(--term-line-height)) solid var(--fg); + box-sizing: border-box; +} +pre.ap-terminal .ap-line .cp-2595 { + border-right: 0.125ch solid var(--fg); + box-sizing: border-box; +} +pre.ap-terminal .ap-line .cp-2596 { + border-right: 0.5ch solid var(--bg); + border-top: calc(0.5 * var(--term-line-height)) solid var(--bg); + background-color: var(--fg); + box-sizing: border-box; +} +pre.ap-terminal .ap-line .cp-2597 { + border-left: 0.5ch solid var(--bg); + border-top: calc(0.5 * var(--term-line-height)) solid var(--bg); + background-color: var(--fg); + box-sizing: border-box; +} +pre.ap-terminal .ap-line .cp-2598 { + border-right: 0.5ch solid var(--bg); + border-bottom: calc(0.5 * var(--term-line-height)) solid var(--bg); + background-color: var(--fg); + box-sizing: border-box; +} +pre.ap-terminal .ap-line .cp-2599 { + border-left: 0.5ch solid var(--fg); + border-bottom: calc(0.5 * var(--term-line-height)) solid var(--fg); + box-sizing: border-box; +} +pre.ap-terminal .ap-line .cp-259a { + box-sizing: border-box; +} +pre.ap-terminal .ap-line .cp-259a::before, +pre.ap-terminal .ap-line .cp-259a::after { + content: ''; + position: absolute; + width: 0.5ch; + height: calc(0.5 * var(--term-line-height)); + background-color: var(--fg); +} +pre.ap-terminal .ap-line .cp-259a::before { + top: 0; + left: 0; +} +pre.ap-terminal .ap-line .cp-259a::after { + bottom: 0; + right: 0; +} +pre.ap-terminal .ap-line .cp-259b { + border-left: 0.5ch solid var(--fg); + border-top: calc(0.5 * var(--term-line-height)) solid var(--fg); + box-sizing: border-box; +} +pre.ap-terminal .ap-line .cp-259c { + border-right: 0.5ch solid var(--fg); + border-top: calc(0.5 * var(--term-line-height)) solid var(--fg); + box-sizing: border-box; +} +pre.ap-terminal .ap-line .cp-259d { + border-left: 0.5ch solid var(--bg); + border-bottom: calc(0.5 * var(--term-line-height)) solid var(--bg); + background-color: var(--fg); + box-sizing: border-box; +} +pre.ap-terminal .ap-line .cp-259e { + box-sizing: border-box; +} +pre.ap-terminal .ap-line .cp-259e::before, +pre.ap-terminal .ap-line .cp-259e::after { + content: ''; + position: absolute; + width: 0.5ch; + height: calc(0.5 * var(--term-line-height)); + background-color: var(--fg); +} +pre.ap-terminal .ap-line .cp-259e::before { + top: 0; + right: 0; +} +pre.ap-terminal .ap-line .cp-259e::after { + bottom: 0; + left: 0; +} +pre.ap-terminal .ap-line .cp-259f { + border-right: 0.5ch solid var(--fg); + border-bottom: calc(0.5 * var(--term-line-height)) solid var(--fg); + box-sizing: border-box; +} +pre.ap-terminal .ap-line .cp-e0b0 { + border-left: 1ch solid var(--fg); + border-top: calc(0.5 * var(--term-line-height)) solid transparent; + border-bottom: calc(0.5 * var(--term-line-height)) solid transparent; + box-sizing: border-box; +} +pre.ap-terminal .ap-line .cp-e0b2 { + border-right: 1ch solid var(--fg); + border-top: calc(0.5 * var(--term-line-height)) solid transparent; + border-bottom: calc(0.5 * var(--term-line-height)) solid transparent; + box-sizing: border-box; +} +pre.ap-terminal.ap-cursor-on .ap-line .ap-cursor { + color: var(--bg); + background-color: var(--fg); + border-radius: 0.05em; +} +pre.ap-terminal.ap-cursor-on .ap-line .ap-cursor.ap-inverse { + color: var(--fg); + background-color: var(--bg); +} +pre.ap-terminal:not(.ap-blink) .ap-line .ap-blink { + color: transparent; } pre.ap-terminal .ap-bright { font-weight: bold; @@ -261,14 +431,17 @@ pre.ap-terminal .ap-italic { pre.ap-terminal .ap-strikethrough { text-decoration: line-through; } +.ap-line span { + --fg: var(--term-color-foreground); + --bg: var(--term-color-background); +} div.ap-player div.ap-control-bar { width: 100%; height: 32px; display: flex; justify-content: space-between; align-items: stretch; - background: linear-gradient(to bottom, rgba(0, 0, 0, 0.5) 0%, #000000 25%, #000000 100%); - color: #bbb; + color: var(--term-color-foreground); box-sizing: content-box; line-height: 1; position: absolute; @@ -277,19 +450,17 @@ div.ap-player div.ap-control-bar { opacity: 0; transition: opacity 0.15s linear; user-select: none; + border-top: 2px solid color-mix(in oklab, black 33%, var(--term-color-background)); z-index: 30; } div.ap-player div.ap-control-bar * { box-sizing: inherit; - font-size: 0; - font-family: Helvetica, Arial, sans-serif; - font-weight: bold; } div.ap-control-bar svg.ap-icon path { - fill: #bbb; + fill: var(--term-color-foreground); } div.ap-control-bar span.ap-playback-button { - display: block; + display: flex; flex: 0 0 auto; cursor: pointer; height: 12px; @@ -301,19 +472,21 @@ div.ap-control-bar span.ap-playback-button svg { width: 12px; } div.ap-control-bar span.ap-timer { - display: block; + display: flex; flex: 0 0 auto; min-width: 50px; margin: 0 10px; height: 100%; text-align: center; - font-size: 11px; - line-height: 34px; + font-size: 13px; + line-height: 100%; cursor: default; } div.ap-control-bar span.ap-timer span { - display: inline-block; + font-family: Consolas, Menlo, 'Bitstream Vera Sans Mono', monospace; font-size: inherit; + font-weight: 600; + margin: auto; } div.ap-control-bar span.ap-timer .ap-time-remaining { display: none; @@ -322,7 +495,7 @@ div.ap-control-bar span.ap-timer:hover .ap-time-elapsed { display: none; } div.ap-control-bar span.ap-timer:hover .ap-time-remaining { - display: inline; + display: flex; } div.ap-control-bar .ap-progressbar { display: block; @@ -344,14 +517,15 @@ div.ap-control-bar .ap-progressbar .ap-bar .ap-gutter { left: 0; right: 0; height: 3px; - background-color: #333; } -div.ap-control-bar .ap-progressbar .ap-bar .ap-gutter .ap-gutter-fill { - display: inline-block; - height: 100%; - background-color: #bbb; +div.ap-control-bar .ap-progressbar .ap-bar .ap-gutter-empty { + background-color: color-mix(in oklab, var(--term-color-foreground) 20%, var(--term-color-background)); +} +div.ap-control-bar .ap-progressbar .ap-bar .ap-gutter-full { + width: 100%; + transform-origin: left center; + background-color: var(--term-color-foreground); border-radius: 3px; - z-index: 10; } div.ap-control-bar.ap-seekable .ap-progressbar .ap-bar { cursor: pointer; @@ -363,24 +537,30 @@ div.ap-control-bar .ap-fullscreen-button { height: 14px; padding: 9px; cursor: pointer; + position: relative; } div.ap-control-bar .ap-fullscreen-button svg { width: 14px; height: 14px; } -div.ap-control-bar .ap-fullscreen-button svg:first-child { +div.ap-control-bar .ap-fullscreen-button svg.ap-icon-fullscreen-on { display: inline; } -div.ap-control-bar .ap-fullscreen-button svg:last-child { +div.ap-control-bar .ap-fullscreen-button svg.ap-icon-fullscreen-off { display: none; } +div.ap-control-bar .ap-fullscreen-button .ap-tooltip { + right: 5px; + left: initial; + transform: none; +} div.ap-wrapper.ap-hud .ap-control-bar { opacity: 1; } -div.ap-wrapper:fullscreen .ap-fullscreen-button svg:first-child { +div.ap-wrapper:fullscreen .ap-fullscreen-button svg.ap-icon-fullscreen-on { display: none; } -div.ap-wrapper:fullscreen .ap-fullscreen-button svg:last-child { +div.ap-wrapper:fullscreen .ap-fullscreen-button svg.ap-icon-fullscreen-off { display: inline; } span.ap-progressbar span.ap-marker-container { @@ -390,7 +570,6 @@ span.ap-progressbar span.ap-marker-container { width: 21px; position: absolute; margin-left: -10px; - z-index: 9; } span.ap-marker-container span.ap-marker { display: block; @@ -398,40 +577,42 @@ span.ap-marker-container span.ap-marker { bottom: 12px; left: 7px; right: 7px; - background-color: #555; + background-color: color-mix(in oklab, var(--term-color-foreground) 33%, var(--term-color-background)); position: absolute; transition: top 0.1s, bottom 0.1s, left 0.1s, right 0.1s, background-color 0.1s; border-radius: 50%; } span.ap-marker-container span.ap-marker.ap-marker-past { - background-color: #bbb; + background-color: var(--term-color-foreground); } span.ap-marker-container span.ap-marker:hover, span.ap-marker-container:hover span.ap-marker { - background-color: #bbb; + background-color: var(--term-color-foreground); top: 11px; bottom: 10px; left: 5px; right: 5px; } -span.ap-marker-container span.ap-marker-tooltip { +.ap-tooltip-container span.ap-tooltip { visibility: hidden; - background-color: #333; - color: #bbb; + background-color: var(--term-color-foreground); + color: var(--term-color-background); + font-family: Consolas, Menlo, 'Bitstream Vera Sans Mono', monospace; + font-weight: bold; text-align: center; - padding: 2px 8px 0px 8px; + padding: 0 0.5em; border-radius: 4px; position: absolute; z-index: 1; white-space: nowrap; /* Prevents the text from wrapping and makes sure the tooltip width adapts to the text length */ - font-size: 11px; + font-size: 13px; line-height: 2em; bottom: 100%; left: 50%; transform: translateX(-50%); } -span.ap-marker-container:hover span.ap-marker-tooltip { +.ap-tooltip-container:hover span.ap-tooltip { visibility: visible; } .ap-player .ap-overlay { @@ -474,7 +655,7 @@ span.ap-marker-container:hover span.ap-marker-tooltip { height: 100%; } .ap-player .ap-overlay-start .ap-play-button svg { - filter: drop-shadow(0px 0px 5px var(--term-color-background)); + filter: drop-shadow(0px 0px 5px rgba(0, 0, 0, 0.4)); } .ap-player .ap-overlay-loading .ap-loader { width: 48px; @@ -488,10 +669,14 @@ span.ap-marker-container:hover span.ap-marker-tooltip { box-sizing: border-box; animation: ap-loader-rotation 1s linear infinite; } +.ap-player .ap-overlay-info { + background-color: var(--term-color-background); +} .ap-player .ap-overlay-info span { font-family: Consolas, Menlo, 'Bitstream Vera Sans Mono', monospace, 'Powerline Symbols'; font-variant-ligatures: none; font-size: 2em; + color: var(--term-color-foreground); } .ap-player .ap-overlay-info span .ap-line { letter-spacing: normal; @@ -502,6 +687,56 @@ span.ap-marker-container:hover span.ap-marker-tooltip { display: inline-block; height: 100%; } +.ap-player .ap-overlay-help { + background-color: rgba(0, 0, 0, 0.8); + container-type: inline-size; +} +.ap-player .ap-overlay-help > div { + font-family: Consolas, Menlo, 'Bitstream Vera Sans Mono', monospace, 'Powerline Symbols'; + font-variant-ligatures: none; + max-width: 85%; + max-height: 85%; + font-size: 18px; + color: var(--term-color-foreground); + background-color: var(--term-color-background); + border-radius: 6px; + box-sizing: border-box; + margin-bottom: 32px; +} +.ap-player .ap-overlay-help > div .ap-line { + letter-spacing: normal; + overflow: hidden; +} +.ap-player .ap-overlay-help > div .ap-line span { + padding: 0; + display: inline-block; + height: 100%; +} +.ap-player .ap-overlay-help > div div { + padding: calc(min(4cqw, 40px)); + font-size: calc(min(1.9cqw, 18px)); +} +.ap-player .ap-overlay-help > div div p { + font-weight: bold; + margin: 0 0 2em 0; +} +.ap-player .ap-overlay-help > div div ul { + list-style: none; + padding: 0; +} +.ap-player .ap-overlay-help > div div ul li { + margin: 0 0 0.75em 0; +} +.ap-player .ap-overlay-help > div div kbd { + color: var(--term-color-background); + background-color: var(--term-color-foreground); + padding: 0.2em 0.5em; + border-radius: 0.2em; + font-family: inherit; + font-size: 0.85em; + border: none; + margin: 0; +} .ap-player .ap-overlay-error span { font-size: 8em; } @@ -514,1444 +749,1444 @@ span.ap-marker-container:hover span.ap-marker-tooltip { } } .ap-terminal .fg-16 { - color: #000000; + --fg: #000000; } .ap-terminal .bg-16 { - background-color: #000000; + --bg: #000000; } .ap-terminal .fg-17 { - color: #00005f; + --fg: #00005f; } .ap-terminal .bg-17 { - background-color: #00005f; + --bg: #00005f; } .ap-terminal .fg-18 { - color: #000087; + --fg: #000087; } .ap-terminal .bg-18 { - background-color: #000087; + --bg: #000087; } .ap-terminal .fg-19 { - color: #0000af; + --fg: #0000af; } .ap-terminal .bg-19 { - background-color: #0000af; + --bg: #0000af; } .ap-terminal .fg-20 { - color: #0000d7; + --fg: #0000d7; } .ap-terminal .bg-20 { - background-color: #0000d7; + --bg: #0000d7; } .ap-terminal .fg-21 { - color: #0000ff; + --fg: #0000ff; } .ap-terminal .bg-21 { - background-color: #0000ff; + --bg: #0000ff; } .ap-terminal .fg-22 { - color: #005f00; + --fg: #005f00; } .ap-terminal .bg-22 { - background-color: #005f00; + --bg: #005f00; } .ap-terminal .fg-23 { - color: #005f5f; + --fg: #005f5f; } .ap-terminal .bg-23 { - background-color: #005f5f; + --bg: #005f5f; } .ap-terminal .fg-24 { - color: #005f87; + --fg: #005f87; } .ap-terminal .bg-24 { - background-color: #005f87; + --bg: #005f87; } .ap-terminal .fg-25 { - color: #005faf; + --fg: #005faf; } .ap-terminal .bg-25 { - background-color: #005faf; + --bg: #005faf; } .ap-terminal .fg-26 { - color: #005fd7; + --fg: #005fd7; } .ap-terminal .bg-26 { - background-color: #005fd7; + --bg: #005fd7; } .ap-terminal .fg-27 { - color: #005fff; + --fg: #005fff; } .ap-terminal .bg-27 { - background-color: #005fff; + --bg: #005fff; } .ap-terminal .fg-28 { - color: #008700; + --fg: #008700; } .ap-terminal .bg-28 { - background-color: #008700; + --bg: #008700; } .ap-terminal .fg-29 { - color: #00875f; + --fg: #00875f; } .ap-terminal .bg-29 { - background-color: #00875f; + --bg: #00875f; } .ap-terminal .fg-30 { - color: #008787; + --fg: #008787; } .ap-terminal .bg-30 { - background-color: #008787; + --bg: #008787; } .ap-terminal .fg-31 { - color: #0087af; + --fg: #0087af; } .ap-terminal .bg-31 { - background-color: #0087af; + --bg: #0087af; } .ap-terminal .fg-32 { - color: #0087d7; + --fg: #0087d7; } .ap-terminal .bg-32 { - background-color: #0087d7; + --bg: #0087d7; } .ap-terminal .fg-33 { - color: #0087ff; + --fg: #0087ff; } .ap-terminal .bg-33 { - background-color: #0087ff; + --bg: #0087ff; } .ap-terminal .fg-34 { - color: #00af00; + --fg: #00af00; } .ap-terminal .bg-34 { - background-color: #00af00; + --bg: #00af00; } .ap-terminal .fg-35 { - color: #00af5f; + --fg: #00af5f; } .ap-terminal .bg-35 { - background-color: #00af5f; + --bg: #00af5f; } .ap-terminal .fg-36 { - color: #00af87; + --fg: #00af87; } .ap-terminal .bg-36 { - background-color: #00af87; + --bg: #00af87; } .ap-terminal .fg-37 { - color: #00afaf; + --fg: #00afaf; } .ap-terminal .bg-37 { - background-color: #00afaf; + --bg: #00afaf; } .ap-terminal .fg-38 { - color: #00afd7; + --fg: #00afd7; } .ap-terminal .bg-38 { - background-color: #00afd7; + --bg: #00afd7; } .ap-terminal .fg-39 { - color: #00afff; + --fg: #00afff; } .ap-terminal .bg-39 { - background-color: #00afff; + --bg: #00afff; } .ap-terminal .fg-40 { - color: #00d700; + --fg: #00d700; } .ap-terminal .bg-40 { - background-color: #00d700; + --bg: #00d700; } .ap-terminal .fg-41 { - color: #00d75f; + --fg: #00d75f; } .ap-terminal .bg-41 { - background-color: #00d75f; + --bg: #00d75f; } .ap-terminal .fg-42 { - color: #00d787; + --fg: #00d787; } .ap-terminal .bg-42 { - background-color: #00d787; + --bg: #00d787; } .ap-terminal .fg-43 { - color: #00d7af; + --fg: #00d7af; } .ap-terminal .bg-43 { - background-color: #00d7af; + --bg: #00d7af; } .ap-terminal .fg-44 { - color: #00d7d7; + --fg: #00d7d7; } .ap-terminal .bg-44 { - background-color: #00d7d7; + --bg: #00d7d7; } .ap-terminal .fg-45 { - color: #00d7ff; + --fg: #00d7ff; } .ap-terminal .bg-45 { - background-color: #00d7ff; + --bg: #00d7ff; } .ap-terminal .fg-46 { - color: #00ff00; + --fg: #00ff00; } .ap-terminal .bg-46 { - background-color: #00ff00; + --bg: #00ff00; } .ap-terminal .fg-47 { - color: #00ff5f; + --fg: #00ff5f; } .ap-terminal .bg-47 { - background-color: #00ff5f; + --bg: #00ff5f; } .ap-terminal .fg-48 { - color: #00ff87; + --fg: #00ff87; } .ap-terminal .bg-48 { - background-color: #00ff87; + --bg: #00ff87; } .ap-terminal .fg-49 { - color: #00ffaf; + --fg: #00ffaf; } .ap-terminal .bg-49 { - background-color: #00ffaf; + --bg: #00ffaf; } .ap-terminal .fg-50 { - color: #00ffd7; + --fg: #00ffd7; } .ap-terminal .bg-50 { - background-color: #00ffd7; + --bg: #00ffd7; } .ap-terminal .fg-51 { - color: #00ffff; + --fg: #00ffff; } .ap-terminal .bg-51 { - background-color: #00ffff; + --bg: #00ffff; } .ap-terminal .fg-52 { - color: #5f0000; + --fg: #5f0000; } .ap-terminal .bg-52 { - background-color: #5f0000; + --bg: #5f0000; } .ap-terminal .fg-53 { - color: #5f005f; + --fg: #5f005f; } .ap-terminal .bg-53 { - background-color: #5f005f; + --bg: #5f005f; } .ap-terminal .fg-54 { - color: #5f0087; + --fg: #5f0087; } .ap-terminal .bg-54 { - background-color: #5f0087; + --bg: #5f0087; } .ap-terminal .fg-55 { - color: #5f00af; + --fg: #5f00af; } .ap-terminal .bg-55 { - background-color: #5f00af; + --bg: #5f00af; } .ap-terminal .fg-56 { - color: #5f00d7; + --fg: #5f00d7; } .ap-terminal .bg-56 { - background-color: #5f00d7; + --bg: #5f00d7; } .ap-terminal .fg-57 { - color: #5f00ff; + --fg: #5f00ff; } .ap-terminal .bg-57 { - background-color: #5f00ff; + --bg: #5f00ff; } .ap-terminal .fg-58 { - color: #5f5f00; + --fg: #5f5f00; } .ap-terminal .bg-58 { - background-color: #5f5f00; + --bg: #5f5f00; } .ap-terminal .fg-59 { - color: #5f5f5f; + --fg: #5f5f5f; } .ap-terminal .bg-59 { - background-color: #5f5f5f; + --bg: #5f5f5f; } .ap-terminal .fg-60 { - color: #5f5f87; + --fg: #5f5f87; } .ap-terminal .bg-60 { - background-color: #5f5f87; + --bg: #5f5f87; } .ap-terminal .fg-61 { - color: #5f5faf; + --fg: #5f5faf; } .ap-terminal .bg-61 { - background-color: #5f5faf; + --bg: #5f5faf; } .ap-terminal .fg-62 { - color: #5f5fd7; + --fg: #5f5fd7; } .ap-terminal .bg-62 { - background-color: #5f5fd7; + --bg: #5f5fd7; } .ap-terminal .fg-63 { - color: #5f5fff; + --fg: #5f5fff; } .ap-terminal .bg-63 { - background-color: #5f5fff; + --bg: #5f5fff; } .ap-terminal .fg-64 { - color: #5f8700; + --fg: #5f8700; } .ap-terminal .bg-64 { - background-color: #5f8700; + --bg: #5f8700; } .ap-terminal .fg-65 { - color: #5f875f; + --fg: #5f875f; } .ap-terminal .bg-65 { - background-color: #5f875f; + --bg: #5f875f; } .ap-terminal .fg-66 { - color: #5f8787; + --fg: #5f8787; } .ap-terminal .bg-66 { - background-color: #5f8787; + --bg: #5f8787; } .ap-terminal .fg-67 { - color: #5f87af; + --fg: #5f87af; } .ap-terminal .bg-67 { - background-color: #5f87af; + --bg: #5f87af; } .ap-terminal .fg-68 { - color: #5f87d7; + --fg: #5f87d7; } .ap-terminal .bg-68 { - background-color: #5f87d7; + --bg: #5f87d7; } .ap-terminal .fg-69 { - color: #5f87ff; + --fg: #5f87ff; } .ap-terminal .bg-69 { - background-color: #5f87ff; + --bg: #5f87ff; } .ap-terminal .fg-70 { - color: #5faf00; + --fg: #5faf00; } .ap-terminal .bg-70 { - background-color: #5faf00; + --bg: #5faf00; } .ap-terminal .fg-71 { - color: #5faf5f; + --fg: #5faf5f; } .ap-terminal .bg-71 { - background-color: #5faf5f; + --bg: #5faf5f; } .ap-terminal .fg-72 { - color: #5faf87; + --fg: #5faf87; } .ap-terminal .bg-72 { - background-color: #5faf87; + --bg: #5faf87; } .ap-terminal .fg-73 { - color: #5fafaf; + --fg: #5fafaf; } .ap-terminal .bg-73 { - background-color: #5fafaf; + --bg: #5fafaf; } .ap-terminal .fg-74 { - color: #5fafd7; + --fg: #5fafd7; } .ap-terminal .bg-74 { - background-color: #5fafd7; + --bg: #5fafd7; } .ap-terminal .fg-75 { - color: #5fafff; + --fg: #5fafff; } .ap-terminal .bg-75 { - background-color: #5fafff; + --bg: #5fafff; } .ap-terminal .fg-76 { - color: #5fd700; + --fg: #5fd700; } .ap-terminal .bg-76 { - background-color: #5fd700; + --bg: #5fd700; } .ap-terminal .fg-77 { - color: #5fd75f; + --fg: #5fd75f; } .ap-terminal .bg-77 { - background-color: #5fd75f; + --bg: #5fd75f; } .ap-terminal .fg-78 { - color: #5fd787; + --fg: #5fd787; } .ap-terminal .bg-78 { - background-color: #5fd787; + --bg: #5fd787; } .ap-terminal .fg-79 { - color: #5fd7af; + --fg: #5fd7af; } .ap-terminal .bg-79 { - background-color: #5fd7af; + --bg: #5fd7af; } .ap-terminal .fg-80 { - color: #5fd7d7; + --fg: #5fd7d7; } .ap-terminal .bg-80 { - background-color: #5fd7d7; + --bg: #5fd7d7; } .ap-terminal .fg-81 { - color: #5fd7ff; + --fg: #5fd7ff; } .ap-terminal .bg-81 { - background-color: #5fd7ff; + --bg: #5fd7ff; } .ap-terminal .fg-82 { - color: #5fff00; + --fg: #5fff00; } .ap-terminal .bg-82 { - background-color: #5fff00; + --bg: #5fff00; } .ap-terminal .fg-83 { - color: #5fff5f; + --fg: #5fff5f; } .ap-terminal .bg-83 { - background-color: #5fff5f; + --bg: #5fff5f; } .ap-terminal .fg-84 { - color: #5fff87; + --fg: #5fff87; } .ap-terminal .bg-84 { - background-color: #5fff87; + --bg: #5fff87; } .ap-terminal .fg-85 { - color: #5fffaf; + --fg: #5fffaf; } .ap-terminal .bg-85 { - background-color: #5fffaf; + --bg: #5fffaf; } .ap-terminal .fg-86 { - color: #5fffd7; + --fg: #5fffd7; } .ap-terminal .bg-86 { - background-color: #5fffd7; + --bg: #5fffd7; } .ap-terminal .fg-87 { - color: #5fffff; + --fg: #5fffff; } .ap-terminal .bg-87 { - background-color: #5fffff; + --bg: #5fffff; } .ap-terminal .fg-88 { - color: #870000; + --fg: #870000; } .ap-terminal .bg-88 { - background-color: #870000; + --bg: #870000; } .ap-terminal .fg-89 { - color: #87005f; + --fg: #87005f; } .ap-terminal .bg-89 { - background-color: #87005f; + --bg: #87005f; } .ap-terminal .fg-90 { - color: #870087; + --fg: #870087; } .ap-terminal .bg-90 { - background-color: #870087; + --bg: #870087; } .ap-terminal .fg-91 { - color: #8700af; + --fg: #8700af; } .ap-terminal .bg-91 { - background-color: #8700af; + --bg: #8700af; } .ap-terminal .fg-92 { - color: #8700d7; + --fg: #8700d7; } .ap-terminal .bg-92 { - background-color: #8700d7; + --bg: #8700d7; } .ap-terminal .fg-93 { - color: #8700ff; + --fg: #8700ff; } .ap-terminal .bg-93 { - background-color: #8700ff; + --bg: #8700ff; } .ap-terminal .fg-94 { - color: #875f00; + --fg: #875f00; } .ap-terminal .bg-94 { - background-color: #875f00; + --bg: #875f00; } .ap-terminal .fg-95 { - color: #875f5f; + --fg: #875f5f; } .ap-terminal .bg-95 { - background-color: #875f5f; + --bg: #875f5f; } .ap-terminal .fg-96 { - color: #875f87; + --fg: #875f87; } .ap-terminal .bg-96 { - background-color: #875f87; + --bg: #875f87; } .ap-terminal .fg-97 { - color: #875faf; + --fg: #875faf; } .ap-terminal .bg-97 { - background-color: #875faf; + --bg: #875faf; } .ap-terminal .fg-98 { - color: #875fd7; + --fg: #875fd7; } .ap-terminal .bg-98 { - background-color: #875fd7; + --bg: #875fd7; } .ap-terminal .fg-99 { - color: #875fff; + --fg: #875fff; } .ap-terminal .bg-99 { - background-color: #875fff; + --bg: #875fff; } .ap-terminal .fg-100 { - color: #878700; + --fg: #878700; } .ap-terminal .bg-100 { - background-color: #878700; + --bg: #878700; } .ap-terminal .fg-101 { - color: #87875f; + --fg: #87875f; } .ap-terminal .bg-101 { - background-color: #87875f; + --bg: #87875f; } .ap-terminal .fg-102 { - color: #878787; + --fg: #878787; } .ap-terminal .bg-102 { - background-color: #878787; + --bg: #878787; } .ap-terminal .fg-103 { - color: #8787af; + --fg: #8787af; } .ap-terminal .bg-103 { - background-color: #8787af; + --bg: #8787af; } .ap-terminal .fg-104 { - color: #8787d7; + --fg: #8787d7; } .ap-terminal .bg-104 { - background-color: #8787d7; + --bg: #8787d7; } .ap-terminal .fg-105 { - color: #8787ff; + --fg: #8787ff; } .ap-terminal .bg-105 { - background-color: #8787ff; + --bg: #8787ff; } .ap-terminal .fg-106 { - color: #87af00; + --fg: #87af00; } .ap-terminal .bg-106 { - background-color: #87af00; + --bg: #87af00; } .ap-terminal .fg-107 { - color: #87af5f; + --fg: #87af5f; } .ap-terminal .bg-107 { - background-color: #87af5f; + --bg: #87af5f; } .ap-terminal .fg-108 { - color: #87af87; + --fg: #87af87; } .ap-terminal .bg-108 { - background-color: #87af87; + --bg: #87af87; } .ap-terminal .fg-109 { - color: #87afaf; + --fg: #87afaf; } .ap-terminal .bg-109 { - background-color: #87afaf; + --bg: #87afaf; } .ap-terminal .fg-110 { - color: #87afd7; + --fg: #87afd7; } .ap-terminal .bg-110 { - background-color: #87afd7; + --bg: #87afd7; } .ap-terminal .fg-111 { - color: #87afff; + --fg: #87afff; } .ap-terminal .bg-111 { - background-color: #87afff; + --bg: #87afff; } .ap-terminal .fg-112 { - color: #87d700; + --fg: #87d700; } .ap-terminal .bg-112 { - background-color: #87d700; + --bg: #87d700; } .ap-terminal .fg-113 { - color: #87d75f; + --fg: #87d75f; } .ap-terminal .bg-113 { - background-color: #87d75f; + --bg: #87d75f; } .ap-terminal .fg-114 { - color: #87d787; + --fg: #87d787; } .ap-terminal .bg-114 { - background-color: #87d787; + --bg: #87d787; } .ap-terminal .fg-115 { - color: #87d7af; + --fg: #87d7af; } .ap-terminal .bg-115 { - background-color: #87d7af; + --bg: #87d7af; } .ap-terminal .fg-116 { - color: #87d7d7; + --fg: #87d7d7; } .ap-terminal .bg-116 { - background-color: #87d7d7; + --bg: #87d7d7; } .ap-terminal .fg-117 { - color: #87d7ff; + --fg: #87d7ff; } .ap-terminal .bg-117 { - background-color: #87d7ff; + --bg: #87d7ff; } .ap-terminal .fg-118 { - color: #87ff00; + --fg: #87ff00; } .ap-terminal .bg-118 { - background-color: #87ff00; + --bg: #87ff00; } .ap-terminal .fg-119 { - color: #87ff5f; + --fg: #87ff5f; } .ap-terminal .bg-119 { - background-color: #87ff5f; + --bg: #87ff5f; } .ap-terminal .fg-120 { - color: #87ff87; + --fg: #87ff87; } .ap-terminal .bg-120 { - background-color: #87ff87; + --bg: #87ff87; } .ap-terminal .fg-121 { - color: #87ffaf; + --fg: #87ffaf; } .ap-terminal .bg-121 { - background-color: #87ffaf; + --bg: #87ffaf; } .ap-terminal .fg-122 { - color: #87ffd7; + --fg: #87ffd7; } .ap-terminal .bg-122 { - background-color: #87ffd7; + --bg: #87ffd7; } .ap-terminal .fg-123 { - color: #87ffff; + --fg: #87ffff; } .ap-terminal .bg-123 { - background-color: #87ffff; + --bg: #87ffff; } .ap-terminal .fg-124 { - color: #af0000; + --fg: #af0000; } .ap-terminal .bg-124 { - background-color: #af0000; + --bg: #af0000; } .ap-terminal .fg-125 { - color: #af005f; + --fg: #af005f; } .ap-terminal .bg-125 { - background-color: #af005f; + --bg: #af005f; } .ap-terminal .fg-126 { - color: #af0087; + --fg: #af0087; } .ap-terminal .bg-126 { - background-color: #af0087; + --bg: #af0087; } .ap-terminal .fg-127 { - color: #af00af; + --fg: #af00af; } .ap-terminal .bg-127 { - background-color: #af00af; + --bg: #af00af; } .ap-terminal .fg-128 { - color: #af00d7; + --fg: #af00d7; } .ap-terminal .bg-128 { - background-color: #af00d7; + --bg: #af00d7; } .ap-terminal .fg-129 { - color: #af00ff; + --fg: #af00ff; } .ap-terminal .bg-129 { - background-color: #af00ff; + --bg: #af00ff; } .ap-terminal .fg-130 { - color: #af5f00; + --fg: #af5f00; } .ap-terminal .bg-130 { - background-color: #af5f00; + --bg: #af5f00; } .ap-terminal .fg-131 { - color: #af5f5f; + --fg: #af5f5f; } .ap-terminal .bg-131 { - background-color: #af5f5f; + --bg: #af5f5f; } .ap-terminal .fg-132 { - color: #af5f87; + --fg: #af5f87; } .ap-terminal .bg-132 { - background-color: #af5f87; + --bg: #af5f87; } .ap-terminal .fg-133 { - color: #af5faf; + --fg: #af5faf; } .ap-terminal .bg-133 { - background-color: #af5faf; + --bg: #af5faf; } .ap-terminal .fg-134 { - color: #af5fd7; + --fg: #af5fd7; } .ap-terminal .bg-134 { - background-color: #af5fd7; + --bg: #af5fd7; } .ap-terminal .fg-135 { - color: #af5fff; + --fg: #af5fff; } .ap-terminal .bg-135 { - background-color: #af5fff; + --bg: #af5fff; } .ap-terminal .fg-136 { - color: #af8700; + --fg: #af8700; } .ap-terminal .bg-136 { - background-color: #af8700; + --bg: #af8700; } .ap-terminal .fg-137 { - color: #af875f; + --fg: #af875f; } .ap-terminal .bg-137 { - background-color: #af875f; + --bg: #af875f; } .ap-terminal .fg-138 { - color: #af8787; + --fg: #af8787; } .ap-terminal .bg-138 { - background-color: #af8787; + --bg: #af8787; } .ap-terminal .fg-139 { - color: #af87af; + --fg: #af87af; } .ap-terminal .bg-139 { - background-color: #af87af; + --bg: #af87af; } .ap-terminal .fg-140 { - color: #af87d7; + --fg: #af87d7; } .ap-terminal .bg-140 { - background-color: #af87d7; + --bg: #af87d7; } .ap-terminal .fg-141 { - color: #af87ff; + --fg: #af87ff; } .ap-terminal .bg-141 { - background-color: #af87ff; + --bg: #af87ff; } .ap-terminal .fg-142 { - color: #afaf00; + --fg: #afaf00; } .ap-terminal .bg-142 { - background-color: #afaf00; + --bg: #afaf00; } .ap-terminal .fg-143 { - color: #afaf5f; + --fg: #afaf5f; } .ap-terminal .bg-143 { - background-color: #afaf5f; + --bg: #afaf5f; } .ap-terminal .fg-144 { - color: #afaf87; + --fg: #afaf87; } .ap-terminal .bg-144 { - background-color: #afaf87; + --bg: #afaf87; } .ap-terminal .fg-145 { - color: #afafaf; + --fg: #afafaf; } .ap-terminal .bg-145 { - background-color: #afafaf; + --bg: #afafaf; } .ap-terminal .fg-146 { - color: #afafd7; + --fg: #afafd7; } .ap-terminal .bg-146 { - background-color: #afafd7; + --bg: #afafd7; } .ap-terminal .fg-147 { - color: #afafff; + --fg: #afafff; } .ap-terminal .bg-147 { - background-color: #afafff; + --bg: #afafff; } .ap-terminal .fg-148 { - color: #afd700; + --fg: #afd700; } .ap-terminal .bg-148 { - background-color: #afd700; + --bg: #afd700; } .ap-terminal .fg-149 { - color: #afd75f; + --fg: #afd75f; } .ap-terminal .bg-149 { - background-color: #afd75f; + --bg: #afd75f; } .ap-terminal .fg-150 { - color: #afd787; + --fg: #afd787; } .ap-terminal .bg-150 { - background-color: #afd787; + --bg: #afd787; } .ap-terminal .fg-151 { - color: #afd7af; + --fg: #afd7af; } .ap-terminal .bg-151 { - background-color: #afd7af; + --bg: #afd7af; } .ap-terminal .fg-152 { - color: #afd7d7; + --fg: #afd7d7; } .ap-terminal .bg-152 { - background-color: #afd7d7; + --bg: #afd7d7; } .ap-terminal .fg-153 { - color: #afd7ff; + --fg: #afd7ff; } .ap-terminal .bg-153 { - background-color: #afd7ff; + --bg: #afd7ff; } .ap-terminal .fg-154 { - color: #afff00; + --fg: #afff00; } .ap-terminal .bg-154 { - background-color: #afff00; + --bg: #afff00; } .ap-terminal .fg-155 { - color: #afff5f; + --fg: #afff5f; } .ap-terminal .bg-155 { - background-color: #afff5f; + --bg: #afff5f; } .ap-terminal .fg-156 { - color: #afff87; + --fg: #afff87; } .ap-terminal .bg-156 { - background-color: #afff87; + --bg: #afff87; } .ap-terminal .fg-157 { - color: #afffaf; + --fg: #afffaf; } .ap-terminal .bg-157 { - background-color: #afffaf; + --bg: #afffaf; } .ap-terminal .fg-158 { - color: #afffd7; + --fg: #afffd7; } .ap-terminal .bg-158 { - background-color: #afffd7; + --bg: #afffd7; } .ap-terminal .fg-159 { - color: #afffff; + --fg: #afffff; } .ap-terminal .bg-159 { - background-color: #afffff; + --bg: #afffff; } .ap-terminal .fg-160 { - color: #d70000; + --fg: #d70000; } .ap-terminal .bg-160 { - background-color: #d70000; + --bg: #d70000; } .ap-terminal .fg-161 { - color: #d7005f; + --fg: #d7005f; } .ap-terminal .bg-161 { - background-color: #d7005f; + --bg: #d7005f; } .ap-terminal .fg-162 { - color: #d70087; + --fg: #d70087; } .ap-terminal .bg-162 { - background-color: #d70087; + --bg: #d70087; } .ap-terminal .fg-163 { - color: #d700af; + --fg: #d700af; } .ap-terminal .bg-163 { - background-color: #d700af; + --bg: #d700af; } .ap-terminal .fg-164 { - color: #d700d7; + --fg: #d700d7; } .ap-terminal .bg-164 { - background-color: #d700d7; + --bg: #d700d7; } .ap-terminal .fg-165 { - color: #d700ff; + --fg: #d700ff; } .ap-terminal .bg-165 { - background-color: #d700ff; + --bg: #d700ff; } .ap-terminal .fg-166 { - color: #d75f00; + --fg: #d75f00; } .ap-terminal .bg-166 { - background-color: #d75f00; + --bg: #d75f00; } .ap-terminal .fg-167 { - color: #d75f5f; + --fg: #d75f5f; } .ap-terminal .bg-167 { - background-color: #d75f5f; + --bg: #d75f5f; } .ap-terminal .fg-168 { - color: #d75f87; + --fg: #d75f87; } .ap-terminal .bg-168 { - background-color: #d75f87; + --bg: #d75f87; } .ap-terminal .fg-169 { - color: #d75faf; + --fg: #d75faf; } .ap-terminal .bg-169 { - background-color: #d75faf; + --bg: #d75faf; } .ap-terminal .fg-170 { - color: #d75fd7; + --fg: #d75fd7; } .ap-terminal .bg-170 { - background-color: #d75fd7; + --bg: #d75fd7; } .ap-terminal .fg-171 { - color: #d75fff; + --fg: #d75fff; } .ap-terminal .bg-171 { - background-color: #d75fff; + --bg: #d75fff; } .ap-terminal .fg-172 { - color: #d78700; + --fg: #d78700; } .ap-terminal .bg-172 { - background-color: #d78700; + --bg: #d78700; } .ap-terminal .fg-173 { - color: #d7875f; + --fg: #d7875f; } .ap-terminal .bg-173 { - background-color: #d7875f; + --bg: #d7875f; } .ap-terminal .fg-174 { - color: #d78787; + --fg: #d78787; } .ap-terminal .bg-174 { - background-color: #d78787; + --bg: #d78787; } .ap-terminal .fg-175 { - color: #d787af; + --fg: #d787af; } .ap-terminal .bg-175 { - background-color: #d787af; + --bg: #d787af; } .ap-terminal .fg-176 { - color: #d787d7; + --fg: #d787d7; } .ap-terminal .bg-176 { - background-color: #d787d7; + --bg: #d787d7; } .ap-terminal .fg-177 { - color: #d787ff; + --fg: #d787ff; } .ap-terminal .bg-177 { - background-color: #d787ff; + --bg: #d787ff; } .ap-terminal .fg-178 { - color: #d7af00; + --fg: #d7af00; } .ap-terminal .bg-178 { - background-color: #d7af00; + --bg: #d7af00; } .ap-terminal .fg-179 { - color: #d7af5f; + --fg: #d7af5f; } .ap-terminal .bg-179 { - background-color: #d7af5f; + --bg: #d7af5f; } .ap-terminal .fg-180 { - color: #d7af87; + --fg: #d7af87; } .ap-terminal .bg-180 { - background-color: #d7af87; + --bg: #d7af87; } .ap-terminal .fg-181 { - color: #d7afaf; + --fg: #d7afaf; } .ap-terminal .bg-181 { - background-color: #d7afaf; + --bg: #d7afaf; } .ap-terminal .fg-182 { - color: #d7afd7; + --fg: #d7afd7; } .ap-terminal .bg-182 { - background-color: #d7afd7; + --bg: #d7afd7; } .ap-terminal .fg-183 { - color: #d7afff; + --fg: #d7afff; } .ap-terminal .bg-183 { - background-color: #d7afff; + --bg: #d7afff; } .ap-terminal .fg-184 { - color: #d7d700; + --fg: #d7d700; } .ap-terminal .bg-184 { - background-color: #d7d700; + --bg: #d7d700; } .ap-terminal .fg-185 { - color: #d7d75f; + --fg: #d7d75f; } .ap-terminal .bg-185 { - background-color: #d7d75f; + --bg: #d7d75f; } .ap-terminal .fg-186 { - color: #d7d787; + --fg: #d7d787; } .ap-terminal .bg-186 { - background-color: #d7d787; + --bg: #d7d787; } .ap-terminal .fg-187 { - color: #d7d7af; + --fg: #d7d7af; } .ap-terminal .bg-187 { - background-color: #d7d7af; + --bg: #d7d7af; } .ap-terminal .fg-188 { - color: #d7d7d7; + --fg: #d7d7d7; } .ap-terminal .bg-188 { - background-color: #d7d7d7; + --bg: #d7d7d7; } .ap-terminal .fg-189 { - color: #d7d7ff; + --fg: #d7d7ff; } .ap-terminal .bg-189 { - background-color: #d7d7ff; + --bg: #d7d7ff; } .ap-terminal .fg-190 { - color: #d7ff00; + --fg: #d7ff00; } .ap-terminal .bg-190 { - background-color: #d7ff00; + --bg: #d7ff00; } .ap-terminal .fg-191 { - color: #d7ff5f; + --fg: #d7ff5f; } .ap-terminal .bg-191 { - background-color: #d7ff5f; + --bg: #d7ff5f; } .ap-terminal .fg-192 { - color: #d7ff87; + --fg: #d7ff87; } .ap-terminal .bg-192 { - background-color: #d7ff87; + --bg: #d7ff87; } .ap-terminal .fg-193 { - color: #d7ffaf; + --fg: #d7ffaf; } .ap-terminal .bg-193 { - background-color: #d7ffaf; + --bg: #d7ffaf; } .ap-terminal .fg-194 { - color: #d7ffd7; + --fg: #d7ffd7; } .ap-terminal .bg-194 { - background-color: #d7ffd7; + --bg: #d7ffd7; } .ap-terminal .fg-195 { - color: #d7ffff; + --fg: #d7ffff; } .ap-terminal .bg-195 { - background-color: #d7ffff; + --bg: #d7ffff; } .ap-terminal .fg-196 { - color: #ff0000; + --fg: #ff0000; } .ap-terminal .bg-196 { - background-color: #ff0000; + --bg: #ff0000; } .ap-terminal .fg-197 { - color: #ff005f; + --fg: #ff005f; } .ap-terminal .bg-197 { - background-color: #ff005f; + --bg: #ff005f; } .ap-terminal .fg-198 { - color: #ff0087; + --fg: #ff0087; } .ap-terminal .bg-198 { - background-color: #ff0087; + --bg: #ff0087; } .ap-terminal .fg-199 { - color: #ff00af; + --fg: #ff00af; } .ap-terminal .bg-199 { - background-color: #ff00af; + --bg: #ff00af; } .ap-terminal .fg-200 { - color: #ff00d7; + --fg: #ff00d7; } .ap-terminal .bg-200 { - background-color: #ff00d7; + --bg: #ff00d7; } .ap-terminal .fg-201 { - color: #ff00ff; + --fg: #ff00ff; } .ap-terminal .bg-201 { - background-color: #ff00ff; + --bg: #ff00ff; } .ap-terminal .fg-202 { - color: #ff5f00; + --fg: #ff5f00; } .ap-terminal .bg-202 { - background-color: #ff5f00; + --bg: #ff5f00; } .ap-terminal .fg-203 { - color: #ff5f5f; + --fg: #ff5f5f; } .ap-terminal .bg-203 { - background-color: #ff5f5f; + --bg: #ff5f5f; } .ap-terminal .fg-204 { - color: #ff5f87; + --fg: #ff5f87; } .ap-terminal .bg-204 { - background-color: #ff5f87; + --bg: #ff5f87; } .ap-terminal .fg-205 { - color: #ff5faf; + --fg: #ff5faf; } .ap-terminal .bg-205 { - background-color: #ff5faf; + --bg: #ff5faf; } .ap-terminal .fg-206 { - color: #ff5fd7; + --fg: #ff5fd7; } .ap-terminal .bg-206 { - background-color: #ff5fd7; + --bg: #ff5fd7; } .ap-terminal .fg-207 { - color: #ff5fff; + --fg: #ff5fff; } .ap-terminal .bg-207 { - background-color: #ff5fff; + --bg: #ff5fff; } .ap-terminal .fg-208 { - color: #ff8700; + --fg: #ff8700; } .ap-terminal .bg-208 { - background-color: #ff8700; + --bg: #ff8700; } .ap-terminal .fg-209 { - color: #ff875f; + --fg: #ff875f; } .ap-terminal .bg-209 { - background-color: #ff875f; + --bg: #ff875f; } .ap-terminal .fg-210 { - color: #ff8787; + --fg: #ff8787; } .ap-terminal .bg-210 { - background-color: #ff8787; + --bg: #ff8787; } .ap-terminal .fg-211 { - color: #ff87af; + --fg: #ff87af; } .ap-terminal .bg-211 { - background-color: #ff87af; + --bg: #ff87af; } .ap-terminal .fg-212 { - color: #ff87d7; + --fg: #ff87d7; } .ap-terminal .bg-212 { - background-color: #ff87d7; + --bg: #ff87d7; } .ap-terminal .fg-213 { - color: #ff87ff; + --fg: #ff87ff; } .ap-terminal .bg-213 { - background-color: #ff87ff; + --bg: #ff87ff; } .ap-terminal .fg-214 { - color: #ffaf00; + --fg: #ffaf00; } .ap-terminal .bg-214 { - background-color: #ffaf00; + --bg: #ffaf00; } .ap-terminal .fg-215 { - color: #ffaf5f; + --fg: #ffaf5f; } .ap-terminal .bg-215 { - background-color: #ffaf5f; + --bg: #ffaf5f; } .ap-terminal .fg-216 { - color: #ffaf87; + --fg: #ffaf87; } .ap-terminal .bg-216 { - background-color: #ffaf87; + --bg: #ffaf87; } .ap-terminal .fg-217 { - color: #ffafaf; + --fg: #ffafaf; } .ap-terminal .bg-217 { - background-color: #ffafaf; + --bg: #ffafaf; } .ap-terminal .fg-218 { - color: #ffafd7; + --fg: #ffafd7; } .ap-terminal .bg-218 { - background-color: #ffafd7; + --bg: #ffafd7; } .ap-terminal .fg-219 { - color: #ffafff; + --fg: #ffafff; } .ap-terminal .bg-219 { - background-color: #ffafff; + --bg: #ffafff; } .ap-terminal .fg-220 { - color: #ffd700; + --fg: #ffd700; } .ap-terminal .bg-220 { - background-color: #ffd700; + --bg: #ffd700; } .ap-terminal .fg-221 { - color: #ffd75f; + --fg: #ffd75f; } .ap-terminal .bg-221 { - background-color: #ffd75f; + --bg: #ffd75f; } .ap-terminal .fg-222 { - color: #ffd787; + --fg: #ffd787; } .ap-terminal .bg-222 { - background-color: #ffd787; + --bg: #ffd787; } .ap-terminal .fg-223 { - color: #ffd7af; + --fg: #ffd7af; } .ap-terminal .bg-223 { - background-color: #ffd7af; + --bg: #ffd7af; } .ap-terminal .fg-224 { - color: #ffd7d7; + --fg: #ffd7d7; } .ap-terminal .bg-224 { - background-color: #ffd7d7; + --bg: #ffd7d7; } .ap-terminal .fg-225 { - color: #ffd7ff; + --fg: #ffd7ff; } .ap-terminal .bg-225 { - background-color: #ffd7ff; + --bg: #ffd7ff; } .ap-terminal .fg-226 { - color: #ffff00; + --fg: #ffff00; } .ap-terminal .bg-226 { - background-color: #ffff00; + --bg: #ffff00; } .ap-terminal .fg-227 { - color: #ffff5f; + --fg: #ffff5f; } .ap-terminal .bg-227 { - background-color: #ffff5f; + --bg: #ffff5f; } .ap-terminal .fg-228 { - color: #ffff87; + --fg: #ffff87; } .ap-terminal .bg-228 { - background-color: #ffff87; + --bg: #ffff87; } .ap-terminal .fg-229 { - color: #ffffaf; + --fg: #ffffaf; } .ap-terminal .bg-229 { - background-color: #ffffaf; + --bg: #ffffaf; } .ap-terminal .fg-230 { - color: #ffffd7; + --fg: #ffffd7; } .ap-terminal .bg-230 { - background-color: #ffffd7; + --bg: #ffffd7; } .ap-terminal .fg-231 { - color: #ffffff; + --fg: #ffffff; } .ap-terminal .bg-231 { - background-color: #ffffff; + --bg: #ffffff; } .ap-terminal .fg-232 { - color: #080808; + --fg: #080808; } .ap-terminal .bg-232 { - background-color: #080808; + --bg: #080808; } .ap-terminal .fg-233 { - color: #121212; + --fg: #121212; } .ap-terminal .bg-233 { - background-color: #121212; + --bg: #121212; } .ap-terminal .fg-234 { - color: #1c1c1c; + --fg: #1c1c1c; } .ap-terminal .bg-234 { - background-color: #1c1c1c; + --bg: #1c1c1c; } .ap-terminal .fg-235 { - color: #262626; + --fg: #262626; } .ap-terminal .bg-235 { - background-color: #262626; + --bg: #262626; } .ap-terminal .fg-236 { - color: #303030; + --fg: #303030; } .ap-terminal .bg-236 { - background-color: #303030; + --bg: #303030; } .ap-terminal .fg-237 { - color: #3a3a3a; + --fg: #3a3a3a; } .ap-terminal .bg-237 { - background-color: #3a3a3a; + --bg: #3a3a3a; } .ap-terminal .fg-238 { - color: #444444; + --fg: #444444; } .ap-terminal .bg-238 { - background-color: #444444; + --bg: #444444; } .ap-terminal .fg-239 { - color: #4e4e4e; + --fg: #4e4e4e; } .ap-terminal .bg-239 { - background-color: #4e4e4e; + --bg: #4e4e4e; } .ap-terminal .fg-240 { - color: #585858; + --fg: #585858; } .ap-terminal .bg-240 { - background-color: #585858; + --bg: #585858; } .ap-terminal .fg-241 { - color: #626262; + --fg: #626262; } .ap-terminal .bg-241 { - background-color: #626262; + --bg: #626262; } .ap-terminal .fg-242 { - color: #6c6c6c; + --fg: #6c6c6c; } .ap-terminal .bg-242 { - background-color: #6c6c6c; + --bg: #6c6c6c; } .ap-terminal .fg-243 { - color: #767676; + --fg: #767676; } .ap-terminal .bg-243 { - background-color: #767676; + --bg: #767676; } .ap-terminal .fg-244 { - color: #808080; + --fg: #808080; } .ap-terminal .bg-244 { - background-color: #808080; + --bg: #808080; } .ap-terminal .fg-245 { - color: #8a8a8a; + --fg: #8a8a8a; } .ap-terminal .bg-245 { - background-color: #8a8a8a; + --bg: #8a8a8a; } .ap-terminal .fg-246 { - color: #949494; + --fg: #949494; } .ap-terminal .bg-246 { - background-color: #949494; + --bg: #949494; } .ap-terminal .fg-247 { - color: #9e9e9e; + --fg: #9e9e9e; } .ap-terminal .bg-247 { - background-color: #9e9e9e; + --bg: #9e9e9e; } .ap-terminal .fg-248 { - color: #a8a8a8; + --fg: #a8a8a8; } .ap-terminal .bg-248 { - background-color: #a8a8a8; + --bg: #a8a8a8; } .ap-terminal .fg-249 { - color: #b2b2b2; + --fg: #b2b2b2; } .ap-terminal .bg-249 { - background-color: #b2b2b2; + --bg: #b2b2b2; } .ap-terminal .fg-250 { - color: #bcbcbc; + --fg: #bcbcbc; } .ap-terminal .bg-250 { - background-color: #bcbcbc; + --bg: #bcbcbc; } .ap-terminal .fg-251 { - color: #c6c6c6; + --fg: #c6c6c6; } .ap-terminal .bg-251 { - background-color: #c6c6c6; + --bg: #c6c6c6; } .ap-terminal .fg-252 { - color: #d0d0d0; + --fg: #d0d0d0; } .ap-terminal .bg-252 { - background-color: #d0d0d0; + --bg: #d0d0d0; } .ap-terminal .fg-253 { - color: #dadada; + --fg: #dadada; } .ap-terminal .bg-253 { - background-color: #dadada; + --bg: #dadada; } .ap-terminal .fg-254 { - color: #e4e4e4; + --fg: #e4e4e4; } .ap-terminal .bg-254 { - background-color: #e4e4e4; + --bg: #e4e4e4; } .ap-terminal .fg-255 { - color: #eeeeee; + --fg: #eeeeee; } .ap-terminal .bg-255 { - background-color: #eeeeee; + --bg: #eeeeee; } .asciinema-player-theme-asciinema { --term-color-foreground: #cccccc; diff --git a/docs/extra/asciinema-player.min.js b/docs/extra/asciinema-player.min.js index 81616815..85f30888 100644 --- a/docs/extra/asciinema-player.min.js +++ b/docs/extra/asciinema-player.min.js @@ -1 +1 @@ -var AsciinemaPlayer=function(A){"use strict";const g={};const I=Symbol("solid-proxy"),B=Symbol("solid-track"),Q={equals:(A,g)=>A===g};let C=Y;const E=1,e=2,t={owned:null,cleanups:null,context:null,owner:null};var i=null;let o=null,s=null,n=null,r=null,a=0;function c(A,g){const I=s,B=i,Q=0===A.length,C=Q?t:{owned:null,cleanups:null,context:null,owner:void 0===g?B:g},E=Q?A:()=>A((()=>l((()=>K(C)))));i=C,s=null;try{return J(E,!0)}finally{s=I,i=B}}function D(A,g){const I={value:A,observers:null,observerSlots:null,comparator:(g=g?Object.assign({},Q,g):Q).equals||void 0};return[u.bind(I),A=>("function"==typeof A&&(A=A(I.value)),F(I,A))]}function w(A,g,I){d(f(A,g,!1,E))}function y(A,g,I){I=I?Object.assign({},Q,I):Q;const B=f(A,g,!0,0);return B.observers=null,B.observerSlots=null,B.comparator=I.equals||void 0,d(B),u.bind(B)}function h(A){return J(A,!1)}function l(A){if(null===s)return A();const g=s;s=null;try{return A()}finally{s=g}}function G(A){!function(A,g,I){C=p;const B=f(A,g,!1,E);B.user=!0,r?r.push(B):d(B)}((()=>l(A)))}function k(A){return null===i||(null===i.cleanups?i.cleanups=[A]:i.cleanups.push(A)),A}function N(){return s}function M(A){const g=y(A),I=y((()=>H(g())));return I.toArray=()=>{const A=I();return Array.isArray(A)?A:null!=A?[A]:[]},I}function u(){const A=o;if(this.sources&&(this.state||A))if(this.state===E||A)d(this);else{const A=n;n=null,J((()=>S(this)),!1),n=A}if(s){const A=this.observers?this.observers.length:0;s.sources?(s.sources.push(this),s.sourceSlots.push(A)):(s.sources=[this],s.sourceSlots=[A]),this.observers?(this.observers.push(s),this.observerSlots.push(s.sources.length-1)):(this.observers=[s],this.observerSlots=[s.sources.length-1])}return this.value}function F(A,g,I){let B=A.value;return A.comparator&&A.comparator(B,g)||(A.value=g,A.observers&&A.observers.length&&J((()=>{for(let g=0;g1e6)throw n=[],new Error}),!1)),g}function d(A){if(!A.fn)return;K(A);const g=i,I=s,B=a;s=i=A,function(A,g,I){let B;try{B=A.fn(g)}catch(g){A.pure&&(A.state=E,A.owned&&A.owned.forEach(K),A.owned=null),U(g)}(!A.updatedAt||A.updatedAt<=I)&&(null!=A.updatedAt&&"observers"in A?F(A,B):A.value=B,A.updatedAt=I)}(A,A.value,B),s=I,i=g}function f(A,g,I,B=E,Q){const C={fn:A,state:B,updatedAt:null,owned:null,sources:null,sourceSlots:null,cleanups:null,value:g,owner:i,context:null,pure:I};return null===i||i!==t&&(i.owned?i.owned.push(C):i.owned=[C]),C}function R(A){const g=o;if(0===A.state||g)return;if(A.state===e||g)return S(A);if(A.suspense&&l(A.suspense.inFallback))return A.suspense.effects.push(A);const I=[A];for(;(A=A.owner)&&(!A.updatedAt||A.updatedAt=0;B--)if((A=I[B]).state===E||g)d(A);else if(A.state===e||g){const g=n;n=null,J((()=>S(A,I[0])),!1),n=g}}function J(A,g){if(n)return A();let I=!1;g||(n=[]),r?I=!0:r=[],a++;try{const g=A();return function(A){n&&(Y(n),n=null);if(A)return;const g=r;r=null,g.length&&J((()=>C(g)),!1)}(I),g}catch(A){I||(r=null),n=null,U(A)}}function Y(A){for(let g=0;gA(g||{})))}function q(A){const g="fallback"in A&&{fallback:()=>A.fallback};return y(function(A,g,I={}){let Q=[],C=[],E=[],e=0,t=g.length>1?[]:null;return k((()=>b(E))),()=>{let i,o,s=A()||[];return s[B],l((()=>{let A,g,B,r,a,D,w,y,h,l=s.length;if(0===l)0!==e&&(b(E),E=[],Q=[],C=[],e=0,t&&(t=[])),I.fallback&&(Q=[m],C[0]=c((A=>(E[0]=A,I.fallback()))),e=1);else if(0===e){for(C=new Array(l),o=0;o=D&&y>=D&&Q[w]===s[y];w--,y--)B[y]=C[w],r[y]=E[w],t&&(a[y]=t[w]);for(A=new Map,g=new Array(y+1),o=y;o>=D;o--)h=s[o],i=A.get(h),g[o]=void 0===i?-1:i,A.set(h,o);for(i=D;i<=w;i++)h=Q[i],o=A.get(h),void 0!==o&&-1!==o?(B[o]=C[i],r[o]=E[i],t&&(a[o]=t[i]),o=g[o],A.set(h,o)):E[i]();for(o=D;oA.each),A.children,g||void 0))}function x(A){const g="fallback"in A&&{fallback:()=>A.fallback};return y(function(A,g,I={}){let Q,C=[],E=[],e=[],t=[],i=0;return k((()=>b(e))),()=>{const o=A()||[];return o[B],l((()=>{if(0===o.length)return 0!==i&&(b(e),e=[],C=[],E=[],i=0,t=[]),I.fallback&&(C=[m],E[0]=c((A=>(e[0]=A,I.fallback()))),i=1),E;for(C[0]===m&&(e[0](),e=[],C=[],E=[],i=0),Q=0;Qo[Q])):Q>=C.length&&(E[Q]=c(s));for(;QA.each),A.children,g||void 0))}function T(A){let g=!1;const I=A.keyed,B=y((()=>A.when),void 0,{equals:(A,I)=>g?A===I:!A==!I});return y((()=>{const Q=B();if(Q){const B=A.children,C="function"==typeof B&&B.length>0;return g=I||C,C?l((()=>B(Q))):B}return A.fallback}),void 0,void 0)}function j(A){let g=!1,I=!1;const B=M((()=>A.children)),Q=y((()=>{let A=B();Array.isArray(A)||(A=[A]);for(let g=0;gA[0]===I[0]&&(g?A[1]===I[1]:!A[1]==!I[1])&&A[2]===I[2]});return y((()=>{const[B,C,E]=Q();if(B<0)return A.fallback;const e=E.children,t="function"==typeof e&&e.length>0;return g=I||t,t?l((()=>e(C))):e}),void 0,void 0)}function W(A){return A}const Z="_$DX_DELEGATE";function X(A,g,I,B={}){let Q;return c((B=>{Q=B,g===document?A():AA(g,A(),g.firstChild?null:void 0,I)}),B.owner),()=>{Q(),g.textContent=""}}function O(A,g,I){const B=document.createElement("template");B.innerHTML=A;let Q=B.content.firstChild;return I&&(Q=Q.firstChild),Q}function z(A,g=window.document){const I=g[Z]||(g[Z]=new Set);for(let B=0,Q=A.length;BB.call(A,I[1],g))}else A.addEventListener(g,I)}function _(A,g,I){if(!g)return I?function(A,g,I){null==I?A.removeAttribute(g):A.setAttribute(g,I)}(A,"style"):g;const B=A.style;if("string"==typeof g)return B.cssText=g;let Q,C;for(C in"string"==typeof I&&(B.cssText=I=void 0),I||(I={}),g||(g={}),I)null==g[C]&&B.removeProperty(C),delete I[C];for(C in g)Q=g[C],Q!==I[C]&&(B.setProperty(C,Q),I[C]=Q);return I}function $(A,g,I){return l((()=>A(g,I)))}function AA(A,g,I,B){if(void 0===I||B||(B=[]),"function"!=typeof g)return IA(A,g,B,I);w((B=>IA(A,g(),B,I)),B)}function gA(A){const I=`$$${A.type}`;let B=A.composedPath&&A.composedPath()[0]||A.target;for(A.target!==B&&Object.defineProperty(A,"target",{configurable:!0,value:B}),Object.defineProperty(A,"currentTarget",{configurable:!0,get:()=>B||document}),g.registry&&!g.done&&(g.done=!0,document.querySelectorAll("[id^=pl-]").forEach((g=>{for(;g&&8!==g.nodeType&&g.nodeValue!=="pl-"+A;){let A=g.nextSibling;g.remove(),g=A}g&&g.remove()})));B;){const g=B[I];if(g&&!B.disabled){const Q=B[`${I}Data`];if(void 0!==Q?g.call(B,Q,A):g.call(B,A),A.cancelBubble)return}B=B._$host||B.parentNode||B.host}}function IA(A,I,B,Q,C){for(g.context&&!B&&(B=[...A.childNodes]);"function"==typeof B;)B=B();if(I===B)return B;const E=typeof I,e=void 0!==Q;if(A=e&&B[0]&&B[0].parentNode||A,"string"===E||"number"===E){if(g.context)return B;if("number"===E&&(I=I.toString()),e){let g=B[0];g&&3===g.nodeType?g.data=I:g=document.createTextNode(I),B=CA(A,B,Q,g)}else B=""!==B&&"string"==typeof B?A.firstChild.data=I:A.textContent=I}else if(null==I||"boolean"===E){if(g.context)return B;B=CA(A,B,Q)}else{if("function"===E)return w((()=>{let g=I();for(;"function"==typeof g;)g=g();B=IA(A,g,B,Q)})),()=>B;if(Array.isArray(I)){const E=[],t=B&&Array.isArray(B);if(BA(E,I,B,C))return w((()=>B=IA(A,E,B,Q,!0))),()=>B;if(g.context){if(!E.length)return B;for(let A=0;AB-e){const Q=g[E];for(;e=0;C--){const E=g[C];if(Q!==E){const g=E.parentNode===A;B||C?g&&E.remove():g?A.replaceChild(Q,E):A.insertBefore(Q,I)}else B=!0}}else A.insertBefore(Q,I);return[Q]}let EA;const eA=new Array(128).fill(void 0);function tA(A){return eA[A]}eA.push(void 0,null,!0,!1);let iA=eA.length;function oA(A){const g=tA(A);return function(A){A<132||(eA[A]=iA,iA=A)}(A),g}const sA=new TextDecoder("utf-8",{ignoreBOM:!0,fatal:!0});sA.decode();let nA=null;function rA(){return null!==nA&&0!==nA.byteLength||(nA=new Uint8Array(EA.memory.buffer)),nA}function aA(A,g){return sA.decode(rA().subarray(A,A+g))}function cA(A){iA===eA.length&&eA.push(eA.length+1);const g=iA;return iA=eA[g],eA[g]=A,g}function DA(A){const g=typeof A;if("number"==g||"boolean"==g||null==A)return`${A}`;if("string"==g)return`"${A}"`;if("symbol"==g){const g=A.description;return null==g?"Symbol":`Symbol(${g})`}if("function"==g){const g=A.name;return"string"==typeof g&&g.length>0?`Function(${g})`:"Function"}if(Array.isArray(A)){const g=A.length;let I="[";g>0&&(I+=DA(A[0]));for(let B=1;B1))return toString.call(A);if(B=I[1],"Object"==B)try{return"Object("+JSON.stringify(A)+")"}catch(A){return"Object"}return A instanceof Error?`${A.name}: ${A.message}\n${A.stack}`:B}let wA=0;const yA=new TextEncoder("utf-8"),hA="function"==typeof yA.encodeInto?function(A,g){return yA.encodeInto(A,g)}:function(A,g){const I=yA.encode(A);return g.set(I),{read:A.length,written:I.length}};function lA(A,g,I){if(void 0===I){const I=yA.encode(A),B=g(I.length);return rA().subarray(B,B+I.length).set(I),wA=I.length,B}let B=A.length,Q=g(B);const C=rA();let E=0;for(;E127)break;C[Q+E]=g}if(E!==B){0!==E&&(A=A.slice(E)),Q=I(Q,B,B=E+3*A.length);const g=rA().subarray(Q+E,Q+B);E+=hA(A,g).written}return wA=E,Q}let GA=null;function kA(){return null!==GA&&0!==GA.byteLength||(GA=new Int32Array(EA.memory.buffer)),GA}let NA=null;function MA(A,g){return(null!==NA&&0!==NA.byteLength||(NA=new Uint32Array(EA.memory.buffer)),NA).subarray(A/4,A/4+g)}class uA{static __wrap(A){const g=Object.create(uA.prototype);return g.ptr=A,g}__destroy_into_raw(){const A=this.ptr;return this.ptr=0,A}free(){const A=this.__destroy_into_raw();EA.__wbg_vtwrapper_free(A)}feed(A){const g=lA(A,EA.__wbindgen_malloc,EA.__wbindgen_realloc),I=wA;return oA(EA.vtwrapper_feed(this.ptr,g,I))}inspect(){try{const I=EA.__wbindgen_add_to_stack_pointer(-16);EA.vtwrapper_inspect(I,this.ptr);var A=kA()[I/4+0],g=kA()[I/4+1];return aA(A,g)}finally{EA.__wbindgen_add_to_stack_pointer(16),EA.__wbindgen_free(A,g)}}get_size(){try{const B=EA.__wbindgen_add_to_stack_pointer(-16);EA.vtwrapper_get_size(B,this.ptr);var A=kA()[B/4+0],g=kA()[B/4+1],I=MA(A,g).slice();return EA.__wbindgen_free(A,4*g),I}finally{EA.__wbindgen_add_to_stack_pointer(16)}}get_line(A){return oA(EA.vtwrapper_get_line(this.ptr,A))}get_cursor(){return oA(EA.vtwrapper_get_cursor(this.ptr))}}function FA(){const A={wbg:{}};return A.wbg.__wbindgen_object_drop_ref=function(A){oA(A)},A.wbg.__wbindgen_error_new=function(A,g){return cA(new Error(aA(A,g)))},A.wbg.__wbindgen_number_new=function(A){return cA(A)},A.wbg.__wbindgen_bigint_from_u64=function(A){return cA(BigInt.asUintN(64,A))},A.wbg.__wbindgen_string_new=function(A,g){return cA(aA(A,g))},A.wbg.__wbg_set_20cbc34131e76824=function(A,g,I){tA(A)[oA(g)]=oA(I)},A.wbg.__wbg_new_b525de17f44a8943=function(){return cA(new Array)},A.wbg.__wbg_new_f841cc6f2098f4b5=function(){return cA(new Map)},A.wbg.__wbg_new_f9876326328f45ed=function(){return cA(new Object)},A.wbg.__wbindgen_is_string=function(A){return"string"==typeof tA(A)},A.wbg.__wbg_set_17224bc548dd1d7b=function(A,g,I){tA(A)[g>>>0]=oA(I)},A.wbg.__wbg_set_388c4c6422704173=function(A,g,I){return cA(tA(A).set(tA(g),tA(I)))},A.wbg.__wbindgen_debug_string=function(A,g){const I=lA(DA(tA(g)),EA.__wbindgen_malloc,EA.__wbindgen_realloc),B=wA;kA()[A/4+1]=B,kA()[A/4+0]=I},A.wbg.__wbindgen_throw=function(A,g){throw new Error(aA(A,g))},A}function dA(A,g){return EA=A.exports,fA.__wbindgen_wasm_module=g,GA=null,NA=null,nA=null,EA}async function fA(A){const g=FA();("string"==typeof A||"function"==typeof Request&&A instanceof Request||"function"==typeof URL&&A instanceof URL)&&(A=fetch(A));const{instance:I,module:B}=await async function(A,g){if("function"==typeof Response&&A instanceof Response){if("function"==typeof WebAssembly.instantiateStreaming)try{return await WebAssembly.instantiateStreaming(A,g)}catch(g){if("application/wasm"==A.headers.get("Content-Type"))throw g;console.warn("`WebAssembly.instantiateStreaming` failed because your server does not serve wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\n",g)}const I=await A.arrayBuffer();return await WebAssembly.instantiate(I,g)}{const I=await WebAssembly.instantiate(A,g);return I instanceof WebAssembly.Instance?{instance:I,module:A}:I}}(await A,g);return dA(I,B)}var RA=Object.freeze({__proto__:null,VtWrapper:uA,create:function(A,g,I,B){const Q=EA.create(A,g,I,B);return uA.__wrap(Q)},default:fA,initSync:function(A){const g=FA();return A instanceof WebAssembly.Module||(A=new WebAssembly.Module(A)),dA(new WebAssembly.Instance(A,g),A)}});const JA=[62,0,0,0,63,52,53,54,55,56,57,58,59,60,61,0,0,0,0,0,0,0,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,0,0,0,0,0,0,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51];function YA(A){return JA[A-43]}const pA=function(A){let g,I=A.endsWith("==")?2:A.endsWith("=")?1:0,B=A.length,Q=new Uint8Array(B/4*3);for(let I=0,C=0;I>16,Q[C+1]=g>>8&255,Q[C+2]=255&g;return Q.subarray(0,Q.length-I)}("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ADcCACABIAIpAzg3AgAgAEEIaiAFQQhqKQMANwIAIAAgAikDCDcCAAwDCyAAIAIpAwg3AgAgAEEIaiACQRBqKQMANwIADAILAkAgAyAORwRAIAEgA0EQaiIGNgIYIAMtAAwiBUECRw0BCyACQQA7AUQgAkECOgBAIAJBAjoAPCACQSA2AjggAiAIIARrNgJIIAJBCGoiASACQThqEC4gACACKQMINwIAIAJBADoAFCAAQQhqIAFBCGopAwA3AgAMAgsgAkEYaiIEQQhqIANBCGooAgA2AgAgAykCACESIBAgAy8ADTsAACAQQQJqIANBD2otAAA6AAAgAiASNwMYIAIgBToAJCACQThqIQUjAEEgayIDJAACQCACQQhqIgkoAggiByAIRgRAIAVBAToAACAFIAQpAgA3AgQgBUEMaiAEQQhqKQIANwIADAELIAggB2shBwJAAkAgCS0ADARAIAQtAAwiEUUNAQwCCyADQQA7ARQgA0ECOgAQIANBAjoADCADIAc2AhggA0EgNgIIIAkgA0EIahAuIAVBAToAACAFQQxqIARBCGopAgA3AgAgBSAEKQIANwIEDAILIAQQZCIKRQ0AIAQoAggiCyAKSQ0AIAQgCyAKazYCCAsgBCgCCCIKIAdNBEAgCSAEKAIEIgsgChB8QQAhBwJAIBENACAJQQA6AAxBASEHIAkoAggiCiAITw0AIANBADsBFCADQQI6ABAgA0ECOgAMIANBIDYCCCADIAggCms2AhggCSADQQhqEC4LIAUgBzoAACAFQRBqQQI6AAAgBCgCAEUNASALEA8MAQsCQCAEKAIIIgsgB08EQCAEKAIEIQsgAyAHNgIEIAMgCzYCAAwBCyAHIAtByKHAABDQAQALIAkgAygCACADKAIEEHwgBCgCACEJIAQoAgQiBCAKIAcQmQEgBUEQaiAROgAAIAVBDGogCiAKIAdrIgcgByAKSxs2AgAgBUEIaiAENgIAIAUgCTYCBCAFQQE6AAALIANBIGokACACLQA4RQRAIAJBMGoiAyACQRBqKQMANwMAIAIgAikDCDcDKCABEKABIAFBCGogAykDADcCACABIAIpAyg3AgAgAi0ASEECRg0BIAIoAjxFDQEgAigCQBAPDAELCyACLQBIQQJHBEAgARCgASABQQhqIA9BCGopAgA3AgAgASAPKQIANwIA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IAFBAE4EQCADKAIIRQ0CIAMoAgQiAA0BIAENAwwFCyAEQQhqQQA2AgAMBgsgAygCACAAIAIgARC3AQwECyABRQ0CCyABIAIQwQEMAgsgBCABNgIEIARBCGpBADYCAAwCCyACCyIABEAgBCAANgIEIARBCGogATYCAEEADAILIAQgATYCBCAEQQhqIAI2AgALQQELNgIAC60BAQF/AkAgAgRAAn8CQAJAAkAgAUEATgRAIAMoAghFDQIgAygCBCIEDQEgAQ0DIAIMBAsgAEEIakEANgIADAULIAMoAgAgBCACIAEQtwEMAgsgAQ0AIAIMAQsgASACEMEBCyIDBEAgACADNgIEIABBCGogATYCACAAQQA2AgAPCyAAIAE2AgQgAEEIaiACNgIADAELIAAgATYCBCAAQQhqQQA2AgALIABBATYCAAuqAQECfyMAQUBqIgIkAAJAIAEEQCABKAIAIgNBf0YNASABIANBAWo2AgAgAkEcakEBNgIAIAJBJGpBATYCACACQeiDwAA2AhggAkEANgIQIAJBBzYCLCACIAFBBGo2AiggAiACQShqNgIgIAJBMGoiAyACQRBqEBkgASABKAIAQQFrNgIAIAJBCGogAxCaASAAIAIpAwg3AwAgAkFAayQADwsQ4AEACxDhAQALzAEBAn8CQAJAIAAoAggiBSABTwRAIAAoAgQgAUEEdGohAAJAIAUgAWsiBCACTwRAIAQgAmsiBCAAIARBBHRqIAIQEgwBC0GwkcAAQSFB1JHAABBxAAsgASACaiIEIAJJDQEgBCAFSw0CIAIEQCACQQR0IQIDQCAAIAMpAgA3AgAgAEEIaiADQQhqKQIANwIAIABBEGohACACQRBrIgINAAsLDwsgASAFQYihwAAQzwEACyABIARBmKHAABDRAQALIAQgBUGYocAAENABAAuxAgECfyMAQTBrIgMkACADIAI3AwgCfwJAIAEtAAJFBEAgAkKAgICAgICAEFQNASADQRxqQQI2AgAgA0EkakEBNgIAIANBmIXAADYCGCADQQA2AhAgA0ELNgIsIAMgA0EoajYCICADIANBCGo2AigjAEFAaiIEJAAgBEEANgIIIARCgICAgBA3AwAgBEEQaiIBQQM6ACAgAUKAgICAgAQ3AhggAUEANgIQIAFBADYCCCABQaiFwAA2AgQgASAENgIAIANB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IANBCGogBEEIaikDADcCACADQSBqIQQgA0EwaiIFEHsgBSgCAARAIANBNGooAgAQDwsgBCACKQMwNwIAIARBGGogAkEwaiIFQRhqKQMANwIAIARBEGogBUEQaikDADcCACAEQQhqIAVBCGopAwA3AgAgA0EAOgC0ASAFIAMoAkgQOiADQdwAaiEEIAMoAlwEQCADQeAAaigCABAPCyAEIAIpAzA3AgAgBEEIaiACQTBqIgdBCGoiBCgCADYCACADQbABakEANgIAIANBrAFqQQI6AAAgA0ECOgCoASADQfwAakEBOgAAIANCADcCdCADQQA6ALkBIANBgIAENgC1ASADQgA3AlAgA0GkAWpBgICACDYCACADQaABakECOgAAIANBnAFqQQI6AAAgA0GYAWpBADYCACADQZABakKAgIAINwIAIANBjAFqQQI6AAAgA0GIAWpBAjoAACADQgA3AoABIAMgAygCTCIFQQFrNgJYIAJBCGogBRBsIARBADYCACACIAIpAwg3AzAgByAFQQEQTyACQRhqIgUgBCgCADYCACACIAIpAzA3AxAgA0HoAGohBCADKAJoBEAgA0HsAGooAgAQDwsgBCACKQMQNwIAIARBCGogBSgCADYCACADQQA6ALsBIAJB0ABqJAAMAQsCQAJAIARBKGsOAgABAgsgA0EAOgCyAQwBCyACQTBGBEAgA0EBOgCzAQwBCyADQQA6ALMBCwwECyADIAIQJQwDCyAGQQA6ABgCQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIAZBFGooAgAiBEUEQCACQUBqDjYBAgMSBAUGHxYHCAkKCyAgDCAgDQ4gIA8QIBEgICAgIB8SEyAUFRYXGCAgIB4dICAgIBwbGhkgCyAGQRBqKAIAQQAgBBshBAJAAkACQAJAIAJB7ABrDgUBIyMjAwALIAJB6ABGDQEMIgsgBCgCAEE/Rw0hIAYoAggiAgRAIAYoAgQhBSACQQF0IQQgA0GoAWohAiADQYgBaiEHA0ACQAJAIAUvAQAiCEGWCE0EQAJAAkACQAJAIAhBBmsOAgECAAsgCEEZRg0CIAhBL0YNBAwFCyADQQA6ALkBIANCADcCdCADQQA6ALYBDAQLIANBADoAtwEMAwsg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CyAHQQFrDAsLIAdBA0kNDCADIAItAAQ6AKkBIANBADoAqAEMBAsgB0EFSQ0AIAItAAQhBCACLwEGIQogCSACLwEIOgAAIANBAToAqAEgAyAEIApBCHRyOwCpAQwCCyACQQRqIQQgB0ECawwICyACLQAEIQQgAi8BBiEKIAggAi8BCDoAACADQQE6AKwBIAMgBCAKQQh0cjsArQELIAJBCmohBCAHQQVrDAYLIAJBBmohBCAHQQNrDAULIANBADoAqAEgAyAEQdIAazoAqQEMAwsgA0EAOgCsASADIARBKGs6AK0BDAILIANBADoAqAEgAyAKOgCpAQwBCyADIAU6ALABCyACQQJqIQQgB0EBawshByAEIQIgBw0ACwsMAgsgBigCCCICRQ0BIAYoAgQhBCACQQF0IQIDQAJAAkAgBC8BACIFQQRHBEAgBUEURg0BDAILIANBADoAtQEMAQsgA0EAOgC4AQsgBEECaiEEIAJBAmsiAg0ACwwBCyADQQA6ALkBIAMgBigCBEHIm8AAIAYoAggbLwEAIgJBASACG0EBayICIAMoAkgiBEEBayACIARJGzYCdAsMAgsgBkEKOgAYDAELIAZBCzoAGAsgASATRw0ACwsgBkE4ai0AAARAIwBBIGsiASQAAkACQAJAIAMoAgBFDQAgAygCBCICIANBGGooAgAiBCADKAIMayIFTw0AIAUgAmsiAiAESw0BIANBADYCGCABIANBEGo2AhggASACNgIQIAEgBCACazYCFCABIANBFGooAgAiBDYCDCABIAQgAkEEdGo2AgggAUEIahAqCyABQSBqJAAMAQsgAiAEQbCVwAAQ0AEACyAGQQA6ADgLIwBBEGsiASQAIANB8ABqKAIAIQggA0HsAGooAgAhCSABQQA2AgggASAJNgIEIAEgCCAJajYCACMAQTBrIgYkACABKAIEIQIgASgCACEFAkACQANAIAIgBUYNASABIAJBAWoiBDYCBCABIAEoAggiB0EBajYCCCACLQAAIAQhAkUNAAsgBkEIaiECQRBBBBDBASIERQRAQRBBBEGox8AAKAIAIgBB4AAgABsRAgAACyACIAQ2AgQgAkEENgIAIAYoAgghBCAGKAIMIgUgBzYCACAGQRBqIgJBCGoiCkEBNgIAIAYgBTYCFCAGIAQ2AhAgBkEgaiIEQQhqIAFBCGoo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3wEAC18BAn8jAEEgayICJAAgACgCACEDIAJBCGoiAEEQaiABQRBqKQIANwMAIABBCGogAUEIaikCADcDACACIAEpAgA3AwggAiADNgIEIAJBBGpB4InAACAAEBYgAkEgaiQAC18BAn8jAEEgayICJAAgACgCACEDIAJBCGoiAEEQaiABQRBqKQIANwMAIABBCGogAUEIaikCADcDACACIAEpAgA3AwggAiADNgIEIAJBBGpBxKfAACAAEBYgAkEgaiQAC18BAn8jAEEgayICJAAgACgCACEDIAJBCGoiAEEQaiABQRBqKQIANwMAIABBCGogAUEIaikCADcDACACIAEpAgA3AwggAiADNgIEIAJBBGpB3KfAACAAEBYgAkEgaiQAC18BAn8jAEEgayICJAAgACgCACEDIAJBCGoiAEEQaiABQRBqKQIANwMAIABBCGogAUEIaikCADcDACACIAEpAgA3AwggAiADNgIEIAJBBGpBkKrAACAAEBYgAkEgaiQAC18BAn8jAEEgayICJAAgACgCACEDIAJBCGoiAEEQaiABQRBqKQIANwMAIABBCGogAUEIaikCADcDACACIAEpAgA3AwggAiADNgIEIAJBBGpB3LHAACAAEBYgAkEgaiQAC3sBAX8jAEEQayICJAAgAiAAQRxqNgIMIAFB7JnAAEEGQfKZwABBBSAAQRBqQfiZwABBiJrAAEEEIABBCGpBjJrAAEGcmsAAQQQgAEEMakGMmsAAQaCawABBECAAQbCawABBwJrAAEELIAJBDGpBzJrAABAvIAJBEGokAAuFAgIEfwF+IwBBIGsiAyQAIANBHGogAkEIai8AADsBACADIAIpAAA3AhQgA0EIaiABEE4gAykDCCEHIABBADYCCCAAIAc3AgAgA0EgNgIQIANBEGohBSABIAAoAgAgACgCCCICa0sEQCAAIAIgARB1IAAoAgghAgsgACgCBCACQQR0aiEEIAFBAk8EQCABQQFrIQYDQCAEIAUpAgA3AgAgBEEIaiAFQQhqKQIANwIAIARBEGohBCAGQQFrIgYNAAsgASACakEBayECCyAAIAEEQCAEIAUpAgA3AgAgBEEIaiAFQQhqKQIANwIAIAJBAWohAgsgAjYCCCAAQQA6AAwgA0EgaiQAC3sBAX8jAEEQayICJAAgAiAAQRNqNgIMIAFBnKPAAEEIQaSjwABBCiAAQbCjwABBwKPAAEEKIABBBGpBsKPAAEHKo8AAQQMgAEEIakHQo8AAQeCjwABBCyAAQRJqQeyjwABB/KPAAEEOIAJBDGpBjKTAABAvIAJBEGokAAtYAQF/IwBBIGsiAiQAIAIgADYCBCACQQhqIgBBEGogAUEQaikCADcDACAAQQhqIAFBCGopAgA3AwAgAiABKQIANwMIIAJBBGpB4InAACAAEBYgAkEgaiQAC6MBAQV/IAAoAggiAkUEQEEADwsgACgCBEEQayEFIAJBBHQhACACQQFrQf////8AcUEBaiECAkADQEEAIQQCQCAAIAVqIgEoAgBBIEcNACABLQAEQQJHDQAgAUEIai0AAEECRw0AIAFBDWotAAANACABQQxqLQAAIgFBD3ENACABQRBxRSEECyAERQ0BIANBAWohAyAAQRBrIgANAAsgAiEDCyADC1gBAX8jAEEgayICJAAgAiAANgIEIAJBCGoiAEEQaiABQRBqKQIANwMAIABBCGogAUEIaikCADcDACACIAEpAgA3AwggAkEEakHEp8AAIAAQFiACQSBqJAALWAEBfyMAQSBrIgIkACACIAA2AgQgAkEIaiIAQRBqIAFBEGopAgA3AwAgAEEIaiABQQhqKQIANwMAIAIgASkCADcDCCACQQRqQdyxwAAgABAWIAJBIGokAAvzBAEHfyMAQRBrIgYkACAGQQhqIAEgAkECEFUCfyAGKAIIBEBBASECIAYoAgwMAQsjAEEgayIFJAAgASICKAIIIQEgAkEANgIIAn8CQAJAIAEEQCAFIAJBDGooAgAiATYCFCAFQQhqIQkgAigCECEKIwBB0ABrIgQkAAJAIAMtAABFBEAgBCADLQABuBACNgIEIARBADYCACAEKAIEIQMgBCgCACEHDAELIARBIGoiB0EMakEENgIAIAdBFGpBAzYCACAEQThqIghBFGpBCjYCACAIQQxqQQo2AgAgBEHMhMAANgIoIARBADYCICAEIANBA2o2AkggBCADQQJqNgJAIARBCjYCPCAEIANBAWo2AjggBCAINgIwIARBEGoiCCAHEBkgBEEIaiAKIAQoAhQgBCgCGBC4ASAEKAIMIQMgBCgCCCEHIAgQrQELIAkgBzYCACAJIAM2AgQgBEHQAGokACAFKAIMIQMCQAJAIAUoAghFBEAg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ASABKAIEKAIMEQEACyACQRBqJAAgA0EQaiQACyMAIAAoAgAEQCAAKAIEEA8LIAAoAgwEQCAAQRBqKAIAEA8LC1YBAn8gASgCBCECIAEoAgAhA0EIQQQQwQEiAUUEQEEIQQRBqMfAACgCACIAQeAAIAAbEQIAAAsgASACNgIEIAEgAzYCACAAQcipwAA2AgQgACABNgIACzkAAkACfyACQYCAxABHBEBBASAAIAIgASgCEBEAAA0BGgsgAw0BQQALDwsgACADIAQgASgCDBEBAAv3BAEIfyMAQeABayIGJAAjAEEgayIHJAAgB0EIaiIEQQA6ABAgBEEANgIIIARC0ICAgIADNwIAIAQgATYCBCAEIAA2AgAgBCACQQBHOgAQIARBATYCCCAEQQxqIgEgAzYCACAGQQhqIgoiABBIIABBADoAGCAAQRRqQQA2AgAgAEKAgICAwAA3AgwgBCgCACEDIAQoAgQhAiAEKAIIIQggASgCACEJIAQtABAhBCMAQTBrIgEkACAAQRxqIgAgAyACIAggCUEAECwgAEEgaiADIAJBAUEAQQAQLCABQQhqIAIQbCABQSBqIgVBCGoiC0EANgIAIAEgASkDCDcDICAFIAJBARBPIAFBGGoiBSALKAIANgIAIAEgASkDIDcDECAAQdwAaiADEDogAEGsAWpBAjoAACAAQQI6AKgBIABB/ABqQQE6AAAgAEIANwJ0IABBjAFqQQI6AAAgAEGIAWpBAjoAACAAQaABakECOgAAIABBnAFqQQI6AAAgAEGQAWpBgICACDYCACAAQgA3AoABIABBpAFqQYCAgAg2AgAgAEIANwKUASAAIAM2AkggACACNgJMIABBADoAtAEgACAINgJAIABBxABqIAk2AgAgAEGwAWpBADYCACAAQQA6ALkBIABBgIAENgC1ASAAQgA3AlAgACACQQFrNgJYIABBADoAuwEgACAEOgC6ASAAIAEpAxA3AmggAEHwAGogBSgCADYCACABQTBqJAAgB0EgaiQAQdwBQQQQwQEiAEUEQEHcAUEEQajHwAAoAgAiAEHgACAAGxECAAALIABBADYCACAAQQRqIApB2AEQ6AEaIAZB4AFqJAAgAAu9AgECfyMAQSBrIgIkACACQQE6ABggAiABNgIUIAIgADYCECACQcCtwAA2AgwgAkG8rcAANgIIIwBB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ATYCACADBEAgA0ECdCEBA0AgACACNgIMIAAgAEEMakGkpcAAENQBIAJBBGohAiABQQRrIgENAAsLIAAtAAQEf0EBBSAAKAIAIgEoAgBB4q/AAEEBIAFBBGooAgAoAgwRAQALIABBEGokAAutAQEDfyAAKAIAIgAoAgQhAiAAKAIIIQMjAEEQayIAJAAgASgCAEG9rcAAQQEgASgCBCgCDBEBACEEIABBADoABSAAIAQ6AAQgACABNgIAIAMEQANAIAAgAjYCDCAAIABBDGpBhKXAABDUASACQQFqIQIgA0EBayIDDQALCyAALQAEBH9BAQUgACgCACIBKAIAQeKvwABBASABQQRqKAIAKAIMEQEACyAAQRBqJAALtAEBA38gACgCACIAKAIEIQIgACgCCCEDIwBBEGsiACQAIAEoAgBBva3AAEEBIAEoAgQoAgwRAQAhBCAAQQA6AAUgACAEOgAEIAAgATYCACADBEAgA0ECdCEBA0AgACACNgIMIAAgAEEMakGUpcAAENQBIAJBBGohAiABQQRrIgENAAsLIAAtAAQEf0EBBSAAKAIAIgEoAgBB4q/AAEEBIAFBBGooAgAoAgwRAQALIABBEGokAAsLACABBEAgABAPCwsZACABKAIAQYDAwABBBSABKAIEKAIMEQEACxMAIAAoAgAgASgCACACKAIAEAsLFAAgACgCACABIAAoAgQoAgwRAAALCAAgACABEBoLEAAgACgCACABIAIQhwFBAAuvAQEDfyAAKAIEIQIgACgCCCEDIwBBEGsiACQAIAEoAgBBva3AAEEBIAEoAgQoAgwRAQAhBCAAQQA6AAUgACAEOgAEIAAgATYCACADBEAgA0EEdCEBA0AgACACNgIMIAAgAEEMakHUpMAAENQBIAJBEGohAiABQRBrIgENAAsLIAAtAAQEf0EBBSAAKAIAIgEoAgBB4q/AAEEBIAFBBGooAgAoAgwRAQALIABBEGokAAuvAQEDfyAAKAIEIQIgACgCCCEDIwBBEGsiACQAIAEoAgBBva3AAEEBIAEoAgQoAgwRAQAhBCAAQQA6AAUgACAEOgAEIAAgATYCACADBEAgA0EEdCEBA0AgACACNgIMIAAgAEEMakHkpMAAENQBIAJBEGohAiABQRBrIgENAAsLIAAtAAQEf0EBBSAAKAIAIgEoAgBB4q/AAEEBIAFBBGooAgAoAgwRAQALIABBEGokAAsRACAAKAIEIAAoAgggARDkAQsTACAAQcipwAA2AgQgACABNgIACxAAIAEgACgCACAAKAIEEBALEAAgASgCACABKAIEIAAQFgsNACAAIAEgAhCHAUEACw0AIAAoAgAgASACEAULDQAgACgCACABIAIQCgsMACAAKAIAEAlBAUYLoAQBBX8gACgCACEDIwBBEGsiBCQAAkAgAUH/AE0EQCADKAIIIgIgAygCAEYEQCMAQSBrIgAkAAJAAkAgAkEBaiICRQ0AIAMoAgAiBUEBdCIGIAIgAiAGSRsiAkEIIAJBCEsbIgJBf3NBH3YhBgJAIAUEQCAAQQE2AhggACAFNgIUIAAgA0EEaigCADYCEAwBCyAAQQA2AhgLIAAgAiAGIABBEGoQOCAAKAIEIQUgACgCAEUEQCADIAI2AgAgAyAFNgIEDAILIABBCGooAgAiAkGBgICAeEYNASACRQ0AIAUgAkGox8AAKAIAIgBB4AAgABsRAgAACxCIAQALIABBIGokACADKAIIIQILIAMgAkEBajYCCCADKAIEIAJqIAE6AAAMAQsgBEEANgIMAn8gAUGAEE8EQCABQYCABE8EQCAEIAFBP3FBgAFyOgAPIAQgAUEGdkE/cUGAAXI6AA4gBCABQQx2QT9xQYABcjoADSAEIAFBEnZBB3FB8AFyOgAMQQQMAgsgBCABQT9xQYABcjoADiAEIAFBDHZB4AFyOgAMIAQgAUEGdkE/cUGAAXI6AA1BAwwBCyAEIAFBP3FBgAFyOgANIAQgAUEGdkHAAXI6AAxBAgshACAAIAMoAgAgAygCCCICa0sEQCADIAIgABAyIAMoAgghAgsgAygCBCACaiAEQQxqIAAQ6AEaIAMgACACajYCCAsgBEEQaiQAQQALDgAgACgCABoDQAwACwALfQEBfyMAQTBrIgMkACADIAE2AgQgAyAANgIAIANBCGoiAEEMakECNgIAIANBHGpBAjYCACADQSBqIgFBDGpB3wA2AgAgA0Ggs8AANgIQIANBADYCCCADQd8ANgIkIAMgATYCGCADIANBBGo2AiggAyADNgIgIAAgAhCOAQALfQEBfyMAQTBrIgMkACADIAE2AgQgAyAANgIAIANBCGoiAEEMakECNgIAIANBHGpBAjYCACADQSBqIgFBDGpB3wA2AgAgA0HAs8AANgIQIANBADYCCCADQd8ANgIkIAMgATYCGCADIANBBGo2AiggAyADNgIgIAAgAhCOAQALfQEBfyMAQTBrIgMkACADIAE2AgQgAyAANgIAIANBCGoiAEEMakECNgIAIANBHGpBAjYCACADQSBqIgFBDGpB3wA2AgAgA0H0s8AANgIQIANBADYCCCADQd8ANgIkIAMgATYCGCADIANBBGo2AiggAyADNgIgIAAgAhCOAQALCwAgADUCACABECELCwAgADEAACABECELyQICBH8CfiMAQUBqIgMkAEEBIQUCQCAALQAEDQAgAC0ABSEFAkACQAJAIAAoAgAiBCgCGCIGQQRxRQRAIAUNAQwDCyAFDQFBASEFIAQoAgBB4a/AAEEBIAQoAgQoAgwRAQANAyAEKAIYIQYMAQtBASEFIAQoAgBB1a/AAEECIAQoAgQoAgwRAQBFDQEMAgtBASEFIANBAToAFyADQbSvwAA2AhwgAyAEKQIANwMIIAMgA0EXajYCECAEKQIIIQcgBCkCECEIIAMgBC0AIDoAOCADIAQoAhw2AjQgAyAGNgIwIAMgCDcDKCADIAc3AyAgAyADQQhqNgIYIAEgA0EYaiACKAIMEQAADQEgAygCGEHTr8AAQQIgAygCHCgCDBEBACEFDAELIAEgBCACKAIMEQAAIQULIABBAToABSAAIAU6AAQgA0FAayQACw0AIAAoAgAgASACEBwLCwAgACkDACABECELCwAgACMAaiQAIwALBwAgABCtAQvpAQEFfyAAKAIAIQIjAEFAaiIAJAAgAEIANwM4IABBOGogAigCABAMIABBFGpBAjYCACAAQRxqQQE2AgAgACAAKAI8IgI2AjAgACAAKAI4NgIsIAAgAjYCKCAAQdoANgIkIABBwKXAADYCECAAQQA2AgggACAAQShqIgQ2AiAgACAAQSBqNgIYIwBBIGsiAiQAIAEoAgQhBSABKAIAIAJBCGoiAUEQaiAAQQhqIgNBEGopAgA3AwAgAUEIaiADQQhqKQIANwMAIAIgAykCADcDCCAFIAEQFiACQSBqJAAgBBCtASAAQUBrJAALCwAgACgCACABEGsLYAEBfyAAKAIAIQAjAEEQayICJAAgAiAAQQJqNgIMIAFBuInAAEEDQbuJwABBASAAQbyJwABBzInAAEEBIABB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QQsNAEKy+KXLheeH1Jt/CwwAQuLnycndnOOADQsDAAELC4xHAQBBgIDAAAuCR1RyaWVkIHRvIHNocmluayB0byBhIGxhcmdlciBjYXBhY2l0eQAAEAAkAAAAL3J1c3RjLzkwYzU0MTgwNmYyM2ExMjcwMDJkZTViNDAzOGJlNzMxYmExNDU4Y2EvbGlicmFyeS9hbGxvYy9zcmMvcmF3X3ZlYy5ycywAEABMAAAArgEAAAkAAABNYXAga2V5IGlzIG5vdCBhIHN0cmluZyBhbmQgY2Fubm90IGJlIGFuIG9iamVjdCBrZXkAAQAAAAwAAAAEAAAAAgAAAAMAAAAEAAAAYSBEaXNwbGF5IGltcGxlbWVudGF0aW9uIHJldHVybmVkIGFuIGVycm9yIHVuZXhwZWN0ZWRseQAFAAAAAAAAAAEAAAAGAAAAL3J1c3RjLzkwYzU0MTgwNmYyM2ExMjcwMDJkZTViNDAzOGJlNzMxYmExNDU4Y2EvbGlicmFyeS9hbGxvYy9zcmMvc3RyaW5nLnJzABwBEABLAAAA3QkAAA4AAABgdW53cmFwX3Rocm93YCBmYWlsZWQAAABjYWxsZWQgYFJlc3VsdDo6dW53cmFwKClgIG9uIGFuIGBFcnJgIHZhbHVlAAgAAAAEAAAABAAAAAkAAABzcmMvbGliLnJzAADMARAACgAAAB0AAAAwAAAAkAEQAAAAAADMARAACgAAACwAAAAtAAAAzAEQAAoAAAAyAAAALwAAAGZnYmdmYWludAFib2xkaXRhbGljdW5kZXJsaW5lc3RyaWtldGhyb3VnaGJsaW5raW52ZXJzZXJnYigsKUYCEAAEAAAASgIQAAEAAABKAhAAAQAAAEsCEAABAAAAIGNhbid0IGJlIHJlcHJlc2VudGVkIGFzIGEgSmF2YVNjcmlwdCBudW1iZXJsAhAAAAAAAGwCEAAsAAAADAAAAAwAAAAEAAAADQAAAA4AAAAPAAAAYSBEaXNwbGF5IGltcGxlbWVudGF0aW9uIHJldHVybmVkIGFuIGVycm9yIHVuZXhwZWN0ZWRseQAQAAAAAAAAAAEAAAAGAAAAL3J1c3RjLzkwYzU0MTgwNmYyM2ExMjcwMDJkZTViNDAzOGJlNzMxYmExNDU4Y2EvbGlicmFyeS9hbGxvYy9zcmMvc3RyaW5nLnJzAAgDEABLAAAA3QkAAA4AAABFcnJvcgAAABAAAAAEAAAABAAAABEAAABUcmllZCB0byBzaHJpbmsgdG8gYSBsYXJnZXIgY2FwYWNpdHl8AxAAJAAAAC9ydXN0Yy85MGM1NDE4MDZmMjNhMTI3MDAyZGU1YjQwMzhiZTczMWJhMTQ1OGNhL2xpYnJhcnkvYWxsb2Mvc3JjL3Jhd192ZWMucnOoAxAATAAAAK4BAAAJAAAAY2xvc3VyZSBpbnZva2VkIHJlY3Vyc2l2ZWx5IG9yIGFmdGVyIGJlaW5nIGRyb3BwZWRQZW5mb3JlZ3JvdW5kAB4AAAAEAAAAAQAAAB8AAABiYWNrZ3JvdW5kaW50ZW5zaXR5AB4AAAABAAAAAQAAACAAAABhdHRycwAAAB4AAAAEAAAABAAAACEAAABGYWludEJvbGROb3JtYWwABgAAAAQAAAAFAAAAmQQQAJUEEACQBBAAUkdCciIAAAABAAAAAQAAACMAAABnYgAAIgAAAAQAAAAEAAAAIQAAACQAAAAEAAAABAAAACUAAAAmAAAAJwAAAFJHQgAkAAAABAAAAAQAAAAoAAAASW5kZXhlZAAkAAAABAAAAAQAAAAhAAAAL2hvbWUvbWFyY2luLy5jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTZmMTdkMjJiYmExNTAwMWYvYXZ0LTAuOS4wL3NyYy90ZXJtaW5hbC5ycwAkBRAAWwAAAHABAAAKAAAAJAUQAFsAAACnAQAAEQAAACQFEABbAAAA5gIAABgAAABjb2xzcm93c2J1ZmZlcm90aGVyX2J1ZmZlcmFjdGl2ZV9idWZmZXJfdHlwZXNjcm9sbGJhY2tfbGltaXRjdXJzb3JwZW5jaGFyc2V0c2FjdGl2ZV9jaGFyc2V0dGFic2luc2VydF9tb2Rlb3JpZ2luX21vZGVhdXRvX3dyYXBfbW9kZW5ld19saW5lX21vZGVuZXh0X3ByaW50X3dyYXBzdG9wX21hcmdpbmJvdHRvbV9tYXJnaW5zYXZlZF9jdHhhbHRlcm5hdGVfc2F2ZWRfY3R4ZGlydHlfbGluZXNyZXNpemFibGVyZXNpemVkAACwBRAABAAAALQFEAAEAAAAuAUQAAYAAAC+BRAADAAAAMoFEAASAAAA3AUQABAAAADsBRAABgAAAPIF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AABFAAAAcGFyYW1zAABGAAAADAAAAAQAAABHAAAAaW50ZXJtZWRpYXRlcwAAAEQAAAAEAAAABAAAAEgAAABTb3NQbUFwY1N0cmluZ09zY1N0cmluZ0Rjc0lnbm9yZURjc1Bhc3N0aHJvdWdoRGNzSW50ZXJtZWRpYXRlRGNzUGFyYW1EY3NFbnRyeUNzaUlnbm9yZUNzaUludGVybWVkaWF0ZUNzaVBhcmFtQ3NpRW50cnlFc2NhcGVJbnRlcm1lZGlhdGVFc2NhcGVHcm91bmRQYXJhbXMAAABEAAAABAAAAAQAAABJAAAASW50ZXJtZWRpYXRlcwAAAEQAAAAEAAAABAAAAEoAAAAGAAAABgAAABIAAAAIAAAACAAAAA8AAAAJAAAACAAAAAgAAAAPAAAADgAAAAkAAAAJAAAADgAAAK0OEACnDhAAlQ4QAI0OEACFDhAAdg4QAG0OEABlDhAAXQ4QAE4OEABADhAANw4QAC4OEAAgDhAAYXNzZXJ0aW9uIGZhaWxlZDogbWlkIDw9IHNlbGYubGVuKCkvcnVzdGMvOTBjNTQxODA2ZjIzYTEyNzAwMmRlNWI0MDM4YmU3MzFiYTE0NThjYS9saWJyYXJ5L2NvcmUvc3JjL3NsaWNlL21vZC5yc38PEABNAAAAKwwAAAkAAABhc3NlcnRpb24gZmFpbGVkOiBrIDw9IHNlbGYubGVuKCkAAAB/DxAATQAAAFYMAAAJAAAAL2hvbWUvbWFyY2luLy5jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTZmMTdkMjJiYmExNTAwMWYvYXZ0LTAuOS4wL3NyYy9saW5lLnJzABAQEABXAAAAFwAAAAkAAAAQEBAAVwAAABsAAAAJAAAAEBAQAFcAAAAfAAAACQAAABAQEABXAAAAIAAAAAkAAAAQEBAAVwAAACQAAAAJAAAAEBAQAFcAAAAmAAAACQAAABAQEABXAAAAOwAAACAAAABMaW5lY2VsbHMAAABLAAAADAAAAAQAAABMAAAAd3JhcHBlZABNAAAABAAAAAQAAAA4AAAAU29tZU4AAAAEAAAABAAAAE8AAABOb25lTgAAAAQAAAAEAAAAUAAAAC9ob21lL21hcmNpbi8uY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby02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");function SA(A){return"number"==typeof A?A:"string"==typeof A?A.split(":").reverse().map(parseFloat).reduce(((A,g,I)=>A+g*Math.pow(60,I))):void 0}class LA{constructor(){let A=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1;this.speed=A,this.startTime=performance.now()}getTime(){return this.speed*(performance.now()-this.startTime)/1e3}setTime(A){this.startTime=performance.now()-A/this.speed*1e3}}class KA{constructor(){}getTime(A){}setTime(A){}}const UA=(async()=>(await fA(pA),RA))();class HA{constructor(A){this.core=A,this.driver=A.driver}onEnter(A){}init(){}play(){}pause(){}togglePlay(){}seek(A){return!1}step(){}stop(){this.driver.stop()}}class mA extends HA{async init(){try{return await this.core.initializeDriver(),this.core.setState("stopped")}catch(A){throw this.core.setState("errored"),A}}async play(){this.core.dispatchEvent("play");const A=await this.init();return await A.doPlay()}togglePlay(){return this.play()}async seek(A){const g=await this.init();return await g.seek(A)}async step(){const A=await this.init();return await A.step()}stop(){}}class bA extends HA{onEnter(A){let{reason:g,message:I}=A;this.core.dispatchEvent("stopped",{message:I}),"paused"===g?this.core.dispatchEvent("pause"):"ended"===g&&this.core.dispatchEvent("ended")}play(){return this.core.dispatchEvent("play"),this.doPlay()}async doPlay(){const A=await this.driver.play();!0===A?this.core.setState("playing"):"function"==typeof A&&(this.core.setState("playing"),this.driver.stop=A)}togglePlay(){return this.play()}seek(A){return this.driver.seek(A)}step(){this.driver.step()}}class vA extends HA{onEnter(){this.core.dispatchEvent("playing")}pause(){!0===this.driver.pause()&&this.core.setState("stopped",{reason:"paused"})}togglePlay(){return this.pause()}seek(A){return this.driver.seek(A)}}class qA extends HA{onEnter(){this.core.dispatchEvent("loading")}}class xA extends HA{onEnter(){this.core.dispatchEvent("offline")}}class TA extends HA{onEnter(){this.core.dispatchEvent("errored")}}class jA{constructor(A,g){this.logger=g.logger,this.state=new mA(this),this.stateName="uninitialized",this.driver=null,this.driverFn=A,this.changedLines=new Set,this.cursor=void 0,this.duration=void 0,this.cols=g.cols,this.rows=g.rows,this.speed=g.speed??1,this.loop=g.loop,this.idleTimeLimit=g.idleTimeLimit,this.preload=g.preload,this.startAt=SA(g.startAt),this.poster=this.parsePoster(g.poster),this.markers=this.normalizeMarkers(g.markers),this.pauseOnMarkers=g.pauseOnMarkers,this.commandQueue=Promise.resolve(),this.eventHandlers=new Map([["marker",[]],["ended",[]],["errored",[]],["init",[]],["input",[]],["loading",[]],["offline",[]],["pause",[]],["play",[]],["playing",[]],["reset",[]],["resize",[]],["seeked",[]],["stopped",[]],["terminalUpdate",[]]])}addEventListener(A,g){this.eventHandlers.get(A).push(g)}dispatchEvent(A){let g=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};for(const I of this.eventHandlers.get(A))I(g)}async init(){this.wasm=await UA;const A=this.feed.bind(this),g=this.now.bind(this),I=this.resetVt.bind(this),B=this.setState.bind(this),Q="npt"===this.poster.type?this.poster.value:void 0;this.driver=this.driverFn({feed:A,onInput:A=>{this.dispatchEvent("input",{data:A})},onMarker:A=>{let{index:g,time:I,label:B}=A;this.dispatchEvent("marker",{index:g,time:I,label:B})},reset:I,now:g,setTimeout:(A,g)=>window.setTimeout(A,g/this.speed),setInterval:(A,g)=>window.setInterval(A,g/this.speed),setState:B,logger:this.logger},{cols:this.cols,rows:this.rows,idleTimeLimit:this.idleTimeLimit,startAt:this.startAt,loop:this.loop,posterTime:Q,markers:this.markers,pauseOnMarkers:this.pauseOnMarkers}),"function"==typeof this.driver&&(this.driver={play:this.driver}),(this.preload||void 0!==Q)&&this.withState((A=>A.init()));const C="text"===this.poster.type?this.renderPoster(this.poster.value):void 0,E={isPausable:!!this.driver.pause,isSeekable:!!this.driver.seek,poster:C};if(void 0===this.driver.init&&(this.driver.init=()=>({})),void 0===this.driver.pause&&(this.driver.pause=()=>{}),void 0===this.driver.seek&&(this.driver.seek=A=>!1),void 0===this.driver.step&&(this.driver.step=()=>{}),void 0===this.driver.stop&&(this.driver.stop=()=>{}),void 0===this.driver.getCurrentTime){const A=this.driver.play;let g=new KA;this.driver.play=()=>(g=new LA(this.speed),A()),this.driver.getCurrentTime=()=>g.getTime()}return E}play(){return this.withState((A=>A.play()))}pause(){return this.withState((A=>A.pause()))}togglePlay(){return this.withState((A=>A.togglePlay()))}seek(A){return this.withState((async g=>{await g.seek(A)&&this.dispatchEvent("seeked")}))}step(){return this.withState((A=>A.step()))}stop(){return this.withState((A=>A.stop()))}withState(A){return this.enqueueCommand((()=>A(this.state)))}enqueueCommand(A){return this.commandQueue=this.commandQueue.then(A),this.commandQueue}getChangedLines(){if(this.changedLines.size>0){const A=new Map,g=this.vt.rows;for(const I of this.changedLines)I1&&void 0!==arguments[1]?arguments[1]:{};if(this.stateName===A)return this.state;if(this.stateName=A,"playing"===A)this.state=new vA(this);else if("stopped"===A)this.state=new bA(this);else if("loading"===A)this.state=new qA(this);else if("offline"===A)this.state=new xA(this);else{if("errored"!==A)throw`invalid state: ${A}`;this.state=new TA(this)}return this.state.onEnter(g),this.state}feed(A){this.doFeed(A),this.dispatchEvent("terminalUpdate")}doFeed(A){const[g,I]=this.vt.feed(A);if(g.forEach((A=>this.changedLines.add(A))),this.cursor=void 0,I){const[A,g]=this.vt.get_size();this.vt.cols=A,this.vt.rows=g,this.logger.debug(`core: vt resize (${A}x${g})`),this.dispatchEvent("resize",{cols:A,rows:g})}}now(){return performance.now()*this.speed}async initializeDriver(){const A=await this.driver.init();this.cols=this.cols??A.cols??80,this.rows=this.rows??A.rows??24,this.duration=this.duration??A.duration,this.markers=this.normalizeMarkers(A.markers)??this.markers??[],0===this.cols&&(this.cols=80),0===this.rows&&(this.rows=24),this.initializeVt(this.cols,this.rows);const g=void 0!==A.poster?this.renderPoster(A.poster):void 0;this.dispatchEvent("init",{cols:this.cols,rows:this.rows,duration:this.duration,markers:this.markers,theme:A.theme,poster:g})}resetVt(A,g){let I=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0,B=arguments.length>3&&void 0!==arguments[3]?arguments[3]:void 0;this.cols=A,this.rows=g,this.cursor=void 0,this.initializeVt(A,g),void 0!==I&&""!==I&&this.doFeed(I),this.dispatchEvent("reset",{cols:A,rows:g,theme:B})}initializeVt(A,g){this.logger.debug(`core: vt init (${A}x${g})`),this.vt=this.wasm.create(A,g,!0,100),this.vt.cols=A,this.vt.rows=g,this.changedLines.clear();for(let A=0;AB.feed(A)));const Q=B.get_cursor()??!1,C=[];for(let A=0;A"number"==typeof A?[A,""]:A))}}const WA=Symbol("store-raw"),ZA=Symbol("store-node"),XA=Symbol("store-name");function OA(A,g){let B=A[I];if(!B&&(Object.defineProperty(A,I,{value:B=new Proxy(A,gg)}),!Array.isArray(A))){const g=Object.keys(A),I=Object.getOwnPropertyDescriptors(A);for(let Q=0,C=g.length;Q!0,deleteProperty:()=>!0,ownKeys:function(A){return $A(A),Reflect.ownKeys(A)},getOwnPropertyDescriptor:function(A,g){const B=Reflect.getOwnPropertyDescriptor(A,g);return B&&!B.get&&B.configurable&&g!==I&&g!==ZA&&g!==XA?(delete B.value,delete B.writable,B.get=()=>A[I][g],B):B}};function Ig(A,g,I,B=!1){if(!B&&A[g]===I)return;const Q=A[g],C=A.length;void 0===I?delete A[g]:A[g]=I;let E,e=PA(A);(E=_A(e,g,Q))&&E.$((()=>I)),Array.isArray(A)&&A.length!==C&&(E=_A(e,"length",C))&&E.$(A.length),(E=e._)&&E.$()}function Bg(A,g){const I=Object.keys(g);for(let B=0;B1){B=g.shift();const C=typeof B,E=Array.isArray(A);if(Array.isArray(B)){for(let Q=0;Q1)return void Qg(A[B],g,[B].concat(I));Q=A[B],I=[B].concat(I)}let C=g[0];"function"==typeof C&&(C=C(Q,I),C===Q)||void 0===B&&null==C||(C=VA(C),void 0===B||zA(Q)&&zA(C)&&!Array.isArray(C)?Bg(Q,C):Ig(A,B,C))}function Cg(...[A,g]){const I=VA(A||{}),B=Array.isArray(I);return[OA(I),function(...A){h((()=>{B&&1===A.length?function(A,g){if("function"==typeof g&&(g=g(A)),g=VA(g),Array.isArray(g)){if(A===g)return;let I=0,B=g.length;for(;I=E&&t>=E&&(C[e]===A[t]||Q&&C[E]&&A[E]&&C[e][Q]===A[t][Q]);e--,t--)n[t]=C[e];if(E>t||E>e){for(I=E;I<=t;I++)Ig(C,I,A[I]);for(;IA.length&&Ig(C,"length",A.length))}for(o=new Array(t+1),I=t;I>=E;I--)i=A[I],s=Q&&i?i[Q]:i,g=r.get(s),o[I]=void 0===g?-1:g,r.set(s,I);for(g=E;g<=e;g++)i=C[g],s=Q&&i?i[Q]:i,I=r.get(s),void 0!==I&&-1!==I&&(n[I]=C[g],I=o[I],r.set(s,I));for(I=E;IA.length&&Ig(C,"length",A.length))}const E=Object.keys(A);for(let g=0,I=E.length;g{if(!zA(A)||!zA(Q))return Q;const g=eg(Q,{[Eg]:A},Eg,I,B);return void 0===g?A:g}}const ig=O("");var og=A=>(()=>{const g=ig.cloneNode(!0);return AA(g,(()=>A.text)),w((I=>{const B=function(A,g){const I=A.get("inverse")?A.has("bg")?A.get("bg"):"bg":A.get("fg"),B=A.get("inverse")?A.has("fg")?A.get("fg"):"fg":A.get("bg"),Q=sg(I,A.get("bold"),"fg-"),C=sg(B,A.get("blink"),"bg-");let E=g??"";Q&&(E+=" "+Q);C&&(E+=" "+C);A.has("bold")&&(E+=" ap-bright");A.has("faint")&&(E+=" ap-faint");A.has("italic")&&(E+=" ap-italic");A.has("underline")&&(E+=" ap-underline");A.has("blink")&&(E+=" ap-blink");return E}(A.attrs,A.extraClass),Q=function(A){const g=A.get("inverse")?A.get("bg"):A.get("fg"),I=A.get("inverse")?A.get("fg"):A.get("bg");let B={};"string"==typeof g&&(B.color=g);"string"==typeof I&&(B["background-color"]=I);return B}(A.attrs);return B!==I._v$&&V(g,I._v$=B),I._v$2=_(g,Q,I._v$2),I}),{_v$:void 0,_v$2:void 0}),g})();function sg(A,g,I){return"number"==typeof A?(g&&A<8&&(A+=8),`${I}${A}`):"fg"==A||"bg"==A?`${I}${A}`:void 0}const ng=O('');var rg=A=>(()=>{const g=ng.cloneNode(!0);return AA(g,v(x,{get each(){return(()=>{if("number"==typeof A.cursor){const g=[];let I=0,B=0;for(;B0&&g.push([Q[0].substring(0,e),Q[1]]),g.push([Q[0][e],C," ap-cursor-a"]),g.push([Q[0][e],E," ap-cursor-b"]),ev(og,{get text(){return A()[0]},get attrs(){return A()[1]},get extraClass(){return A()[2]}})})),w((()=>g.style.setProperty("height",A.height))),g})();const ag=O('
');var cg=A=>{const g=()=>A.lineHeight??1.3333333333,I=y((()=>({width:`${A.cols}ch`,height:g()*A.rows+"em","font-size":100*(A.scale||1)+"%","font-family":A.fontFamily,"line-height":`${g()}em`})));return(()=>{const B=ag.cloneNode(!0),Q=A.ref;return"function"==typeof Q?$(Q,B):A.ref=B,AA(B,v(q,{get each(){return A.lines},children:(I,B)=>v(rg,{get segments(){return I.segments},get cursor(){return y((()=>B()===A.cursor?.[1]))()?A.cursor?.[0]:null},get height(){return`${g()}em`}})})),w((g=>{const Q=!(!A.blink&&!A.cursorHold),C=!!A.blink,E=I();return Q!==g._v$&&B.classList.toggle("ap-cursor",g._v$=Q),C!==g._v$2&&B.classList.toggle("ap-blink",g._v$2=C),g._v$3=_(B,E,g._v$3),g}),{_v$:void 0,_v$2:void 0,_v$3:void 0}),B})()};const Dg=O(''),wg=O(''),yg=O(''),hg=O(''),lg=O('
'),Gg=O('');function kg(A){let g=Math.floor(A);const I=Math.floor(g/86400);g%=86400;const B=Math.floor(g/3600);g%=3600;const Q=Math.floor(g/60);return g%=60,I>0?`${Ng(I)}:${Ng(B)}:${Ng(Q)}:${Ng(g)}`:B>0?`${Ng(B)}:${Ng(Q)}:${Ng(g)}`:`${Ng(Q)}:${Ng(g)}`}function Ng(A){return A<10?`0${A}`:A.toString()}var Mg=A=>{const g=A=>g=>{g.preventDefault(),A(g)},I=()=>"number"==typeof A.currentTime?kg(A.currentTime):"--:--",B=()=>"number"==typeof A.remainingTime?"-"+kg(A.remainingTime):I(),Q=y((()=>"number"==typeof A.duration?A.markers.filter((g=>g[0]{const g=A.currentTarget.offsetWidth,I=A.currentTarget.getBoundingClientRect(),B=A.clientX-I.left;return 100*Math.max(0,B/g)+"%"},[E,e]=D(!1),t=function(A,g){let I=!0;return function(){if(I){I=!1;for(var B=arguments.length,Q=new Array(B),C=0;CI=!0),g)}}}(A.onSeekClick,50),i=g=>{g.altKey||g.shiftKey||g.metaKey||g.ctrlKey||0!==g.button||(e(!0),A.onSeekClick(C(g)))},o=A=>{A.altKey||A.shiftKey||A.metaKey||A.ctrlKey||E()&&t(C(A))},s=()=>{e(!1)},n=g((A=>{A.stopPropagation()}));return document.addEventListener("mouseup",s),k((()=>{document.removeEventListener("mouseup",s)})),(()=>{const C=lg.cloneNode(!0),E=C.firstChild,e=E.firstChild,t=e.nextSibling,s=E.nextSibling,r=A.ref;return"function"==typeof r?$(r,C):A.ref=C,AA(C,v(T,{get when(){return A.isPausable},get children(){const I=yg.cloneNode(!0);return P(I,"click",g(A.onPlayClick),!0),AA(I,v(j,{get children(){return[v(W,{get when(){return A.isPlaying},get children(){return Dg.cloneNode(!0)}}),v(W,{get when(){return!A.isPlaying},get children(){return wg.cloneNode(!0)}})]}})),I}}),E),AA(e,I),AA(t,B),AA(C,v(T,{get when(){return"number"==typeof A.progress||A.isSeekable},get children(){const I=hg.cloneNode(!0),B=I.firstChild,C=B.firstChild.firstChild;return B.$$mousemove=o,B.$$mousedown=i,AA(B,v(q,{get each(){return Q()},children:(I,B)=>(()=>{const Q=Gg.cloneNode(!0),C=Q.firstChild,E=C.nextSibling;var e;return P(Q,"mousedown",n,!0),P(Q,"click",(e=B(),g((()=>{A.onSeekClick({marker:e})}))),!0),AA(E,(()=>(A=>""===A[1]?kg(A[0]):`${kg(A[0])} - ${A[1]}`)(I))),w((g=>{const B=(g=>g[0]/A.duration*100+"%")(I),E=!!(g=>"number"==typeof A.currentTime&&g[0]<=A.currentTime)(I);return B!==g._v$&&Q.style.setProperty("left",g._v$=B),E!==g._v$2&&C.classList.toggle("ap-marker-past",g._v$2=E),g}),{_v$:void 0,_v$2:void 0}),Q})()}),null),w((g=>_(C,{width:"100%",transform:`scaleX(${A.progress||0}`,"transform-origin":"left center"},g))),I}}),s),P(s,"click",g(A.onFullscreenClick),!0),w((()=>C.classList.toggle("ap-seekable",!!A.isSeekable))),C})()};z(["click","mousedown","mousemove"]);const ug=O('
💥
');var Fg=A=>ug.cloneNode(!0);const dg=O('
');var fg=A=>dg.cloneNode(!0);const Rg=O('
');var Jg=A=>(()=>{const g=Rg.cloneNode(!0),I=g.firstChild;return AA(I,(()=>A.message)),w((g=>_(I,{"font-family":A.fontFamily},g))),g})();const Yg=O('
');var pg=A=>(()=>{const g=Yg.cloneNode(!0);var I;return P(g,"click",(I=A.onClick,A=>{A.preventDefault(),I(A)}),!0),g})();z(["click"]);const Sg=O('
');var Lg=A=>{const g=A.logger,I=A.core,B=A.autoPlay,[Q,C]=Cg({lines:[],cursor:void 0,charW:A.charW,charH:A.charH,bordersW:A.bordersW,bordersH:A.bordersH,containerW:0,containerH:0,isPausable:!0,isSeekable:!0,isFullscreen:!1,currentTime:null,remainingTime:null,progress:null,blink:!0,cursorHold:!1}),[E,e]=D(!1),[t,i]=D(B?null:"start"),[o,s]=D(null),[n,r]=D({cols:A.cols,rows:A.rows}),[a,c]=D(void 0),[l,N]=Cg([]),[M,u]=D(!1),[F,d]=D(void 0),f=()=>n().cols||80,R=()=>n().rows||24,J=()=>!1===A.controls?0:32;let Y,p,S,L,K,U,H,m,b;function q(){iA(),EA(),eA()}function x(A){A.rows{let{cols:g,rows:I,duration:B,theme:Q,poster:C,markers:E}=A;x({cols:g,rows:I}),c(B),d(Q),N(E),Z(C)})),I.addEventListener("play",(()=>{i(null)})),I.addEventListener("playing",(()=>{e(!0),i(null),O(),tA(),CA()})),I.addEventListener("stopped",(A=>{let{message:g}=A;e(!1),q(),void 0!==g&&(s(g),i("info"))})),I.addEventListener("loading",(()=>{e(!1),q(),i("loader")})),I.addEventListener("offline",(()=>{e(!1),q(),s("Stream offline"),i("info")})),I.addEventListener("errored",(()=>{i("error")})),I.addEventListener("resize",x),I.addEventListener("reset",(A=>{let{cols:g,rows:I,theme:B}=A;x({cols:g,rows:I}),d(B),O()})),I.addEventListener("seeked",(()=>{eA()})),I.addEventListener("terminalUpdate",(()=>{void 0===Y&&(Y=requestAnimationFrame(O))}));const X=()=>{b=new ResizeObserver(function(A,g){let I;return function(){for(var B=arguments.length,Q=new Array(B),C=0;CA.apply(this,Q)),g)}}((A=>{C({containerW:K.offsetWidth,containerH:K.offsetHeight}),K.dispatchEvent(new CustomEvent("resize",{detail:{el:U}}))}),10)),b.observe(K)};G((async()=>{g.info("player mounted"),g.debug("font measurements",{charW:Q.charW,charH:Q.charH}),X();const{isPausable:A,isSeekable:E,poster:e}=await I.init();C({isPausable:A,isSeekable:E,containerW:K.offsetWidth,containerH:K.offsetHeight}),Z(e),B&&I.play()})),k((()=>{I.stop(),iA(),EA(),b.disconnect()}));const O=()=>{const A=I.getChangedLines();A&&h((()=>{A.forEach(((A,g)=>{C("lines",g,tg(A))}))})),C("cursor",tg(I.getCursor())),C("cursorHold",!0),Y=void 0},z=y((()=>{g.debug(`containerW = ${Q.containerW}`);const I=Q.charW*f()+Q.bordersW,B=Q.charH*R()+Q.bordersH;let C=A.fit??"width";if("both"===C||Q.isFullscreen){C=Q.containerW/(Q.containerH-J())>I/B?"height":"width"}if(!1===C||"none"===C)return{};if("width"===C){const A=Q.containerW/I;return{scale:A,width:Q.containerW,height:B*A+J()}}if("height"===C){const A=(Q.containerH-J())/B;return{scale:A,width:I*A,height:Q.containerH}}throw`unsupported fit mode: ${C}`})),P=()=>{C("isFullscreen",document.fullscreenElement??document.webkitFullscreenElement)},gA=()=>{Q.isFullscreen?(document.exitFullscreen??document.webkitExitFullscreen??(()=>{})).apply(document):(K.requestFullscreen??K.webkitRequestFullscreen??(()=>{})).apply(K)},IA=A=>{if(!(A.altKey||A.metaKey||A.ctrlKey)){if(A.shiftKey){if("ArrowLeft"==A.key)I.seek("<<<");else{if("ArrowRight"!=A.key)return;I.seek(">>>")}return A.stopPropagation(),void A.preventDefault()}if(" "==A.key)I.togglePlay();else if("."==A.key)I.step(),eA();else if("f"==A.key)gA();else if("ArrowLeft"==A.key)I.seek("<<");else if("ArrowRight"==A.key)I.seek(">>");else if("["==A.key)I.seek({marker:"prev"});else if("]"==A.key)I.seek({marker:"next"});else{if(!(A.key.charCodeAt(0)>=48&&A.key.charCodeAt(0)<=57))return;{const g=(A.key.charCodeAt(0)-48)/10;I.seek(100*g+"%")}}A.stopPropagation(),A.preventDefault()}},BA=()=>{Q.isFullscreen&&oA(!0)},QA=()=>{Q.isFullscreen||oA(!1)},CA=()=>{S=setInterval(eA,100)},EA=()=>{clearInterval(S)},eA=()=>{const A=I.getCurrentTime(),g=I.getRemainingTime(),B=I.getProgress();C({currentTime:A,remainingTime:g,progress:B})},tA=()=>{L=setInterval((()=>{C((A=>{const g={blink:!A.blink};return g.blink&&(g.cursorHold=!1),g}))}),500)},iA=()=>{clearInterval(L),C("blink",!0)},oA=A=>{clearTimeout(p),A&&(p=setTimeout((()=>oA(!1)),2e3)),u(A)},sA=(()=>{const g=Sg.cloneNode(!0),B=g.firstChild;"function"==typeof K?$(K,g):K=g,g.addEventListener("webkitfullscreenchange",P),g.addEventListener("fullscreenchange",P),g.$$mousemove=BA,g.$$keydown=IA,g.addEventListener("keypress",IA);return"function"==typeof U?$(U,B):U=B,B.$$mousemove=()=>oA(!0),B.addEventListener("mouseleave",QA),AA(B,v(cg,{get cols(){return f()},get rows(){return R()},get scale(){return z()?.scale},get blink(){return Q.blink},get lines(){return Q.lines},get cursor(){return Q.cursor},get cursorHold(){return Q.cursorHold},get fontFamily(){return A.terminalFontFamily},get lineHeight(){return A.terminalLineHeight},ref(A){"function"==typeof H?H(A):H=A}}),null),AA(B,v(T,{get when(){return!1!==A.controls},get children(){return v(Mg,{get duration(){return a()},get currentTime(){return Q.currentTime},get remainingTime(){return Q.remainingTime},get progress(){return Q.progress},markers:l,get isPlaying(){return E()},get isPausable(){return Q.isPausable},get isSeekable(){return Q.isSeekable},onPlayClick:()=>I.togglePlay(),onFullscreenClick:gA,onSeekClick:A=>I.seek(A),ref(A){"function"==typeof m?m(A):m=A}})}}),null),AA(B,v(j,{get children(){return[v(W,{get when(){return"start"==t()},get children(){return v(pg,{onClick:()=>I.play()})}}),v(W,{get when(){return"loader"==t()},get children(){return v(fg,{})}}),v(W,{get when(){return"info"==t()},get children(){return v(Jg,{get message(){return o()},get fontFamily(){return A.terminalFontFamily}})}}),v(W,{get when(){return"error"==t()},get children(){return v(Fg,{})}})]}}),null),w((I=>{const Q=!!(!0===A.controls||"auto"===A.controls&&M()),C=`ap-player asciinema-player-theme-${A.theme??"asciinema"}`,E=(()=>{const g={};!1!==A.fit&&"none"!==A.fit||void 0===A.terminalFontSize||("small"===A.terminalFontSize?g["font-size"]="12px":"medium"===A.terminalFontSize?g["font-size"]="18px":"big"===A.terminalFontSize?g["font-size"]="24px":g["font-size"]=A.terminalFontSize);const I=z();void 0!==I.width&&(g.width=`${I.width}px`,g.height=`${I.height}px`);const B=F();return void 0===B||void 0!==A.theme&&null!==A.theme||(g["--term-color-foreground"]=B.foreground,g["--term-color-background"]=B.background,B.palette.forEach(((A,I)=>{g[`--term-color-${I}`]=A}))),g})();return Q!==I._v$&&g.classList.toggle("ap-hud",I._v$=Q),C!==I._v$2&&V(B,I._v$2=C),I._v$3=_(B,E,I._v$3),I}),{_v$:void 0,_v$2:void 0,_v$3:void 0}),g})();return sA};z(["keydown","mousemove"]);class Kg{log(){}debug(){}info(){}warn(){}error(){}}class Ug{constructor(A,g){this.logger=A,this.prefix=g}log(A){for(var g=arguments.length,I=new Array(g>1?g-1:0),B=1;B1?g-1:0),B=1;B1?g-1:0),B=1;B1?g-1:0),B=1;B1?g-1:0),B=1;BI=>{g(A(I))}}(A))}flatMap(A){return this.transform(function(A){return g=>I=>{A(I).forEach(g)}}(A))}filter(A){return this.transform(function(A){return g=>I=>{A(I)&&g(I)}}(A))}take(A){return this.transform(function(A){let g=0;return I=>B=>{gB=>{g+=1,g>A&&I(B)}}(A))}transform(A){return new Hg(this.input,this.xfs.concat([A]))}multiplex(A,g){return new Hg(new bg(this[Symbol.iterator](),A[Symbol.iterator](),g))}toArray(){return Array.from(this)}[Symbol.iterator](){let A=0,g=[],I=!1;const B=(Q=this.xfs,C=A=>g.push(A),Q.reverse().reduce(((A,g)=>{const I=mg(g(A.step));return{step:I.step,flush:()=>{I.flush(),A.flush()}}}),mg(C)));var Q,C;return{next:()=>{for(A===g.length&&(g=[],A=0);0===g.length;){const A=this.input.next();if(A.done)break;B.step(A.value)}return 0!==g.length||I||(B.flush(),I=!0),g.length>0?{done:!1,value:g[A++]}:{done:!0}}}}}function mg(A){return"function"==typeof A?{step:A,flush:()=>{}}:A}class bg{constructor(A,g,I){this.left=A,this.right=g,this.comparator=I}[Symbol.iterator](){let A,g;return{next:()=>{if(void 0===A&&void 0!==this.left){const g=this.left.next();g.done?this.left=void 0:A=g.value}if(void 0===g&&void 0!==this.right){const A=this.right.next();A.done?this.right=void 0:g=A.value}if(void 0===A&&void 0===g)return{done:!0};if(void 0===A){const A=g;return g=void 0,{done:!1,value:A}}if(void 0===g){const g=A;return A=void 0,{done:!1,value:g}}if(this.comparator(A,g)){const g=A;return A=void 0,{done:!1,value:g}}{const A=g;return g=void 0,{done:!1,value:A}}}}}}async function vg(A){let g,I;if(A instanceof Response){const B=await A.text(),Q=function(A){const g=A.split("\n");let I;try{I=JSON.parse(g[0])}catch(A){return}const B=new Hg(g).drop(1).filter((A=>"["===A[0])).map(JSON.parse).toArray();return{header:I,events:B}}(B);void 0!==Q?(g=Q.header,I=Q.events):g=JSON.parse(B)}else if("object"==typeof A&&"number"==typeof A.version)g=A;else{if(!Array.isArray(A))throw"invalid data";g=A[0],I=A.slice(1,A.length)}if(1===g.version)return function(A){let g=0;const I=new Hg(A.stdout).map((A=>(g+=A[0],[g,"o",A[1]])));return{cols:A.width,rows:A.height,events:I}}(g);if(2===g.version)return function(A,g){return{cols:A.width,rows:A.height,theme:qg(A.theme),events:g,idleTimeLimit:A.idle_time_limit}}(g,I);throw`asciicast v${g.version} format not supported`}function qg(A){const g=/^#[0-9A-Fa-f]{6}$/,I=A?.fg,B=A?.bg,Q=A?.palette;if(g.test(I)&&g.test(B)&&/^(#[0-9A-Fa-f]{6}:){7,}#[0-9A-Fa-f]{6}$/.test(Q))return{foreground:I,background:B,palette:Q.split(":")}}function xg(A){if("r"===A[1]){const[g,I]=A[2].split("x");return[A[0],"o",`[8;${I};${g};t`]}return A}function Tg(A){return"number"==typeof A?[A,"m",""]:[A[0],"m",A[1]]}function jg(){let A=0;return function(g){return"m"===g[1]?[g[0],g[1],{index:A++,time:g[0],label:g[2]}]:g}}class Wg{constructor(){this.items=[],this.onPush=void 0}push(A){this.items.push(A),void 0!==this.onPush&&(this.onPush(this.popAll()),this.onPush=void 0)}popAll(){if(this.items.length>0){const A=this.items;return this.items=[],A}{const A=this;return new Promise((g=>{A.onPush=g}))}}}function Zg(A,g,I,B,Q){return I>0?function(A,g,I,B){let Q=arguments.length>4&&void 0!==arguments[4]?arguments[4]:1/60;const C=new Wg,E=Xg();let e=!1,t=-Q;return setTimeout((async()=>{for(;!e;){const i=await C.popAll();if(e)return;for(const C of i){const i=C[0]-B+I;if(i-t0&&(await Og(o),e))return;g(C[0]),A(C[2]),t=i}}}),0),{pushEvent(A){if("o"===A[1])C.push(A);else if("r"===A[1]){const[g,I]=A[2].split("x");C.push([A[0],"o",`[8;${I};${g};t`])}},pushText(A){const g=(Xg()-E)/1e3;C.push([g,"o",A])},stop(){e=!0,C.push(void 0)}}}(A,g,I,B??0,Q):function(A){return{pushEvent(g){"o"===g[1]&&A(g[2])},pushText(g){A(g)},stop(){}}}(A)}function Xg(){return(new Date).getTime()}function Og(A){return new Promise((g=>{setTimeout(g,1e3*A)}))}function zg(A){return Math.min(500*Math.pow(2,A),5e3)}function Vg(A){if(A.length<13)return;const g=function(A){const g=Pg(A.subarray(0,4)),I=Pg(A.subarray(4,8));return g+I/1e6}(A.subarray(0,8)),I=Pg(A.subarray(8,12));return{time:g,data:A.subarray(12,12+I),len:I+12}}function Pg(A){return A[0]+256*A[1]+256*A[2]*256+256*A[3]*256*256}const _g=new Map([["benchmark",function(A,g){let I,{url:B,iterations:Q=10}=A,{feed:C,setState:E,now:e}=g,t=0;return{async init(){const A=await vg(await fetch(B)),{cols:g,rows:Q,events:C}=A;I=Array.from(C).filter((A=>{let[g,I,B]=A;return"o"===I})).map((A=>{let[g,I,B]=A;return[g,B]}));const E=I[I.length-1][0];for(const[A,g]of I)t+=new Blob([g]).size;return{cols:g,rows:Q,duration:E}},play(){const A=e();for(let A=0;A{E("stopped",{reason:"ended"})}),0),!0}}}],["clock",function(A,g,I){let{hourColor:B=3,minuteColor:Q=4,separatorColor:C=9}=A,{feed:E}=g,{cols:e=5,rows:t=1}=I;const i=Math.floor(t/2),o=Math.floor(e/2)-2,s=`[?25l[${i}B`;let n;const r=()=>{const A=new Date,g=A.getHours(),I=A.getMinutes(),E=[];E.push("\r");for(let A=0;A{r().forEach(E)};return{init:()=>{const A=[s].concat(r());return{cols:e,rows:t,duration:1440,poster:A}},play:()=>(E(s),a(),n=setInterval(a,1e3),!0),stop:()=>{clearInterval(n)},getCurrentTime:()=>{const A=new Date;return 60*A.getHours()+A.getMinutes()}}}],["eventsource",function(A,g){let I,B,{url:Q,bufferTime:C=.1,minFrameTime:E}=A,{feed:e,reset:t,setState:i,logger:o}=g;o=new Ug(o,"eventsource: ");let s=new KA;function n(A){void 0!==B&&B.stop(),B=Zg(e,(A=>s.setTime(A)),C,A,E)}return{play:()=>{I=new EventSource(Q),I.addEventListener("open",(()=>{o.info("opened"),n()})),I.addEventListener("error",(A=>{o.info("errored"),o.debug({e:A}),i("loading")})),I.addEventListener("message",(A=>{const g=JSON.parse(A.data);if(Array.isArray(g))B.pushEvent(g);else if(void 0!==g.cols||void 0!==g.width){const A=g.cols??g.width,I=g.rows??g.height;o.debug(`vt reset (${A}x${I})`),i("playing"),n(g.time),t(A,I,g.init??void 0),s=new LA,"number"==typeof g.time&&s.setTime(g.time)}else"offline"===g.state&&(o.info("stream offline"),i("offline"),s=new KA)})),I.addEventListener("done",(()=>{o.info("closed"),I.close(),i("stopped",{reason:"ended"})}))},stop:()=>{void 0!==B&&B.stop(),void 0!==I&&I.close()},getCurrentTime:()=>s.getTime()}}],["random",function(A,g){let{feed:I,setTimeout:B}=g;const Q=" ".charCodeAt(0),C="~".charCodeAt(0)-Q;let E;const e=()=>{const A=Math.pow(5,4*Math.random());E=B(t,A)},t=()=>{e();const A=String.fromCharCode(Q+Math.floor(Math.random()*C));I(A)};return()=>(e(),()=>clearInterval(E))}],["recording",function(A,g,I){let B,Q,C,E,e,t,i,o,s,{feed:n,onInput:r,onMarker:a,now:c,setTimeout:D,setState:w,logger:y}=g,{idleTimeLimit:h,startAt:l,loop:G,posterTime:k,markers:N,pauseOnMarkers:M,cols:u,rows:F}=I,d=0,f=0,R=0;async function J(A,g){const I=await fetch(A,g);if(!I.ok)throw`failed fetching recording from ${A}: ${I.status} ${I.statusText}`;return I}function Y(){const A=C[d];A?i=D(p,function(A){let g=1e3*A-(c()-o);return g<0&&(g=0),g}(A[0])):(S(),R++,!0===G||"number"==typeof G&&R1e3*g[0]);Y()}function S(){clearTimeout(i),i=null}function L(A){const[g,I,B]=A;if("o"===I)n(B);else if("i"===I)r(B);else if("m"===I&&(a(B),M))return K(),s=1e3*g,w("stopped",{reason:"paused"}),!0;return!1}function K(){return!i||(S(),s=c()-o,!0)}function U(){o=c()-s,s=null,Y()}function H(A){const g=!!i;K();const I=(s??0)/1e3;if("string"==typeof A)"<<"===A?A=I-5:">>"===A?A=I+5:"<<<"===A?A=I-.1*e:">>>"===A?A=I+.1*e:"%"===A[A.length-1]&&(A=parseFloat(A.substring(0,A.length-1))/100*e);else if("object"==typeof A)if("prev"===A.marker)A=m(I)??0,g&&I-A<1&&(A=m(A)??0);else if("next"===A.marker)A=function(A){if(0==E.length)return;let g,I=E.length-1,B=E[I];for(;B&&B[0]>A;)g=B[0],B=E[--I];return g}(I)??e;else if("number"==typeof A.marker){const g=E[A.marker];if(void 0===g)throw`invalid marker index: ${A.marker}`;A=g[0]}const B=Math.min(Math.max(A,0),e);B[A[0],"o",A[1]])),C=new Hg(I).map((A=>[A[0],"i",A[1]])),E=new Hg(B).map(Tg);return Q.multiplex(C,((A,g)=>A[0]A[0]1&&void 0!==arguments[1]?arguments[1]:1/60;return B=>{let Q=0,C=0;return{step:A=>{Q++,void 0!==g?A[1]===g[1]&&A[0]-g[0]{void 0!==g&&(B(g),C++),A.debug(`batched ${Q} frames to ${C} frames`)}}}}(g,C)).map(function(A,g,I){let B=0,Q=0;return function(C){const E=C[0]-B-A;return B=C[0],E>0&&(Q+=E,C[0]"m"!==A[1])).multiplex(e,((A,g)=>A[0]"i"===A[1]?[A[0]+E,A[1],A[2]]:A)),t.sort(((A,g)=>A[0]-g[0])));const o=t[t.length-1][0],s=B-i.offset;return{...A,events:t,duration:o,effectiveStartAt:s}}(await g(await function(A){let{url:g,data:I,fetchOpts:B={}}=A;if("string"==typeof g)return J(g,B);if(Array.isArray(g))return Promise.all(g.map((A=>J(A,B))));if(void 0!==I)return"function"==typeof I&&(I=I()),I instanceof Promise||(I=Promise.resolve(I)),I.then((A=>"string"==typeof A||A instanceof ArrayBuffer?new Response(A):A));throw"failed fetching recording file: url/data missing in src"}(A),{encoding:s}),y,{idleTimeLimit:h,startAt:l,minFrameTime:I,inputOffset:i,markers_:N});if(({cols:B,rows:Q,events:C,duration:e,effectiveStartAt:t}=n),u=u??B,F=F??Q,0===C.length)throw"recording is missing events";void 0!==o&&function(A,g){const I=document.createElement("a"),B=A.events.map((A=>"m"===A[1]?[A[0],A[1],A[2].label]:A)),Q=function(A){return`${JSON.stringify({version:2,width:A.cols,height:A.rows})}\n${A.events.map(JSON.stringify).join("\n")}\n`}({...A,events:B});I.href=URL.createObjectURL(new Blob([Q],{type:"text/plain"})),I.download=g,I.click()}(n,o);const r=void 0!==k?(a=k,C.filter((A=>A[0]A[2]))):void 0;var a;return E=C.filter((A=>"m"===A[1])).map((A=>[A[0],A[2].label])),{cols:B,rows:Q,duration:e,theme:n.theme,poster:r,markers:E}},play:function(){return i||(void 0===C[d]&&(t=0),null!==t&&H(t),U()),!0},pause:K,seek:H,step:function(){let A=C[d++];for(;void 0!==A&&"o"!==A[1];)A=C[d++];if(void 0===A)return;n(A[2]);const g=A[0];f=g,s=1e3*g,t=null},stop:K,getCurrentTime:function(){return i?(c()-o)/1e3:(s??0)/1e3}}}],["websocket",function(A,g){let{url:I,bufferTime:B=.1,reconnectDelay:Q=zg,minFrameTime:C}=A,{feed:E,reset:e,setState:t,logger:i}=g;i=new Ug(i,"websocket: ");const o=new TextDecoder;let s,n,r,a=new KA,c=0,D=!1;function w(A){void 0!==n&&n.stop(),n=Zg(E,(A=>a.setTime(A)),B,A,C)}function y(A){if("string"==typeof A.data)i.info("activating asciicast-compatible handler"),s.onmessage=h,h(A);else{const g=new Uint8Array(A.data);if(65==g[0]&&76==g[1]&&105==g[2]&&83==g[3])1==g[4]?(i.info("activating ALiS v1 handler"),s.onmessage=G):(i.warn(`unsupported ALiS version (${g[4]})`),s.close());else{i.info("activating raw text handler");const I=o.decode(g),B=function(A){const g=A.match(/\x1b\[8;(\d+);(\d+)t/);if(null!==g)return[parseInt(g[2],10),parseInt(g[1],10)]}(I)??function(A){const g=A.match(/\[.*COLUMNS="(\d{1,3})" LINES="(\d{1,3})".*\]/);if(null!==g)return[parseInt(g[1],10),parseInt(g[2],10)]}(I);if(void 0!==B){const[A,g]=B;u(A,g,0,void 0)}s.onmessage=M,M(A)}}}function h(A){const g=JSON.parse(A.data);Array.isArray(g)?n.pushEvent(g):void 0!==g.cols||void 0!==g.width?u(g.cols??g.width,g.rows??g.height,g.time,g.init??void 0):"offline"===g.status&&F()}const l=54;function G(A){const g=A.data,I=new DataView(g),B=I.getUint8(0);let Q=1;if(1===B){const A=I.getUint16(Q,!0);Q+=2;const B=I.getUint16(Q,!0);Q+=2;const C=I.getFloat32(Q,!0);Q+=4;const E=I.getUint8(Q);let e;Q+=1,1===E&&(e=function(A){const g=k(A[0],A[1],A[2]),I=k(A[3],A[4],A[5]),B=[];for(let g=0;g<16;g++)B.push(k(A[3*g+6],A[3*g+7],A[3*g+8]));return{foreground:g,background:I,palette:B}}(new Uint8Array(g,Q,l)),Q+=l);const t=I.getUint32(Q,!0);let i;Q+=4,t>0&&(i=o.decode(new Uint8Array(g,Q,t)),Q+=t),u(A,B,C,i,e)}else if(111===B){const A=I.getFloat32(1,!0),B=I.getUint32(5,!0),Q=o.decode(new Uint8Array(g,9,B));n.pushEvent([A,"o",Q])}else if(114===B){const A=I.getFloat32(1,!0),g=I.getUint16(5,!0),B=I.getUint16(7,!0);n.pushEvent([A,"r",`${g}x${B}`])}else 4===B?F():i.debug(`unknown frame type: ${B}`)}function k(A,g,I){return`#${N(A)}${N(g)}${N(I)}`}function N(A){return A.toString(16).padStart(2,"0")}function M(A){n.pushText(o.decode(A.data))}function u(A,g,I,B,Q){i.debug(`stream reset (${A}x${g} @${I})`),t("playing"),w(I),e(A,g,B,Q),a=new LA,"number"==typeof I&&a.setTime(I)}function F(){i.info("stream offline"),t("offline"),a=new KA}function d(){s=new WebSocket(I),s.binaryType="arraybuffer",s.onopen=()=>{i.info("opened"),w(),r=setTimeout((()=>{c=0}),1e3)},s.onmessage=y,s.onclose=A=>{if(D||1e3===A.code||1005===A.code)i.info("closed"),t("stopped",{reason:"ended",message:"Stream ended"});else{clearTimeout(r);const A=Q(c++);i.info(`unclean close, reconnecting in ${A}...`),t("loading"),setTimeout(d,A)}}}return{play:()=>{d()},stop:()=>{D=!0,void 0!==n&&n.stop(),void 0!==s&&s.close()},getCurrentTime:()=>a.getTime()}}]]),$g=new Map([["asciicast",vg],["typescript",async function(A,g){let{encoding:I}=g;const B=new TextDecoder(I);let Q,C,E=(await A[0].text()).split("\n").filter((A=>A.length>0)).map((A=>A.split(" ")));E[0].length<3&&(E=E.map((A=>["O",A[0],A[1]])));const e=await A[1].arrayBuffer(),t=new Uint8Array(e),i=t.findIndex((A=>10==A))+1,o=B.decode(t.subarray(0,i)).match(/COLUMNS="(\d+)" LINES="(\d+)"/);null!==o&&(Q=parseInt(o[1],10),C=parseInt(o[2],10));const s={array:t,cursor:i};let n=s;if(void 0!==A[2]){const g=await A[2].arrayBuffer();n={array:new Uint8Array(g),cursor:i}}const r=[];let a=0;for(const A of E)if(a+=parseFloat(A[1]),"O"===A[0]){const g=parseInt(A[2],10),I=s.array.subarray(s.cursor,s.cursor+g),Q=B.decode(I);r.push([a,"o",Q]),s.cursor+=g}else if("I"===A[0]){const g=parseInt(A[2],10),I=n.array.subarray(n.cursor,n.cursor+g),Q=B.decode(I);r.push([a,"i",Q]),n.cursor+=g}else if("S"===A[0]&&"SIGWINCH"===A[2]){const g=parseInt(A[4].slice(5),10),I=parseInt(A[3].slice(5),10);r.push([a,"r",`${g}x${I}`])}else"H"===A[0]&&"COLUMNS"===A[2]?Q=parseInt(A[3],10):"H"===A[0]&&"LINES"===A[2]&&(C=parseInt(A[3],10));return Q=Q??80,C=C??24,{cols:Q,rows:C,events:r}}],["ttyrec",async function(A,g){let{encoding:I}=g;const B=new TextDecoder(I),Q=await A.arrayBuffer(),C=new Uint8Array(Q),E=Vg(C),e=E.time,t=B.decode(E.data).match(/\x1b\[8;(\d+);(\d+)t/),i=[];let o=80,s=24;null!==t&&(o=parseInt(t[2],10),s=parseInt(t[1],10));let n=0,r=Vg(C);for(;void 0!==r;){const A=r.time-e,g=B.decode(r.data);i.push([A,"o",g]),n+=r.len,r=Vg(C.subarray(n))}return{cols:o,rows:s,events:i}}]]);return A.create=function(A,g){let I=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};const B=I.logger??new Kg,Q=new jA(function(A){if("function"==typeof A)return A;"string"==typeof A&&(A="ws://"==A.substring(0,5)||"wss://"==A.substring(0,6)?{driver:"websocket",url:A}:"clock:"==A.substring(0,6)?{driver:"clock"}:"random:"==A.substring(0,7)?{driver:"random"}:"benchmark:"==A.substring(0,10)?{driver:"benchmark",url:A.substring(10)}:{driver:"recording",url:A});void 0===A.driver&&(A.driver="recording");if("recording"==A.driver&&(void 0===A.parser&&(A.parser="asciicast"),"string"==typeof A.parser)){if(!$g.has(A.parser))throw`unknown parser: ${A.parser}`;A.parser=$g.get(A.parser)}if(_g.has(A.driver)){const g=_g.get(A.driver);return(I,B)=>g(A,I,B)}throw`unsupported driver: ${JSON.stringify(A)}`}(A),{logger:B,cols:I.cols,rows:I.rows,loop:I.loop,speed:I.speed,preload:I.preload,startAt:I.startAt,poster:I.poster,markers:I.markers,pauseOnMarkers:I.pauseOnMarkers,idleTimeLimit:I.idleTimeLimit}),C=function(A,g){const I=80,B=24,Q=document.createElement("div");let C;Q.style.height="0px",Q.style.overflow="hidden",Q.style.fontSize="15px",document.body.appendChild(Q);const E=X((()=>(C=v(cg,{cols:I,rows:B,lineHeight:g,fontFamily:A,lines:[]}),C)),Q),e={charW:C.clientWidth/I,charH:C.clientHeight/B,bordersW:C.offsetWidth-C.clientWidth,bordersH:C.offsetHeight-C.clientHeight};return E(),document.body.removeChild(Q),e}(I.terminalFontFamily,I.terminalLineHeight),E={logger:B,core:Q,cols:I.cols,rows:I.rows,fit:I.fit,controls:I.controls??"auto",autoPlay:I.autoPlay??I.autoplay,terminalFontSize:I.terminalFontSize,terminalFontFamily:I.terminalFontFamily,terminalLineHeight:I.terminalLineHeight,theme:I.theme,...C};let e;const t=X((()=>(e=v(Lg,E),e)),g),i={el:e,dispose:t,getCurrentTime:()=>Q.getCurrentTime(),getDuration:()=>Q.getDuration(),play:()=>Q.play(),pause:()=>Q.pause(),seek:A=>Q.seek(A),addEventListener:(A,g)=>Q.addEventListener(A,g.bind(i))};return i},A}({}); +var AsciinemaPlayer=function(A){"use strict";const g={};const I=Symbol("solid-proxy"),B=Symbol("solid-track"),Q={equals:(A,g)=>A===g};let C=q;const E=1,e=2,i={owned:null,cleanups:null,context:null,owner:null};var V=null;let t=null,o=null,s=null,n=null,r=0;function a(A,g){const I=o,B=V,Q=0===A.length,C=Q?i:{owned:null,cleanups:null,context:null,owner:void 0===g?B:g},E=Q?A:()=>A((()=>l((()=>S(C)))));V=C,o=null;try{return R(E,!0)}finally{o=I,V=B}}function c(A,g){const I={value:A,observers:null,observerSlots:null,comparator:(g=g?Object.assign({},Q,g):Q).equals||void 0};return[F.bind(I),A=>("function"==typeof A&&(A=A(I.value)),d(I,A))]}function w(A,g,I){u(N(A,g,!1,E))}function D(A,g,I){I=I?Object.assign({},Q,I):Q;const B=N(A,g,!0,0);return B.observers=null,B.observerSlots=null,B.comparator=I.equals||void 0,u(B),F.bind(B)}function h(A){return R(A,!1)}function l(A){if(null===o)return A();const g=o;o=null;try{return A()}finally{o=g}}function M(A){!function(A,g,I){C=J;const B=N(A,g,!1,E);B.user=!0,n?n.push(B):u(B)}((()=>l(A)))}function y(A){return null===V||(null===V.cleanups?V.cleanups=[A]:V.cleanups.push(A)),A}function G(){return o}function k(A){const g=D(A),I=D((()=>L(g())));return I.toArray=()=>{const A=I();return Array.isArray(A)?A:null!=A?[A]:[]},I}function F(){const A=t;if(this.sources&&(this.state||A))if(this.state===E||A)u(this);else{const A=s;s=null,R((()=>Y(this)),!1),s=A}if(o){const A=this.observers?this.observers.length:0;o.sources?(o.sources.push(this),o.sourceSlots.push(A)):(o.sources=[this],o.sourceSlots=[A]),this.observers?(this.observers.push(o),this.observerSlots.push(o.sources.length-1)):(this.observers=[o],this.observerSlots=[o.sources.length-1])}return this.value}function d(A,g,I){let B=A.value;return A.comparator&&A.comparator(B,g)||(A.value=g,A.observers&&A.observers.length&&R((()=>{for(let g=0;g1e6)throw s=[],new Error}),!1)),g}function u(A){if(!A.fn)return;S(A);const g=V,I=o,B=r;o=V=A,function(A,g,I){let B;try{B=A.fn(g)}catch(g){A.pure&&(A.state=E,A.owned&&A.owned.forEach(S),A.owned=null),p(g)}(!A.updatedAt||A.updatedAt<=I)&&(null!=A.updatedAt&&"observers"in A?d(A,B):A.value=B,A.updatedAt=I)}(A,A.value,B),o=I,V=g}function N(A,g,I,B=E,Q){const C={fn:A,state:B,updatedAt:null,owned:null,sources:null,sourceSlots:null,cleanups:null,value:g,owner:V,context:null,pure:I};return null===V||V!==i&&(V.owned?V.owned.push(C):V.owned=[C]),C}function f(A){const g=t;if(0===A.state||g)return;if(A.state===e||g)return Y(A);if(A.suspense&&l(A.suspense.inFallback))return A.suspense.effects.push(A);const I=[A];for(;(A=A.owner)&&(!A.updatedAt||A.updatedAt=0;B--)if((A=I[B]).state===E||g)u(A);else if(A.state===e||g){const g=s;s=null,R((()=>Y(A,I[0])),!1),s=g}}function R(A,g){if(s)return A();let I=!1;g||(s=[]),n?I=!0:n=[],r++;try{const g=A();return function(A){s&&(q(s),s=null);if(A)return;const g=n;n=null,g.length&&R((()=>C(g)),!1)}(I),g}catch(A){I||(n=null),s=null,p(A)}}function q(A){for(let g=0;gA(g||{})))}function z(){return!0}const b={get:(A,g,B)=>g===I?B:A.get(g),has:(A,g)=>g===I||A.has(g),set:z,deleteProperty:z,getOwnPropertyDescriptor:(A,g)=>({configurable:!0,enumerable:!0,get:()=>A.get(g),set:z,deleteProperty:z}),ownKeys:A=>A.keys()};function v(A){return(A="function"==typeof A?A():A)?A:{}}function x(A){const g="fallback"in A&&{fallback:()=>A.fallback};return D(function(A,g,I={}){let Q=[],C=[],E=[],e=0,i=g.length>1?[]:null;return y((()=>H(E))),()=>{let V,t,o=A()||[];return o[B],l((()=>{let A,g,B,n,r,c,w,D,h,l=o.length;if(0===l)0!==e&&(H(E),E=[],Q=[],C=[],e=0,i&&(i=[])),I.fallback&&(Q=[m],C[0]=a((A=>(E[0]=A,I.fallback()))),e=1);else if(0===e){for(C=new Array(l),t=0;t=c&&D>=c&&Q[w]===o[D];w--,D--)B[D]=C[w],n[D]=E[w],i&&(r[D]=i[w]);for(A=new Map,g=new Array(D+1),t=D;t>=c;t--)h=o[t],V=A.get(h),g[t]=void 0===V?-1:V,A.set(h,t);for(V=c;V<=w;V++)h=Q[V],t=A.get(h),void 0!==t&&-1!==t?(B[t]=C[V],n[t]=E[V],i&&(r[t]=i[V]),t=g[t],A.set(h,t)):E[V]();for(t=c;tA.each),A.children,g||void 0))}function Z(A){const g="fallback"in A&&{fallback:()=>A.fallback};return D(function(A,g,I={}){let Q,C=[],E=[],e=[],i=[],V=0;return y((()=>H(e))),()=>{const t=A()||[];return t[B],l((()=>{if(0===t.length)return 0!==V&&(H(e),e=[],C=[],E=[],V=0,i=[]),I.fallback&&(C=[m],E[0]=a((A=>(e[0]=A,I.fallback()))),V=1),E;for(C[0]===m&&(e[0](),e=[],C=[],E=[],V=0),Q=0;Qt[Q])):Q>=C.length&&(E[Q]=a(o));for(;QA.each),A.children,g||void 0))}function W(A){let g=!1;const I=A.keyed,B=D((()=>A.when),void 0,{equals:(A,I)=>g?A===I:!A==!I});return D((()=>{const Q=B();if(Q){const B=A.children,C="function"==typeof B&&B.length>0;return g=I||C,C?l((()=>B(Q))):B}return A.fallback}),void 0,void 0)}function T(A){let g=!1,I=!1;const B=k((()=>A.children)),Q=D((()=>{let A=B();Array.isArray(A)||(A=[A]);for(let g=0;gA[0]===I[0]&&(g?A[1]===I[1]:!A[1]==!I[1])&&A[2]===I[2]});return D((()=>{const[B,C,E]=Q();if(B<0)return A.fallback;const e=E.children,i="function"==typeof e&&e.length>0;return g=I||i,i?l((()=>e(C))):e}),void 0,void 0)}function j(A){return A}const X="_$DX_DELEGATE";function O(A,g,I,B={}){let Q;return a((B=>{Q=B,g===document?A():BA(g,A(),g.firstChild?null:void 0,I)}),B.owner),()=>{Q(),g.textContent=""}}function P(A,g,I){const B=document.createElement("template");B.innerHTML=A;let Q=B.content.firstChild;return I&&(Q=Q.firstChild),Q}function _(A,g=window.document){const I=g[X]||(g[X]=new Set);for(let B=0,Q=A.length;BB.call(A,I[1],g))}else A.addEventListener(g,I)}function gA(A,g,I){if(!g)return I?function(A,g,I){null==I?A.removeAttribute(g):A.setAttribute(g,I)}(A,"style"):g;const B=A.style;if("string"==typeof g)return B.cssText=g;let Q,C;for(C in"string"==typeof I&&(B.cssText=I=void 0),I||(I={}),g||(g={}),I)null==g[C]&&B.removeProperty(C),delete I[C];for(C in g)Q=g[C],Q!==I[C]&&(B.setProperty(C,Q),I[C]=Q);return I}function IA(A,g,I){return l((()=>A(g,I)))}function BA(A,g,I,B){if(void 0===I||B||(B=[]),"function"!=typeof g)return CA(A,g,B,I);w((B=>CA(A,g(),B,I)),B)}function QA(A){const I=`$$${A.type}`;let B=A.composedPath&&A.composedPath()[0]||A.target;for(A.target!==B&&Object.defineProperty(A,"target",{configurable:!0,value:B}),Object.defineProperty(A,"currentTarget",{configurable:!0,get:()=>B||document}),g.registry&&!g.done&&(g.done=!0,document.querySelectorAll("[id^=pl-]").forEach((g=>{for(;g&&8!==g.nodeType&&g.nodeValue!=="pl-"+A;){let A=g.nextSibling;g.remove(),g=A}g&&g.remove()})));B;){const g=B[I];if(g&&!B.disabled){const Q=B[`${I}Data`];if(void 0!==Q?g.call(B,Q,A):g.call(B,A),A.cancelBubble)return}B=B._$host||B.parentNode||B.host}}function CA(A,I,B,Q,C){for(g.context&&!B&&(B=[...A.childNodes]);"function"==typeof B;)B=B();if(I===B)return B;const E=typeof I,e=void 0!==Q;if(A=e&&B[0]&&B[0].parentNode||A,"string"===E||"number"===E){if(g.context)return B;if("number"===E&&(I=I.toString()),e){let g=B[0];g&&3===g.nodeType?g.data=I:g=document.createTextNode(I),B=iA(A,B,Q,g)}else B=""!==B&&"string"==typeof B?A.firstChild.data=I:A.textContent=I}else if(null==I||"boolean"===E){if(g.context)return B;B=iA(A,B,Q)}else{if("function"===E)return w((()=>{let g=I();for(;"function"==typeof g;)g=g();B=CA(A,g,B,Q)})),()=>B;if(Array.isArray(I)){const E=[],i=B&&Array.isArray(B);if(EA(E,I,B,C))return w((()=>B=CA(A,E,B,Q,!0))),()=>B;if(g.context){if(!E.length)return B;for(let A=0;AB-e){const Q=g[E];for(;e=0;C--){const E=g[C];if(Q!==E){const g=E.parentNode===A;B||C?g&&E.remove():g?A.replaceChild(Q,E):A.insertBefore(Q,I)}else B=!0}}else A.insertBefore(Q,I);return[Q]}let VA;const tA=new Array(128).fill(void 0);function oA(A){return tA[A]}tA.push(void 0,null,!0,!1);let sA=tA.length;function nA(A){const g=oA(A);return function(A){A<132||(tA[A]=sA,sA=A)}(A),g}const rA="undefined"!=typeof TextDecoder?new TextDecoder("utf-8",{ignoreBOM:!0,fatal:!0}):{decode:()=>{throw Error("TextDecoder not available")}};"undefined"!=typeof TextDecoder&&rA.decode();let aA=null;function cA(){return null!==aA&&0!==aA.byteLength||(aA=new Uint8Array(VA.memory.buffer)),aA}function wA(A,g){return A>>>=0,rA.decode(cA().subarray(A,A+g))}function DA(A){sA===tA.length&&tA.push(tA.length+1);const g=sA;return sA=tA[g],tA[g]=A,g}function hA(A){const g=typeof A;if("number"==g||"boolean"==g||null==A)return`${A}`;if("string"==g)return`"${A}"`;if("symbol"==g){const g=A.description;return null==g?"Symbol":`Symbol(${g})`}if("function"==g){const g=A.name;return"string"==typeof g&&g.length>0?`Function(${g})`:"Function"}if(Array.isArray(A)){const g=A.length;let I="[";g>0&&(I+=hA(A[0]));for(let B=1;B1))return toString.call(A);if(B=I[1],"Object"==B)try{return"Object("+JSON.stringify(A)+")"}catch(A){return"Object"}return A instanceof Error?`${A.name}: ${A.message}\n${A.stack}`:B}let lA=0;const MA="undefined"!=typeof TextEncoder?new TextEncoder("utf-8"):{encode:()=>{throw Error("TextEncoder not available")}},yA="function"==typeof MA.encodeInto?function(A,g){return MA.encodeInto(A,g)}:function(A,g){const I=MA.encode(A);return g.set(I),{read:A.length,written:I.length}};function GA(A,g,I){if(void 0===I){const I=MA.encode(A),B=g(I.length,1)>>>0;return cA().subarray(B,B+I.length).set(I),lA=I.length,B}let B=A.length,Q=g(B,1)>>>0;const C=cA();let E=0;for(;E127)break;C[Q+E]=g}if(E!==B){0!==E&&(A=A.slice(E)),Q=I(Q,B,B=E+3*A.length,1)>>>0;const g=cA().subarray(Q+E,Q+B);E+=yA(A,g).written,Q=I(Q,B,E,1)>>>0}return lA=E,Q}let kA=null;function FA(){return null!==kA&&0!==kA.byteLength||(kA=new Int32Array(VA.memory.buffer)),kA}let dA=null;function uA(A,g){return A>>>=0,(null!==dA&&0!==dA.byteLength||(dA=new Uint32Array(VA.memory.buffer)),dA).subarray(A/4,A/4+g)}const NA="undefined"==typeof FinalizationRegistry?{register:()=>{},unregister:()=>{}}:new FinalizationRegistry((A=>VA.__wbg_vtwrapper_free(A>>>0)));class fA{static __wrap(A){A>>>=0;const g=Object.create(fA.prototype);return g.__wbg_ptr=A,NA.register(g,g.__wbg_ptr,g),g}__destroy_into_raw(){const A=this.__wbg_ptr;return this.__wbg_ptr=0,NA.unregister(this),A}free(){const A=this.__destroy_into_raw();VA.__wbg_vtwrapper_free(A)}feed(A){const g=GA(A,VA.__wbindgen_malloc,VA.__wbindgen_realloc),I=lA;return nA(VA.vtwrapper_feed(this.__wbg_ptr,g,I))}inspect(){let A,g;try{const Q=VA.__wbindgen_add_to_stack_pointer(-16);VA.vtwrapper_inspect(Q,this.__wbg_ptr);var I=FA()[Q/4+0],B=FA()[Q/4+1];return A=I,g=B,wA(I,B)}finally{VA.__wbindgen_add_to_stack_pointer(16),VA.__wbindgen_free(A,g,1)}}get_size(){try{const B=VA.__wbindgen_add_to_stack_pointer(-16);VA.vtwrapper_get_size(B,this.__wbg_ptr);var A=FA()[B/4+0],g=FA()[B/4+1],I=uA(A,g).slice();return VA.__wbindgen_free(A,4*g,4),I}finally{VA.__wbindgen_add_to_stack_pointer(16)}}get_line(A){return nA(VA.vtwrapper_get_line(this.__wbg_ptr,A))}get_cursor(){return nA(VA.vtwrapper_get_cursor(this.__wbg_ptr))}}function RA(){const A={wbg:{}};return A.wbg.__wbindgen_object_drop_ref=function(A){nA(A)},A.wbg.__wbindgen_error_new=function(A,g){return DA(new Error(wA(A,g)))},A.wbg.__wbindgen_object_clone_ref=function(A){return DA(oA(A))},A.wbg.__wbindgen_number_new=function(A){return DA(A)},A.wbg.__wbindgen_bigint_from_u64=function(A){return DA(BigInt.asUintN(64,A))},A.wbg.__wbindgen_string_new=function(A,g){return DA(wA(A,g))},A.wbg.__wbg_set_f975102236d3c502=function(A,g,I){oA(A)[nA(g)]=nA(I)},A.wbg.__wbg_new_b525de17f44a8943=function(){return DA(new Array)},A.wbg.__wbg_new_f841cc6f2098f4b5=function(){return DA(new Map)},A.wbg.__wbg_new_f9876326328f45ed=function(){return DA(new Object)},A.wbg.__wbindgen_is_string=function(A){return"string"==typeof oA(A)},A.wbg.__wbg_set_17224bc548dd1d7b=function(A,g,I){oA(A)[g>>>0]=nA(I)},A.wbg.__wbg_set_388c4c6422704173=function(A,g,I){return DA(oA(A).set(oA(g),oA(I)))},A.wbg.__wbindgen_debug_string=function(A,g){const I=GA(hA(oA(g)),VA.__wbindgen_malloc,VA.__wbindgen_realloc),B=lA;FA()[A/4+1]=B,FA()[A/4+0]=I},A.wbg.__wbindgen_throw=function(A,g){throw new Error(wA(A,g))},A}function qA(A,g){return VA=A.exports,JA.__wbindgen_wasm_module=g,kA=null,dA=null,aA=null,VA}async function JA(A){if(void 0!==VA)return VA;const g=RA();("string"==typeof A||"function"==typeof Request&&A instanceof Request||"function"==typeof URL&&A instanceof URL)&&(A=fetch(A));const{instance:I,module:B}=await async function(A,g){if("function"==typeof Response&&A instanceof Response){if("function"==typeof WebAssembly.instantiateStreaming)try{return await WebAssembly.instantiateStreaming(A,g)}catch(g){if("application/wasm"==A.headers.get("Content-Type"))throw g;console.warn("`WebAssembly.instantiateStreaming` failed because your server does not serve wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\n",g)}const I=await A.arrayBuffer();return await WebAssembly.instantiate(I,g)}{const I=await WebAssembly.instantiate(A,g);return I instanceof WebAssembly.Instance?{instance:I,module:A}:I}}(await A,g);return qA(I,B)}var YA=Object.freeze({__proto__:null,VtWrapper:fA,create:function(A,g,I,B){const Q=VA.create(A,g,I,B);return fA.__wrap(Q)},default:JA,initSync:function(A){if(void 0!==VA)return VA;const g=RA();return A instanceof WebAssembly.Module||(A=new WebAssembly.Module(A)),qA(new WebAssembly.Instance(A,g),A)}});const UA=[62,0,0,0,63,52,53,54,55,56,57,58,59,60,61,0,0,0,0,0,0,0,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,0,0,0,0,0,0,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51];function SA(A){return UA[A-43]}const pA=function(A){let g,I=A.endsWith("==")?2:A.endsWith("=")?1:0,B=A.length,Q=new Uint8Array(B/4*3);for(let I=0,C=0;I>16,Q[C+1]=g>>8&255,Q[C+2]=255&g;return Q.subarray(0,Q.length-I)}("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IAMhAAwCCyAHIANBAWoiA0cNAAsgAiEEDAILIAAgBGoiBkEBaiEEAkAgAiAGTQ0AIAAgBWotAABBCkcNAEEAIQUgBCIGIQAMAwsgAiAETw0ACwtBASEFIAIiACAIIgZHDQBBAA8LAkAgDC0AAEUNACALQejnwABBBCAKKAIMEQEARQ0AQQEPCyAAIAhrIQdBACEDIAAgCEcEQCAAIA1qLQAAQQpGIQMLIAEgCGohACAMIAM6AAAgBiEIIAsgACAHIAooAgwRAQAiACAFckUNAAsgAAvSBgEFfyMAQcABayICJAAgACgCACEDIAJBuAFqQeCEwAA2AgAgAkEEaiIAQawBakHohsAANgIAIABBpAFqQYiHwAA2AgAgAEGcAWpB+IbAADYCACACQZgBakH4hsAANgIAIAJBkAFqQaCCwAA2AgAgAkGIAWpBoILAADYCACACQYABakHohsAANgIAIABB9ABqQeiGwAA2AgAgAkHwAGpB6IbAADYCACACQegAakHohsAANgIAIABB3ABqQeiGwAA2AgAgAkHYAGpB2IbAADYCACACQdAAakGggsAANgIAIAJByABqQciGwAA2AgAgAkFAa0G4hsAANgIAIAJBOGpBqIbAADYCACACQTBqQZiGwAA2AgAgAEEkakGIhsAANgIAIAJBIGpB+IXAADYCACACQRhqQfiFwAA2AgAgAkEQakGggsAANgIAIAIgA0HCAWo2AqwBIAIgA0HcAGo2AqQBIAIgA0GIAWo2ApwBIAIgA0H0AGo2ApQBIAIgA0GsAWo2AowBIAIgA0GoAWo2AoQBIAIgA0HBAWo2AnwgAiADQcABajYCdCACIANBvwFqNgJsIAIgA0G+AWo2AmQgAiADQb0BajYCXCACIANB0ABqNgJUIAIgA0GkAWo2AkwgAiADQbABajYCRCACIANBsgFqNgI8IAIgA0HoAGo2AjQgAiADQcgAajYCLCACIANBvAFqNgIkIAIgA0EkajYCHCACIAM2AhQgAiADQaABajYCDCACQaCCwAA2AgggAiADQZwBajYCBCACIANBwwFqNgK8ASACIAJBvAFqNgK0AUEXIQZB9IjAACEEIwBBIGsiAyQAIANBFzYCACADQRc2AgQgASgCFEGYh8AAQQggASgCGCgCDBEBACEFIANBADoADSADIAU6AAwgAyABNgIIAn8D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IAMtAAwhAgNAIAUgAxBYIAAoAgAiBgRAIAAoAgQgBkEEdBDUAQsgACAFKQMANwIAIAAgAjoADCAAQQhqIAVBCGooAgA2AgAgASAAQRBqIgBHDQALCyABKAIAIgAEQCABKAIEIABBBHQQ1AELIAEgAykCADcCACABQQhqIANBCGopAgA3AgALIAVBEGokACAEQTBqJAAPCyABIAJBoJ7AABDcAQALIAIgAEGgnsAAENoBAAvIAQECfwJAAkAgACgCCCIFIAFPBEAgACgCBCABQQR0aiEAIAUgAWsiBCACSQRAQYyqwABBIUGwqsAAEIwBAAsgBCACayIEIAAgBEEEdGogAhASIAEgAmoiBCACSQ0BIAQgBUsNAiACBEAgAkEEdCECA0AgACADKQIANwIAIABBCGogA0EIaikCADcCACAAQRBqIQAgAkEQayICDQALCw8LIAEgBUG4p8AAENkBAAsgASAEQcinwAAQ3AEACyAEIAVByKfAABDaAQALjgEBA38jAEGAAWsiBCQAIAAoAgAhAANAIAIgBGpB/wBqIABBD3EiA0EwciADQdcAaiADQQpJGzoAACACQQFrIQIgAEEQSSAAQQR2IQBFDQALIAJBgAFqIgBBgQFPBEAgAEGAAUGc6MAAENkBAAsgAUGs6MAAQQIgAiAEakGAAWpBACACaxAUIARBgAFqJAALlgEBA38jAEGAAWsiBCQAIAAtAAAhAkEAIQADQCAAIARqQf8AaiACQQ9xIgNBMHIgA0E3aiADQQpJGzoAACAAQQFrIQAgAkH/AXEiA0EEdiECIANBEE8NAAsgAEGAAWoiAkGBAU8EQCACQYABQZzowAAQ2QEACyABQazowABBAiAAIARqQYABakEAIABrEBQgBEGAAWokAAuXAQEDfyMAQYABayIEJAAgAC0AACECQQAhAANAIAAgBGpB/wBqIAJBD3EiA0EwciADQdcAaiADQQpJGzoAACAAQQFrIQAgAkH/AXEiA0EEdiECIANBEE8NAAsgAEGAAWoiAkGBAU8EQCACQYABQZzowAAQ2QEACyABQazowABBAiAAIARqQYABakEAIABrEBQgBEGAAWokAAuNAQEDfyMAQYABayIEJAAgACgCACEAA0AgAiAEakH/AGogAEEPcSIDQTByIANBN2ogA0EKSRs6AAAgAkEBayECIABBEEkg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IQEgCCAFNgIEIAggATYCACACQSBqJAAMAQsgAkEBNgIMIAJBmJfAADYCCCACQgA3AhQgAkH0lsAANgIQIAJBCGpB7JfAABCSAQALIAMoAggiAUGBgICAeEYNACABRQ0BIAEgAygCDEHU/8AAKAIAIgBB1wAgABsRAgAACyADQRBqJAAMAQsQlwEACyAGQQhqIAcpAgQ3AwAgBigCCCEBIAYgBigCDDYCBCAGIAE2AgAgBigCBCEBIAAgBigCADYCACAAIAE2AgQgBkEgaiQAC3EBAX8jAEEQayICJAAgAiAAQSBqNgIMIAFBkYTAAEEGQZeEwABBBSAAQQxqQZyEwABBrITAAEEEIABBGGpBsITAAEEEIABBHGpBoILAAEG0hMAAQRAgAEHEhMAAQdSEwABBCyACQQxqEDIgAkEQaiQAC3EBAX8jAEEQayICJAAgAiAAQRNqNgIMIAFBrIrAAEEIQbSKwABBCiAAQaCCwABBvorAAEEKIABBBGpBoIDAAEEDIABBCGpBuIbAAEHvh8AAQQsgAEESakHohsAAQfqHwABBDiACQQxqEDIgAkEQaiQAC28BAX8jAEEwayICJAAgAiABNgIEIAIgADYCACACQSxqQdYANgIAIAJBAzYCDCACQYTkwAA2AgggAkICNwIUIAJB1gA2AiQgAiACQSBqNgIQIAIgAkEEajYCKCACIAI2AiAgAkEIakHkmsAAEJIBAAtsAQF/IwBBMGsiAyQAIAMgATYCBCADIAA2AgAgA0EsakHWADYCACADQQI2AgwgA0GM5sAANgIIIANCAjcCFCADQdYANgIkIAMgA0EgajYCECADIAM2AiggAyADQQRqNgIgIANBCGogAhCSAQALZgECfyMAQRBrIgIkACAAKAIAIgNBAWohAAJ/IAMtAABFBEAgAiAANgIIIAFBtJLAAEEHIAJBCGpBvJLAABA3DAELIAIgADYCDCABQcySwABBAyACQQxqQdCSwAAQNwsgAkEQaiQAC2IBA38jAEEQayIDJAAgASgCCCEEIANBCGogASgCACACNQIAEEogAygCDCECIAMoAggiBUUEQCABQQRqIAQgAhDWASABIARBAWo2AggLIAAgBTYCACAAIAI2AgQgA0EQaiQAC2YAIwBBMGsiACQAQZj/wAAtAAAEQCAAQQI2AhAgAEHQ38AANgIMIABC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QRBxRQRAIANBIHFFBEAgADMBACABECMPCyMAQYABayIDJAAgAC8BACECQQAhAANAIAAgA2pB/wBqIAJBD3EiBEEwciAEQTdqIARBCkkbOgAAIABBAWshACACQf//A3EiBEEEdiECIARBEE8NAAsgAEGAAWoiAkGBAU8EQCACQYABQZzowAAQ2QEACyABQazowABBAiAAIANqQYABakEAIABrEBQgA0GAAWokAA8LIwBBgAFrIgMkACAALwEAIQJBACEAA0AgACADakH/AGogAkEPcSIEQTByIARB1wBqIARBCkkbOgAAIABBAWshACACQf//A3EiBEEEdiECIARBEE8NAAsgAEGAAWoiAkGBAU8EQCACQYABQZzowAAQ2QEACyABQazowABBAiAAIANqQYABakEAIABrEBQgA0GAAWokAAs3AQF/IAAoAgAhACABKAIcIgJBEHFFBEAgAkEgcUUEQCAAIAEQ3QEPCyAAIAEQRg8LIAAgARBHCzcBAX8gACgCACEAIAEoAhwiAkEQcUUEQCACQSBxRQRAIAAgARDbAQ8LIAAgARBIDwsgACABEEULsAIBAn8jAEEgayICJAAgAkEBOwEcIAIgATYCGCACIAA2AhQgAkHI5cAANgIQIAJByOTAADYCDCMAQRBrIgEkACACQQxqIgAoAggiAkUEQEGk4MAAEN4BAAsgASAAKAIMNgIMIAEgADYCCCABIAI2AgQjAEEQayIAJAAgAUEEaiIBKAIAIgIoAgwhAwJAAkACQAJAIAIoAgQOAgABAgsgAw0BQeDdwAAhAkEAIQMMAgsgAw0AIAIoAgAiAigCBCEDIAIoAgAhAgwBCyAAIAI2AgwgAEGAgICAeDYCACAAQejgwAAgASgCBCIAKAIIIAEoAgggAC0AECAALQAREDQACyAAIAM2AgQgACACNgIAIABB1ODAACABKAIEIgAoAgggASgCCCAALQAQIAAtABEQNAALMwEBfyMAQRBrIgIkACACIAAoAgA2AgwgAUHYisAAQQ0gAkEMakHoisAAEDcgAkEQaiQACzABAX8gASgCHCICQRBxRQRAIAJBIHFFBEAgACABENsBDwsgACABEEgPCyAAIAEQRQswAQF/IAEoAhwiAkEQcUUEQCACQSBxRQRAIAAgARDdAQ8LIAAgARBGDwsgACABEEcLMAACQAJAIANp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AgAgCkEwaiQADAILQZ6TwABBxgAgCkEvakHkk8AAQcSUwAAQVgALIwBBMGsiACQAIABBATYCECAAQZTlwAA2AgwgAEIBNwIYIABB7QA2AiggACAAQSRqNgIUIAAgAEEvajYCJCAAQQxqQZiWwAAQkgEACyATQRBqJAAgAAvGAQECfyMAQRBrIgAkACABKAIUQaDfwABBCyABKAIYKAIMEQEAIQMgAEEIaiICQQA6AAUgAiADOgAEIAIgATYCACACIgEtAAQhAwJAIAItAAVFBEAgA0EARyEBDAELQQEhAiADRQRAIAEoAgAiAi0AHEEEcUUEQCABIAIoAhRB9+fAAEECIAIoAhgoAgwRAQAiAToABAwCCyACKAIUQfbnwABBASACKAIYKAIMEQEAIQILIAEgAjoABCACIQELIABBEGokACABCzABAX8gAEEQahAuAkAgACgCACIBQYCAgIB4Rg0AIAFFDQAgACgCBCABQQR0ENQBCwsvAQJ/IAAgACgCqAEiAiAAKAKsAUEBaiIDIAEgAEGyAWoQISAAQdwAaiACIAMQbQsvAQJ/IAAgACgCqAEiAiAAKAKsAUEBaiIDIAEgAEGyAWoQUCAAQdwAaiACIAMQbQsrACABIAJJBEBBjKnAAEEjQfypwAAQjAEACyACIAAgAkEEdGogASACaxASCyUAIABFBEBBqJbAAEEyEOoBAAsgACACIAMgBCAFIAEoAhARBwALMAAgASgCFCAALQAAQQJ0IgBBjI3AAGooAgAgAEHUjMAAaigCACABKAIYKAIMEQEACzAAIAEoAhQgAC0AAEECdCIAQdCNwABqKAIAIABBxI3AAGooAgAgASgCGCgCDBEBAAuoAQEDfyMAQeABayIBJAAjAEHwAWsiAiQAAkACQCAABEAgACgCAA0BIABBADYCACACQQxqIgMgAEHkARD3ARogASADQQRqQeABEPcBGiAAQeQBENQBIAJB8AFqJAAMAgsQ6wEACxDsAQALIAFBxAFqELMBIAFBDGoiABB7IAAQrgEgAUEwaiIAEHsgABCuASABQdAAahCvASABQdwAahC3ASABQeABaiQACyMAIABFBEBBqJbAAEEyEOoBAAsgACACIAMgBCABKAIQEQUACyMAIABFBEBBqJbAAEEyEOoBAAsgACACIAMgBCABKAIQERcACyMAIABFBEBB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cGFydAAAAAQAAAAEAAAABAAAAA0AAABwYXJ0cwAAAAQAAAAEAAAABAAAAA4AAABHcm91bmRFc2NhcGVFc2NhcGVJbnRlcm1lZGlhdGVDc2lFbnRyeUNzaVBhcmFtQ3NpSW50ZXJtZWRpYXRlQ3NpSWdub3JlRGNzRW50cnlEY3NQYXJhbURjc0ludGVybWVkaWF0ZURjc1Bhc3N0aHJvdWdoRGNzSWdub3JlT3NjU3RyaW5nU29zUG1BcGNTdHJpbmdmZ2JnYm9sZAFmYWludGl0YWxpY3VuZGVybGluZXN0cmlrZXRocm91Z2hibGlua2ludmVyc2VCdWZmZXJsaW5lcw8AAAAMAAAABAAAABAAAABjb2xzcm93c3Njcm9sbGJhY2tfbGltaXQEAAAADAAAAAQAAAARAAAAdHJpbV9uZWVkZWQABAAAAAQAAAAEAAAAEgAAAFBhcmFtcwAABAAAAAQAAAAEAAAAEwAAAFBhcnNlcnN0YXRlAAgAAAABAAAAAQAAABQAAABwYXJhbXMAABUAAAAMAAAABAAAABYAAABpbnRlcm1lZGlhdGVzAAAABAAAAAQAAAAEAAAAFwAAAE5vcm1hbEJvbGRGYWludEFzY2lpRHJhd2luZwAYAAAAJAAAAAQAAAAZAAAACAAAAAEAAAABAAAAGgAAAAQAAAAIAAAABAAAABsAAAAEAAAADAAAAAQAAAAcAAAACAAAAAoAAAABAAAAHQAAAAgAAAACAAAAAQAAAB4AAAAfAAAADAAAAAQAAAAgAAAACAAAAAEAAAABAAAAIQAAAAQAAAAUAAAABAAAACIAAAAjAAAADAAAAAQAAAAkAAAAVGVybWluYWxidWZmZXJvdGhlcl9idWZmZXJhY3RpdmVfYnVmZmVyX3R5cGVjdXJzb3JjaGFyc2V0c2FjdGl2ZV9jaGFyc2V0dGFic2luc2VydF9tb2Rlb3JpZ2luX21vZGVhdXRvX3dyYXBfbW9kZW5ld19saW5lX21vZGVuZXh0X3ByaW50X3dyYXBzdG9wX21hcmdpbmJvdHRvbV9tYXJnaW5zYXZlZF9jdHhhbHRlcm5hdGVfc2F2ZWRfY3R4ZGlydHlfbGluZXNyZXNpemFibGVyZXNpemVkACwCEAAEAAAAMAIQAAQAAACgAxAABgAAAKYDEAAMAAAAsgMQABIAAAA0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VVVVVFVVVVVVVVVVBQAUABQEUFVVVVVVVVUVUVVVVVVVVVUAAAAAAABAVVVVVVVVVVVVVVVVVVVVVVVVVVVVVQUAAFRVVVVVVVVVVVVVVVVVFQAAVVVRVVVVVVUFEAAAAQFQVVVVVVVVVVVVVQFVVVVVVVVVVVVVVVVVUFUAAFVVVVVVVVVVVVUFAEHQwsAAC+MNQFVVVVVVVVVVVVVVVVVFVAEAVFEBAFVVBVVVVVVVVVVRVVVVVVVVVVVVVVVVVVVEAVRVUVUVVVUFVVVVVVVVRUFVVVVVVVVVVVVVVVVVVVRBFRRQUVVVVVVVVVVQUVVVARBUUVVVVVUFVVVVVVUFAFFVVVVVVVVVVVVVVVVVVQQBVFVRVQFVVQVVVVVVVVVVRVVVVVVVVVVVVVVVVVVVRVRVVVFVFVVVVVVVVVVVVVVUVFVVVVVVVVVVVVVVVVUEVAUEUFVBVVUFVVVVVVVVVVFVVVVVVVVVVVVVVVVVVRREBQRQVUFVVQVVVVVVVVVVUFVVVVVVVVVVVVVVVVUVRAFUVVFVFVVVBVVVVVVVVVVRVVVVVVVVVVVVVVVVVVVVVVVFFQVEVRVVVVVVVVVVVVVVVVVVVVVVVVVVVVEAQFVVFQBAVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVUQAAVFVVAEBVVVVVVVVVVVVVVVVVVVVVVVVQVVVVVVVVEVFVVVVVVVVVVVVVVVVVAQAAQAAEVQEAAAEAAAAAAAAAAFRVRVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVUBBABBQVVVVVVVVVAFVFVVVQFUVVVFQVVRVVVVUVVVVVVVVVVVqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqAAAAAAAAAABVVVVVVVVVAVVVVVVVVVVVVVVVVQVUVVVVVVVVBVVVVVVVVVUFVVVVVVVVVQVVVVVVVVVVVVVVVVVVVVVVEABQVUUBAABVVVFVVVVVVVVVVVVVFQBVVVVVVVVVVVVVVVVVQVVVVVVVVVVVUVVVVVVVVVVVVVVVVVVAFVRVRVUBVVVVVVVVFRRVVVVVVVVVVVVVVVVVVUUAQEQBAFQVAAAUVVVVVVVVVVVVVVVVAAAAAAAAAEBVVVVVVVVVVVVVVVUAVVVVVVVVVVVVVVVVAABQBVVVVVVVVVVVVRUAAFVVVVBVVVVVVVVVBVAQUFVVVVVVVVVVVVVVVVVFUBFQVVVVVVVVVVVVVVVVVVUAAAVVVVVVVVVAAAAABABUUVVUUFVVVRUA139fX3//BUD3XdV1VVVVVVVVVVUAAAAAVVdVVf1XVVVVVVVVVVVVV1VVVVVVVVVVAAAAAAAAAABUVVVV1V1dVdV1VVV9VVVVVVVVVVVVVVXVV9V/////Vf//X1VVVV1V////VVVVVXVVVV9VVVVV9XVXVVVV1VVVVVVVVffX39ddXXX91///d1X/VV9dVV9XdVVVVX//9fVfVVVV9f9fVVVdXVVVXVVVVVVV1VVVVVV1VaVVVVVpVVVVVVVVVVVVVVVVVVVVqVaWVVVVVVVVVVVVVVX/////////////////////////////////////////////3///////////Vf///////////1VVVf/////1X1VV3/9fVfX1VV9f9df1X1VVVfVfVdVVVVVpVX1d9VVaVXdVVVVVVVVVVXdVqqqqVVVV399/31VVVZVVVVVVlVVV9VlVpVVVVVXpVfr/7//+///fVe//r/vv+1VZpVVVVVVVVVVWVVVVVV1VVVVmlZpVVVVVVVVV9f//VVVVVVWpVVVVVVVVVlVVlVVVVVVVVZVWVVVVVVVVVVVVVVVVVvlfVVVVVVVVVVVVVVVVVVVVVVVVVVUVUFVVVVVVVVVVVVVVVVVVVVVVVRVVVVVVVVVVVQAAAAAAAAAAqqqqqqqqmqqqqqqqqqqqqqqqqqqqqqqqqqqqqqpVVVWqqqqqqlpVVVVVVVWqqqqqqqqqqqqqqqqqqgoAqqqqaqmqqqqqqqqqqqqqqqqqqqqqqqqqqmqBqqqqqqqqqqqqVamqqqqqqqqqqqqqqaqqqqqqqqqqqqqqqqiqqqqqqqqqqqpqqqqqqqqqqqqqqqqqqqqqqqqqqqqqVVWVqqqqqqqqqqqqqqpqqqqqqqqqqqqqqv//qqqqqqqqqqqqqqqqqqqqVqqqqqqqqqqqqqqqqqpqVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVRVAAABQVVVVVVVVVQVVVVVVVVVVVVVVVVVVVVVVVVVVVVBVVVVFRRVVVVVVVVVBVVRVVVVVVVBVVVVVVVUAAAAAUFVFFVVVVVVVVVVVVQUAUFVVVVVVFQAAUFVVVaqqqqqqqqpWQFVVVVVVVVVVVVVVFQVQUFVVVVVVVVVVVVFVVVVVVVVVVVVVVVVVVVVVAUBBQVVVFVVVVFVVVVVVVVVVVVVVVFVVVVVVVVVVVVVVVQQUVAVRVVVVVVVVVVVVVVBVRVVVVVVVVVVVVVVVUVRRVVVVVaqqqqqqqqqqqlVVVQAAAAAAQBUAQb/QwAALoQhVVVVVVVVVVUVVVVVVVVVVVQAAAACqqlpVAAAAAKqqqqqqqqqqaqqqqqpqqlVVVVVVqqqqqqqqqqpWVVVVVVVVVVVVVVVVVVUFVFVVVVVVVVVVVVVVVVVVVapqVVUAAFRdVVVVVVVVVVVVVVVVVVVVUVVVVVVVVVVVVFVVVVVVVVVVVVVVVVVVVVVVVVVVBUBVAUFVAFVVVVVVVVVVVVVAFVVVVVVVVVVVVUFVVVVVVVVVVVVVVVVVVVUAVVVVVVVVVVVVVVVVVVVVVRVUVVVVVVVVVVVVVVVVVVVVVVVVVQFVBQAAVFVVVVVVVVVVVVVVBVBVVVVVVVVVVVVVVVVVVVFVVVVVVVVVVVVVVVVVAAAAQFVVVVVVVVVVVVUUVFUVUFVVVVVVVVVVVVVVFUBBVUVVVVVVVVVVVVVVVVVVVVVAVVVVVVVVVVUVAAEAVFVVVVVVVVVVVVVVVVVVFVVVVVBVVVVVVVVVVVVVVVUFAEBVVQEUVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVUVUARVRVVVVVVVVVUVFQBAVVVVVVVUVVVVVRVVVVUFAFQAVFVVVVVVVVVVVVVVVVVVVVUAAAVEVVVVVVVFVVVVVVVVVVVVVVVVVVVVVVVVVVUUAEQRBFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVFQVQVRBUVVVVVVVVUFVVVVVVVVVVVVVVVVVVVVVVVVVVFQBAEVRVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVFVEAEFVVVVVVVVVVVQEFEABVVVVVVVVVVVVVVVVVVVVVFQAAQVVVVVVVVVVVVVVVVVVUVRVEFVVVVVVVVVVVVVVVVVVVVVVVVVVVAAVVVFVVVVVVVVUBAEBVVVVVVVVVVVUVABRAVRVVVQFAAVVVVVVVVVVVVVVVBQAAQFBVVVVVVVVVVVVVVVVVVVVVVVVVVVUAQAAQVVVVVQUAAAAAAAUABEFVVVVVVVVVVVVVVVVVVQFARRAAEFVVVVVVVVVVVVVVVVVVVVVVVVARVVVVVVVVVVVVVVVVVVVVVVVVVVVVVRVUVVVQVVVVVVVVVVVVVVVVBUBVRFVVVVVVVVVVVVVVVVVVVVQVAAAAUFVVVVVVVVVVVVVVVVVVVVVVVVVVVVUAVFVVVVVVVVVVVVVVVVVVAEBVVVVVVRVVVVVVVVVVVVVVVVVVVVUVQFVVVVVVVVVVVVVVVVVVVVVVVVWqVFVVWlVVVaqqqqqqqqqqqqqqqqqqVVWqqqqqqlpVVVVVVVVVVVVVqqpWVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVaqpqmmqqqqqqqqqqmpVVVVlVVVVVVVVVWpZVVVVqlVVqqqqqqqqqqqqqqqqqqqqqqqqqlVVVVVVVVVVQQBVVVVVVVVVAEHr2MAAC0VQAAAAAABAVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVURUAUAAAAAQAEAVVVVVVVVVQVQVVVVVQVUVVVVVVVVVVVVVVVVVVUAQb3ZwAALAkAVAEHL2cAAC8slVFVRVVVVVFVVVVUVAAEAAABVVVVVAEAAAAAAFAAQBEBVVVVVVVVVVVVVVVVVVVVVRVVVVVVVVVVVVVVVVVVVVQBVVVVVVVVVVQBAVVVVVVVVVVVVVVUAQFVVVVVVVVVVVVVVVVVVVlVVVVVVVVVVVVVVVVVVVVVVlVVVVVVVVVVVVVVVVf//f1X/////////X///////////////////X1X/////////76uq6v////9XVVVVVWpVVVWqqqqqqqqqqqqqqlWqqlZVWlVVVapaVVVVVVVVqqqqqqqqqqpWVVWpqpqqqqqqqqqqqqqqqqqqqqqqqqaqqqqqqlVVVaqqqqqqqqqqqqpqlapVVVWqqqqqVlaqqqqqqqqqqqqqqqqqqqqqqmqmqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqlqqqqqqqqqqqqqqqqqqqqlpVVZVqqqqqqqqqVVVVVWVVVVVVVVVpVVVVVlVVVVVVVVVVVVVVVVVVVVVVVVVVlaqqqqqqVVVVVVVVVVVVVVVVqlpVVmqpVapVVZVWVaqqVlVVVVVVVVVVqqqqVVZVVVVVVVWqqqqqqqqqqqqqqmqqqpqqqqqqqqqqqqqqqqqqqlVVVVVVVVVVVVVVVaqqqlaqqlZVqqqqqqqqqqqqqqqaqlpVpaqqqlWqqlZVqqpWVf///////////////////19YAAAADAAAAAQAAABZAAAAWgAAAFsAAAAvcnVzdC9kZXBzL2RsbWFsbG9jLTAuMi42L3NyYy9kbG1hbGxvYy5yc2Fzc2VydGlvbiBmYWlsZWQ6IHBzaXplID49IHNpemUgKyBtaW5fb3ZlcmhlYWQA+C4QACkAAACoBAAACQAAAGFzc2VydGlvbiBmYWlsZWQ6IHBzaXplIDw9IHNpemUgKyBtYXhfb3ZlcmhlYWQAAPguEAApAAAArgQAAA0AAABBY2Nlc3NFcnJvcm1lbW9yeSBhbGxvY2F0aW9uIG9mICBieXRlcyBmYWlsZWQAAACrLxAAFQAAAMAvEAANAAAAbGlicmFyeS9zdGQvc3JjL2FsbG9jLnJz4C8QABgAAABiAQAACQAAAGxpYnJhcnkvc3RkL3NyYy9wYW5pY2tpbmcucnMIMBAAHAAAAIQCAAAeAAAAWAAAAAwAAAAEAAAAXAAAAF0AAAAIAAAABAAAAF4AAABdAAAACAAAAAQAAABfAAAAYAAAAGEAAAAQAAAABAAAAGIAAABjAAAAZAAAAAAAAAABAAAAZQAAAEhhc2ggdGFibGUgY2FwYWNpdHkgb3ZlcmZsb3eMMBAAHAAAAC9ydXN0L2RlcHMvaGFzaGJyb3duLTAuMTQuMy9zcmMvcmF3L21vZC5ycwAAsDAQACoAAABWAAAAKAAAAEVycm9yAAAAZgAAAAwAAAAEAAAAZwAAAGgAAABpAAAAY2FwYWNpdHkgb3ZlcmZsb3cAAAAMMRAAEQAAAGxpYnJhcnkvYWxsb2Mvc3JjL3Jhd192ZWMucnMoMRAAHAAAABkAAAAFAAAAYSBmb3JtYXR0aW5nIHRyYWl0IGltcGxlbWVudGF0aW9uIHJldHVybmVkIGFuIGVycm9yAGoAAAAAAAAAAQAAAGsAAABsaWJyYXJ5L2FsbG9jL3NyYy9mbXQucnOYMRAAGAAAAHkCAAAgAAAAKSBzaG91bGQgYmUgPCBsZW4gKGlzIClpbnNlcnRpb24gaW5kZXggKGlzICkgc2hvdWxkIGJlIDw9IGxlbiAoaXMgAADXMRAAFAAAAOsxEAAXAAAA1jEQAAEAAAByZW1vdmFsIGluZGV4IChpcyAAABwyEAASAAAAwDEQABYAAADWMRAAAQAAAGxpYnJhcnkvY29yZS9zcmMvZm10L21vZC5ycykwMTIzNDU2Nzg5YWJjZGVmQm9ycm93TXV0RXJyb3JhbHJlYWR5IGJvcnJvd2VkOiCCMhAAEgAAAFtjYWxsZWQgYE9wdGlvbjo6dW53cmFwKClgIG9uIGEgYE5vbmVgIHZhbHVlcQAAAAAAAAABAAAAcgAAAGluZGV4IG91dCBvZiBib3VuZHM6IHRoZSBsZW4gaXMgIGJ1dCB0aGUgaW5kZXggaXMgAADYMhAAIAAAAPgyEAASAAAAcwAAAAQAAAAEAAAAdAAAAD09IT1tYXRjaGVzYXNzZXJ0aW9uIGBsZWZ0ICByaWdodGAgZmFpbGVkCiAgbGVmdDogCiByaWdodDogADczEAAQAAAARzMQABcAAABeMxAACQAAACByaWdodGAgZmFpbGVkOiAKICBsZWZ0OiAAAAA3MxAAEAAAAIAzEAAQAAAAkDMQAAkAAABeMxAACQAAADogAABIMhAAAAAAALwzEAACAAAAcwAAAAwAAAAEAAAAdQAAAHYAAAB3AAAAICAgICB7ICwgIHsKLAp9IH0oKAosCl1saWJyYXJ5L2NvcmUvc3JjL2ZtdC9udW0ucnMAAP8zEAAbAAAAaQAAABcAAAAweDAwMDEwMjAzMDQwNTA2MDcwODA5MTAxMTEyMTMxNDE1MTYxNzE4MTkyMDIxMjIyMzI0MjUyNjI3MjgyOTMwMzEzMjMzMzQzNTM2MzczODM5NDA0MTQyNDM0NDQ1NDY0NzQ4NDk1MDUxNTI1MzU0NTU1NjU3NTg1OTYwNjE2MjYzNjQ2NTY2Njc2ODY5NzA3MTcyNzM3NDc1NzY3Nzc4Nzk4MDgxODI4Mzg0ODU4Njg3ODg4OTkwOTE5MjkzOTQ5NTk2OTc5ODk5AABIMhAAGwAAAAIIAAAJAAAAcwAAAAgAAAAEAAAAbgAAAGZhbHNldHJ1ZXJhbmdlIHN0YXJ0IGluZGV4ICBvdXQgb2YgcmFuZ2UgZm9yIHNsaWNlIG9mIGxlbmd0aCAAAAAhNRAAEgAAADM1EAAiAAAAcmFuZ2UgZW5kIGluZGV4IGg1EAAQAAAAMzUQACIAAABzbGljZSBpbmRleCBzdGFydHMgYXQgIGJ1dCBlbmRzIGF0IACINRAAFgAAAJ41EAANAAAAYXR0ZW1wdGVkIHRvIGluZGV4IHNsaWNlIHVwIHRvIG1heGltdW0gdXNpemW8NRAALAAAAGxpYnJhcnkvY29yZS9zcmMvdW5pY29kZS9wcmludGFibGUucnMAAADwNRAAJQAAABoAAAA2AAAA8DUQACUAAAAKAAAAKwAAAAAGAQEDAQQCBQcHAggICQIKBQsCDgQQARECEgUTERQBFQIXAhkNHAUdCB8BJAFqBGsCrwOxArwCzwLRAtQM1QnWAtcC2gHgBeEC5wToAu4g8AT4AvoD+wEMJzs+Tk+Pnp6fe4uTlqKyuoaxBgcJNj0+VvPQ0QQUGDY3Vld/qq6vvTXgEoeJjp4EDQ4REikxNDpFRklKTk9kZVy2txscBwgKCxQXNjk6qKnY2Qk3kJGoBwo7PmZpj5IRb1+/7u9aYvT8/1NUmpsuLycoVZ2goaOkp6iturzEBgsMFR06P0VRpqfMzaAHGRoiJT4/5+zv/8XGBCAjJSYoMzg6SEpMUFNVVlhaXF5gY2Vma3N4fX+KpKqvsMDQrq9ub76TXiJ7BQMELQNmAwEvLoCCHQMxDxwEJAkeBSsFRAQOKoCqBiQEJAQoCDQLTkOBNwkWCggYO0U5A2MICTAWBSEDGwUBQDgESwUvBAoHCQdAICcEDAk2AzoFGgcEDAdQSTczDTMHLggKgSZSSysIKhYaJhwUFwlOBCQJRA0ZBwoGSAgnCXULQj4qBjsFCgZRBgEFEAMFgItiHkgICoCmXiJFCwoGDRM6Bgo2LAQXgLk8ZFMMSAkKRkUbSAhTDUkHCoD2RgodA0dJNwMOCAoGOQcKgTYZBzsDHFYBDzINg5tmdQuAxIpMYw2EMBAWj6qCR6G5gjkHKgRcBiYKRgooBROCsFtlSwQ5BxFABQsCDpf4CITWKgmi54EzDwEdBg4ECIGMiQRrBQ0DCQcQkmBHCXQ8gPYKcwhwFUZ6FAwUDFcJGYCHgUcDhUIPFYRQHwYGgNUrBT4hAXAtAxoEAoFAHxE6BQGB0CqC5oD3KUwECgQCgxFETD2AwjwGAQRVBRs0AoEOLARkDFYKgK44HQ0sBAkHAg4GgJqD2AQRAw0DdwRfBgwEAQ8MBDgICgYoCCJOgVQMHQMJBzYIDgQJBwkHgMslCoQGAAEDBQUGBgIHBggHCREKHAsZDBoNEA4MDwQQAxISEwkWARcEGAEZAxoHGwEcAh8WIAMrAy0LLgEwAzECMgGnAqkCqgSrCPoC+wX9Av4D/wmteHmLjaIwV1iLjJAc3Q4PS0z7/C4vP1xdX+KEjY6RkqmxurvFxsnK3uTl/wAEERIpMTQ3Ojs9SUpdhI6SqbG0urvGys7P5OUABA0OERIpMTQ6O0VGSUpeZGWEkZudyc7PDREpOjtFSVdbXF5fZGWNkam0urvFyd/k5fANEUVJZGWAhLK8vr/V1/Dxg4WLpKa+v8XHz9rbSJi9zcbOz0lOT1dZXl+Jjo+xtre/wcbH1xEWF1tc9vf+/4Btcd7fDh9ubxwdX31+rq9/u7wWFx4fRkdOT1haXF5+f7XF1NXc8PH1cnOPdHWWJi4vp6+3v8fP19+aQJeYMI8f0tTO/05PWlsHCA8QJy/u725vNz0/QkWQkVNndcjJ0NHY2ef+/wAgXyKC3wSCRAgbBAYRgawOgKsFHwmBGwMZCAEELwQ0BAcDAQcGBxEKUA8SB1UHAwQcCgkDCAMHAwIDAwMMBAUDCwYBDhUFTgcbB1cHAgYXDFAEQwMtAwEEEQYPDDoEHSVfIG0EaiWAyAWCsAMaBoL9A1kHFgkYCRQMFAxqBgoGGgZZBysFRgosBAwEAQMxCywEGgYLA4CsBgoGLzFNA4CkCDwDDwM8BzgIKwWC/xEYCC8RLQMhDyEPgIwEgpcZCxWIlAUvBTsHAg4YCYC+InQMgNYaDAWA/wWA3wzynQM3CYFcFIC4CIDLBQoYOwMKBjgIRggMBnQLHgNaBFkJgIMYHAoWCUwEgIoGq6QMFwQxoQSB2iYHDAUFgKYQgfUHASAqBkwEgI0EgL4DGwMPDWxpYnJhcnkvY29yZS9zcmMvdW5pY29kZS91bmljb2RlX2RhdGEucnO0OxAAKAAAAFAAAAAoAAAAtDsQACgAAABcAAAAFgAAAGxpYnJhcnkvY29yZS9zcmMvZXNjYXBlLnJzAAD8OxAAGgAAADgAAAALAAAAXHV7APw7EAAaAAAAZgAAACMAAAAAAwAAgwQgAJEFYABdE6AAEhcgHwwgYB/vLKArKjAgLG+m4CwCqGAtHvtgLgD+IDae/2A2/QHhNgEKITckDeE3qw5hOS8YoTkwHGFI8x6hTEA0YVDwaqFRT28hUp28oVIAz2FTZdGhUwDaIVQA4OFVruJhV+zkIVnQ6KFZIADuWfABf1oAcAAHAC0BAQECAQIBAUgLMBUQAWUHAgYCAgEEIwEeG1sLOgkJARgEAQkBAwEFKwM8CCoYASA3AQEBBAgEAQMHCgIdAToBAQECBAgBCQEKAhoBAgI5AQQCBAICAwMBHgIDAQsCOQEEBQECBAEUAhYGAQE6AQECAQQIAQcDCgIeATsBAQEMAQkBKAEDATcBAQMFAwEEBwILAh0BOgECAQIBAwEFAgcCCwIcAjkCAQECBAgBCQEKAh0BSAEEAQIDAQEIAVEBAgcMCGIBAgkLB0kCGwEBAQEBNw4BBQECBQsBJAkBZgQBBgECAgIZAgQDEAQNAQICBgEPAQADAAMdAh4CHgJAAgEHCAECCwkBLQMBAXUCIgF2AwQCCQEGA9sCAgE6AQEHAQEBAQIIBgoCATAfMQQwBwEBBQEoCQwCIAQCAgEDOAEBAgMBAQM6CAICmAMBDQEHBAEGAQMCxkAAAcMhAAONAWAgAAZpAgAEAQogAlACAAEDAQQBGQIFAZcCGhINASYIGQsuAzABAgQCAicBQwYCAgICDAEIAS8BMwEBAwICBQIBASoCCAHuAQIBBAEAAQAQEBAAAgAB4gGVBQADAQIFBCgDBAGlAgAEAAJQA0YLMQR7ATYPKQECAgoDMQQCAgcBPQMkBQEIPgEMAjQJCgQCAV8DAgEBAgYBAgGdAQMIFQI5AgEBAQEWAQ4HAwXDCAIDAQEXAVEBAgYBAQIBAQIBAusBAgQGAgECGwJVCAIBAQJqAQEBAgYBAWUDAgQBBQAJAQL1AQoCAQEEAZAEAgIEASAKKAYCBAgBCQYCAy4NAQIABwEGAQFSFgIHAQIBAnoGAwEBAgEHAQFIAgMBAQEAAgsCNAUFAQEBAAEGDwAFOwcAAT8EUQEAAgAuAhcAAQEDBAUICAIHHgSUAwA3BDIIAQ4BFgUBDwAHARECBwECAQVkAaAHAAE9BAAEAAdtBwBggPAAewlwcm9kdWNlcnMCCGxhbmd1YWdlAQRSdXN0AAxwcm9jZXNzZWQtYnkDBXJ1c3RjHTEuNzguMCAoOWIwMDk1NmU1IDIwMjQtMDQtMjkpBndhbHJ1cwYwLjIwLjMMd2FzbS1iaW5kZ2VuEjAuMi45MiAoMmE0YTQ5MzYyKQAsD3RhcmdldF9mZWF0dXJlcwIrD211dGFibGUtZ2xvYmFscysIc2lnbi1leHQ=");function LA(A){return"number"==typeof A?A:"string"==typeof A?A.split(":").reverse().map(parseFloat).reduce(((A,g,I)=>A+g*Math.pow(60,I))):void 0}class mA{constructor(){let A=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1;this.speed=A,this.startTime=performance.now()}getTime(){return this.speed*(performance.now()-this.startTime)/1e3}setTime(A){this.startTime=performance.now()-A/this.speed*1e3}}class HA{constructor(){}getTime(A){}setTime(A){}}const KA=(async()=>(await JA(pA),YA))();class zA{constructor(A){this.core=A,this.driver=A.driver}onEnter(A){}init(){}play(){}pause(){}togglePlay(){}seek(A){return!1}step(){}stop(){this.driver.stop()}}class bA extends zA{async init(){try{return await this.core.initializeDriver(),this.core.setState("idle")}catch(A){throw this.core.setState("errored"),A}}async play(){this.core.dispatchEvent("play");const A=await this.init();await A.doPlay()}async togglePlay(){await this.play()}async seek(A){const g=await this.init();return await g.seek(A)}async step(){const A=await this.init();await A.step()}stop(){}}class vA extends zA{onEnter(A){let{reason:g,message:I}=A;this.core.dispatchEvent("idle",{message:I}),"paused"===g&&this.core.dispatchEvent("pause")}async play(){this.core.dispatchEvent("play"),await this.doPlay()}async doPlay(){const A=await this.driver.play();!0===A?this.core.setState("playing"):"function"==typeof A&&(this.core.setState("playing"),this.driver.stop=A)}async togglePlay(){await this.play()}seek(A){return this.driver.seek(A)}step(){this.driver.step()}}class xA extends zA{onEnter(){this.core.dispatchEvent("playing")}pause(){!0===this.driver.pause()&&this.core.setState("idle",{reason:"paused"})}togglePlay(){this.pause()}seek(A){return this.driver.seek(A)}}class ZA extends zA{onEnter(){this.core.dispatchEvent("loading")}}class WA extends zA{onEnter(A){let{message:g}=A;this.core.dispatchEvent("offline",{message:g})}}class TA extends zA{onEnter(A){let{message:g}=A;this.core.dispatchEvent("ended",{message:g})}async play(){this.core.dispatchEvent("play"),await this.driver.restart()&&this.core.setState("playing")}async togglePlay(){await this.play()}seek(A){return!0===this.driver.seek(A)&&(this.core.setState("idle"),!0)}}class jA extends zA{onEnter(){this.core.dispatchEvent("errored")}}class XA{constructor(A,g){this.logger=g.logger,this.state=new bA(this),this.stateName="uninitialized",this.driver=null,this.driverFn=A,this.changedLines=new Set,this.cursor=void 0,this.duration=void 0,this.cols=g.cols,this.rows=g.rows,this.speed=g.speed??1,this.loop=g.loop,this.idleTimeLimit=g.idleTimeLimit,this.preload=g.preload,this.startAt=LA(g.startAt),this.poster=this.parsePoster(g.poster),this.markers=this.normalizeMarkers(g.markers),this.pauseOnMarkers=g.pauseOnMarkers,this.commandQueue=Promise.resolve(),this.eventHandlers=new Map([["ended",[]],["errored",[]],["idle",[]],["init",[]],["input",[]],["loading",[]],["marker",[]],["offline",[]],["pause",[]],["play",[]],["playing",[]],["reset",[]],["resize",[]],["seeked",[]],["terminalUpdate",[]]])}addEventListener(A,g){this.eventHandlers.get(A).push(g)}dispatchEvent(A){let g=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};for(const I of this.eventHandlers.get(A))I(g)}async init(){this.wasm=await KA;const A=this.feed.bind(this),g=this.now.bind(this),I=this.resetVt.bind(this),B=this.setState.bind(this),Q="npt"===this.poster.type?this.poster.value:void 0;this.driver=this.driverFn({feed:A,onInput:A=>{this.dispatchEvent("input",{data:A})},onMarker:A=>{let{index:g,time:I,label:B}=A;this.dispatchEvent("marker",{index:g,time:I,label:B})},reset:I,now:g,setTimeout:(A,g)=>window.setTimeout(A,g/this.speed),setInterval:(A,g)=>window.setInterval(A,g/this.speed),setState:B,logger:this.logger},{cols:this.cols,rows:this.rows,idleTimeLimit:this.idleTimeLimit,startAt:this.startAt,loop:this.loop,posterTime:Q,markers:this.markers,pauseOnMarkers:this.pauseOnMarkers}),"function"==typeof this.driver&&(this.driver={play:this.driver}),(this.preload||void 0!==Q)&&this.withState((A=>A.init()));const C="text"===this.poster.type?this.renderPoster(this.poster.value):void 0,E={isPausable:!!this.driver.pause,isSeekable:!!this.driver.seek,poster:C};if(void 0===this.driver.init&&(this.driver.init=()=>({})),void 0===this.driver.pause&&(this.driver.pause=()=>{}),void 0===this.driver.seek&&(this.driver.seek=A=>!1),void 0===this.driver.step&&(this.driver.step=()=>{}),void 0===this.driver.stop&&(this.driver.stop=()=>{}),void 0===this.driver.restart&&(this.driver.restart=()=>{}),void 0===this.driver.getCurrentTime){const A=this.driver.play;let g=new HA;this.driver.play=()=>(g=new mA(this.speed),A()),this.driver.getCurrentTime=()=>g.getTime()}return E}play(){return this.withState((A=>A.play()))}pause(){return this.withState((A=>A.pause()))}togglePlay(){return this.withState((A=>A.togglePlay()))}seek(A){return this.withState((async g=>{await g.seek(A)&&this.dispatchEvent("seeked")}))}step(){return this.withState((A=>A.step()))}stop(){return this.withState((A=>A.stop()))}withState(A){return this.enqueueCommand((()=>A(this.state)))}enqueueCommand(A){return this.commandQueue=this.commandQueue.then(A),this.commandQueue}getChangedLines(){if(this.changedLines.size>0){const A=new Map,g=this.vt.rows;for(const I of this.changedLines)I1&&void 0!==arguments[1]?arguments[1]:{};if(this.stateName===A)return this.state;if(this.stateName=A,"playing"===A)this.state=new xA(this);else if("idle"===A)this.state=new vA(this);else if("loading"===A)this.state=new ZA(this);else if("ended"===A)this.state=new TA(this);else if("offline"===A)this.state=new WA(this);else{if("errored"!==A)throw`invalid state: ${A}`;this.state=new jA(this)}return this.state.onEnter(g),this.state}feed(A){this.doFeed(A),this.dispatchEvent("terminalUpdate")}doFeed(A){const[g,I]=this.vt.feed(A);if(g.forEach((A=>this.changedLines.add(A))),this.cursor=void 0,I){const[A,g]=this.vt.get_size();this.vt.cols=A,this.vt.rows=g,this.logger.debug(`core: vt resize (${A}x${g})`),this.dispatchEvent("resize",{cols:A,rows:g})}}now(){return performance.now()*this.speed}async initializeDriver(){const A=await this.driver.init();this.cols=this.cols??A.cols??80,this.rows=this.rows??A.rows??24,this.duration=this.duration??A.duration,this.markers=this.normalizeMarkers(A.markers)??this.markers??[],0===this.cols&&(this.cols=80),0===this.rows&&(this.rows=24),this.initializeVt(this.cols,this.rows);const g=void 0!==A.poster?this.renderPoster(A.poster):void 0;this.dispatchEvent("init",{cols:this.cols,rows:this.rows,duration:this.duration,markers:this.markers,theme:A.theme,poster:g})}resetVt(A,g){let I=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0,B=arguments.length>3&&void 0!==arguments[3]?arguments[3]:void 0;this.cols=A,this.rows=g,this.cursor=void 0,this.initializeVt(A,g),void 0!==I&&""!==I&&this.doFeed(I),this.dispatchEvent("reset",{cols:A,rows:g,theme:B})}initializeVt(A,g){this.logger.debug(`core: vt init (${A}x${g})`),this.vt=this.wasm.create(A,g,!0,100),this.vt.cols=A,this.vt.rows=g,this.changedLines.clear();for(let A=0;AB.feed(A)));const Q=B.get_cursor()??!1,C=[];for(let A=0;A"number"==typeof A?[A,""]:A))}}const OA=Symbol("store-raw"),PA=Symbol("store-node"),_A=Symbol("store-name");function $A(A,g){let B=A[I];if(!B&&(Object.defineProperty(A,I,{value:B=new Proxy(A,Eg)}),!Array.isArray(A))){const g=Object.keys(A),I=Object.getOwnPropertyDescriptors(A);for(let Q=0,C=g.length;Q!0,deleteProperty:()=>!0,ownKeys:function(A){return Qg(A),Reflect.ownKeys(A)},getOwnPropertyDescriptor:function(A,g){const B=Reflect.getOwnPropertyDescriptor(A,g);return B&&!B.get&&B.configurable&&g!==I&&g!==PA&&g!==_A?(delete B.value,delete B.writable,B.get=()=>A[I][g],B):B}};function eg(A,g,I,B=!1){if(!B&&A[g]===I)return;const Q=A[g],C=A.length;void 0===I?delete A[g]:A[g]=I;let E,e=Ig(A);(E=Bg(e,g,Q))&&E.$((()=>I)),Array.isArray(A)&&A.length!==C&&(E=Bg(e,"length",C))&&E.$(A.length),(E=e._)&&E.$()}function ig(A,g){const I=Object.keys(g);for(let B=0;B1){B=g.shift();const C=typeof B,E=Array.isArray(A);if(Array.isArray(B)){for(let Q=0;Q1)return void Vg(A[B],g,[B].concat(I));Q=A[B],I=[B].concat(I)}let C=g[0];"function"==typeof C&&(C=C(Q,I),C===Q)||void 0===B&&null==C||(C=gg(C),void 0===B||Ag(Q)&&Ag(C)&&!Array.isArray(C)?ig(Q,C):eg(A,B,C))}function tg(...[A,g]){const I=gg(A||{}),B=Array.isArray(I);return[$A(I),function(...A){h((()=>{B&&1===A.length?function(A,g){if("function"==typeof g&&(g=g(A)),g=gg(g),Array.isArray(g)){if(A===g)return;let I=0,B=g.length;for(;I=E&&i>=E&&(C[e]===A[i]||Q&&C[E]&&A[E]&&C[e][Q]===A[i][Q]);e--,i--)s[i]=C[e];if(E>i||E>e){for(I=E;I<=i;I++)eg(C,I,A[I]);for(;IA.length&&eg(C,"length",A.length))}for(t=new Array(i+1),I=i;I>=E;I--)V=A[I],o=Q&&V?V[Q]:V,g=n.get(o),t[I]=void 0===g?-1:g,n.set(o,I);for(g=E;g<=e;g++)V=C[g],o=Q&&V?V[Q]:V,I=n.get(o),void 0!==I&&-1!==I&&(s[I]=C[g],I=t[I],n.set(o,I));for(I=E;IA.length&&eg(C,"length",A.length))}const E=Object.keys(A);for(let g=0,I=E.length;g{if(!Ag(A)||!Ag(Q))return Q;const g=sg(Q,{[og]:A},og,I,B);return void 0===g?A:g}}const rg=P("");var ag=A=>{const g=D((()=>{if(1==A.text.length){const g=A.text.codePointAt(0);if(g>=9600&&g<=9631||57520==g||57522==g)return g}})),I=D((()=>g()?" ":A.text)),B=D((()=>function(A,g,I,B){const Q=A.get("fg"),C=A.get("bg");let E={"--offset":g,width:I*B+.01+"ch"};"string"==typeof Q&&(E["--fg"]=Q);"string"==typeof C&&(E["--bg"]=C);return E}(A.pen,A.offset,I().length,A.charWidth))),Q=D((()=>function(A,g,I){const B=cg(A.get("fg"),A.get("bold"),"fg-"),Q=cg(A.get("bg"),A.get("blink"),"bg-");let C=I??"";void 0!==g&&(C+=` cp-${g.toString(16)}`);B&&(C+=" "+B);Q&&(C+=" "+Q);A.has("bold")&&(C+=" ap-bright");A.has("faint")&&(C+=" ap-faint");A.has("italic")&&(C+=" ap-italic");A.has("underline")&&(C+=" ap-underline");A.has("blink")&&(C+=" ap-blink");A.get("inverse")&&(C+=" ap-inverse");return C}(A.pen,g(),A.extraClass)));return(()=>{const A=rg.cloneNode(!0);return BA(A,I),w((g=>{const I=Q(),C=B();return I!==g._v$&&$(A,g._v$=I),g._v$2=gA(A,C,g._v$2),g}),{_v$:void 0,_v$2:void 0}),A})()};function cg(A,g,I){if("number"==typeof A)return g&&A<8&&(A+=8),`${I}${A}`}const wg=P('');var Dg=A=>(()=>{const g=wg.cloneNode(!0);return BA(g,K(Z,{get each(){return(()=>{if("number"==typeof A.cursor){const g=[];let I=0,B=0;for(;B0&&g.push({...Q,text:Q.text.substring(0,C)}),g.push({...Q,text:Q.text[C],offset:Q.offset+C,extraClass:"ap-cursor"}),CK(ag,function(...A){let g=!1;for(let B=0;B=0;I--){const B=v(A[I])[g];if(void 0!==B)return B}},has(g){for(let I=A.length-1;I>=0;I--)if(g in v(A[I]))return!0;return!1},keys(){const g=[];for(let I=0;I=0;g--)if(A[g]){const I=Object.getOwnPropertyDescriptors(A[g]);for(const g in I)g in B||Object.defineProperty(B,g,{enumerable:!0,get(){for(let I=A.length-1;I>=0;I--){const B=(A[I]||{})[g];if(void 0!==B)return B}}})}return B}(A))})),g})();const hg=P('
');var lg=A=>{const g=()=>A.lineHeight??1.3333333333,I=D((()=>({width:`${A.cols}ch`,height:g()*A.rows+"em","font-size":100*(A.scale||1)+"%","font-family":A.fontFamily,"--term-line-height":`${g()}em`,"--term-cols":A.cols}))),B=D((()=>A.cursor?.[0])),Q=D((()=>A.cursor?.[1]));return(()=>{const g=hg.cloneNode(!0),C=A.ref;return"function"==typeof C?IA(C,g):A.ref=g,BA(g,K(x,{get each(){return A.lines},children:(A,g)=>K(Dg,{get segments(){return A.segments},get cursor(){return D((()=>g()===Q()))()?B():null}})})),w((B=>{const Q=!(!A.blink&&!A.cursorHold),C=!!A.blink,E=I();return Q!==B._v$&&g.classList.toggle("ap-cursor-on",B._v$=Q),C!==B._v$2&&g.classList.toggle("ap-blink",B._v$2=C),B._v$3=gA(g,E,B._v$3),B}),{_v$:void 0,_v$2:void 0,_v$3:void 0}),g})()};const Mg=P(''),yg=P(''),Gg=P(''),kg=P(''),Fg=P('
Fullscreen (f)
'),dg=P('');function ug(A){let g=Math.floor(A);const I=Math.floor(g/86400);g%=86400;const B=Math.floor(g/3600);g%=3600;const Q=Math.floor(g/60);return g%=60,I>0?`${Ng(I)}:${Ng(B)}:${Ng(Q)}:${Ng(g)}`:B>0?`${Ng(B)}:${Ng(Q)}:${Ng(g)}`:`${Ng(Q)}:${Ng(g)}`}function Ng(A){return A<10?`0${A}`:A.toString()}var fg=A=>{const g=A=>g=>{g.preventDefault(),A(g)},I=()=>"number"==typeof A.currentTime?ug(A.currentTime):"--:--",B=()=>"number"==typeof A.remainingTime?"-"+ug(A.remainingTime):I(),Q=D((()=>"number"==typeof A.duration?A.markers.filter((g=>g[0]{const g=A.currentTarget.offsetWidth,I=A.currentTarget.getBoundingClientRect(),B=A.clientX-I.left;return 100*Math.max(0,B/g)+"%"},[E,e]=c(!1),i=function(A,g){let I=!0;return function(){if(I){I=!1;for(var B=arguments.length,Q=new Array(B),C=0;CI=!0),g)}}}(A.onSeekClick,50),V=g=>{g._marker||g.altKey||g.shiftKey||g.metaKey||g.ctrlKey||0!==g.button||(e(!0),A.onSeekClick(C(g)))},t=A=>{A.altKey||A.shiftKey||A.metaKey||A.ctrlKey||E()&&i(C(A))},o=()=>{e(!1)};return document.addEventListener("mouseup",o),y((()=>{document.removeEventListener("mouseup",o)})),(()=>{const C=Fg.cloneNode(!0),E=C.firstChild,e=E.firstChild,i=e.nextSibling,o=E.nextSibling,s=A.ref;return"function"==typeof s?IA(s,C):A.ref=C,BA(C,K(W,{get when(){return A.isPausable},get children(){const I=Gg.cloneNode(!0);return AA(I,"click",g(A.onPlayClick),!0),BA(I,K(T,{get children(){return[K(j,{get when(){return A.isPlaying},get children(){return Mg.cloneNode(!0)}}),K(j,{get when(){return!A.isPlaying},get children(){return yg.cloneNode(!0)}})]}})),I}}),E),BA(e,I),BA(i,B),BA(C,K(W,{get when(){return"number"==typeof A.progress||A.isSeekable},get children(){const I=kg.cloneNode(!0),B=I.firstChild,C=B.firstChild.nextSibling;return B.$$mousemove=t,B.$$mousedown=V,BA(B,K(x,{get each(){return Q()},children:(I,B)=>(()=>{const Q=dg.cloneNode(!0),C=Q.firstChild,E=C.nextSibling;var e;return Q.$$mousedown=A=>{A._marker=!0},AA(Q,"click",(e=B(),g((()=>{A.onSeekClick({marker:e})}))),!0),BA(E,(()=>(A=>""===A[1]?ug(A[0]):`${ug(A[0])} - ${A[1]}`)(I))),w((g=>{const B=(g=>g[0]/A.duration*100+"%")(I),E=!!(g=>"number"==typeof A.currentTime&&g[0]<=A.currentTime)(I);return B!==g._v$&&Q.style.setProperty("left",g._v$=B),E!==g._v$2&&C.classList.toggle("ap-marker-past",g._v$2=E),g}),{_v$:void 0,_v$2:void 0}),Q})()}),null),w((g=>gA(C,{transform:`scaleX(${A.progress||0}`},g))),I}}),o),AA(o,"click",g(A.onFullscreenClick),!0),w((()=>C.classList.toggle("ap-seekable",!!A.isSeekable))),C})()};_(["click","mousedown","mousemove"]);const Rg=P('
💥
');var qg=A=>Rg.cloneNode(!0);const Jg=P('
');var Yg=A=>Jg.cloneNode(!0);const Ug=P('
');var Sg=A=>(()=>{const g=Ug.cloneNode(!0),I=g.firstChild;return BA(I,(()=>A.message)),w((g=>gA(I,{"font-family":A.fontFamily},g))),g})();const pg=P('
');var Lg=A=>(()=>{const g=pg.cloneNode(!0);var I;return AA(g,"click",(I=A.onClick,A=>{A.preventDefault(),I(A)}),!0),g})();_(["click"]);const mg=P('

Keyboard shortcuts

  • space - pause / resume
  • f - toggle fullscreen mode
  • / - rewind / fast-forward by 5 seconds
  • Shift + / - rewind / fast-forward by 10%
  • [ / ] - jump to the previous / next marker
  • 0, 1, 2 ... 9 - jump to 0%, 10%, 20% ... 90%
  • . - step through a recording, one frame at a time (when paused)
  • ? - toggle this help popup
');var Hg=A=>(()=>{const g=mg.cloneNode(!0),I=g.firstChild;var B;return AA(g,"click",(B=A.onClose,A=>{A.preventDefault(),B(A)}),!0),I.$$click=A=>{A.stopPropagation()},w((I=>gA(g,{"font-family":A.fontFamily},I))),g})();_(["click"]);const Kg=P('
');var zg=A=>{const g=A.logger,I=A.core,B=A.autoPlay,[Q,C]=tg({lines:[],cursor:void 0,charW:A.charW,charH:A.charH,bordersW:A.bordersW,bordersH:A.bordersH,containerW:0,containerH:0,isPausable:!0,isSeekable:!0,isFullscreen:!1,currentTime:null,remainingTime:null,progress:null,blink:!0,cursorHold:!1}),[E,e]=c(!1),[i,V]=c(B?null:"start"),[t,o]=c(null),[s,n]=c({cols:A.cols,rows:A.rows},{equals:(A,g)=>A.cols===g.cols&&A.rows===g.rows}),[r,a]=c(void 0),[l,G]=tg([]),[k,F]=c(!1),[d,u]=c(!1),[N,f]=c(void 0),R=D((()=>s().cols||80)),q=D((()=>s().rows||24)),J=()=>!1===A.controls?0:32;let Y,U,S,p,L,m,H,z,b;function v(){oA(),iA(),VA()}function x(A){h((()=>{A.rows{let{cols:g,rows:I,duration:B,theme:Q,poster:C,markers:E}=A;h((()=>{x({cols:g,rows:I}),a(B),f(Q),G(E),Z(C)}))})),I.addEventListener("play",(()=>{V(null)})),I.addEventListener("playing",(()=>{h((()=>{e(!0),V(null),O(),tA(),eA()}))})),I.addEventListener("idle",(()=>{h((()=>{e(!1),v()}))})),I.addEventListener("loading",(()=>{h((()=>{e(!1),v(),V("loader")}))})),I.addEventListener("offline",(A=>{let{message:g}=A;h((()=>{e(!1),v(),void 0!==g&&(o(g),V("info"))}))})),I.addEventListener("ended",(A=>{let{message:g}=A;h((()=>{e(!1),v(),void 0!==g&&(o(g),V("info"))}))})),I.addEventListener("errored",(()=>{V("error")})),I.addEventListener("resize",x),I.addEventListener("reset",(A=>{let{cols:g,rows:I,theme:B}=A;h((()=>{x({cols:g,rows:I}),f(B),O()}))})),I.addEventListener("seeked",(()=>{VA()})),I.addEventListener("terminalUpdate",(()=>{void 0===Y&&(Y=requestAnimationFrame(O))}));const X=()=>{b=new ResizeObserver(function(A,g){let I;return function(){for(var B=arguments.length,Q=new Array(B),C=0;CA.apply(this,Q)),g)}}((A=>{C({containerW:L.offsetWidth,containerH:L.offsetHeight}),L.dispatchEvent(new CustomEvent("resize",{detail:{el:m}}))}),10)),b.observe(L)};M((async()=>{g.info("player mounted"),g.debug("font measurements",{charW:Q.charW,charH:Q.charH}),X();const{isPausable:A,isSeekable:E,poster:e}=await I.init();h((()=>{C({isPausable:A,isSeekable:E,containerW:L.offsetWidth,containerH:L.offsetHeight}),Z(e)})),B&&I.play()})),y((()=>{I.stop(),oA(),iA(),b.disconnect()}));const O=()=>{const A=I.getChangedLines();h((()=>{A&&A.forEach(((A,g)=>{C("lines",g,ng(A))})),C("cursor",ng(I.getCursor())),C("cursorHold",!0)})),Y=void 0},P=D((()=>{const g=Q.charW*R()+Q.bordersW,I=Q.charH*q()+Q.bordersH;let B=A.fit??"width";if("both"===B||Q.isFullscreen){B=Q.containerW/(Q.containerH-J())>g/I?"height":"width"}if(!1===B||"none"===B)return{};if("width"===B){const A=Q.containerW/g;return{scale:A,width:Q.containerW,height:I*A+J()}}if("height"===B){const A=(Q.containerH-J())/I;return{scale:A,width:g*A,height:Q.containerH}}throw`unsupported fit mode: ${B}`})),_=()=>{C("isFullscreen",document.fullscreenElement??document.webkitFullscreenElement)},AA=()=>{Q.isFullscreen?(document.exitFullscreen??document.webkitExitFullscreen??(()=>{})).apply(document):(L.requestFullscreen??L.webkitRequestFullscreen??(()=>{})).apply(L)},QA=A=>{if(!(A.altKey||A.metaKey||A.ctrlKey)){if(" "==A.key)I.togglePlay();else if("."==A.key)I.step(),VA();else if("f"==A.key)AA();else if("["==A.key)I.seek({marker:"prev"});else if("]"==A.key)I.seek({marker:"next"});else if(A.key.charCodeAt(0)>=48&&A.key.charCodeAt(0)<=57){const g=(A.key.charCodeAt(0)-48)/10;I.seek(100*g+"%")}else if("?"==A.key)d()?u(!1):(I.pause(),u(!0));else if("ArrowLeft"==A.key)A.shiftKey?I.seek("<<<"):I.seek("<<");else if("ArrowRight"==A.key)A.shiftKey?I.seek(">>>"):I.seek(">>");else{if("Escape"!=A.key)return;u(!1)}A.stopPropagation(),A.preventDefault()}},CA=()=>{Q.isFullscreen&&sA(!0)},EA=()=>{Q.isFullscreen||sA(!1)},eA=()=>{S=setInterval(VA,100)},iA=()=>{clearInterval(S)},VA=()=>{const A=I.getCurrentTime(),g=I.getRemainingTime(),B=I.getProgress();C({currentTime:A,remainingTime:g,progress:B})},tA=()=>{p=setInterval((()=>{C((A=>{const g={blink:!A.blink};return g.blink&&(g.cursorHold=!1),g}))}),500)},oA=()=>{clearInterval(p),C("blink",!0)},sA=A=>{clearTimeout(U),A&&(U=setTimeout((()=>sA(!1)),2e3)),F(A)},nA=D((()=>{const g=A.theme||"auto/asciinema";return"auto/"===g.slice(0,5)?{name:g.slice(5),colors:N()}:{name:g}})),rA=(()=>{const g=Kg.cloneNode(!0),B=g.firstChild;"function"==typeof L?IA(L,g):L=g,g.addEventListener("webkitfullscreenchange",_),g.addEventListener("fullscreenchange",_),g.$$mousemove=CA,g.$$keydown=QA;return"function"==typeof m?IA(m,B):m=B,B.$$mousemove=()=>sA(!0),B.addEventListener("mouseleave",EA),BA(B,K(lg,{get cols(){return R()},get rows(){return q()},get scale(){return P()?.scale},get blink(){return Q.blink},get lines(){return Q.lines},get cursor(){return Q.cursor},get cursorHold(){return Q.cursorHold},get fontFamily(){return A.terminalFontFamily},get lineHeight(){return A.terminalLineHeight},ref(A){"function"==typeof H?H(A):H=A}}),null),BA(B,K(W,{get when(){return!1!==A.controls},get children(){return K(fg,{get duration(){return r()},get currentTime(){return Q.currentTime},get remainingTime(){return Q.remainingTime},get progress(){return Q.progress},markers:l,get isPlaying(){return E()},get isPausable(){return Q.isPausable},get isSeekable(){return Q.isSeekable},onPlayClick:()=>I.togglePlay(),onFullscreenClick:AA,onSeekClick:A=>I.seek(A),ref(A){"function"==typeof z?z(A):z=A}})}}),null),BA(B,K(T,{get children(){return[K(j,{get when(){return"start"==i()},get children(){return K(Lg,{onClick:()=>I.play()})}}),K(j,{get when(){return"loader"==i()},get children(){return K(Yg,{})}}),K(j,{get when(){return"info"==i()},get children(){return K(Sg,{get message(){return t()},get fontFamily(){return A.terminalFontFamily}})}}),K(j,{get when(){return"error"==i()},get children(){return K(qg,{})}})]}}),null),BA(B,K(W,{get when(){return d()},get children(){return K(Hg,{get fontFamily(){return A.terminalFontFamily},onClose:()=>u(!1)})}}),null),w((I=>{const Q=!!(!0===A.controls||"auto"===A.controls&&k()),C=`ap-player asciinema-player-theme-${nA().name}`,E=(()=>{const g={};!1!==A.fit&&"none"!==A.fit||void 0===A.terminalFontSize||("small"===A.terminalFontSize?g["font-size"]="12px":"medium"===A.terminalFontSize?g["font-size"]="18px":"big"===A.terminalFontSize?g["font-size"]="24px":g["font-size"]=A.terminalFontSize);const I=P();void 0!==I.width&&(g.width=`${I.width}px`,g.height=`${I.height}px`);const B=nA().colors;return void 0!==B&&(g["--term-color-foreground"]=B.foreground,g["--term-color-background"]=B.background,B.palette.forEach(((A,I)=>{g[`--term-color-${I}`]=A}))),g})();return Q!==I._v$&&g.classList.toggle("ap-hud",I._v$=Q),C!==I._v$2&&$(B,I._v$2=C),I._v$3=gA(B,E,I._v$3),I}),{_v$:void 0,_v$2:void 0,_v$3:void 0}),g})();return rA};_(["keydown","mousemove"]);class bg{log(){}debug(){}info(){}warn(){}error(){}}class vg{constructor(A,g){this.logger=A,this.prefix=g}log(A){for(var g=arguments.length,I=new Array(g>1?g-1:0),B=1;B1?g-1:0),B=1;B1?g-1:0),B=1;B1?g-1:0),B=1;B1?g-1:0),B=1;BI=>{g(A(I))}}(A))}flatMap(A){return this.transform(function(A){return g=>I=>{A(I).forEach(g)}}(A))}filter(A){return this.transform(function(A){return g=>I=>{A(I)&&g(I)}}(A))}take(A){return this.transform(function(A){let g=0;return I=>B=>{gB=>{g+=1,g>A&&I(B)}}(A))}transform(A){return new xg(this.input,this.xfs.concat([A]))}multiplex(A,g){return new xg(new Wg(this[Symbol.iterator](),A[Symbol.iterator](),g))}toArray(){return Array.from(this)}[Symbol.iterator](){let A=0,g=[],I=!1;const B=(Q=this.xfs,C=A=>g.push(A),Q.reverse().reduce(((A,g)=>{const I=Zg(g(A.step));return{step:I.step,flush:()=>{I.flush(),A.flush()}}}),Zg(C)));var Q,C;return{next:()=>{for(A===g.length&&(g=[],A=0);0===g.length;){const A=this.input.next();if(A.done)break;B.step(A.value)}return 0!==g.length||I||(B.flush(),I=!0),g.length>0?{done:!1,value:g[A++]}:{done:!0}}}}}function Zg(A){return"function"==typeof A?{step:A,flush:()=>{}}:A}class Wg{constructor(A,g,I){this.left=A,this.right=g,this.comparator=I}[Symbol.iterator](){let A,g;return{next:()=>{if(void 0===A&&void 0!==this.left){const g=this.left.next();g.done?this.left=void 0:A=g.value}if(void 0===g&&void 0!==this.right){const A=this.right.next();A.done?this.right=void 0:g=A.value}if(void 0===A&&void 0===g)return{done:!0};if(void 0===A){const A=g;return g=void 0,{done:!1,value:A}}if(void 0===g){const g=A;return A=void 0,{done:!1,value:g}}if(this.comparator(A,g)){const g=A;return A=void 0,{done:!1,value:g}}{const A=g;return g=void 0,{done:!1,value:A}}}}}}async function Tg(A){let g,I;if(A instanceof Response){const B=await A.text(),Q=function(A){const g=A.split("\n");let I;try{I=JSON.parse(g[0])}catch(A){return}const B=new xg(g).drop(1).filter((A=>"["===A[0])).map(JSON.parse).toArray();return{header:I,events:B}}(B);void 0!==Q?(g=Q.header,I=Q.events):g=JSON.parse(B)}else if("object"==typeof A&&"number"==typeof A.version)g=A;else{if(!Array.isArray(A))throw"invalid data";g=A[0],I=A.slice(1,A.length)}if(1===g.version)return function(A){let g=0;const I=new xg(A.stdout).map((A=>(g+=A[0],[g,"o",A[1]])));return{cols:A.width,rows:A.height,events:I}}(g);if(2===g.version)return function(A,g){return{cols:A.width,rows:A.height,theme:jg(A.theme),events:g,idleTimeLimit:A.idle_time_limit}}(g,I);throw`asciicast v${g.version} format not supported`}function jg(A){const g=/^#[0-9A-Fa-f]{6}$/,I=A?.fg,B=A?.bg,Q=A?.palette;if(g.test(I)&&g.test(B)&&/^(#[0-9A-Fa-f]{6}:){7,}#[0-9A-Fa-f]{6}$/.test(Q))return{foreground:I,background:B,palette:Q.split(":")}}function Xg(A){if("r"===A[1]){const[g,I]=A[2].split("x");return[A[0],"o",`[8;${I};${g};t`]}return A}function Og(A){return"number"==typeof A?[A,"m",""]:[A[0],"m",A[1]]}function Pg(){let A=0;return function(g){return"m"===g[1]?[g[0],g[1],{index:A++,time:g[0],label:g[2]}]:g}}class _g{constructor(){this.items=[],this.onPush=void 0}push(A){this.items.push(A),void 0!==this.onPush&&(this.onPush(this.popAll()),this.onPush=void 0)}popAll(){if(this.items.length>0){const A=this.items;return this.items=[],A}{const A=this;return new Promise((g=>{A.onPush=g}))}}}function $g(A,g,I,B,Q,C){if(0===A)return C.debug("using no buffer"),function(A){return{pushEvent(g){if("o"===g[1])A(g[2]);else if("r"===g[1]){const[I,B]=g[2].split("x");A(`[8;${B};${I};t`)}},pushText(g){A(g)},stop(){}}}(g);{let E;return"number"==typeof(A=A??{})?(C.debug(`using fixed time buffer (${A} ms)`),E=g=>A):"function"==typeof A?(C.debug("using custom dynamic buffer"),E=A({logger:C})):(C.debug("using adaptive buffer",A),E=function(A,g){let{logger:I}=A,{minTime:B=25,maxLevel:Q=100,interval:C=50,windowSize:E=20,smoothingFactor:e=.2,minImprovementDuration:i=1e3}=g,V=0,t=a(V),o=[],s=0,n=0,r=null;function a(A){return 0===A?B:C*A}return A=>{if(o.push(A),o.lengthgg>A?g:A))}(o);s=B*e+s*(1-e),n=(B-g)*e+n*(1-e);const C=s+n;if(A>t&&I.debug("buffer underrun",{latency:A,maxJitter:s,jitterRange:n,bufferTime:t}),Vt)t=a(V+=1),I.debug("jitter increased, raising bufferTime",{latency:A,maxJitter:s,jitterRange:n,bufferTime:t});else if(V>1&&Ci&&(r=performance.now(),t=a(V-=1),I.debug("jitter decreased, lowering bufferTime",{latency:A,maxJitter:s,jitterRange:n,bufferTime:t})),t;return r=null,t}}({logger:C},A)),function(A,g,I,B,Q){let C=arguments.length>5&&void 0!==arguments[5]?arguments[5]:1/60,E=performance.now()-1e3*Q,e=A(0);const i=new _g;C*=1e3;let V=-C,t=!1;function o(){return performance.now()-E}return setTimeout((async()=>{for(;!t;){const A=await i.popAll();if(t)return;for(const B of A){const A=1e3*B[0]+e;if(A-V0&&(await AI(Q),t))return;I(B[0]),g(B[2]),V=A}}}),0),{pushEvent(g){let I=o()-1e3*g[0];if(I<0&&(B.debug(`correcting epoch by ${I} ms`),E+=I,I=0),e=A(I),"o"===g[1])i.push(g);else if("r"===g[1]){const[A,I]=g[2].split("x");i.push([g[0],"o",`[8;${I};${A};t`])}},pushText(A){i.push([o(),"o",A])},stop(){t=!0,i.push(void 0)}}}(E,g,I,C,B??0,Q)}}function AI(A){return new Promise((g=>{setTimeout(g,A)}))}function gI(A){return Math.min(500*Math.pow(2,A),5e3)}function II(A){if(A.length<13)return;const g=function(A){const g=BI(A.subarray(0,4)),I=BI(A.subarray(4,8));return g+I/1e6}(A.subarray(0,8)),I=BI(A.subarray(8,12));return{time:g,data:A.subarray(12,12+I),len:I+12}}function BI(A){return A[0]+256*A[1]+256*A[2]*256+256*A[3]*256*256}const QI=new Map([["benchmark",function(A,g){let I,{url:B,iterations:Q=10}=A,{feed:C,setState:E,now:e}=g,i=0;return{async init(){const A=await Tg(await fetch(B)),{cols:g,rows:Q,events:C}=A;I=Array.from(C).filter((A=>{let[g,I,B]=A;return"o"===I})).map((A=>{let[g,I,B]=A;return[g,B]}));const E=I[I.length-1][0];for(const[A,g]of I)i+=new Blob([g]).size;return{cols:g,rows:Q,duration:E}},play(){const A=e();for(let A=0;A{E("stopped",{reason:"ended"})}),0),!0}}}],["clock",function(A,g,I){let{hourColor:B=3,minuteColor:Q=4,separatorColor:C=9}=A,{feed:E}=g,{cols:e=5,rows:i=1}=I;const V=Math.floor(i/2),t=Math.floor(e/2)-2,o=`[?25l[${V}B`;let s;const n=()=>{const A=new Date,g=A.getHours(),I=A.getMinutes(),E=[];E.push("\r");for(let A=0;A{n().forEach(E)};return{init:()=>{const A=[o].concat(n());return{cols:e,rows:i,duration:1440,poster:A}},play:()=>(E(o),r(),s=setInterval(r,1e3),!0),stop:()=>{clearInterval(s)},getCurrentTime:()=>{const A=new Date;return 60*A.getHours()+A.getMinutes()}}}],["eventsource",function(A,g){let I,B,{url:Q,bufferTime:C,minFrameTime:E}=A,{feed:e,reset:i,setState:V,logger:t}=g;t=new vg(t,"eventsource: ");let o=new HA;function s(A){void 0!==B&&B.stop(),B=$g(C,e,(A=>o.setTime(A)),A,E,t)}return{play:()=>{I=new EventSource(Q),I.addEventListener("open",(()=>{t.info("opened"),s()})),I.addEventListener("error",(A=>{t.info("errored"),t.debug({e:A}),V("loading")})),I.addEventListener("message",(A=>{const g=JSON.parse(A.data);if(Array.isArray(g))B.pushEvent(g);else if(void 0!==g.cols||void 0!==g.width){const A=g.cols??g.width,I=g.rows??g.height;t.debug(`vt reset (${A}x${I})`),V("playing"),s(g.time),i(A,I,g.init??void 0),o=new mA,"number"==typeof g.time&&o.setTime(g.time)}else"offline"===g.state&&(t.info("stream offline"),V("offline",{message:"Stream offline"}),o=new HA)})),I.addEventListener("done",(()=>{t.info("closed"),I.close(),V("ended",{message:"Stream ended"})}))},stop:()=>{void 0!==B&&B.stop(),void 0!==I&&I.close()},getCurrentTime:()=>o.getTime()}}],["random",function(A,g){let{feed:I,setTimeout:B}=g;const Q=" ".charCodeAt(0),C="~".charCodeAt(0)-Q;let E;const e=()=>{const A=Math.pow(5,4*Math.random());E=B(i,A)},i=()=>{e();const A=String.fromCharCode(Q+Math.floor(Math.random()*C));I(A)};return()=>(e(),()=>clearInterval(E))}],["recording",function(A,g,I){let B,Q,C,E,e,i,V,t,o,{feed:s,onInput:n,onMarker:r,now:a,setTimeout:c,setState:w,logger:D}=g,{idleTimeLimit:h,startAt:l,loop:M,posterTime:y,markers:G,pauseOnMarkers:k,cols:F,rows:d}=I,u=0,N=0,f=0;async function R(A,g){const I=await fetch(A,g);if(!I.ok)throw`failed fetching recording from ${A}: ${I.status} ${I.statusText}`;return I}function q(){const A=C[u];A?V=c(J,function(A){let g=1e3*A-(a()-t);return g<0&&(g=0),g}(A[0])):(Y(),f++,!0===M||"number"==typeof M&&f1e3*g[0]);q()}function Y(){clearTimeout(V),V=null}function U(A){const[g,I,B]=A;if("o"===I)s(B);else if("i"===I)n(B);else if("m"===I&&(r(B),k))return S(),o=1e3*g,w("idle",{reason:"paused"}),!0;return!1}function S(){return!V||(Y(),o=a()-t,!0)}function p(){t=a()-o,o=null,q()}function L(A){const g=!!V;S();const I=(o??0)/1e3;if("string"==typeof A)"<<"===A?A=I-5:">>"===A?A=I+5:"<<<"===A?A=I-.1*e:">>>"===A?A=I+.1*e:"%"===A[A.length-1]&&(A=parseFloat(A.substring(0,A.length-1))/100*e);else if("object"==typeof A)if("prev"===A.marker)A=m(I)??0,g&&I-A<1&&(A=m(A)??0);else if("next"===A.marker)A=function(A){if(0==E.length)return;let g,I=E.length-1,B=E[I];for(;B&&B[0]>A;)g=B[0],B=E[--I];return g}(I)??e;else if("number"==typeof A.marker){const g=E[A.marker];if(void 0===g)throw`invalid marker index: ${A.marker}`;A=g[0]}const B=Math.min(Math.max(A,0),e);B[A[0],"o",A[1]])),C=new xg(I).map((A=>[A[0],"i",A[1]])),E=new xg(B).map(Og);return Q.multiplex(C,((A,g)=>A[0]A[0]1&&void 0!==arguments[1]?arguments[1]:1/60;return B=>{let Q=0,C=0;return{step:A=>{Q++,void 0!==g?A[1]===g[1]&&A[0]-g[0]{void 0!==g&&(B(g),C++),A.debug(`batched ${Q} frames to ${C} frames`)}}}}(g,C)).map(function(A,g,I){let B=0,Q=0;return function(C){const E=C[0]-B-A;return B=C[0],E>0&&(Q+=E,C[0]"m"!==A[1])).multiplex(e,((A,g)=>A[0]"i"===A[1]?[A[0]+E,A[1],A[2]]:A)),i.sort(((A,g)=>A[0]-g[0])));const t=i[i.length-1][0],o=B-V.offset;return{...A,events:i,duration:t,effectiveStartAt:o}}(await g(await function(A){let{url:g,data:I,fetchOpts:B={}}=A;if("string"==typeof g)return R(g,B);if(Array.isArray(g))return Promise.all(g.map((A=>R(A,B))));if(void 0!==I)return"function"==typeof I&&(I=I()),I instanceof Promise||(I=Promise.resolve(I)),I.then((A=>"string"==typeof A||A instanceof ArrayBuffer?new Response(A):A));throw"failed fetching recording file: url/data missing in src"}(A),{encoding:o}),D,{idleTimeLimit:h,startAt:l,minFrameTime:I,inputOffset:V,markers_:G});if(({cols:B,rows:Q,events:C,duration:e,effectiveStartAt:i}=s),F=F??B,d=d??Q,0===C.length)throw"recording is missing events";void 0!==t&&function(A,g){const I=document.createElement("a"),B=A.events.map((A=>"m"===A[1]?[A[0],A[1],A[2].label]:A)),Q=function(A){return`${JSON.stringify({version:2,width:A.cols,height:A.rows})}\n${A.events.map(JSON.stringify).join("\n")}\n`}({...A,events:B});I.href=URL.createObjectURL(new Blob([Q],{type:"text/plain"})),I.download=g,I.click()}(s,t);const n=void 0!==y?(r=y,C.filter((A=>A[0]A[2]))):void 0;var r;return E=C.filter((A=>"m"===A[1])).map((A=>[A[0],A[2].label])),{cols:B,rows:Q,duration:e,theme:s.theme,poster:n,markers:E}},play:function(){if(V)throw"already playing";if(void 0===C[u])throw"already ended";return null!==i&&L(i),p(),!0},pause:S,seek:L,step:function(){let A=C[u++];for(;void 0!==A&&"o"!==A[1];)A=C[u++];if(void 0===A)return;s(A[2]);const g=A[0];N=g,o=1e3*g,i=null},restart:function(){if(V)throw"still playing";if(void 0!==C[u])throw"not ended";return L(0),p(),!0},stop:S,getCurrentTime:function(){return V?(a()-t)/1e3:(o??0)/1e3}}}],["websocket",function(A,g){let{url:I,bufferTime:B,reconnectDelay:Q=gI,minFrameTime:C}=A,{feed:E,reset:e,setState:i,logger:V}=g;V=new vg(V,"websocket: ");const t=new TextDecoder;let o,s,n,r=new HA,a=0,c=!1,w=!1;function D(A){void 0!==s&&s.stop(),s=$g(B,E,(A=>r.setTime(A)),A,C,V)}function h(A){if("string"==typeof A.data)V.info("activating asciicast-compatible handler"),D(),o.onmessage=l,l(A);else{const g=new Uint8Array(A.data);if(65==g[0]&&76==g[1]&&105==g[2]&&83==g[3])1==g[4]?(V.info("activating ALiS v1 handler"),o.onmessage=y):(V.warn(`unsupported ALiS version (${g[4]})`),o.close());else{V.info("activating raw text handler"),D();const I=t.decode(g),B=function(A){const g=A.match(/\x1b\[8;(\d+);(\d+)t/);if(null!==g)return[parseInt(g[2],10),parseInt(g[1],10)]}(I)??function(A){const g=A.match(/\[.*COLUMNS="(\d{1,3})" LINES="(\d{1,3})".*\]/);if(null!==g)return[parseInt(g[1],10),parseInt(g[2],10)]}(I);if(void 0!==B){const[A,g]=B;d(A,g,0,void 0)}o.onmessage=F,F(A)}}}function l(A){const g=JSON.parse(A.data);Array.isArray(g)?s.pushEvent(g):void 0!==g.cols||void 0!==g.width?d(g.cols??g.width,g.rows??g.height,g.time,g.init??void 0):"offline"===g.status&&u()}const M=54;function y(A){const g=A.data,I=new DataView(g),B=I.getUint8(0);let Q=1;if(1===B){const A=I.getUint16(Q,!0);Q+=2;const B=I.getUint16(Q,!0);Q+=2;const C=I.getFloat32(Q,!0);Q+=4;const E=I.getUint8(Q);let e;Q+=1,1===E&&(e=function(A){const g=G(A[0],A[1],A[2]),I=G(A[3],A[4],A[5]),B=[];for(let g=0;g<16;g++)B.push(G(A[3*g+6],A[3*g+7],A[3*g+8]));return{foreground:g,background:I,palette:B}}(new Uint8Array(g,Q,M)),Q+=M);const i=I.getUint32(Q,!0);let V;Q+=4,i>0&&(V=t.decode(new Uint8Array(g,Q,i)),Q+=i),d(A,B,C,V,e)}else if(111===B){const A=I.getFloat32(1,!0),B=I.getUint32(5,!0),Q=t.decode(new Uint8Array(g,9,B));s.pushEvent([A,"o",Q])}else if(114===B){const A=I.getFloat32(1,!0),g=I.getUint16(5,!0),B=I.getUint16(7,!0);s.pushEvent([A,"r",`${g}x${B}`])}else 4===B?u():V.debug(`unknown frame type: ${B}`)}function G(A,g,I){return`#${k(A)}${k(g)}${k(I)}`}function k(A){return A.toString(16).padStart(2,"0")}function F(A){s.pushText(t.decode(A.data))}function d(A,g,I,B,Q){V.debug(`stream reset (${A}x${g} @${I})`),i("playing"),D(I),e(A,g,B,Q),r=new mA,w=!0,"number"==typeof I&&r.setTime(I)}function u(){V.info("stream offline"),i("offline",w?{message:"Stream ended"}:{message:"Stream offline"}),r=new HA}function N(){o=new WebSocket(I),o.binaryType="arraybuffer",o.onopen=()=>{V.info("opened"),n=setTimeout((()=>{a=0}),1e3)},o.onmessage=h,o.onclose=A=>{if(c||1e3===A.code||1005===A.code)V.info("closed"),i("ended",{message:"Stream ended"});else{clearTimeout(n);const A=Q(a++);V.info(`unclean close, reconnecting in ${A}...`),i("loading"),setTimeout(N,A)}},w=!1}return{play:()=>{N()},stop:()=>{c=!0,void 0!==s&&s.stop(),void 0!==o&&o.close()},getCurrentTime:()=>r.getTime()}}]]),CI=new Map([["asciicast",Tg],["typescript",async function(A,g){let{encoding:I}=g;const B=new TextDecoder(I);let Q,C,E=(await A[0].text()).split("\n").filter((A=>A.length>0)).map((A=>A.split(" ")));E[0].length<3&&(E=E.map((A=>["O",A[0],A[1]])));const e=await A[1].arrayBuffer(),i=new Uint8Array(e),V=i.findIndex((A=>10==A))+1,t=B.decode(i.subarray(0,V)).match(/COLUMNS="(\d+)" LINES="(\d+)"/);null!==t&&(Q=parseInt(t[1],10),C=parseInt(t[2],10));const o={array:i,cursor:V};let s=o;if(void 0!==A[2]){const g=await A[2].arrayBuffer();s={array:new Uint8Array(g),cursor:V}}const n=[];let r=0;for(const A of E)if(r+=parseFloat(A[1]),"O"===A[0]){const g=parseInt(A[2],10),I=o.array.subarray(o.cursor,o.cursor+g),Q=B.decode(I);n.push([r,"o",Q]),o.cursor+=g}else if("I"===A[0]){const g=parseInt(A[2],10),I=s.array.subarray(s.cursor,s.cursor+g),Q=B.decode(I);n.push([r,"i",Q]),s.cursor+=g}else if("S"===A[0]&&"SIGWINCH"===A[2]){const g=parseInt(A[4].slice(5),10),I=parseInt(A[3].slice(5),10);n.push([r,"r",`${g}x${I}`])}else"H"===A[0]&&"COLUMNS"===A[2]?Q=parseInt(A[3],10):"H"===A[0]&&"LINES"===A[2]&&(C=parseInt(A[3],10));return Q=Q??80,C=C??24,{cols:Q,rows:C,events:n}}],["ttyrec",async function(A,g){let{encoding:I}=g;const B=new TextDecoder(I),Q=await A.arrayBuffer(),C=new Uint8Array(Q),E=II(C),e=E.time,i=B.decode(E.data).match(/\x1b\[8;(\d+);(\d+)t/),V=[];let t=80,o=24;null!==i&&(t=parseInt(i[2],10),o=parseInt(i[1],10));let s=0,n=II(C);for(;void 0!==n;){const A=n.time-e,g=B.decode(n.data);V.push([A,"o",g]),s+=n.len,n=II(C.subarray(s))}return{cols:t,rows:o,events:V}}]]);return A.create=function(A,g){let I=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};const B=I.logger??new bg,Q=new XA(function(A){if("function"==typeof A)return A;"string"==typeof A&&(A="ws://"==A.substring(0,5)||"wss://"==A.substring(0,6)?{driver:"websocket",url:A}:"clock:"==A.substring(0,6)?{driver:"clock"}:"random:"==A.substring(0,7)?{driver:"random"}:"benchmark:"==A.substring(0,10)?{driver:"benchmark",url:A.substring(10)}:{driver:"recording",url:A});void 0===A.driver&&(A.driver="recording");if("recording"==A.driver&&(void 0===A.parser&&(A.parser="asciicast"),"string"==typeof A.parser)){if(!CI.has(A.parser))throw`unknown parser: ${A.parser}`;A.parser=CI.get(A.parser)}if(QI.has(A.driver)){const g=QI.get(A.driver);return(I,B)=>g(A,I,B)}throw`unsupported driver: ${JSON.stringify(A)}`}(A),{logger:B,cols:I.cols,rows:I.rows,loop:I.loop,speed:I.speed,preload:I.preload,startAt:I.startAt,poster:I.poster,markers:I.markers,pauseOnMarkers:I.pauseOnMarkers,idleTimeLimit:I.idleTimeLimit}),C=function(A,g){const I=80,B=24,Q=document.createElement("div");let C;Q.style.height="0px",Q.style.overflow="hidden",Q.style.fontSize="15px",document.body.appendChild(Q);const E=O((()=>(C=K(lg,{cols:I,rows:B,lineHeight:g,fontFamily:A,lines:[]}),C)),Q),e={charW:C.clientWidth/I,charH:C.clientHeight/B,bordersW:C.offsetWidth-C.clientWidth,bordersH:C.offsetHeight-C.clientHeight};return E(),document.body.removeChild(Q),e}(I.terminalFontFamily,I.terminalLineHeight),E={logger:B,core:Q,cols:I.cols,rows:I.rows,fit:I.fit,controls:I.controls??"auto",autoPlay:I.autoPlay??I.autoplay,terminalFontSize:I.terminalFontSize,terminalFontFamily:I.terminalFontFamily,terminalLineHeight:I.terminalLineHeight,theme:I.theme,...C};let e;const i=O((()=>(e=K(zg,E),e)),g),V={el:e,dispose:i,getCurrentTime:()=>Q.getCurrentTime(),getDuration:()=>Q.getDuration(),play:()=>Q.play(),pause:()=>Q.pause(),seek:A=>Q.seek(A),addEventListener:(A,g)=>Q.addEventListener(A,g.bind(V))};return V},A}({}); diff --git a/docs/extra/asciinema-theme-dracula.css b/docs/extra/asciinema-theme-dracula.css deleted file mode 100644 index f3638e97..00000000 --- a/docs/extra/asciinema-theme-dracula.css +++ /dev/null @@ -1,141 +0,0 @@ -.asciinema-theme-dracula .asciinema-terminal { - color: #f8f8f2; - background-color: #282a36; - border-color: #282a36; -} - -.asciinema-theme-dracula .fg-bg { - color: #282a36; -} - -.asciinema-theme-dracula .bg-fg { - background-color: #f8f8f2; -} - -.asciinema-theme-dracula .fg-0 { - color: #21222c; -} - -.asciinema-theme-dracula .bg-0 { - background-color: #21222c; -} - -.asciinema-theme-dracula .fg-1 { - color: #ff5555; -} - -.asciinema-theme-dracula .bg-1 { - background-color: #ff5555; -} - -.asciinema-theme-dracula .fg-2 { - color: #50fa7b; -} - -.asciinema-theme-dracula .bg-2 { - background-color: #50fa7b; -} - -.asciinema-theme-dracula .fg-3 { - color: #f1fa8c; -} - -.asciinema-theme-dracula .bg-3 { - background-color: #f1fa8c; -} - -.asciinema-theme-dracula .fg-4 { - color: #bd93f9; -} - -.asciinema-theme-dracula .bg-4 { - background-color: #bd93f9; -} - -.asciinema-theme-dracula .fg-5 { - color: #ff79c6; -} - -.asciinema-theme-dracula .bg-5 { - background-color: #ff79c6; -} - -.asciinema-theme-dracula .fg-6 { - color: #8be9fd; -} - -.asciinema-theme-dracula .bg-6 { - background-color: #8be9fd; -} - -.asciinema-theme-dracula .fg-7 { - color: #f8f8f2; -} - -.asciinema-theme-dracula .bg-7 { - background-color: #f8f8f2; -} - -.asciinema-theme-dracula .fg-8 { - color: #6272a4; -} - -.asciinema-theme-dracula .bg-8 { - background-color: #6272a4; -} - -.asciinema-theme-dracula .fg-9 { - color: #ff6e6e; -} - -.asciinema-theme-dracula .bg-9 { - background-color: #ff6e6e; -} - -.asciinema-theme-dracula .fg-10 { - color: #69ff94; -} - -.asciinema-theme-dracula .bg-10 { - background-color: #69ff94; -} - -.asciinema-theme-dracula .fg-11 { - color: #ffffa5; -} - -.asciinema-theme-dracula .bg-11 { - background-color: #ffffa5; -} - -.asciinema-theme-dracula .fg-12 { - color: #d6acff; -} - -.asciinema-theme-dracula .bg-12 { - background-color: #d6acff; -} - -.asciinema-theme-dracula .fg-13 { - color: #ff92df; -} - -.asciinema-theme-dracula .bg-13 { - background-color: #ff92df; -} - -.asciinema-theme-dracula .fg-14 { - color: #a4ffff; -} - -.asciinema-theme-dracula .bg-14 { - background-color: #a4ffff; -} - -.asciinema-theme-dracula .fg-15 { - color: #ffffff; -} - -.asciinema-theme-dracula .bg-15 { - background-color: #ffffff; -} diff --git a/docs/extra/asciinema-theme-gimlb.css b/docs/extra/asciinema-theme-gimlb.css new file mode 100644 index 00000000..0455b5d2 --- /dev/null +++ b/docs/extra/asciinema-theme-gimlb.css @@ -0,0 +1,45 @@ +/* Tomorrow Day colour palette. */ +.asciinema-player-theme-gimlb-auto { + --term-color-foreground: #4d4d4c; + --term-color-background: #ffffff; + --term-color-0: #e0e0e0; + --term-color-1: #c82829; + --term-color-2: #718c00; + --term-color-3: #eab700; + --term-color-4: #4271ae; + --term-color-5: #8959a8; + --term-color-6: #3e999f; + --term-color-7: #4d4d4c; + --term-color-8: #8e908c; + --term-color-9: #c82829; + --term-color-10: #718c00; + --term-color-11: #eab700; + --term-color-12: #4271ae; + --term-color-13: #8959a8; + --term-color-14: #3e999f; + --term-color-15: #1d1f21; +} + +/* Tomorrow Night colour palette. */ +@media (prefers-color-scheme: dark) { + .asciinema-player-theme-gimlb-auto { + --term-color-foreground: #c5c8c6; + --term-color-background: #1d1f21; + --term-color-0: #282a2e; + --term-color-1: #cc6666; + --term-color-2: #b5bd68; + --term-color-3: #f0c674; + --term-color-4: #81a2be; + --term-color-5: #b294bb; + --term-color-6: #8abeb7; + --term-color-7: #c5c8c6; + --term-color-8: #969896; + --term-color-9: #cc6666; + --term-color-10: #b5bd68; + --term-color-11: #f0c674; + --term-color-12: #81a2be; + --term-color-13: #b294bb; + --term-color-14: #8abeb7; + --term-color-15: #ffffff; + } +} diff --git a/docs/extra/wrapper.js b/docs/extra/wrapper.js index 5519d0a8..c3bee74f 100644 --- a/docs/extra/wrapper.js +++ b/docs/extra/wrapper.js @@ -30,7 +30,7 @@ function addAsciinemaPlayer(cast_file, container_id) { const player = AsciinemaPlayer.create( cast_file, document.getElementById(container_id), - { poster: 'npt:0:0.1', theme: 'dracula', fit: 'width' }); + { poster: 'npt:0:0.1', theme: 'gimlb-auto', fit: 'width' }); // Find all elements that seek to specific times in this video. const selector = '[data-video="' + container_id + '"][data-seek-to]' diff --git a/docs/how-to-contribute.md b/docs/how-to-contribute.md index 123c7849..c034ebd0 100644 --- a/docs/how-to-contribute.md +++ b/docs/how-to-contribute.md @@ -158,3 +158,5 @@ For example, the following code is used to display the video recording on the [C 2. Show how to use nano 3. Show how to use vim ``` + +You can use the [asciinema-scripted](https://github.com/robmoss/asciinema-scripted) tool to generate scripted recordings. diff --git a/mkdocs.yml b/mkdocs.yml index 851e036b..c9854d83 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -103,6 +103,25 @@ nav: - "Fixing a bug in pypfilt": community/case-studies/moss-pypfilt-earlier-states.md - "Incorrect data in a pre-print figure": community/case-studies/moss-incorrect-data-pre-print.md - "Pen and paper version control": community/case-studies/campbell-pen-and-paper-version-control.md + - "Training events": + - community/training/README.md + - "Introduction to Debugging": + - community/training/debugging/README.md + - "Learning objectives": community/training/debugging/learning-objectives.md + - "What is debugging?": community/training/debugging/what-is-debugging.md + - "Understanding error messages": community/training/debugging/understanding-error-messages.md + - "Why are debuggers useful?": community/training/debugging/why-are-debuggers-useful.md + - "Using a debugger": community/training/debugging/using-a-debugger.md + - "When something fails": community/training/debugging/when-something-fails.md + - "Real-world stories": community/training/debugging/real-world-stories.md + - "Example: Square numbers": community/training/debugging/example-square-numbers.md + - "Exercise: Perfect numbers": community/training/debugging/exercise-perfect-numbers.md + - "Exercise: Python vs R": community/training/debugging/exercise-python-vs-r.md + - "Building your skills": community/training/debugging/building-your-skills.md + - "Debugging manifesto": community/training/debugging/manifesto.md + - "Resources": community/training/debugging/resources.md + - "Exercise solutions": community/training/debugging/solutions.md + - "Acknowledgements": community/training/debugging/acknowledgements.md markdown_extensions: - admonition @@ -115,7 +134,18 @@ markdown_extensions: emoji_generator: !!python/name:material.extensions.emoji.to_svg - pymdownx.highlight - pymdownx.inlinehilite - - pymdownx.superfences + - pymdownx.snippets: + base_path: [ + # Locate snippets relative to the documentation root directory. + "docs/", + # Locate snippets in the 2024 debugging workshop directory. + "docs/community/training/debugging", + ] + - pymdownx.superfences: + custom_fences: + - name: mermaid + class: mermaid + format: !!python/name:pymdownx.superfences.fence_code_format - pymdownx.tabbed: alternate_style: true - toc: @@ -162,9 +192,14 @@ theme: extra_css: - extra/asciinema-player.css - - extra/asciinema-theme-dracula.css + - extra/asciinema-theme-gimlb.css - extra/larger-admonitions.css extra_javascript: - extra/asciinema-player.min.js - extra/wrapper.js + +# Ignore TOML scripts for generating asciinema recordings. +exclude_docs: | + *.toml + *.yaml diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 00000000..db9e5b31 --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,14 @@ +# Formatter and linter settings for Python code examples. + +[tool.ruff] +line-length = 78 +target-version = "py310" + +[tool.ruff.lint] +# Enable pyflakes (F), pycodestyle (E, W), flake8-bugbear (B), pyupgrade (UP), +# flake8-debugger (T10), and NumPy (NPY). +select = ["F", "E", "W", "B", "UP", "T10", "NPY"] + +[tool.ruff.format] +quote-style = "single" +docstring-code-format = true